λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

DB

7μž₯ λ°μ΄ν„°λ² μ΄μŠ€ μ–Έμ–΄ SQL

 

 

reference: λ°μ΄ν„°λ² μ΄μŠ€ 개둠 2판


01 SQL의 μ†Œκ°œ

01-1 의미

  • 관계 λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό μœ„ν•œ ν‘œμ€€ μ§ˆμ˜μ–΄
  • λΉ„μ ˆμ°¨μ  λ°μ΄ν„° μ–Έμ–΄

01-2 λ°œμ „ 역사

  • SEQUEL(Structured English QUEry Language)μ—μ„œ 유래
    • SEQUEL : μ—°κ΅¬μš© 관계 λ°μ΄ν„°λ² μ΄μŠ€ 관리 μ‹œμŠ€ν…œμΈ SYSTEM R을 μœ„ν•œ μ–Έμ–΄
  • λ―Έκ΅­ ν‘œμ€€ μ—°κ΅¬μ†ŒμΈ ANSI와 ꡭ제 ν‘œμ€€ν™” 기ꡬ인 ISOμ—μ„œ ν‘œμ€€ν™” μž‘μ—…μ„ 진행, 계속 μˆ˜μ • 및 λ³΄μ™„λ˜κ³  있음

01-3 μ‚¬μš© 방식

  • λŒ€ν™”μ‹ SQL : λ°μ΄ν„°λ² μ΄μŠ€ 관리 μ‹œμŠ€ν…œ(DBMS - μˆ˜μ—…μ—μ„œλŠ” mssql)에 직접 μ ‘κ·Όν•΄ 질의λ₯Ό μž‘μ„±ν•˜μ—¬ μ‹€ν–‰
  • μ‚½μž… SQL : ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄λ‘œ μž‘μ„±λœ μ‘μš© ν”„λ‘œκ·Έλž¨μ— μ‚½μž…

01-4. λΆ„λ₯˜

데이터 μ •μ˜μ–΄(DDL): ν…Œμ΄λΈ”μ„ μƒμ„±ν•˜κ³  λ³€κ²½, μ œκ±°ν•˜λŠ” κΈ°λŠ₯을 제곡

데이터 μ‘°μž‘μ–΄(DML): ν…Œμ΄λΈ”μ— μƒˆ 데이터λ₯Ό μ‚½μž…ν•˜κ±°λ‚˜, ν…Œμ΄λΈ”μ— μ €μž₯된 데이터λ₯Ό μˆ˜μ •, μ‚­μ œ,검색 ν•˜λŠ” κΈ°λŠ₯을 제곡

데이터 μ œμ–΄μ–΄(DCL): λ³΄μ•ˆμ„ μœ„ν•΄ 데이터에 λŒ€ν•œ μ ‘κ·Ό 및 μ‚¬μš© κΆŒν•œμ„ μ‚¬μš©μžλ³„λ‘œ λΆ€μ—¬ν•˜κ±°λ‚˜ μ·¨μ†Œ ν•˜λŠ” κΈ°λŠ₯을 제곡

 

02 SQL을 μ΄μš©ν•œ 데이터 μ •μ˜

02-1. ν…Œμ΄λΈ” 생성

CREATE TABLE ν…Œμ΄λΈ”μ΄λ¦„ (
    β‘  속성이름 λ°μ΄ν„°νƒ€μž… [NOT NULL] [DEFAULT κΈ°λ³Έκ°’]
    β‘‘ [PRIMARY KEY (μ†μ„±λ¦¬μŠ€νŠΈ)]
    β‘’ [UNIQUE (μ†μ„±λ¦¬μŠ€νŠΈ)]
    β‘£ [FOREIGN KEY (μ†μ„±λ¦¬μŠ€νŠΈ) REFERENCES ν…Œμ΄λΈ”μ΄λ¦„(μ†μ„±λ¦¬μŠ€νŠΈ)] [ON DELETE 옡μ…₯] [ON UPDATE μ˜΅μ…˜]
    β‘€ [CONSTRAIN 이름] [CHECK(쑰건)]
)

CREATE TABLE λ¬Έ

  • [ ]의 λ‚΄μš©μ€ μƒλž΅μ΄ κ°€λŠ₯
  • SQL μ§ˆμ˜λ¬Έμ€ μ„Έλ―Έμ½œλ‘ (;)으둜 λ¬Έμž₯의 끝을 ν‘œμ‹œ
  • SQL μ§ˆμ˜λ¬Έμ€ λŒ€μ†Œλ¬Έμžλ₯Ό κ΅¬λΆ„ν•˜μ§€ μ•ŠμŒ
  • β‘  : ν…Œμ΄λΈ”μ„ κ΅¬μ„±ν•˜λŠ” 각 μ†μ„±μ˜ 이름, 데이터 νƒ€μž…, κΈ°λ³Έ μ œμ•½ 사항 μ •μ˜
  • β‘‘ : κΈ°λ³Έν‚€ μ •μ˜
  • β‘’ : λŒ€μ²΄ν‚€ μ •μ˜
  • β‘£ : μ™Έλž˜ν‚€ μ •μ˜
  • β‘€ : 데이터 무결성을 μœ„ν•œ μ œμ•½μ‘°κ±΄ μ •μ˜

μ†μ„±μ˜ μ •μ˜

  • ν…Œμ΄λΈ”μ„ κ΅¬μ„±ν•˜λŠ” 각 μ†μ„±μ˜ 데이터 νƒ€μž…μ„ μ„ νƒν•œ λ‹€μŒ 널 κ°’ ν—ˆμš© 여뢀와 κΈ°λ³Έ κ°’ ν•„μš” μ—¬λΆ€λ₯Ό κ²°μ •
  • NOT NULL
    • 속성이 널 값을 ν—ˆμš©ν•˜μ§€ μ•ŠμŒμ„ μ˜λ―Έν•˜λŠ” ν‚€μ›Œλ“œ
    • 예) 고객아이디 VARCHAR(20) NOT NULL
  • DEFAULT
    • μ†μ„±μ˜ κΈ°λ³Έ 값을 μ§€μ •ν•˜λŠ” ν‚€μ›Œλ“œ
    • 예) μ λ¦½κΈˆ INT DEFAULT 0
    • 예) λ‹΄λ‹Ήμž VARCHAR(10) DEFAULT 'λ°©κ²½μ•„'
    • λ¬Έμžμ—΄μ΄λ‚˜ λ‚ μ§œ λ°μ΄ν„°λŠ” μž‘μ€ λ”°μ˜΄ν‘œλ‘œ λ¬Άμ–΄μ„œ ν‘œν˜„ (μž‘μ€ λ”°μ˜΄ν‘œλ‘œ 묢여진 λ¬Έμžμ—΄μ€ λŒ€μ†Œλ¬Έμžλ₯Ό ꡬ뢄함)

μ†μ„±μ˜ 데이터 νƒ€μž…

ν‚€μ˜ μ •μ˜

  • PRIMARY KEY
    • κΈ°λ³Έν‚€λ₯Ό μ§€μ •ν•˜λŠ” ν‚€μ›Œλ“œ
    • 예) PRIMARY KEY(고객아이디)
    • 예) PRIMARY KEY(주문고객, μ£Όλ¬Έμ œν’ˆ)
  • UNIQUE
    • λŒ€μ²΄ν‚€λ₯Ό μ§€μ •ν•˜λŠ” ν‚€μ›Œλ“œ
    • λŒ€μ²΄ν‚€λ‘œ μ§€μ •λ˜λŠ” μ†μ„±μ˜ 값은 μœ μΌμ„±μ„ 가지며 기본킀와 달리 널 값이 ν—ˆμš©λ¨
    • 예) UNIQUE(고객이름)
  • FOREIGN KEY
    • μ™Έλž˜ν‚€λ₯Ό μ§€μ •ν•˜λŠ” ν‚€μ›Œλ“œ
    • μ™Έλž˜ν‚€κ°€ μ–΄λ–€ ν…Œμ΄λΈ”μ˜ 무슨 속성을 μ°Έμ‘°ν•˜λŠ”μ§€ REFERENCES ν‚€μ›Œλ“œ λ‹€μŒμ— μ œμ‹œ
    • μ°Έμ‘° 무결성 μ œμ•½μ‘°κ±΄ μœ μ§€λ₯Ό μœ„ν•΄ μ°Έμ‘°λ˜λŠ” ν…Œμ΄λΈ”μ—μ„œ νˆ¬ν”Œ μ‚­μ œ μ‹œ 처리 방법을 μ§€μ •ν•˜λŠ” μ˜΅μ…˜
      • ON DELETE CASCADE: κ΄€λ ¨ νˆ¬ν”Œμ„ ν•¨κ»˜ μ‚­μ œν•¨
      • ON DELETE SET DEFAULT: κ΄€λ ¨ νˆ¬ν”Œμ˜ μ™Έλž˜ν‚€ 값을 미리 μ§€μ •ν•œ κΈ°λ³Έ κ°’μœΌλ‘œ 변경함
      • ON DELETE SET NULL: κ΄€λ ¨ νˆ¬ν”Œμ˜ μ™Έλž˜ν‚€ 값을 NULL둜 변경함
      • ON DELETE NO ACTION: νˆ¬ν”Œμ„ μ‚­μ œν•˜μ§€ λͺ»ν•˜κ²Œ 함
    • μ°Έμ‘° 무결성 μ œμ•½μ‘°κ±΄ μœ μ§€λ₯Ό μœ„ν•΄ μ°Έμ‘°λ˜λŠ” ν…Œμ΄λΈ”μ—μ„œ νˆ¬ν”Œ λ³€κ²½ μ‹œ 처리 방법을 μ§€μ •ν•˜λŠ” μ˜΅μ…˜
      • ON UPDATE CASCADE : κ΄€λ ¨ νˆ¬ν”Œμ—μ„œ μ™Έλž˜ν‚€ 값을 ν•¨κ»˜ 변경함
      • ON UPDATE SET DEFAULT : κ΄€λ ¨ νˆ¬ν”Œμ˜ μ™Έλž˜ν‚€ 값을 미리 μ§€μ •ν•œ κΈ°λ³Έ κ°’μœΌλ‘œ 변경함
      • ON UPDATE SET NULL : κ΄€λ ¨ νˆ¬ν”Œμ˜ μ™Έλž˜ν‚€ 값을 NULL둜 변경함
      • ON UPDATE NO ACTION: νˆ¬ν”Œμ„ λ³€κ²½ν•˜μ§€ λͺ»ν•˜κ²Œ 함
    • 예) FOREIGN KEY(μ†Œμ†λΆ€μ„œ) REFERENCES λΆ€μ„œ(λΆ€μ„œλ²ˆν˜Έ) ON DELETE CASCADE ON UPDATE CASCADE
    • 예) FOREIGN KEY(μ†Œμ†λΆ€μ„œ) REFERENCES λΆ€μ„œ(λΆ€μ„œλ²ˆν˜Έ)

데이터 무결성 μ œμ•½μ‘°κ±΄μ˜ μ •μ˜

  • CHECK
    • ν…Œμ΄λΈ”μ— μ •ν™•ν•˜κ³  μœ νš¨ν•œ 데이터λ₯Ό μœ μ§€ν•˜κΈ° μœ„ν•΄ νŠΉμ • 속성에 λŒ€ν•œ μ œμ•½μ‘°κ±΄μ„ 지정
    • CONSTRAINT ν‚€μ›Œλ“œμ™€ ν•¨κ»˜ 고유의 이름을 λΆ€μ—¬ν•  μˆ˜λ„ 있음
    • 예) CHECK(μž¬κ³ λŸ‰ >= 0 AND μž¬κ³ λŸ‰ <= 10000)
    • 예) CONSTRAINT CHK_CPY CHECK(μ œμ‘°μ—…μ²΄ = ‘ν•œλΉ›μ œκ³Ό’)

02-2. ν…Œμ΄λΈ” λ³€κ²½

μƒˆλ‘œμš΄ 속성 μΆ”κ°€

ALTER TABLE table_name
ADD 속성이름 λ°μ΄ν„°νƒ€μž… [NOT NULL] [DEFAULT κΈ°λ³Έκ°’];
예제: 'customer' ν…Œμ΄λΈ”μ— 'κ°€μž…λ‚ μ§œ' 속성을 μΆ”κ°€ν•΄λ³΄μž
ALTER TABLE customer 
ADD κ°€μž…λ‚ μ§œ DATE;

κΈ°μ‘΄ 속성 μ‚­μ œ

ALTER TABLE table_name
DROP COLUMN 속성이름;

λ§Œμ•½ μ‚­μ œν•  속성과 κ΄€λ ¨λœ μ œμ•½ 쑰건이 μ‘΄μž¬ν•œλ‹€λ©΄?

  • 속성 μ‚­μ œκ°€ μˆ˜ν–‰λ˜μ§€ μ•ŠμŒ
  • κ΄€λ ¨λœ μ œμ•½ 쑰건을 λ¨Όμ € μ‚­μ œν•΄μ•Ό 함
예제: 'customer' ν…Œμ΄λΈ”μ— 'κ°€μž…λ‚ μ§œ' 속성을 μ‚­μ œν•΄λ³΄μž
ALTER TABLE customer 
DROP COLUMN κ°€μž…λ‚ μ§œ;

μƒˆλ‘œμš΄ μ œμ•½ 쑰건의 μΆ”κ°€

ALTER TABLE table_name
ADD CONSTRAINT μ œμ•½μ‘°κ±΄μ΄λ¦„ μ œμ•½μ‘°κ±΄λ‚΄μš©;
예제: 'customer' ν…Œμ΄λΈ”μ— `20μ„Έ μ΄μƒμ˜ 고객만 κ°€μž…ν•  수 μžˆλ‹€`λŠ” 데이터 무결성 μ œμ•½μ‘°κ±΄μ„ μΆ”κ°€ν•΄λ³΄μž
ALTER TABLE customer
ADD CONSTRAINT check_age CHECK(20<=age);

κΈ°μ‘΄ μ œμ•½ 쑰건의 μ‚­μ œ

ALTER TABLE table_name
DROP CONSTRAINT μ œμ•½μ‘°κ±΄μ΄λ¦„;
예제: 'customer' ν…Œμ΄λΈ”μ—μ„œ μœ„μ—μ„œ μΆ”κ°€ν–ˆλ˜ 데이터 무결성 μ œμ•½μ‘°κ±΄μ„ μ‚­μ œν•΄λ³΄μž
ALTER TABLE customer
DROP CONSTRAINT check_age;

02-3. ν…Œμ΄λΈ” μ‚­μ œ

DROP TABLE ν…Œμ΄λΈ”μ΄λ¦„;

λ§Œμ•½ μ‚­μ œν•  ν…Œμ΄λΈ”μ„ μ°Έμ‘°ν•˜λŠ” ν…Œμ΄λΈ”μ΄ μžˆλ‹€λ©΄?

  • ν…Œμ΄λΈ” μ‚­μ œκ°€ μˆ˜ν–‰λ˜μ§€ μ•ŠμŒ.
  • κ΄€λ ¨λœ μ™Έλž˜ν‚€ μ œμ•½μ‘°κ±΄μ„ λ¨Όμ € μ‚­μ œν•΄μ•Ό 함.

예제: 'customer' ν…Œμ΄λΈ”μ„ μ‚­μ œν•΄λ³΄μž 

DROP TABLE customer;

03 SQL을 μ΄μš©ν•œ 데이터 μ‘°μž‘

03-1 데이터 검색

검색 κ²°κ³ΌλŠ” ν…Œμ΄λΈ” ν˜•νƒœλ‘œ λ°˜ν™˜λœλ‹€.

SELECT [ ALL | DISTINCT ] μ†μ„±λ¦¬μŠ€νŠΈ
FROM ν…Œμ΄λΈ”λ¦¬μŠ€νŠΈ
[ WHERE 쑰건 ]
[ GROUP BY μ†μ„±λ¦¬μŠ€νŠΈ [ HAVING 쑰건 ] ]
[ ORDER BY μ†μ„±λ¦¬μŠ€νŠΈ [ ASC | DESC ] ];

ALL | DISTINCT

  • ALL: κ²°κ³Ό ν…Œμ΄λΈ”μ΄ νˆ¬ν”Œμ˜ 쀑볡을 ν—ˆμš©ν•˜λ„λ‘ 지정, μƒλž΅ κ°€λŠ₯ 
  • DISTINCT: κ²°κ³Ό ν…Œμ΄λΈ”μ΄ νˆ¬ν”Œμ˜ 쀑볡을 ν—ˆμš©ν•˜μ§€ μ•Šλ„λ‘ 지정
    • SELECT DISTINCT μ œμ‘°μ—…μ²΄ FROM μ œν’ˆ
  • λͺ¨λ“  속성을 검색할 λ•ŒλŠ” λͺ¨λ“  μ†μ„±μ˜ 이름을 λ‚˜μ—΄ν•˜μ§€ μ•Šκ³  * μ‚¬μš© κ°€λŠ₯
    • SELECT * FROM μ œν’ˆ

AS

AS ν‚€μ›Œλ“œλŠ” μƒλž΅ κ°€λŠ₯

  • μƒˆλ‘œμš΄ 이름에 곡백이 ν¬ν•¨λ˜μ–΄ 있으면 ν°λ”°μ˜΄ν‘œλ‚˜ μž‘μ€λ”°μ˜΄ν‘œλ‘œ λ¬Άμ–΄μ£Όμ–΄μ•Ό 함
  • μ˜€λΌν΄μ—μ„œλŠ” ν°λ”°μ˜΄ν‘œ, MS SQL μ„œλ²„μ—μ„œλŠ” μž‘μ€λ”°μ˜΄ν‘œ μ‚¬μš©
  • AS ν‚€μ›Œλ“œλ₯Ό μ΄μš©ν•΄ κ²°κ³Ό ν…Œμ΄λΈ”μ—μ„œ μ†μ„±μ˜ 이름을 λ°”κΎΈμ–΄ 좜λ ₯ κ°€λŠ₯
  • SELECT μ œν’ˆλͺ…, 단가 AS 가격 FROM μ œν’ˆ

μ‚°μˆ μ‹ μ‚¬μš© κ°€λŠ₯

  • μ‚°μˆ μ‹: μ†μ„±μ˜ 이름과 +, -, *, / λ“±μ˜ μ‚°μˆ  μ—°μ‚°μžμ™€ μƒμˆ˜λ‘œ ꡬ성
  • μ†μ„±μ˜ 값이 μ‹€μ œλ‘œ λ³€κ²½λ˜λŠ” 것은 μ•„λ‹ˆκ³  κ²°κ³Ό ν…Œμ΄λΈ”μ—μ„œλ§Œ κ³„μ‚°λœ κ²°κ³Ό 값이 좜λ ₯됨
  • SELECT μ œν’ˆλͺ…, 단가 + 500 AS "μ‘°μ • 단가" FROM μ œν’ˆ

WHERE μ‘°κ±΄ 검색

  • 쑰건을 λ§Œμ‘±ν•˜λŠ” λ°μ΄ν„°λ§Œ 검색
  • WHERE ν‚€μ›Œλ“œμ™€ ν•¨κ»˜ 비ꡐ μ—°μ‚°μžμ™€ 논리 μ—°μ‚°μžλ₯Ό μ΄μš©ν•œ 검색 쑰건 μ œμ‹œ
      • 숫자뿐만 μ•„λ‹ˆλΌ λ¬Έμžλ‚˜ λ‚ μ§œ 값을 λΉ„κ΅ν•˜λŠ” 것도 κ°€λŠ₯
        • 예) 'A' < 'C'
        • 예) '2019-12-01' < '2019-12-02'
      • μ‘°κ±΄μ—μ„œ λ¬Έμžλ‚˜ λ‚ μ§œ 값은 μž‘μ€λ”°μ˜΄ν‘œλ‘œ λ¬Άμ–΄μ„œ ν‘œν˜„
      • 비ꡐ μ—°μ‚°μž
      •  
    • 논리 μ—°μ‚°μž
    • LIKE
    • NULL
      • IS NULL ν‚€μ›Œλ“œλ₯Ό μ΄μš©ν•΄ νŠΉμ • μ†μ„±μ˜ 값이 널 값인지λ₯Ό 비ꡐ
      • IS NOT NULL ν‚€μ›Œλ“œλ₯Ό μ΄μš©ν•΄ νŠΉμ • μ†μ„±μ˜ 값이 널 값이 μ•„λ‹Œμ§€λ₯Ό 비ꡐ
      • 검색 μ‘°κ±΄μ—μ„œ 널 값은 λ‹€λ₯Έ κ°’κ³Ό 크기λ₯Ό λΉ„κ΅ν•˜λ©΄ κ²°κ³Όκ°€ λͺ¨λ‘ 거짓이 됨
  • SELECT μ œν’ˆλͺ…, μž¬κ³ λŸ‰, 단가
    FROM μ œν’ˆ
    WHERE μ œμ‘°μ—…μ²΄ = 'ν•œλΉ›μ œκ³Ό';
    
    SELECT μ£Όλ¬Έμ œν’ˆ, μˆ˜λŸ‰, 주문일자
    FROM μ£Όλ¬Έ
    WHERE 주문고객 = 'apple' AND μˆ˜λŸ‰ >= 15;
    
    SELECT 고객이름, λ‚˜μ΄, λ“±κΈ‰, 적립금
    FROM 고객
    WHERE 고객이름 LIKE 'κΉ€%';
    WHERE 고객이름 LIKE '_____';
    
    SELECT 고객이름
    FROM 고객
    WHERE λ‚˜μ΄ IS NULL;
    WHERE λ‚˜μ΄ IS NOT NULL;

ORDER BY μ •λ ¬ 검색

  • ORDER BY ν‚€μ›Œλ“œλ₯Ό μ΄μš©ν•΄ κ²°κ³Ό ν…Œμ΄λΈ” λ‚΄μš©μ„ μ‚¬μš©μžκ°€ μ›ν•˜λŠ” μˆœμ„œλ‘œ 좜λ ₯
  • ORDER BY ν‚€μ›Œλ“œμ™€ ν•¨κ»˜ μ •λ ¬ 기쀀이 λ˜λŠ” 속성과 μ •λ ¬ 방식을 지정
    • μ˜€λ¦„μ°¨μˆœ(κΈ°λ³Έ): ASC / λ‚΄λ¦Όμ°¨μˆœ: DESC
    • 널 값은 μ˜€λ¦„μ°¨μˆœμ—μ„œλŠ” 맨 λ§ˆμ§€λ§‰μ— 좜λ ₯되고, λ‚΄λ¦Όμ°¨μˆœμ—μ„œλŠ” 맨 λ¨Όμ € 좜λ ₯됨
    • μ—¬λŸ¬ 기쀀에 따라 μ •λ ¬ν•˜λ €λ©΄ μ •λ ¬ 기쀀이 λ˜λŠ” 속성을 μ°¨λ‘€λŒ€λ‘œ μ œμ‹œ
  • SELECT 고객이름, λ“±κΈ‰, λ‚˜μ΄ FROM 고객 ORDER BY λ‚˜μ΄ DESC;

집계 ν•¨μˆ˜ (aggregate function)

  • νŠΉμ • 속성 값을 ν†΅κ³„μ μœΌλ‘œ κ³„μ‚°ν•œ κ²°κ³Όλ₯Ό κ²€μƒ‰ν•˜κΈ° μœ„ν•΄ 집계 ν•¨μˆ˜λ₯Ό 이용
    • 집계 ν•¨μˆ˜: μ—΄ ν•¨μˆ˜(column function)라고도 함. κ°œμˆ˜, 합계, 평균, μ΅œλŒ“κ°’, μ΅œμ†Ÿκ°’μ˜ 계산 κΈ°λŠ₯을 제곡
  • 집계 ν•¨μˆ˜ μ‚¬μš© μ‹œ 주의 사항
    • 집계 ν•¨μˆ˜λŠ” λ„μΈ 속성 값은 μ œμ™Έν•˜κ³  계산함
    • 집계 ν•¨μˆ˜λŠ” WHERE μ ˆμ—μ„œλŠ” μ‚¬μš©ν•  수 μ—†κ³ , SELECT μ ˆμ΄λ‚˜ HAVING μ ˆμ—μ„œλ§Œ μ‚¬μš© κ°€λŠ₯

  • SELECT COUNT(λ‚˜μ΄) AS 고객수 FROM 고객;
    SELECT COUNT(*) AS 고객수 FROM 고객; 
    -- μ •ν™•ν•œ 개수λ₯Ό κ³„μ‚°ν•˜κΈ° μœ„ν•΄μ„œλŠ” 보톡 κΈ°λ³Έν‚€ μ†μ„±μ΄λ‚˜ *λ₯Ό 주둜 이용
    SELECT COUNT(DISTINCT μ œμ‘°μ—…μ²΄) AS "μ œμ‘°μ—…μ²΄ 수" FROM μ œν’ˆ;
    -- DISTINCT ν‚€μ›Œλ“œλ₯Ό μ΄μš©ν•΄ 쀑볡을 μ—†μ• κ³  μ„œλ‘œ λ‹€λ₯Έ μ œμ‘°μ—…μ²΄μ˜ 개수만 계산

GROUP BY κ·Έλ£Ήλ³„ 검색

  • GROUP BY ν‚€μ›Œλ“œλ₯Ό μ΄μš©ν•΄ νŠΉμ • μ†μ„±μ˜ 값이 같은 νˆ¬ν”Œμ„ λͺ¨μ•„ 그룹을 λ§Œλ“€κ³ , κ·Έλ£Ήλ³„λ‘œ 검색
    • GROUP BY ν‚€μ›Œλ“œμ™€ ν•¨κ»˜ 그룹을 λ‚˜λˆ„λŠ” 기쀀이 λ˜λŠ” 속성을 지정
  • HAVING ν‚€μ›Œλ“œλ₯Ό ν•¨κ»˜ μ΄μš©ν•΄ 그룹에 λŒ€ν•œ 쑰건을 μž‘μ„±
  • 그룹을 λ‚˜λˆ„λŠ” 기쀀이 λ˜λŠ” 속성을 SELECT μ ˆμ—λ„ μž‘μ„±ν•˜λŠ” 것이 μ’‹μŒ
  • 집계 ν•¨μˆ˜λ‚˜ GROUP BY μ ˆμ— λͺ…μ‹œλœ 속성 μ™Έμ˜ 속성은 SELECT μ ˆμ— μž‘μ„± λΆˆκ°€
  • Q. μ œν’ˆ ν…Œμ΄λΈ”μ—μ„œ μ œν’ˆμ„ 3개 이상 μ œμ‘°ν•œ μ œμ‘°μ—…μ²΄λ³„λ‘œ μ œν’ˆμ˜ κ°œμˆ˜μ™€, μ œν’ˆ 쀑 κ°€μž₯ λΉ„μ‹Ό 단가λ₯Ό 검색
    
    SELECT μ œμ‘°μ—…μ²΄, COUNT(*) AS μ œν’ˆμˆ˜, MAX(단가) AS μ΅œκ³ κ°€
    FROM μ œν’ˆ
    GROUP BY μ œμ‘°μ—…μ²΄ HAVING COUNT(*) >= 3;
    -- 집계 ν•¨μˆ˜λ₯Ό μ΄μš©ν•œ 쑰건은 WHERE μ ˆμ—λŠ” μž‘μ„±ν•  수 μ—†κ³  HAVING μ ˆμ—μ„œ μž‘μ„±

μ—¬λŸ¬ ν…Œμ΄λΈ”μ— λŒ€ν•œ μ‘°μΈ κ²€μƒ‰

  • 쑰인 검색: μ—¬λŸ¬ 개의 ν…Œμ΄λΈ”μ„ μ—°κ²°ν•˜μ—¬ λ°μ΄ν„°λ₯Ό κ²€μƒ‰ν•˜λŠ” 것
  • 쑰인 속성: 쑰인 검색을 μœ„ν•΄ ν…Œμ΄λΈ”μ„ μ—°κ²°ν•΄μ£ΌλŠ” 속성
    • μ—°κ²°ν•˜λ €λŠ” ν…Œμ΄λΈ” 간에 쑰인 μ†μ„±μ˜ 이름은 달라도 λ˜μ§€λ§Œ 도메인은 κ°™μ•„μ•Ό 함
    • 일반적으둜 μ™Έλž˜ν‚€λ₯Ό 쑰인 μ†μ„±μœΌλ‘œ μ΄μš©ν•¨
  • FROM μ ˆμ— 검색에 ν•„μš”ν•œ λͺ¨λ“  ν…Œμ΄λΈ”μ„ λ‚˜μ—΄
  • WHERE μ ˆμ— 쑰인 μ†μ„±μ˜ 값이 κ°™μ•„μ•Ό 함을 μ˜λ―Έν•˜λŠ” 쑰인 쑰건을 μ œμ‹œ
  • 같은 μ΄λ¦„μ˜ 속성이 μ„œλ‘œ λ‹€λ₯Έ ν…Œμ΄λΈ”μ— μ‘΄μž¬ν•  수 있기 λ•Œλ¬Έμ— 속성 이름 μ•žμ— ν•΄λ‹Ή 속성이 μ†Œμ†λœ ν…Œμ΄λΈ”μ˜ 이름을 ν‘œμ‹œ 예) μ£Όλ¬Έ.주문고객
SELECT μ£Όλ¬Έμ œν’ˆ, 주문일자 -- 이름이 같은 속성이 μ—†λ‹€λ©΄ ν…Œμ΄λΈ” 이름 없이 속성 μ΄λ¦„μœΌλ‘œλ§Œ μž‘μ„±ν•΄λ„ 됨
FROM μ œν’ˆ p , μ£Όλ¬Έ o
WHERE o.주문고개 = 'banana' AND o.μ œν’ˆλ²ˆν˜Έ = p.μ£Όλ¬Έμ œν’ˆ;
-- ν…Œμ΄λΈ”μ˜ 이름을 λŒ€μ‹ ν•˜λŠ” λ‹¨μˆœν•œ 별λͺ…을 μ œμ‹œν•˜μ—¬ μ§ˆμ˜λ¬Έμ„ μž‘μ„±ν•˜λŠ” 것도 μ’‹λ‹€.

-- μ—¬λŸ¬ ν…Œμ΄λΈ”μ— λŒ€ν•œ 쑰인 검색
SELECT μ œν’ˆ, μ œν’ˆλͺ…
FROM 고객, μ œν’ˆ , μ£Όλ¬Έ
WHERE 고객.고객이름 = 'κ³ λͺ…석' AND 고객.고객아이디 = μ£Όλ¬Έ.주문고객 AND μ œν’ˆ.μ œν’ˆλ²ˆν˜Έ = μ£Όλ¬Έ.μ£Όλ¬Έμ œν’ˆ;

뢀속 μ§ˆμ˜λ¬Έμ„ μ΄μš©ν•œ 검색

  • SELECT λ¬Έ μ•ˆμ— 또 λ‹€λ₯Έ SELECT 문을 ν¬ν•¨ν•˜λŠ” 질의
    • μƒμœ„ 질의문(μ£Ό 질의문): λ‹€λ₯Έ SELECT 문을 ν¬ν•¨ν•˜λŠ” SELECT λ¬Έ
    • 뢀속 질의문(μ„œλΈŒ 질의문): λ‹€λ₯Έ SELECT λ¬Έ μ•ˆμ— λ“€μ–΄ μžˆλŠ” SELECT λ¬Έ
      • κ΄„ν˜Έλ‘œ λ¬Άμ–΄μ„œ μž‘μ„±, ORDER BY μ ˆμ„ μ‚¬μš©ν•  수 μ—†μŒ
      • 단일 ν–‰ 뢀속 질의문: ν•˜λ‚˜μ˜ 행을 결과둜 λ°˜ν™˜
      • 닀쀑 ν–‰ 뢀속 질의문: ν•˜λ‚˜ μ΄μƒμ˜ 행을 결과둜 λ°˜ν™˜
  • 뢀속 μ§ˆμ˜λ¬Έμ„ λ¨Όμ € μˆ˜ν–‰ν•˜κ³ , κ·Έ κ²°κ³Όλ₯Ό μ΄μš©ν•΄ μƒμœ„ μ§ˆμ˜λ¬Έμ„ μˆ˜ν–‰
  • 뢀속 질의문과 μƒμœ„ μ§ˆμ˜λ¬Έμ„ μ—°κ²°ν•˜λŠ” μ—°μ‚°μžκ°€ ν•„μš”
    • 단일 ν–‰ 뢀속 μ§ˆμ˜λ¬Έμ€ 비ꡐ μ—°μ‚°μž(=, <>, >, >=, <, <=) μ‚¬μš© κ°€λŠ₯
    • 닀쀑 ν–‰ 뢀속 μ§ˆμ˜λ¬Έμ€ 비ꡐ μ—°μ‚°μž μ‚¬μš© λΆˆκ°€, 닀쀑 ν–‰ 뢀속 μ§ˆμ˜λ¬Έμ— μ‚¬μš© κ°€λŠ₯ν•œ μ—°μ‚°μž
  • -- μ΅œλŒ€ μ λ¦½κΈˆμ€ 단일 κ°’μ΄λ―€λ‘œ 단일 ν–‰ 뢀속 질의문 (비ꡐ μ—°μ‚°μž = λ₯Ό 이용)
    SELECT 고객이름, 적립금
    FROM 고객
    WHERE 적립금 = (SELECT MAX(적립금) FROM 고객);
    
    -- 'banana' 고객이 μ£Όλ¬Έν•œ μ œν’ˆμ€ μ—¬λŸ¬ κ°œμ΄λ―€λ‘œ 닀쀑 ν–‰ 뢀속 질의문 (IN μ—°μ‚°μžλ₯Ό 이용)
    SELECT μ œν’ˆλͺ…, μ œμ‘°μ—…μ²΄
    FROM μ œν’ˆ
    WHERE μ œν’ˆλ²ˆν˜Έ IN (SELECT 주문번호 FROM μ£Όλ¬Έ WHERE 주문고객 = 'banana');
  • 1. 쑰인 질의λ₯Ό μ΄μš©ν•œ select λ¬Έ
    SELECT μ œν’ˆ.μ œν’ˆλͺ…, μ œν’ˆ.μ œμ‘°μ—…μ²΄
    FROM μ œν’ˆ, μ£Όλ¬Έ
    WHERE μ œν’ˆ.μ œν’ˆλ²ˆν˜Έ = μ£Όλ¬Έ.μ£Όλ¬Έμ œν’ˆ AND μ£Όλ¬Έ.주문고객 = 'banana';
    
    2. EXISTS μ—°μ‚°μžλ₯Ό μ΄μš©ν•œ SELECT λ¬Έ -- μ—¬κΈ°μ„œ existsλŠ” 뢀속 μ§ˆμ˜λ¬Έμ—μ„œ table을 ν•˜λ‚˜λ§Œ 씀.
    SELECT μ œν’ˆλͺ…, μ œμ‘°μ—…μ²΄
    FROM μ œν’ˆ
    WHERE EXISTS (SELECT * FROM μ£Όλ¬Έ WHERE μ œν’ˆ.μ œν’ˆλ²ˆν˜Έ = μ£Όλ¬Έ.μ£Όλ¬Έμ œν’ˆ AND μ£Όλ¬Έ.주문고객 = 'banana');
    
    3. IN μ—°μ‚°μžλ₯Ό μ΄μš©ν•œ SELECT λ¬Έ
    SELECT μ œν’ˆλͺ…, μ œμ‘°μ—…μ²΄
    FROM μ œν’ˆ
    WHERE μ œν’ˆλ²ˆν˜Έ IN (SELECT μ£Όλ¬Έμ œν’ˆ FROM μ£Όλ¬Έ WHERE 주문고객 = 'banana');

03-2 데이터 μ‚½μž…

1. 데이터 직접 μ‚½μž…

INSERT
INTO ν…Œμ΄λΈ”μ΄λ¦„ [(μ†μ„±λ¦¬μŠ€νŠΈ)]
VALUES (μ†μ„±κ°’λ¦¬μŠ€νŠΈ);
  • INTO ν‚€μ›Œλ“œμ™€ ν•¨κ»˜ νˆ¬ν”Œμ„ μ‚½μž…ν•  ν…Œμ΄λΈ”μ˜ 이름과 μ†μ„±μ˜ 이름을 λ‚˜μ—΄
    • 속성 리슀트λ₯Ό μƒλž΅ν•˜λ©΄ ν…Œμ΄λΈ”μ„ μ •μ˜ν•  λ•Œ μ§€μ •ν•œ μ†μ„±μ˜ μˆœμ„œλŒ€λ‘œ 값이 μ‚½μž…λ¨
  • VALUES ν‚€μ›Œλ“œμ™€ ν•¨κ»˜ μ‚½μž…ν•  속성 값듀을 λ‚˜μ—΄
  • INTO 절의 속성 이름과 VALUES 절의 속성 값은 μˆœμ„œλŒ€λ‘œ μΌλŒ€μΌ λŒ€μ‘λ˜μ–΄μ•Ό 함
INSERT
INTO 고객(고객아이디, 고객이름, λ‚˜μ΄, λ“±κΈ‰, 직업, 적립금)
VALUES ('strawberry', '졜유경', 30, 'vip', '곡무원', 100)

INSERT -- μœ„μ˜ 쿼리와 동일함.
INTO 고객
VALUES ('strawberry', '졜유경', 30, 'vip', '곡무원', 100)


INSERT -- λ“±κΈ‰μ—λŠ” null μ €μž₯됨
INTO 고객(고객아이디, 고객이름, λ‚˜μ΄, 직업, 적립금)
VALUES ('strawberry', '졜유경', 30, '곡무원', 100)

INSERT -- λ“±κΈ‰μ—λŠ” null μ €μž₯됨
INTO 고객
VALUES ('strawberry', '졜유경', 30, NULL, '곡무원', 100)

2. 뢀속 μ§ˆμ˜λ¬Έμ„ μ΄μš©ν•œ 데이터 μ‚½μž…

SELECT 문을 μ΄μš©ν•΄ λ‹€λ₯Έ ν…Œμ΄λΈ”μ—μ„œ κ²€μƒ‰ν•œ 데이터λ₯Ό μ‚½μž…

INSERT
INTO ν…Œμ΄λΈ”μ΄λ¦„[(μ†μ„±λ¦¬μŠ€νŠΈ)]
SELECT λ¬Έ;
Q. ν•œλΉ›μ œκ³Όμ—μ„œ μ œμ‘°ν•œ μ œν’ˆμ˜ μ œν’ˆλͺ…, μž¬κ³ λŸ‰, 단가λ₯Ό μ œν’ˆ ν…Œμ΄λΈ”μ—μ„œ κ²€μƒ‰ν•˜μ—¬ ν•œλΉ›μ œν’ˆ ν…Œμ΄λΈ”μ— μ‚½μž…
A.
INSERT
INTO ν•œλΉ›μ œν’ˆ(μ œν’ˆλͺ…, μž¬κ³ λŸ‰, 단가)
SELECT μ œν’ˆλͺ…, μž¬κ³ λŸ‰, 단가 FROM μ œν’ˆ WHERE μ œμ‘°μ—…μ²΄='ν•œλΉ›μ œκ³Ό'

03-3 데이터 μˆ˜μ •

ν…Œμ΄λΈ”μ— μ €μž₯된 νˆ¬ν”Œμ—μ„œ νŠΉμ • μ†μ„±μ˜ 값을 μˆ˜μ •

UPDATE ν…Œμ΄λΈ”μ΄λ¦„
SET 속성이름1=κ°’1, 속성이름2=κ°’2, ...
[ WHERE 쑰건 ]
  • SET ν‚€μ›Œλ“œ λ‹€μŒμ— 속성 값을 μ–΄λ–»κ²Œ μˆ˜μ •ν•  것인지λ₯Ό 지정
  • WHERE μ ˆμ— μ œμ‹œλœ 쑰건을 λ§Œμ‘±ν•˜λŠ” νˆ¬ν”Œμ— λŒ€ν•΄μ„œλ§Œ 속성 값을 μˆ˜μ •
    • WHERE μ ˆμ„ μƒλž΅ν•˜λ©΄ ν…Œμ΄λΈ”μ— μ‘΄μž¬ν•˜λŠ” λͺ¨λ“  νˆ¬ν”Œμ„ λŒ€μƒμœΌλ‘œ μˆ˜μ •
-- Q. μ œν’ˆ ν…Œμ΄λΈ”μ— μžˆλŠ” λͺ¨λ“  μ œν’ˆμ˜ 단가λ₯Ό 10% 인상
UPDATE μ œν’ˆ 
SET 단가 = 단가 * 1.1

-- Q. μ •μ†Œν™” 고객이 μ£Όλ¬Έν•œ μ œν’ˆμ˜ μ£Όλ¬Έμˆ˜λŸ‰μ„ 5개둜 μˆ˜μ • (뢀속 질의문 μ‚¬μš©)
UPDATE μ œν’ˆ
SET μˆ˜λŸ‰ = 5
WHERE 주문고객 IN (SLECT 고객아이디 FROM 고객 WHERE 고객이름='μ •μ†Œν™”');

03-4 데이터 μ‚­μ œ

ν…Œμ΄λΈ”μ— μ €μž₯된 데이터λ₯Ό μ‚­μ œ

DELETE
FROM ν…Œμ΄λΈ”μ΄λ¦„
[ WHERE 쑰건 ]
  • WHERE μ ˆμ— μ œμ‹œν•œ 쑰건을 λ§Œμ‘±ν•˜λŠ” νˆ¬ν”Œλ§Œ μ‚­μ œ
    • WHERE μ ˆμ„ μƒλž΅ν•˜λ©΄ ν…Œμ΄λΈ”μ— μ‘΄μž¬ν•˜λŠ” λͺ¨λ“  νˆ¬ν”Œμ„ μ‚­μ œν•΄ 빈 ν…Œμ΄λΈ”μ΄ 됨 λΉˆ ν…Œμ΄λΈ”μ΄ λ‚¨μŒ, DROP TABLEκ³ΌλŠ” 닀름
-- 뢀속 μ§ˆμ˜λ¬Έμ„ μ΄μš©ν•œ DELETE λ¬Έ
DELETE
FROM μ£Όλ¬Έ
WHERE 주문고객 IN (SELECT 고객아이디 FROM 고객 WHERE 고객이름='μ •μ†Œν™”');

04 λ·°

04-1 λ·°λž€?

  • λ‹€λ₯Έ ν…Œμ΄λΈ”μ„ 기반으둜 λ§Œλ“€μ–΄μ§„ 가상 ν…Œμ΄λΈ”
  • λ·°λŠ” κΈ°λ³Έ ν…Œμ΄λΈ”μ„ λ“€μ—¬λ‹€ λ³Ό 수 μžˆλŠ” 창의 역할을 λ‹΄λ‹Ή
  • 데이터λ₯Ό μ‹€μ œλ‘œ μ €μž₯ν•˜μ§€ μ•Šκ³  λ…Όλ¦¬μ μœΌλ‘œλ§Œ μ‘΄μž¬ν•˜λŠ” ν…Œμ΄λΈ”μ΄μ§€λ§Œ, 일반 ν…Œμ΄λΈ”κ³Ό λ™μΌν•œ λ°©λ²•μœΌλ‘œ μ‚¬μš©
    • λ‹€λ₯Έ λ·°λ₯Ό 기반으둜 μƒˆλ‘œμš΄ λ·°λ₯Ό λ§Œλ“œλŠ” 것도 κ°€λŠ₯함
  • λ·°λ₯Ό 톡해 κΈ°λ³Έ ν…Œμ΄λΈ”μ˜ λ‚΄μš©μ„ μ‰½κ²Œ 검색할 μˆ˜λŠ” μžˆμ§€λ§Œ, κΈ°λ³Έ ν…Œμ΄λΈ”μ˜ λ‚΄μš©μ„ λ³€ν™”μ‹œν‚€λŠ” μž‘μ—…μ€ μ œν•œμ μœΌλ‘œ 이루어짐
    • κΈ°λ³Έ ν…Œμ΄λΈ”: λ·°λ₯Ό λ§Œλ“œλŠ”λ° 기반이 λ˜λŠ” 물리적인 ν…Œμ΄λΈ”

04-2 λ·° 검색: CREATE VIEW λ¬Έ

CREATE VIEW 뷰이름[(μ†μ„±λ¦¬μŠ€νŠΈ)]
AS SELECT λ¬Έ
[ WITH CEHCK OPTION ]
  • CREATE VIEW ν‚€μ›Œλ“œμ™€ ν•¨κ»˜ 생성할 뷰의 이름과 λ·°λ₯Ό κ΅¬μ„±ν•˜λŠ” μ†μ„±μ˜ 이름을 λ‚˜μ—΄
    • 속성 리슀트λ₯Ό μƒλž΅ν•˜λ©΄ SELECT μ ˆμ— λ‚˜μ—΄λœ μ†μ„±μ˜ 이름을 κ·ΈλŒ€λ‘œ μ‚¬μš©
  • AS ν‚€μ›Œλ“œμ™€ ν•¨κ»˜ κΈ°λ³Έ ν…Œμ΄λΈ”μ— λŒ€ν•œ SELECT λ¬Έ μž‘μ„±
    • SELECT 문은 μƒμ„±ν•˜λ €λŠ” 뷰의 μ •μ˜λ₯Ό ν‘œν˜„ν•˜λ©° ORDER BYλŠ” μ‚¬μš© λΆˆκ°€
  • WITH CHECK OPTION
    • 뷰에 μ‚½μž…μ΄λ‚˜ μˆ˜μ • 연산을 ν•  λ•Œ SELECT λ¬Έμ—μ„œ μ œμ‹œν•œ 뷰의 μ •μ˜ 쑰건을 μœ„λ°˜ν•˜λ©΄ μˆ˜ν–‰λ˜μ§€ μ•Šλ„λ‘ ν•˜λŠ” μ œμ•½μ‘°κ±΄μ„ 지정
    Q. 고객 ν…Œμ΄λΈ”μ—μ„œ 등급이 vip인 고객의 고객아이디, 고객이름, λ‚˜μ΄λ‘œ κ΅¬μ„±λœ λ·°λ₯Ό μš°μˆ˜κ³ κ°μ΄λΌλŠ” μ΄λ¦„μœΌλ‘œ μƒμ„±ν•΄λ³΄μž. 그런 λ‹€μŒ 우수고객 뷰의 λͺ¨λ“  λ‚΄μš©μ„ κ²€μƒ‰ν•΄λ³΄μž.
    CREATE VIEW 우수고객(고객아이디, 고객이름, λ‚˜μ΄)
    AS SELECT 고객아이디, 고객이름, λ‚˜μ΄
    	FROM 고객
    WHERE λ“±κΈ‰ = 'vip'
    WITH CHECK OPTION; -- μ—­ν• : 등급이 μ—†μŒ. μ‚½μž… μ‹œ 등급이 null둜 λ“€μ–΄κ°€μ„œ μ•ˆλ˜κ²Œ λ§‰μŒ.
    
    select * from 우수고객;
    
    -- λ§Œμ•½ μ΄λ ‡κ²Œ 생성이 λ˜μ—ˆμ„ μ‹œ, 
    CREATE VIEW 우수고객(고객아이디, 고객이름, λ‚˜μ΄, λ“±κΈ‰)
    AS SELECT 고객아이디, 고객이름, λ‚˜μ΄, λ“±κΈ‰
    	FROM 고객
    	WHERE λ“±κΈ‰ = 'vip'
    WITH CHECK OPTION; -- μ—­ν• : 등급이 vipκ°€ μ•„λ‹ˆλ©΄ μ‚½μž…μ΄ μ•ˆλ˜λ„λ‘ λ§‰μŒ.
    
    Q. μ œν’ˆ ν…Œμ΄λΈ”μ—μ„œ μ œμ‘°μ—…μ²΄λ³„ μ œν’ˆμˆ˜λ‘œ κ΅¬μ„±λœ λ·°λ₯Ό μ—…μ²΄λ³„μ œν’ˆμˆ˜λΌλŠ” μ΄λ¦„μœΌλ‘œ μƒμ„±ν•΄λ³΄μž
    CREATE VIEW μ—…μ²΄λ³„μ œν’ˆμˆ˜(μ œμ‘°μ—…μ²΄, μ œν’ˆμˆ˜)
    AS SELECT μ œμ‘°μ—…μ²΄, COUNT(*)
    	FROM μ œν’ˆ
    	GROUP BY μ œμ‘°μ—…μ²΄
    WITH CHECK OPTION;​

04-3 λ·° ν™œμš©: SELECT λ¬Έ

  • λ·°λŠ” 일반 ν…Œμ΄λΈ”κ³Ό κ°™μ€ λ°©λ²•μœΌλ‘œ μ›ν•˜λŠ” 데이터λ₯Ό 검색할 수 있음
    • 뷰에 λŒ€ν•œ SELECT 문이 λ‚΄λΆ€μ μœΌλ‘œλŠ” κΈ°λ³Έ ν…Œμ΄λΈ”μ— λŒ€ν•œ SELECT 문으둜 λ³€ν™˜λ˜μ–΄ μˆ˜ν–‰
  • 검색 연산은 λͺ¨λ“  뷰에 μˆ˜ν–‰ κ°€λŠ₯

04-4 λ·° ν™œμš© : INSERT, UPDATE, DELETE λ¬Έ

  • 뷰에 λŒ€ν•œ μ‚½μž…, μˆ˜μ •, μ‚­μ œ 연산은 μ‹€μ œλ‘œ κΈ°λ³Έ ν…Œμ΄λΈ”μ— μˆ˜ν–‰λ˜λ―€λ‘œ κ²°κ³Όμ μœΌλ‘œλŠ” κΈ°λ³Έ ν…Œμ΄λΈ”μ΄ 변경됨
  • 뷰에 λŒ€ν•œ μ‚½μž…, μˆ˜μ •, μ‚­μ œ 연산은 μ œν•œμ μœΌλ‘œ μˆ˜ν–‰λ¨
    • λ³€κ²½ κ°€λŠ₯ν•œ λ·° vs λ³€κ²½ λΆˆκ°€λŠ₯ν•œ λ·°
  • λ³€κ²½ λΆˆκ°€λŠ₯ν•œ 뷰의 νŠΉμ§•
    • κΈ°λ³Έ ν…Œμ΄λΈ”μ˜ κΈ°λ³Έν‚€λ₯Ό κ΅¬μ„±ν•˜λŠ” 속성이 ν¬ν•¨λ˜μ–΄ μžˆμ§€ μ•Šμ€ λ·°
    • κΈ°λ³Έ ν…Œμ΄λΈ”μ— 있던 λ‚΄μš©μ΄ μ•„λ‹Œ μ§‘계 ν•¨μˆ˜λ‘œ μƒˆλ‘œ κ³„μ‚°λœ λ‚΄μš©μ„ ν¬ν•¨ν•˜λŠ” λ·°
    • DISTINCT ν‚€μ›Œλ“œλ₯Ό ν¬ν•¨ν•˜μ—¬ μ •μ˜ν•œ λ·°
    • GROUP BY μ ˆμ„ ν¬ν•¨ν•˜μ—¬ μ •μ˜ν•œ λ·°
    • μ—¬λŸ¬ 개의 ν…Œμ΄λΈ”μ„ μ‘°μΈν•˜μ—¬ μ •μ˜ν•œ λ·°λŠ” 변경이 λΆˆκ°€λŠ₯ν•œ κ²½μš°κ°€ 많음
  • → μ œν’ˆ 1λ·°λŠ” λ³€κ²½ κ°€λŠ₯ν•œ 뷰인가? O
  • → μ œν’ˆ 2λ·°λŠ” λ³€κ²½ κ°€λŠ₯ν•œ 뷰인가? X κΈ°λ³Έν‚€κ°€ ν¬ν•¨λ˜μ–΄ μžˆμ§€ μ•ŠμŒ.

04-5 뷰의 μž₯점

  • μ§ˆμ˜λ¬Έμ„ μ’€ 더 μ‰½κ²Œ μž‘μ„±ν•  수 μžˆλ‹€.
    • GROUP BY, 집계 ν•¨μˆ˜, 쑰인 등을 μ΄μš©ν•΄ λ·°λ₯Ό 미리 λ§Œλ“€μ–΄ λ†“μœΌλ©΄, λ³΅μž‘ν•œ SQL 문을 μž‘μ„±ν•˜μ§€ μ•Šμ•„λ„ SELECT 절과 FROM μ ˆλ§ŒμœΌλ‘œλ„ μ›ν•˜λŠ” λ°μ΄ν„°μ˜ 검색이 κ°€λŠ₯
  • λ°μ΄ν„°μ˜ λ³΄μ•ˆ μœ μ§€μ— 도움이 λœλ‹€.
    • μžμ‹ μ—κ²Œ 제곡된 λ·°λ₯Ό ν†΅ν•΄μ„œλ§Œ 데이터에 μ ‘κ·Όν•˜λ„λ‘ κΆŒν•œ 섀정이 κ°€λŠ₯
  • 데이터λ₯Ό μ’€ 더 νŽΈλ¦¬ν•˜κ²Œ 관리할 수 μžˆλ‹€.
    • 제곡된 뷰와 관련이 μ—†λŠ” λ‹€λ₯Έ λ‚΄μš©μ— λŒ€ν•΄ μ‚¬μš©μžκ°€ μ‹ κ²½ μ“Έ ν•„μš”κ°€ μ—†μŒ

04-6 λ·° μ‚­μ œ : DROP VIEW λ¬Έ

DROP VIEW 뷰이름;
  • λ·°λ₯Ό μ‚­μ œν•΄λ„ κΈ°λ³Έ ν…Œμ΄λΈ”μ€ 영ν–₯을 받지 μ•ŠμŒ
  • λ§Œμ•½, μ‚­μ œν•  λ·°λ₯Ό μ°Έμ‘°ν•˜λŠ” μ œμ•½μ‘°κ±΄μ΄ μ‘΄μž¬ν•œλ‹€λ©΄?
    • 예) μ‚­μ œν•  λ·°λ₯Ό μ΄μš©ν•΄ λ§Œλ“€μ–΄μ§„ λ‹€λ₯Έ λ·°κ°€ μ‘΄μž¬ν•˜λŠ” 경우
    • λ·° μ‚­μ œκ°€ μˆ˜ν–‰λ˜μ§€ μ•ŠμŒ
    • κ΄€λ ¨λœ μ œμ•½μ‘°κ±΄μ„ λ¨Όμ € μ‚­μ œν•΄μ•Ό 함