본문 바로가기
DB/MySQL

(DB/mysql) mysql_note 1

by windy7271 2023. 2. 19.
728x90
반응형

출처 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

반응형

댓글