MySQL
- ๊ด๊ณํ ๋ชจ๋ธ์ ๊ด๊ณ, ํํ, ์์ฑ์ด ํ ์ด๋ธ, ํ, ์ด๋ก ๋์.
- ๊ฐ ๊ตฌ๋ฌธ ๋ง์ง๋ง์๋ ์ธ๋ฏธ์ฝ๋ก ์ด ์์ด์ผ ํ๋ค. (์ค๊ฐ๊ณ ์ฌ์ ์ธ๋ฏธ์ฝ๋ก ๊ผญ ์จ์ผ ํจ.)
- ํ
์ด๋ธ ์์ฑ:
CREATE TABLE COMPANY.EMPLOYEE
๋๋CREATE TABLE COMPANY
Specifying Constraints
- Key constraints: PK ๊ฐ์ ์ค๋ณต๋ ์ ์๋ค.
- Entity integrity constraint: PK ๊ฐ์ null์ด ๋ ์ ์๋ค.
- Referential integrity constraint: FK๋ PK๋ก ํํ๋๋ ๊ธฐ์กด ๊ฐ์ด๊ฑฐ๋, null์ด์ด์ผ ํ๋ค.
CONSTRAINT
๊ตฌ๋ฌธ์ผ๋ก constraint์ ์ด๋ฆ์ ๋ถ์ผ์๋ ์์:CREATE TABLE EMPLOYEE( Ssn CHAR(9) NOT NULL, ... CONSTRAINT EMPPK PRIMARY KEY (Ssn), CONSTRAINT EMPSUPERFK FOREIGN KEY (Super_ssn) REFERENCES EMPLOYEE(Ssn) ON DELETE SET NULL ON UPDATE CASCADE );
- ํ
์ด๋ธ์ ์์ฑํ๋ ์์ ์ ์์ง ์๋ ๊ฐ์ FK๋ก ์ฐธ์กฐํ๋ฉด referential integrity constraint๋ฅผ ์๋ฐํ๋ ๋ฌธ์ ๊ฐ ์๊น. ํ
์ด๋ธ์ ์์ฑํ ๋ค,
ALTER TABLE
ํด FK๋ฅผ ์ถ๊ฐํ๋ฉด ๋๋ค.
Basic Retrieval Queries
- ๊ธฐ๋ณธํ์
SELECT <attribute list> FROM <table list> WHERE <condition>;
. - โResearchโ ๋ถ์์์ ์ผํ๋ ๋ชจ๋ ์ง์์ ์ด๋ฆ๊ณผ ์ฃผ์๋ฅผ ์ฐพ๋ ๊ฒฝ์ฐ:
FROM EMPLOYEE, DEPARTMENT
์ฟผ๋ฆฌ๋ ๋ ํ ์ด๋ธ ์ฌ์ด ๋ชจ๋ ์์ด ํฌํจ๋ ํ ์ด๋ธ์ ๋ง๋ฆ. ์ฆ,EMPLOYEE
์DEPARTMENT
์ cartesian product.SELECT Fname, Lname, Address FROM EMPLOYEE E, DEPARTMENT D WHERE D.Dname='Research' AND D.Dnumber=E.Dno;
- ๋ฐ๋ผ์
WHERE
์ ์ด ํ์.
NULL
- ์์ ๊ฐ์ด three-valued logic์ logical connectives๊ฐ ์๋ค.
- ๋ฐ๋ผ์ NULL ์กฐ๊ฑด์ ์ ์ฉํ ๋๋ ๋น๊ต ์ฐ์ฐ์ด ์๋๋ผ
IS
์ฐ์ฐ์ ํด์ผํ๋ค:- e.g.,
SELECT * FROM EMPLOYEE WHERE Pno IS NULL;
- e.g.,
Nested Queries
WHERE
์ ์์ ์์ฑ๋ ํํ์ select-from-where ๋ธ๋ก์ ์ค์ฒฉ์ํฌ ์ ์๋ค.IN
๋ช ๋ น์ ์ด์ฉํด ํํ ์งํฉ์์ ๋์ ํํ์ ๋น๊ตํ ์ ์์.SELECT DISTINCT Essn FROM WORKS_ON WHERE (Pno, Hours) IN (SELECT Pno, Hours FROM WORKS_ON WHERE Essn='123456789');
DISTINCT
๋ฅผ ํ๋ฉด ์ค๋ณต๋ ๊ฐ์ด ์ ๊ฑฐ๋๋ค.
- ์งํฉ๋ก ์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ฏ๋ก
UNION
,INTERSECT
๋ ๊ฐ๋ฅ.(SELECT DISTINCT Pnumber FROM PROJECT, DEPARTMENT, EMPLOYEE WHERE Dnum = Dnumber AND Mgr_ssn = Ssn AND Lname = 'Smith') UNION (SELECT DISTINCT Pnumber FROM PROJECT, WORKS_ON, EMPLOYEE WHERE Pnumber = Pno AND Essn = Ssn AND Lname = 'Smith');
Use of (NOT
) EXISTS
- 5๋ฒ ๋ถ์์ ๋ชจ๋ ํ๋ก์ ํธ์ ์ฐธ์ฌํ๋ ์ง์์ ์ด๋ฆ์ ์ฐพ๋ ๊ฒฝ์ฐ:
SELECT Fname, Lname FROM Employee WHERE NOT EXISTS ( (SELECT Pnumber FROM PROJECT WHERE Dno = 5) EXCEPT (SELECT Pno FROM WORKS_ON WHERE Ssn = ESsn) );
- 5๋ฒ ๋ถ์์ ๋ชจ๋ ํ๋ก์ ํธ์์ ๊ฐ๋ณ ์ง์์ด ์ฐธ์ฌํ๋ ํ๋ก์ ํธ ๋ชฉ๋ก์ ๋บ์ ๋, ๋จ๋ ํ๋ก์ ํธ๊ฐ ์๋ค๋ฉด ํด๋น ์ง์์ 5๋ฒ ๋ถ์์ ๋ชจ๋ ํ๋ก์ ํธ์ ์ฐธ์ฌํ๊ณ ์๋ค๊ณ ํ ์ ์์.
SQL Joins
INNER JOIN
:SELECT * FROM EMPLOYEE E INNER JOIN DEPENDENT D ON E.Ssn = D.Essn;
- DEPENDENT๊ฐ ์๋ ๋ชจ๋ EMPLOYEE๋ฅผ ๋ฐํ.
- ๋น๊ตํ๋ ์์ฑ ์ด๋ฆ์ด ๊ฐ๋ค๋ฉด
NATURAL JOIN
์ ํ ์ ์๋ค.
FULL OUTER JOIN
LEFT OUTER JOIN
:SELECT * FROM EMPLOYEE E LEFT JOIN DEPENDENT D ON E.Ssn = D.Essn;
- DEPENDENT๊ฐ ์๋ ์ง์๊น์ง ํฌํจํด ๋ฐํ.
RIGHT OUTER JOIN
Aggregate Functions
COUNT
,SUM
,MAX
,MIN
,AVG
๋ฑ ํจ์๋ก ์ฌ๋ฌ ํํ์ ํ๋๋ก ์์ฝํ ์ ์๋ค.SELECT Dno, COUNT(*), AVG(Salary) FROM EMPLOYEE GROUP BY Dno;
- ๊ทธ๋ฃจํ์ ๊ธฐ์ค ์ปฌ๋ผ(
Dno
)์ ํจ๊ป ์ ํํด์ผ ์ด๋ค ํํ์ด ์ด๋ค ์กฐ๊ฑด์ ์ํ๋์ง ์ ์ ์์.
- ๊ทธ๋ฃจํ์ ๊ธฐ์ค ์ปฌ๋ผ(
- ๊ทธ๋ฃจํ ์กฐ๊ฑด์
HAVING
์ ์ ์์ฑํ๋ค:SELECT Pnumber, Pname, COUNT(*) FROM PROJECT, WORKS_ON WHERE Pnumber = Pno GROUP BY Pnumber, Pname HAVING COUNT(*) > 2;
- ์ฌ๋ฌ ๊ฐ ์ปฌ๋ผ์ผ๋ก
GROUP BY
ํ๋ฉด?
- ์ฌ๋ฌ ๊ฐ ์ปฌ๋ผ์ผ๋ก
WHERE
๋ ์กฐ์ฌํด์ผ ํ๋ค. ์ด๋ฏธ ํํฐ๋ง๋ ์ํ์์ ๊ทธ๋ฃจํ์ ํ๋ฉดHAVING
์กฐ๊ฑด์ ๋ง์กฑํ์ง ๋ชปํ ์ ์์:SELECT Dno, COUNT(*) FROM EMPLOYEE WHERE Salary > 40000 AND Dno IN (SELECT Dno FROM EMPLOYEE GROUP BY Dno HAVING COUNT(*) > 5) GROUP BY Dno;
GROUP BY
๋์ง ์์ ์ปฌ๋ผ์SELECT
ํ ์ ์๋ค.
Alter and Dropping
ALTER TALBE <table> <ADD|DROP> <column> [type] [CASCADE|RESTRICT]
: ์ปฌ๋ผ ์ถ๊ฐ/์ ๊ฑฐ.CASCADE
: ์ญ์ ํ ์ปฌ๋ผ์ ์๋ ๋ชจ๋ ์ ์ฝ๊ณผ ๋ทฐ๋ฅผ ์ ๊ฑฐํ๋ค.RESTRICT
: ์ญ์ ํ ์ปฌ๋ผ์ด ์ ์ฝ์ ์๋ฐํ๋ฉด ์ญ์ ๋ฅผ ๋ง๋๋ค.
ALTER TALBE <table> ALTER COLUMN <column> <SET|DROP> DEFAULT [default]
: ๋ํดํธ ๊ฐ ์ถ๊ฐ/์ ๊ฑฐ.DROP TABLE <table>
: ํ ์ด๋ธ ์ญ์ .
์์ ์ฟผ๋ฆฌ
INSERT
INSERT INTO student (name, major, grade) VALUES ('park', 'DGMD', 2)
SELECT
๋ชจ๋ student ๋ ์ฝ๋์ name ์ปฌ๋ผ๊ณผ grade ์ปฌ๋ผ์ ๊ฐ์ ธ์จ๋ค.
SELECT name, grade FROM student
id ์์๋ก ๋ชจ๋ student ๋ ์ฝ๋์ name ์ปฌ๋ผ๊ณผ grade ์ปฌ๋ผ์ ๊ฐ์ ธ์จ๋ค.
SELECT name, grade FROM student ORDER BY id
WHERE
name์ด park์ธ ๋ชจ๋ student ๋ ์ฝ๋๋ฅผ ๊ฐ์ ธ์จ๋ค.
SELECT * FROM student WHERE name = 'park'
grade๊ฐ 1๋ณด๋ค ํฌ๊ณ , 4๋ณด๋ค ์์ ๋ชจ๋ student ๋ ์ฝ๋๋ฅผ ๊ฐ์ ธ์จ๋ค.
SELECT * FROM user WHERE level > 1 AND level < 4
name์ด kim์ผ๋ก ์์ํ๋ ๋ชจ๋ student ๋ ์ฝ๋๋ฅผ ๊ฐ์ ธ์จ๋ค.
SELECT * FROM student WHERE name LIKE 'kim%'
BETWEEN
grade๊ฐ 1๋ณด๋ค ํฌ๊ณ , 4๋ณด๋ค ์์ ๋ชจ๋ student ๋ ์ฝ๋๋ฅผ ๊ฐ์ ธ์จ๋ค.
SELECT * FROM student WHERE grade BETWEEN 1 AND 4
major๊ฐ DGMD๋ SCE์ธ ๋ชจ๋ student ๋ ์ฝ๋๋ฅผ ๊ฐ์ ธ์จ๋ค.
SELECT * FROM student WHERE major IN ('DGMD', 'SCE')
UPDATE
name์ด lee์ธ student ๋ ์ฝ๋์ major๋ฅผ SCE๋ก ์ ๋ฐ์ดํธํ๋ค.
UPDATE student SET major = 'SCE' WHERE name = 'lee'
GROUP BY
student ๋ ์ฝ๋๋ฅผ major ์ปฌ๋ผ ๋จ์๋ก ๊ทธ๋ฃน์ง์ด ๊ฐ ๊ฐ์ ๊ฐ์๋ฅผ ๊ฐ์ ธ์จ๋ค.
SELECT major, COUNT(*) FROM student GROUP BY major
JOIN
student, professor ํ ์ด๋ธ์์ major ์ปฌ๋ผ์ ๊ฐ์ด ์ผ์นํ๋ ๋ ์ฝ๋์ ๋ชจ๋ ์ปฌ๋ผ์ ๊ฐ์ ธ์จ๋ค.
SELECT * FROM student INNER JOIN professor ON student.major = professor.major
student, professor ํ ์ด๋ธ์์ major ์ปฌ๋ผ์ ๊ฐ์ด ์ผ์นํ์ง ์๋ ๋ ์ฝ๋์ ๋ชจ๋ ์ปฌ๋ผ์ ๊ฐ์ ธ์จ๋ค.
SELECT * FROM student FULL OUTER JOIN professor ON student.major = professor.major WHERE student.major IS NULL OR professor.major IS NULL