티스토리 뷰

그동안 배웠던 문법들을 간단한 설명, 괜찮은 예시와 함께 총 정리하였다.


 

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

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
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
글 보관함