11 Thu

๋ฐ์ดํ„ฐ ๋ถ„์„์„ ์œ„ํ•œ ๊ณ ๊ธ‰ SQL

OT

์•ž์œผ๋กœ ๋ฐฐ์šธ ๊ฒƒ

  • DML, Data Manipulation Language

  • ERD, Entity Relationship Diagram

    • ๋ฐ์ดํ„ฐ ํƒ€์ž…

    • ERD ์ฝ๋Š”๋ฒ•

  • ์„œ๋ธŒ ์ฟผ๋ฆฌ

  • ์œˆ๋„์šฐ ํ•จ์ˆ˜

    • ์ง‘๊ณ„ ํ•จ์ˆ˜์˜ ์ผ์ข…

    • ์ฝ”ํ…Œ์—๋„ ์ข…์ข… ๋‚˜์˜ค๋Š” ์œ ํ˜•

  • MySQL ๋ง๊ณ ๋„ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋„ ๋‹ค๋ฃฐ ์˜ˆ์ •

  • ์ •๊ทœ ํฌํ˜„์‹

  • MySQL ํ•จ์ˆ˜

DML (Data Manipulation Language)

์ง€๊ธˆ๊นŒ์ง€๋Š” SELECT๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๊ธฐ๋งŒ ํ–ˆ๋Š”๋ฐ, ์ง€๊ธˆ๋ถ€ํ„ฐ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์กฐ์ž‘ํ•˜๋Š” ์ผ๊นŒ์ง€ ํ•  ๊ฒƒ

INSERT : ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€

  • ํ…Œ์ด๋ธ” ์ „์ฒด์— ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฒ•

-- INSERT INTO ํ…Œ์ด๋ธ” ๋ช… VALUES (VALUE_LIST);
INSERT INTO Salary Values ('1', 'A', '250', '2020-03-31');
  • ํŠน์ • ์ปฌ๋Ÿผ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฒ•

    • ์ด ๋•Œ ์ถ”๊ฐ€ํ•ด์ฃผ์ง€ ์•Š์€ ์ปฌ๋Ÿผ์—๋Š” ์ž๋™์œผ๋กœ Null์ด ์ถ”๊ฐ€๋œ๋‹ค

-- INSERT INTO ํ…Œ์ด๋ธ”๋ช… (COLUMN_LIST) VALUES (VALUE_LIST);
INSERT INTO Salary (Id, Salary) VALUES ('2', '550');

DESC : ๋ฐ์ดํ„ฐ ํƒ€์ž… ํ™•์ธ

  • DESC : Describe

  • DESC ํ…Œ์ด๋ธ” : ํ…Œ์ด๋ธ”์˜ structure๋ฅผ ํ™•์ธํ•œ๋‹ค

    • int : ์ •์ˆ˜

    • varchar(10) : ์ตœ๋Œ€ ๊ธธ์ด๊ฐ€ 10์ธ ๋ฌธ์ž์—ด

    • date : ๋‚ ์งœ ์‹œ๊ฐ„ํ˜• ๋ฐ์ดํ„ฐ

UPDATE : ๋ฐ์ดํ„ฐ ๊ฐฑ์‹ 

  • ์ปฌ๋Ÿผ ์ „์ฒด์— ๋ฐ์ดํ„ฐ ์—…๋ฐ์ดํŠธ

    • ์ด ๋•Œ = ๋ฅผ ์ง€๊ธˆ๊นŒ์ง€๋Š” ๋น„๊ต ์—ฐ์‚ฐ์ž๋กœ ์‚ฌ์šฉํ–ˆ๋Š”๋ฐ, SET ์—์„œ ์‚ฌ์šฉํ•˜๋Š” = ๋Š” ๋Œ€์ž…(๋˜๋Š” ํ• ๋‹น)์—ฐ์‚ฐ์ž ์ด๋‹ค.

-- UPDATE ํ…Œ์ด๋ธ”๋ช… SET ์ปฌ๋Ÿผ = ๊ฐ’;
UPDATE Salary SET Salary = Salary + 100
  • ํŠน์ • ์ปฌ๋Ÿผ์˜ ํŠน์ • ๋ฐ์ดํ„ฐ๋งŒ ๊ฐฑ์‹ ํ•˜๊ธฐ

-- UPDATE ํ…Œ์ด๋ธ”๋ช… SET ์ปฌ๋Ÿผ = ๊ฐ’ WHERE ์กฐ๊ฑด์‹;
UPDATE Salary SET Salary = Salary + 100 WHERE Id = 2;

LeetCode 627

update Salary set sex = case
    when sex = 'f' then 'm' else 'f' end

DELETE : ๋ฐ์ดํ„ฐ ์‚ญ์ œ

  • UPDATE ์™€ ๋ฌธ๋ฒ•์ด ๋น„์Šท

  • ํ…Œ์ด๋ธ” ์ „์ฒด์— ๋ฐ์ดํ„ฐ ์‚ญ์ œํ•˜๋Š” ๋ฐฉ๋ฒ•

-- DELETE FROM ํ…Œ์ด๋ธ”๋ช…;
DELETE FROM Salary
  • ํŠน์ • ๋ฐ์ดํ„ฐ๋งŒ ์‚ญ์ œํ•˜๊ธฐ

-- DELETE FROM ํ…Œ์ด๋ธ”๋ช… WHERE ์กฐ๊ฑด์‹;
DELETE FROM Salary WHERE Id = 2;

์„œ๋ธŒ์ฟผ๋ฆฌ ๋ง›๋ณด๊ธฐ

  • FROM ์ดํ•˜์˜ SELECT ๊ตฌ๋ฌธ์„ ์„œ๋ธŒ์ฟผ๋ฆฌ ๋ผ๊ณ  ํ•˜๋ฉฐ, ์ด ์ฟผ๋ฆฌ๋ฅผ daily_status ๋ผ๋Š” ํ…Œ์ด๋ธ”์ด ์žˆ๋‹ค๊ณ  ๊ฐ„์ฃผํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ์•„๋ž˜์™€ ๊ฐ™์ด FROM ์ ˆ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ WHERE ์ ˆ์—์„œ๋„ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.

SELECT daily_stats.week, AVG(daily_stats.incidents_daily)
FROM (
    SELECT week, date, COUNT(incident_id) AS incidents_daily
    FROM crimes
    GROUP BY week, date
    ) daily_status
GROUP BY daily_stats.week
SELECT *
FROM crimes
WHERE date = (SELECT MIN (date) FROM crimes)

SELECT *
FROM crimes
WHERE date IN (SELECT date FROM crimes ORDER BY date DESC LIMIT 5

DELETE WITH JOIN

  • DELETE FROM ํ…Œ์ด๋ธ” ์ด๋ผ๊ณ  ๋ฐฐ์› ์ง€๋งŒ JOIN์„ ํ•  ๋•Œ์—๋Š” DELETE ํ…Œ์ด๋ธ” FROM ํ…Œ์ด๋ธ” JOIN ... ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค. ์ด๋Š” JOIN ํ•  ํ…Œ์ด๋ธ” ์—์„œ ์กฐ๊ฑด์ด ๋งž๋”๋ผ๋„ ์„ ํƒ์ ์œผ๋กœ ์ง€์šธ ํ…Œ์ด๋ธ”์„ ๊ฒฐ์ •ํ•˜๊ธฐ ์œ„ํ•ด์„œ์ด๋‹ค.

  • ์‰ฝ๊ฒŒ ๋งํ•˜๋ฉด ๋‘ ๊ฐœ์˜ ํ…Œ์ด๋ธ”์ด JOIN ๋˜์—ˆ์„ ๋•Œ ๋‘ ๊ฐœ์˜ ํ…Œ์ด๋ธ”์—์„œ ๋ชจ๋‘ ์‚ญ์ œ ํ• ์ง€, ์–ด๋А ํ•œ์ชฝ์—์„œ ์‚ญ์ œํ• ์ง€๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๊ธฐ ์œ„ํ•จ

DELETE t1, t2
FROM t1
     INNER JOIN t2 ON t1.id = t2.ref
WHERE t1.id = 1;

LeetCode 196

  • ์„œ๋ธŒ์ฟผ๋ฆฌ ๋˜๋Š” ์ด๋„ˆ ์กฐ์ธ์„ ์ด์šฉํ•œ ๋”œ๋ฆฌํŠธ์˜ ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ํ’€ ์ˆ˜ ์žˆ๋‹ค.

delete from person
where id not in (
    select sub.min_id
    from (
        select email, min(id) as min_id
        from person
        group by email ) sub )
delete p1
from person as p1
    inner join person as p2 on p1.email = p2.email
    where p1.id > p2.id

ERD (Entity Relationship Diagram)

๊ฐœ์ฒด๋“ค ๊ฐ„ ๊ด€๊ณ„๋ฅผ ๋ณด๊ธฐ ์œ„ํ•œ ์ง€๋„

ERD์˜ 3๊ฐ€์ง€ ์š”์†Œ

  • Entity

    • ํ…Œ์ด๋ธ”์„ ์˜๋ฏธ ํ•œ๋‹ค๊ณ  ๋ด๋„ ๋ฌด๋ฐฉ

  • Attribute

    • Entity์˜ ํŠน์ง•. ์ปฌ๋Ÿผ์„ ์˜๋ฏธ ํ•œ๋‹ค๊ณ  ๋ด๋„ ๋ฌด๋ฐฉ

    • ์ปฌ๋Ÿผ ์ด๋ฆ„๊ณผ Key์˜ ๋‘ ํ•ญ๋ชฉ์œผ๋กœ ๋‚˜๋ˆ„์–ด์ ธ ์žˆ์Œ

      • ์„ธ ํ•ญ๋ชฉ์œผ๋กœ ๋‚˜๋ˆ„๋ฉด ์ปฌ๋Ÿผ์˜ ๋ฐ์ดํ„ฐ ํƒ€์ž…๊นŒ์ง€ ํฌํ•จ

    • Key

      • ์‹๋ณ„์ž๋ผ๊ณ ๋„ ๋ถˆ๋ฆฐ๋‹ค

      • PK : Primary key

        • PK์—๋Š” ํ…Œ์ด๋ธ” ๋‹น ํ•˜๋‚˜

        • ๊ทธ๋ฆฌ๊ณ  ์ค‘๋ณต๊ฐ’์ด ์—†๋‹ค

      • FK : Foreign key

        • ์™ธ๋ถ€ ํ‚ค๋ผ๊ณ ๋„ ํ•˜๋ฉฐ ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์—์„œ ์ฐธ์กฐ๋˜๋Š” ๊ฐ’์ด๋‹ค.

    • one to many์˜ ์—ฐ๊ฒฐ์„ ์€ one์ชฝ์— ์„ธ๋กœ์„  ๋‘๊ฐœ, many์ชฝ์— ์‚ผ์„ ์ด ๋˜์–ด์žˆ๋‹ค

  • Relationship

๋ฐ์ดํ„ฐ ํƒ€์ž…

  • ์ˆซ์ž

    • ์ •์ˆ˜ : tinyint, smallint, mediumint, int ,bigint

      • ์ •์ˆ˜์˜ ๋ฒ”์œ„ ์ฐจ์ด๋งŒ ์žˆ์Œ

    • ์‹ค์ˆ˜ : decimal, double, float

      • ์‹ค์ˆ˜์˜ ๋ฒ”์œ„ ์ฐจ์ด๋งŒ ์žˆ์Œ

  • ๋ฌธ์ž : varchar, char

    • various character, character์˜ ์•ฝ์ž

  • ๋‚ ์งœ, ์‹œ๊ฐ„

    • date : 1010-01-01 ~ 9999-12-31

    • datetime : 1010-01-01 00:00:00.000000 ~ 9999-12-31 23:59:59.999999

    • timestamp() = datetime() + timezone

    • ์ด ๋•Œ OrderDate๋Š” varchar์ด๋‹ค

      • ex) 12/8/1968

      • ๋”ฐ๋ผ์„œ date_add ๋“ฑ์˜ ํ•จ์ˆ˜๋Š” ์‚ฌ์šฉ ๋ถˆ๊ฐ€

      • ์ด๋Ÿด ๋•Œ๋Š” str_to_date() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•จ(mysql ๊ธฐ์ค€)

  • ์ฐธ, ๊ฑฐ์ง“

    • boolean

Last updated

Was this helpful?