top

๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

IT/MySQL

SQL SELECT ์‚ฌ์šฉ๋ฒ•


SELECT ๋ฌธ์˜ ๊ธฐ์ดˆ ๋ฌธ๋ฒ•์„ ์•Œ์•„๋ณด์ž~! SELECT ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์•„๋ž˜์™€ ๊ฐ™์€ ๊ตฌ์กฐ์ด๋‹ค. ํ…Œ์ด๋ธ”์—์„œ ์ฐพ๊ณ ์žํ•˜๋Š” ์—ด์„ ์ถ”๋ ค์„œ ๋ณด์—ฌ์ค€๋‹ค.

SELECT ์—ด์ด๋ฆ„ FROM ํ…Œ์ด๋ธ”์ด๋ฆ„;


์œ„ ์ƒํƒœ์—์„œ ์ถ”๊ฐ€์ ์œผ๋กœ ์‚ด์„ ๋ง๋ถ™์ด๋ฉด ๋‹ค์–‘ํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.


โ–ถ WHERE

SELECT ์—ด์ด๋ฆ„ FROM ํ…Œ์ด๋ธ”์ด๋ฆ„ WHERE ์กฐ๊ฑด;

SELECT * FROM userTable WHERE name='ํŠค๋ฆฝ'; 

์œ„์ฒ˜๋Ÿผ WHERE ๋’ค์— ์กฐ๊ฑด์„ ๋ถ™์ด๋ฉด ์›ํ•˜๋Š” ํ–‰๋งŒ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์œ„๋Š” userTable์ด๋ผ๋Š” ํ…Œ์ด๋ธ”์—์„œ name์—ด์ด 'ํŠค๋ฆฝ'์ธ ํ–‰์˜ ๋ชจ๋“  ์—ด์„ ๊ฒ€์ƒ‰ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. WHERE ๋’ค์— ์˜ค๋Š” ์กฐ๊ฑด์‹์˜ ํ˜•ํƒœ๋Š” ๋‹ค์–‘ํ•˜๋‹ค.


SELECT name, addr FROM userTable WHERE birthYear >= 1990 AND birthYear <=2000 ;

<, >, = ๊ณผ ๊ฐ™์€ ์—ฐ์‚ฐ์ž๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ณ  ์กฐ๊ฑด๋ฌธ์ด ์—ฌ๋Ÿฌ๊ฐœ๋ผ๋ฉด AND/OR๋กœ ์ด์–ด์ค„ ์ˆ˜ ์žˆ๋‹ค.  ๊ทธ๋ฆฌ๊ณ  ์œ„์˜ ๋ช…๋ น์–ด๋Š” ์•„๋ž˜์ฒ˜๋Ÿผ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋‹ค.


SELECT name, addr FROM userTable WHERE birthYear BETWEEN 1990 AND 2000 ;

BETWEEN .. AND์€ ๋œป ๊ทธ๋ž˜๋„ ์‚ฌ์ด๊ฐ’์„ ๋‚˜ํƒ€๋‚ธ๋‹ค. ๊ทธ๋ž˜์„œ ๋‹น์—ฐํžˆ BETWEEN .. AND๋Š” ์—ฐ์†๋œ ์ˆซ์ž๋งŒ ์˜ฌ ์ˆ˜ ์žˆ๋‹ค. BETWEEN '์„œ์šธ' AND '๋ถ€์‚ฐ' ๊ฐ™์€๊ฑด ์•ˆ๋œ๋‹ค.


SELECT name, addr FROM userTable WHERE addr IN ('์ „์ฃผ', '์„œ์šธ', '๊ด‘์ฃผ');

์œ„์˜ SQL๋ฌธ์€ WHERE addr='์ „์ฃผ' OR  addr='์„œ์šธ' OR addr='๊ด‘์ฃผ' ์™€ ๊ฐ™์€ ์˜๋ฏธ์ด๋‹ค. addr์ด IN์•ˆ์˜ ๋ฌธ์ž์ธ ํ–‰์˜ name, addr์—ด์„ ๊ฒ€์ƒ‰ํ•  ๊ฒƒ์ด๋‹ค.


SELECT name, addr FROM userTable WHERE name LIKE '๋ฐ•*';

๋ฌธ์ž์—ด์˜ ์ผ๋ถ€๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ณ  ์‹ถ์„ ๋•Œ๋Š” ์œ„์ฒ˜๋Ÿผ LIKE๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด๋œ๋‹ค. ์œ„๋Š” ๋ฌธ์ž์—ด์˜ ๋งจ ์•ž ๊ธ€์ž๊ฐ€ '๋ฐ•'์ธ ํ–‰์„ ์ฐพ๋Š” ๊ฒƒ์ด๋‹ค. ํ•œ ๊ธ€์ž๋งŒ ๋งค์น˜ํ•  ์ˆ˜๋„์žˆ๋‹ค. '_ํŠค๋ฆฝ'์œผ๋กœ ํ•˜๋ฉด ๋งจ ์•ž ํ•œ ๊ธ€์ž ๋‹ค์Œ์ด 'ํŠค๋ฆฝ'์ธ ํ–‰์„ ์ฐพ๋Š”๋‹ค.




โ–ถ ์„œ๋ธŒ์ฟผ๋ฆฌ - ANY/SOME, ALL

SELECT ์—ด์ด๋ฆ„ FROM ํ…Œ์ด๋ธ”์ด๋ฆ„ WHERE ์กฐ๊ฑด ๊ด€๊ณ„์—ฐ์‚ฐ์ž (SELECT ์—ด์ด๋ฆ„ FROM ํ…Œ์ด๋ธ”์ด๋ฆ„ WHERE ์กฐ๊ฑด) ;

์„œ๋ธŒ์ฟผ๋ฆฌ๋ž€ ์œ„์—์„œ ()์•ˆ์— ์žˆ๋Š” ๊ฒƒ์„ ์„œ๋ธŒ์ฟผ๋ฆฌ๋ผ๊ณ ํ•œ๋‹ค. ๋ณต์žกํ•ด๋ณด์ด์ง€๋งŒ ๊ฐ„๋‹จํ•˜๋‹ค. ( )์—์„œ ๋ฐ˜ํ™˜๋œ ๊ฐ’์—๋”ฐ๋ฅธ ์กฐ๊ฑด์— ๋งž๋Š” ํ–‰์„ ์ฐพ๋Š” ๊ฒƒ์ด๋‹ค. ์˜ˆ์‹œ๋ฅผ ๋ณด๋ฉด ๋น ๋ฅด๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค.


SELECT * FROM userTable WHERE birthYear > (SELECT birthYear FROM userTabel WHERE name='์žฅ๋ฒš๊ฝƒ');

์œ„์˜ SQL๋ฌธ์—์„œ ( )๋Š” userTable์—์„œ name์—ด์ด '์žฅ๋ฒš๊ฝƒ'์ธ ํ–‰์˜ birthYear์„ ์ถœ๋ ฅํ•  ๊ฒƒ์ด๋‹ค. ์žฅ๋ฒš๊ฝƒ์˜ birthYear๊ฐ€ 2018์ผ ๋•Œ, ๊ฒฐ๊ตญ ์œ„์˜ SQL๋ฌธ์€ SELECT * FROM userTable WHERE birthYear > 2018๊ณผ ๊ฐ™์•„์ง€๋Š” ๊ฒƒ์ด๋‹ค.


๊ทธ๋Ÿฐ๋ฐ, ๋งŒ์•ฝ name = '์žฅ๋ฒš๊ฝƒ'์ธ ํ–‰์ด ๋‘ ๊ฐœ๊ฐ€ ์žˆ๊ณ , ๊ฐ๊ฐ์˜ birthYear๊ฐ€ 2018, 2017์ผ ๋•Œ๋Š” ์–ด๋–ป๊ฒŒ ๋ ๊นŒ.

์œ„์ฒ˜๋Ÿผ Error Code 1242๊ฐ€ ์ถœ๋ ฅ๋  ๊ฒƒ์ด๋‹ค. ๋ง๊ทธ๋Œ€๋กœ ์„œ๋ธŒ์ฟผ๋ฆฌ๊ฐ€ ๋‘ ๊ฐœ์ด์ƒ์˜ ํ–‰์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์—ฌ๊ธฐ์„œ ANY๋ฅผ ์จ๋ณด์ž!


SELECT * FROM userTable WHERE birthYear > ANY (SELECT birthYear FROM userTabel WHERE name='์žฅ๋ฒš๊ฝƒ');

์ด๋ ‡๊ฒŒ ๋˜๋ฉด birthYear๊ฐ€ 2018๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ 2017๋ณด๋‹ค ํฐ ํ–‰์ด ์ถœ๋ ฅ๋œ๋‹ค. ๊ฒฐ๊ตญ 2017๋ณด๋‹ค ํฐ ํ–‰์ด ์ถœ๋ ฅ๋˜๋Š” ๊ฒƒ์ด๋‹ค. ANY๋ฅผ ALL๋กœ ๋ฐ”๊ฟ”์ค€๋‹ค๋ฉด, birthYear๊ฐ€ 2018๋ณด๋‹ค ํฌ๊ณ  2017๋ณด๋‹ค ํฐ ํ–‰์ด ์ถœ๋ ฅ๋œ๋‹ค. ๊ฒฐ๊ตญ birthYear๊ฐ€ 2018๋ณด๋‹ค ํฐ ํ–‰์ด ์ถœ๋ ฅ๋˜๋Š” ๊ฒƒ์ด๋‹ค. ANY๋Š” OR์—ฐ์‚ฐ์ž, ALL์€ AND์—ฐ์‚ฐ์ž์™€ ๋น„์Šทํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ํŽธํ•˜๋‹ค!




โ–ถORDER BY

SELECT ์—ด์ด๋ฆ„ FROM ํ…Œ์ด๋ธ”์ด๋ฆ„ ORDER BY ์—ด์ด๋ฆ„;

ORDER BY๋Š” ์ถœ๋ ฅ ์ˆœ์„œ๋ฅผ ์ •ํ•ด์ฃผ๋Š” ๊ฒƒ์ด๋‹ค. ORDER  BY ๋’ค์—์˜ค๋Š” ์—ด ์ด๋ฆ„์„ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ์„ ์ถœ๋ ฅํ•œ๋‹ค. ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ถœ๋ ฅํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ๋งจ ๋’ค์— DESC๋ฅผ ๋ง๋ถ™์ธ๋‹ค. ์˜ค๋ฆ„์ฐจ์ˆœ์€ ASC์ด๋‹ค.

SELECT * FROM userTable ORDER BY name DESC;

์œ„ SQL์€ userTable์˜ ๋ชจ๋“  ์—ด์„ name์„ ๊ธฐ์ค€์œผ๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœํ•˜๋Š” ๊ฒƒ์ด๋‹ค.


SELECT * FROM userTable ORDER BY name DESC, birthYear ASC;

๊ธฐ์ค€์„ ์—ฌ๋Ÿฌ๊ฐœ๋กœ ํ•˜๊ณ  ์‹ถ์„ ๋•Œ๋Š” , ๋กœ ์ด์–ด์ฃผ๋ฉด๋œ๋‹ค. ์œ„๋Š” name์œผ๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌํ•˜๋˜ ์ด๋ฆ„์ด ๊ฐ™์„ ๊ฒฝ์šฐ birthYear๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์ฐธ๊ณ ๋กœ ORDER BY์ ˆ์€ ๋งจ ๋’ค์— ๋‚˜์™€์•ผํ•จ์„ ์žŠ์ง€ ๋ง์ž!!




โ–ถDISTINCT

์ค‘๋ณต์„ ์ œ์™ธํ•œ ํ–‰์„ ์ถœ๋ ฅํ•œ๋‹ค.

SELECT DISTINCT ์—ด์ด๋ฆ„ FROM ํ…Œ์ด๋ธ”์ด๋ฆ„;




โ–ถLIMIT

SELECT ์—ด์ด๋ฆ„ FROM ํ…Œ์ด๋ธ”์ด๋ฆ„ LIMIT (์‹œ์ž‘์ ,) ๊ฐœ์ˆ˜;

์ถœ๋ ฅํ•  ํ–‰์˜ ๊ฐœ์ˆ˜๋ฅผ ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

SELECT * FROM userTable ORDER BY score DESC LIMIT 5;

๋งŒ์•ฝ, userTable์—์„œ score๊ฐ€ ๊ฐ€์žฅ ๋†’์€ ์ƒ์œ„ 5๊ฐœ์˜ ํ–‰์„ ์ถœ๋ ฅํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์œ„์™€ ๊ฐ™์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.


SELECT * FROM userTable ORDER BY score DESC LIMIT 3, 5;

๊ฐœ์ˆ˜๋ฅผ ์…€ ์‹œ์ž‘์ ์„ ์ •ํ•  ์ˆ˜๋„ ์žˆ๋‹ค. score๊ฐ€ ๊ฐ€์žฅ ๋†’์€ ์ƒ์œ„ 3๋ฒˆ์งธ๋ถ€ํ„ฐ 5๊ฐœ์˜ ํ–‰์„ ์ถœ๋ ฅํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์œ„์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•œ๋‹ค.




โ–ถCREATE TABLE ... SELECT

CREATE TABLE ์ƒˆ๋กœ์šดํ…Œ์ด๋ธ”์ด๋ฆ„ (SELECT ๋ณต์‚ฌํ• ์—ด์ด๋ฆ„ FROM ๊ธฐ์กดํ…Œ์ด๋ธ”์ด๋ฆ„;

ํ…Œ์ด๋ธ”์˜ ์›ํ•˜๋Š” ์—ด์„ ๋ณต์‚ฌํ•ด์„œ ์ƒˆ๋กœ์šด ํ…Œ์ด๋ธ”์„ ๋งŒ๋“ค ์ˆ˜๋„ ์žˆ๋‹ค!


CREATE TABLE userTable2 (SELECT name, score FROM userTable);

์œ„๋Š” userTable์—์„œ name, score ์—ด์„ userTable2๋ฅผ ๋งŒ๋“ค์–ด ๋ณต์‚ฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค.