[Database] SQL

Goghยท2023๋…„ 1์›” 2์ผ
0

Database

๋ชฉ๋ก ๋ณด๊ธฐ
2/3

๐ŸŽฏ ๋ชฉํ‘œ :ย  SQL์˜ ๊ธฐ์ดˆ ๊ฐœ๋…

๐Ÿ“’ SQL

๐Ÿ“Œย SQL?

  • Structured Query Language์˜ ์•ฝ์ž์ด๋ฉฐ, ์ง์—ญํ•˜๋ฉด ๊ตฌ์กฐ์  ์งˆ์˜ ์–ธ์–ด๋‹ค.
  • ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค ์‹œ์Šคํ…œ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌ ๋ฐ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ์–ธ์–ด๋‹ค.

๐Ÿ“Œ SQL์˜ ๋ฌธ๋ฒ•์˜ ์ข…๋ฅ˜

  • DDL(Data Definition Language) ๋ฐ์ดํ„ฐ ์ •์˜ ์–ธ์–ด
    ๊ฐ DB, ์Šคํ‚ค๋งˆ, ํ…Œ์ด๋ธ” ๋“ฑ ์ƒ์„ฑ ๋˜๋Š” ์‚ญ์ œ ํ•˜๊ธฐ ์œ„ํ•œ ๋ฌธ๋ฒ• (CREATE, ALTER, DROP...)
  • DML(Data Manipulation Language) ๋ฐ์ดํ„ฐ ์กฐ์ž‘ ์–ธ์–ด
    ๊ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€, ์ˆ˜์ •, ์‚ญ์ œ, ์กฐํšŒ ๋“ฑ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๋ฌธ๋ฒ•(SELECT, INSERT, UPDATE....)
  • DCL(Data Control Language) ๋ฐ์ดํ„ฐ ์ œ์–ด ์–ธ์–ด
    ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค์— ๋Œ€ํ•œ ์ ‘๊ทผ ๊ถŒํ•œ๊ณผ ๊ด€๋ จ๋œ ๋ฌธ๋ฒ•(GRANT, REVOKE ....)ย 
  • TCL(Transaction Control Language) ํŠธ๋žœ์ ์…˜ ์กฐ์ž‘ ์–ธ์–ด
    DML ๊ณผ์ •์„ ๊ฑฐ์นœ ๋ฐ์ดํ„ฐ์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์กฐ์ž‘ํ•˜๋Š” ๋ฌธ๋ฒ• (COMMIT, ROLLBACK....)

๐Ÿ“Œ ๊ธฐ๋ณธ ๋ฌธ๋ฒ•

๋ช…๋ น์–ด๋Š” ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ฐ€๋ฆฌ์ง€ ์•Š๋Š”๋‹ค, ํ•˜์ง€๋งŒ ์Šคํ‚ค๋งˆ ๋˜๋Š” ํ•„๋“œ๋ช…์— ๋Œ€ํ•ด์„œ๋Š” ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•œ๋‹ค.

์„ธ๋ฏธ์ฝœ๋ก ์œผ๋กœ ๋ฐ˜๋“œ์‹œ ๋๋‚˜์•ผํ•œ๋‹ค.

ํ•™์Šต์„ ์œ„ํ•œ w3schools ์—์„œ ์ง์ ‘ ๋ฐ์ดํ„ฐ ๊ฐ’์„ ํ™•์ธ ํ•ด๋ณผ ์ˆ˜ ์žˆ๋‹ค.

  • ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค ์ƒ์„ฑ
CREATE DATABASE database_name;
  • ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ์ž„ํฌํŠธ
USE database_name;
  • ํ…Œ์ด๋ธ” ์ƒ์„ฑ ๋ฐ ์ •๋ณด ํ™•์ธ
ํ•„๋“œ ๋ช…ํ•„๋“œ ํƒ€์ž…๊ทธ ์™ธ ์†์„ฑ
idINTPrimary key AUTO_INCREMENT
name์ตœ๋Œ€ 255๊ฐœ์˜ ๋ฌธ์žย 
email์ตœ๋Œ€ 255๊ฐœ์˜ ๋ฌธ์žย 
-- ํ…Œ์ด๋ธ” ์ƒ์„ฑ
CREATE TABLE user (
  id int PRIMARY KEY AUTO_INCREMENT,
  name varchar(255),
  email varchar(255)
);

-- ํ…Œ์ด๋ธ” ์ •๋ณด ํ™•์ธ
DESCRIBE user;
  • ํ…Œ์ด๋ธ” ์ƒ์„ฑ์‹œ ์กฐ๊ฑด
-- AUTO_INCREMENT	์ƒˆ ํ–‰ ์ƒ์„ฑ์‹œ๋งˆ๋‹ค ์ž๋™์œผ๋กœ 1์”ฉ ์ฆ๊ฐ€
-- PRIMARY KEY	    ์ค‘๋ณต ์ž…๋ ฅ ๋ถˆ๊ฐ€, NULL(๋นˆ ๊ฐ’) ๋ถˆ๊ฐ€
-- UNIQUE	        ์ค‘๋ณต ์ž…๋ ฅ ๋ถˆ๊ฐ€
-- NOT NULL	    NULL(๋นˆ ๊ฐ’) ์ž…๋ ฅ ๋ถˆ๊ฐ€
-- UNSIGNED	    (์ˆซ์ž์ผ์‹œ) ์–‘์ˆ˜๋งŒ ๊ฐ€๋Šฅ
-- DEFAULT	        ๊ฐ’ ์ž…๋ ฅ์ด ์—†์„ ์‹œ ๊ธฐ๋ณธ๊ฐ’

CREATE TABLE people (
  person_id INT AUTO_INCREMENT PRIMARY KEY,
  person_name VARCHAR(10) NOT NULL,
  nickname VARCHAR(10) UNIQUE NOT NULL,
  age TINYINT UNSIGNED,
  is_married TINYINT DEFAULT 0
);
  • Customers ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ๋‚ด์šฉ ํ™•์ธ
SELECT * FROM Customers;
  • column ๊ณผ row์˜ ๋‚ด์šฉ์„ ๊ณจ๋ผ์„œ ์ถ”์ถœ
 -- CustomerName, ContactName, Country column๋งŒ ๋ฐ์ดํ„ฐ ํ™•์ธ
SELECT CustomerName, ContactName, Country
FROM Customers;

-- ๋ชจ๋“  column ์˜ Orders ํ…Œ์ด๋ธ”์˜ EmployeeID = 3 ์ธ row๋งŒ ์ถ”์ถœ
SELECT * FROM Orders
WHERE EmployeeID = 3;
  • ํŠน์ • ๋ฐ์ดํ„ฐ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌํ•˜์—ฌ ์ถ”์ถœ
-- OrderDetails ํ…Œ์ด๋ธ”์—์„œ
-- ProductID๋Š” ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ ํ›„ Quantity๋Š” ๋‚ด๋ฆผ ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜์—ฌ ์ถ”์ถœ
SELECT * FROM OrderDetails
ORDER BY ProductID ASC, Quantity DESC;
  • ์›ํ•˜๋Š” ๋งŒํผ ๋ฐ์ดํ„ฐ ๊ฐ€์ ธ์˜ค๊ธฐ
-- Customers ํ…Œ์ด๋ธ”์˜ 10๊ฐœ ๋ฐ์ดํ„ฐ ์ถ”์ถœ
SELECT * FROM Customers
LIMIT 10;

-- Customers ํ…Œ์ด๋ธ”์˜ 30๋ฒˆ์งธ ์ดํ›„ ๋ฐ์ดํ„ฐ ๋ถ€ํ„ฐ 10๊ฐœ ๋ฐ์ดํ„ฐ ์ถ”์ถœ
SELECT * FROM Customers
LIMIT 30, 10;
  • ์›ํ•˜๋Š” alias๋ฅผ ๋ถ™์—ฌ ๋ฐ์ดํ„ฐ ์ถ”์ถœ
 -- Customers ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ๋ฅผ
 -- CustomerId๋Š” ์•„์ด๋””๋กœ CustomerName๋Š” ๊ณ ๊ฐ๋ช…์œผ๋กœ Address๋Š” ์ฃผ์†Œ๋กœ,
 -- column๋ช…์„ ๋ณ€๊ฒฝํ•˜์—ฌ ๋ฐ์ดํ„ฐ ์ถ”์ถœ
SELECT
  CustomerId AS '์•„์ด๋””',
  CustomerName AS '๊ณ ๊ฐ๋ช…',
  Address AS '์ฃผ์†Œ'
FROM Customers;
  • ์‚ฌ์น™ ์—ฐ์‚ฐ, boolean ํƒ€์ž… ์—ฐ์‚ฐ์ž
-- ๋ฌธ์ž์—ด์— ์‚ฌ์น™์—ฐ์‚ฐ์„ ํ•˜๋ฉด 0์œผ๋กœ ์ธ์‹ํ•˜๋ฉฐ,
SELECT 'ABC' + 3;

-- ์ˆซ์ž๋กœ ๋œ ๋ฌธ์ž์—ด์€ ์ˆซ์ž๋กœ ์ž๋™ ์ธ์‹
SELECT '1' + '002' * 3;

-- Productsํ…Œ์ด๋ธ”์—์„œ ProductName ์—ด๊ณผ Price๋ฅผ 2๋กœ ๋‚˜๋ˆˆ ๊ฐ’์„ ๊ฐ€์ง„ HalfPrice ์—ด๋กœ ๋ช…๋ช…ํ•˜์—ฌ ์ถ”์ถœ
SELECT
  ProductName,
  Price / 2 AS HalfPrice
FROM Products;

-- AND(&&)๋Š” ์–‘์ชฝ ๋ชจ๋‘ true์ผ๋•Œ๋งŒ true
-- OR(||)๋Š” ํ•œ์ชฝ๋งŒ true ๋ฉด true
SELECT TRUE AND FALSE, TRUE OR FALSE;
-- ๊ฒฐ๊ณผ ๊ฐ’์€ TRUE AND FALSE = FALSE // TRUE OR FALSE = TRUE

--    =	    ์–‘์ชฝ ๊ฐ’์ด ๊ฐ™์Œ
--  !=, <>	์–‘์ชฝ ๊ฐ’์ด ๋‹ค๋ฆ„
--  >, <	(์™ผ์ชฝ, ์˜ค๋ฅธ์ชฝ) ๊ฐ’์ด ๋” ํผ
--  >=, <=	(์™ผ์ชฝ, ์˜ค๋ฅธ์ชฝ) ๊ฐ’์ด ๊ฐ™๊ฑฐ๋‚˜ ๋” ํผ

BETWEEN {MIN} AND {MAX}	 -- ๋‘ ๊ฐ’ ์‚ฌ์ด์— ์žˆ์Œ
NOT BETWEEN {MIN} AND {MAX}	 -- ๋‘ ๊ฐ’ ์‚ฌ์ด๊ฐ€ ์•„๋‹Œ ๊ณณ์— ์žˆ์Œ

-- LIKE '... % ...'	0~N๊ฐœ ๋ฌธ์ž๋ฅผ ๊ฐ€์ง„ ํŒจํ„ด
-- LIKE '... _ ...'	_ ๊ฐฏ์ˆ˜๋งŒํผ์˜ ๋ฌธ์ž๋ฅผ ๊ฐ€์ง„ ํŒจํ„ด
SELECT
  'HELLO' LIKE 'hel%',
  'HELLO' LIKE 'H%',
  'HELLO' LIKE 'H%O',
  'HELLO' LIKE '%O',
  'HELLO' LIKE '%HELLO%',
  'HELLO' LIKE '%H',
  'HELLO' LIKE 'L%'

  SELECT
  'HELLO' LIKE 'HEL__',
  'HELLO' LIKE 'h___O',
  'HELLO' LIKE 'HE_LO',
  'HELLO' LIKE '_____',
  'HELLO' LIKE '_HELLO',
  'HELLO' LIKE 'HEL_',
  'HELLO' LIKE 'H_O'
  • ์ˆซ์ž ๊ด€๋ จ ํ•จ์ˆ˜
-- ROUND	๋ฐ˜์˜ฌ๋ฆผ
-- CEIL	์˜ฌ๋ฆผ
-- FLOOR	๋‚ด๋ฆผ
-- ABS	์ ˆ๋Œ€๊ฐ’
-- GREATEST	(๊ด„ํ˜ธ ์•ˆ์—์„œ) ๊ฐ€์žฅ ํฐ ๊ฐ’
-- LEAST	(๊ด„ํ˜ธ ์•ˆ์—์„œ) ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’
-- MAX	๊ฐ€์žฅ ํฐ ๊ฐ’
-- MIN	๊ฐ€์žฅ ์ž‘์€ ๊ฐ’
-- COUNT	๊ฐฏ์ˆ˜ (NULL๊ฐ’ ์ œ์™ธ)
-- SUM	์ดํ•ฉ
-- AVG	ํ‰๊ท  ๊ฐ’
-- POW(A, B), POWER(A, B)	A๋ฅผ B๋งŒํผ ์ œ๊ณฑ
-- SQRT	์ œ๊ณฑ๊ทผ
-- TRUNCATE(N, n)	N์„ ์†Œ์ˆซ์  n์ž๋ฆฌ๊นŒ์ง€ ์„ ํƒ

SELECT
  ROUND(0.5),
  CEIL(0.4),
  FLOOR(0.6);

SELECT
  GREATEST(1, 2, 3),
  LEAST(1, 2, 3, 4, 5);

SELECT
  MAX(Quantity),
  MIN(Quantity),
  COUNT(Quantity),
  SUM(Quantity),
  AVG(Quantity)
FROM OrderDetails
WHERE OrderDetailID BETWEEN 20 AND 30;

SELECT
  POW(2, 3),
  POWER(5, 2),
  SQRT(16);


SELECT
  TRUNCATE(1234.5678, 1),
  TRUNCATE(1234.5678, 2),
  TRUNCATE(1234.5678, 3),
  TRUNCATE(1234.5678, -1),
  TRUNCATE(1234.5678, -2),
  TRUNCATE(1234.5678, -3);
  • ๋ฌธ์ž์—ด ๊ด€๋ จ ํ•จ์ˆ˜
-- UCASE, UPPER	๋ชจ๋‘ ๋Œ€๋ฌธ์ž๋กœ
-- LCASE, LOWER	๋ชจ๋‘ ์†Œ๋ฌธ์ž๋กœ
-- CONCAT(...)	๊ด„ํ˜ธ ์•ˆ์˜ ๋‚ด์šฉ ์ด์–ด๋ถ™์ž„
-- CONCAT_WS(S, ...)	๊ด„ํ˜ธ ์•ˆ์˜ ๋‚ด์šฉ S๋กœ ์ด์–ด๋ถ™์ž„
-- SUBSTR, SUBSTRING	์ฃผ์–ด์ง„ ๊ฐ’์— ๋”ฐ๋ผ ๋ฌธ์ž์—ด ์ž๋ฆ„
-- LEFT	์™ผ์ชฝ๋ถ€ํ„ฐ N๊ธ€์ž
-- RIGHT	์˜ค๋ฅธ์ชฝ๋ถ€ํ„ฐ N๊ธ€์ž
-- LENGTH	๋ฌธ์ž์—ด์˜ ๋ฐ”์ดํŠธ ๊ธธ์ด
-- CHAR_LENGTH, CHARACTER_LEGNTH	๋ฌธ์ž์—ด์˜ ๋ฌธ์ž ๊ธธ์ด
-- TRIM	์–‘์ชฝ ๊ณต๋ฐฑ ์ œ๊ฑฐ
-- LTRIM	์™ผ์ชฝ ๊ณต๋ฐฑ ์ œ๊ฑฐ
-- RTRIM	์˜ค๋ฅธ์ชฝ ๊ณต๋ฐฑ ์ œ๊ฑฐ
-- LPAD(S, N, P)	S๊ฐ€ N๊ธ€์ž๊ฐ€ ๋  ๋•Œ๊นŒ์ง€ P๋ฅผ ์ด์–ด๋ถ™์ž„
-- RPAD(S, N, P)	S๊ฐ€ N๊ธ€์ž๊ฐ€ ๋  ๋•Œ๊นŒ์ง€ P๋ฅผ ์ด์–ด๋ถ™์ž„
-- REPLACE(S, A, B)	S์ค‘ A๋ฅผ B๋กœ ๋ณ€๊ฒฝ
-- INSTR(S, s)	S์ค‘ s์˜ ์ฒซ ์œ„์น˜ ๋ฐ˜ํ™˜, ์—†์„ ์‹œ 0
-- CAST(A, T)	A๋ฅผ T ์ž๋ฃŒํ˜•์œผ๋กœ ๋ณ€ํ™˜

SELECT
  UPPER('abcDEF'),
  LOWER('abcDEF');

SELECT CONCAT('HELLO', ' ', 'THIS IS ', 2021)

SELECT CONCAT_WS('-', 2021, 8, 15, 'AM')

SELECT
  SUBSTR('ABCDEFG', 3),
  SUBSTR('ABCDEFG', 3, 2),
  SUBSTR('ABCDEFG', -4),
  SUBSTR('ABCDEFG', -4, 2);

SELECT
  LENGTH('์•ˆ๋…•ํ•˜์„ธ์š”'), -- 15
  CHAR_LENGTH('์•ˆ๋…•ํ•˜์„ธ์š”'), -- 5
  CHARACTER_LENGTH('์•ˆ๋…•ํ•˜์„ธ์š”'); -- 5

SELECT
  REPLACE('๋งฅ๋„๋‚ ๋“œ์—์„œ ๋งฅ๋„๋‚ ๋“œ ํ–„๋ฒ„๊ฑฐ๋ฅผ ๋จน์—ˆ๋‹ค.', '๋งฅ๋„๋‚ ๋“œ', '๋ฒ„๊ฑฐํ‚น');

SELECT
  '01' = '1',
  CONVERT('01', DECIMAL) = CONVERT('1', DECIMAL);
  • ์‹œ๊ฐ„ ๋‚ ์งœ ๊ด€๋ จ ํ•จ์ˆ˜
-- CURRENT_DATE, CURDATE	ํ˜„์žฌ ๋‚ ์งœ ๋ฐ˜ํ™˜
-- CURRENT_TIME, CURTIME	ํ˜„์žฌ ์‹œ๊ฐ„ ๋ฐ˜ํ™˜
-- CURRENT_TIMESTAMP, NOW	ํ˜„์žฌ ์‹œ๊ฐ„๊ณผ ๋‚ ์งœ ๋ฐ˜ํ™˜

SELECT CURDATE(), CURTIME(), NOW();

-- DATE	๋ฌธ์ž์—ด์— ๋”ฐ๋ผ ๋‚ ์งœ ์ƒ์„ฑ
-- TIME	๋ฌธ์ž์—ด์— ๋”ฐ๋ผ ์‹œ๊ฐ„ ์ƒ์„ฑ

SELECT * FROM Orders
WHERE
  OrderDate BETWEEN DATE('1997-1-1') AND DATE('1997-1-31');

-- HOUR	์ฃผ์–ด์ง„ DATETIME์˜ ์‹œ ๋ฐ˜ํ™˜
-- MINUTE	์ฃผ์–ด์ง„ DATETIME์˜ ๋ถ„ ๋ฐ˜ํ™˜
-- SECOND	์ฃผ์–ด์ง„ DATETIME์˜ ์ดˆ ๋ฐ˜ํ™˜

SELECT
  HOUR(NOW()), MINUTE(NOW()), SECOND(NOW());

-- ADDDATE, DATE_ADD	์‹œ๊ฐ„/๋‚ ์งœ ๋”ํ•˜๊ธฐ
-- SUBDATE, DATE_SUB	์‹œ๊ฐ„/๋‚ ์งœ ๋นผ๊ธฐ

SELECT
  ADDDATE('2022-09-20', INTERVAL 1 YEAR),
  ADDDATE('2022-09-20', INTERVAL -2 MONTH),
  ADDDATE('2022-09-20', INTERVAL 3 WEEK),
  ADDDATE('2022-09-20', INTERVAL -4 DAY),
  ADDDATE('2022-09-20', INTERVAL -5 MINUTE),
  ADDDATE('2022-09-20 13:01:12', INTERVAL 6 SECOND);

-- DATE_FORMAT	์‹œ๊ฐ„/๋‚ ์งœ๋ฅผ ์ง€์ •ํ•œ ํ˜•์‹์œผ๋กœ ๋ฐ˜ํ™˜
-- %Y	๋…„๋„ 4์ž๋ฆฌ
-- %y	๋…„๋„ 2์ž๋ฆฌ
-- %M	์›” ์˜๋ฌธ
-- %m	์›” ์ˆซ์ž
-- %D	์ผ ์˜๋ฌธ(1st, 2nd, 3rd...)
-- %d, %e	์ผ ์ˆซ์ž (01 ~ 31)
-- %T	hh:mm:ss
-- %r	hh:mm:ss AM/PM
-- %H, %k	์‹œ (~23)
-- %h, %l	์‹œ (~12)
-- %i	๋ถ„
-- %S, %s	์ดˆ
-- %p	AM/PM

SELECT REPLACE(
  REPLACE(
    DATE_FORMAT(NOW(), '%Y๋…„ %m์›” %d์ผ %p %h์‹œ %i๋ถ„ %์ดˆ'),
    'AM', '์˜ค์ „'
  ),
  'PM', '์˜คํ›„'
)



-- IF(์กฐ๊ฑด, T, F)	์กฐ๊ฑด์ด ์ฐธ์ด๋ผ๋ฉด T, ๊ฑฐ์ง“์ด๋ฉด F ๋ฐ˜ํ™˜

SELECT IF (1 > 2, '1๋Š” 2๋ณด๋‹ค ํฌ๋‹ค.', '1์€ 2๋ณด๋‹ค ์ž‘๋‹ค.');

SELECT
  Price,
  IF (Price > 30, 'Expensive', 'Cheap'),
  CASE
    WHEN Price < 20 THEN '์ €๊ฐ€'
    WHEN Price BETWEEN 20 AND 30 THEN '์ผ๋ฐ˜'
    ELSE '๊ณ ๊ฐ€'
  END
FROM Products;
  • ๊ทธ๋ฃน ํ•จ์ˆ˜
-- GROUP BY  ์กฐ๊ฑด์— ๋”ฐ๋ผ ์ง‘๊ณ„๋œ ๊ฐ’์„ ๊ฐ€์ ธ์˜จ๋‹ค
-- OrderDetails ํ…Œ์ด๋ธ”์—์„œ  ProductID ์ปฌ๋Ÿผ๊ณผ Quantity ํ•ฉ์˜ ๊ฐ’์„ ๊ฐ€์ง„ QuantitySum ์œผ๋กœ
-- ProductID ์ค‘๋ณต๊ฐ’์œผ๋กœ ๋ฌถ์–ด QuantitySum ์ปฌ๋Ÿผ์€ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•ด์„œ ์ถ”์ถœ
SELECT
  ProductID,
  SUM(Quantity) AS QuantitySum
FROM OrderDetails
GROUP BY ProductID
ORDER BY QuantitySum DESC;

-- ๊ฒฐ๊ณผ ๊ฐ’์€ https://www.w3schools.com/mysql/trymysql.asp?filename=trysql_select_all์—์„œ ํ™•์ธ๊ฐ€๋Šฅ
  • ๊ทธ๋ฃนํ™” ๋œ ๋ฐ์ดํ„ฐ ์กฐ๊ฑด ์ถ”์ถœ
-- Orders ํ…Œ์ด๋ธ”์—์„œ DATE('1996-12-31') ๋ณด๋‹ค ์ดํ›„์˜ ๋‚ ์งœ ๋ฐ์ดํ„ฐ ๋“ค๋งŒ
-- ์นด์šดํŠธํ•œ ๊ฐ’์„ ๊ฐ€์ง„ Count ์ปฌ๋Ÿผ๊ณผ OrderDate ์ปฌ๋Ÿผ์„
-- OrderDate์˜ ์ค‘๋ณต๋œ ๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ๊ทธ๋ฃนํ™” ํ•œ๋‹ค.
-- ๊ทธ๋ฃนํ™” ๋œ ๋ฐ์ดํ„ฐ์—์„œ Count ์ปฌ๋Ÿผ์˜ ๊ฐ’์ด 2์ด์ƒ์ธ ๊ฐ’๋งŒ ์ถ”์ถœํ•œ๋‹ค.
SELECT
  COUNT(*) AS Count, OrderDate
FROM Orders
WHERE OrderDate > DATE('1996-12-31')
GROUP BY OrderDate
HAVING Count > 2;
  • ๋ฐ์ดํ„ฐ ์ค‘๋ณต ์ œ๊ฑฐ ๋ฐ์ดํ„ฐ ์ถ”์ถœ
-- Customers ํ…Œ์ด๋ธ”์—์„œ Country ์ปฌ๋Ÿผ๊ณผ City ์ปฌ๋Ÿผ์˜ ์ค‘๋ณต ์ œ๊ฑฐ ํ•˜๊ณ 
-- Country ์— ์†ํ•œ City๋ฅผ ์นด์šดํ„ฐ ํ•œ ๊ฐ’์„
-- Country ์ค‘๋ณต๋œ ๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ์ถ”์ถœ
-- ์ฆ‰, Country์— ์†ํ•œ City๊ฐ€ ๋ช‡๊ฐœ๊ฐ€ ์žˆ๋Š”์ง€ ๋ฐ์ดํ„ฐ ์ถ”์ถœ
SELECT
  Country,
  COUNT(DISTINCT City)
FROM Customers
GROUP BY Country;
profile
์ปดํ“จํ„ฐ๊ฐ€ ํ• ์ผ์€ ์ปดํ“จํ„ฐ๊ฐ€

0๊ฐœ์˜ ๋Œ“๊ธ€