자주쓰는 SQL SELECT WHERE FROM JOIN WITH 총정리

250x250
728x90
select payment_method, count(*) as cnt from orders o
where o.course_title = '앱개발 종합반'
group by payment_method​
select course_id, avg(likes) from checkins
group by course_id;​
select * from users
order by email;

자주쓰는 SQL SELECT WHERE FROM JOIN WITH GROUPBY  ORDER BY

 

Select 쿼리문은, 데이터베이스에서 '데이터를 선택해서 가져오겠다'는 의미입니다.

Where 절은, Select 쿼리문으로 가져올 데이터에 조건을 걸어주는 것을 의미해요.

 

예) Select 쿼리문에 Where 절 함께 써보기

 

select * from orders
where payment_method = "kakaopay";

 

아래 이미지 쿼리와 적용 화면입니다. 

select * from orders
where course_title = "앱개발 종합반" and payment_method = "kakaopay";

sql쿼리 select 쿼리 FROM WHERE

Group by는 일한 범주를 갖는 데이터를 하나로 묶어서, 범주별 통계를 내주는 것

 

 

에러가 안 나는 쿼리를 작성하기 위해서는 SQL 쿼리가 실행되는 순서를 아는 것이 중요!

select name, count(*) from users
group by name
order by count(*);

-> 위 쿼리가 실행되는 순서: from → group by → select → order by

 

  1. from users: users 테이블 데이터 전체를 가져옵니다.
  2. group by name: users 테이블 데이터에서 같은 name을 갖는 데이터를 합쳐줍니다.
  3. select name, count(*): name에 따라 합쳐진 데이터가 각각 몇 개가 합쳐진 것인지 세어줍니다.
  4. 예) 이**, 이**, 김**, 김**, 박** 이렇게 데이터가 있었다면, 이는 2개, 김은 2개, 박**은 1개겠죠!
  5. order by count(*): 합쳐진 데이터의 개수에 따라 오름차순으로 정렬해줍니다

 

Order by 정렬하는 기능입니다. 

 

문제 !

정답 : 

select course_id, avg(likes) from checkins
group by course_id;

별칭 기능: Alias

select payment_method, count(*) as cnt from orders o
where o.course_title = '앱개발 종합반'
group by payment_method

 

Join이란? 두 테이블의 공통된 정보 (key값)를 기준으로 테이블을 연결해서 한 테이블처럼 보는 것을 의미해요. 예) user_id 필드를 기준으로 users 테이블과 orders 테이블을 연결해서 한 눈에 보고 싶어요!

Join의 종류:  Inner Join(왼쪽이미지) , Left Join(오른쪽이미지) 

select u.name, count(u.name) as count_name from orders o
inner join users u
on o.user_id = u.user_id 
where u.email like '%naver.com'
group by u.name

위 쿼리가 실행되는 순서: from → join → where → group by → select

 

  1. from orders o: orders 테이블 데이터 전체를 가져오고 o라는 별칭을 붙입니다.
  2. inner join users u on o.user_id = u.user_id : users 테이블을 orders 테이블에 붙이는데, orders 테이블의 user_id와 동일한 user_id를 갖는 users 테이블 데이터를 붙입니다. (*users 테이블에 u라는 별칭을 붙입니다)
  3. where u.email like '%naver.com': users 테이블 email 필드값이 naver.com으로 끝나는 값만 가져옵니다.
  4. group by u.name: users 테이블의 name값이 같은 값들을 뭉쳐줍니다.
  5. select u.name, count(u.name) as count_name : users 테이블의 name필드와 name 필드를 기준으로 뭉쳐진 갯수를 세어서 출력해줍니다.

Join의 실행 순서는 항상 from 과 붙어다닌다고 생각하면 편해요!

 

 

728x90

댓글

Designed by JB FACTORY