본문 바로가기
알고리즘/알고리즘풀면서...

SQL 팁

by 두둠칫 2020. 10. 22.

0. SQL query
SELECT col
FROM table
WHERE condition 

 


1. ORDER BY col1 DESC, col2 ASC, ...

WHERE절 밑

 


2. LIMIT a, b : col [a, a+b]

WHERE절 밑

 


3. COUNT(col)

SELECT절 안에서 사용

EX) SELECT COUNT(col)

EX) SELECT COUNT(*) AS NEW_NAME

 


4. DISTINCT(col) OR DISTINCT col

SELECT절 안에서 사용

SELECT DISTINCT(col)
SELECT COUNT(DISTINCT(col))

 

 

5. GROUP BY

GROUP BY col1, col2... : 그룹화하기 전, 특정 col 명시
이때 col은 기존의 col 혹은 AS로 만든 별칭도 가능
* 그룹함수와 같이 쓰일 수 있다
EX) COUNT(), MAX(), MIN(), AVG()...

SELECT (보통)그룹화한 col, 그룹함수(the other col)
FROM TABLE
WHERE condition
GROUP BY 그룹화할 col

 

CF) SELECT 그룹화한 col, 그룹화한 col에 대해 여러가지 값을 가질 수 있는 col

로 SQL을 작성하면 2번째 col은 여러가지 값 중 한 가지만 리턴

때문에 그룹화 하지 않은 다른 col에 대해서는 그룹함수를 해야 의미를 갖는다.

 


6. HAVING

GROUP BY col

HAVING (그룹함수(col)) (포함 조건)

: 그룹화한 후, condition을 검, 반드시 GROUP BY절과 같이 쓰임

  그룹함수에 들어가는 그룹화한 col외에 다른 col들어갈 수 있음

GROUP BY department

HAVING SUM(salary) < 7000; 

 

CF) WHERE과 의미가 같으나 WHERE절에 그룹함수를 쓰면 ERROR, SELECT절은 OK
(반대로 HAVING에 일반 조건 기술은 가능하지만 지양한다)

 

 

7. AS : 이름 붙이기

CF) TABLE_NAME (이름) 으로 AS 안붙여도 가능

 


8. SET @변수이름 := 대입값

subquery로 반복
아직..

 


9. IS (NOT) NULL 
EX) WHERE col IS (NOT) NULL

 

 

10. IFNULL(col,"~") 

col이 NULL이면 ~로 대체

 SELECT IFNULL(col, "~")

 


11. JOIN
11-1) INNER JOIN : 일반적인 조인
     => JOIN table ON(WHERE) condition

 

11-2) RIGHT, LEFT JOIN

SELECT COL
FROM TABLE_A
LEFT JOIN TABLE_B
ON condition

: A에 B를 끼워 넣는다
즉 B의 값이 NULL이여도 B의 col을 A에 끼워 넣는다

== A의 row 중 B에 없는 row가 있다 => 해당 col의 값은 NULL

따라서 B RIGHT JOIN A와는 다를 수 있다

 

11-3) CROSS JOIN : 집합 곱 개념
11-4) NATURAL JOIN : col 이름이 같은 것을 INNER JOIN
11-5) SELF JOIN

 


12. LIKE 연산자

EX) WHERE col LIKE '%~%' : ~을 포함한 col, 기본적으로 대소문자를 구별하지 않는다

EX) WHRER BINARY col LIKE '%~%' : BINARY를 추가하면 대소문자 구별

 


13. CASE문

condition에 따라 return value를 생성해서 col 생성

SELECT col1, col2, // <--- ',' 표시 꼭, 즉 CASE문은 SELECT에 포함되어 있는 것
CASE
WHEN condition THEN value1
WHEN condition THEN value2
ELSE default value3
END AS (NAME)
FROM TABLE

 


14. DATE_FORMAT(dateFromData, '%y%m%d%t')

CF) DATETIME 변수끼리 연산 가능

 

15. (query1) UNION (query2)

두개의 쿼리 결과를 중복 제거해서 출력

(SELECT
FROM
WHERE)
UNION
(SELECT
FROM
WHERE)

 

16. 문자열 함수
16-1) CONCAT(문자열1, 문자열2, ...) : 문자열 합치기
16-2) SPLIT(문자열, pivot) : pivot으로 나누기 
16-3) INSTR(문자열, '찾을문자') : 해당 idx 반환
16-4) REPLACE(문자열, "바뀔문자열", "바꿀문자열")

 

WHERE 절
16-5) WHERE col IN('문자열1', ...) : 같은 문자열이 있는지 확인

CF) LIKE 연산자

 

17. SubQuery

EX) 특정 col 중 최소값 가진 row 구하기

SELECT col 
FROM TABLE 
WHERE target_col = ( 
SELECT min(target_col) 
FROM table 
)

 

18. LIMIT

LIMIT (개수)

 

 

'알고리즘 > 알고리즘풀면서...' 카테고리의 다른 글

다시 풀어볼만한 문제 모음  (1) 2021.10.03
최단경로 알고리즘 정리 : 다익스트라, 벨만포드, 플로이드-와샬  (0) 2021.08.29
C/C++ 팁  (0) 2020.11.04
구현 팁  (0) 2020.10.31
JAVA 팁(1)  (0) 2020.10.13