본문 바로가기

내배단_SQL

SQL 문법 총정리

👉 쿼리(Query)문이란?

쿼리는 질의를 의미 / 데이터베이스에 명령을 내리는 것을 의미

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

 

Select 쿼리문은 1) 어떤 테이블에서 2) 어떤 필드의 데이터를 가져올지 로 구성됩니다.

  • 테이블: orders라는 엑셀 시트명 보이시죠? 테이블은 데이터가 담긴 엑셀 시트와 동일합니다. 이런 형태의 값이 데이터베이스에 담기면, orders라는 이름의 테이블이 되겠죠.
  • 필드: order_no, created_at, course_title, user_id, payment_method, email 각각이 필드입니다.

 

[꿀팁🍯] 이렇게 쿼리를 작성하면 편해요!

1) show tables로 어떤 테이블이 있는지 살펴보기

2) 제일 원하는 정보가 있을 것 같은 테이블에 select * from 테이블명 쿼리 날려보기

3) 원하는 정보가 없으면 다른 테이블에도 2)를 해보기

4) 테이블을 찾았다! 조건을 걸 필드를 찾기

5) select * from 테이블명 where 조건 이렇게 쿼리 완성!

 

 

Where 절과 자주 같이쓰는 문법 배우기

 

'같지 않음' 조건은 !=

'!=' 에서 ! (느낌표)는 부정 (not)을 의미합니다. '='는 같음을 의미하니, '!='는 같지 않음이겠죠!

'범위' 조건은 between

'포함' 조건은 in

'패턴' 조건은 like

  • where email like 'a%'        : email 필드값이 a로 시작하는 모든 데이터
  • where email like '%a'        : email 필드값이 a로 끝나는 모든 데이터
  • where email like '%co%'    :  email 필드값에 co를 포함하는 모든 데이터
  • where email like 'a%o'      : email 필드값이 a로 시작하고 o로 끝나는 모든 데이터

일부 데이터만 가져오기: Limit

중복 데이터는 제외하고 가져오기: Distinct

몇 개인지 숫자 세보기: Count

 

Group by란?

동일한 범주를 갖는 데이터를 하나로 묶어서, 범주별 통계를 내주는 것을 의미해요.

Group by를 이용하면 1) 같은 성씨의 데이터를 하나로 묶고 2) 각 성씨의 회원수를 구할 수 있어요.

 

통계: 최대 / 최소 / 평균 / 개수

 

개수 : count (*)

최대 : max (필드명)

최소 : min (필드명)

합계 : sum (필드명)

평균 : avg (필드명)    [소수점 첫째자리 기준설정 : round(avg(필드명), 1)]

 

깔끔하게 데이터를 정렬해보자: Order by

웹개발 종합반의  결제수단별 주문건수 세어보기 (오름차순)

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

 

  1. from orders                                  : users 테이블 데이터 전체를 가져옵니다.
  2. where course_title = "웹개발 종합반"  : 웹개발 종합반 데이터만 남겨줍니다.
  3. group by payment_method              : 같은 payment_method을 갖는 데이터를 합쳐줍니다.
  4. select payment_method, count(*)       : payment_method에 따라 합쳐진 데이터가 각각 몇 개가 합쳐진 것인지 세어줍니다.
  5. 예) CARD, CARD, kakaopay 이렇게 데이터가 있었다면, CARD는 2개, kakaopay는 1개겠죠!

만약 order by가 추가된다면? order by는 맨 나중에 실행됩니다! (결과물을 정렬해주는 것이기 때문!)

 

 

[꿀팁] 이렇게 쿼리를 작성하면 편해요!

1) show tables로 어떤 테이블이 있는지 살펴보기

2) 제일 원하는 정보가 있을 것 같은 테이블에 select * from 테이블명 limit 10 쿼리 날려보기

3) 원하는 정보가 없으면 다른 테이블에도 2)를 해보기

4) 테이블을 찾았다! 범주를 나눠서 보고싶은 필드를 찾기

5) 범주별로 통계를 보고싶은 필드를 찾기

6) SQL 쿼리 작성하기!

 

 

 

별칭 기능: Alias

쿼리가 점점 길어지면서 종종 헷갈리는 일이 생길 수 있습니다.

그래서 SQL은 Alias라는 별칭 기능을 지원합니다.

 

 

Join이란?

두 테이블의 공통된 정보 (key값)를 기준으로 테이블을 연결해서 한 테이블처럼 보는 것을 의미해요.

예) user_id 필드를 기준으로 users 테이블과 orders 테이블을 연결해서 한 눈에 보고 싶어요!

 

SQL의 Join은 엑셀의 vlookup과 동일하다고 생각하시면 됩니다 :-)

 

Join의 종류: Left Join, Inner Join

 

Left join
Inner Join (교집합)

 

 

네이버 이메일 사용하는 유저의 성씨별 주문건수 세어보기

위 쿼리가 실행되는 순서: 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 필드를 기준으로 뭉쳐진 갯수를 세어서 출력해줍니다.

 

Subquery: 원하는 데이터를 더 쉽게 얻어보기

Subquery란? 쿼리 안의 쿼리라는 의미

하위 쿼리의 결과를 상위 쿼리에서 사용하면, SQL 쿼리가 훨씬 간단해져요!

  • 즉, Subquery를 사용하지 않아도 원하는 데이터를 얻어낼 수 있겠지만, 더 편하고 간단하게 원하는 데이터를 얻기 위해 사용되는 파워풀한 기능입니다.
  • Subquery에 대한 이해도가 생기면, With구문을 이용해서 더 간단하게 만들어볼게요!

 

Where 에 들어가는 Subquery

 

쿼리가 실행되는 순서를 이렇게 상상하면 편해요!

(1) from 실행: users 데이터를 가져와줌

(2) Subquery 실행: 해당되는 user_id의 명단을 뽑아줌

(3) where .. in 절에서 subquery의 결과에 해당되는 'user_id의 명단' 조건으로 필터링 해줌

(4) 조건에 맞는 결과 출력

 

 

Select 에 들어가는 Subquery

 

쿼리가 실행되는 순서를 이렇게 상상하면 편해요!

(1) 밖의 select * from 문에서 데이터를 한줄한줄 출력하는 과정에서

(2) select 안의 subquery가 매 데이터 한줄마다 실행되는데

(3) 그 데이터 한 줄의 user_id를 갖는 데이터의 평균 좋아요 값을 subquery에서 계산해서

(4) 함께 출력해준다!

 

 

From 에 들어가는 Subquery (가장 많이 사용되는 유형!)

 

쿼리가 실행되는 순서를 이렇게 상상하면 편해요!

(1) 먼저 서브쿼리의 select가 실행되고,

(2) 이것을 테이블처럼 여기고 밖의 select가 실행!

'내배단_SQL' 카테고리의 다른 글

내배단 SQL 4주차 개발일지  (0) 2022.04.17
내배단 SQL 3주차 개발일지  (0) 2022.04.16
내배단 SQL 2주차 개발일지  (0) 2022.04.13
내배단 SQL 1주차 개발일지  (0) 2022.04.13