부시기 시리즈/취업 부시기 시리즈

SQL 코딩테스트 부시기

Benn.dev 2021. 7. 1. 17:56

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

 

enochtangg/quick-SQL-cheatsheet

A quick reminder of all SQL queries and examples on how to use them. - enochtangg/quick-SQL-cheatsheet

github.com

 

MySQL Cheat Sheet

MySQL Cheat Sheet. GitHub Gist: instantly share code, notes, and snippets.

gist.github.com