SQL ์กฐํšŒ 1

JEREGIMยท2023๋…„ 4์›” 4์ผ
0

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค

๋ชฉ๋ก ๋ณด๊ธฐ
5/6

๐Ÿ“ŒSELECT

SELECT attributes
FROM tables
WHERE conditions;

id๊ฐ€ 9์ธ ์ง์›์˜ ์ด๋ฆ„๊ณผ ์ง๊ตฐ์„ ์ถœ๋ ฅํ•˜๋ผ

mysql> SELECT name, position FROM employee WHERE id = 9;
+-------+----------+
| name  | position |
+-------+----------+
| HENRY | HR       |
+-------+----------+
  • ์กฐ๊ฑด id = 9 ๋ฅผ selection condition ์ด๋ผ๊ณ  ํ•œ๋‹ค.

  • name, position์„ projection attributes ๋ผ๊ณ  ํ•œ๋‹ค. ์กฐ๊ฑด์— ๋งž๋Š” tuples์˜ ๊ฐ’๋“ค ์ค‘์—์„œ projection attributes์— ์˜ํ•ด ์ง€์ •๋œ attribute์— ๋Œ€์‘ํ•˜๋Š” ๊ฐ’๋งŒ ์ถœ๋ ฅํ•œ๋‹ค.

project 2002๋ฅผ ๋ฆฌ๋”ฉํ•˜๋Š” ์ž„์ง์›์˜ id์™€ ์ด๋ฆ„๊ณผ ์ง๊ตฐ์„ ์ถœ๋ ฅํ•˜๋ผ

  • 2๊ฐœ์˜ ํ…Œ์ด๋ธ”์„ ์ฐธ๊ณ ํ•ด์„œ sql ๋ฌธ์„ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค.
mysql> SELECT employee.id, employee.name, employee.position
    -> FROM employee, project
    -> WHERE project.id = 2002 AND project.leader_id = employee.id;
+----+--------+----------+
| id | name   | position |
+----+--------+----------+
| 13 | JISUNG | PO       |
+----+--------+----------+
  • project.leader_id = employee.id๋ฅผ join condition์ด๋ผ๊ณ  ํ•œ๋‹ค.

  • project.id = 2002 ์ธ ํŠœํ”Œ๊ณผ join condition์œผ๋กœ ์ธํ•ด ์ด์— ๋Œ€์‘ํ•˜๋Š employee ํ…Œ์ด๋ธ”์˜ ํŠœํ”Œ๋„ ์„ ํƒ์ด ๋œ๋‹ค.

  • ๋งˆ์ง€๋ง‰์œผ๋กœ employee.id, employee.name, employee.position ๋ผ๋Š” projection attributes๋ฅผ ํ†ตํ•ด ํŠœํ”Œ ์ค‘ projection attributes์™€ ๋Œ€์‘ํ•˜๋Š” ๊ฐ’๋งŒ ์ถœ๋ ฅ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

์ฃผ์˜์‚ฌํ•ญ

SELECT๋กœ ์กฐํšŒํ•  ๋•Œ ์กฐ๊ฑด๋“ค์„ ํฌํ•จํ•ด์„œ ์กฐํšŒ๋ฅผ ํ•œ๋‹ค๋ฉด ์ด ์กฐ๊ฑด๋“ค๊ณผ ๊ด€๋ จ๋œ attributes์— index๊ฐ€ ๊ฑธ๋ ค์žˆ์–ด์•ผ ํ•œ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ์•„์งˆ์ˆ˜๋ก ์กฐํšŒ ์†๋„๊ฐ€ ๋Š๋ ค์ง€๊ฒŒ ๋œ๋‹ค.


๐Ÿ“ŒAS

ํ…Œ์ด๋ธ”์ด๋ฆ„์„ ๋ณ„์นญ์œผ๋กœ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋‹ค.

mysql> SELECT E.id, E.name, E.position
    -> FROM employee AS E, project AS P
    -> WHERE P.id = 2002 AND P.leader_id = E.id;
+----+--------+----------+
| id | name   | position |
+----+--------+----------+
| 13 | JISUNG | PO       |
+----+--------+----------+

์ถœ๋ ฅ๋˜๋Š” attribute ์ด๋ฆ„์„ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋‹ค.

mysql> SELECT E.id AS leader_id, E.name AS leader_name, E.position
    -> FROM employee AS E, project AS P
    -> WHERE P.id = 2002 AND P.leader_id = E.id;
+-----------+-------------+----------+
| leader_id | leader_name | position |
+-----------+-------------+----------+
|        13 | JISUNG      | PO       |
+-----------+-------------+----------+

AS๋Š” ์ƒ๋žต์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

mysql> SELECT E.id leader_id, E.name leader_name, E.position
    -> FROM employee E, project P
    -> WHERE P.id = 2002 AND P.leader_id = E.id;
+-----------+-------------+----------+
| leader_id | leader_name | position |
+-----------+-------------+----------+
|        13 | JISUNG      | PO       |
+-----------+-------------+----------+

๐Ÿ“ŒDISTINCT

์ง๊ตฐ์ด ๋””์ž์ด๋„ˆ์ธ ์ž„์ง์›๋“ค์ด ์ฐธ์—ฌํ•˜๊ณ  ์žˆ๋Š” ํ”„๋กœ์ ํŠธ๋“ค์˜ id์™€ ์ด๋ฆ„์„ ์ถœ๋ ฅํ•˜๋ผ

  • 3๊ฐœ์˜ ํ…Œ์ด๋ธ”์„ ์ฐธ๊ณ ํ•ด์•ผํ•œ๋‹ค.

  • employee ํ…Œ์ด๋ธ”๊ณผ project ํ…Œ์ด๋ธ”์„ ์—ฐ๊ฒฐ์‹œํ‚ค๊ธฐ ์œ„ํ•ด works_on ํ…Œ์ด๋ธ”์ด ํ•„์š”ํ•˜๋‹ค.

mysql> SELECT P.id, P.name
    -> FROM employee E, works_on W, project P
    -> WHERE E.position = 'DSGN'
    -> AND E.id = W.empl_id AND P.id = W.proj_id;
+------+------------------+
| id   | name             |
+------+------------------+
| 2003 | ํ™ˆํŽ˜์ด์ง€ UI ๊ฐœ์„    |
| 2003 | ํ™ˆํŽ˜์ด์ง€ UI ๊ฐœ์„    |
+------+------------------+
  • SELECT ๊ฒฐ๊ณผ์—์„œ ์ค‘๋ณต๋˜๋Š” tuples์„ ์ œ์™ธํ•˜๊ณ  ์‹ถ์„๋•Œ DISTINCT๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
mysql> SELECT DISTINCT P.id, P.name
    -> FROM employee E, works_on W, project P
    -> WHERE E.position = 'DSGN'
    -> AND E.id = W.empl_id AND P.id = W.proj_id;
+------+------------------+
| id   | name             |
+------+------------------+
| 2003 | ํ™ˆํŽ˜์ด์ง€ UI ๊ฐœ์„    |
+------+------------------+

๐Ÿ“ŒLIKE

ํ•ญ๋ชฉ์„ค๋ช…
LIKE๋ฌธ์ž์—ด pattern matching์— ์‚ฌ์šฉ
%0๊ฐœ ์ด์ƒ์˜ ์ž„์˜์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ฐ€์ง€๋Š” ๋ฌธ์ž๋“ค์„ ์˜๋ฏธ
_ํ•˜๋‚˜์˜ ๋ฌธ์ž๋ฅผ ์˜๋ฏธ
\%, _๋ฅผ ๋ฌธ์ž ๊ทธ๋Œ€๋กœ์˜ ์˜๋ฏธ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์„๋•Œ ์‚ฌ์šฉ

์ด๋ฆ„์ด N์œผ๋กœ ์‹œ์ž‘ํ•˜๊ฑฐ๋‚˜ N์œผ๋กœ ๋๋‚˜๋Š” ์ง์›์˜ ์ด๋ฆ„์„ ์ถœ๋ ฅํ•˜๋ผ

mysql> SELECT name
    -> FROM employee
    -> WHERE name LIKE 'N%' OR name LIKE '%N';
+--------+
| name   |
+--------+
| BROWN  |
| NICOLE |
+--------+
  • name LIKE 'N%' : ์ด๋ฆ„์ด N์œผ๋กœ ์‹œ์ž‘

  • name LIKE '%N' : ์ด๋ฆ„์ด N์œผ๋กœ ๋๋‚จ

์ด๋ฆ„์— NG๊ฐ€ ํฌํ•จ๋˜์–ด์žˆ๋Š” ์ง์›์˜ ์ด๋ฆ„์„ ์ถœ๋ ฅํ•˜๋ผ

mysql> SELECT name
    -> FROM employee
    -> WHERE name LIKE '%NG%';
+--------+
| name   |
+--------+
| DINGYO |
| JISUNG |
+--------+
  • name LIKE '%NG%' : ์ด๋ฆ„์— NG๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Œ

์ด๋ฆ„์ด J๋กœ ์‹œ์ž‘ํ•˜๊ณ  4๊ธ€์ž์ธ ์ง์›์˜ ์ด๋ฆ„์„ ์ถœ๋ ฅํ•˜๋ผ

mysql> SELECT name
    -> FROM employee
    -> WHERE name LIKE 'J___';
+------+
| name |
+------+
| JANE |
+------+
  • name LIKE 'J___' : ์ด๋ฆ„์ด J๋กœ ์‹œ์ž‘ํ•˜๊ณ  4๊ธ€์ž

%๋‚˜ _๋ฅผ ๋ฌธ์ž ๊ทธ๋Œ€๋กœ์˜ ์˜๋ฏธ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์„๋• \%, \_ ๋กœ ์•ž์— \๋ฅผ ๋ถ™์ด๋ฉด ๋œ๋‹ค.

mysql> SELECT name
    -> FROM project
    -> WHERE name LIKE '\%%';
  • name LIKE '\%%' : %๋กœ ์‹œ์ž‘ํ•˜๋Š” project ์ด๋ฆ„

  • name LIKE '%\_' : _๋กœ ๋๋‚˜๋Š” project ์ด๋ฆ„

0๊ฐœ์˜ ๋Œ“๊ธ€