๐ SQL ๋ฌธ์ ์ข ๋ฅ
โ DML ๋ฌธ (Data Manipulation Language, ๋ฐ์ดํฐ ์กฐ์์ด)
: ํ ์ด๋ธ์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ์กฐ์(์กฐํ, ์ ๋ ฅ, ์์ , ์ญ์ ) ํ๊ธฐ ์ํ ๊ตฌ๋ฌธ
- SELECT
- INSERT
- UPDATE
- DELETE
- MERGE
โ TCL ๋ฌธ (Transaction Control Language, ํธ๋์ญ์ ์ ์ด์ด)
: DML ๋ฌธ์ ์ํ ๋ฐ์ดํฐ์ ๋ณ๊ฒฝ ์ฌํญ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์๊ตฌํ ๋ฐ์ํ๊ฑฐ๋ ์ทจ์ํ๊ธฐ ์ํด ํธ๋์ญ์ (Transaction)์ ์ ์ดํ๋ ๊ตฌ๋ฌธ
- COMMIT
- ROLLBACK
- SAVEPOINT
โ DDL ๋ฌธ (Data Definition Language, ๋ฐ์ดํฐ ์ ์์ด)
: ํ ์ด๋ธ, ์ธ๋ฑ์ค์ ๊ฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค๋ธ์ ํธ์ ๊ตฌ์กฐ๋ฅผ ์ ์(์์ฑ, ๋ณ๊ฒฝ, ์ญ์ ) ํ๊ธฐ ์ํ ๊ตฌ๋ฌธ
- CREATE
- ALTER
- DROP
- RENAME
- TRUNCATE
โ DCL ๋ฌธ (Data Control Language, ๋ฐ์ดํฐ ์ ์ด์ด)
: ๋ฐ์ดํฐ์ ๋ํ ๊ถํ์ ๋ถ์ฌํ๊ฑฐ๋ ์ทจ์ํ๊ธฐ ์ํ ๊ตฌ๋ฌธ
- GRANT
- REVOKE
* ๋ฌด์กฐ๊ฑด CREATE ๋์จ๋ค๊ณ ๋ฌดํฑ๋๊ณ DDL ๊ณ ๋ฅด๋ฉด ๋ฐ๋ณด๋๋ค.( ๊ทธ๊ฒ ๋)
DCL์ด ์ ์ ๋ฅผ ์์ฑ๋ฐ ์ญ์ ํ๊ณ ๊ถํ ๊ด๋ฆฌ๊น์ง ๊ฐ๋ฅํจ ;
๐ ์ผ๋ฐ ์งํฉ ์ฐ์ฐ์
- UNION (ํฉ์งํฉ) > UNION/UNION ALL ์ฐ์ฐ์๋ก ๊ตฌํ
- INTERSECTION ( ๊ต์งํฉ) > INTERSECT ์ฐ์ฐ์๋ก ๊ตฌํ
- DIFFERENCE ( ์ฐจ์งํฉ ) > EXCEPT / MINUS ์ฐ์ฐ์๋ก ๊ตฌํ
- PRODUCT ( ๊ณฑ์งํฉ ) > ์กฐ์ธ ๋ฌธ๋ฒ ์ค CROSS JOIN ์ฐ์ฐ์ผ๋ก ๊ตฌํ
๐ ํจ์์ ๋ฆฌ
โ DECODE โ if-else ๋ฌธ
ex) DECODE(GENDER,'M','๋จ์','F','์ฌ์,'๊ธฐํ')
1๏ธโฃ if (GENDER == 'M') return '๋จ์';
2๏ธโฃ else if(GENDER =='F') return '์ฌ์';
3๏ธโฃ else return '๊ธฐํ';
๋ก ํด์ํ ์ ์๋ค.
โ ๏ธ else ๊ตฌ๋ฌธ ์๋๋ฐ ํด๋น์, NULL ๋ฐํํจ
โ IN(a,b) : a๋๋ b ์ธ ํ ์ถ์ถ
โ NOT IN(a,b) : a,b ์๋ ํ ์ถ์ถ
โ ANY(a,b) : a ์ด๊ฑฐ๋ b ์ด๊ฑฐ๋ ์ธ ํ ์ถ์ถ
โ BETWEEN(a,b) : a,b ์ฌ์ด์ ์๋ ํ ์ถ์ถ
โ SUBSTR (*์ค๋ผํด ์ธ ๋ค๋ฅธ DB ์์๋ substring ์ผ๋ก ํต์ฉ๋จ)
ex) SUBSTR(str, n)
: str์์ n ๋ฒ์งธ ์์น์์ ๋ชจ๋ ๋ฌธ์๋ฅผ ์ฝ์ด๋ค์. ์ด ํ๋ก๊ทธ๋จ์ด SQL Server์ ์ ์ฉ๋์ง ์๋๋ค๋ ์ ์ ์
ex) SUBSTR(str, n, m)
: str์์ n ๋ฒ์งธ ์์น์์ m ๊ฐ์ ๋ฌธ์๋ฅผ ์ฝ์ด ๋ค์ธ๋ค.
๐ ์กฐ์ธ(JOIN)
- ๋ ๊ฐ ์ด์์ ํ ์ด๋ธ์ ์ฐ๊ฒฐ / ๊ฒฐํฉ ํด ๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅ
- PK/FK ๊ฐ์ ์ฐ๊ด์ ์ํด JOIN ์ฑ๋ฆฝ
- PK,FK ๊ด๊ณ๊ฐ ์์ด๋ ๋ ผ๋ฆฌ์ ์ธ ๊ฐ๋ค์ ์ฐ๊ด์ผ๋ก JOIN ์ฑ๋ฆฝ ๊ฐ๋ฅ
- ํ SQL์์ ์ฌ๋ฌ ํ ์ด๋ธ์ ์กฐ์ธํ ์ ์์ง๋ง, SQL์ด ์ฒ๋ฆฌํ ๋ ๋ ๊ฐ์ ์งํฉ ๊ฐ์์๋ง JOIN ์ ์ํํจ
โก๏ธ ๊ทธ๋์ AND ๋ก ๊ณ์ ๋ฌถ์ด์ผ ํ๋ค.
โ ๋ฑ๊ฐ ์กฐ์ธ(equijoin) : ๋ ์กฐ๊ฑด์ด ๋ชจ๋ ๋ฑํธ(=)์ธ ์กฐ์ธ. ๊ฐ์ด ๋์ผํ ๊ฒฝ์ฐ์๋ง ํ์ด ๋ฐํ๋๋ค.
- ๋ ํ ์ด๋ธ๊ฐ ์นผ๋ผ ๊ฐ๋ค์ด ์๋ก ์ ํํ๊ฒ ์ผ์นํ๋ ๊ฒฝ์ฐ์๋ง ์ฌ์ฉํ๋ค
[ T1 ํ ์ด๋ธ ]
C1 | C2 |
1 | A |
2 | B |
3 | C |
[ T2 ํ ์ด๋ธ ]
C1 | C2 |
1 | 1 |
1 | 2 |
3 | 1 |
3 | 2 |
4 | 1 |
SELECT COUNT(*) AS R1
FROM T1,A T2,B
WHERE B.C1=A.C1;
>> T1 ๊ณผ T2 ํ ์ด๋ธ์ c1 ์นผ๋ผ ๊ธฐ์ค์ผ๋ก ์กฐ์ธ.
์กฐ์ธ ์กฐ๊ฑด์ด ๋ชจ๋ ๋ฑํธ(=) ์ด๋ฏ๋ก ์์ชฝ ํ ์ด๋ธ์ C1 ๊ฐ์ด ๋์ผํ ๊ฒฝ์ฐ์๋ง ํ์ด ๋ฐํ๋๋ ๋ฑ๊ฐ์กฐ์ธ(eqijoin) ์ ์ํ.
์กฐ์ธ ๊ฒฐ๊ณผ๋ ์๋์ ๊ฐ์ผ๋ฏ๋ก COUNT(*) ๊ฐ์ 4๋ค !
C1 | C2 | C1 | C2 |
1 | A | 1 | 1 |
1 | A | 1 | 2 |
3 | C | 3 | 1 |
3 | C | 3 | 2 |
โ ๋น๋ฑ๊ฐ ์กฐ์ธ( nonequjoin ) : ๋ฑํธ ์ธ์ ๋ค๋ฅธ ์กฐ์ธ ์กฐ๊ฑด์ด ์๋ ์กฐ์ธ
- ๋๋ถ๋ถ ์ ์ฉํ ์ ์์ง๋ง, ๋ฐ์ดํฐ ๋ชจ๋ธ์ ๋ฐ๋ผ Non Equi JOIN์ด ๋ถ๊ฐํ ๊ฒฝ์ฐ๋ ์๋ค.
์ฃผ๋ฌธ๋ฒํธ | ๊ณ ๊ฐ๋ฒํธ | ์ฃผ๋ฌธ์ผ์ | ์ฃผ๋ฌธ๊ธ์ก |
501 | 1 | 20190501 | 20000 |
612 | 1 | 20190523 | 5000 |
728 | 1 | 20200311 | 25000 |
904 | 1 | 20200715 | 10000 |
404 | 2 | 20191208 | 7000 |
603 | 2 | 20200428 | 6000 |
807 | 2 | 20200527 | 17000 |
SELECT MIN(์ฃผ๋ฌธํฉ๊ณ ๊ธ์ก) AS ์ต์ ์ฃผ๋ฌธํฉ๊ณ๊ธ์ก
FROM (SELECT A.๊ณ ๊ฐ๋ฒํธ ,A.์ฃผ๋ฌธ์ผ์,SUM(B.์ฃผ๋ฌธ๊ธ์ก) AS ์ฃผ๋ฌธํฉ๊ณ๊ธ์ก
FROM ์ฃผ๋ฌธ A, ์ฃผ๋ฌธ B
WHERE B.๊ณ ๊ฐ๋ฒํธ = A.๊ณ ๊ฐ๋ฒํธ
AND B.์ฃผ๋ฌธ์ผ์ <= A.์ฃผ๋ฌธ์ผ์
GROUP BY A.๊ณ ๊ฐ๋ฒํธ, A.์ฃผ๋ฌธ์ผ์);
* FROM ์ ์ ์ฃผ๋ฌธํ ์ด๋ธ์ 2๋ฒ ๊ธฐ์ ํ์ฌ ์กฐ์ธ์ ์ํํ์๋๋ฐ, ์ด์ฒ๋ผ ๊ฐ์ ํ ์ด๋ธ ๊ฐ์ ์กฐ์ธ์ ์ํํ๋ ๊ฒ์ ์ ํ์กฐ์ธ(Self Join) ์ด๋ผ๊ณ ํ๋ค.
'DB' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[DB] WITH AS์ ์ฌ์ฉ๋ฒ (feat.CTE) (28) | 2023.08.26 |
---|---|
[mariaDB/mysql] Incorrect string value: '\xEC\x96\x8C\xEC\x8A\xA4...' for column : ํ๊ธ ์ ๋ ฅ ์ค๋ฅ ํด๊ฒฐ (0) | 2023.06.15 |
[DB] ๋ ์ฝ๋ CRUD ๋ฐ ์ฐ์ฐ์ (1) | 2023.02.03 |
[DB] CRUD ์ ๊ฐ๋ ๊ณผ Maria DB ์ ๋ฐ์ดํฐ ๊ตฌ์กฐ (0) | 2023.02.03 |
[DB] Maria DB ์ค์น ๋ฐฉ๋ฒ (0) | 2023.02.03 |