๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’ป Programming/etc.

[SQL] MySQL ๊ธฐ๋ณธ ๋ฌธ๋ฒ• ๋ฐ ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๋ฌธ์ œ ์ •๋ฆฌ

by ๋ญ…์ฆค 2022. 8. 1.
๋ฐ˜์‘ํ˜•

SQL(Structured Query Language) ๋Š” ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹œ์Šคํ…œ(RDBMS) ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์„ค๊ณ„๋œ ํŠน์ˆ˜ ๋ชฉ์ ์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์ด๊ณ , MySQL์€ ์„ธ๊ณ„์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ์“ฐ์ด๋Š” ์˜คํ”ˆ์†Œ์Šค์˜ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ์‹œ์Šคํ…œ์ž…๋‹ˆ๋‹ค.

 

MySQL SELECT ์˜ ๊ธฐ๋ณธ์ ์ด์ง€๋งŒ ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ๋ฌธ๋ฒ•์„ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

 

SELECT Statement

 

SELCET

 

SELECT [์ปฌ๋Ÿผ๋ช…] FROM [ํ…Œ์ด๋ธ”๋ช…];

์–ด๋–ค ๋ฐ์ดํ„ฐ๋ฅผ ์–ด๋”” ํ…Œ์ด๋ธ”์—์„œ ๊ฐ€์ ธ์˜ฌ์ง€

 

SELECT * FROM [ํ…Œ์ด๋ธ”๋ช…];     

→ *(astarisk) ๋ชจ๋“  ์ปฌ๋Ÿผ์„ ๊ฐ€์ ธ์˜ด

 

SELECT [์ปฌ๋Ÿผ๋ช…] FROM [ํ…Œ์ด๋ธ”๋ช…] WHERE [์กฐ๊ฑด] ORDER BY [์ปฌ๋Ÿผ๋ช…] DESC / ASC LIMIT ์ˆซ์ž N;

→ ํ…Œ์ด๋ธ”์˜ ์„ ํƒ๋œ ์ปฌ๋Ÿผ์„ ํŠน์ • ์กฐ๊ฑด์—์„œ ์ปฌ๋Ÿผ ๋ฐ์ดํ„ฐ์˜ ๋‚ด๋ฆผ์ฐจ์ˆœ / ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜์—ฌ ์ƒ์œ„ N๊ฐœ ๋งŒํผ๋งŒ ์ถœ๋ ฅ

 

SELECT [์ปฌ๋Ÿผ๋ช…] FROM [ํ…Œ์ด๋ธ”๋ช…] WHERE [์ปฌ๋Ÿผ๋ช…] IN "xx, yy";

→ ์„ ํƒ๋œ ์ปฌ๋Ÿผ์˜ ํŠน์ •๋ฐ์ดํ„ฐ๊ฐ€ "xx" ๋˜๋Š” "yy" ์— ํฌํ•จ๋˜๋Š” ๊ฒฝ์šฐ ์ถœ๋ ฅ

 

SELECT [์ปฌ๋Ÿผ๋ช…] FROM [ํ…Œ์ด๋ธ”๋ช…] WHERE [์ปฌ๋Ÿผ๋ช…] LIKE "%xx%";

→ ์„ ํƒ๋œ ์ปฌ๋Ÿผ์˜ ํŠน์ •๋ฐ์ดํ„ฐ๊ฐ€ ~~xx~~ ์˜ ํ˜•ํƒœ์ธ ๊ฒฝ์šฐ ์ถœ๋ ฅ

 

SELECT id,title,created,author FROM topic WHERE author='egoing' ORDER BY id DESC LIMIT 2;

→ topic ํ…Œ์ด๋ธ”์—์„œ id, title, created, author ์ปฌ๋Ÿผ ๋ฐ์ดํ„ฐ๋งŒ, author ๊ฐ€ egoing์ธ ๊ฒฝ์šฐ๋งŒ, id ๊ฐ’์˜ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ, ๋ฐ์ดํ„ฐ๋Š” ์ƒ์œ„2๊ฐœ๋งŒ ์ถœ๋ ฅํ•˜๋„๋ก

 

UPDATE topic SET description = 'Oracle is ...',title='Oracle' WHERE id=2;

→ id=2 ์ธ ํ–‰์„ ์—…๋ฐ์ดํŠธ

 

SELECT COUNT(์ปฌ๋Ÿผ๋ช…) FROM [ํ…Œ์ด๋ธ”๋ช…];

→ ์ปฌ๋Ÿผ ๋ฐ์ดํ„ฐ ๊ฐœ์ˆ˜ ๊ฐ€์ ธ์˜ค๊ธฐ

 

SELECT COUNT(*) FROM [ํ…Œ์ด๋ธ”๋ช…];

→ ์ „์ฒด ํ–‰ ๊ฐœ์ˆ˜ ๊ฐ€์ ธ์˜ค๊ธฐ

 

SELECT COUNT(DISTINCT ์ปฌ๋Ÿผ๋ช…) FROM [ํ…Œ์ด๋ธ”๋ช…];

→ ์ปฌ๋Ÿผ ์ค‘๋ณต๋˜์ง€ ์•Š๋Š” ๋ฐ์ดํ„ฐ ๊ฐœ์ˆ˜ ๊ฐ€์ ธ์˜ค๊ธฐ

 

SELECT [์ปฌ๋Ÿผ๋ช…] FROM [ํ…Œ์ด๋ธ”๋ช…] GROUP BY [๊ทธ๋ฃนํ™”ํ•  ์ปฌ๋Ÿผ๋ช…];

→ ์ปฌ๋Ÿผ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ทธ๋ฃนํ™”ํ•˜์—ฌ ์ถœ๋ ฅ

 

SELECT [์ปฌ๋Ÿผ๋ช…], COUNT(์ปฌ๋Ÿผ๋ช…) AS cnt FROM [ํ…Œ์ด๋ธ”๋ช…] GROUP BY [์ปฌ๋Ÿผ๋ช…] HAVING [์กฐ๊ฑด];

→ ์ปฌ๋Ÿผ์˜ ๋ฐ์ดํ„ฐ ์ด๋ฆ„๊ณผ ๋ฐ์ดํ„ฐ ๊ฐœ์ˆ˜๋ฅผ ๋ฐ์ดํ„ฐ ์ด๋ฆ„์— ๋”ฐ๋ผ ๊ทธ๋ฃนํ™”ํ•˜์—ฌ ์กฐ๊ฑด์— ๋งž๋Š” ๊ฒฝ์šฐ ์ถœ๋ ฅ

 

SELECT IF(์กฐ๊ฑด, ์ฐธ์ผ ๋•Œ, ๊ฑฐ์ง“์ผ ๋•Œ)

→ IF ์กฐ๊ฑด๋ฌธ

 

CASE WHEN ์กฐ๊ฑด THEN "๋ฐ˜ํ™˜ ๊ฐ’" WHEN ์กฐ๊ฑด THEN "๋ฐ˜ํ™˜ ๊ฐ’" ELSE "์กฐ๊ฑด์— ํ•ด๋‹นํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ๋ฐ˜ํ™˜๊ฐ’" END

→ switch์™€ ์œ ์‚ฌํ•œ case ๋ฌธ

 

SET @๋ณ€์ˆ˜์ด๋ฆ„ := ๋Œ€์ž…๊ฐ’ SELECT @๋ณ€์ˆ˜์ด๋ฆ„ := ๋Œ€์ž…๊ฐ’;

→ ๋ณ€์ˆ˜ ์‚ฌ์šฉ๋ฒ•

 

 

๋‹ค์ค‘ ํ…Œ์ด๋ธ” ์—ฐ์‚ฐ (Join)

  • INNER JOIN: Table 1 ๊ณผ Table 2 ๋ชจ๋‘์— ๋งค์นญ๋˜๋Š” ํ–‰๋งŒ ์„ ํƒ
  • LEFT JOIN: Table 1์˜ ๋ชจ๋“  ํ–‰๊ณผ Table 2 ์ค‘ Table 1๊ณผ ๋งค์นญ๋˜๋Š” ํ–‰๋งŒ ์„ ํƒ
  • RIGHT JOIN: Table 2์˜ ๋ชจ๋“  ํ–‰๊ณผ Table 1์—์„œ Table 2์™€ ๋งค์น˜๋˜๋Š” ํ–‰๋งŒ ์„ ํƒ
  • FULL (OUTER) JOIN: Table 1๊ณผ Table 2 ์–‘์ชฝ ๋ชจ๋“  ํ–‰์„ ์„ ํƒ

 

SELECT * FROM A LEFT JOIN B ON A.id = B.id;

→ A์™€ B ํ…Œ์ด๋ธ”์ด ๋ถ„๋ฆฌ๋˜์–ด ์žˆ๋Š” ์ƒํƒœ์—์„œ ์ด๋“ค์˜ ์—ฐ๊ฒฐ์„ฑ์„ ํฌํ•จํ•˜์—ฌ ํ•จ๊ป˜ ๋ณด์—ฌ์ฃผ๊ธฐ ์œ„ํ•ด LEFT JOIN ์œผ๋กœ A ํ…Œ์ด๋ธ”์„ ๊ฐ€์ ธ์˜ค๊ณ , Aํ…Œ์ด๋ธ”์˜ id ์ปฌ๋Ÿผ๊ณผ Bํ…Œ์ด๋ธ”์˜ id ์ปฌ๋Ÿผ์„ ๋™์ผํ•˜๊ฒŒ ๋ณธ๋‹ค๋Š” ๊ธฐ์ค€์„ ๋ถ€์—ฌํ•œ๋‹ค

 

*ํ…Œ์ด๋ธ” ๊ฐ„ ์ปฌ๋Ÿผ ์ด๋ฆ„์ด ์ค‘๋ณต๋˜๋Š” ๊ฒฝ์šฐ [ํ…Œ์ด๋ธ”.์ปฌ๋Ÿผ์ด๋ฆ„] ์œผ๋กœ ์‚ฌ์šฉ(e.g. A.id, B.id)

 

 

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค SQL ๊ณ ๋“์  Kit ๋ฌธ์ œ

 

ANIMAL_INS ํ…Œ์ด๋ธ”์€ ๋™๋ฌผ ๋ณดํ˜ธ์†Œ์— ๋“ค์–ด์˜จ ๋™๋ฌผ์˜ ์ •๋ณด๋ฅผ ๋‹ด์€ ํ…Œ์ด๋ธ”์ž…๋‹ˆ๋‹ค. ANIMAL_INS ํ…Œ์ด๋ธ” ๊ตฌ์กฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์œผ๋ฉฐ, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE๋Š” ๊ฐ๊ฐ ๋™๋ฌผ์˜ ์•„์ด๋””, ์ƒ๋ฌผ ์ข…, ๋ณดํ˜ธ ์‹œ์ž‘์ผ, ๋ณดํ˜ธ ์‹œ์ž‘ ์‹œ ์ƒํƒœ, ์ด๋ฆ„, ์„ฑ๋ณ„ ๋ฐ ์ค‘์„ฑํ™” ์—ฌ๋ถ€๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

 

ANIMAL_OUTS ํ…Œ์ด๋ธ”์€ ๋™๋ฌผ ๋ณดํ˜ธ์†Œ์—์„œ ์ž…์–‘ ๋ณด๋‚ธ ๋™๋ฌผ์˜ ์ •๋ณด๋ฅผ ๋‹ด์€ ํ…Œ์ด๋ธ”์ž…๋‹ˆ๋‹ค. ANIMAL_OUTS ํ…Œ์ด๋ธ” ๊ตฌ์กฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์œผ๋ฉฐ, ANIMAL_ID, ANIMAL_TYPE, DATETIME, NAME, SEX_UPON_OUTCOME๋Š” ๊ฐ๊ฐ ๋™๋ฌผ์˜ ์•„์ด๋””, ์ƒ๋ฌผ ์ข…, ์ž…์–‘์ผ, ์ด๋ฆ„, ์„ฑ๋ณ„ ๋ฐ ์ค‘์„ฑํ™” ์—ฌ๋ถ€๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ANIMAL_OUTS ํ…Œ์ด๋ธ”์˜ ANIMAL_ID๋Š” ANIMAL_INS์˜ ANIMAL_ID์˜ ์™ธ๋ž˜ ํ‚ค์ž…๋‹ˆ๋‹ค.

 

 

1. SELECT

 

๋ชจ๋“  ๋ ˆ์ฝ”๋“œ ์กฐํšŒํ•˜๊ธฐ

ANIMAL_INS ํ…Œ์ด๋ธ”๋ฅผ ANIMAL_ID ์ˆœ์œผ๋กœ ์กฐํšŒ

SELECT *
FROM ANIMAL_INS
ORDER BY ANIMAL_ID

 

์—ญ์ˆœ ์ •๋ ฌํ•˜๊ธฐ 

ANIMAL_ID ์™€ NAME์„ ANIMAL_ID์˜ ์—ญ์ˆœ์œผ๋กœ ์กฐํšŒ

SELECT NAME, DATETIME
FROM ANIMAL_INS
ORDER BY ANIMAL_ID DESC

 

์•„ํ”ˆ ๋™๋ฌผ ์ฐพ๊ธฐ

INTAKE_CONDITION์ด "Sick"์ธ ๋™๋ฌผ์˜ ANIMAL_ID์™€ NAME์„ ANIMAL_ID ์ˆœ์œผ๋กœ ์กฐํšŒ 

SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE INTAKE_CONDITION = "Sick"
ORDER BY ANIMAL_ID

 

์–ด๋ฆฐ ๋™๋ฌผ ์ฐพ๊ธฐ

INTAKE_CONDITION์ด "Aged"๊ฐ€ ์•„๋‹Œ ๋™๋ฌผ์˜ ANIMAL_ID์™€ NAME์„ ANIMAL_ID ์ˆœ์œผ๋กœ ์กฐํšŒ 

SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE INTAKE_CONDITION != "Aged"
ORDER BY ANIMAL_ID

 

๋™๋ฌผ์˜ ์•„์ด๋””์™€ ์ด๋ฆ„

ANIMAL_ID์™€ NAME์„ ANIMAL_ID ์ˆœ์œผ๋กœ ์กฐํšŒ

SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
ORDER BY ANIMAL_ID

 

์—ฌ๋Ÿฌ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌํ•˜๊ธฐ

ANIMAL_ID, NAME, DATETIME์„ NAME ์ˆœ์œผ๋กœ ์กฐํšŒ. ๋‹จ, NAME์ด ๊ฐ™์€ ๋™๋ฌผ ์ค‘์—์„œ ๋ณดํ˜ธ๋ฅผ ๋‚˜์ค‘์— ์‹œ์ž‘ํ•œ ๋™๋ฌผ์„ ๋จผ์ € ๋ณด์—ฌ์ค˜์•ผํ•œ๋‹ค

*DATETIME : ๋ณดํ˜ธ์‹œ์ž‘์ผ

SELECT ANIMAL_ID, NAME, DATETIME
FROM ANIMAL_INS
ORDER BY NAME ASC, DATETIME DESC

 

์ƒ์œ„ n๊ฐœ ๋ ˆ์ฝ”๋“œ

๊ฐ€์žฅ ๋จผ์ € ๋ณดํ˜ธ๋ฅผ ์‹œ์ž‘ํ•œ ๋™๋ฌผ์˜ NAME ์„ ์กฐํšŒ

SELECT NAME
FROM ANIMAL_INS
ORDER BY DATETIME
LIMIT 1

 

 

2. SUM, MAX, MIN

 

์ตœ๋Œ“๊ฐ’ ๊ตฌํ•˜๊ธฐ

SELECT MAX(DATETIME) 
FROM ANIMAL_INS

 

์ตœ์†Ÿ๊ฐ’ ๊ตฌํ•˜๊ธฐ

SELECT MIN(DATETIME) 
FROM ANIMAL_INS

 

๋™๋ฌผ ์ˆ˜ ๊ตฌํ•˜๊ธฐ

SELECT COUNT(*) 
FROM ANIMAL_INS

 

์ค‘๋ณต ์ œ๊ฑฐํ•˜๊ธฐ

SELECT COUNT (DISTINCT NAME)
FROM ANIMAL_INS
WHERE NAME IS NOT NULL

 

 

3. GROUP BY

 

๊ณ ์–‘์ด์™€ ๊ฐœ๋Š” ๋ช‡ ๋งˆ๋ฆฌ ์žˆ์„๊นŒ

๋™๋ฌผ ์ค‘ ๊ณ ์–‘์ด์™€ ๊ฐœ๊ฐ€ ๊ฐ๊ฐ ๋ช‡ ๋งˆ๋ฆฌ ์ธ์ง€ ์กฐํšŒ. ๊ณ ์–‘์ด๋ฅผ ๊ฐœ๋ณด๋‹ค ๋จผ์ € ์กฐํšŒ.

SELECT ANIMAL_TYPE, COUNT(*) AS COUNT
FROM ANIMAL_INS
GROUP BY ANIMAL_TYPE
ORDER BY ANIMAL_TYPE

 

๋™๋ช… ๋™๋ฌผ ์ˆ˜ ์ฐพ๊ธฐ

๋™๋ฌผ ์ด๋ฆ„ ์ค‘ ๋‘ ๋ฒˆ ์ด์ƒ ์“ฐ์ธ ์ด๋ฆ„๊ณผ ํ•ด๋‹น ์ด๋ฆ„์ด ์“ฐ์ธ ํšŸ์ˆ˜๋ฅผ ์กฐํšŒ. ์ด๋ฆ„์ด ์—†๋Š” ๋™๋ฌผ์€ ์ง‘๊ณ„์—์„œ ์ œ์™ธ, ๊ฒฐ๊ณผ๋Š” ์ด๋ฆ„์ˆœ.

SELECT NAME, COUNT(*) AS cnt
FROM ANIMAL_INS
WHERE NAME IS NOT NULL
GROUP BY NAME
HAVING cnt>=2
ORDER BY NAME

 

์ž…์–‘ ์‹œ๊ฐ ๊ตฌํ•˜๊ธฐ(1)

09:00๋ถ€ํ„ฐ 19:59๊นŒ์ง€, ๊ฐ ์‹œ๊ฐ„๋Œ€๋ณ„๋กœ ์ž…์–‘์ด ๋ช‡ ๊ฑด์ด๋‚˜ ๋ฐœ์ƒํ–ˆ๋Š”์ง€ ์กฐํšŒ. ์ด๋•Œ ๊ฒฐ๊ณผ๋Š” ์‹œ๊ฐ„๋Œ€ ์ˆœ์œผ๋กœ ์ •๋ ฌ.

SELECT HOUR(DATETIME) AS hour, COUNT(*) AS cnt
FROM ANIMAL_OUTS
WHERE HOUR(DATETIME)>= 9 AND HOUR(DATETIME)<20
GROUP BY hour
ORDER BY hour

 

์ž…์–‘ ์‹œ๊ฐ ๊ตฌํ•˜๊ธฐ(2)

0์‹œ๋ถ€ํ„ฐ 23์‹œ๊นŒ์ง€, ๊ฐ ์‹œ๊ฐ„๋Œ€๋ณ„๋กœ ์ž…์–‘์ด ๋ช‡ ๊ฑด์ด๋‚˜ ๋ฐœ์ƒํ–ˆ๋Š”์ง€ ์กฐํšŒ. ์ด๋•Œ ๊ฒฐ๊ณผ๋Š” ์‹œ๊ฐ„๋Œ€ ์ˆœ์œผ๋กœ ์ •๋ ฌ.

SET @H:=-1;
SELECT (@H := @H + 1) AS Hour, (SELECT COUNT(*) FROM ANIMAL_OUTS WHERE HOUR(DATETIME) = @H) AS Count
FROM ANIMAL_OUTS
WHERE @H<23

 

 

4. IS NULL

 

์ด๋ฆ„์ด ์—†๋Š” ๋™๋ฌผ์˜ ์•„์ด๋””

์ด๋ฆ„์ด ์—†๋Š” ์ฑ„๋กœ ๋“ค์–ด์˜จ ๋™๋ฌผ์˜ ID๋ฅผ ์กฐํšŒ. ID ๋Š” ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ

SELECT ANIMAL_ID
FROM ANIMAL_INS
WHERE NAME IS NULL
ORDER BY ANIMAL_ID

 

์ด๋ฆ„์ด ์žˆ๋Š” ๋™๋ฌผ์˜ ์•„์ด๋””

์ด๋ฆ„์ด ์žˆ๋Š” ์ฑ„๋กœ ๋“ค์–ด์˜จ ๋™๋ฌผ์˜ ID๋ฅผ ์กฐํšŒ. ID ๋Š” ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ

SELECT ANIMAL_ID
FROM ANIMAL_INS
WHERE NAME IS NOT NULL
ORDER BY ANIMAL_ID

 

NULL ์ฒ˜๋ฆฌํ•˜๊ธฐ

๋™๋ฌผ์˜ ์ƒ๋ฌผ ์ข…, ์ด๋ฆ„, ์„ฑ๋ณ„ ๋ฐ ์ค‘์„ฑํ™” ์—ฌ๋ถ€๋ฅผ ANIMAL_ID ์ˆœ์œผ๋กœ ์กฐํšŒ. ์ด๋ฆ„์ด ์—†๋Š” ๋™๋ฌผ์˜ ์ด๋ฆ„์€ "No name"์œผ๋กœ ํ‘œ์‹œ.

SELECT ANIMAL_TYPE, IF(NAME IS NULL,"No name",NAME) AS Name, SEX_UPON_INTAKE
FROM ANIMAL_INS
ORDER BY ANIMAL_ID

 

5. JOIN

 

์—†์–ด์ง„ ๊ธฐ๋ก ์ฐพ๊ธฐ

ANIMAL_INS์—๋Š” ๊ธฐ๋ก์ด ์žˆ์ง€๋งŒ, ANIMAL_OUT์—๋Š” ๊ธฐ๋ก์ด ์—†๋Š” ID์™€ NAME ์กฐํšŒ

SELECT B.ANIMAL_ID, B.NAME
FROM ANIMAL_OUTS AS B
LEFT JOIN ANIMAL_INS AS A ON A.ANIMAL_ID = B.ANIMAL_ID
WHERE B.DATETIME IS NOT NULL AND A.DATETIME IS NULL
ORDER BY B.ANIMAL_ID

 

์žˆ์—ˆ๋Š”๋ฐ์š” ์—†์—ˆ์Šต๋‹ˆ๋‹ค

ANIMAL_INS์˜ DATETIME์ด ANIMAL_OUTS ์˜ DATETIME ๋ณด๋‹ค ๋Šฆ๋Š” ๊ฒฝ์šฐ ์กฐํšŒ

SELECT A.ANIMAL_ID, A.NAME
FROM ANIMAL_INS AS A
JOIN ANIMAL_OUTS AS B ON A.ANIMAL_ID = B.ANIMAL_ID
WHERE A.DATETIME > B.DATETIME
ORDER BY A.DATETIME

 

์˜ค๋žœ ๊ธฐ๊ฐ„ ๋ณดํ˜ธํ•œ ๋™๋ฌผ(1)

ANIMAL_OUTS ์˜ DATETIME์ด ์—†๋Š” ๋™๋ฌผ ์ค‘ ANIMAL_INS์˜ DATETIEM์ด ๊ฐ€์žฅ ๋น ๋ฅธ 3๋งˆ๋ฆฌ ์กฐํšŒ

SELECT A.NAME, A.DATETIME
FROM ANIMAL_INS AS A
LEFT JOIN ANIMAL_OUTS AS B ON A.ANIMAL_ID = B.ANIMAL_ID
WHERE B.DATETIME IS NULL
ORDER BY A.DATETIME
LIMIT 3

 

๋ณดํ˜ธ์†Œ์—์„œ ์ค‘์„ฑํ™”ํ•œ ๋™๋ฌผ

ANIMAL_INS์˜ SEX_UPON_INTAKE์™€ ANIMAL_OUTS ์˜ SEX_UPON_OUTCOME ์ด ๋‹ค๋ฅธ ๊ฒฝ์šฐ ์กฐํšŒ

SELECT A.ANIMAL_ID, A.ANIMAL_TYPE, A.NAME
FROM ANIMAL_INS AS A 
LEFT JOIN ANIMAL_OUTS AS B ON A.ANIMAL_ID = B.ANIMAL_ID
WHERE A.SEX_UPON_INTAKE != B.SEX_UPON_OUTCOME
ORDER BY A.ANIMAL_ID

 

6. String, Date

 

๋ฃจ์‹œ์™€ ์—˜๋ผ ์ฐพ๊ธฐ

๋™๋ฌผ ์ค‘ ์ด๋ฆ„์ด Lucy, Ella, Pickle, Rogan, Sabrina, Mitty์ธ ๋™๋ฌผ์˜ ์•„์ด๋””์™€ ์ด๋ฆ„, ์„ฑ๋ณ„ ๋ฐ ์ค‘์„ฑํ™” ์—ฌ๋ถ€๋ฅผ ์กฐํšŒ

SELECT ANIMAL_ID, NAME, SEX_UPON_INTAKE
FROM ANIMAL_INS
WHERE NAME IN ("Lucy","Ella","Pickle","Rogan","Sabrina","Mitty")
ORDER BY ANIMAL_ID

 

์ด๋ฆ„์— el์ด ๋“ค์–ด๊ฐ€๋Š” ๋™๋ฌผ ์ฐพ๊ธฐ

์ด๋ฆ„์— "EL"์ด ๋“ค์–ด๊ฐ€๋Š” ๊ฐœ์˜ ์•„์ด๋””์™€ ์ด๋ฆ„์„ ์กฐํšŒ.

SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE NAME LIKE "%EL%" AND ANIMAL_TYPE = "DOG"
ORDER BY NAME

 

์ค‘์„ฑํ™” ์—ฌ๋ถ€ ํŒŒ์•…ํ•˜๊ธฐ

์ค‘์„ฑํ™”๋œ ๋™๋ฌผ์€ SEX_UPON_INTAKE ์ปฌ๋Ÿผ์— 'Neutered' ๋˜๋Š” 'Spayed'๋ผ๋Š” ๋‹จ์–ด๊ฐ€ ๋“ค์–ด์žˆ์Šต๋‹ˆ๋‹ค. ๋™๋ฌผ์˜ ์•„์ด๋””์™€ ์ด๋ฆ„, ์ค‘์„ฑํ™” ์—ฌ๋ถ€๋ฅผ ์•„์ด๋”” ์ˆœ์œผ๋กœ ์กฐํšŒํ•˜๋Š” SQL๋ฌธ์„ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”. ์ด๋•Œ ์ค‘์„ฑํ™”๊ฐ€ ๋˜์–ด์žˆ๋‹ค๋ฉด 'O', ์•„๋‹ˆ๋ผ๋ฉด 'X'๋ผ๊ณ  ํ‘œ์‹œ

SELECT ANIMAL_ID, NAME,
CASE WHEN SEX_UPON_INTAKE LIKE "%Neutered%" OR SEX_UPON_INTAKE LIKE "%Spayed%"
THEN "O"
ELSE "X"
END
AS "์ค‘์„ฑํ™”"
FROM ANIMAL_INS
ORDER BY ANIMAL_ID

 

์˜ค๋žœ ๊ธฐ๊ฐ„ ๋ณดํ˜ธํ•œ ๋™๋ฌผ(2)

์ž…์–‘์„ ๊ฐ„ ๋™๋ฌผ ์ค‘, ๋ณดํ˜ธ ๊ธฐ๊ฐ„์ด ๊ฐ€์žฅ ๊ธธ์—ˆ๋˜ ๋™๋ฌผ ๋‘ ๋งˆ๋ฆฌ์˜ ์•„์ด๋””์™€ ์ด๋ฆ„์„ ์กฐํšŒ. ๊ฒฐ๊ณผ๋Š” ๋ณดํ˜ธ ๊ธฐ๊ฐ„์ด ๊ธด ์ˆœ์œผ๋กœ.

SELECT A.ANIMAL_ID, A.NAME
FROM ANIMAL_INS A
JOIN ANIMAL_OUTS B ON A.ANIMAL_ID = B.ANIMAL_ID
ORDER BY B.DATETIME-A.DATETIME DESC 
LIMIT 2

 

 

DATETIME์—์„œ DATE๋กœ ํ˜• ๋ณ€ํ™˜

ํ…Œ์ด๋ธ”์— ๋“ฑ๋ก๋œ ๋ชจ๋“  ๋ ˆ์ฝ”๋“œ์— ๋Œ€ํ•ด, ๊ฐ ๋™๋ฌผ์˜ ์•„์ด๋””์™€ ์ด๋ฆ„, ๋“ค์–ด์˜จ ๋‚ ์งœ๋ฅผ ์กฐํšŒ

SELECT ANIMAL_ID, NAME, DATE_FORMAT(DATETIME, '%Y-%m-%d') AS ๋‚ ์งœ
FROM ANIMAL_INS
ORDER BY ANIMAL_ID

 

๋ฐ˜์‘ํ˜•