Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

글쎄

SQL 문법 정리 본문

카테고리 없음

SQL 문법 정리

시크꺼 2021. 4. 29. 09:38

1. 기본문법

SQL 기본문법은 아래의 순서로 작성한다. 

1) with 절

2) SELECT 쿼리문

3) where 절

4) join

5) group by, order by

 

2) SELECT 쿼리문

Select 쿼리문은 가장 기본이 되는 문법이며, 살펴보고자 하는 테이블에서 특정필드를 불러오거나, 특정필드를 생성할때 사용한다. 

SELECT 선택필드명, 필드생성 as 필드명 FROM Table명 a

 

가) 필드선택

- 선택필드명 : table에 존재하는 a의 필드를 가져올 수 있다. 

- 필드생성 as 필드명

각종 계산으로 특정 필드를 생성할 수 있다. 

- sum(c) as sum : sum이라는 필드를 생성해서 c열의 합을 구해서 넣는다.

- avg(c) as average : average라는 필드를 생성해서 c열의 평균을 구할 수 있다. 

- count(c) as cnt : cnt라는 필드를 생성해서 c열의 개수를 구할수 있다. 

- distinct(c) as payment_methord : payment_methord라는 필드를 생성해서 c열에서 중복을 제거한 값을 배열한다. 

나) 테이블 지정

from table명 a 처럼 정의하는데, 테이블명 뒤에 a는 해당 테이블을 지칭하는 것으로 여러개의 테이블을 조인해서 사용하는 경우 해당 테이블 내 필드를 지칭할 때 a.필드명 처럼 사용이 가능하다. 

ex)

주문한 회원 중 성이 이씨인 회원의 주문건수는?

select user_id, count(*) from orders o

inner join members m on o.user_id = m.user_id

where m.name like '%이**'

위 SQL은 orders테이블에는 성씨에 대한 정보가 없으므로, 2개의 테이블(orders, members)을 조인해서 사용하고 있는데, 

orders 테이블에도 user_id 필드가 존재하고,  members 테이블에도 user_id 필드가 존재하므로

이렇게 만들어진 테이블에서는 user_id 필드를 생성해야 하는 경우 두 테이블에 모두 존재하므로 에러가 발생한다.

따라서 정확한 문법은 아래와 같다. 

select o.user_id, count(*) from orders o

inner join members m on o.user_id = m.user_id

where m.name like '%이**'

 

3) Where 절

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

예1) orders 테이블에서 결제수단이 카카오페이인 데이터만 가져와줘!

Select * From orders o

where o.payment_methord = 'kakao pay'

 

예2) point_users 테이블에서 포인트가 5000점 이상인 데이터만 가져와줘!

Select * From point_users pu

where pu.point >= 5000

❖ 숫자열에는 ' '를 사용하지 않는다. 

 

예3) orders 테이블에서 주문한 강의가 앱개발 종합반이면서, 결제수단이 카드인 데이터만 가져와줘!

Select * From orders o

where o.course_title = '앱개발 종합반' and o.payment_method = 'CARD'

❖ where절 내 조건을 추가적으로 부여할때 and나 or를 사용할 수 있다. 

 

4) join

동일한 필드를 공유하는 서로 다른 테이블의 각각의 필드를 활용해야 하는 경우 두개의 테이블을 연결할때 사용한다. 

 

1) With 절

특정 쿼리를 임시테이블로 지정하는 방법이다. 

with table as (쿼리)

ex) 

with table1 as (

                       select course_id, count(distinct(user_id)) as cnt_checkins from checkins group by course_id

                       ),

        table2 as (

                       select course_id, count(*) as cnt_total from orders group by course_id

                        )

select c.title,

          a.cnt_checkins,

          b.cnt_total,

          (a.cnt_checkins/b.cnt_total) as ratio

   from table1 a

inner join table2 b on a.course_id = b.course_id

inner join courses c on a.course_id = c.course_id