출처 programmers 코딩테스트
구문 순서

select ~ from ~ join ~ where ~ group by ~ orderby
1. anmail_id 오름차순 정리 id,name 뽑아오기
SELECT animal_id, name from animal_ins order by animal_id
2. 여러 기준으로 정렬 (,쓰고 하면 됨)
SELECT animal_id, name from animal_ins order by animal_id asc, name desc
3. 1줄만 가져오기 (맨 뒤에 limit)
SELECT animal_id, name from animal_ins order by animal_id asc, name desc limit 1
4. 이중조건(where절) , 개수세기(count(*))
SELECT count(*) from USER_INFO where (age between 20 and 29) and year(JOINED)='2021'
사잇값은 between 을 사용
5. 최댓값 최솟값 (칼럼을 뒤에다 쓴다.)
SELECT max(price) from product
6. 중복제거 (distinct)
SELECT count(distinct name) from ANIMAL_INS
중복된 이름 제거
7. 특정 이름 포함 ('xxx%')
SELECT FACTORY_ID,FACTORY_NAME,ADDRESS from FOOD_FACTORY where ADDRESS like '강원도%' order by FACTORY_ID
~% 시작 / %~ 끝 / %~% 중간 포함
8. 조건문
SELECT WAREHOUSE_ID,WAREHOUSE_NAME,ADDRESS,
if (freezer_yn is null, 'N',freezer_yn) as freezer_yn
from FOOD_WAREHOUSE
where ADDRESS like '경기도%'
if(조건, 참일때, 거짓일때)
9.데이터 포맷
SELECT DR_NAME, DR_ID,MCDP_CD,DATE_FORMAT(HIRE_YMD, '%Y-%m-%d') from DOCTOR where MCDP_CD in('CS','GS') order by HIRE_YMD desc, DR_NAME asc
DATE_FORMAT(HIRE_YMD, '%Y-%m-%d')
데이터 포맷해준다 HIRE_YMD형태를 yyyy-mm-dd 형태로 바꿔줌
cf)
1. SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %T');
> 2021-03-30 12:00:00
2. SELECT DATE_FORMAT(NOW(), '%Y%m%d');
> 20210330
3. SELECT DATE_FORMAT(NOW(), '%Y%m%d%H%i%S');
> 20210330100000
10. left 조인
inner 는 생략 가능
select a.FLAVOR from FIRST_HALF As a left join ICECREAM_INFO as b on a.flavor= b.flavor
where a.total_order >= 3000 and b.INGREDIENT_TYPE like 'fruit_based'

11. case 구문
SELECT HISTORY_ID,CAR_ID,DATE_FORMAT(START_DATE, '%Y-%m-%d') as START_DATE
,DATE_FORMAT(END_DATE, '%Y-%m-%d') as END_DATE ,
CASE
WHEN
TIMESTAMPDIFF(DAY, START_DATE, END_DATE) + 1 >= 30 THEN '장기 대여'
ELSE
'단기 대여'
END AS RENT_TYPE
from CAR_RENTAL_COMPANY_RENTAL_HISTORY
where (START_DATE between '2022-09-01' and '2022-9-30' )
order by HISTORY_ID desc
when 조건 then 결과값
else 그외조건
12. NVL
SELECT NVL(user_name, 'no name') from users
user_name 이 null 이면 'no name' 을 출력하고 아니면 컬럼 값을 출력한다.
13. having 절
having 절은 group by로 묶어놓은거에 조건을 거는 것이다.
SELECT MCDP_CD AS '진료과코드',COUNT(MCDP_CD) AS '5월예약건수'=
FROM APPOINTMENT
WHERE APNT_YMD LIKE '2022-05%'
GROUP BY MCDP_CD // MCDP_CD 기준으로 묶는다
having MCDP_CD > 1 // MCDP_CD 이 1 초과인것들로
ORDER BY MCDP_CD ASC
Sub Query
비상관서브쿼리 (독자적으로 실행/ 본 쿼리와는 상관없이 돌아간다)
all 서브쿼리의 모든 결과에 대해 ~하다
any 서브쿼리의 하나 이상의 결과에 대해 ~하다
상관서브쿼리(본 쿼리와 같이 맞물려져서 돌아간다)
exists / notexists
댓글