Home > CS > 2024 > πŸ’Ύ [CS] SQLμ΄λž€?

πŸ’Ύ [CS] SQLμ΄λž€?
CS

πŸ’Ύ [CS] SQLμ΄λž€?

SQL(Structured Query Language) λŠ” κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ 데이터λ₯Ό κ΄€λ¦¬ν•˜κ³  μ‘°μž‘ν•˜κΈ° μœ„ν•œ ν‘œμ€€ μ–Έμ–΄μž…λ‹ˆλ‹€.

SQL은 데이터λ₯Ό 검색, μ‚½μž…, μˆ˜μ • μ‚­μ œν•˜λŠ” μž‘μ—…μ„ μ§€μ›ν•˜λ©°, λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ μ €μž₯된 데이터λ₯Ό 효율적으둜 관리할 수 μžˆλ„λ‘ λ‹€μ–‘ν•œ λͺ…λ Ήμ–΄λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€.

κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€ 관리 μ‹œμŠ€ν…œ(RDBMS, Relational Database Management System)μ—μ„œ 데이터λ₯Ό μ²˜λ¦¬ν•˜λŠ” 데 μ‚¬μš©λ˜λ©°, λ°μ΄ν„°λ² μ΄μŠ€ ν…Œμ΄λΈ” λ‚΄μ˜ 데이터λ₯Ό 닀루기 μœ„ν•œ μ–Έμ–΄μž…λ‹ˆλ‹€.

1️⃣ SQL의 μ£Όμš” νŠΉμ§•.

1. κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€ 관리.

  • SQL은 κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ ν…Œμ΄λΈ” ν˜•νƒœλ‘œ 데이터λ₯Ό κ΄€λ¦¬ν•©λ‹ˆλ‹€.
  • ν…Œμ΄λΈ”μ€ ν–‰(row), μ—΄(column)둜 κ΅¬μ„±λ˜λ©°, 각 ν…Œμ΄λΈ”μ€ κ³ μœ ν•œ 데이터λ₯Ό μ €μž₯ν•©λ‹ˆλ‹€.

2. ν‘œμ€€ μ–Έμ–΄.

  • SQL은 ꡭ제 ν‘œμ€€ν™” 기ꡬ(ISO) 와 λ―Έκ΅­ ν‘œμ€€ν˜‘νšŒ(ANSI) μ—μ„œ μ •μ˜ν•œ ν‘œμ€€ μ–Έμ–΄λ‘œ, μ—¬λŸ¬ κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€ μ‹œμŠ€ν…œ(예: MySQL, PostgreSQL, Oracle, Microsoft SQL Server)μ—μ„œ μ‚¬μš©λ©λ‹ˆλ‹€.

3. λ°μ΄ν„°λ² μ΄μŠ€ μ‘°μž‘ 및 관리.

  • SQL을 μ‚¬μš©ν•˜μ—¬ ν…Œμ΄λΈ”μ— 데이터λ₯Ό μ‚½μž…, μˆ˜μ •, μ‚­μ œν•  수 있으며, 데이터λ₯Ό κ²€μƒ‰ν•˜κ±°λ‚˜ 데이터 ꡬ쑰λ₯Ό μ •μ˜(ν…Œμ΄λΈ” 생성, λ³€κ²½)ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

4. 데이터 쿼리

  • SQL은 데이터λ₯Ό 질의(Query, 쿼리) ν•˜κΈ° μœ„ν•œ μ–Έμ–΄μž…λ‹ˆλ‹€.
  • μ‚¬μš©μžλŠ” SQL 쿼리λ₯Ό 톡해 λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ νŠΉμ • 쑰건에 λ§žλŠ” 데이터λ₯Ό κ²€μƒ‰ν•˜κ±°λ‚˜, 집계할 수 μžˆμŠ΅λ‹ˆλ‹€.

2️⃣ SQL의 μ£Όμš” κΈ°λŠ₯ 및 λΆ„λ₯˜.

SQL은 크게 λ„€ 가지 μœ ν˜•μ˜ λͺ…λ Ήμ–΄λ‘œ λΆ„λ₯˜λ©λ‹ˆλ‹€.

1. 데이터 μ •μ˜ μ–Έμ–΄(DDL, Data Definition Language)

  • λ°μ΄ν„°λ² μ΄μŠ€μ˜ ꡬ쑰λ₯Ό μ •μ˜ν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€.
  • ν…Œμ΄λΈ”, 인덱슀, μŠ€ν‚€λ§ˆ λ“±μ˜ 생성과 μ‚­μ œλ₯Ό ν¬ν•¨ν•©λ‹ˆλ‹€.
  • μ£Όμš” λͺ…λ Ήμ–΄
    • CREATE: λ°μ΄ν„°λ² μ΄μŠ€ 객체(ν…Œμ΄λΈ”, 인덱슀 λ“±)λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€.
    • ALTER: λ°μ΄ν„°λ² μ΄μŠ€ 객체λ₯Ό μˆ˜μ •ν•©λ‹ˆλ‹€.
    • DROP: λ°μ΄ν„°λ² μ΄μŠ€ 객체λ₯Ό μ‚­μ œν•©λ‹ˆλ‹€.

μ˜ˆμ‹œ.

CREATE TABLE Users (
    id INT PRIMARY KEY,
    name VARCHAR(100),
    email VARCHAR(100)
);

2. 데이터 μ‘°μž‘ μ–Έμ–΄(DML, Data Manipulation Language)

  • λ°μ΄ν„°λ² μ΄μŠ€μ˜ 데이터λ₯Ό μ‚½μž…, μˆ˜μ •, μ‚­μ œν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€.
  • μ£Όμš” λͺ…λ Ήμ–΄
    • INSERT: 데이터λ₯Ό ν…Œμ΄λΈ”μ— μ‚½μž…ν•©λ‹ˆλ‹€.
    • UPDATE: ν…Œμ΄λΈ”μ— μžˆλŠ” 데이터λ₯Ό μˆ˜μ •ν•©λ‹ˆλ‹€.
    • DELETE: ν…Œμ΄λΈ”μ—μ„œ 데이터λ₯Ό μ‚­μ œν•©λ‹ˆλ‹€.

μ˜ˆμ‹œ.

INSERT INTO Users (id, name, email) VALUES (1, 'Kobe', 'kobe@example.com');

3. 데이터 쿼리 μ–Έμ–΄(DQL, Data Query Language)

  • 데이터λ₯Ό κ²€μƒ‰ν•˜κ±°λ‚˜ μ‘°νšŒν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€.
  • κ°€μž₯ 많이 μ‚¬μš©λ˜λŠ” λͺ…λ Ήμ–΄λŠ” SELECTμž…λ‹ˆλ‹€.
  • μ£Όμš” λͺ…λ Ήμ–΄
    • SELECT: ν…Œμ΄λΈ”μ—μ„œ 데이터λ₯Ό κ²€μƒ‰ν•©λ‹ˆλ‹€. λ‹€μ–‘ν•œ 쑰건을 톡해 νŠΉμ • λ°μ΄ν„°λ§Œμ„ μ„ νƒμ μœΌλ‘œ μ‘°νšŒν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μ˜ˆμ‹œ

SELECT * FROM Users WHERE name = 'Kobe';

4. 데이터 μ œμ–΄ μ–Έμ–΄(DCL, Data Control Language)

  • λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ μ‚¬μš©μž κΆŒν•œμ„ κ΄€λ¦¬ν•˜κ³  μ œμ–΄ν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€.
  • μ£Όμš” λͺ…λ Ήμ–΄
    • GRANT: μ‚¬μš©μžμ—κ²Œ κΆŒν•œμ„ λΆ€μ—¬ν•©λ‹ˆλ‹€.
    • REVOKE: μ‚¬μš©μžλ‘œλΆ€ν„° κΆŒν•œμ„ νšŒμˆ˜ν•©λ‹ˆλ‹€.

μ˜ˆμ‹œ

GRANT SELECT ON Users TO some_user;

5. νŠΈλžœμž­μ…˜ μ œμ–΄ μ–Έμ–΄(TCL, Transaction Control Language)

  • νŠΈλžœμž­μ…˜μ„ κ΄€λ¦¬ν•˜κ³  μ œμ–΄ν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€.
    • νŠΈλžœμž­μ…˜μ€ λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ 일련의 μž‘μ—…μ„ ν•˜λ‚˜μ˜ μž‘μ—… λ‹¨μœ„λ‘œ μ²˜λ¦¬ν•˜λŠ” κ°œλ…μž…λ‹ˆλ‹€.
  • μ£Όμš” λͺ…λ Ήμ–΄
    • COMMIT: νŠΈλžœμž­μ…˜μ„ μ„±κ³΅μ μœΌλ‘œ μ™„λ£Œν•˜κ³ , λͺ¨λ“  λ³€κ²½ 사항을 λ°μ΄ν„°λ² μ΄μŠ€μ— μ €μž₯ν•©λ‹ˆλ‹€.
    • ROLLBACK: νŠΈλžœμž­μ…˜μ—μ„œ λ°œμƒν•œ λͺ¨λ“  λ³€κ²½ 사항을 μ·¨μ†Œν•©λ‹ˆλ‹€.
    • SAVEPOINT: νŠΈλžœμž­μ…˜ λ‚΄μ—μ„œ 볡ꡬ할 수 μžˆλŠ” νŠΉμ • 지점을 μ„€μ •ν•©λ‹ˆλ‹€.

μ˜ˆμ‹œ.

BEGIN TRANSACTION;
UPDATE Users SET email = 'kobe@example.com' WHERE id = 1;
COMMIT;

3️⃣ SQL의 μ£Όμš” λͺ…λ Ήμ–΄ μ˜ˆμ‹œ

1. 데이터 쑰회(SELECT)

SELECT name, email FROM Users WHERE id = 1;
  • 이 μΏΌλ¦¬λŠ” Users ν…Œμ΄λΈ”μ—μ„œ idκ°€ 1인 μ‚¬μš©μžμ˜ 이름과 이메일을 μ‘°νšŒν•©λ‹ˆλ‹€.

2. 데이터 μ‚½μž…(INSERT)

INSERT INTO Users (name, email) VALUES ('Kobe', 'kobe@example.com');
  • 이 μΏΌλ¦¬λŠ” Users ν…Œμ΄λΈ”μ— μƒˆλ‘œμš΄ μ‚¬μš©μžλ₯Ό μΆ”κ°€ν•©λ‹ˆλ‹€.

3. 데이터 μˆ˜μ •(UPDATE)

UPDATE Users SET email = 'kobe@example.com' WHERE id = 2;
  • 이 μΏΌλ¦¬λŠ” idκ°€ 2인 μ‚¬μš©μžμ˜ 이메일을 μˆ˜μ •ν•©λ‹ˆλ‹€.

4. 데이터 μ‚­μ œ(DELETE)

DELETE FROM Users WHERE id = 3;
  • 이 μΏΌλ¦¬λŠ” idκ°€ 3인 μ‚¬μš©μžλ₯Ό Users ν…Œμ΄λΈ”μ—μ„œ μ‚­μ œν•©λ‹ˆλ‹€.

4️⃣ SQL의 μž₯점.

1. 데이터 κ΄€λ¦¬μ˜ ν‘œμ€€ν™”.

  • SQL은 λŒ€λΆ€λΆ„μ˜ κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ μ‚¬μš©λ˜λŠ” ν‘œμ€€ν™”λœ μ–Έμ–΄μž…λ‹ˆλ‹€.
  • SQL을 ν•™μŠ΅ν•˜λ©΄ μ—¬λŸ¬ λ°μ΄ν„°λ² μ΄μŠ€ μ‹œμŠ€ν…œμ—μ„œ κ³΅ν†΅μ μœΌλ‘œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

2. 효율적인 데이터 검색.

  • SQL을 μ‚¬μš©ν•˜λ©΄ λ°μ΄ν„°λ² μ΄μŠ€ λ‚΄μ—μ„œ 효율적으둜 데이터λ₯Ό 검색할 수 μžˆμŠ΅λ‹ˆλ‹€.
  • λ³΅μž‘ν•œ 쑰건을 μ‚¬μš©ν•˜μ—¬ λŒ€λŸ‰μ˜ 데이터λ₯Ό λΉ λ₯΄κ²Œ μ‘°νšŒν•  수 μžˆμŠ΅λ‹ˆλ‹€.

3. κ°•λ ₯ν•œ 데이터 μ‘°μž‘.

  • SQL은 λ°μ΄ν„°μ˜ μ‚½μž…, μˆ˜μ •, μ‚­μ œμ™€ 같은 기본적인 μž‘μ—… 외에도, λ°μ΄ν„°μ˜ 집계, μ •λ ¬, κ·Έλ£Ήν™” λ“± κ°•λ ₯ν•œ 데이터 μ‘°μž‘ κΈ°λŠ₯을 μ œκ³΅ν•©λ‹ˆλ‹€.

4. 데이터 무결성 보μž₯.

  • SQL은 λ°μ΄ν„°μ˜ 무결성을 보μž₯ν•˜λŠ” λ‹€μ–‘ν•œ μ œμ•½ 쑰건(Primary Key, Foreign Key, Unique, Not Null λ“±)을 μ •μ˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

5. λŒ€κ·œλͺ¨ 데이터 처리.

  • SQL은 λŒ€λŸ‰μ˜ 데이터λ₯Ό λΉ λ₯΄κ²Œ μ²˜λ¦¬ν•˜κ³ , λ³΅μž‘ν•œ 쿼리와 연산을 μˆ˜ν–‰ν•  수 μžˆμ–΄ 데이터 뢄석과 λΉ„μ¦ˆλ‹ˆμŠ€ μΈν…”λ¦¬μ „μŠ€ μž‘μ—…μ— 널리 μ‚¬μš©λ©λ‹ˆλ‹€.

5️⃣ SQL의 단점.

1. λΉ„μ •ν˜• 데이터 처리의 ν•œκ³„.

  • SQL은 μ •ν˜•ν™”λœ ν…Œμ΄λΈ” ν˜•μ‹μ˜ 데이터 μ²˜λ¦¬λŠ” νƒμ›”ν•˜μ§€λ§Œ, λΉ„μ •ν˜• λ°μ΄ν„°λ‚˜ μœ μ—°ν•œ 데이터 ꡬ쑰λ₯Ό μ²˜λ¦¬ν•˜λŠ” λ°λŠ” ν•œκ³„κ°€ μžˆμŠ΅λ‹ˆλ‹€.
    • μ΄λŸ¬ν•œ 경우 NoSQL λ°μ΄ν„°λ² μ΄μŠ€κ°€ 더 적합할 수 μžˆμŠ΅λ‹ˆλ‹€.

2. λ³΅μž‘ν•œ 쿼리 μž‘μ„±.

  • λ³΅μž‘ν•œ 데이터 λΆ„μ„μ΄λ‚˜ λŒ€κ·œλͺ¨ 연산을 μˆ˜ν–‰ν•˜λ €λ©΄, SQL 쿼리가 맀우 λ³΅μž‘ν•΄μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€.
    • 쿼리의 μ„±λŠ₯ μ΅œμ ν™”λ₯Ό μœ„ν•΄ μƒλ‹Ήν•œ μ „λ¬Έ 지식이 ν•„μš”ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

6️⃣ SQL의 μ‚¬μš© 사둀.

1. μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜

  • μ‚¬μš©μž 정보λ₯Ό μ €μž₯ν•˜κ³  κ΄€λ¦¬ν•˜κΈ° μœ„ν•΄ κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ SQL을 μ‚¬μš©ν•©λ‹ˆλ‹€.
    • 예λ₯Ό λ“€μ–΄, μ „μžμƒκ±°λž˜ μ‚¬μ΄νŠΈμ—μ„œ μ‚¬μš©μž 계정, μ£Όλ¬Έ 정보, μ œν’ˆ 데이터λ₯Ό μ €μž₯ν•˜κ³  μ‘°νšŒν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€.

2. 데이터 뢄석.

  • λΉ„μ¦ˆλ‹ˆμŠ€ μΈν…”λ¦¬μ „μŠ€(BI) 도ꡬ와 함꼐 μ‚¬μš©ν•˜μ—¬ λŒ€λŸ‰μ˜ 데이터λ₯Ό λΆ„μ„ν•˜κ³  λ³΄κ³ μ„œλ₯Ό μƒμ„±ν•©λ‹ˆλ‹€.
  • SQL은 데이터 뢄석가가 λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ ν•„μš”ν•œ 데이터λ₯Ό 효율적으둜 μΆ”μΆœν•˜λŠ” 데 ν•„μˆ˜μ μΈ λ„κ΅¬μž…λ‹ˆλ‹€.

3. νŠΈλžœμž­μ…˜ μ‹œμŠ€ν…œ.

  • 은행 μ‹œμŠ€ν…œ, 재고 관리 μ‹œμŠ€ν…œ λ“±μ—μ„œλŠ” SQL을 μ‚¬μš©ν•˜μ—¬ λ°μ΄ν„°μ˜ 일관성을 보μž₯ν•˜κ³ , μ—¬λŸ¬ μž‘μ—…μ„ μ•ˆμ „ν•˜κ²Œ μ²˜λ¦¬ν•˜λŠ” νŠΈλžœμž­μ…˜ μ‹œμŠ€ν…œμ„ κ΅¬μΆ•ν•©λ‹ˆλ‹€.

7️⃣ μš”μ•½.

  • SQL(Structured Query Language) 은 κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ 데이터λ₯Ό κ΄€λ¦¬ν•˜κ³  μ‘°μž‘ν•˜κΈ° μœ„ν•œ ν‘œμ€€ μ–Έμ–΄μž…λ‹ˆλ‹€.
  • SQL은 데이터λ₯Ό 쑰회(SELECT), μ‚½μž…(INSERT), μˆ˜μ •(UPDATE), μ‚­μ œ(DELETE)ν•  수 있으며, λ°μ΄ν„°λ² μ΄μŠ€μ˜ ꡬ쑰λ₯Ό μ •μ˜ν•˜κ³  μ‚¬μš©μž κΆŒν•œμ„ κ΄€λ¦¬ν•˜λŠ” λ“± λ°μ΄ν„°λ² μ΄μŠ€ μš΄μ˜μ— ν•„μš”ν•œ λ‹€μ–‘ν•œ κΈ°λŠ₯을 μ œκ³΅ν•©λ‹ˆλ‹€.
  • SQL은 κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€ μ‹œμŠ€ν…œμ—μ„œ κ°€μž₯ 널리 μ‚¬μš©λ˜λ©°, 데이터 관리λ₯Ό μœ„ν•œ 핡심 기술 쀑 ν•˜λ‚˜μž…λ‹ˆλ‹€.