글쎄
SQL 문법 정리 본문
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