SQL 코딩테스트를 부시기 위해 정리한 글입니다
이글을 보는 모두가 코딩테스트를 부시길 바랍니다
1. 데이터를 찾는 쿼리
SELECT
데이터베이스에서 데이터를 선택할 때 사용합니다
SELECT * FROM table_name;
DISTINCT
중복된 값을 필터링하고 지정된 열의 행을 반환합니다
SELECT DISTINCT column_name;
WHERE
레코드와 행의 필터링에 사용합니다
SELECT column1, column2 FROM table_name WHERE condition;
SELECT * FROM table_name WHERE condition1 AND condition2;
SELECT * FROM table_name WHERE condition1 OR condition2;
SELECT * FROM table_name WHERE NOT condition;
SELECT * FROM table_name WHERE condition1 AND (condition2 OR condition3);
SELECT * FROM table_name WHERE EXISTS (SELECT column_name FROM table_name WHERE condition);
ORDER BY
결과 집합을 오름차순 또는 내림차순으로 정렬하는 데 사용됩니다
SELECT * FROM table_name ORDER BY column;
SELECT * FROM table_name ORDER BY column DESC;
SELECT * FROM table_name ORDER BY column1 ASC, column2 DESC;
SELECT TOP
테이블 맨 위에서 반환할 레코드 수를 지정하는 데 사용됩니다
SELECT TOP number columns_names FROM table_name WHERE condition;
SELECT TOP percent columns_names FROM table_name WHERE condition;
Not all database systems support SELECT TOP. The MySQL equivalent is the LIMIT clause
SELECT column_names FROM table_name LIMIT offset, count;
LIKE
연산자를 사용하여 열의 특정 패턴을 검색합니다
- % 기호는 0, 1 또는 여러 문자를 나타내는 와일드카드 문자입니다
- _ 기호는 단일 문자를 나타내는 와일드카드 문자입니다
SELECT column_names FROM table_name WHERE column_name LIKE pattern;
LIKE ‘a%’ (find any values that start with “a”)
LIKE ‘%a’ (find any values that end with “a”)
LIKE ‘%or%’ (find any values that have “or” in any position)
LIKE ‘_r%’ (find any values that have “r” in the second position)
LIKE ‘a_%_%’ (find any values that start with “a” and are at least 3 characters in length)
LIKE ‘[a-c]%’ (find any values starting with “a”, “b”, or “c”
IN
연산자를 사용하여 WHERE 절에 여러 값을 지정할 수 있습니다
- 기본적으로 IN 연산자는 여러 OR 조건의 약자입니다
SELECT column_names FROM table_name WHERE column_name IN (value1, value2, …);
SELECT column_names FROM table_name WHERE column_name IN (SELECT STATEMENT);
BETWEEN
연산자는 지정된 범위 내의 값을 포함하여 선택합니다
SELECT column_names FROM table_name WHERE column_name BETWEEN value1 AND value2;
SELECT * FROM Products WHERE (column_name BETWEEN value1 AND value2) AND NOT column_name2 IN (value3, value4);
SELECT * FROM Products WHERE column_name BETWEEN #01/07/1999# AND #03/12/1999#;
NULL
값이 없는 필드의 값입니다
SELECT * FROM table_name WHERE column_name IS NULL;
SELECT * FROM table_name WHERE column_name IS NOT NULL;
AS
연산자는 테이블 또는 열에 임시 이름을 할당하는 데 사용됩니다
SELECT column_name AS alias_name FROM table_name;
SELECT column_name FROM table_name AS alias_name;
SELECT column_name AS alias_name1, column_name2 AS alias_name2;
SELECT column_name1, column_name2 + ‘, ‘ + column_name3 AS alias_name;
UNION
두 개 이상의 SELECT 문장의 결과 집합을 결합하는 데 사용되는 SET 연산자입니다
- UNION 내의 각 SELECT 명령은 동일한 수의 열을 가져야 합니다
- 열에는 유사한 데이터 유형이 있어야 합니다
- 각 SELECT 명령의 열도 동일한 순서여야 합니다
- UNION 연산자는 고유한 값만 선택하고 UNION ALL은 중복을 허용합니다
SELECT columns_names FROM table1 UNION SELECT column_name FROM table2;
INTERSECT
두 개의 SELECT 문이 공통으로 가지고 있는 레코드를 반환하는 데 사용되는 연산자를 설정합니다
- 일반적으로 위의 UNION과 동일한 방식으로 사용됩니다
SELECT columns_names FROM table1 EXCEPT SELECT column_name FROM table2;
EXCEPT
두 번째 SELECT 문에 없고 첫 번째 SELECT 문에 있는 모든 레코드를 반환하는데 사용되는 SET 연산자입니다
- 일반적으로 위의 UNION과 동일한 방식으로 사용됩니다
SELECT columns_names FROM table1 EXCEPT SELECT column_name FROM table2;
ANY | ALL
연산자는 WHERE 또는 HAVING 절에서 사용되는 하위 쿼리 조건을 확인하는 데 사용됩니다
- ANY 연산자는 하위 쿼리 값이 조건을 충족하는 경우 true를 반환합니다
- ALL 연산자는 모든 하위 쿼리 값이 조건을 충족할 경우 true를 반환합니다
SELECT columns_names FROM table1 WHERE column_name operator (ANY|ALL) (SELECT column_name FROM table_name WHERE condition);
GROUP BY
명령어는 하나 이상의 열로 결과 집합을 그룹화하는 집계함수(COUNT, MAX, MIN, SUM, AVG)에 사용됩니다
SELECT column_name1, COUNT(column_name2) FROM table_name WHERE condition GROUP BY column_name1 ORDER BY COUNT(column_name2) DESC;
HAVING
명령어는 WHERE 키워드를 집계함수(COUNT, MAX, MIN, SUM, AVG)와 함께 사용할 수 없기 때문에 SQL에 추가되었습니다
SELECT COUNT(column_name1), column_name2 FROM table GROUP BY column_name2 HAVING COUNT(column_name1) > 5;
WITH
명령어는 계층 데이터를 검색하거나 쿼리에서 임시 결과 세트를 여러번 재사용하는데 사용됩니다
"공통 테이블식(Common Table Expression)" 이라고도 합니다
WITH RECURSIVE cte AS (
SELECT c0.* FROM categories AS c0 WHERE id = 1 # Starting point
UNION ALL
SELECT c1.* FROM categories AS c1 JOIN cte ON c1.parent_category_id = cte.id
)
SELECT *
FROM cte
2. 데이터를 수정하는 쿼리
INSERT INTO
테이블에 새 레코드/행을 삽입하는데 사용됩니다
INSERT INTO table_name (column1, column2) VALUES (value1, value2);
INSERT INTO table_name VALUES (value1, value2 …);
UPDATE
테이블의 기존 레코드를 수정하는데 사용됩니다
UPDATE table_name SET column1 = value1, column2 = value2 WHERE condition;
UPDATE table_name SET column_name = value;
DELETE
테이블의 기존 레코드/행 삭제에 사용됩니다
DELETE FROM table_name WHERE condition;
DELETE * FROM table_name;
3. 집계함수
COUNT
발생 횟수를 반환합니다
SELECT COUNT (DISTINCT column_name);
MIN() and MAX()
선택한 열의 가장 작은/가장 큰 값을 반환합니다
SELECT MIN (column_names) FROM table_name WHERE condition;
SELECT MAX (column_names) FROM table_name WHERE condition;
AVG()
숫자 열의 평균 값을 반환합니다
SELECT AVG (column_name) FROM table_name WHERE condition;
SUM()
숫자 열의 총 합계를 반환합니다
SELECT SUM (column_name) FROM table_name WHERE condition;
4. 조인 쿼리
INNER JOIN
두 테이블에서 일치하는 값을 가진 레코드를 반환합니다
SELECT column_names FROM table1 INNER JOIN table2 ON table1.column_name=table2.column_name;
SELECT table1.column_name1, table2.column_name2, table3.column_name3 FROM ((table1 INNER JOIN table2 ON relationship) INNER JOIN table3 ON relationship);
LEFT (OTHER) JOIN
왼쪽 테이블(table1)의 모든 레코드 및 오른쪽 테이블(table2)의 일치된 레코드를 반환합니다
SELECT column_names FROM table1 LEFT JOIN table2 ON table1.column_name=table2.column_name;
RIGHT (OTHER) JOIN
오른쪽 테이블(table2)에서 모든 레코드를 반환하고 왼쪽 테이블(table1)에서 일치하는 레코드를 반환합니다
SELECT column_names FROM table1 RIGHT JOIN table2 ON table1.column_name=table2.column_name;
FULL (OTHER) JOIN
왼쪽 또는 오른쪽 테이블에 일치 항목이 있는 경우 모든 레코드를 반환합니다
SELECT column_names FROM table1 FULL OUTER JOIN table2 ON table1.column_name=table2.column_name;
Self JOIN
일반적인 조인이지만 테이블은 스스로 연결되어 있습니다
SELECT column_names FROM table1 T1, table1 T2 WHERE condition;
5. 뷰(View) 쿼리
CREATE
뷰를 생성합니다
CREATE VIEW view_name AS SELECT column1, column2 FROM table_name WHERE condition;
SELECT
뷰를 검색합니다
SELECT * FROM view_name;
DROP
뷰를 제거합니다
DROP VIEW view_name;
6. 테이블 변경 쿼리
ADD
컬럼을 추가합니다
ALTER TABLE table_name ADD column_name column_definition;
MODIFY
컬럼의 데이터 타입을 변경합니다
ALTER TABLE table_name MODIFY column_name column_type;
DROP
컬럼을 삭제합니다
ALTER TABLE table_name DROP COLUMN column_name;
7. 테이블 생성 쿼리
CREATE
테이블을 생성합니다
CREATE TABLE table_name (
column1 datatype,
column2 datatype,
column3 datatype,
column4 datatype,
);
레퍼런스 혹은 참고하면 좋을 글들
https://gist.github.com/bradtraversy/c831baaad44343cc945e76c2e30927b3
https://github.com/enochtangg/quick-SQL-cheatsheet
'부시기 시리즈 > 취업 부시기 시리즈' 카테고리의 다른 글
CS 면접 부시기 - 암호학/보안 (0) | 2021.07.10 |
---|---|
CS 면접 부시기 - JAVA (0) | 2021.07.09 |
CS 면접 부시기 - 운영체제 (0) | 2021.07.09 |
CS 면접 부시기 - 네트워크 (0) | 2021.07.05 |
자바로 코딩테스트 부시기 (1) | 2021.06.21 |