티스토리 뷰
그동안 배웠던 문법들을 간단한 설명, 괜찮은 예시와 함께 총 정리하였다.
show 테이블: 테이블 목록 보기
select 필드, 필드, ... from 테이블: 테이블의 특정 필드 선택하기
- 필드명에 *을 사용하면 모든 필드 의미
where: select 쿼리문으로 가져올 데이터에 조건 걸기
- 값 조건: select 필드 from 테이블 where 필드 = "데이터"
- 범위 조건1: select 필드 from 테이블 where 데이터 > 20000
- 범위 조건2: select 필드 from 테이블 where between "데이터" and "데이터"
- 여러 조건: select 필드 from 테이블 where 필드1 = "데이터1" and 필드2 = "데이터2"
- 포함 조건: select 필드 from 테이블 where 필드 in (n, m);
- 패턴(무자열 규칙) 조건: select 필드 from 테이블 where 필드 like 'a%' (or %a, %a%, a%b)
limit: 일부 데이터만 보기
- select 필드 from 테이블
where 필드 = "데이터"
limit n;
distinct: 중복 데이터 제외하기
- select distinct(필드) from 테이블
count: 개수 세기
- select count(필드) from 테이블
group by: 범주의 통계 내기
- select 필드 from 테이블 group by 필드
- 동일한 범주의 개수 구하기: select 필드, count(*) from 테이블 group by 필드
- 동일한 범주에서의 최소값 구하기: select 필드, min(필드) from 테이블 group by 필드
- 동일한 범주에서의 최대값 구하기: select 필드, max(필드) from 테이블 group by 필드
- 동일한 범주의 평균값 구하기: select 필드, avg(필드) from 테이블 group by 필드
- 동일한 범주의 합계 구하기: select 필드, sum(필드) from 테이블 group by 필드
order by: 정렬하기
- select 필드 from 테이블 group by 필드 order by count(*)
- 내림차순으로 select 필드 from 테이블 order by 필드 desc
alias: 별칭기능
join: 두 테이블의 공통된 정보(key 값)를 기준으로 테이블을 연결하기
- select * from users u
left join point_users p
on u.user_id = p.user_id
- select * from orders o
inner join users u
on o.user_id = u.user_id
- select co.title, count(co.title) as checkin_count from checkins ci
inner join courses co
on ci.course_id = co.course_id
group by co.title
union: 필드명이 같은 테이블 결과물 합치기(이때 내부 정렬이 적용되지 않음)
- (
select '7월' as month, c.title, c2.week, count(*) as cnt from checkins c2
inner join courses c on c2.course_id = c.course_id
inner join orders o on o.user_id = c2.user_id
where o.created_at < '2020-08-01'
group by c2.course_id, c2.week
order by c2.course_id, c2.week
)
union all
(
select '8월' as month, c.title, c2.week, count(*) as cnt from checkins c2
inner join courses c on c2.course_id = c.course_id
inner join orders o on o.user_id = c2.user_id
where o.created_at > '2020-08-01'
group by c2.course_id, c2.week
order by c2.course_id, c2.week
)
subquery(문법이 아닌 개념): 쿼리 안에 또 다른 쿼리가 있는 형태
- select u.user_id, u.name, u.email from users u
where u.user_id in (
select user_id from orders
where payment_method = 'kakaopay'
)
- 안의 문법에 대한 결과물을 하나의 테이블처럼 여기고 밖의 문법이 실행되는 것이라 생각하면 됨
- with 절을 이용하면 깔끔한 정리가 가능해짐:
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
SUBSTRING_INDEX: 문자열 쪼개기
- SUBSTRING_INDEX(필드, 기준, 몇 번째 조각인지)
- select user_id, email, SUBSTRING_INDEX(email, '@', 1) from users
SUBSTRING: 문자열 일부만 출력하기
- SUBSTRING(문자열, 첫 글자의 위치, 출력할 글자 수)
- select order_no, created_at, SUBSTRING(created_at,1,10) as date from orders
case: 경우에 따른 값 출력하기
- select pu.point_user_id, pu.point,
case
when pu.point > 10000 then '잘 하고 있어요!'
else '조금 더 달려주세요!'
END as '구분'
from point_users pu
'What I Learned > SpartaCodingClub' 카테고리의 다른 글
[내일배움캠프] 2022-11-17 TIL (0) | 2022.11.17 |
---|---|
[내일배움캠프] 2022-11-16 TIL (0) | 2022.11.16 |
[내일배움캠프] 2022-11-15 TIL (0) | 2022.11.15 |
[내일배움캠프] 2022-11-14 TIL (0) | 2022.11.14 |
[내일배움캠프] CS 특강 정리 (0) | 2022.11.11 |
- Total
- Today
- Yesterday
- til
- 24313
- 25192
- 17103
- 2587
- Python
- 2053
- Wil
- 항해 플러스
- 4134
- 항해+
- 2903
- 5597
- 2738
- 백준
- 벡준
- 10807
- 25501
- Programmers
- programmer
- SQL
- 24723
- MySQL
- 13909
- 13241
- 26069
- 20920
- 24060
- 1269
- 코육대
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |