46. SQLD 2๊ณผ๋ชฉ (1)SQL๊ธฐ๋ณธ
์ฉ์ด
DB : ํน์ ๊ธฐ์
์ด๋ ์กฐ์ง ๋๋ ๊ฐ์ธ์ด ํ์์ ์ํด ๋ฐ์ดํฐ๋ฅผ ์ผ์ ํ ํํ๋ก ์ ์ฅํด ๋์ ๊ฒ
DBMS : ํจ์จ์ ์ธ ๋ฐ์ดํฐ ๊ด๋ฆฌ ๋ฟ๋ง ์๋๋ผ ์๊ธฐ์น ๋ชปํ ์ฌ๊ฑด์ผ๋ก ์ธํ ๋ฐ์ดํฐ์ ์์์ ํผํ๊ณ , ํ์์ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ๋ณต๊ตฌํ๊ธฐ ์ํ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ SW
SQL : ๊ด๊ณํ DB์์ ๋ฐ์ดํฐ ์ ์, ์กฐ์, ์ ์ด๋ฅผ ์ํด ์ฌ์ฉํ๋ ์ธ์ด
ํ
์ด๋ธ : DB ๊ธฐ๋ณธ ๋จ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๊ฐ์ฒด
๊ฐ๋ก : ํ = ๋ก์ฐ = ํํ = ์ธ์คํด์ค
์ธ๋ก : ์ด = ์ปฌ๋ผ
๋ช
๋ น์ด
DML (Manipulation : ์กฐ์์ด) | SELECT, INSERT, DELETE, UPDATE |
DDL (Definition : ์ ์์ด) | CREATE, ALTER, MODIFY, DROP, RENAME, TRUNCATE |
DCL (Control : ์ ์ด์ด) | GRANT, REVOKE |
TCL (ํธ๋์ญ์ ์ ์ด์ด) | ROLLBACK, COMMIT |
PKํค ์ค์
ํ
์ด๋ธ์์ฑ ๋ ์ง์ : CONSTRAINT ์ด๋ฆ PRIMARY KEY (์นผ๋ผ1, ์นผ๋ผ2..)
ํ
์ด๋ธ์์ฑ ์ดํ ์ง์ : ALTER TABLE ํ
์ด๋ธ๋ช
ADD CONSTRAINT ์ด๋ฆ PRIMARY KEY (์นผ๋ผ1, ์นผ๋ผ2..)
DDL
CHAR(s) : ๊ณ ์ ๊ธธ์ด. ๋ฌธ์์ด ์ ๋ณด ์ต๋ ๊ธธ์ด ๋งํผ ๊ณต๊ฐ ์ฑ์
VARCHAR2(s) : ๊ฐ๋ณ ๊ธธ์ด. ๋ฌธ์์ด ์ ๋ณด ํ ๋น๋ ๋ณ์ ๊ฐ์ ๋ฐ์ดํธ๋ง ์ ์ฉ
NUMBER : ์ ์, ์ค์ ๋ฑ ์ซ์ ์ ๋ณด
DATE : ๋ ์ง์ ์๊ฐ ์ ๋ณด
ํ
์ด๋ธ ๋ช
์ ๋ค๋ฅธ ํ
์ด๋ธ์ ์ด๋ฆ๊ณผ ์ค๋ณต๋๋ฉด ์ ๋๋ค.
ํ
์ด๋ธ ๋ด์ ์นผ๋ผ๋ช
์ ์ค๋ณต๋ ์ ์๋ค.
๊ฐ ์นผ๋ผ๋ค์ ,๋ก ๊ตฌ๋ถ๋๊ณ ;๋ก ๋๋๋ค
์นผ๋ผ ๋ค์ ๋ฐ์ดํฐ ์ ํ์ ๊ผญ ์ง์ ๋์ด์ผ ํ๋ค.
ํ
์ด๋ธ๋ช
๊ณผ ์นผ๋ผ๋ช
์ ๋ฐ๋์ ๋ฌธ์๋ก ์์ํด์ผํ๋ค.
A-Z,a-z,0-9,_,$,#๋ง ์ฌ์ฉ ๊ฐ๋ฅ
โ
์ ์ฝ์กฐ๊ฑด Constraint : ๋ฐ์ดํฐ์ ๋ฌด๊ฒฐ์ฑ ์ ์ง
NOT NULL | ์นผ๋ผ์ NULL๊ฐ์ด ํฌํจ๋์ง ๋ชปํ๋ค |
UNIQUE KEY (๊ณ ์ ํค) | ์นผ๋ผ ๊ฐ์ด ํด๋น ํ ์ด๋ธ ์ ์ฒด์์ ์ ์ผ |
PRIMARY KEY (๊ธฐ๋ณธํค) | UNIQUE + NOT NULL. ํ๋๋ง ์๋ค (๋ํ) |
FOREIGN KEY (์ธ๋ํค) | NULL๊ณผ ์ฌ๋ฌ์์ฑ ๊ฐ๋ฅ |
CHECK | ํด๋น ์กฐ๊ฑด ๋ง์กฑํ๋ ๊ฐ์ผ๋ก๋ง ์ ๋ ฅ ์ ํ |
์ฐธ์กฐ๋ฌด๊ฒฐ์ฑ ์ ์ฝ์กฐ๊ฑด
โ ์ญ์ ๊ท์น
CASCADE : Master์ญ์ ์ Child ๊ฐ์ด ์ญ์
SET NULL : Master์ญ์ ์ Child ํด๋น ํ๋ NULL
SET DEFAULT : Master ์ญ์ ์ Child ํด๋น ํ๋ Default๊ฐ์ผ๋ก ์ค์ RESTRICT : Child ํ
์ด๋ธ์ PK๊ฐ์ด ์๋ ๊ฒฝ์ฐ๋ง Master ์ญ์ ํ์ฉ
NO ACTION : ์ฐธ์กฐ๋ฌด๊ฒฐ์ฑ์ ์๋ฐํ๋ ์ญ์ /์์ ์ก์
์ทจํ์ง ์์
โก ์์ฑ๊ท์น
AUTOMATIC : Master ํ
์ด๋ธ์ PK์๋ ๊ฒฝ์ฐ, Master PK์์ฑ ํ Child ์
๋ ฅ
SET NULL : Master ํ
์ด๋ธ์ PK์๋ ๊ฒฝ์ฐ, Child ์ธ๋ถํค๋ฅผ NULL๊ฐ์ผ๋ก ์ฒ๋ฆฌ
SET DEFAULT : Master ํ
์ด๋ธ์ PK์๋ ๊ฒฝ์ฐ, Child ์ธ๋ถํค๋ฅผ ์ง์ ๋ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์
๋ ฅ
DEPENDENT : Master ํ
์ด๋ธ์ PK๊ฐ ์กด์ฌํ ๋๋ง Child์
๋ ฅ ํ์ฉ
NO ACTION : ์ฐธ์กฐ๋ฌด๊ฒฐ์ฑ์ ์๋ฐํ๋ ์ญ์ /์์ ์ก์
์ทจํ์ง ์์
ํ
์ด๋ธ ์์ฑ ๊ณต์
CREATE TABLE player (player_id CHAER(7) NOT NULL, player_name VARCHAR2(20) NOT NULL);
ํ
์ด๋ธ ๊ตฌ์กฐ ๋ณ๊ฒฝ ๊ณต์
์ถ๊ฐ : ALTER TABLE player ADD(adress VARCHAR2(80));
์ญ์ : ALTER TABLE player DROP COLUMN adress;
์์ : ALTER TABLE temp_temp MODIFY (ORIG_YYYY VARCHAR2(8) DEFAULT '20020129' NOT NULL);
* SQL Server์์๋ ์ฌ๋ฌ ๊ฐ์ ์นผ๋ผ ๋์ ์์ ๋ถ๊ฐ (์ค๋ฅ๋ฐ์)
์ ์ฝ์กฐ๊ฑด ์์
์ถ๊ฐ : ADD CONSTRAINT ์กฐ๊ฑด๋ช
;
์ญ์ : DROP CONSTRAINT ์กฐ๊ฑด๋ช
์กฐ๊ฑด (์นผ๋ผ๋ช
);
ํ
์ด๋ธ๋ช
๋ณ๊ฒฝ : RENAME player TO player_backup;
ํ
์ด๋ธ ์ญ์ : DROP TABLE player;
ํ
์ด๋ธ ๋ฐ์ดํฐ ์ญ์ : TRUNCATE TABLE player;
์นผ๋ผ๋ช
๋ณ๊ฒฝ : RENAME COLUMN team_id TO t_id;
TRUNCATE | DROP | DELETE |
DDL | DDL | DML |
๋ฐ์ดํฐ, ์ธ๋ฑ์ค ์ญ์ (ํ ์ด๋ธ ์ต์ด ์์ฑ ์ด๊ธฐ์ํ๋ก ๋ง๋ฌ) |
ํ
์ด๋ธ, ์ธ๋ฑ์ค ์ญ์ (ํ ์ด๋ธ ๊ตฌ์กฐ ์์ฒด ์ญ์ ) |
๋ฐ์ดํฐ๋ง ์ญ์ |
๊ตฌ์กฐ ๋จ๋๋ค | ๊ตฌ์กฐ ์ญ์ | ๊ตฌ์กฐ, ๋ก๊ทธ ๋จ๋๋ค |
์ฌ์ฉ๊ณต๊ฐ ๋ฐ๋ฉ | ์ฌ์ฉ๊ณต๊ฐ ๋ฐ๋ฉ | ์ฌ์ฉ๊ณต๊ฐ ๋จ์์์ |
Auto COMMIT | Auto COMMIT | COMMIT์ด์ ROLLBACK ๊ฐ๋ฅ |
DML
* DDL ๋ช
๋ น์ด์ ๊ฒฝ์ฐ ์คํ์ AUTO COMMIT, ํ์ง๋ง DML์ ๊ฒฝ์ฐ COMMIT์ ์
๋ ฅํด์ผ ํ๋ค.
INSERT, UPDATE, DELETE : ROLLBACK, COMMIT(TCL) ๊ฐ๋ฅ
MERGE : insert, update, delete๋ฅผ ํ๋ฒ์ ์ํํ๋ ๋ช
๋ น์ด
MERGE INTO ํ
์ด๋ธ๋ช
USING ํ
์ด๋ธ๋ช
2 ON ์กฐ๊ฑด WHEN MATCHED THEN UPDATE SET ๋ณ๊ฒฝ๋ด์ฉ
DISTINCT
์ค๋ณต ์ 1ํ๋ง ์ถ๋ ฅ
DISTINCT (dept, mgr) : ๊ดํธ ์์ ๋ํด ์ง์ฝ. GROUPBY(dept, mgr)์ ๋์ผ
์์ผ๋์นด๋
* : ๋ชจ๋
% : ๋ชจ๋
- : ํ ๊ธ์
TCL
COMMIT : ์ฌ๋ฐ๋ฅด๊ฒ ๋ฐ์๋ ๋ฐ์ดํฐ๋ฅผ DB์ ๋ฐ์
ROLLBACK : ํธ๋์ญ์
์์ ์ด์ ์ ์ํ๋ก ๋๋๋ฆผ COMMIT ๋์ง ์์ ๋ชจ๋ ํธ๋์ญ์
์ ๋กค๋ฐฑ
SAVEPOINT : ์ ์ฅ ์ง์
auto commit : INSERT, UPDATE, DELETE ๋๋ PL/SQL ๋ธ๋ก์ด ์ฑ๊ณต์ ์ผ๋ก ์คํ๋ ๋ ์๋์ผ๋ก ์ปค๋ฐ์ด ์ด๋ฃจ์ด์ง๊ฒ ํ ๊ฒ์ธ๊ฐ๋ฅผ ๊ฒฐ์ ํ๋ ๊ฒ
begin transaction : ๊ฒ์ฆ ์ฟผ๋ฆฌ์ด๋ฉด COMMIT์ผ๋ก ๋ด์ฉ ๋ฐ์, ์ค์ ์ฟผ๋ฆฌ์ด๋ฉด ROLLBACK์ผ๋ก ์ ์ง
ํธ๋์ญ์
์ด๋?
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋
ผ๋ฆฌ์ ์ฐ์ฐ๋จ์
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํ๋ฅผ ๋ณํ์ํค๊ธฐ ์ํด์ ์ํํ๋ ์์
์ ๋จ์
์ง์์ด(SQL)๋ฅผ ์ด์ฉํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๊ทผํ๋ ๊ฒ
ํธ๋์ญ์
์ ํน์ฑ
1. ์์์ฑ : ํธ๋์ญ์
์์ ์ ์๋ ์ฐ์ฐ๋ค์ ๋ชจ๋ ์ฑ๊ณต์ ์ผ๋ก ์คํ๋๋์ง ์๋๋ฉด ์ ํ ์คํ๋์ง ์์์ผ ํจ
2. ์ผ๊ด์ฑ : DB ํธ๋์ญ์
์คํ ์ ๋ด์ฉ์ด ์๋ชป ๋์ง ์์ผ๋ฉด ์คํ ํ๋ ์๋ชป๋์ง ์์์ผ ํจ
3. ๊ณ ๋ฆฝ์ฑ : ํธ๋์ญ์
์คํ ๋์ค ๋ค๋ฅธ ํธ๋์ญ์
์ ์ํฅ์ ๋ฐ์ ์๋ชป๋ ๊ฒฐ๊ณผ๋ฅผ ๋ง๋ค์ด์๋ ์๋๋ค
4. ์ง์์ฑ : ํธ๋์ญ์
์ด ์ฑ๊ณต์ ์ผ๋ก ์ํ๋๋ฉด DB์ ๋ด์ฉ์ ์๊ตฌ์ ์ผ๋ก ์ ์ฅ
ํธ๋์ญ์
์ ๊ฒฉ๋ฆฌ์ฑ ๋ฌธ์
1. Dirty Read : ๋ฐ์ดํฐ ์บ์์๋ ๋ณ๊ฒฝ์ด ๋์์ง๋ง, ๋์คํฌ์๋ ๋ณ๊ฒฝ๋์ง ์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๋ ์์
2. Non-Repeatable Read : ํธ๋์ญ์
๋ด ๋ค๋ฅธ ์์ ์ ์ฝ์ ํ๋์ ๋ฐ์ดํฐ๊ฐ ๊ฐ์ด ๋ค๋ฅธ ๊ฒ
3. Phantom Read : ํธ๋์ญ์
์ํ ์ค ์๋ ํ์ด ์ถ๊ฐ๋์ด ์๋ก์ด ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ฒ ๋๊ฑฐ๋ ์กด์ฌํ๋ ๋ฐ์ดํฐ๊ฐ ์ฌ๋ผ์ง๋ ๊ฒ, ํธ๋์ญ์
๋ด ๋์ผํ ์กฐ๊ฑด์ผ๋ก ์ฝ์ ๋ฐ์ดํฐ์ ๊ฐ์๊ฐ ๋ฌ๋ผ์ง๋ ๊ฒ
๋
ผ๋ฆฌ์ฐ์ฐ์
AND : ๋ ๋ค ๋ง์กฑ
OR : ๋ ์ค ํ๋๋ผ๋ ๋ง์กฑ (=IN)
NOT : ๋ ๋ค ์๋๋ค
โ
NOT - AND - OR (๋์ค) ์์ผ๋ก ์ฐ์ฐ ์คํ
ex) NOT (์กฐ๊ฑด) AND (์กฐ๊ฑด) AND NOT (์กฐ๊ฑด) OR (์กฐ๊ฑด)์ผ ๋
NOT (์กฐ๊ฑด)๊ณผ NOT (์กฐ๊ฑด) ๊ฐ๊ฐ ์คํ > AND AND ํ๋ฒ์ ์คํ > ๋ง์ง๋ง์ OR (์กฐ๊ฑด) ์คํ
BETWEEN 1 AND 2 : 1 โค A โค 2
A IN (1, 2, 3) : A = 1 or A = 2 or A = 3
โ
LIKE
_ : ๋ฏธ์ง์ ํ ๊ธ์
% : 0 ์ด์์ ๊ธ์
ex) _L% : ์ด๋ฆ์ ๋ ๋ฒ์งธ ๊ธ์๊ฐ L์ธ ์ฌ์
ESCAPE
LIKE ์ฐ์ฐ์ผ๋ก '%'๋ '_'๊ฐ ๋ค์ด๊ฐ ๋ฌธ์๋ฅผ ๊ฒ์ํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค. '_'๋ '%'์์ ESCAPE๋ก ํน์๋ฌธ์๋ฅผ ์ง์ .
ex) ename LIKE 'A_A' -> A@_A
@๋ง๊ณ ๋ ์๋ฌด ๋ฌธ์๋ ์ฌ์ฉ ๊ฐ๋ฅ
โ
NULL
โ ๋ชจ๋ฅด๋ ๊ฐ
โก NULL์ ์ฐ์ ์ฐ์ฐ ๊ฒฐ๊ณผ๋ ์ ์ ์์(UNKOWN)
โข NULL์ ๋น๊ต์ฐ์ฐ ๊ฒฐ๊ณผ๋ FALSE
โฃ ์ ๋ ฌ ์ ์๋ฏธ๊ฐ Oracle์์๋ โ SQL Sever์์๋ -โ
nVL (๊ฐ1, ๊ฐ2) : ๊ฐ1์ด NULL๋ฉด ๊ฐ2
nVL2 (๊ฐ1, ๊ฐ2, ๊ฐ3) : ๊ฐ1์ด NULL์ด๋ฉด ๊ฐ3, NOT NULL์ด๋ฉด ๊ฐ2
IS NULL (๊ฐ1, ๊ฐ2) : nVL๊ณผ ๋์ผ
NULL IF (๊ฐ1, ๊ฐ2) : ๊ฐ1 = ๊ฐ2 ์ด๋ฉด NULL, ๊ฐ1 โ ๊ฐ2 ์ด๋ฉด ์ฒซ๋ฒ์งธ ๊ฐ
COALESCE (๊ฐ1, ๊ฐ2... ) : NULL ์๋ ์ฒซ๋ฒ์งธ ๊ฐ
* ์ฐ์ฐ์ ์ฐ์ ์์ : ()->NOT-> ->AND->OR
ROWNUM
Oracle
์งํฉ์ ๊ฐ ํ์ ๋ํด ์์๋ก ๋ถ์ฌ๋๋ ์ผ๋ จ๋ฒํธ. ์์ n๊ฐ ํ์ ๊ฐ์ ธ์จ๋ค.
WHERE์ ์์ ํ์ ๊ฐ์ ์ ํ
ex) SELECT empno, sal FROM emp WHERE ROWNUM โค 3 ORDER BY sal, desc์ผ ๋, ORDER BY์
์ด ๊ฐ์ฅ ๋ง์ง๋ง์ ๋์จ๋ค.
์ ๋ ฌ ์ ์ ROWNUM ์กฐ๊ฑด์ ์คํ > ROWNUM์ ์ํด ์ถ๋ ฅ๋ ๊ฒฐ๊ณผ๋ง ORDER BY๋ก ์ ๋ ฌ
TOP(n) ์นผ๋ผ๋ช
SQL Server
SELECT์ ์์ ์์ n๊ฐ ํ์ ๊ฐ์ ธ์จ๋ค
TOP(n) WITH TIES : ORDER BY์ ๋ค์ ์ค๋ ์ปฌ๋ผ์ ๊ธฐ์ค์ผ๋ก ๋์ผํ ๋ฐ์ดํฐ๊ฐ ์์ ๊ฒฝ์ฐ ํจ๊ป ์ถ๋ ฅ
ex) SELECT TOP 3 WITH TIES * FROM emp ORDER BY sal DESC;
๋จ์ผํ ํจ์
1. SELECT, WHERE, ORDER BY ์ ์์ ์ฌ์ฉ ๊ฐ๋ฅ
2. ํ์ ๊ฐ๋ณ์ ์กฐ์
3. ์ฌ๋ฌ ์ธ์๊ฐ ์์ด๋ ๊ฒฐ๊ณผ๋ 1๊ฐ๋ง ์ถ๋ ฅ
4. ํจ์ ์ธ์์ ์์ ๋ณ์ ํํ์ ์ฌ์ฉ ๊ฐ๋ฅ
5. ํจ์ ์ค์ฒฉ ๊ฐ๋ฅ
๋ฌธ์ํ ํจ์
UPPER : ๋๋ฌธ์ ๋ณ๊ฒฝ
LOWER : ์๋ฌธ์ ๋ณ๊ฒฝ
ASCII : ASCII ๋ฌธ์์ ๊ฐ ๋ฐํ
CHR : ASCII ๊ฐ์ ํด๋นํ๋ ๋ฌธ์ ๋ฐํ
CONCAT (์ธ์๊ฐ ๋ฌด์กฐ๊ฑด 2๊ฐ) : ๋ฌธ์์ด ์ฐ๊ฒฐ
+ : SQL Server
|| : Oracle
LPAD(๊ฐ, ์ด ๋ฌธ์๊ธธ์ด, ์ฑ์๋ฌธ์) : ์ผ์ชฝ๋ถํฐ ์ง์ ํ ๋ฌธ์๋ก ์ฑ์ฐ๊ธฐ
RPAD(๊ฐ, ์ด ๋ฌธ์๊ธธ์ด, ์ฑ์๋ฌธ์) : ์ค๋ฅธ์ชฝ๋ถํฐ ์ง์ ํ ๋ฌธ์๋ก ์ฑ์ฐ๊ธฐ
* ์ฑ์๋ฌธ์ ์ง์ ํ์ง ์์ผ๋ฉด ๊ณต๋ฐฑ์ผ๋ก ๋จ๊ฒ๋จ
LTRIM(๋์๋ฌธ์์ด, ์ ๊ฑฐ๋ฌธ์์ด) : ๋ฌธ์์ด์ ์ผ์ชฝ ๊ณต๋ฐฑ ์ ๊ฑฐ, ๋ฌธ์ ์ผ์ชฝ ๋ฐ๋ณต์ ์ธ ๋ฌธ์ ์ ๊ฑฐ
RTRIM(๋์๋ฌธ์์ด, ์ ๊ฑฐ๋ฌธ์์ด) : ๋ฌธ์์ด์ ์ค๋ฅธ์ชฝ ๊ณต๋ฐฑ ์ ๊ฑฐ, ๋ฌธ์ ์ค๋ฅธ์ชฝ ๋ฐ๋ณต์ ์ธ ๋ฌธ์ ์ ๊ฑฐ
* ์ ๊ฑฐ ๋ฌธ์์ด ์ง์ ํ์ง ์์ผ๋ฉด ๊ณต๋ฐฑ ์ ๊ฑฐ
SUBSTR(๋ฌธ์์ด, ์์์์น, ๊ธธ์ด) : ๋ฌธ์๋จ์๋ก ์์์์น์ ์๋ฅผ ๊ธธ์ด๋ฅผ ์ง์ ํ์ฌ ๋ฌธ์์ด์ ์๋ฅธ๋ค
INSTR(์ฐพ์ ๋์, ๊ฒ์ ๋ฌธ์์ด) : ์ง์ ๋ฌธ์์ด์ ๊ฒ์ํด์ ์์น๋ฅผ ์ฐพ์ ๋ฆฌํด. ์
๋ ฅ๋ ๋ฌธ์์ด์ด ์ผ์นํ๋ฉด ๊ทธ ์ฒซ๋ฒ์งธ ์ธ๋ฑ์ค๊ฐ์ ๋ฐํํ๊ณ , ์ผ์นํ๋ ๋ฌธ์๊ฐ ์์ผ๋ฉด 0์ ๋ฐํ
์ซ์ํ ํจ์
SIGN(์ซ์) : ์ซ์๊ฐ ์์๋ฉด 1, ์์๋ฉด -1, 0์ด๋ฉด 0 ๋ฐํ
MOD( 1, 2) : ์ซ์ 1์ ์ซ์ 2๋ก ๋๋์ด ๋๋จธ์ง ๋ฐํ
ROUND (์ธ์) : (์ธ์) ๋งํผ ์๋ฆฟ์ ๋ฐ์ฌ๋ฆผ
CEIL : Oracle์์ ๊ฐ์ฅ ๊ฐ๊น๊ณ ๋์ ์ ์๋ก ์ฌ๋ฆผ ex) 6.2 -> 7
CEILING : SQL Sever์์ ๊ฐ์ฅ ๊ฐ๊น๊ณ ๋์ ์ ์๋ก ์ฌ๋ฆผ
FLOOR (์ซ์) : ์๊ฑฐ๋ ๊ฐ์ ์ต๋ ์ ์ ๋ฆฌํด
๋ ์งํ ํจ์
TO_CHAR : ๋ฌธ์ํ
TO_DATE : ์ซ์ํ
SYSDATE : Oracle. ํ์ฌ ๋ ์ง์ ์๊ฐ ์ถ๋ ฅ
GETDATE : SQL Sever. ํ์ฌ ๋ ์ง์ ์๊ฐ ์ถ๋ ฅ
* ๋ ์งdata + 100 = 100์ผ ์ดํ (day๋ก ์ธ์)
ex) 1 = , 1/24 = 1 , 1/24/60 = 1 ํ๋ฃจ ์๊ฐ ๋ถ
[์์ ] ๋ค์ ์ค ๋ฌธ์์ด์ ํ๋ณํ์ ์ผ์ผํค๋ ํจ์๋?
NULL ํจ์ (NULL์ 0์ด๋ ๊ณต๋ฐฑ์ด ์๋)
NVL(์1,์ 2) : ์1์ ๊ฐ์ด NULL์ด๋ฉด ์2 ์ถ๋ ฅ. ๊ณต์งํฉ์ ๋ฐ๊ฟ์ฃผ์ง ์์
NULLIF(์1,์ 2) : ์1์ด ์2์ ๊ฐ์ผ๋ฉด NULL์, ์๋๋ฉด ์1 ์ถ๋ ฅ
COALESCE(์1,์ 2) : NULL์ด ์๋ ์ต์ด์ ํํ์. ๋ชจ๋ NULL์ด๋ฉด NULL๋ฐํ
๋ค์คํ ์ง๊ณ ํจ์
1. ์ฌ๋ฌ ํ๋ค์ ๊ทธ๋ฃน์ด ๋ชจ์ฌ์ ๊ทธ๋ฃน๋น ๋จ ํ๋์ ๊ฒฐ๊ณผ๋ฅผ ๋๋ ค์ฃผ๋ ํจ์์ด๋ค.
2. GROUP BY ์ ์ ํ๋ค์ ์๊ทธ๋ฃนํ ํ๋ค.
3. SELECT, HAVING, ORDER BY ์ ์ ์ฌ์ฉ ๊ฐ๋ฅ
- ALL : Default์ต์
์๋ต ๊ฐ๋ฅ
- DISTINCT : ๊ฐ์ ๊ฐ์ ํ๋์ ๋ฐ์ดํฐ๋ก ๊ฐ์ฃผํ๋ ์ต์
NULL๊ณผ์ ๊ด๊ณ
COUNT(*) : NULL ๊ฐ์ ํฌํจํ ํ์ ์ * ์กฐ๊ฑด์ ์ ํด๋นํ๋ ๋ฐ์ดํฐ๊ฐ ์์ ๋ COUNT(*)์ ๊ฒฐ๊ณผ ๊ฐ์ 0
COUNT(ํํ์) : ํํ์์ ๊ฐ์ด NULL ๊ฐ์ธ ๊ฒ์ ์ ์ธํ ํ์ ์
SUM() : NULL ๊ฐ์ ์ ์ธํ ํฉ๊ณ
AVG() : NULL ๊ฐ์ ์ ์ธํ ํ๊ท
STDDEV : ํ์ค ํธ์ฐจ
VARIAN : ๋ถ์ฐ
MAX, MIN : ์ต๋๊ฐ ์ต์๊ฐ
ex)
A | B | C | A+B+C |
NULL | NULL | 1 | NULL |
3 | 2 | 2 | 7 |
NULL | 2 | 3 | NULL |
์ผ ๋, SUM(A) = 3, SUM(B) = 4, COUNT(A) = 1, COUNT(*) = 3
[๋ฌธ์ ] SUM(A+B+C) = ? [์ ๋ต] 7
SUM(A) + SUM(B) = ? [์ ๋ต] NULL
GROUP BY, HAVING ์ ์ ํน์ง
1. GROUP BY์ ์ ํตํด ์๊ทธ๋ฃน๋ณ ๊ธฐ์ค์ ์ ํ ํ, SELECT์ ์ ์ง๊ณ ํจ์๋ฅผ ์ฌ์ฉํ๋ค.
2. ์ง๊ณ ํจ์์ ํต๊ณ ์ ๋ณด๋ NULL๊ฐ์ ๊ฐ์ง ํ์ ์ ์ธํ๊ณ ์ํํ๋ค.
3. GROUP BY ALIAS ์ ์์ ์ฌ์ฉ ๋ถ๊ฐ
4. ์ง๊ณ ํจ์๋ WHERE์ ์ ์ฌ ์ ์๋ค.
5. HAVING์ ์๋ ์ง๊ณํจ์๋ฅผ ์ด์ฉํ์ฌ ์กฐ๊ฑด ํ์ ๊ฐ๋ฅ
6. HAVING GROUP BY์ ์ ์ผ๋ฐ์ ์ผ๋ก ๋ค์ ์์น
DECODE / CASE
DECODE(A, B, '1', null) : A ๊ฐ B ์ผ ๊ฒฝ์ฐ '1'์, ์๋ ๊ฒฝ์ฐ null(์๋ต ๊ฐ๋ฅ)
DECODE(A, B, '1', C, '2', '3') : A ๊ฐ B ์ผ ๊ฒฝ์ฐ '1'์, A ๊ฐ C ์ผ ๊ฒฝ์ฐ '2', ๋ ๋ค ์๋ ๊ฒฝ์ฐ '3'
* DECODE ํจ์๋ ๋์๋น๊ต(<, >, =) ๋ถ๊ฐ
CASE ์นผ๋ผ WHEN 1 THEN 'a' ELSE 'b' END : ์นผ๋ผ๊ฐ=1์ด๋ฉด a, ์๋๋ฉด b
CASE WHEN ์นผ๋ผ = 1 THEN 'a' ELSE 'b' END : ์นผ๋ผ๊ฐ=1์ด๋ฉด a, ์๋๋ฉด b
* ELSE์์ผ๋ฉด NULL
ORDER BY
1. SQL ๋ฌธ์ฅ์ผ๋ก ์กฐํ๋ ๋ฐ์ดํฐ๋ค์ ๋ค์ํ ๋ชฉ์ ์ ๋ง๊ฒ ํน์ ํ ์นผ๋ผ์ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌํ์ฌ ์ถ๋ ฅํ๋๋ฐ ์ฌ์ฉ
2. ORDER BY ALIAS์ ์ ์นผ๋ผ๋ช
๋์ ๋ช
์ด๋ ์นผ๋ผ ์์๋ฅผ ๋ํ๋ด๋ ์ ์๋ ์ฌ์ฉ ๊ฐ๋ฅ
3. DEFAULT๊ฐ์ผ๋ก ์ค๋ฆ์ฐจ์(ASC)์ด ์ ์ฉ๋๋ฉฐ DESC ์ต์
์ ํตํด ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌ ๊ฐ๋ฅ
4. SQL ๋ฌธ์ฅ์ ์ ์ผ ๋ง์ง๋ง์ ์์น
5. SELECT ์ ์์ ์ ์ํ์ง ์์ ์นผ๋ผ ์ฌ์ฉ ๊ฐ๋ฅ
* Oracle์์๋ NULL์ ๊ฐ์ฅ ํฐ ๊ฐ์ผ๋ก ์ทจ๊ธํ๋ฉฐ, SQL Server์์๋ NULL์ ๊ฐ์ฅ ์์ ๊ฐ์ผ๋ก ์ทจ๊ธํ๋ค
SEELCT
๋ฌธ์ฅ์คํ ์์ : FROM > WHERE > GROUPBY > HAVING > SELECT > ORDERBY
JOIN
๋ ๊ฐ ์ด์์ ํ
์ด๋ธ๋ค์ ์ฐ๊ฒฐ ๋๋ ๊ฒฐํฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅ
์ผ๋ฐ์ ์ผ๋ก ํ๋ค์ PK๋ FK ๊ฐ์ ์ฐ๊ด์ ์ํด JOIN์ด ์ฑ๋ฆฝ
์ด๋ค ๊ฒฝ์ฐ์๋ PK, FK ๊ด๊ณ๊ฐ ์์ด๋ ๋
ผ๋ฆฌ์ ์ธ ๊ฐ๋ค์ ์ฐ๊ด๋ง์ผ๋ก ์ด JOIN ์ฑ๋ฆฝ ๊ฐ๋ฅ
5๊ฐ์ง ํ
์ด๋ธ์ JOINํ๊ธฐ ์ํด์๋ ์ต์ 4๋ฒ์ JOIN๊ณผ์ ์ด ํ์ํ๋ค. (N-1)
EQUI JOIN
2๊ฐ์ ํ
์ด๋ธ ๊ฐ์ ์นผ๋ผ ๊ฐ๋ค์ด ์๋ก ์ ํํ๊ฒ ์ผ์นํ๋ ๊ฒฝ์ฐ์ ์ฌ์ฉ
๋๋ถ๋ถ PK, FK ๊ด๊ณ๋ฅผ ๊ธฐ๋ฐ
์ปฌ๋ผ๋ช
์์ ํ
์ด๋ธ ๋ช
์ ๊ธฐ์ ํด์ค์ผ ํจ
NON EQUI JOIN
2๊ฐ์ ํ
์ด๋ธ ๊ฐ์ ์นผ๋ผ ๊ฐ๋ค์ด ์๋ก ์ ํํ๊ฒ ์ผ์นํ์ง ์๋ ๊ฒฝ์ฐ์ ์ฌ์ฉ
โ=โ ์ฐ์ฐ์๊ฐ ์๋ BETWEEN, >, <= ๋ฑ ์ฐ์ฐ์ ์ฌ์ฉ
โ NATURAL JOIN : ์ค๋ณต ์นผ๋ผ์ ํ๋๋ก ํตํฉ, ์ ์ผ ์์ ๋ฑ์ฅ, ๋ณ์นญ ์ฌ์ฉ ๋ถ๊ฐ
โก LEFT OUTER JOIN : A LEFT OUTER JOIND์ A COLL = B COLL (+)๊ณผ ๋์ผ
โข RIGHT OUTER JOIN
โฃ FULL OUTER JOIN
* JOIN์ ํ๋ฉด ํ ์๋ก ์นผ๋ผ์ด ๋์ด๋๋ค
* FROM A, B, C์ผ ๋ A์ B๋ฅผ ๋จผ์ JOINํ๊ณ , ๋ฌถ์ธ ์นผ๋ผ์ C์ JOINํ๋ค
์ฐธ๊ณ : https://youtu.be/PC3ypt_VGWI (SELECT๋ฌธ์ฅ ~ ํธ๋์ญ์
๊ด๋ฆฌ ์ธ์ด(TCL))