[sql] SELECT, DISTINCT, WHERE, COUNT, ORDER BY ์ •๋ฆฌ

[sql] SELECT, DISTINCT, WHERE, COUNT, ORDER BY ์ •๋ฆฌ

ยท

4 min read

๐Ÿ“Œ [SQL ๊ธฐ์ดˆ] - SELECT, DISTINCT, WHERE, COUNT, ORDER BY

๐Ÿ’ก SQL SELECT ์ •๋ฆฌ

SELECT column1, column2 FROM table_name;
  • SELECT โ†’ ์กฐํšŒํ•  ์ปฌ๋Ÿผ ์„ ํƒ

  • FROM โ†’ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ฌ ํ…Œ์ด๋ธ” ์ง€์ •

  • ๋’ค์—์„œ๋ถ€ํ„ฐ ์‹คํ–‰ ๋จ

โœ… ๋ชจ๋“  ์ปฌ๋Ÿผ ์กฐํšŒ (* ์‚ฌ์šฉ)

SELECT * FROM employees;
  • employees ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ์ปฌ๋Ÿผ์„ ์กฐํšŒ

  • ์‹ค๋ฌด์—์„œ๋Š” ๋ถˆํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๊นŒ์ง€ ๊ฐ€์ ธ์™€์„œ ์„ฑ๋Šฅ ์ €ํ•˜ ๊ฐ€๋Šฅ โ†’ ๋ชจ๋“  ์—ด์„ ํฌํ•จํ•œ ํ…Œ์ด๋ธ”์˜ ์ „์ฒด ์ •๋ณด๊ฐ€ ์ •๋ง ํ•„์š”ํ•  ๋•Œ๋งŒ ์‚ฌ์šฉ

โœ… ์กฐ๊ฑด์„ ์ถ”๊ฐ€ํ•˜๋Š” WHERE ์ ˆ

SELECT name, age FROM users WHERE age > 30;
SELECT * FROM film WHERE rating != 'R';
  • WHERE โ†’ ํŠน์ • ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๋ฐ์ดํ„ฐ๋งŒ ์กฐํšŒ

  • ์—ฌ๊ธฐ์„œ๋Š” ๋‚˜์ด๊ฐ€ 30 ์ดˆ๊ณผ์ธ ์œ ์ €๋งŒ ์ถœ๋ ฅ

SELECT name, choice FROM table WHERE name = 'David';
  • ๋ฌธ์ž์—ด ๊ตฌ๋ณ„์„ ์œ„ํ•ด ์ž‘์€ ๋”ฐ์˜ดํ‘œ ์‚ฌ์šฉ
SELECT name, choice FROM table WHERE name = 'David' AND choice = 'red';
  • AND์™€ ๊ฐ™์€ ๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

โœ… ์กฐ๊ฑด์— ๋งž๋Š” ํ–‰์˜ ๊ฐœ์ˆ˜ COUNT ์ ˆ

SELECT COUNT(name) FROM table_name;

SELECT COUNT(*) FROM table_name; -- ์ „์ฒด ์ˆ˜ ์„ธ๊ธฐ

SELECT COUNT(*) FROM film
WHERE rental_rate > 4 AND replacement_cost >= 19.99  /*WHERE์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ*/
AND rating = 'R';
  • ํŠน์ • ์ฟผ๋ฆฌ ์กฐ๊ฑด์— ๋งž๋Š” ์ž…๋ ฅ ํ–‰์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•จ

  • ํŠน์ • ์—ด์„ ์ง€์ •ํ•ด์„œ ์ ์šฉ ํ˜น์€ COUNT(*)๋กœ ์ „์ฒด ์ ์šฉ ๊ฐ€๋Šฅ

    • ํ•˜์ง€๋งŒ ๋‚˜์ค‘์— ์ฟผ๋ฆฌ ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ๋ณผ ๋•Œ ์–ด๋–ค ๊ฒƒ์„ ์งˆ๋ฌธํ•˜๋ ค๊ณ  ํ–ˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์‰ฝ๊ฒŒ ํ•˜๋ ค๋ฉด, ์—ด ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Œ
  • COUNT๋Š” ํŠน์ • ๋Œ€์ƒ์— ์ž‘์šฉํ•˜๋Š” ํ•จ์ˆ˜์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ด„ํ˜ธ๊ฐ€ ๋ฐ˜๋“œ์‹œ ํ•„์š”

  • COUNT๋Š” ๋‹ค๋ฅธ ํ•จ์ˆ˜์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ์œ ์šฉํ•จ (ex. DISTINCT)

    • ex. ํ…Œ์ด๋ธ”์— ๊ณ ์œ ํ•œ ์ด๋ฆ„์ด ๋ช‡ ๊ฐœ์ธ๊ฐ€?

    • ๋จผ์ € DISTINCT๋กœ ๊ณ ์œ ํ•œ ์ด๋ฆ„์˜ ๊ฐœ์ˆ˜๋ฅผ ํŒŒ์•… โ†’ COUNT๋กœ ํ–‰์˜ ๊ฐœ์ˆ˜ ์„ธ๊ธฐ

    • ๋‘ ๊ฐ€์ง€ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ๊ด„ํ˜ธ๋กœ ๊ตฌ๋ถ„ํ•ด์ฃผ์–ด์•ผ ํ•จ(๊ด„ํ˜ธ๊ฐ€ ์—†์œผ๋ฉด DISTINCT๋ผ๋Š” ์—ด์„ ์ฐพ์œผ๋ ค๊ณ  ํ•  ๊ฒƒ)

        SELECT COUNT(DISTINCT name) FROM table_name;
        SELECT COUNT(DISTINCT (name)) FROM table_name;
      

โœ… ์ •๋ ฌ (ORDER BY)

SELECT name, age FROM users ORDER BY age DESC ํ˜น์€ ASC;
  • ๋ฌธ์ž์—ด ๊ธฐ๋ฐ˜ ์—ด์€ ์•ŒํŒŒ๋ฒณ ์ˆœ, ์ˆซ์ž ์—ด์€ ๋ฒˆํ˜ธ์ˆœ์ด ๋จ

  • ORDER BY age DESC โ†’ ๋‚˜์ด๋ฅผ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ

  • ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ์€ ASC (๊ธฐ๋ณธ๊ฐ’)

SELECT first_name, last_name FROM customer
ORDER BY store_id DESC, first_name ASC;
  • ์œ„์™€ ๊ฐ™์ด store_id๋Š” ๋‚ด๋ฆผ์ฐจ์ˆœ, first_name์€ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค

  • SELECT ๋ฌธ์—์„œ ์š”์ฒญํ•˜์ง€ ์•Š์€ ์—ด(store_id)๋กœ๋„ ์ •๋ ฌ์ด ๊ฐ€๋Šฅํ•˜๋‹ค

โœ… ์ค‘๋ณต ์ œ๊ฑฐ (DISTINCT)

SELECT DISTINCT country FROM customers;
  • ํ•ด๋‹น ํ…Œ์ด๋ธ” ๋˜๋Š” ํ•ด๋‹น ์—ด์— ๊ณ ์œ ํ•œ ๋ฐ์ดํ„ฐ๋Š” ๋ช‡ ๊ฐœ์ธ๊ฐ€?

    • ex. film ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค์•ˆ์— ๋ช‡ ๊ฐ€์ง€์˜ ์ถœ์‹œ๋…„๋„๊ฐ€ ์žˆ๋Š”์ง€ ์•Œ๊ณ  ์‹ถ์„ ๋•Œ
  • DISTINCT โ†’ ์ค‘๋ณต๋œ ๊ฐ’ ์ œ๊ฑฐํ•˜๊ณ  ์œ ๋‹ˆํฌํ•œ ๊ฐ’๋งŒ ์กฐํšŒ

  • ์ค‘๋ณต๋˜์ง€ ์•Š๋Š” ๊ฐ’์„ ์กฐํšŒํ•  ์—ด ๋ฐ”๋กœ ์•ž์— ์ ์Œ

  • SELECT DISTINCT (country) FROM customers;์ฒ˜๋Ÿผ ์–ด๋–ค ์—ด์— ์ ์šฉ๋˜๋Š”์ง€ ํ™•์‹คํžˆ ํ•˜๊ธฐ ์œ„ํ•ด ๊ด„ํ˜ธ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜๋„ ์žˆ์Œ

โœจ In English:

  • SELECT column FROM table retrieves data from a database table.

  • WHERE filters rows based on conditions.

  • ORDER BY sorts the result set.

  • DISTINCT removes duplicate values.

๐Ÿ“ ์˜ค๋Š˜ ๋ฐฐ์šด ์ :

  • SQL ํ‚ค์›Œ๋“œ๋Š” ๋Œ€๋ฌธ์ž๋กœ ํ‘œ๊ธฐํ•˜์ง€๋งŒ ๊ตณ์ด ๋Œ€๋ฌธ์ž๋กœ ์“ฐ์ง€ ์•Š์•„๋„ ์‹คํ–‰์€ ๋œ๋‹ค. ํ•˜์ง€๋งŒ ์ปฌ๋Ÿผ ์ด๋ฆ„ ๋“ฑ๊ณผ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•ด ๋Œ€๋ฌธ์ž๋กœ ํ‘œ๊ธฐํ•œ๋‹ค.

  • SQL ์ฟผ๋ฆฌ ๋’ค์— ๋ถ™์ด๋Š” ์„ธ๋ฏธ์ฝœ๋ก ์€ ์‚ญ์ œํ•ด๋„ ์‹คํ–‰์ด ๋˜์ง€๋งŒ, ๊ฐ€๋…์„ฑ์„ ์œ„ํ•ด ์ ์–ด์ค€๋‹ค.

  • SELECT *๋Š” ํŽธํ•˜์ง€๋งŒ, ๋ถˆํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ ์กฐํšŒ๋กœ ์„ฑ๋Šฅ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ๋‹ค.

  • WHERE์„ ์ž˜ ํ™œ์šฉํ•˜๋ฉด ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋งŒ ๋ฝ‘์„ ์ˆ˜ ์žˆ์Œ.

  • SQL์€ ๋‹จ์ˆœํ•˜์ง€๋งŒ, ํšจ์œจ์ ์ธ ์ฟผ๋ฆฌ๋ฅผ ์งœ๋Š” ๊ฒŒ ์ค‘์š”ํ•˜๋‹ค.

  • SQL ๋Šฅ์ˆ™๋„๋ฅผ ๊ฐ€๋Š ํ•  ๋•Œ๋Š” ์—…๋ฌด์ƒ ๋ฌธ์ œ๋‚˜ ์—…๋ฌด ์ƒํ™ฉ์„ ์‹ค์ œ ์ฟผ๋ฆฌ๋กœ ์ „ํ™˜ํ•ด์„œ ํ†ต์ฐฐ์ด๋‚˜ ์ •๋ณด๋ฅผ ์–ป๊ฑฐ๋‚˜ ํ•ด๋‹น ๋ฌธ์ œ์— ์ง์ ‘ ๋‹ต์„ ์ œ์‹œํ•  ์ˆ˜ ์žˆ๋Š”์ง€๋กœ ํŒŒ์•…ํ•œ๋‹ค.


PostgreSQL Memo

  • ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ํ…Œ์ด๋ธ” ๋ณด๊ธฐ: ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค > Schemas > public > Tables

Comparison Operators

OperatorDescription
\=equal
\>Grater than
<Less than
\>=Greater than or equal to
<=Less than or equal to
<> or !=Not equal to

Logical Operators

  • AND

  • OR

  • NOT: ์ด ์กฐ๊ฑด์ด ์ฐธ์ด ์•„๋‹Œ ๊ฒƒ


์—ฐ์Šต ๋ฌธ์ œ

  • Business Situation 1: ๊ธฐ์กด ๊ณ ๊ฐ์—๊ฒŒ ํ™๋ณด ๋ฉ”์ผ์„ ๋ณด๋‚ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ

    • How: SELECT ๋ฌธ์„ ์‚ฌ์šฉํ•ด์„œ ๋ชจ๋“  ๊ณ ๊ฐ์˜ ์„ฑ๊ณผ ์ด๋ฆ„, ์ด๋ฉ”์ผ ์ฃผ์†Œ๋ฅผ ๋ถˆ๋Ÿฌ์˜จ๋‹ค.

    • ๋ฐฉ๋ฒ•:

      1. pgadmin 4๋กœ ์ปฌ๋Ÿผ ํŒŒ์•…

      2. SQL ์ฟผ๋ฆฌ ๋ฌธ ์ž‘์„ฑ

        SELECT first_name, last_name, email FROM customer;
  • 1๋ฒˆ์€ SELECT * from customer๋กœ ์ „์ฒด ํ…Œ์ด๋ธ”์„ ๋ถˆ๋Ÿฌ์™€์„œ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ๋‹ค.
  • Business Situation 2: ํ•œ ๊ณ ๊ฐ(Nancy Thomas)์ด ๋งค์žฅ์— ์ง€๊ฐ‘์„ ๋†“๊ณ  ๊ฐ€์„œ, ์ด๋ฉ”์ผ์„ ํ†ตํ•ด ์•Œ๋ ค์•ผ ํ•˜๋Š” ์ƒํ™ฉ.

    • How: email ์—ด์—์„œ WHERE๋กœ Nancy Thomas์˜ ์ด๋ฆ„์„ ์ฐพ๋Š”๋‹ค.

        SELECT email FROM customer
        WHERE first_name = 'Nancy'
        AND last_name = 'Thomas';
      
ย