πŸ“ KDT : 04μ›” 11일자 μˆ˜μ—… 정리

2024-04-11

  • μ‚¬μš©ν•˜λŠ” IDE : Eclipse 2024-03 (4.31.0)
  • μ‚¬μš©ν•˜λŠ” DBMS : Oracle Database Express Edition (XE) Release 11.2.0.2.0 (11gR2).

SQL의 큰 ꡬ쑰

ν…Œμ΄λΈ”(Table)

λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ μ‚¬μš©λ˜λŠ” 데이터 μ§‘ν•©μ˜ λ‹¨μœ„λ‘œ ν”νžˆ μ•Œκ³  μžˆλŠ” β€œν‘œβ€μ— ν•΄λ‹Ήν•©λ‹ˆλ‹€.

ν•„λ“œ(Field)

열에 ν•΄λ‹Ήν•˜λŠ” 데이터 λ‹¨μœ„λ‘œ, μ„Έλ‘œμ€„λ‘œ ν‘œμ‹œλ©λ‹ˆλ‹€. 외에도 속성(attribute), ν˜Ήμ€ 칼럼(column)이라고도 λΆˆλ¦½λ‹ˆλ‹€.

λ ˆμ½”λ“œ(Record)

열에 ν•΄λ‹Ήν•˜λŠ” 데이터 λ‹¨μœ„λ‘œ, κ°€λ‘œμ€„λ‘œ ν‘œμ‹œλ©λ‹ˆλ‹€. 외에도 νŠœν”Œ(tuple), ν˜Ήμ€ 둜우(row)이라고도 λΆˆλ¦½λ‹ˆλ‹€.

λ°μ΄ν„°λ² μ΄μŠ€μ—λŠ” SQL(Structured Query Lanuage)κ°€ ν™œμš©λ©λ‹ˆλ‹€. SQLλŠ” κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€ 관리 μ‹œμŠ€ν…œ(RDBMS)λ₯Ό μœ„ν•΄ μ„€κ³„λœ 특수 λͺ©μ μ˜ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄μž…λ‹ˆλ‹€.


SQL 문법

  • 주석문 : -- λ˜λŠ” /* */λ₯Ό 톡해 주석을 μž‘μ„±ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • λͺ…λ Ήμ–΄λŠ” λŒ€μ†Œλ¬Έμžλ₯Ό κ΅¬λΆ„ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. (ν•˜μ§€λ§Œ, λͺ…λ Ήμ–΄λŠ” λŒ€λ¬Έμžλ‘œ μž‘μ„±ν•˜λŠ” 것이 κ΄€λ‘€μž…λ‹ˆλ‹€.)
  • λͺ…λ Ήμ–΄λŠ” μ„Έλ―Έμ½œλ‘ (;)으둜 λλ‚©λ‹ˆλ‹€.
  • λͺ…λ Ήμ–΄λŠ” μ—¬λŸ¬ 쀄에 걸쳐 μž‘μ„±ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μ œμ•½μ‘°κ±΄ (Constraint)

SQLμ—λŠ” ν•„λ“œμ— λ“€μ–΄κ°ˆ 수 μžˆλŠ” κ°’κ³Ό ν•„λ“œλ‚˜ ν…Œμ΄λΈ” κ°„μ˜ 관계λ₯Ό μ œν•œν•˜λŠ” μ œμ•½μ‘°κ±΄μ΄ μžˆμŠ΅λ‹ˆλ‹€.

CREATE TABLE booklist (
    book_num VARCHAR2(5) NOT NULL PRIMARY KEY,
    ...,
);

μœ„ 처럼 μ“°λŠ” κ²½μš°λŠ” ν•„λ“œ μˆ˜μ€€μ˜ μ œμ•½μ‘°κ±΄μ΄λΌκ³  ν•˜κ³ ,

CONSTRAINT booklist_pk PRIMARY KEY (book_num)

μœ„ 처럼 μ“°λŠ” κ²½μš°λŠ” ν…Œμ΄λΈ” μˆ˜μ€€μ˜ μ œμ•½μ‘°κ±΄μ΄λΌκ³  ν•©λ‹ˆλ‹€.

NOT NULL

ν•„λ“œμ— NULL 값을 ν—ˆμš©ν•˜μ§€ μ•ŠλŠ” μ œμ•½μ‘°κ±΄μž…λ‹ˆλ‹€. SQL의 NULL은 μžλ°”μ˜ NULLκ³Ό 같은 μ˜λ―Έμž…λ‹ˆλ‹€.


κΈ°λ³Έν‚€ (Primary Key)

SQLμ—λŠ” κΈ°λ³Έν‚€λΌλŠ” μ œμ•½μ‘°κ±΄μ΄ μžˆμŠ΅λ‹ˆλ‹€. κΈ°λ³Έν‚€λŠ” 데이블을 κ΅¬μ„±ν•˜λŠ” ν•„λ“œ 쀑 κ°–λŠ” 값이 NOT NULL이고, μ„œλ‘œ λ‹€λ₯Έ κ°’(μœ μΌν•œ κ°’)을 κ°–κ³  μžˆμ–΄ λ ˆμ½”λ“œλ₯Ό 식별할 수 μžˆλŠ” ν•„λ“œμž…λ‹ˆλ‹€. ν…Œμ΄λΈ”μ„ κ΅¬μ„±ν•˜λŠ” ν•„λ“œ 쀑 ν•˜λ‚˜λ₯Ό κΈ°λ³Έν‚€λ‘œ 지정할 수 μžˆμŠ΅λ‹ˆλ‹€. κΈ°λ³Έν‚€λ₯Ό μ§€μ •ν•¨μœΌλ‘œμ„œ λ°œμƒν•  수 μžˆλŠ” 였λ₯˜λ₯Ό 미연에 λ°©μ§€ν•˜κ³  탐색 속도λ₯Ό λ†’νž 수 μžˆμŠ΅λ‹ˆλ‹€. κΈ°λ³Έν‚€λ‘œ 결함을 μ—†μ• κ³ , κ·Έ μƒνƒœλ₯Ό μœ μ§€ν•˜λŠ” 것을 객체 무결성이라고 ν•©λ‹ˆλ‹€.


μ™Έλž˜ν‚€ (Foreign Key)

SQLμ—λŠ” μ™Έλž˜ν‚€λΌλŠ” μ œμ•½μ‘°κ±΄μ΄ μžˆμŠ΅λ‹ˆλ‹€. ν…Œμ΄λΈ” κ°„μ˜ ν•„μˆ˜ 포함 관계λ₯Ό ꡬ성할 λ•Œμ— μƒλŒ€ ν…Œμ΄λΈ”μ˜ νŠΉμ • ν•„λ“œκ°’μ„ μ°Έμ‘°ν•˜κ³ , μƒλŒ€ ν…Œμ΄λΈ”μ— μ—†λŠ” 값을 μ‚¬μš©ν•  수 없도둝 ν•˜λŠ” κ·œμΉ™μž…λ‹ˆλ‹€. μ΄λ•Œ 참쑰의 λŒ€μƒμ΄ 될 ν•„λ“œλŠ” κΈ°λ³Έν‚€(primary key) λ˜λŠ” μœ μΌν•œ κ°’(unique)이어야 ν•©λ‹ˆλ‹€. μ™Έλž˜ν‚€λ‘œ μœ μ§€λ˜λŠ” 무결성을 μ°Έμ‘° 무결성이라고 ν•©λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄ booklist ν…Œμ΄λΈ”μ— μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” λ„μ„œμ˜ 번호(book_num)λ₯Ό rentlist ν…Œμ΄λΈ”μ˜ λΉŒλ €κ°„ λ„μ„œμ˜ 번호둜 μž…λ ₯ν•  수 없도둝 ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

λ„μ„œλŒ€μ—¬μ μ˜ λ„μ„œλͺ©λ‘κ³Ό λŒ€μ—¬λͺ©λ‘μ˜ 관계
  • λ„μ„œλͺ©λ‘ ν…Œμ΄λΈ”μ˜ 이름 : booklist
  • λŒ€μ—¬λͺ©λ‘ ν…Œμ΄λΈ”μ˜ 이름 : rentlist
ν•„λ“œ 이름 μžλ£Œν˜• μ œμ•½μ‘°κ±΄
idx NUMBER(3)
rent_date DATE
bnum VARCHAR(5) NOT NULL
mnum VARCHAR(5) NOT NULL
discount NUMBER(4)
… … …
CREATE TABLE rentlist (
    idx       NUMBER(3),                 -- λŒ€μ—¬λ²ˆν˜Έ
    rent_date DATE      DEFAULT sysdate, -- λŒ€μ—¬μΌμž (데이터 μž…λ ₯μ‹œ ν˜„μž¬ λ‚ μ§œλ‘œ μž…λ ₯)
    bnum      VARCHAR2(5) NOT NULL,      -- λ„μ„œλ²ˆν˜Έ
    mnum      VARCHAR2(5) NOT NULL,      -- νšŒμ›λ²ˆν˜Έ
    discount  NUMBER(4) DEFAULT 500,     -- 할인앑  (데이터 λ―Έμž…λ ₯μ‹œ 500으둜 μž…λ ₯)
    CONSTRAINT pk PRIMARY KEY (idx),
    CONSTRAINT fk1 FOREIGN KEY (bnum) REFERENCES booklist (book_num),
    -- ν˜„μž¬ ν…Œμ΄λΈ”μ˜ bnum ν•„λ“œλŠ” booklist ν…Œμ΄λΈ”μ˜ book_num ν•„λ“œλ₯Ό μ°Έμ‘°ν•©λ‹ˆλ‹€.
    CONSTRAINT fk2 FOREIGN KEY (mnum) REFERENCES memberlist (member_num)
    -- ν˜„μž¬ ν…Œμ΄λΈ”μ˜ mnum ν•„λ“œλŠ” memberlist ν…Œμ΄λΈ”μ˜ member_num ν•„λ“œλ₯Ό μ°Έμ‘°ν•©λ‹ˆλ‹€.
);

μœ μΌκ°’ (Unique)

UNIQUEλŠ” ν•„λ“œμ— μ€‘λ³΅λœ 값을 ν—ˆμš©ν•˜μ§€ μ•ŠλŠ” μ œμ•½μ‘°κ±΄μž…λ‹ˆλ‹€. 기본킀와 μœ μΌκ°’μ€ λΉ„μŠ·ν•˜μ§€λ§Œ, κΈ°λ³Έν‚€λŠ” NULL을 ν—ˆμš©ν•˜μ§€ μ•ŠλŠ” 반면, μœ μΌκ°’μ€ NULL을 ν—ˆμš©ν•©λ‹ˆλ‹€.

쑰건 (Check)

CHECKλŠ” ν•„λ“œμ— λ“€μ–΄κ°ˆ 수 μžˆλŠ” κ°’μ˜ λ²”μœ„λ₯Ό μ œν•œν•˜λŠ” μ œμ•½μ‘°κ±΄μž…λ‹ˆλ‹€. μ œμ•½μ˜ μ‘°κ±΄μ—λŠ” TRUE λ˜λŠ” FALSEλ₯Ό λ°˜ν™˜ν•˜λŠ” 쑰건식을 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό μ΄μš©ν•΄ 가격이 0 μ΄μƒμ΄λΌκ±°λ‚˜, 성별이 β€˜λ‚¨μžβ€™ λ˜λŠ” β€˜μ—¬μžβ€™λΌλŠ” 쑰건 등을 κ±Έ 수 μžˆμŠ΅λ‹ˆλ‹€.


μžλ£Œν˜• (Data Type)

μ •μˆ˜ν˜•

  • NUMBER(자리수) : λ°”μ΄νŠΈκ°€ μ•„λ‹Œ 자리수λ₯Ό μž…λ ₯ν•˜λŠ” 것에 주의

μ‹€μˆ˜ν˜•

  • NUMBER(자리수, μ†Œμˆ˜μ  μ΄ν•˜ 자리수) : λ°”μ΄νŠΈκ°€ μ•„λ‹Œ 자리수λ₯Ό μž…λ ₯ν•˜λŠ” 것에 주의

κ°€λ³€ν˜• 문자 (μ΅œλŒ€ 4000 Byte)

  • VARCHAR2(문자수) : μ§€μ •ν•œ 문자수λ₯Ό μ΅œλŒ€ 크기둜 κ°–μ§€λ§Œ, μ‹€μ œ 문자수만큼의 κ³΅κ°„λ§Œ μ°¨μ§€ν•œλ‹€

κ³ μ •ν˜• 문자 (μ΅œλŒ€ 2000 Byte)

  • CHAR(문자수) : μ§€μ •ν•œ 문자수λ₯Ό μ΅œλŒ€ 크기둜 κ°–κ³ , 문자수 만큼의 곡간을 μ°¨μ§€ν•œλ‹€

κ°€λ³€ν˜• μœ λ‹ˆμ½”λ“œ 문자 (μ΅œλŒ€ 4000 Byte)

  • NVARCHAR2(문자수) : VARCHAR2와 κ°™μ§€λ§Œ, μœ λ‹ˆμ½”λ“œ 문자λ₯Ό μ €μž₯ν•  수 μžˆλ‹€

κ³ μ •ν˜• μœ λ‹ˆμ½”λ“œ 문자 (μ΅œλŒ€ 2000 Byte)

  • NCHAR(문자수) : CHAR와 κ°™μ§€λ§Œ, μœ λ‹ˆμ½”λ“œ 문자λ₯Ό μ €μž₯ν•  수 μžˆλ‹€

λ‚ μ§œν˜•

  • DATE : 주둜 μ‚¬μš©λ˜λŠ” λ‚ μ§œμ™€ μ‹œκ°„μ„ μ €μž₯ν•  수 μžˆλŠ” μžλ£Œν˜• (java.sql.Date와 μœ μ‚¬)
  • TIMESTAMP : DATE와 μœ μ‚¬ν•˜μ§€λ§Œ, λ°€λ¦¬μ΄ˆκΉŒμ§€ μ €μž₯ν•  수 μžˆλŠ” μžλ£Œν˜• (java.sql.Timestamp와 μœ μ‚¬)
  • SYSDATE : DATE ν˜•μ‹μ˜ ν˜„μž¬ λ‚ μ§œμ™€ μ‹œκ°„μ„ λ°˜ν™˜ν•˜λŠ” ν‚€μ›Œλ“œ
  • SYSTIMESTAMP : TIMESTAMP ν˜•μ‹μ˜ ν˜„μž¬ λ‚ μ§œμ™€ μ‹œκ°„μ„ λ°˜ν™˜ν•˜λŠ” ν‚€μ›Œλ“œ

LOB (Large Object)

  • λŒ€μš©λŸ‰ 데이터λ₯Ό μ €μž₯ν•  수 μžˆλŠ” νƒ€μž…μ΄μ§€λ§Œ, μ΅œκ·Όμ—λŠ” λ³„λ„λ‘œ μ €μž₯ν•˜κ³ , 경둜만 μ €μž₯ν•˜λŠ” 좔세이닀.
  • BLOB : 이진 데이터
  • CLOB : 문자 데이터
  • NCLOB : μœ λ‹ˆμ½”λ“œ 문자 데이터

더이상 μ‚¬μš©λ˜μ§€ μ•ŠλŠ” μžλ£Œν˜•

  • VARCHAR : VARCHAR2둜 λŒ€μ²΄
  • LONG : μ΅œλŒ€ 2GB의 κ°€λ³€ 길이 λ¬Έμžν˜•
  • FLOAT : NUMBER둜 λŒ€μ²΄ (2μ§„μˆ˜ κΈ°μ€€ 22λ°”μ΄νŠΈ)
  • BINARY_FLOAT : 32λΉ„νŠΈ 뢀동 μ†Œμˆ˜μ 
  • BINARY_DOUBLE : 64λΉ„νŠΈ 뢀동 μ†Œμˆ˜μ 

SQL λͺ…λ Ήμ–΄μ˜ λΆ„λ₯˜

1. DDL λͺ…λ Ήμ–΄ : λ°μ΄ν„°λ² μ΄μŠ€μ˜ ꡬ쑰λ₯Ό μ •μ˜ν•˜λŠ” λͺ…λ Ήμ–΄

1. CREATE : ν…Œμ΄λΈ” λ˜λŠ” λ·°, μ‚¬μš©μž 등을 생성

CREATE TABLE table_name (
    ν•„λ“œλͺ…1 DATATYPE [DEFAULT κΈ°λ³Έκ°’, OR μ œμ•½μ‘°κ±΄ λ“±],
    ν•„λ“œλͺ…2 DATATYPE [DEFAULT κΈ°λ³Έκ°’, OR μ œμ•½μ‘°κ±΄ λ“±],
    ...,
    ν•„λ“œλͺ…n DATATYPE [DEFAULT κΈ°λ³Έκ°’, OR μ œμ•½μ‘°κ±΄ λ“±]
);
CREATE TABLE 의 μ„ΈλΆ€ κ·œμΉ™
  1. ν…Œμ΄λΈ”μ˜ 이름은 객체λ₯Ό μ˜λ―Έν•  수 μžˆλŠ” μ ν•©ν•œ 이름을 μ‚¬μš©ν•©λ‹ˆλ‹€. (Java의 λ³€μˆ˜μ™€ μœ μ‚¬ν•œ κ·œμΉ™)
  2. λ‹€λ₯Έ ν…Œμ΄λΈ”κ³Ό 이름이 μ€‘λ³΅λ˜μ§€ μ•Šκ²Œ μ£Όμ˜ν•©λ‹ˆλ‹€.
  3. ν•œ ν…Œμ΄λΈ” λ‚΄μ—μ„œλ„ ν•„λ“œ 이름이 μ€‘λ³΅λ˜μ§€ μ•Šκ²Œ μ£Όμ˜ν•©λ‹ˆλ‹€.
  4. 각 ν•„λ“œλ“€μ€ ,둜 κ΅¬λΆ„ν•©λ‹ˆλ‹€. 단, λ§ˆμ§€λ§‰ ν•„λ“œλŠ” ,λ₯Ό 뢙이지 μ•ŠμŠ΅λ‹ˆλ‹€.
  5. CREATEλ₯Ό λΉ„λ‘―ν•œ λͺ¨λ“  λͺ…λ Ήμ–΄λŠ” ;둜 λλ‚©λ‹ˆλ‹€.
  6. ν•„λ“œ 이름 뒀에 DATATYPE은 λ°˜λ“œμ‹œ μ§€μ •ν•˜κ³ , []μ•ˆμ˜ λ‚΄μš©μ€ μƒλž΅ κ°€λŠ₯ν•©λ‹ˆλ‹€.
  7. μ˜ˆμ•½μ–΄ λͺ…λ Ήμ–΄ 등을 ν…Œμ΄λΈ” 이름과 ν•„λ“œ μ΄λ¦„μœΌλ‘œ μ‚¬μš©ν•  수 μ—†μŠ΅λ‹ˆλ‹€.
  8. ν…Œμ΄λΈ” μƒμ„±μ‹œ λŒ€μ†Œλ¬Έμžλ₯Ό κ΅¬λΆ„ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
  9. 보톡은 데이터 ν˜•μ‹κ³Ό μš©λŸ‰μ„ μ§€μ •ν•˜λŠ”λ°, DATE ν˜•μ‹μ€ λ³„λ„λ‘œ 크기λ₯Ό μ§€μ •ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
  10. λ¬Έμžλ°μ΄ν„°μ˜ DATATYPE은 VARCHAR2(10), NUMBER의 DATATYPE은 NUMBER(10) λ“±μœΌλ‘œ μ§€μ •ν•©λ‹ˆλ‹€.
  11. ν•„λ“œμ˜ ν¬κΈ°λŠ” λ°˜λ“œμ‹œ κ°€μ§ˆ 수 μžˆλŠ” μ΅œλŒ€μ˜ 길이둜 μ§€μ •ν•΄μ•Όν•©λ‹ˆλ‹€.
  12. 숫자 데이터 ν˜•μ‹μ˜ 경우 λ°”μ΄νŠΈκ°€ μ•„λ‹ˆλΌ 자리수λ₯Ό μ§€μ •ν•œλ‹€λŠ” 것을 μ£Όμ˜ν•©λ‹ˆλ‹€.
λ„μ„œλŒ€μ—¬μ μ˜ λ„μ„œλͺ©λ‘ ν…Œμ΄λΈ”μ˜ 생성

ν…Œμ΄λΈ” 이름 : booklist

ν•„λ“œ 이름 μžλ£Œν˜• μ œμ•½μ‘°κ±΄
book_num 문자 5자 NOT NULL
subject 문자 30자 NOT NULL
makeyear 숫자 4자
inprice 숫자 6자
outprice 숫자 6자
CREATE TABLE booklist (
    book_num VARCHAR2(5) NOT NULL,
    subject VARCHAR2(30) NOT NULL,
    makeyear NUMBER(4),
    inprice NUMBER(6),
    outprice NUMBER(6)
);

μ—¬κΈ°μ„œ λ¬Έμžμ—΄μ„ λ‹΄λŠ” μžλ£Œν˜•μΈ CHAR은 무쑰건 κ³ μ •λœ 크기λ₯Ό μ°¨μ§€ν•©λ‹ˆλ‹€. 이λ₯Ό λŒ€μ‹ ν•΄μ„œ μ‚¬μš©λ˜λŠ” VARCHAR은 λΆˆν•„μš”ν•œ 곡간을 μ°¨μ§€ν•˜μ§€ μ•ŠλŠ”λ‹€λŠ” μž₯점이 μžˆμŠ΅λ‹ˆλ‹€. μ˜€λΌν΄μ—μ„  보닀 더 쒋은 μ„±λŠ₯을 가진 VARCHAR2λ₯Ό μ§€μ›ν•©λ‹ˆλ‹€.

μ£Όμ˜ν•  점은 NUMBER(4)의 4λŠ” 4λ°”μ΄νŠΈκ°€ μ•„λ‹Œ 4자리 숫자λ₯Ό μ˜λ―Έν•©λ‹ˆλ‹€. λ”°λΌμ„œ NUMBER(4)λŠ” -9999λΆ€ν„° 9999κΉŒμ§€μ˜ 숫자λ₯Ό μ €μž₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

νšŒμ›λ¦¬μŠ€νŠΈμ˜ ν…Œμ΄λΈ” 생성

ν…Œμ΄λΈ” 이름 : memberlist

ν•„λ“œ 이름 μžλ£Œν˜• μ œμ•½μ‘°κ±΄
member_num VARCHAR(5) NOT NULL : ν•„λ“œ 레벨둜 μ„€μ •, PRIMARY KEY : ν…Œμ΄λΈ” 레벨둜 μ„€μ •
member_name VARCHAR(12) NOT NULL : ν•„λ“œ 레벨둜 μ„€μ •
Phone VARCHAR(13) NOT NULL : ν•„λ“œ 레벨둜 μ„€μ •
birth DATE
bpoint NUMBER(6)
CREATE TABLE memberlist (
    member_num VARCHAR2(5) NOT NULL,
    member_name VARCHAR2(12) NOT NULL,
    phone VARCHAR2(13) NOT NULL,
    birth DATE,
    bpoint NUMBER(6),
    CONSTRAINT member_pk PRIMARY KEY (member_num)
);

2. DROP : 이미 μƒμ„±λ˜μ–΄ μžˆλŠ” ν…Œμ΄λΈ” λ˜λŠ” λ·°, μ‚¬μš©μž 등을 μ‚­μ œ

DROP TABLE table_name;
λ„μ„œλŒ€μ—¬μ μ˜ λ„μ„œλͺ©λ‘ ν…Œμ΄λΈ”μ˜ μ‚­μ œ
DROP TABLE booklist;

3. ALTER : 이미 μƒμ„±λ˜μ–΄ μžˆλŠ” ν…Œμ΄λΈ” λ˜λŠ” λ·°, μ‚¬μš©μž λ“±μ˜ ꡬ쑰λ₯Ό λ³€κ²½

ALTER TABLE table_name ADD ν•„λ“œλͺ… DATATYPE;
ALTER TABLE table_name MODIFY ν•„λ“œλͺ… DATATYPE;
ALTER TABLE table_name DROP COLUMN ν•„λ“œλͺ…;
λ„μ„œλŒ€μ—¬μ μ˜ λ„μ„œλͺ©λ‘ ν…Œμ΄λΈ”μ˜ μˆ˜μ •
ALTER TABLE booklist ADD pub VARCHAR2(20);
ALTER TABLE booklist MODIFY inprice NUMBER(7);
ALTER TABLE booklist DROP COLUMN makeyear;

2. DML λͺ…λ Ήμ–΄ : 데이터λ₯Ό μ‘°μž‘ν•˜λŠ” λͺ…λ Ήμ–΄

1. SELECT : ν…Œμ΄λΈ”μ˜ 데이터λ₯Ό μ‘°νšŒν•˜λŠ” λͺ…λ Ήμ–΄

SELECT ν•„λ“œλͺ…1, ν•„λ“œλͺ…2, ... FROM ν…Œμ΄λΈ”λͺ…;
λ„μ„œλŒ€μ—¬μ μ˜ λ„μ„œλͺ©λ‘ ν…Œμ΄λΈ”μ˜ 쑰회
SELECT * FROM booklist;

2. INSERT : ν…Œμ΄λΈ”μ— 데이터λ₯Ό μ‚½μž…ν•˜λŠ” λͺ…λ Ήμ–΄

3. UPDATE : ν…Œμ΄λΈ”μ˜ 데이터λ₯Ό μˆ˜μ •ν•˜λŠ” λͺ…λ Ήμ–΄

4. DELETE : ν…Œμ΄λΈ”μ˜ 데이터λ₯Ό μ‚­μ œν•˜λŠ” λͺ…λ Ήμ–΄

3. DCL λͺ…λ Ήμ–΄ : λ°μ΄ν„°λ² μ΄μŠ€μ— λŒ€ν•œ 접근을 μ œμ–΄ν•˜λŠ” λͺ…λ Ήμ–΄

1. GRANT : νŠΉμ • μ‚¬μš©μžμ—κ²Œ νŠΉμ • κΆŒν•œμ„ λΆ€μ—¬

2. REVOKE : νŠΉμ • μ‚¬μš©μžμ—κ²Œ νŠΉμ • κΆŒν•œμ„ λ°•νƒˆ


μ‹œν€€μŠ€ (Sequence)

μ‹œν€€μŠ€λŠ” ν…Œμ΄λΈ” λ‚΄μ˜ μ€‘λ³΅λ˜μ§€ μ•ŠλŠ” 숫자λ₯Ό μžλ™μœΌλ‘œ μƒμ„±ν•˜λŠ” μžλ™ 번호 λ°œμƒκΈ°μž…λ‹ˆλ‹€. ν…Œμ΄λΈ” 생성 ν›„ μ‹œν€€μŠ€λ₯Ό λ”°λ‘œ λ§Œλ“€μ–΄μ•Ό ν•©λ‹ˆλ‹€.

생성 방법

주둜 NUMBER ν˜•μ‹μ˜ κΈ°λ³Έ ν‚€κ°’μœΌλ‘œ μ‚¬μš©λ©λ‹ˆλ‹€.

CREATE SEQUENCE μ‹œν€€μŠ€λͺ… START WITH μ‹œμž‘κ°’ INCREMENT BY 증가값;
CREATE SEQUENCE book_seq START WITH 1 INCREMENT BY 1;

μ‚¬μš© 방법

INSERT INTO ν…Œμ΄λΈ”λͺ… (κΈ°λ³Έν‚€, ...) VALUES (μ‹œν€€μŠ€λͺ….NEXTVAL, ...);
INSERT INTO booklist VALUES (book_seq.NEXTVAL, 'μŠ€ν”„λ§ λΆ€νŠΈ 3', 2024, 21000, 27000);

μ‹œν€€μŠ€ μ‚­μ œ

DROP SEQUENCE μ‹œν€€μŠ€λͺ…;
DROP SEQUENCE book_seq;

λ·° (View)

λ·°λŠ” ν•˜λ‚˜ μ΄μƒμ˜ ν…Œμ΄λΈ”λ‘œλΆ€ν„° μœ λ„λœ 가상 ν…Œμ΄λΈ”μž…λ‹ˆλ‹€. λ·°λŠ” 데이터λ₯Ό μ €μž₯ν•˜μ§€ μ•Šμ§€λ§Œ, ν…Œμ΄λΈ”κ³Ό 같이 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

생성 방법

CREATE VIEW λ·°λͺ… AS SELECT ν•„λ“œλͺ…1, ν•„λ“œλͺ…2, ... FROM ν…Œμ΄λΈ”λͺ… WHERE 쑰건;
CREATE VIEW bookview AS SELECT book_num, subject FROM booklist WHERE makeyear > 2010;

λ·° μ‚­μ œ

DROP VIEW λ·°λͺ…;
DROP VIEW bookview;

예제 ν…Œμ΄λΈ” λ§Œλ“€κΈ°
  • ν…Œμ΄λΈ” 이름 : orders1
ν•„λ“œ 이름 μžλ£Œν˜• μ œμ•½μ‘°κ±΄
order_id NUMBER(12,0) κΈ°λ³Έν‚€ (ν…Œμ΄λΈ”λ ˆλ²¨, μ œμ•½λͺ… : pk_order)
order_date DATE 기본값은 였늘 λ‚ μ§œ (ν•„λ“œλ ˆλ²¨)
order_mode VARCHAR2(8) β€˜direct’와 β€˜onlineβ€™λ§Œ μž…λ ₯ κ°€λŠ₯ (ν…Œμ΄λΈ”λ ˆλ²¨, μ œμ•½λͺ… : ck_order_mode)
order_status NUMBER(2,0)
order_total NUMBER(8,2) 기본값은 0 (ν•„λ“œλ ˆλ²¨)
sales_rep_id NUMBER(6,0)
promotion_id NUMBER(6,0)
CREATE TABLE orders1 (
    order_id NUMBER(12,0),
    order_date DATE DEFAULT SYSDATE,
    order_mode VARCHAR2(8),
    order_status NUMBER(2,0),
    order_total NUMBER(8,2) DEFAULT 0,
    customer_id NUMBER(6,0),
    sales_rep_id NUMBER(6,0),
    promotion_id NUMBER(6,0),
    CONSTRAINT pk_order PRIMARY KEY (order_id),
    CONSTRAINT ck_order_mode CHECK (order_mode IN ('direct', 'online'))
);
  • customer_id ν•„λ“œλͺ…을 customer_number 둜 λ³€κ²½
ALTER TABLE orders1 RENAME COLUMN customer_id TO customer_number;
  • promotion_id ν•„λ“œμ˜ 값은 10000μ—μ„œ 99999 μ‚¬μ΄μ˜ κ°’λ§Œ ν—ˆμš©
ALTER TABLE orders1 ADD CONSTRAINT ck_promotion_id CHECK promotion_id >= 10000 AND promotion_id <= 99999);
-- ν˜Ήμ€ BETWEEN μ‚¬μš©
ALTER TABLE orders1 ADD CONSTRAINT ck_promotion_id CHECK (promotion_id BETWEEN 10000 AND 99999);
  • orders1 ν…Œμ΄λΈ”μ„ orders2둜 볡사
CREATE TABLE orders2 AS SELECT * FROM orders1;

booklist ν…Œμ΄λΈ”μ— μ‹œν€€μŠ€ λ“±λ‘ν•˜κΈ°
CREATE SEQUENCE book_seq START WITH 1 INCREMENT BY 1;

INSERT INTO booklist VALUES (book_seq.NEXTVAL, 'μŠ€ν”„λ§ λΆ€νŠΈ 3 λ°±μ—”λ“œ', 2024, 21000, 27000);
INSERT INTO booklist VALUES (book_seq.NEXTVAL, 'μ½”λ”© μžμœ¨ν•™μŠ΅', 2024, 22000, 29700);
INSERT INTO booklist VALUES (book_seq.NEXTVAL, '객체 지ν–₯의 원리', 2024, 15000, 22500);
INSERT INTO booklist VALUES (book_seq.NEXTVAL, 'μžλ°” ν‘œμ€€ ν”„λ‘œκ·Έλž˜λ°', 2024, 30000, 38700);
  • μ‹œν€€μŠ€ μ΅œλŒ€ 증가값을 14κΉŒμ§€λ‘œ μ œν•œ
ALTER SEQUENCE book_seq MAXVALUE 14;
  • μ‹œν€€μŠ€ μ‚­μ œ
DROP SEQUENCE book_seq;
  • μ‹œν€€μŠ€ μž¬μƒμ„±
CREATE SEQUENCE book_seq START WITH 15 INCREMENT BY 1;
  • 1λΆ€ν„° 1μ”© μ¦κ°€ν•˜λŠ” member_seq, rent_seq μ‹œν€€μŠ€ 생성
CREATE SEQUENCE member_seq START WITH 1 INCREMENT BY 1;
CREATE SEQUENCE rent_seq START WITH 1 INCREMENT BY 1;