๐ฅ ์ ๋ณด์ฒ๋ฆฌ ๊ธฐ์ฌ ์ค๊ธฐ SQL ๋ฌธ์
CREATE TABLE ๋ถ์ (
๋ถ์์ฝ๋ INT PRIMARY KEY,
๋ถ์๋ช
VARCHAR(20)
);
CREATE TABLE ์ง์ (
์ง์์ฝ๋ INT PRIMARY KEY,
๋ถ์์ฝ๋ INT,
์ง์๋ช
VARCHAR(20),
FOREIGN KEY(๋ถ์์ฝ๋) REFERENCES ๋ถ์(๋ถ์์ฝ๋)
ON DELETE CASCADE
);
INSERT INTO ๋ถ์ VALUES(10, '์์
๋ถ');
INSERT INTO ๋ถ์ VALUES(20, '๊ธฐํ๋ถ');
INSERT INTO ๋ถ์ VALUES(30, '๊ฐ๋ฐ๋ถ');
INSERT INTO ์ง์ VALUES(1001, 10, '์ด์ง์');
INSERT INTO ์ง์ VALUES(1002, 10, '๊ณฝ๋ช
๊ฒฝ');
INSERT INTO ์ง์ VALUES(1003, 20, '๊น๊ฑด๊ธธ');
INSERT INTO ์ง์ VALUES(1004, 20, '์ต๋ฏผ์');
INSERT INTO ์ง์ VALUES(1005, 20, '์ด์ฉ๊ด');
INSERT INTO ์ง์ VALUES(1006, 30, 'ํ์ฑ๊ด');
INSERT INTO ์ง์ VALUES(1007, 30, '๋ฐ๋ฏธ๊ฒฝ');
SELECT DISTINCT COUNT(๋ถ์์ฝ๋) FROM ์ง์ WHERE ๋ถ์์ฝ๋ = 20;
๊ฒฐ๊ณผ: 3
ํด์ค :
DISTINCT(์ค๋ณต ์ ๊ฑฐ)
๋ ๋ถ์์ฝ๋
๊ฐ ์๋ COUNT(๋ถ์์ฝ๋)
์ ์ ์ฉ๋๋ฏ๋ก, ์ฌ์ ํ ๋ถ์์ฝ๋๊ฐ 20์ธ ์ปฌ๋ผ์ ์ '3'์ด ๋๋ค.DELETE FROM ๋ถ์ WHERE ๋ถ์์ฝ๋ = 20;
SELECT DISTINCT COUNT(๋ถ์์ฝ๋) FROM ์ง์;
๊ฒฐ๊ณผ: 4
ํด์ค :
๋ถ์์ฝ๋
๊ฐ 20์ธ ์ปฌ๋ผ์ ์ญ์ ํ ํ, ๋ชจ๋ ์ง์ํ
์ด๋ธ์ ๋ถ์์ฝ๋ ๊ฐ์๋ฅผ ์ผ๋ค. ์ด๋ DISTINCT(์ค๋ณต ์ ๊ฑฐ)
๋ COUNT
์ ์ ์ฉ๋๋ฏ๋ก
์ฌ์ ํ '4'์ด๋ค.๊ฐ์ : ์ ๊ธฐ๊ณผ ํ์ 50๋ช , ์ ์๊ณผ ํ์ 100๋ช , ์ ์ฐ๊ณผ ํ์ 50๋ช
SELECT DEPT FROM STUDENT;
๊ฒฐ๊ณผ: 200
SELECT DISTINCT DEPT FROM STUDENT;
๊ฒฐ๊ณผ: 3
ํด์ค :
SELECT COUNT(DISTINCT DEPT) FROM STUDENT WHERE DEPT = '์ ์ฐ๊ณผ';
๊ฒฐ๊ณผ: 1
ํด์ค :
SELECT ์ ํ๋ช
, ๋จ๊ฐ, ์ ์กฐ์ฌ
FROM ์ ํ
WHERE ๋จ๊ฐ > ( ) (SELECT ๋จ๊ฐ FROM ์ ํ WHERE ์ ์กฐ์ฌ = 'H');
๋ต: ALL
ํด์ค :
์๋ธ์ฟผ๋ฆฌ ์์ ์๋ฌด ํค์๋๋ ๋ถ์ง ์๋๋ค๋ฉด, ์๋ธ์ฟผ๋ฆฌ๊ฐ ๋ค์ค ํ์ผ๋ ์ค๋ฅ๋ฅผ ๋ฐ์์ํจ๋ค.
์ด๋, ANY
๋ ALL
์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์คํ์ ๋น๊ตํ ์ ์๋ค.
ANY
-> ์๋ธ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ ์ค ํ๋๋ผ๋ ์ฐธ์ด๋ฉด ํด๋น ํ์ ์ฐธ
ALL
-> ์๋ธ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ ์ค ๋ชจ๋ ๊ฒ์ ์ฐธ์ด์ด์ผ ํด๋น ํ์ ์ฐธ
TABLE
INDEX | COL1 | COL2 |
---|---|---|
1 | 2 | NULL |
2 | 4 | 6 |
3 | 3 | 5 |
4 | 6 | 3 |
5 | NULL | 3 |
SELECT COUNT(COL2)
FROM TABLE
WHERE COL1 IN (2, 3)
OR COL2 IN (3, 5);
๊ฒฐ๊ณผ: 3
ํด์ค :
COL2 |
---|
NULL |
5 |
3 |
3 |
<EMPLOYEE>
๋ฆด๋ ์ด์
์ ๋ํด <๊ด๊ณ ๋์์>
์ ์ํํ์ ๋ ์ถ๋ ฅ๋๋ <๊ฒฐ๊ณผ>
์ด๋ค. <๊ฒฐ๊ณผ>
์ ๊ฐ ์นธ(โ ~โค)์ ๋ค์ด๊ฐ ์๋ง์ ๋ต์ ์ฐ์์ค.INDEX | AGE | TTL |
---|---|---|
1 | 48 | ๋ถ์ฅ |
2 | 25 | ๋๋ฆฌ |
3 | 41 | ๊ณผ์ฅ |
4 | 36 | ์ฐจ์ฅ |
( โ ) |
---|
( โก ) |
( โข ) |
( โฃ ) |
( โค ) |
๊ฒฐ๊ณผ :
ํด์ค :
PROJECT
์ฐ์ฐ์ด๋คTTL
์์ฑ์ด ์ถ์ถ๋์ด ์์ฑ๋ช
์ธ TTL๋ถํฐ ๋ชจ๋ ์์ฑ๊ฐ์ด ๊ฒฐ๊ณผ๋ก ๋ํ๋๋ค.
= SELECT TTL FROM EMPLOYEE์ด ์ฐ์ฐ๋ค์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํ๊ณ ๋ณํํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
์ฐ์ฐ | ๊ธฐํธ | SQL ์ฐ์ฐ | ์ค๋ช |
---|---|---|---|
์ ํ (Selection, ฯ) | ฯ |
WHERE |
ํน์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ํํ(ํ)๋ง ์ ํ |
ํฌ์ (Projection, ฯ) | ฯ |
SELECT (์ด ์ ํ) |
ํน์ ์์ฑ(์ด)๋ง ์ ํ |
๊ต์ฐจ๊ณฑ (Cartesian Product, ร) | ร |
CROSS JOIN |
๋ ํ ์ด๋ธ์ ๋ชจ๋ ์กฐํฉ์ ๋ฐํ |
์กฐ์ธ (Join, โจ) | โจ |
INNER JOIN , LEFT JOIN ๋ฑ |
๊ณตํต ์์ฑ์ ๊ธฐ์ค์ผ๋ก ๋ ํ ์ด๋ธ์ ์ฐ๊ฒฐ |
๋๋๊ธฐ (Division, รท) | รท |
EXISTS , NOT EXISTS |
ํน์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ํํ๋ง ์ ํ |
๊ด๊ณ ๋์์์ ํ ์ด๋ธ์ ํ๋์ ์งํฉ(Set)์ผ๋ก ๊ฐ์ฃผํ๊ณ ์ํํ๋ ์ฐ์ฐ์ ๋๋ค.
์ฐ์ฐ | ๊ธฐํธ | SQL ์ฐ์ฐ | ์ค๋ช |
---|---|---|---|
ํฉ์งํฉ (Union, โช) | โช |
UNION |
๋ ํ ์ด๋ธ์ ๋ชจ๋ ํํ์ ํฉ์น ํ ์ค๋ณต ์ ๊ฑฐ |
๊ต์งํฉ (Intersection, โฉ) | โฉ |
INTERSECT |
๋ ํ ์ด๋ธ์์ ๊ณตํต๋ ํํ๋ง ๋ฐํ |
์ฐจ์งํฉ (Difference, -) | โ |
EXCEPT , MINUS |
์ฒซ ๋ฒ์งธ ํ ์ด๋ธ์์ ๋ ๋ฒ์งธ ํ ์ด๋ธ์ ์๋ ํํ ๋ฐํ |
<์์ฑ ์ ์์>
๋ฅผ ์ฐธ๊ณ ํ์ฌ <ํ์>
ํ
์ด๋ธ์ ๋ํด 20์์ ๊ฐ๋ณ ๊ธธ์ด๋ฅผ ๊ฐ์ง ์ฃผ์
์์ฑ์ ์ถ๊ฐํ๋ <SQL๋ฌธ>
์ ์์ฑํ์์ค.(๋จ, SQL๋ฌธ์ ISO/IEC 9075 ํ์ค์ ๊ธฐ๋ฐ์ผ๋ก ์์ฑํ์์ค.)
์์ฑ๋ช | ๋ฐ์ดํฐํ์ | ์ ์ฝ์กฐ๊ฑด | ํ ์ด๋ธ๋ช |
---|---|---|---|
ํ๋ฒ | CHAR(10) | UNIQUE | ํ์ |
์ด๋ฆ | VARCHAR(8) | NOT NULL | ํ์ |
์ฃผ๋ฏผ๋ฒํธ | CHAR(13) | ํ์ | |
ํ๊ณผ | VARCHAR(16) | FOREIGN KEY | ํ์ |
ํ๋ | INT | ํ์ |
( 1 ) TABLE ํ์ ( 2 ) ์ฃผ์ VARCHAR(20);
๋ต : 1 -> ALTER 2 -> ADD
ํด์ค :
<ํ์>
ํ
์ด๋ธ์ ์ฐธ๊ณ ํ์ฌ <์ฒ๋ฆฌ ์กฐ๊ฑด>
์์ ์๊ตฌํ๋ SQL๋ฌธ์ ์์ฑํ์์ค.ํ๋ฒ (varchar) | ์ด๋ฆ (varchar) | ํ๋ (number) | ์๊ฐ๊ณผ๋ชฉ (varchar) | ์ ์ (number) | ์ฐ๋ฝ์ฒ (varchar) |
---|---|---|---|---|---|
20E0232 | ๊น๋ฏผ์ | 3 | ์ธ๋ฌดํ์ | 4.5 | 010-5412-4544 |
19D0024 | ์ด์ฑํ | 2 | ํ ๋ชฉ๊ฐ๋ก | 3 | 010-1548-4796 |
20E0135 | ์ฑ์ ์ | 4 | ์ค์ฉ๋ฒํ | 3.5 | 010-9945-7411 |
20E0511 | ์ ์ธํ | 1 | ๋ฐ์ดํฐ๋ก | 2 | 010-3451-4972 |
์ ๋ต :
SELECT ํ๋ฒ, ์ด๋ฆ FROM ํ์ WHERE ํ๋
IN (3, 4);
ํด์ค :
WHERE ์์ฑ IN (์กฐ๊ฑด,์กฐ๊ฑด,...)
๋ฐฉ์์ผ๋ก ์ฌ์ฉ๋๋ค.<student>
ํ
์ด๋ธ์ ์ฐธ๊ณ ํ์ฌ name ์์ฑ์ผ๋ก idx_name์ด๋ผ๋ ์ธ๋ฑ์ค๋ฅผ ์์ฑํ๋ SQL๋ฌธ์ ์์ฑํ์์ค.student ํ ์ด๋ธ
stid | name | score | deptid |
---|---|---|---|
2001 | brown | 85 | PE01 |
2002 | white | 45 | EF03 |
2003 | black | 67 | UW11 |
์ ๋ต :
CREATE INDEX idx_name ON student(name);
ํด์ค :
(๋จ, ์๋์ ์คํ ๊ฒฐ๊ณผ๊ฐ ๋๋๋ก ํ๋ค.)
<ํ์>
ํ
์ด๋ธํ๋ฒ | ์ด๋ฆ | ํ๋ | ํ๊ณผ | ์ฃผ์ |
---|---|---|---|---|
20160011 | ๊น์๋ | 2 | ์ ๊ธฐ | ์์ธ |
19211013 | ์ด์ ์ฐ | 3 | ์ปดํจํฐ | ๋๊ตฌ |
21168007 | ํจ์์ง | 1 | ์ ์ | ๋ถ์ฐ |
19168002 | ์ฐํ์ | 3 | ์ ์ | ๊ด์ฃผ |
18120073 | ๊น์ง์ | 4 | ์ปดํจํฐ | ์ธ์ฐ |
<์คํ๊ฒฐ๊ณผ>
ํ๊ณผ | ํ๊ณผ๋ณํํ์ |
---|---|
์ ๊ธฐ | 1 |
์ปดํจํฐ | 2 |
์ ์ | 2 |
<์ฒ๋ฆฌ ์กฐ๊ฑด>
WHERE ์กฐ๊ฑด์ ์ ์ฌ์ฉํ ์ ์๋ค.
GROUP BY๋ ๋ฐ๋์ ํฌํจํ๋ค.
์ง๊ณํจ์(Aggregation Function)๋ฅผ ์ ์ฉํ๋ค.
ํ๊ณผ๋ณํํ์ ์ปฌ๋ผ๋ช ์ ์ถ๋ ฅ์ Alias(AS)๋ฅผ ํ์ฉํ๋ค.
๋ฌธ์ฅ ๋์ ์ธ๋ฏธ์ฝ๋ก (;)์ ์๋ตํด๋ ๋ฌด๋ฐฉํ๋ค.
์ธ์ฉ๋ถํธ ์ฌ์ฉ์ด ํ์ํ ๊ฒฝ์ฐ ๋จ์ผ ๋ฐ์ดํ(' ')๋ฅผ ์ฌ์ฉํ๋ค.
์ ๋ต :
SELECT ํ๊ณผ, COUNT(*) AS ํ๊ณผ๋ณํํ์
FROM ํ์
GROUP BY ํ๊ณผ;
<์ฒ๋ฆฌ ์กฐ๊ฑด>
์ ์ฐธ๊ณ ํ์ฌ ์ ํฉํ SQL๋ฌธ์ ์์ฑํ์์ค.
<์ฑ์ >
ํ
์ด๋ธํ๋ฒ | ๊ณผ๋ชฉ๋ฒํธ | ๊ณผ๋ชฉ์ด๋ฆ | ํ์ | ์ ์ |
---|---|---|---|---|
a2001 | 101 | ์ปดํจํฐ๊ตฌ์กฐ | 6 | 95 |
a2002 | 101 | ์ปดํจํฐ๊ตฌ์กฐ | 6 | 84 |
a2003 | 302 | ๋ฐ์ดํฐ๋ฒ ์ด์ค | 5 | 89 |
a2004 | 201 | ์ธ๊ณต์ง๋ฅ | 5 | 92 |
a2005 | 302 | ๋ฐ์ดํฐ๋ฒ ์ด์ค | 5 | 100 |
a2006 | 302 | ๋ฐ์ดํฐ๋ฒ ์ด์ค | 5 | 88 |
a2007 | 201 | ์ธ๊ณต์ง๋ฅ | 5 | 93 |
<๊ฒฐ๊ณผ>
๊ณผ๋ชฉ์ด๋ฆ | ์ต์์ ์ | ์ต๋์ ์ |
---|---|---|
๋ฐ์ดํฐ๋ฒ ์ด์ค | 88 | 100 |
์ธ๊ณต์ง๋ฅ | 92 | 93 |
<์ฒ๋ฆฌ ์กฐ๊ฑด>
GROUP BY
์ HAVING
์ ์ด์ฉํ๋ค.์ต์์ ์
, ์ต๋์ ์
๋ ๋ณ์นญ(Alias)์ ์ํ AS
๋ฌธ์ ์ด์ฉํ๋ค.'
)๋ฅผ ์ฌ์ฉํ๋ค.์ ๋ต :
SELECT ๊ณผ๋ชฉ์ด๋ฆ, MIN(์ ์) AS ์ต์์ ์, MAX(์ ์) AS ์ต๋์ ์
FROM ์ฑ์
GROUP BY ๊ณผ๋ชฉ์ด๋ฆ
HAVING AVG(์ ์) >= 90;
ํด์ค :
<A>
ํ
์ด๋ธ๊ณผ <B>
ํ
์ด๋ธ์ ์ฐธ๊ณ ํ์ฌ <SQL๋ฌธ>
์ ์คํ ๊ฒฐ๊ณผ๋ฅผ ์ฐ์์ค.<A>
ํ
์ด๋ธNAME |
---|
Smith |
Allen |
Scott |
<B>
ํ
์ด๋ธRULE |
---|
S% |
%T% |
<SQL๋ฌธ>
SELECT COUNT(*) CNT
FROM A
CROSS JOIN B
WHERE A.NAME LIKE B.RULE;
๋ต : 4
ํด์ค :
SELECT COUNT(*) CNT
์์ CNT๋ as CNT ๊ฐ ์๋ต๋ ํํ์ด๋ค.A.NAME | B.RULE |
---|---|
Smith | S% |
Smith | %T% |
Allen | S% |
Allen | %T% |
Scott | S% |
Scott | %T% |
๋ฐ๋ผ์, ์ ์ค a.name์ปฌ๋ผ์ด b.rule์ ๋ฐ๋ฅด๋(like ์ฐ์ฐ์ ํ์ ๋, ์ฐธ์ธ ๊ฒฐ๊ณผ๋)
Smith | S% |
---|---|
Smith | %T% |
Scott | S% |
Scott | %T% |
์ด 4๊ฐ์ด๋ค.
[์ฟผ๋ฆฌ]
SELECT A FROM T1
UNION
SELECT A FROM T2
ORDER BY A DESC;
4 3 1
[์กฐ๊ฑด] ํ์ ํ ์ด๋ธ์ ์ฐธ์กฐํ๋ ๋ค๋ฅธ VIEW๋ ์ ์ฝ ์กฐ๊ฑด๊น์ง ๋ชจ๋ ์ญ์ ๋์ด์ผ ํ๋ค. ๋จ, ์ฉ์ด์ ๋ยท์๋ฌธ์๋ ์๊ดํ์ง ์๋๋ค.
DROP VIEW ํ์ ( )
CASCADE
๋ค์์, ํ
์ด๋ธ์์ ์กฐ๊ฑด๊ฐ์ ์คํํ ํ๋ฉด์ด๋ค. ์ด์ ๋ํ ์๋ง๋ ๊ฒฐ๊ณผ๊ฐ์ ์์ฑํ์์ค.
CROSS JOIN ์ ์นด๋์ ๊ณฑ์ผ๋ก, ๊ฐ ํ์ผ๋ก ๋ง๋ค์ ์๋ ๋ชจ๋ ๊ฒฝ์ฐ ์ฆ 6๊ฐ์ ํ์ด ์๊ธด๋ค.
๊ทธ ์ค, s๋ก ์์ํ๊ณ , t๋ฅผ ํฌํจํ๊ณ ์๋ ์ปฌ๋ผ์ ์ด 4๊ฐ์ด๋ค.
4