SQL-SELECT

@hongo Β· July 23, 2022 Β· 2 min read

SELECT (1)

SELECT [DISTINCT]
FROM
[WHERE]
	[GROUP BY]
	[HAVING]
[ORDER BY]

πŸ“Œ 예제

SELECT 이름 + '의 μ›”κΈ‰' AS 이름2, κΈ°λ³ΈκΈ‰ + 10 AS κΈ°λ³ΈκΈ‰2
FROM 사원
SELECT *
FROM 사원
WHERE λΆ€μ„œ IN ('기획', 'λ§ˆμΌ€νŒ…');
SELECT *
FROM 사원
WHERE 이름 LIKE 'κΉ€_';

SELECT *
FROM 사원
WHERE 이름 LIKE 'κΉ€%';

SELECT *
FROM 사원
WHERE κ²½λ ₯ LIKE '1#';
SELECT *
FROM 사원
WHERE 생일 BETWEEN #010169# AND #12/31/73#
SELECT *
FROM 사원
WHERE μ£Όμ†Œ IS NULL

SELECT *
FROM 사원
WHERE μ£Όμ†Œ IS NOT NULL
SELECT TOP 2 *
FROM 사원
ORDER BY κ²½λ ₯ DESC, 생일 ASC;

ν•˜μœ„μ§ˆμ˜ : μ‘°κ±΄μ ˆμ— μ£Όμ–΄μ§„ 질의λ₯Ό λ¨Όμ € μˆ˜ν–‰ν•˜μ—¬ κ·Έ 검색 κ²°κ³ λ₯Ό 쑰건절의 ν”Όμ—°μ‚°μžλ‘œ ν™œμš©ν•œλ‹€.

SELECT 이름, μ£Όμ†Œ
FROM 사원
WHERE 이름 = (SELECT 이름 FROM μ—¬κ°€ν™œλ™ WHERE μ·¨λ―Έ = 'μ½”λ”©')

SELECT 이름, μ£Όμ†Œ
FROM 사원
WHERE 이름 NOT IN (SELECT 이름 FROM μ—¬κ°€ν™œλ™)

SELECT 이름, μ£Όμ†Œ
FROM 사원
WHERE EXISTS (SELECT 이름 FROM μ—¬κ°€ν™œλ™ WHERE μ—¬κ°€ν™œλ™.이름 = 사원.이름)

EXIST : ν•˜μœ„μ§ˆμ˜λ‘œ κ²€μƒ‰λœ κ²°κ³Όκ°€ μ‘΄μž¬ν•˜λŠ”μ§€ 확인할 λ•Œ μ“΄λ‹€...

μœ„ μ˜ˆμ‹œμ˜ 경우 μ‚¬μ›ν…Œμ΄λΈ”μ˜ 이름이 μ—¬κ°€ν™œλ™μ˜ 이름에도 μžˆλŠ”μ§€ ν™•μΈν•˜κ³ , 두 ν…Œμ΄λΈ”μ— 이름이 μ‘΄μž¬ν•˜λŠ” μ‚¬μ›μ˜ 이름과 μ£Όμ†Œλ₯Ό 좜λ ₯ν•œλ‹€.

SELECT (2)

κ·Έλ£Ήν•¨μˆ˜

GROUP BY μ ˆμ— μ§€μ •λœ κ·Έλ£Ήλ³„λ‘œ μ†μ„±μ˜ 값을 집계할 ν•¨μˆ˜λ₯Ό κΈ°μˆ ν•¨

  • COUNT
  • SUM
  • AVG
  • MAX
  • MIN
  • STDDEV : ν‘œμ€€νŽΈμ°¨
  • VARIANCE : λΆ„μ‚°
  • ROLLUP
  • CUBE

πŸ“Œ μ˜ˆμ‹œ

SELECT λΆ€μ„œ, AVG(μƒμ—¬κΈˆ) AS μƒμ—¬κΈˆν‰κ· 
FROM μƒμ—¬κΈˆ
GROUP BY λΆ€μ„œ

μƒμ—¬κΈˆν…Œμ΄λΈ”μ—μ„œ λΆ€μ„œλ³„ μƒμ—¬κΈˆν‰κ· μ„ κ΅¬ν•œλ‹€.

SELECT λΆ€μ„œ, COUNT(*) AS μ‚¬μ›μˆ˜
FROM μƒμ—¬κΈˆ
WHERE μƒμ—¬κΈˆ >= 100
GROUP BY λΆ€μ„œ
HAVING COUNT(*) >= 2

μƒμ—¬κΈˆν…Œμ΄λΈ”μ—μ„œ μƒμ—¬κΈˆμ΄ 100이상인 사원이 2λͺ…이상인 λΆ€μ„œμ˜ νŠœν”Œ 개수λ₯Ό κ΅¬ν•œλ‹€.

WINDOW ν•¨μˆ˜

GROUP BYμ ˆμ„ μ΄μš©ν•˜μ§€ μ•Šκ³  ν•¨μˆ˜μ˜ 인수둜 μ§€μ •ν•œ μ†μ„±μ˜ 값을 μ§‘κ³„ν•œλ‹€

WINDOWν•¨μˆ˜μ˜ λ²”μœ„λŠ” PARTITION BYμ ˆμ— μ§€μ •ν•œ 속성이 λœλ‹€.

SELECT
[WINDOWν•¨μˆ˜ OVER (PARTITION BY 속성 ORDER BY 속성)]

  • ROW_NUMBER() : 각 λ ˆμ½”λ“œμ— λŒ€ν•œ 일련번호 λ°˜ν™˜
  • RANK() : 곡동 μˆœμœ„ 반영
  • DENSE_RANK() : 곡동 μˆœμœ„ λ¬΄μ‹œ

πŸ“Œ μ˜ˆμ‹œ

SELECT 상여내역, μƒμ—¬κΈˆ, ROW_NUMBER() OVER (PARTITION BY 상여내역 ORDER BY μƒμ—¬κΈˆ DESC) AS NO
FROM μƒμ—¬κΈˆ

μƒμ—¬κΈˆ ν…Œμ΄λΈ”μ—μ„œ μƒμ—¬λ‚΄μ—­λ³„λ‘œ μƒμ—¬κΈˆμ— λŒ€ν•œ 일련번호λ₯Ό κ΅¬ν•œλ‹€.

μˆœμ„œλŠ” λ‚΄λ¦Όμ°¨μˆœμ΄λ©°, 속성λͺ…은 NO

SELECT 상여내역, μƒμ—¬κΈˆ, RANK() OVER (PARTITION BY 상여내역 ORDER BY μƒμ—¬κΈˆ DESC) AS μƒμ—¬κΈˆμˆœμœ„
FROM μƒμ—¬κΈˆ

μ§‘ν•©μ—°μ‚°μž

  • UNION : ν•©μ§‘ν•©
  • UNION ALL : μ€‘λ³΅ν—ˆμš© ν•©μ§‘ν•©
  • INTERSECT : ꡐ집합
  • EXCEPT : μ°¨μ§‘ν•©

πŸ“Œ μ˜ˆμ‹œ

SELECT *
FROM 사원
INTERSECT
SELECT *
FROM 직원

JOIN

JOIN은 두 개의 λ¦΄λ ˆμ΄μ…˜μ—μ„œ μ—°κ΄€λœ νŠœν”Œλ“€μ„ κ²°ν•©ν•˜μ—¬, ν•˜λ‚˜μ˜ μƒˆλ‘œμš΄ λ¦΄λ ˆμ΄μ…˜μ„ λ°˜ν™˜ν•œλ‹€.

  • 일반적으둜 FROMμ ˆμ— κΈ°μˆ ν•œλ‹€.
  • 크게 INNER JOINκ³Ό OUTER JOIN으둜 κ΅¬λΆ„λœλ‹€.

INNER JOIN

@hongo
홍고 λΈ”λ‘œκ·Έ