๋ฐ์ดํฐ ์กฐํํ๊ธฐ
๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์จ๋ค
SELECT
*
FROM
customers;
SQL
๋ณต์ฌ
ํน์ ์ด ๊ฐ์ ธ์ค๊ธฐ
SELECT
CustomerName,
ContactName
FROM
Customers;
SQL
๋ณต์ฌ
๋ณ์นญ ์ฌ์ฉํ๊ธฐ
SELECT
CustomerName AS ๊ณ ๊ฐ,
Address AS ์ฃผ์,
PostalCode AS ์ฐํธ๋ฒํธ
FROM
Customers;
SQL
๋ณต์ฌ
SELECT์์ ์ง์ ํ ๋ณ์นญ์ WHERE๊ตฌ์์ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, ORDER BY๊ตฌ์์๋ ์ฌ์ฉํ ์ ์๋ค. SQL ๊ตฌ๋ฌธ ์ฒ๋ฆฌ ์์๋ฅผ ์๊ฐํด๋ณด์.
์ฐ์ต
๋ฐ์ดํฐ๋ฅผ ํ์ฉํ์ฌ ์๋ ์๊ตฌ์ฌํญ์ ํด๊ฒฐํ๋ค.
DROP TABLE IF EXISTS mst_users;
CREATE TABLE mst_users(
user_id varchar(255)
, sex varchar(255)
, birth_date varchar(255)
, register_date varchar(255)
, register_device varchar(255)
, withdraw_date varchar(255)
);
INSERT INTO mst_users
VALUES
('U001', 'M', '1977-06-17', '2020-10-01', 'pc' , NULL )
, ('U002', 'F', '1953-06-12', '2020-10-01', 'sp' , '2020-10-10')
, ('U003', 'M', '1965-01-06', '2020-10-01', 'pc' , NULL )
, ('U004', 'F', '1954-05-21', '2020-10-05', 'pc' , NULL )
, ('U005', 'M', '1987-11-23', '2020-10-05', 'sp' , NULL )
, ('U006', 'F', '1950-01-21', '2020-10-10', 'pc' , '2020-10-10')
, ('U007', 'F', '1950-07-18', '2020-10-10', 'app', NULL )
, ('U008', 'F', '2006-12-09', '2020-10-10', 'sp' , NULL )
, ('U009', 'M', '2004-10-23', '2020-10-15', 'pc' , NULL )
, ('U010', 'F', '1987-03-18', '2020-10-16', 'pc' , NULL )
;
DROP TABLE IF EXISTS action_log;
CREATE TABLE action_log(
session varchar(255)
, user_id varchar(255)
, action varchar(255)
, category varchar(255)
, products varchar(255)
, amount integer
, stamp varchar(255)
);
INSERT INTO action_log
VALUES
('989004ea', 'U001', 'purchase', 'drama' , 'D001,D002', 2000, '2020-11-03 18:10:00')
, ('989004ea', 'U001', 'view' , NULL , NULL , NULL, '2020-11-03 18:00:00')
, ('989004ea', 'U001', 'favorite', 'drama' , 'D001' , NULL, '2020-11-03 18:00:00')
, ('989004ea', 'U001', 'review' , 'drama' , 'D001' , NULL, '2020-11-03 18:00:00')
, ('989004ea', 'U001', 'add_cart', 'drama' , 'D001' , NULL, '2020-11-03 18:00:00')
, ('989004ea', 'U001', 'add_cart', 'drama' , 'D001' , NULL, '2020-11-03 18:00:00')
, ('989004ea', 'U001', 'add_cart', 'drama' , 'D001' , NULL, '2020-11-03 18:00:00')
, ('989004ea', 'U001', 'add_cart', 'drama' , 'D001' , NULL, '2020-11-03 18:00:00')
, ('989004ea', 'U001', 'add_cart', 'drama' , 'D001' , NULL, '2020-11-03 18:00:00')
, ('989004ea', 'U001', 'add_cart', 'drama' , 'D002' , NULL, '2020-11-03 18:01:00')
, ('989004ea', 'U001', 'add_cart', 'drama' , 'D001,D002', NULL, '2020-11-03 18:02:00')
, ('989004ea', 'U001', 'purchase', 'drama' , 'D001,D002', 2000, '2020-11-03 18:10:00')
, ('47db0370', 'U002', 'add_cart', 'drama' , 'D001' , NULL, '2020-11-03 19:00:00')
, ('47db0370', 'U002', 'purchase', 'drama' , 'D001' , 1000, '2020-11-03 20:00:00')
, ('47db0370', 'U002', 'add_cart', 'drama' , 'D002' , NULL, '2020-11-03 20:30:00')
, ('87b5725f', 'U001', 'add_cart', 'action', 'A004' , NULL, '2020-11-04 12:00:00')
, ('87b5725f', 'U001', 'add_cart', 'action', 'A005' , NULL, '2020-11-04 12:00:00')
, ('87b5725f', 'U001', 'add_cart', 'action', 'A006' , NULL, '2020-11-04 12:00:00')
, ('9afaf87c', 'U002', 'purchase', 'drama' , 'D002' , 1000, '2020-11-04 13:00:00')
, ('9afaf87c', 'U001', 'purchase', 'action', 'A005,A006', 1000, '2020-11-04 15:00:00')
;
DROP TABLE IF EXISTS purchase_log;
CREATE TABLE purchase_log(
dt varchar(255)
, order_id integer
, user_id varchar(255)
, purchase_amount integer
);
INSERT INTO purchase_log
VALUES
('2019-01-01', 1, 'rhwpvvitou', 13900)
, ('2019-01-01', 2, 'hqnwoamzic', 10616)
, ('2019-01-02', 3, 'tzlmqryunr', 21156)
, ('2019-01-02', 4, 'wkmqqwbyai', 14893)
, ('2019-01-03', 5, 'ciecbedwbq', 13054)
, ('2019-01-03', 6, 'svgnbqsagx', 24384)
, ('2019-01-03', 7, 'dfgqftdocu', 15591)
, ('2019-01-04', 8, 'sbgqlzkvyn', 3025)
, ('2019-01-04', 9, 'lbedmngbol', 24215)
, ('2019-01-04', 10, 'itlvssbsgx', 2059)
, ('2019-01-05', 11, 'jqcmmguhik', 4235)
, ('2019-01-05', 12, 'jgotcrfeyn', 28013)
, ('2019-01-05', 13, 'pgeojzoshx', 16008)
, ('2019-01-06', 14, 'msjberhxnx', 1980)
, ('2019-01-06', 15, 'tlhbolohte', 23494)
, ('2019-01-06', 16, 'gbchhkcotf', 3966)
, ('2019-01-07', 17, 'zfmbpvpzvu', 28159)
, ('2019-01-07', 18, 'yauwzpaxtx', 8715)
, ('2019-01-07', 19, 'uyqboqfgex', 10805)
, ('2019-01-08', 20, 'hiqdkrzcpq', 3462)
, ('2019-01-08', 21, 'zosbvlylpv', 13999)
, ('2019-01-08', 22, 'bwfbchzgnl', 2299)
, ('2019-01-09', 23, 'zzgauelgrt', 16475)
, ('2019-01-09', 24, 'qrzfcwecge', 6469)
, ('2019-01-10', 25, 'njbpsrvvcq', 16584)
, ('2019-01-10', 26, 'cyxfgumkst', 11339)
;
DROP TABLE IF EXISTS purchase_detail_log;
CREATE TABLE purchase_detail_log(
dt varchar(255)
, order_id integer
, user_id varchar(255)
, item_id varchar(255)
, price integer
, category varchar(255)
, sub_category varchar(255)
);
INSERT INTO purchase_detail_log
VALUES
('2019-12-01', 1, 'U001', 'D001', 2000, 'ladys_fashion', 'bag' )
, ('2019-12-08', 95, 'U002', 'D002', 3000, 'dvd' , 'documentary')
, ('2019-12-09', 168, 'U003', 'D003', 5000, 'game' , 'accessories')
, ('2019-12-11', 250, 'U004', 'D004', 8000, 'ladys_fashion', 'jacket' )
, ('2019-12-11', 325, 'U005', 'D005', 2000, 'mens_fashion' , 'jacket' )
, ('2019-12-12', 400, 'U006', 'D006', 4000, 'cd' , 'classic' )
, ('2019-12-11', 475, 'U007', 'D007', 4000, 'book' , 'business' )
, ('2019-12-10', 550, 'U008', 'D008', 6000, 'food' , 'meats' )
, ('2019-12-10', 625, 'U009', 'D009', 6000, 'food' , 'fish' )
, ('2019-12-11', 700, 'U010', 'D010', 2000, 'supplement' , 'protain' )
;
SQL
๋ณต์ฌ
1. action_log ์ค session๊ณผ action ์ ๋ณด๋ฅผ ์กฐํํ๋ค.
2. mst_users ์ ๋ณด ์ค user_id, sex (AS ์ฑ๋ณ), birth_date(AS ์์ผ)์ ์กฐํํ๋ค.
๊ฒ์ ์กฐ๊ฑด
ํ์ ์ ํํ ๋๋ WHERE ๊ตฌ๋ฅผ, ์ด์ ์ ํํ ๋๋ SELECT ๊ตฌ๋ฅผ ์ฌ์ฉํ๋ค.
SELECT [์ด1, ์ด2, ...] FROM [ํ
์ด๋ธ๋ช
] WHERE [์กฐ๊ฑด์]
Plain Text
๋ณต์ฌ
๋น๊ต ์ฐ์ฐ์
โข
๋์๊ด๊ณ
1 < 2 < 10 < 100
'1988-11-30' < '2020-01-01' < '2020-03-02'
'์ฐ์ํํ
ํฌ์ฝ์ค' < '์ฐ์ํํ์ ๋ค' < 'ํฌ๋น'
SQL
๋ณต์ฌ
์์ ์๋ฃํ
์์นํ ์์ย : 1 100 -3.8
๋ฌธ์์ด ์์ย : 'ABC' '์ฐ์ํํ์ ๋ค'
๋ ์ง์๊ฐํ ์์ย : '2020-03-02' '2020-03-02 19:00:00'
a. ๊ณ ๊ฐ ์ค ๊ตญ๊ฐ๊ฐ ๋ ์ผ์ธ ๊ฒฝ์ฐ
SELECT * FROM Customers WHERE Country = 'Germany';
SQL
๋ณต์ฌ
b. ์ฃผ๋ฌธ ์ค ๋ฐฐ์ก์ ์ฒด ID๊ฐ 2๊ฐ ์๋ ๊ฒฝ์ฐ
SELECT * FROM Orders WHERE ShipperID <> 2;
SQL
๋ณต์ฌ
c. ์ฃผ๋ฌธ ์์ธ ๋ด์ญ ์ค ์๋์ด 100์ ์ด๊ณผํ๋ ๊ฒฝ์ฐ
SELECT * FROM OrderDetails WHERE Quantity > 100;
SQL
๋ณต์ฌ
d. ์ง์ ์ค ์ฑ์ด O ์ดํ์ธ ๊ฒฝ์ฐ
SELECT * FROM Employees WHERE FirstName >= 'O';
SQL
๋ณต์ฌ
e. ์ง์ ์ค ์์ผ์ด 1950๋ 01์ 01์ผ ์ด์ ์ธ ๊ฒฝ์ฐ
SELECT * FROM Employees WHERE BirthDate <= '1950-01-01';
SQL
๋ณต์ฌ
ํจํด ๋งค์นญ -ย LIKE
# text : 'SQL ๊ฐ์ - ๋ ๋ฒจ2'
SELECT * FROM [ํ
์ด๋ธ๋ช
] WHERE text LIKE 'SQL%';
# text : '์ฐ์ํ ํ
ํฌ์ฝ์ค์์ ์งํํ๋ ์
๋ฌธ์ฉ SQL'
SELECT * FROM [ํ
์ด๋ธ๋ช
] WHERE text LIKE '%SQL';
# text : 'LIKE ๋ฌธ์ SQL์์ ์ฌ์ฉํ๋ ...'
SELECT * FROM [ํ
์ด๋ธ๋ช
] WHERE text LIKE '%SQL%';
SQL
๋ณต์ฌ
๊ทธ ์ธ ์กฐํ ์กฐ๊ฑด
์กฐ๊ฑด ์กฐํฉํ๊ธฐ -ย AND / OR / NOT
# ๋ ์ฟผ๋ฆฌ์ ๊ฒฐ๊ณผ๋ ๋ค๋ฅด๋ค. ์์ ๊ฒฝ์ฐ, WHERE 2๋ ํญ์ TRUE ์กฐ๊ฑด์ด๋ค.
SELECT * FROM [ํ
์ด๋ธ๋ช
] WHERE no = 1 OR 2;
SELECT * FROM [ํ
์ด๋ธ๋ช
] WHERE no = 1 OR no = 2;
SQL
๋ณต์ฌ
โข
์ฐ์ ์์ (AND๊ฐ OR์ ์ฐ์ )
# ์ด ๊ฒฝ์ฐ, a = 2 AND b = 1 ๊ฐ ๋จผ์ ๊ณ์ฐ
SELECT * FROM [ํ
์ด๋ธ๋ช
] WHERE a = 1 OR a = 2 AND b = 1 OR b = 2;
# ๋ฐ๋ผ์ ์๋์ ๊ฐ์ด ์์ฑํด์ผ ํ๋ค.
SELECT * FROM [ํ
์ด๋ธ๋ช
] WHERE (a = 1 OR a = 2) AND (b = 1 OR b = 2);
SQL
๋ณต์ฌ
a. ์ฃผ๋ฌธ ์ค ์ฃผ๋ฌธ์ผ์๊ฐ 1996๋ 07์ 01์ผ๋ถํฐ 1996๋ 07์ 05์ผ ์ฌ์ด์ธ ๊ฒฝ์ฐ
SELECT * FROM Orders WHERE OrderDate BETWEEN '1996-07-01' AND '1996-07-05';
SQL
๋ณต์ฌ
b. ๋ฌผํ ์ค ์นดํ ๊ณ ๋ฆฌ ID๊ฐ (5, 6)์ ํด๋นํ๋ ๊ฒฝ์ฐ
SELECT * FROM Products WHERE CategoryID IN (5, 6);
SQL
๋ณต์ฌ
๊ฒ์ ๊ฒฐ๊ณผ ์ ๋ ฌํ๊ธฐ -ย ORDER BY
SELECT [์ด1, ์ด2, ...] FROM [ํ
์ด๋ธ๋ช
] ORDER BY [์ด1, ์ด2, ...] { ASC | DESC }
SQL
๋ณต์ฌ
๊ฒ์ ๊ฒฐ๊ณผ ์ผ๋ถ๋ง ์ถ๋ ฅํ๊ธฐ -ย LIMIT
SELECT [์ด1, ์ด2, ...] FROM [ํ
์ด๋ธ๋ช
] LIMIT [ํ์]
SQL
๋ณต์ฌ
a. ๊ณ ๊ฐ ์ ๋ณด๋ฅผ ๊ตญ๊ฐ๋ณ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ
SELECT * FROM Customers ORDER BY Country;
SQL
๋ณต์ฌ
b. ์ํ ์ ๋ณด๋ฅผ ๊ฐ๊ฒฉ๋ณ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌ ํ ์์ 5๊ฐ ์กฐํ
SELECT * FROM Products ORDER BY Price DESC LIMIT 5;
SQL
๋ณต์ฌ
๋ฐ์ดํฐ ๊ฐ๊ณตํ๊ธฐ
a. ์ฌ์น์ฐ์ฐ
# ์ฐ์ ์์๊ฐ ๋ค๋ฅธ ๊ฒฝ์ฐ์ ์ฐ์ฐ
# + ๋ณด๋ค * ์ ์ฐ์ ์์๊ฐ ๋๋ค. ์ฐ์ ์์๊ฐ ๊ฐ๋ค๋ฉด ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ผ๋ก ๊ณ์ฐํ๋ค.
SELECT 1 - 2 + 2 * 3;
# ๋๋จธ์ง ๊ฐ ๋ฐํํ๊ธฐ
SELECT MOD(10, 3)
# ๋ฐ์ฌ๋ฆผํ๊ธฐ
SELECT ROUND(30.60, 1)
SQL
๋ณต์ฌ
b. ๋ฌธ์์ด ์ฐ์ฐ
# ๋ฌธ์์ด ํฉ์น๊ธฐ
SELECT CONCAT('์ฐ์ํ', 'ํ์ ๋ค')
# ๋ฌธ์์ด ์๋ฅด๊ธฐ
SELECT SUBSTRING('20190422', 1, 4)
SQL
๋ณต์ฌ
c. ๋ ์ง ์ฐ์ฐ
๋ฐ์ดํฐ ์ง๊ณํ๊ธฐ
a. ์ง๊ณํจ์
# ํ ๊ฐ์ ๊ตฌํ๊ธฐ
SELECT COUNT(*) FROM [ํ
์ด๋ธ๋ช
]
# ์ค๋ณต ์ ๊ฑฐํ๊ธฐ
SELECT DISTINCT [์ด๋ช
] FROM [ํ
์ด๋ธ๋ช
]
# SUM, AVG, MIN, MAX
SELECT SUM([์ด๋ช
]) FROM [ํ
์ด๋ธ๋ช
]
SQL
๋ณต์ฌ
b. GROUP BY
โข
์ง๊ณํจ์๋ง ์ฌ์ฉํ๋ฉด, ํ
์ด๋ธ ์ ์ฒด ํน์ WHERE ๊ตฌ๋ก ๊ฒ์ํ ํ์ด ๊ฒ์์ ๋์์ด ๋๋ค. ์ด์ ๊ฐ์ ๊ธฐ์ค์ผ๋ก ๊ทธ๋ฃนํํ์ฌ ์ง๊ณํจ์์ ๋๊ฒจ์ฃผ๊ธฐ ์ํด์๋ 'GROUP BY' ๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.
SELECT Country, COUNT(*) AS CountByCountry FROM [Customers] GROUP BY Country
Plain Text
๋ณต์ฌ
c. HAVING
โข
์ง๊ณํจ์๋ ์๋์ ๊ฐ์ดย WHEREย ์กฐ๊ฑด์์์๋ ์ฌ์ฉํ ์ ์๋ค. (์๋ ์ฟผ๋ฆฌ๋ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค)ย GROUP BY์ย WHERE ์ฒ๋ฆฌ ์์๋ฅผ ์๊ฐํด๋ณด์.
SELECT Country, COUNT(Country) AS CountByCountry FROM [Customers]
WHERE COUNT(Country) = 1 GROUP BY Country
Plain Text
๋ณต์ฌ
โข
HAVING์ ์ฌ์ฉํ๋ฉด ๋๋ค.
SELECT Country, COUNT(Country) AS CountByCountry FROM [Customers]
GROUP BY Country HAVING COUNT(Country) = 1
Plain Text
๋ณต์ฌ
โข
GROUP BY์์ ์ง์ ํ ์ด ์ด์ธ์ ์ด์ ์ง๊ณํจ์๋ฅผ ๋ฐ๋์ ์ฌ์ฉํด์ผ ํ๋ค. ๊ทธ๋ฃนํํ์ง ์์ ๊ฒฝ์ฐ, ๊ฐ ์งํฉ ์ค ์ด๋ ๊ฐ์ ์ถ๋ ฅํด์ผ ํ ์ง ๋ชจ๋ฅด๊ธฐ ๋๋ฌธ์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
โข
์ง๊ณํจ์๋ฅผ ํ๋๋ ์ฌ์ฉํ์ง ์์ ๋,ย SELECT DISTINCT์ ๋์ผํ๊ฒ ์ํ๋๋ค.
๋ค์, SQL๋ฌธ ์คํ์์๋ฅผ ์ดํด๋ณด์.
5) SELECT city AS ๋์, COUNT(city) AS ์ง๊ณ
1) FROM user
2) WHERE user.age >= 18
3) GROUP BY city
4) HAVING city >= 'b'
6) ORDER BY city
1. FROM์์ ๋ฐ์ดํฐ ์งํฉ์ ๋ง๋ ๋ค.
2. WHERE๋ FROM์์ ๋ง๋ ๋ฐ์ดํฐ ์งํฉ์ ์กฐ๊ฑด์ ๋ง๊ฒ ๊ฑธ๋ฌ๋ธ๋ค.
3. GROUP BY๋ WHERE์์ ํํฐ๋งํ (์กฐ๊ฑด์ ๋ง๋ ๋ฐ์ดํฐ๋ฅผ ๊ฑธ๋ฌ๋ธ) ๋ฐ์ดํฐ๋ฅผ ๊ทธ๋ฃนํํ๋ค.
4. HAVING์ GROUP BY์์ ์ง๊ณํ ๋ฐ์ดํฐ ์งํฉ์ ๋ค์ ์กฐ๊ฑด์ ๋ง๊ฒ ํํฐ๋งํ๋ค.
5. SELECT๋ ๊ทธ๋ฃนํํ๊ณ ํํฐ๋งํ ๋ฐ์ดํฐ ์งํฉ์ ์ง๊ณํ๋ค.
6. ORDER BY๋ ์ง๊ณํ ๋ฐ์ดํฐ ์งํฉ์ ์ ๋ ฌํ๋ค.
Plain Text
๋ณต์ฌ
์ฐ์ต
๋ฐ์ดํฐ๋ฅผ ํ์ฉํ์ฌ ์๋์ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋๋ก ์ฟผ๋ฆฌ๋ฌธ์ ์์ฑํด๋ณธ๋ค.
DROP TABLE IF EXISTS purchase_log;
CREATE TABLE purchase_log(
dt varchar(255)
, order_id integer
, user_id varchar(255)
, purchase_amount integer
);
INSERT INTO purchase_log
VALUES
('2014-01-01', 1, 'rhwpvvitou', 13900)
, ('2014-01-01', 2, 'hqnwoamzic', 10616)
, ('2014-01-02', 3, 'tzlmqryunr', 21156)
, ('2014-01-02', 4, 'wkmqqwbyai', 14893)
, ('2014-01-03', 5, 'ciecbedwbq', 13054)
, ('2014-01-03', 6, 'svgnbqsagx', 24384)
, ('2014-01-03', 7, 'dfgqftdocu', 15591)
, ('2014-01-04', 8, 'sbgqlzkvyn', 3025)
, ('2014-01-04', 9, 'lbedmngbol', 24215)
, ('2014-01-04', 10, 'itlvssbsgx', 2059)
, ('2014-01-05', 11, 'jqcmmguhik', 4235)
, ('2014-01-05', 12, 'jgotcrfeyn', 28013)
, ('2014-01-05', 13, 'pgeojzoshx', 16008)
, ('2014-01-06', 14, 'msjberhxnx', 1980)
, ('2014-01-06', 15, 'tlhbolohte', 23494)
, ('2014-01-06', 16, 'gbchhkcotf', 3966)
, ('2014-01-07', 17, 'zfmbpvpzvu', 28159)
, ('2014-01-07', 18, 'yauwzpaxtx', 8715)
, ('2014-01-07', 19, 'uyqboqfgex', 10805)
, ('2014-01-08', 20, 'hiqdkrzcpq', 3462)
, ('2014-01-08', 21, 'zosbvlylpv', 13999)
, ('2014-01-08', 22, 'bwfbchzgnl', 2299)
, ('2014-01-09', 23, 'zzgauelgrt', 16475)
, ('2014-01-09', 24, 'qrzfcwecge', 6469)
, ('2014-01-10', 25, 'njbpsrvvcq', 16584)
, ('2014-01-10', 26, 'cyxfgumkst', 11339)
;
SQL
๋ณต์ฌ
์ถ๊ฐ ์ฐ์ต
โข
์๋ ์๊ตฌ์ฌํญ์ ํด๊ฒฐํ๊ธฐ ์ํ SQL๋ฌธ์ ์์ฑํ์ธ์.์ค์ต ์ฌ์ดํธ๋ฅผ ํ์ฉํ์ธ์.
1.
ํ๋ฆฌ์ ๋ฐ๋ ๊ณ ๊ฐ์ ๊ณ ๊ฐ ์ด๋ฆ๊ณผ ์ฃผ์, ๋์๋ฅผ ์กฐํํ๋ค.
2.
์ํ ๊ฐ๊ฒฉ์ด 50 ~ 70 ์ฌ์ด์ธ ์ํ ์ค ์นดํ
๊ณ ๋ฆฌ ID๊ฐ 7์ดํ์ธ ์ํ์ ์ด๋ฆ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ๋ค.
3.
์ง์ ์ค BA ํ์๋ฅผ ๋ฐ์ ์ฌ๋ ์ค ๋์ด๊ฐ ์ด๋ฆฐ 3๋ช
์ FirstName, LastName์ ์ถ๋ ฅํ๋ค.
4.
๊ณต๊ธ์
์ ์ ๋ณด๋ฅผ ๊ตญ๊ฐ, ๋์, ์ฃผ์, ์ฐํธ๋ฒํธ ์์ผ๋ก ์ ๋ ฌํ๊ณ ํด๋น ์ ๋ณด๋ง ์ถ๋ ฅํ๋ค. ์ด ๋ ์ฃผ์์ ์ผํ(,)์ ์จ์ (.)์ด ์๋ ๊ฒฝ์ฐ๋ ์ ์ธํ๋ค.
์ฟผ๋ฆฌ๋ฅผ ์ค์ฒฉํ์
โข
์ฟผ๋ฆฌ๋ฅผ ์คํํ ๊ฒฐ๊ณผ ๋ฐ์ดํฐ๋ ๋ฆด๋ ์ด์
์ผ๋ก ํํ๋๋ค. ๋ฐ๋ผ์ ์ฟผ๋ฆฌ๋ฅผ ์กฐํฉํด ์กฐ๊ธ ๋ ๋ณต์กํ ์ ์ด๋ฅผ ํํํ ์ ์๋ค.
# sample ๋ฐ์ดํฐ ์ค a ์ด์ ์ต์๊ฐ์ ์๋์ ๊ฐ์ด ๊ฒ์ํ ์ ์๋ค.
SELECT MIN(a) FROM sample;
# ์ต์๊ฐ์ ๊ฐ์ง๋ ํ์ ์๋์ ๊ฐ์ด ์ญ์ ํ ์ ์๋ค.
DELETE FROM sample WHERE a = (SELECT MIN(a) FROM sample);
SQL
๋ณต์ฌ
a. ์ค์นผ๋ผ ์๋ธ์ฟผ๋ฆฌ : SELECT ์ ์ ์ถ๊ฐ๋ก ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ
โข
์ค์นผ๋ผ ๊ฐ์ด๋,ย SELECTย ๋ช
๋ น์ ๊ฒฐ๊ณผ๊ฐ ํ๋์ ๊ฐ์ ์๋ฏธํ๋ค.
SELECT (SELECT COUNT(*) FROM [Customers] WHERE Country = 'Germany') AS GermanyCount,
(SELECT COUNT(*) FROM [Customers] WHERE Country = 'Mexico') AS MexicoCount
SQL
๋ณต์ฌ
b. ์ธ๋ผ์ธ๋ทฐ ์๋ธ์ฟผ๋ฆฌ : FROM ์ ์์ ํ ์ด๋ธ๋ค์ด ์๋ ์์น ๊ดํธ ์์ ์์ฑํ๋ ๊ฒ
SELECT * FROM (SELECT FirstName, LastName FROM [Employees] WHERE EmployeeID < 10)
SQL
๋ณต์ฌ
c. ์๋ธ์ฟผ๋ฆฌ : WHERE ์ ์ ์ถ๊ฐ๋ก ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ
SELECT * FROM [OrderDetails] WHERE Quantity = (SELECT MAX(Quantity) FROM [OrderDetails])
SQL
๋ณต์ฌ
์๊ด์๋ธ์ฟผ๋ฆฌ
โข
์๋ธ์ฟผ๋ฆฌ์ ๋ถ๋ชจ์ฟผ๋ฆฌ๊ฐ ์๋ก ์ฐ๊ด๋ ๊ฒฝ์ฐ, ๋ ํ
์ด๋ธ์ ๊ฑธ์ณ ์กฐ์ํ ์ ์๋ค.
a. EXISTS
DELETE FROM [Customers] WHERE EXISTS (SELECT * FROM [Orders] WHERE OrderDate >= "1996-07-08")
SQL
๋ณต์ฌ
b. IN
โข
์ค์นผ๋ผ ๊ฐ๋ผ๋ฆฌ ๋น๊ตํ ๋๋ = ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ์ง๋ง, ์งํฉ์ ๋น๊ตํ ๋ ์ฌ์ฉํ ์๋ ์๋ค.ย IN์ ํ์ฉํ๋ฉด ์งํฉ ์์ ๊ฐ์ด ์กด์ฌํ๋์ง ํ์ธํ ์ ์๋ค.
SELECT * FROM [Customers] WHERE Country IN ('Germany', 'UK')
SQL
๋ณต์ฌ
๋ณต์์ ํ ์ด๋ธ ๋ค๋ฃจ๊ธฐ
โข
๊ธฐ๋ณธ์ ์ผ๋กย JOIN์ย INNER JOIN๊ณผ ๊ฐ๋ค.ย LEFT JOIN์ย LEFT OUTER JOIN๊ณผ ๊ฐ๋ค.
a. ํฉ์งํฉ
โข
UNION์ ๋ ๊ฐ์ SELECT ๋ช
๋ น์ ํ๋๋ก ์ฐ๊ณํด(์ค๋ณต ์ ๊ฑฐ), ์ง์ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์๋ค. ์ด ๋ ์ด ๊ตฌ์ฑ์ ๊ฐ์์ผ ํ๋ฉฐ,ย ORDER BYย ๋ ๋ง์ง๋ง SELECT ๋ช
๋ น์๋ง ์ง์ ํ ์ ์๋ค.
SELECT Country FROM [Customers] UNION SELECT Country FROM [Suppliers] ORDER BY Country
SQL
๋ณต์ฌ
โข
๋ชจ๋ ๊ฒฐ๊ณผ๊ฐ์ ์ป๊ณ ์ถ๋ค๋ฉดย UNION ALL๋ฅผ ์ฌ์ฉํ๋ค.
SELECT Country FROM [Customers] UNION ALL SELECT Country FROM [Suppliers] ORDER BY Country
SQL
๋ณต์ฌ
b. ๋ด๋ถ๊ฒฐํฉ
โข
๊ณฑ์งํฉ์์ ํ์ํ ์กฐํฉ๋ง ๊ฒ์ํ๋ ๋ฐฉ์
SELECT * FROM [Products], [Employees] WHERE [Employees].EmployeeID = [Products].SupplierID
SQL
๋ณต์ฌ
โข
INNER JOIN์ ์ฌ์ฉํ ๋ฐฉ์
SELECT * FROM [Products] INNER JOIN [OrderDetails] ON Products.ProductID = OrderDetails.ProductID
SQL
๋ณต์ฌ
c. ์ธ๋ถ๊ฒฐํฉ
# ์ด๋ ํ ์ชฝ์๋ง ์กด์ฌํ๋ ๋ฐ์ดํฐํ์ ๊ธฐ์ค์ผ๋ก ๊ฒ์ํ๋ค. ๋ฐ๋ผ์ NULL ๊ฐ์ด ์์ ์ ์๋ค.
# ์๋ ๋ ์ฟผ๋ฆฌ์ ๊ฒฐ๊ณผ๋ ๊ฐ๋ค.
SELECT * FROM [Products] LEFT JOIN [Employees] ON [Employees].EmployeeID = [Products].SupplierID
SELECT * FROM [Employees] RIGHT JOIN [Products] ON [Employees].EmployeeID = [Products].SupplierID
SQL
๋ณต์ฌ
์ฐ์ต
๋ฐ์ดํฐ๋ฅผ ํ์ฉํ์ฌ ์๋์ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋๋ก ์ฟผ๋ฆฌ๋ฌธ์ ์์ฑํด๋ณธ๋ค.
DROP TABLE IF EXISTS categories;
CREATE TABLE categories (
category_id integer
, name varchar(255)
);
INSERT INTO categories
VALUES
(1, 'dvd' )
, (2, 'cd' )
, (3, 'book')
;
DROP TABLE IF EXISTS category_sales;
CREATE TABLE category_sales (
category_id integer
, sales integer
);
INSERT INTO category_sales
VALUES
(1, 850000)
, (2, 500000)
;
DROP TABLE IF EXISTS product_sale_ranking;
CREATE TABLE product_sale_ranking (
category_id integer
, rank integer
, product_id varchar(255)
, sales integer
);
INSERT INTO product_sale_ranking
VALUES
(1, 1, 'D001', 50000)
, (1, 2, 'D002', 20000)
, (1, 3, 'D003', 10000)
, (2, 1, 'C001', 30000)
, (2, 2, 'C002', 20000)
, (2, 3, 'C003', 10000)
;
SQL
๋ณต์ฌ
๋ฐ์ดํฐ๋ฅผ ํ์ฉํ์ฌ ์๋์ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋๋ก ์ฟผ๋ฆฌ๋ฌธ์ ์์ฑํด๋ณธ๋ค.
DROP TABLE IF EXISTS products_20161201;
CREATE TABLE products_20161201(
product_id varchar(255)
, name varchar(255)
, price integer
, updated_at varchar(255)
);
INSERT INTO products_20161201
VALUES
('A001', 'AAA', 3000, '2016-11-03 18:00:00')
, ('A002', 'AAB', 4000, '2016-11-03 19:00:00')
, ('B001', 'BBB', 5000, '2016-11-03 20:00:00')
, ('B002', 'BBD', 3000, '2016-11-03 21:00:00')
, ('C001', 'CCA', 4000, '2016-11-04 18:00:00')
, ('D001', 'DAA', 5000, '2016-11-04 19:00:00')
;
DROP TABLE IF EXISTS products_20170101;
CREATE TABLE products_20170101(
product_id varchar(255)
, name varchar(255)
, price integer
, updated_at varchar(255)
);
INSERT INTO products_20170101
VALUES
('A001', 'AAA', 3000, '2016-11-03 18:00:00')
, ('A002', 'AAB', 4000, '2016-11-03 19:00:00')
, ('B002', 'BBD', 3000, '2016-11-03 21:00:00')
, ('C001', 'CCA', 5000, '2016-12-04 18:00:00')
, ('D001', 'DAA', 5000, '2016-11-04 19:00:00')
, ('D002', 'DAD', 5000, '2016-12-04 19:00:00')
;
SQL
๋ณต์ฌ
โข
๋ ํ
์ด๋ธ์ ๋น๊ตํ์ฌ ๋ณ๊ฒฝ๋ ๋ถ๋ถ๋ง์ ์ถ๋ ฅํ๋ค.
์ถ๊ฐ ์ฐ์ต
โข
์ง๊ธ๊ป ํ์ตํ ๋ด์ฉ๋ค๋ก ์ถ๊ฐ๋ฏธ์
์ ์ํํ ์ ์๋ค. ์ง๊ธ๊น์ง์ ๋ฏธ์
๋ค๋ก ๋ถ์ถฉ๋ถํ๋ค๋ฉด ๋์ ํด๋ณด์
โข
Dataset Download
โข
๋ฉ๋ด์ผ์ ํ์ธํ์ฌ ๋ค์ด๋ฐ์ CSVํ์ผ์ importํ๋ค.
โข
CSV LOAD๊ฐ ๋๋ฆด๊ฒฝ์ฐ์ย ๋งํฌ์ sql์ importํด๋ณธ๋ค. ์ ์๋ ์ฐจ์ด๊ฐ ๋๋์ง ์๊ฐํด๋ณด์.