Search
Duplicate

SQL

νƒœκ·Έ
SQLD
DDL
DML
DCL
TCL
SQL
SQL 은 κ΄€κ³„ν˜• 데이터 λ² μ΄μŠ€μ— λŒ€ν•΄μ„œ λ°μ΄ν„°μ˜ ꡬ쑰λ₯Ό μ •μ˜, 데이터 μ‘°μž‘, 데이터 μ œμ–΄ 등을 ν•  수 μžˆλŠ” μ ˆμ°¨ν˜• + λΉ„ μ ˆμ°¨ν˜• 언어이닀.
SQL 문의 μ‹€ν–‰ μˆœμ„œ
β€’
νŒŒμ‹± β†’ μ‹€ν–‰ β†’ 인좜
β€’
νŒŒμ‹±(parsing)
β—¦
SQL 문의 문법을 ν™•μΈν•˜κ³  ꡬ문 λΆ„μ„ν•œλ‹€.
β—¦
ꡬ문 λΆ„μ„ν•œ SQL 문은 Library Cache 에 μ €μž₯ν•œλ‹€.
β€’
μ‹€ν–‰(execution)
β—¦
μ˜΅ν‹°λ§ˆμ΄μ €κ°€ μˆ˜λ¦½ν•œ μ‹€ν–‰ κ³„νšμ— 따라 SQL 을 μ‹€ν–‰ν•œλ‹€.
β€’
인좜(fetch)
β—¦
데이터λ₯Ό μ½μ–΄μ„œ μ „μ†‘ν•œλ‹€.

DDL

DDL
β€’
κ΄€κ³„ν˜• 데이터 베이슀의 ꡬ쑰λ₯Ό μ •μ˜ν•˜λŠ” 언어이닀.
β€’
ν…Œμ΄λΈ” 생성 / λ³€κ²½ / μ‚­μ œ …
CREATE
β€’
μƒˆλ‘œμš΄ ν…Œμ΄λΈ” 생성
β€’
CREATE TABLE β€˜ν…Œμ΄λΈ”λͺ…’ ();
β€’
데이터 νƒ€μž…
NUMBER
μˆ«μžν˜• 데이터 νƒ€μž…
VARCHAR2
가변길이 λ¬Έμžμ—΄
CHAR
데이터 νƒ€μž…μ„ κ³ μ •λœ 크기의 문자둜 지정
DATE
λ‚ μ§œν˜• νƒ€μž…μœΌλ‘œ 지정할 λ•Œ μ‚¬μš©ν•œλ‹€.
NUMBER(10, 2) : μ†Œμˆ˜μ  λ‘˜μ§Έ μžλ¦¬κΉŒμ§€ μ €μž₯
SYSDATE : 였늘의 λ‚ μ§œλ₯Ό μ‘°νšŒν•œλ‹€.
β€» DEFAULT μ˜΅μ…˜μ„ μ‚¬μš©ν•˜λ©΄ 였늘 λ‚ μ§œλ₯Ό κΈ°λ³Έκ°’μœΌλ‘œ 지정할 수 μžˆλ‹€.
β€’
CASCADE
β—¦
ν…Œμ΄λΈ” μƒμ„±μ‹œ μ‚¬μš©ν•  수 μžˆλŠ” μ˜΅μ…˜. μ°Έμ‘° 관계가 μžˆμ„ 경우 μ°Έμ‘°λ˜λŠ” 데이터λ₯Ό μžλ™μœΌλ‘œ λ°˜μ˜ν•  수 μžˆλ‹€.
β—¦
λ§ˆμŠ€ν„° ν…Œμ΄λΈ” 생성 ν›„ λ‹€μŒ ν…Œμ΄λΈ”μ„ 생성할 λ•Œ ON DELETE CASCADE μ˜΅μ…˜μ„ μ‚¬μš©ν•œλ‹€.
β—¦
이 ν›„ νŠΉμ • 데이터λ₯Ό μ‚­μ œν•˜λ©΄ 두 ν…Œμ΄λΈ”μ˜ 데이터가 μ „λΆ€ μ‚­μ œλœλ‹€. β‡’ μ°Έμ‘° 무결성
ALTER
β€’
μƒμ„±λœ ν…Œμ΄λΈ” λ³€κ²½
β€’
ν…Œμ΄λΈ”λͺ… λ³€κ²½
ALTER TABLE 'ν…Œμ΄λΈ”λͺ…' RENAME TO NEW 'ν…Œμ΄λΈ”λͺ…';
SQL
볡사
β€’
칼럼 μΆ”κ°€
ALTER TABLE 'ν…Œμ΄λΈ”λͺ…' ADD (AGE NUMBER(2) DEFAULT 1);
SQL
볡사
β€’
칼럼 λ³€κ²½
ALTER TABLE 'ν…Œμ΄λΈ”λͺ…' MODIFY (ENAME VARCHAR2(40) NOT NULL);
SQL
볡사
β€’
칼럼 μ‚­μ œ
ALTER TABLE 'ν…Œμ΄λΈ”λͺ…' DROP COLUMN AGE;
SQL
볡사
β€’
칼럼λͺ… λ³€κ²½
ALTER TABLE 'ν…Œμ΄λΈ”λͺ…' RENAME COLUMN ENAME TO NEW_ENAME;
SQL
볡사
DROP
β€’
ν•΄λ‹Ή ν…Œμ΄λΈ” μ‚­μ œ, 데이터 ꡬ쑰 뿐만 μ•„λ‹ˆλΌ μ €μž₯된 데이터도 λͺ¨λ‘ μ‚­μ œλœλ‹€.
β€’
CASCADE CONSTRAINT μ˜΅μ…˜μ„ μ‚¬μš©ν•  수 μžˆλ‹€.
뷰의 생성과 μ‚­μ œ
β€’
λ·°λŠ” ν…Œμ΄λΈ”λ‘œλΆ€ν„° μœ λ„λœ κ°€μƒμ˜ ν…Œμ΄λΈ”μ΄λ‹€.
β€’
μ‹€μ œ 데이터λ₯Ό 가지고 μžˆμ§€ μ•Šκ³  νŠΉμ • ν…Œμ΄λΈ”μ„ μ°Έμ‘°ν•΄μ„œ μ›ν•˜λŠ” 칼럼만 μ‘°νšŒν•  수 μžˆλ‹€.
β€’
λ·°λŠ” 데이터 λ”•μ…”λ„ˆλ¦¬μ— SQL ν˜•νƒœλ‘œ μ €μž₯ν•˜λ˜ μ‹€ν–‰μ‹œμ— μ°Έμ‘°λœλ‹€.
β€’
μ°Έμ‘°ν•œ ν…Œμ΄λΈ”μ΄ λ³€κ²½λ˜λ©΄ 뷰도 λ³€κ²½λœλ‹€.
β€’
뷰에 λŒ€ν•œ μž…λ ₯, μˆ˜μ •, μ‚­μ œμ—λŠ” μ œμ•½μ΄ μžˆλ‹€.
β€’
νŠΉμ • 칼럼만 μ‘°νšŒμ‹œμΌœ λ³΄μ•ˆμ„±μ„ ν–₯상 μ‹œν‚¨λ‹€.
β€’
ν•œλ²ˆ μƒμ„±λœ λ·°λŠ” λ³€κ²½ν•  수 μ—†κ³ , μ‚­μ œ ν›„ μž¬μƒμ„± ν•΄μ•Όν•œλ‹€. (ALTER λ¬Έ μ‚¬μš© λΆˆκ°€)
β€’
뷰의 μ‚­μ œμ—λŠ” DROP VIEW λ₯Ό μ‚¬μš©ν•˜μ§€λ§Œ μ°Έμ‘°ν•œ ν…Œμ΄λΈ”μ΄ μ‚­μ œλ˜μ§€λŠ” μ•ŠλŠ”λ‹€.
β€’
μž₯점
β—¦
λ³΄μ•ˆκΈ°λŠ₯
β—¦
데이터 관리 간단
β—¦
SELECT 문이 간단해진닀.
β—¦
ν•˜λ‚˜μ˜ ν…Œμ΄λΈ”μ— μ—¬λŸ¬κ°œμ˜ λ·° 생성 κ°€λŠ₯
β€’
단점
β—¦
λ…μžμ μΈ 인덱슀 κ°€μ§ˆ 수 μ—†λ‹€
β—¦
μ‚½μž…, μˆ˜μ •, μ‚­μ œ μ—°μ‚° μ œμ•½
β—¦
데이터 ꡬ쑰 λ³€κ²½ λΆˆκ°€

DML

DML
β€’
ν…Œμ΄λΈ”μ—μ„œ 데이터λ₯Ό μž…λ ₯, μˆ˜μ •, μ‚­μ œ, μ‘°νšŒν•œλ‹€.
INSERT
INSERT INTO 'ν…Œμ΄λΈ”λͺ…' ('칼럼1', '칼럼2') VALUES ('κ°’1', 'κ°’2'); // μƒλž΅λ²„μ „ (λͺ¨λ“  칼럼의 값을 μž…λ ₯ν•  λ•Œ) INSERT INTO 'ν…Œμ΄λΈ”λͺ…' VALUES ('κ°’1', 'κ°’2');
SQL
볡사
β€’
INSERT 문을 μ‹€ν–‰ ν›„ μ΅œμ’…μ μœΌλ‘œ 데이터λ₯Ό μ €μž₯ν•˜λ €λ©΄ COMMIT 을 μ‹€ν–‰ν•΄μ•Ό ν•œλ‹€.
β€’
λ§Œμ•½ AUTO COMMIT 으둜 μ„€μ •λœ κ²½μš°μ—λŠ” ν•˜μ§€ μ•Šμ•„λ„ λœλ‹€.
SELECT 문으둜 μž…λ ₯
// SELECT 문을 μ‚¬μš©ν•˜μ—¬ 데이터 쑰회 ν›„ ν•΄λ‹Ή ν…Œμ΄λΈ”μ— λ°”λ‘œ μ‚½μž…μ΄ κ°€λŠ₯ν•˜λ‹€. INSERT INTO 'ν…Œμ΄λΈ”λͺ…' SELECT * FROM 'ν…Œμ΄λΈ”λͺ…';
SQL
볡사
Nologging μ‚¬μš©
β€’
데이터 λ² μ΄μŠ€μ— 데이터λ₯Ό μž…λ ₯ν•˜λ©΄ λ‘œκ·ΈνŒŒμΌμ— κ·Έ 정보λ₯Ό κΈ°λ‘ν•œλ‹€.
β€’
CHECK POINT λΌλŠ” μ΄λ²€νŠΈκ°€ λ°œμƒν•˜λ©΄ 둜그파일의 데이터λ₯Ό 데이터 νŒŒμΌμ— μ €μž₯ν•œλ‹€.
β€’
NOLOGGING μ˜΅μ…˜μ€ 둜그파일의 기둝을 μ΅œμ†Œν™”μ‹œμΌœμ„œ μž…λ ₯ μ‹œ μ„±λŠ₯을 ν–₯μƒμ‹œν‚¨λ‹€.
β€’
BUFFER CACHE λΌλŠ” λ©”λͺ¨λ¦¬ μ˜μ—­μ„ μƒλž΅ν•˜κ³  κΈ°λ‘ν•œλ‹€.
ALTER TABLE 'ν…Œμ΄λΈ”λͺ…' NOLOGGING;
SQL
볡사
UPDATE
β€’
μž…λ ₯된 λ°μ΄ν„°μ˜ 값을 μˆ˜μ •
β€’
μ›ν•˜λŠ” 쑰건으둜 데이터λ₯Ό κ²€μƒ‰ν•΄μ„œ ν•΄λ‹Ή 데이터 μˆ˜μ •
쑰건문을 μž…λ ₯ν•˜μ§€ μ•ŠμœΌλ©΄ λͺ¨λ“  데이터가 μˆ˜μ •λ˜λ―€λ‘œ μœ μ˜ν•΄μ•Όν•œλ‹€.
UPDATE 'ν…Œμ΄λΈ”λͺ…' SET '칼럼λͺ…' = 'κ°’' WHERE '칼럼λͺ…' = 'κ°’';
SQL
볡사
DELETE
β€’
μ›ν•˜λŠ” 쑰건을 κ²€μƒ‰ν•΄μ„œ ν•΄λ‹Ήλ˜λŠ” 행을 μ‚­μ œν•œλ‹€.
β€’
데이터λ₯Ό μ‚­μ œν•œλ‹€κ³  ν•΄μ„œ ν…Œμ΄λΈ”μ˜ μš©λŸ‰μ΄ μ΄ˆκΈ°ν™”λ˜μ§€λŠ” μ•ŠλŠ”λ‹€.
쑰건문을 μž…λ ₯ν•˜μ§€ μ•ŠμœΌλ©΄ λͺ¨λ“  데이터가 μ‚­μ œλ˜λ―€λ‘œ μœ μ˜ν•΄μ•Όν•œλ‹€.
DELETE FROM 'ν…Œμ΄λΈ”λͺ…' WHERE '칼럼λͺ…' = 'κ°’';
SQL
볡사
λ°μ΄ν„°μ˜ μ‚­μ œ
β€’
ORACLE λ°μ΄ν„°λ² μ΄μŠ€λŠ” μ €μž₯곡간을 ν• λ‹Ήν•  λ•Œ EXTENT λ‹¨μœ„λ‘œ ν• λ‹Ήν•˜λ©°, 데이터가 μž…λ ₯되면 EXTENT 에 μ €μž₯λœλ‹€. λ§Œμ•½ 이 크기가 MAX_EXTENTS λ₯Ό λ„˜μ–΄μ„œκ²Œ 되면 μš©λŸ‰ 초과 였λ₯˜κ°€ λ°œμƒν•œλ‹€.
β€’
DELETE 문은 μ‚­μ œ μ—¬λΆ€λ§Œ ν‘œμ‹œν•˜κΈ° λ•Œλ¬Έμ— μš©λŸ‰μ€ μ΄ˆκΈ°ν™”λ˜μ§€ μ•ŠλŠ”λ‹€. ν…Œμ΄λΈ”μ˜ μš©λŸ‰μ„ μ΄ˆκΈ°ν™”ν•˜κΈ° μœ„ν•΄μ„œλŠ” TRUNCATE TABLE β€˜ν…Œμ΄λΈ”λͺ…’ 을 μ‚¬μš©ν•΄μ•Όν•œλ‹€.
SELECT
β€’
SELECT 문은 νŠΉμ • μΉΌλŸΌμ΄λ‚˜ νŠΉμ • 행을 μ‘°νšŒν•  수 μžˆλ‹€.
SELECT ENAME || 'λ‹˜' FROM EMP; // EMP ν…Œμ΄λΈ”μ˜ λͺ¨λ“  ν–‰μ—μ„œ ENAME μΉΌλŸΌμ„ μ‘°νšŒν•œλ‹€. // 단, ENAME 칼럼 뒀에 'λ‹˜' μ΄λΌλŠ” 문자λ₯Ό κ²°ν•©ν•œλ‹€.
SQL
볡사
ORDER BY
β€’
μ •λ ¬ μ‹œμ μ€ λͺ¨λ“  싀행이 λλ‚œ 후에 데이터λ₯Ό 좜λ ₯ν•΄μ£ΌκΈ° λ°”λ‘œ μ „!
β€’
λ°μ΄ν„°λ² μ΄μŠ€ λ©”λͺ¨λ¦¬λ₯Ό 많이 μ‚¬μš©ν•œλ‹€. λ•Œλ¬Έμ— λŒ€λŸ‰μ˜ 데이터 정렬은 μ„±λŠ₯ μ €ν•˜λ₯Ό λ°œμƒ μ‹œν‚¨λ‹€.
β€’
정렬을 ν•˜κΈ° μœ„ν•΄ λ©”λͺ¨λ¦¬ 내뢀에 ν• λ‹Ήλœ SORT_AREA_SIZE λ₯Ό μ‚¬μš©ν•œλ‹€. λ§Œμ•½ 이 값이 λ„ˆλ¬΄ μž‘μœΌλ©΄ μ„±λŠ₯ μ €ν•˜κ°€ λ°œμƒν•œλ‹€.
β€’
정렬을 ν”Όν•˜κΈ° μœ„ν•΄μ„œ 인덱슀λ₯Ό 생성할 λ•Œ μ‚¬μš©μžκ°€ μ›ν•˜λŠ” ν˜•νƒœλ‘œ 생성해야 ν•œλ‹€.
β€’
νŠΉλ³„ν•œ 지정이 μ—†μœΌλ©΄ μ˜€λ¦„μ°¨μˆœ 정렬이닀.
인덱슀λ₯Ό μ‚¬μš©ν•œ μ •λ ¬ νšŒν”Ό
기본적으둜 ν…Œμ΄λΈ”μ„ μƒμ„±ν•˜κ³  SELECT 문을 μ‹€ν–‰ν•˜λ©΄, κΈ°λ³Έν‚€λ₯Ό κΈ°μ€€μœΌλ‘œ μ˜€λ¦„μ°¨μˆœ μ •λ ¬λ˜μ–΄μ„œ μ‘°νšŒλœλ‹€. λ‚΄λ¦Όμ°¨μˆœμœΌλ‘œ μ‘°νšŒν•˜κ³  μ‹Άλ‹€λ©΄ μ•„λž˜μ™€ 같이 μž‘μ„±ν•˜μž.
SELECT /*+ INDEX_DESC('별칭') */ FROM 'ν…Œμ΄λΈ”λͺ…' '별칭';
SQL
볡사
DISTINCT 와 ALIAS
β€’
칼럼λͺ… μ•žμ— μ§€μ •ν•˜μ—¬ μ€‘λ³΅λœ 데이터λ₯Ό ν•œλ²ˆλ§Œ μ‘°νšŒν•˜κ²Œ ν•œλ‹€.
β€’
ν…Œμ΄λΈ”λͺ…μ΄λ‚˜ 칼럼λͺ…이 λ„ˆλ¬΄ κΈΈμ–΄μ„œ κ°„λž΅ν•˜κ²Œ ν•  λ•Œ μ‚¬μš©ν•œλ‹€.
WHERE
β€’
비ꡐ μ—°μ‚°μž
=, <, ≀, >, β‰₯
β€’
λΆ€μ • 비ꡐ μ—°μ‚°μž
β‰ , ^=, <>, NOT 칼럼λͺ…=, NOT 칼럼λͺ…>
β€’
λ…Όλ¦¬μ—°μ‚°μž
β—¦
AND : 쑰건을 λͺ¨λ‘ λ§Œμ‘±ν•΄μ•Ό 참이 λœλ‹€.
β—¦
OR : 쑰건 쀑 ν•˜λ‚˜λ§Œ λ§Œμ‘±ν•΄λ„ 참이 λœλ‹€.
β—¦
NOT : 참이면 κ±°μ§“μœΌλ‘œ λ°”κΎΈκ³  거짓이면 참으둜 λ°”κΎΌλ‹€.
β€’
SQL μ—°μ‚°μž
β—¦
LIKE β€˜%비ꡐ λ¬Έμžμ—΄%’ : 비ꡐ λ¬Έμžμ—΄μ„ μ‘°νšŒν•œλ‹€. β€˜%’ λŠ” λͺ¨λ“ κ°’을 μ˜λ―Έν•œλ‹€.
β—¦
BETWEEN A AND B : A 와 B μ‚¬μ΄μ˜ 값을 μ‘°νšŒν•œλ‹€.
β—¦
IN
β–ͺ
OR 을 μ˜λ―Έν•˜λ©°, LIST κ°’ 쀑에 ν•˜λ‚˜λ§Œ μΌμΉ˜ν•΄λ„ μ‘°νšŒλœλ‹€.
β–ͺ
κ΄„ν˜Έλ₯Ό μ‚¬μš©ν•˜μ—¬ μ—¬λŸ¬ 개의 μΉΌλŸΌμ— λŒ€ν•œ 쑰건을 지정할 수 μžˆλ‹€.
SELECT * FROM 'ν…Œμ΄λΈ”λͺ…' WHERE ('칼럼1', '칼럼2') IN (('κ°’1', 'κ°’2'), ('κ°’1', 'κ°’2'));
SQL
볡사
β—¦
IS NULL : NULL 값을 μ‘°νšŒν•œλ‹€.
NULL
β€’
λͺ¨λ₯΄λŠ” 값을 μ˜λ―Έν•œλ‹€.
β€’
κ°’μ˜ λΆ€μž¬λ₯Ό μ˜λ―Έν•œλ‹€.
β€’
숫자 ν˜Ήμ€ λ‚ μ§œλ₯Ό λ”ν•˜λ©΄ NULL 이 λœλ‹€.
β€’
μ–΄λ–€ κ°’κ³Ό 비ꡐ할 λ•Œ β€˜μ•Œ 수 μ—†μŒβ€™ 이 λ°˜ν™˜λœλ‹€.
β€’
κ΄€λ ¨ν•¨μˆ˜
// NVL NVL('칼럼', 0) => 칼럼 값이 NULL 이면 0 으둜 λ°”κΎΌλ‹€. // NVL2 NVL2('칼럼', 1, 0) => 칼럼 값이 NULL μ•„λ‹ˆλ©΄ 1 을, NULL 이면 0 을 λ°˜ν™˜. // NULLIF (ORACLE, MS-SQL, MYSQL) NULLIF('κ°’1', 'κ°’2') => λ‘κ°œμ˜ 값이 κ°™μœΌλ©΄ NULL 을 μ•„λ‹ˆλ©΄ 'κ°’1' 을 λ°˜ν™˜. // COALESCE (ORACLE, MS-SQL) COALESCE('κ°’1', 'κ°’2', 'κ°’3') => κ°’1 이 NULL 이 μ•„λ‹ˆλ©΄ κ°’1 을 λ°˜ν™˜. NULL 이면 κ·Έ λ’€μ˜ 값을 νŒλ‹¨ν•˜μ—¬ 값을 λ°˜ν™˜ν•œλ‹€.
SQL
볡사
β€’
λΆ€μ • SQL μ—°μ‚°μž
β—¦
NOT BETWEEN A AND B
β—¦
NOT IN
β—¦
IS NOT NULL
μ™€μΌλ“œ μΉ΄λ“œ
β€’
% : μ–΄λ–€ 문자λ₯Ό ν¬ν•¨ν•œ λͺ¨λ“  것
β€’
_ : ν•œ 개의 단일 문자
GROUP BY
β€’
ν…Œμ΄λΈ”μ—μ„œ μ†Œκ·œλͺ¨ 행을 κ·Έλ£Ήν™” ν•˜μ—¬ 합계, 평균, μ΅œλŒ“κ°’, μ΅œμ†Ÿκ°’ 등을 κ³„μ‚°ν•œλ‹€.
β€’
HAVING ꡬ에 쑰건문 μ‚¬μš© (WHERE μ ˆμ„ μ‚¬μš©ν•˜κ²Œ 되면 GROUP BY λŒ€μƒμ—μ„œ μ œμ™Έλ¨)
β€’
GROUPING 된 결과에 λŒ€ν•œ 쑰건문을 μ‚¬μš©
β€’
ORDER BY λ₯Ό μ‚¬μš©ν•΄μ„œ μ •λ ¬ κ°€λŠ₯
β€’
μ§‘κ³„ν•¨μˆ˜
COUNT()
ν–‰ 수λ₯Ό 쑰회 (NULL μ œμ™Έ)
MAX() / MIN()
μ΅œλŒ“κ°’κ³Ό μ΅œμ†Ÿκ°’
SUM()
합계 계산
STDDEV()
ν‘œμ€€νŽΈμ°¨
AVG()
평균 계산
VARIANCE()
뢄산계산
SELECT λ¬Έ μ‹€ν–‰ μˆœμ„œ
FROM β†’ WHERE β†’ GROUP BY β†’ HAVING β†’ SELECT β†’ ORDER BY
λͺ…μ‹œμ  ν˜•λ³€ν™˜κ³Ό μ•”μ‹œμ  ν˜•λ³€ν™˜
β€’
λͺ…μ‹œμ  ν˜•λ³€ν™˜
β—¦
ν˜•λ³€ν™˜ ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•΄μ„œ 데티터 νƒ€μž… 일치 μ‹œν‚€λŠ” 것
β—¦
ν˜•λ³€ν™˜ ν•¨μˆ˜
TO_NUMBER(λ¬Έμžμ—΄)
λ¬Έμžμ—΄μ„ 숫자둜 λ³€ν™˜
TO_CHAR(숫자 ν˜Ήμ€ λ‚ μ§œ, [FORMAT])
숫자 ν˜Ήμ€ λ‚ μ§œλ₯Ό μ§€μ •λœ FORMAT 의 문자둜 λ³€ν™˜
TO_DATE(λ¬Έμžμ—΄, FORMAT)
λ¬Έμžμ—΄μ„ μ§€μ •λœ FORMAT 의 λ‚ μ§œν˜•μœΌλ‘œ λ³€ν™˜ν•œλ‹€.
β€’
μ•”μ‹œμ  ν˜•λ³€ν™˜
DBMS κ°€ μžλ™μœΌλ‘œ ν˜•λ³€ν™˜ ν•˜λŠ” 것.
인덱슀 μ»¬λŸΌμ— μ•”μ‹œμ  ν˜•λ³€ν™˜μ΄ λ°œμƒν•˜λ©΄ 인덱슀λ₯Ό μ‚¬μš©ν•  수 μ—†λ‹€. μ΄λŠ” λͺ…μ‹œμ  ν˜•λ³€ν™˜μ„ μ‚¬μš©ν•¨μœΌλ‘œμ¨ 해결이 κ°€λŠ₯ν•˜λ‹€.
λ¬Έμžμ—΄ ν•¨μˆ˜
β€’
ASCII(문자) : 문자 ν˜Ήμ€ 숫자λ₯Ό ASCII μ½”λ“œκ°’μœΌλ‘œ λ³€ν™˜ν•œλ‹€.
β€’
CHR / CHAR(ASCII μ½”λ“œκ°’)
β—¦
ASCII μ½”λ“œ 값을 문자둜 λ³€ν™˜ν•œλ‹€.
β—¦
ORACLE 은 CHAR 을, MSSQL, MYSQL 은 CHAR μ‚¬μš©
β€’
SUBSTR(λ¬Έμžμ—΄, M, N) : λ¬Έμžμ—΄μ—μ„œ M 번째 μœ„μΉ˜λΆ€ν„° N 개 자λ₯Έλ‹€.
β€’
CONCAT(λ¬Έμžμ—΄1, λ¬Έμžμ—΄2)
β—¦
λ¬Έμžμ—΄ κ²°ν•©
β—¦
ORACLE 은 ||, MYSQL 은 + 을 μ‚¬μš©ν•  수 μžˆλ‹€.
β€’
LOWER / UPPER : 영문자λ₯Ό μ†Œλ¬Έμž / λŒ€λ¬Έμžλ‘œ λ³€ν™˜ν•œλ‹€.
β€’
LENGTH ν˜Ήμ€ LEN(λ¬Έμžμ—΄) : 곡백을 ν¬ν•¨ν•΄μ„œ λ¬Έμžμ—΄μ˜ 길이λ₯Ό μ•Œλ €μ€€λ‹€.
β€’
LTRIM / RTRIM / TRIM(λ¬Έμžμ—΄, μ§€μ •λ¬Έμž)
β—¦
μ™Όμͺ½ / 였λ₯Έμͺ½ / μ „λΆ€ μ—μ„œ μ§€μ •λœ 문자λ₯Ό μ‚­μ œν•œλ‹€.
β—¦
μ§€μ •λ¬Έμžκ°€ μ—†μœΌλ©΄ 곡백 μ‚­μ œ
λ‚ μ§œν˜• ν•¨μˆ˜
β€’
SYSDATE
였늘의 λ‚ μ§œλ₯Ό λ‚ μ§œ νƒ€μž…μœΌλ‘œ μ•Œλ €μ€€λ‹€.
β€’
EXTRACT(YEAR FROM SYSDATE)
λ‚ μ§œμ—μ„œ λ…„, μ›”, 일을 μ‘°νšŒν•œλ‹€.
μˆ«μžν˜• ν•¨μˆ˜
ABS(숫자)
μ ˆλŒ“κ°’
CEIL/CEILING(숫자)
올림
SIGN(숫자)
μ–‘μˆ˜, 음수, 0 ꡬ별
FLOOR(숫자)
λ‚΄λ¦Ό
MOD(숫자1, 숫자2)
숫자1을 숫자2둜 λ‚˜λˆ„μ–΄ λ‚˜λ¨Έμ§€λ₯Ό κ³„μ‚°ν•œλ‹€. (= %)
ROUND(숫자, M)
μ†Œμˆ˜μ  M μžλ¦¬μ—μ„œ 반올림
TRUNC(숫자, M)
μ†Œμˆ˜μ  M μžλ¦¬μ—μ„œ μ‚­
DECODE 와 CASE
β€’
DECODE (= IF)
DECODE ('칼럼', 'κ°’', 'μ°ΈμΌλ•Œ λ°˜ν™˜ν•  κ°’', 'κ±°μ§“μΌλ•Œ λ°˜ν™˜ν•  κ°’')
SQL
볡사
β€’
CASE (= IF ~THEN ~ELSE-END)
CASE [EXPRESSION] WHEN CONDITION_1 THEN RESULT_1 WHEN CONDITION_2 THEN RESULT_2 ... WHEN CONDITION_N THEN RESULT_N ELSE RESULT END
SQL
볡사
ROWNUM κ³Ό ROWID
β€’
ROWNUM
// ν•œ 행을 쑰회 SELECT * FROM EMP WHERE ROWNUM <= 1; // κ·Έ μ΄μƒμ˜ 행을 μ‘°νšŒν•˜κΈ° μœ„ν•΄μ„œλŠ” 인라인뷰λ₯Ό μ‚¬μš©ν•˜κ³  별칭을 μ‚¬μš©ν•΄μ•Ό ν•œλ‹€. // 인라인 λ·° : FROM μ ˆμ— SELECT 문을 μ‚¬μš©ν•˜λŠ” 경우λ₯Ό λ§ν•œλ‹€. // SQLSERVER μ—μ„œλŠ” TOP 을 μ‚¬μš©ν•˜κ³ , MYSQL μ—μ„œλŠ” LIMIT 을 μ‚¬μš©ν•œλ‹€. SELECT * FROM ( SELECT ROWNUM LIST, ENAME FROM EMP ) WHERE LIST <= 5;
SQL
볡사
β€’
ROWID
β—¦
ORACLE λ°μ΄ν„°λ² μ΄μŠ€ λ‚΄μ• μ„œ 데이터λ₯Ό ꡬ뢄할 수 μžˆλŠ” μœ μΌν•œ 값이닀.
β—¦
SELECT 문으둜 확인할 수 μžˆλ‹€.
β—¦
데이터가 μ–΄λ–€ 데이터 파일, μ–΄λŠ 블둝에 μ €μž₯λ˜μ–΄ μžˆλŠ” 지 μ•Œ 수 μžˆλ‹€.
WITH
β€’
μ„œλΈŒμΏΌλ¦¬λ₯Ό μ‚¬μš©ν•΄μ„œ μž„μ‹œ ν…Œμ΄λΈ”μ΄λ‚˜ 뷰처럼 μ‚¬μš©ν•  수 μžˆλŠ” ꡬ문이닀.
β€’
별칭을 지정할 수 μžˆλ‹€.
β€’
μ˜΅ν‹°λ§ˆμ΄μ €λŠ” μΈλΌμΈλ·°λ‚˜ μž„μ‹œ ν…Œμ΄λΈ”λ‘œ νŒλ‹¨ν•œλ‹€.
WITH W_EMP AS ( SELECT * FROM EMP WHERE DEPTNO = 30 ); SELECT * FROM W_EMP;
SQL
볡사

DCL

DCL
β€’
데이터 베이슀 μ‚¬μš©μžμ—κ²Œ κΆŒν•œμ„ λΆ€μ—¬ν•˜κ±°λ‚˜ νšŒμˆ˜ν•œλ‹€
β€’
GRANT, REVOKE 문이 μžˆλ‹€.
β€’
DCL β†’ DDL β†’ DML, TCL
GRANT
GRANT 'PRIVILEGES' ON 'ν…Œμ΄λΈ”λͺ…' TO 'λ°μ΄ν„°λ² μ΄μŠ€μ‚¬μš©μž';
SQL
볡사
β€’
κΆŒν•œμ’…λ₯˜
SELECT, INSERT, UPDATE, DELETE, REFERENCES, ALTER, INDEX, ALL
β€’
WITH GRANT OPTION
β—¦
νŠΉμ • μ‚¬μš©μžμ—κ²Œ κΆŒν•œμ„ λΆ€μ—¬ν•  수 μžˆλŠ” κΆŒν•œμ„ γ„ΉλΆ€μ—¬ν•œλ‹€.
β—¦
A β†’ B β†’ C κΆŒν•œ μ·¨μ†Œν•˜λ©΄ λͺ¨λ“  κΆŒν•œμ΄ νšŒμˆ˜λœλ‹€.
β€’
WITH ADMIN OPTION
β—¦
ν…Œμ΄λΈ”μ— λŒ€ν•œ λͺ¨λ“  κΆŒν•œμ„ λΆ€μ—¬ν•œλ‹€
β—¦
A β†’ B β†’ C κΆŒν•œ μ·¨μ†Œν•˜λ©΄ B μ‚¬μš©μž κΆŒν•œλ§Œ μ·¨μ†Œ
REVOKE
REVOKE 'PRIVILEGES' ON 'ν…Œμ΄λΈ”λͺ…' FROM 'λ°μ΄ν„°λ² μ΄μŠ€μ‚¬μš©μž';
SQL
볡사

TCL

TCL
β€’
νŠΈλ Œμž­μ…˜μ„ μ œμ–΄ν•˜λŠ” λͺ…령어이닀.
β€’
COMMIT, ROLLBACK, SAVEPOINT 문이 μžˆλ‹€.
νŠΈλžœμž­μ…˜μ˜ νŠΉμ„±
β€’
μ›μžμ„±
β—¦
μ—°μ‚°μ˜ μ „λΆ€κ°€ μ‹€ν–‰λ˜κ±°λ‚˜ μ „ν˜€ μ‹€ν–‰λ˜μ§€ μ•Šμ•„μ•Ό ν•œλ‹€.
β—¦
νŠΈλžœμž­μ…˜μ˜ μ²˜λ¦¬κ°€ μ™„μ „νžˆ λλ‚˜μ§€ μ•Šμ•˜μ„ κ²½μš°λŠ” μ‹€ν–‰λ˜μ§€ μ•Šμ€ μƒνƒœμ™€ 같아야함
β€’
일관성
β—¦
νŠΈλžœμž­μ…˜ μ‹€ν–‰ 결과둜 λ°μ΄ν„°λ² μ΄μŠ€μ˜ μƒνƒœκ°€ λͺ¨μˆœλ˜μ§€ μ•Šμ•„μ•Ό ν•œλ‹€.
β—¦
νŠΈλžœμž­μ…˜ μ‹€ν–‰ 후에도 일관성이 μœ μ§€λ˜μ–΄μ•Ό ν•œλ‹€.
β€’
고립성
β—¦
νŠΈλžœμž­μ…˜ μ‹€ν–‰ 쀑에 μƒμ„±ν•˜λŠ” μ—°μ‚°μ˜ μ€‘κ°„κ²°κ³ΌλŠ” λ‹€λ₯Έ νŠΈλžœμž­μ…˜μ΄ μ ‘κ·Όν•  수 μ—†λ‹€.
β—¦
즉, 뢀뢄적인 μ‹€ν–‰ κ²°κ³Όλ₯Ό λ‹€λ₯Έ νŠΈλžœμž­μ…˜μ΄ λ³Ό 수 μ—†λ‹€.
β€’
μ˜μ†μ„±
νŠΈλžœμž­μ…˜μ΄ κ·Έ 싀행을 μ„±κ³΅μ μœΌλ‘œ μ™„λ£Œν•˜λ©΄ κ·Έ κ²°κ³ΌλŠ” 영ꡬ적 보μž₯이 λ˜μ–΄μ•Ό ν•œλ‹€.

TCL

COMMIT
β€’
λ³€κ²½ 이전 λ°μ΄ν„°λŠ” COMMIT 을 ν•˜λ©΄ μžƒμ–΄λ²„λ¦°λ‹€.
β€’
λ‹€λ₯Έ λͺ¨λ“  λ°μ΄ν„°λ² μ΄μŠ€ μ‚¬μš©μžλŠ” λ³€κ²½λœ ν…Œμ΄λΈ”μ„ λ³Ό 수 μžˆλ‹€.
β€’
COMMIT 이 μ™„λ£Œλ˜λ©΄ LOCK 이 ν•΄μ œλ˜κ³ , λ³€κ²½λœ 데이터λ₯Ό μ‘°μž‘ν•  수 μžˆλ‹€.
β€’
COMMIT 을 μ‹€ν–‰ν•˜λ©΄ ν•˜λ‚˜μ˜ νŠΈλžœμž­μ…˜ 과정을 μ’…λ£Œν•œλ‹€.
ROLLBACK
β€’
데이터에 λŒ€ν•œ λ³€κ²½ μ‚¬μš©λ₯Ό λͺ¨λ‘ μ·¨μ†Œν•˜κ³  νŠΈλžœμž­μ…˜μ„ μ’…λ£Œν•œλ‹€. 단, 이전에 COMMIT ν•œ κ³³ κΉŒμ§€λ§Œ λ³΅κ΅¬ν•œλ‹€.
β€’
ROLLBACK 을 μ‹€ν–‰ν•˜λ©΄ LOCK 이 ν•΄μ œλ˜κ³ , 데이터λ₯Ό μ‘°μž‘ν•  수 μžˆλ‹€.
β€’
SAVEPOINT 와 관계없이 λ°μ΄ν„°μ˜ λͺ¨λ“  변경사항을 μ €μž₯ν•˜μ§€ μ•ŠλŠ”λ‹€.
SAVEPOINT
β€’
νŠΈλžœμž­μ…˜μ„ μž‘κ²Œ λΆ„ν• ν•˜μ—¬ κ΄€λ¦¬ν•˜λŠ” 것이닀.
β€’
SAVEPOINT 지정 : SAVEPOINT <SAVEPOINT λͺ…>
β€’
SAVEPOINT λ‘€λ°± : ROLLBACK TO <SAVEPOINT λͺ…>