๐ ๊ธฐ๋ณธ ๊ฒ์ 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์ ์ค๋ณต๋ ํํ์ ์ ๊ฑฐํ์ง ์๋๋ค.
- ์ค๋ณต ์ ๊ฑฐ๋ ๋น์ฉ์ด ๋ง์ด ๋ ๋ค.
- ์ฌ์ฉ์๊ฐ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ์์ ์ค๋ณต ํํ์ ๋ณด๊ธฐ ์ํ ์๋ ์๋ค.
- ์ง๊ณ ํจ์(sum, avg, max, distinct, ...)๋ฅผ ์ฌ์ฉํ ๋ ๋๋ถ๋ถ ์ค๋ณต ์ ๊ฑฐ๋ฅผ ์ํ์ง ์๋๋ค.
์ค๋ณต ์ ๊ฑฐ๋ฅผ ์ํ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ดDISTINCT
๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
SELECT DISTINCT Salary
FROM EMPLOYEE;
Set ์ฐ์ฐ์
UNION (ํฉ์งํฉ) / EXCEPT (์ฐจ์งํฉ) / INTERSECT (๊ต์งํฉ)
Set ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ๋ ํ
์ด๋ธ์ด Type-compatible ํด์ผ ํ๋ค.
Type-compatible
- ๋ relation์ ๊ฐ์ attribute๋ฅผ ๊ฐ์ ธ์ผ ํจ
- 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';
'CS > Database' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Database] SQL ๊ธฐ์ด (1) | 2023.01.22 |
---|---|
[Database] ER-to-Relational Mapping (0) | 2023.01.22 |
[Database] Relational Model (0) | 2023.01.22 |
[Database] Entity-Relationship(ER) Model (0) | 2023.01.22 |
[Database] Data Model & Schema (0) | 2023.01.22 |