코딩테스트 대비용 SQL문법을 정리해보았습니다.
코딩테스트에 알고리즘 뿐만아니라 SQL문법관련해서도 출제가 빈번하게 나타나고 있습니다. SQL문법 순위로는 ORACLE, MYSQL순으로 출제가 제일 많이된다고 느껴서, 두개의DB엔진 위주로 문법을 정리하였습니다.
https://db-engines.com/en/ranking
1. SELECT TOP
- MYSQL Syntax
SELECT column_name(s)
FROM table_name
WHERE condition
limit number;
- ORACLE 12 Syntax
SELECT column_name(s)
FROM table_name
ORDER BY column_name(s)
FETCH first numbers ROWS ONLY;
- ORACLE Syntax
SELECT *
FROM (SELECT column_name(s)
FROM table_name
ORDER BY column_name(s))
WHERE rownum = number;
2. GROUP BY
- Syntax
SELECT column_name(s)
FROM table_name
WHERE condition
GROUP BY column_name(s)
ORDER BY column_name(s);
ex) 각 나라에 속한 , 고객들을 오름차순으로 조회
SELECT COUNT(CustomerID), Country
FROM Customers
GROUP BY Country
ORDER BY COUNT(CustomerID) DESC;
3. HAVING
- Syntax
SELECT column_name(s)
FROM table_name
WHERE condition
GROUP BY column_name(s)
HAVING condition
ORDER BY column_name(s);
- ex) 프로그래머스:동명 동물 수 찾기 (ORACLE)
-- 동물 보호소에 들어온 동물 이름 중 두 번 이상 쓰인 이름과
-- 해당 이름이 쓰인 횟수를 조회하는 SQL문을 작성해주세요.
SELECT name , count(name)
FROM animal_ins
WHERE name IS NOT NULL
GROUP BY name
HAVING COUNT(name) > 1
ORDER BY name;
4. INNER JOIN
- Syntax
SELECT column_name(s)
FROM table1
INNER JOIN table2
ON table1.column_name = table2.column_name;
- ex) 프로그래머스:있었는데요 없었습니다. (ORACLE)
-- 보호 시작일보타 입양일이 더 빠른 동물의 아이디와 이름을 조회
SELECT animal_ins.animal_id, animal_ins.name
FROM animal_outs
INNER JOIN animal_ins
ON animal_outs.animal_id = animal_ins.animal_id
WHERE animal_outs.datetime < animal_ins.datetime
ORDER BY animal_ins.datetime
5. FULL OUTER JOIN
- Syntax
SELECT column_name(s)
FROM table1
FULL OUTER JOIN table2
ON table1.column_name = table2.column_name
WHERE condition;
- ex) 프로그래머스:없어진 기록찾기 (ORACLE)
-- 입양간 기록은 있는데, 보호소에 들어온 기록이 없는 동물의 ID와 이름을 ID 순으로 조회
SELECT animal_outs.animal_id, animal_outs.name
FROM animal_outs
FULL OUTER JOIN animal_ins
ON animal_outs.animal_id = animal_ins.animal_id
WHERE animal_outs.animal_id IS NOT NULL
AND animal_ins.animal_id IS NULL
ORDER BY animal_outs.animal_id;
6. SQL NULL FUNCTION
- MYSQL Syntax
: IFNULL()함수는 만약 값이 null일때 대신할 값을 적으면 해당 값을 return해준다.
SELECT ProductName, UnitPrice * (UnitsInStock + IFNULL(UnitsOnOrder, 0))
FROM Products;
- ORACLE Syntax
: NVL()함수도 같은 용도로 사용됩니다.
SELECT ProductName, UnitPrice * (UnitsInStock + NVL(UnitsOnOrder,0))
FROM Products;
- ex) 프로그래머스:NULL 처리하기
-- 입양 게시판에 동물 정보를 게시하려 합니다.
-- 동물의 생물 종, 이름, 성별 및 중성화 여부를 아이디 순으로 조회하는 SQL문을 작성해주세요.
SELECT animal_type, NVL(name,'No name') , sex_upon_intake
FROM animal_ins
ORDER BY animal_id;
7. SQL Date,String 다루기
- months_between()
: 날짜 차이를 개월로 구하기
ex) 프로그래머스: 오랜 기간 보호한 동물(2)
-- MONTHS_BETWEEN(기준일자, 비교일자)
-- MONTHS_BERWEEN(SYSDATE, TO_DATE('20190701','YYYYMMDD'))
SELECT animal_ins.animal_id, animal_ins.name
FROM animal_ins
INNER JOIN animal_outs
ON animal_ins.animal_id = animal_outs.animal_id
ORDER BY months_between(animal_outs.datetime,animal_ins.datetime) DESC
FETCH FIRST 2 ROWS ONLY
- TO_CHAR()
: '날짜'를 '날짜형식'의 문자로 바꾸거나 '수치'를 '수치형식'의 문자로 바꾼다.
ex) 프로그래머스:DATETIME에서 DATE로 형변환
SELECT animal_id, name, TO_CHAR(datetime,'YYYY-MM-DD') as 날짜
FROM animal_ins
ORDER BY animal_id
- LIKE : 포함된 문자로 검색하기
SELECT column1, column2, ...
FROM table_name
WHERE column LIKE pattern;
- ex) 프로그래머스 : 이름에 el이 들어가는 동물 찾기 (대소문자 구분없이 검색하기 위해서 lower()사용)
SELECT animal_id, name
FROM animal_ins
WHERE lower(name) LIKE lower('%el%')
AND animal_type = 'Dog'
ORDER BY name
- CASE
: 조건에 만족하는 결과 값을 반환
-- syntax1
CASE column_name WHEN condition1 THEN result1
WHEN condition2 THEN result2
...
ELSE
END as
-- syntax2
CASE WHEN condition1 THEN result1
WHEN condition2 THEN result2
..
ELSE
END as
- ex) 프로그래머스 : 중성화 여부 파악하기
select
animal_id,
name,
case when sex_upon_intake = 'Neutered Male' Then 'O'
when sex_upon_intake = 'Spayed Female' Then 'O'
ELSE 'X'
END as 중성화
FROM animal_ins
order by animal_id
- replace()
: 문자열 바꾸기
-- REPLACE(문자열, 대상문자, 교체문자)
-- REPLACE('2019/08/20','/','-')
'기록' 카테고리의 다른 글
[Gradle] Authentication scheme 'all'(Authentication) is not supported by protocol 'file' (0) | 2022.06.23 |
---|---|
[Window]윈도우 환경에 SDKMAN 설치하기 (feat.gitBash) (0) | 2022.04.13 |
[postgres] pgadmin4로 backup, restore하기 (0) | 2022.03.07 |
[git] 잘못올린 파일 .gitignore로 없애기 (0) | 2022.03.03 |
Docker - Windows 설치오류 (0) | 2021.12.14 |