๐Ÿ” ๊ธฐ๋ณธ ๊ฒ€์ƒ‰ Query

SELECT      <attribute list>
FROM        <relation list>
[ WHERE     <condition> ]
-- for aggregates
[ GROUP BY  <attribute list> ]
[ HAVING    <condition> ]
[ ORDER BY  <attribute list> [DESC] ];

SELECT ๋ฌธ

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์ •๋ณด ๊ฒ€์ƒ‰์„ ํ•˜๋Š”๋ฐ ๊ฐ€์žฅ ๊ธฐ๋ณธ์ด ๋˜๋Š” ๊ตฌ๋ฌธ์œผ๋กœ, SELECT-FROM-WHERE ํ˜•ํƒœ๊ฐ€ ๊ธฐ๋ณธ์ ์ธ ํ˜•ํƒœ๋‹ค.

relational algebra์—์„œ selection๊ณผ๋Š” ๋‹ค๋ฆ„

ex)

SELECT Name
FROM Employee
WHERE Age >= 20;

Aliasing / Renaming

๋‘ ๊ฐœ ์ด์ƒ์˜ attribute๋“ค์ด ์„œ๋กœ ์ด๋ฆ„์ด ๊ฐ™์€ ๊ฒฝ์šฐ์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ด๋ฆ„์„ ๋ฐ”๊พธ๊ฑฐ๋‚˜ ๋ช…์‹œํ•ด ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

SELECT E.Fname, E.Lname, S.Fname, S.Lname
FROM EMPLOYEE (AS) E, EMPLOYEE (AS) S
WHERE E.Super_ssn = S.ssn;

SQL ์งˆ์˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ํ•  ๋•Œ, โ€œ์–ด๋–ป๊ฒŒโ€ ๊ฐ€ ์•„๋‹Œ โ€œ์–ด๋–คโ€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ธฐ ์›ํ•˜๋Š”์ง€ ๊ธฐ์ˆ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋น„์ ˆ์ฐจ์ (non-procedural) ์ด๊ณ , ์„ ์–ธ์ (declarative) ์ด๋‹ค.


๐Ÿ“ฆ SQL ์ง‘ํ•ฉ ์—ฐ์‚ฐ์ž

SQL์€ ์ค‘๋ณต๋œ ํŠœํ”Œ์„ ์ œ๊ฑฐํ•˜์ง€ ์•Š๋Š”๋‹ค.

  1. ์ค‘๋ณต ์ œ๊ฑฐ๋Š” ๋น„์šฉ์ด ๋งŽ์ด ๋“ ๋‹ค.
  2. ์‚ฌ์šฉ์ž๊ฐ€ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ์—์„œ ์ค‘๋ณต ํŠœํ”Œ์„ ๋ณด๊ธฐ ์›ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
  3. ์ง‘๊ณ„ ํ•จ์ˆ˜(sum, avg, max, distinct, โ€ฆ)๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๋Œ€๋ถ€๋ถ„ ์ค‘๋ณต ์ œ๊ฑฐ๋ฅผ ์›ํ•˜์ง€ ์•Š๋Š”๋‹ค.

์ค‘๋ณต ์ œ๊ฑฐ๋ฅผ ์›ํ•œ๋‹ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด DISTINCT๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

SELECT DISTINCT Salary
FROM EMPLOYEE;

Set ์—ฐ์‚ฐ์ž

UNION (ํ•ฉ์ง‘ํ•ฉ) / EXCEPT (์ฐจ์ง‘ํ•ฉ) / INTERSECT (๊ต์ง‘ํ•ฉ) Set ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋‘ ํ…Œ์ด๋ธ”์ด Type-compatible ํ•ด์•ผ ํ•œ๋‹ค.

Type-compatible

  1. ๋‘ relation์€ ๊ฐ™์€ attribute๋ฅผ ๊ฐ€์ ธ์•ผ ํ•จ
  2. attribute๋Š” ๋‘ relation์—์„œ ๊ฐ™์€ ์ˆœ์„œ๋กœ ๋‚˜ํƒ€๋‚˜์•ผ ํ•จ
(
  SELECT DISTINCT Pnumber
  FROM PROJECT, WORKS_ON, EMPLOYEE
  WHERE Pnumber = Pno AND Essn = Ssn AND Lname = 'Smith'
)
UNION
(
  SELECT DISTINCT Pnumber
  FROM PROJECT, DEPARTMENT, EMPLOYEE
  WHERE Dnum = Dnumber AND Mgr_ssn = Ssn AND Lname = 'Smith'
);

โš™ SQL ์ถ”๊ฐ€ ๊ธฐ๋Šฅ

Substring Pattern Matching

LIKE ๋น„๊ต ์—ฐ์‚ฐ์ž

  • % : 0๊ฐœ ์ด์ƒ์˜ ๋ฌธ์ž๋ฅผ ๋Œ€์ฒด
    SELECT Fname, Lname
    FROM EMPLOYEE
    WHERE Address LIKE '%Houston, TX%';
  • _ : 1๊ฐœ ๋ฌธ์ž๋ฅผ ๋Œ€์ฒด
    SELECT Fname, Lname
    FROM EMPLOYEE
    WHERE Bdate LIKE '199_____-1______';

์‚ฐ์ˆ  ์—ฐ์‚ฐ์ž

  • ํ‘œ์ค€ ์‚ฐ์ˆ  ์—ฐ์‚ฐ์ž : +, -, *, /
  • BETWEEN ๋น„๊ต ์—ฐ์‚ฐ์ž
    SELECT *
    FROM EMPLOYEE
    WHERE (Salary BETWEEN 30000 AND 40000) AND Dno = 5;

์งˆ์˜ ๊ฒฐ๊ณผ ์ •๋ ฌ

ORDER BY ์ ˆ

  • DESC : attribute ๊ฐ’๋“ค์„ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ๊ฒฐ๊ณผ ์ •๋ ฌ
  • ASC : attribute ๊ฐ’๋“ค์„ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ๊ฒฐ๊ณผ ์ •๋ ฌ
[...]
ORDER BY D.Dname DESC, E.Lname ASC, E.Fname ASC;

โœ” INSERT ๋ฌธ

relation์— tuple์„ ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ

  • attribute ๊ฐ’์€ CREATE TABLE๋ฌธ์— ์ง€์ •๋œ attribute์™€ ๊ฐ™์€ ์ˆœ์„œ๋กœ ๋‚˜์—ด๋˜์–ด์•ผ ํ•œ๋‹ค.
  • ๋ฐ์ดํ„ฐ ํƒ€์ž…์— ๋Œ€ํ•œ ์ œ์•ฝ ์กฐ๊ฑด์€ ์ž๋™์œผ๋กœ ์ž‘๋™ํ•˜์—ฌ, ์ž˜๋ชป๋œ ๊ฐ’์ด ๋“ค์–ด์˜ค๋ฉด ๊ฑฐ๋ถ€๋œ๋‹ค.
  • DDL๋ฌธ์œผ๋กœ์„œ ๋ฌด๊ฒฐ์„ฑ ์ œ์•ฝ์กฐ๊ฑด์ด ์ ์šฉ๋œ๋‹ค.
INSERT INTO EMPLOYEE (Fname, Lname, Dno)
VALUES ('Fernando', 'Tatis', 4);

์œ„ ์˜ˆ์‹œ์™€ ๊ฐ™์ด ์›ํ•˜๋Š” attribute ๊ฐ’๋งŒ ๋ช…์‹œํ•˜์—ฌ INSERT๋ฌธ์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.
(=> ๋ช…์‹œ๋˜์ง€ ์•Š์€ ๊ฐ’๋“ค์€ DEFAULT ๋˜๋Š” NULL๋กœ ์„ค์ •๋จ)
attribute ๊ฐ’์„ ๋ช…์‹œํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ, NULL์„ ํฌํ•จํ•œ ๋ชจ๋“  ๊ฐ’์„ ์ž‘์„ฑํ•ด์•ผ ํ•œ๋‹ค.


โŒ DELETE ๋ฌธ

์กฐ๊ฑด์— ๋งž๋Š” relation์—์„œ tuple์„ ์‚ญ์ œํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ

  • WHERE ์ ˆ์˜ ์กฐ๊ฑด์— ๋งŒ์กฑํ•˜๋Š” tuple์„ ์„ ํƒํ•ด ์ œ๊ฑฐํ•œ๋‹ค.
  • tuple์€ ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ํ…Œ์ด๋ธ”์—์„œ๋งŒ ์‚ญ์ œ๋œ๋‹ค.
  • ์ฐธ์กฐ ๋ฌด๊ฒฐ์„ฑ์ด ์ง€์ผœ์ ธ์•ผํ•œ๋‹ค.
  • CASCADE๊ฐ€ ์ฐธ์กฐ ๋ฌด๊ฒฐ์„ฑ ์ œ์•ฝ์กฐ๊ฑด์— ์„ค์ •๋˜์–ด ์žˆ์œผ๋ฉด, ์‚ญ์ œํ•  tuple์„ ์ฐธ์กฐํ•˜๋Š” ๋ชจ๋“  tuple์ด ์‚ญ์ œ๋œ๋‹ค.
DELETE FROM EMPLOYEE
WHERE Dno = 5;

โœ‚ UPDATE ๋ฌธ

์กฐ๊ฑด์— ๋งž๋Š” relation์—์„œ tuple์„ ์—…๋ฐ์ดํŠธํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ

  • WHERE ์ ˆ์˜ ์กฐ๊ฑด์— ๋งŒ์กฑํ•˜๋Š” tuple์„ ์„ ํƒํ•œ๋‹ค.
  • SET ์ ˆ์€ ์ˆ˜์ •ํ•  attribute์™€ ๊ทธ ๊ฐ’์„ ์ง€์ •ํ•œ๋‹ค.
  • ์ด๋Ÿฐ ํŠธ๋ฆฌ๊ฑฐ ์ž‘์—…์ด ์ฐธ์กฐ ๋ฌด๊ฒฐ์„ฑ ์ œ์•ฝ์กฐ๊ฑด์— ์„ค์ •๋˜์–ด ์žˆ์œผ๋ฉด, Primary Key ๊ฐ’ ์—…๋ฐ์ดํŠธ๋Š” ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์— ์žˆ๋Š” tuple์˜ Foreign Key ๊ฐ’์œผ๋กœ ์ „ํŒŒ๋  ์ˆ˜ ์žˆ๋‹ค.
UPDATE EMPLOYEE E
SET E.Dno = 5,
WHERE E.Lname = 'Tatis';