SQL ์์ต์
https://www.w3schools.com/sql/default.asp
๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ก์ธ์คํ๊ณ ์กฐ์ํ๊ธฐ ์ํ ํ์ค์ธ์ด
RDB(Relational Database)๋ ๊ด๊ณํ ๋ฐ์ดํฐ ๋ชจ๋ธ์ ๊ธฐ์ด๋ฅผ ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ด๋ค. ๊ด๊ณํ ๋ฐ์ดํฐ ๋ชจ๋ธ์ด๋ ๋ฐ์ดํฐ๋ฅผ ๊ตฌ์ฑํ๋๋ฐ ํ์ํ ๋ฐฉ๋ฒ ์ค ํ๋๋ก ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ 2์ฐจ์์ ํ ์ด๋ธ ํํ๋ก ํํํด์ค๋ค.
RDBMS(Relational Database Management System)์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์์ฑํ๊ณ ์์ ํ๊ณ ๊ด๋ฆฌํ ์ ์๋ ์ํํธ์จ์ด์ด๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ํํด์ผํ๋ ๋๋ถ๋ถ์ ์กฐ์น๋ SQL ๋ฌธ์ผ๋ก ์ํ๋์ด์ง๋ค. ์๋๋ SELECT๋ฌธ์ ์์ ์ด๋ค.
#Customers ํ
์ด๋ธ์ ๋ชจ๋ ํ๋๋ฅผ ์ ํํ ๋
SELECT * FROM Customers;
๊ตฌ๋ฌธ์ ํญ์ ; ํ์๋ก ๋์ด๋๊ณ
SQL ํค์๋๋ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ์ง ์์.
SELECT - ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ๋ค.
UPDATE - ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ดํฐ๋ฅผ ์
๋ฐ์ดํธํ๋ค.
DELETE - ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํ๋ค.
INSERT INTO - ์๋ก์ด ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฝ์
ํ๋ค.
CREATE DATABASE - ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ง๋ ๋ค.
ALTER DATABASE - ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์์ ํ๋ค.
CREATE TABLE - ์ ํ
์ด๋ธ์ ๋ง๋ ๋ค.
ALTER TABLE - ํ
์ด๋ธ์ ์์ ํ๋ค.
DROP TABLE - ํ
์ด๋ธ์ ์ญ์ ํ๋ค.
CREATE INDEX - ์์ธ(๊ฒ์ ํค)๋ฅผ ์์ฑํ๋ค.
DROP INDEX - ์์ธ์ ์ญ์ ํ๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋ฐ์ดํฐ๋ฅผ ์ ํํ๋ ๋ฐ ์ฌ์ฉ๋์ด์ง๋ค.
SELECT๋ฌธ์ ์์ ๋ ์์์ ๋ค๋ฃจ์์ผ๋ฏ๋ก ์๋์์๋ SELECT๋ฌธ์ ์ต์ ๋ค์ ๋ํด์ ์ดํด๋ณธ๋ค.
์ค๋ณต ๊ฐ์ ์ ์ธํ ๊ฐ๋ค๋ง ๋์ดํ๊ณ ์ถ์ ๋ ์ฌ์ฉํ๋ค.
#ex)Customer ํ
์ด๋ธ์ Country์ด์์ ์ค๋ณต์ด ์ ๊ฑฐ๋์ด์ง ๊ฐ์ ๋์ด
SELECT DISTINCT Country
FROM Customer;
#ex)Country์ด์ ๊ฐ์๋ฅผ ๋์ด
SELECT COUNT(DISTINCT Country)
FROM Customers;๋ฆฌํด ํ ๋ ์ฝ๋ ์๋ฅผ ์ ํ๋๋ฐ ์ฌ์ฉ๋์ด์ง๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค๋ง๋ค ๋ฌธ๋ฒ์ด ๋ค๋ฅผ ์ ์์ผ๋ฏ๋ก ์๋จ์ ํํ์ด์ง ๋งํฌ๋ฅผ ์ฐธ์กฐํ์ฌ ํ์ธํ๋ค.
ํ ํ ์ด๋ธ์ ๋ฐ์ดํฐ๋ฅผ ์ ํ ์ด๋ธ๋ก ๋ณต์ฌํ๋ค.
SELECT column1, column2, column3, ...
INTO newtable IN externaldb
FROM oldtable
WHERE condition;์์ IN๊ตฌ๋ฌธ์ ์ต์ ์ด๋ค. ๋ค๋ฅธ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ํ ์ด๋ธ์ ๋ณต์ฌํ ๋ ์ฌ์ฉ๋์ด์ง๋ค.
WHERE ์ ์ ์ง์ ๋ ์กฐ๊ฑด์ ์ถฉ์กฑํ๋ ๋ ์ฝ๋๋ง ์ถ์ถํ๊ณ ์ถ์ ๋ ์ฌ์ฉํ๋ค.
#ex)Customers ํ
์ด๋ธ์์ Country๊ฐ Mexico์ธ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ ๋
SELECT * FROM Customers
WHERE Country='Mexico';| Operator | Description |
|---|---|
| = | Equal |
| <> | Not equal. Note: In some versions of SQL this operator may be written as != |
| > | Greater than |
| < | Less than |
| >= | Greater than or equal |
| <= | Less than or equal |
| BETWEEN | Between an inclusive range |
| LIKE | Search for a pattern |
| IN | To specify multiple possible values for a column |
WHERE ์ ์ AND, OR, NOT ์ฐ์ฐ์์์ ๊ฒฐํฉ๋ ๊ฐ๋ฅํ๋ค.
IN ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ์ฌ WHERE ์ ์ ์ฌ๋ฌ ๊ฐ์ ์ง์ ํ ์ ์๋ค.
IN ์ฐ์ฐ์๋ ์ฌ๋ฌ OR ์กฐ๊ฑด์ ์๊ธฐ๋ฒ์ด๋ค.
#ex)Customersํ
์ด๋ธ์ Countryํ๋๊ฐ 'Germany' ๋๋ 'France' ๋๋ 'UK' ์ธ ๋ชจ๋ ๊ฐ
SELECT * FROM Customers
WHERE Country IN ('Germany', 'France', 'UK');์ฃผ์ด์ง ๋ฒ์ ๋ด์ ๊ฐ์ ์ ํํ๋ค. ๊ฐ์ ์ซ์, ํ ์คํธ ๋๋ ๋ ์ง ๋ฑ์ด ๋ ์ ์์ผ๋ฉฐ ์์๊ฐ๊ณผ ๋๊ฐ์ด ํฌํจ๋์ด์ง๋ค.
SELECT column_name
FROM table_name
WHERE column_name BETWEEN value1 AND value2;ORDER BY ๋ฌธ์ ๊ฒฐ๊ณผ ์งํฉ์ ์ค๋ฆ์ฐจ์ ๋๋ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌํ๋๋ฐ ์ฌ์ฉ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก๋ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ๋ค.
์ค๋ฆ์ฐจ์ : ASC(์ต์
์์ฃผ์์ ์ ๊ธฐ๋ณธ๊ฐ)
๋ด๋ฆผ์ฐจ์ : DESC
#ex)Customer ํ
์ด๋ธ์ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ Country์ด๋ก ์ ๋ ฌ ์ ํ
SELECT * FROM Customers
ORDER BY Country;
#๋ค์ ์์ ๋ ์์ ๊ฒฐ๊ณผ์ ๋์ผํ๋ค(์ค๋ฆ์ฐจ์)
SELECT * FROM Customers
ORDER BY Country ASC;
#ex)Customersํ
์ด๋ธ์ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ Country์ด๋ก ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ ์ ํ
SELECT * FROM Customers
ORDER BY Country DESC;
#ex)Customers ํ
์ด๋ธ์ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ Country์ด๋ก ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ ํ CustomerName์ด๋ก ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ ์ ํ
SELECT * FORM Customers
ORDER BY Country ASC, CustomerName DESC;INSERT INTO๋ฌธ์ ํ ์ด๋ธ์ ์ ๋ ์ฝ๋๋ฅผ ์ฝ์ ํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.
#ex)Customers ํ
์ด๋ธ์ ์ง์ ๋ ํ๋์๋ง ๋ฐ์ดํฐ ์ฝ์
INSERT INTO Customers (CustomerName, City, Country)
VALUES ('Cardinal', 'Stavanger', 'Norway');ํ ํ ์ด๋ธ์ ๋ฐ์ดํฐ๋ฅผ ๋ณต์ฌํ์ฌ ๋ค๋ฅธ ํ ์ด๋ธ์ ์ฝ์ ํ ๋ ์ฌ์ฉ๋์ด์ง๋ค.
์์ค ๋ฐ ๋ชฉํ ํ ์ด๋ธ์ ๋ฐ์ดํฐ ์ ํ์ด ์ผ์นํ์ฌ์ผ ํ๋ค.
INSERT INTO table2 (column1, column2, column3,...)
SELECT column1, column2, column3, ...
FROM table1
WHERE condition;NULL์ ๊ฐ์ด ์๋ ๊ฒ์ ์๋ฏธํ๋ค. ์ด ๊ฒ์ 0์ด๋ ๊ณต๋ฐฑ๊ฐ์ด ์๋ ๊ฒ๊ณผ๋ ๋ค๋ฅธ ๊ฒ์ผ๋ก ๊ฐ์ด ์์ ์ง์ ์ด ๋์ด์์ง ์์ ๊ฒ์ด๋ค.
NULL๊ฐ์ <์ด๋ =๊ฐ์ ๋น๊ต ์ฐ์ฐ์๋ก ๋น๊ตํ ์ ์๊ณ ๋์ IS NULL ์ฐ์ฐ์์ IS NOT NULL ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.
#ex)IS NULL ๊ตฌ๋ฌธ์ ์
SELECT column_names
FROM table_name
WHERE column_name IS NULL;๊ธฐ์กด์ ๋ ์ฝ๋๋ฅผ ์์ ํ ๋ ์ฌ์ฉํ๋ค.
#ex)Customerํ
์ด๋ธ์ CustomerID๊ฐ 1์ธ ๋ ์ฝ๋์ ์์
UPDATE Customers
SET ContactName='Alfred Schmidt', City='Frankfurt'
WHERE CustomerID=1;WHERE ์ ์ ์ ์ง ์์ผ๋ฉด ๋ชจ๋ ๋ ์ฝ๋์ ContactName๊ณผ City๊ฐ ์์ ๋์ด์ง๋ฏ๋ก ์ฃผ์ํด์ผํ๋ค.
๊ธฐ์กด ๋ ์ฝ๋๋ฅผ ์ญ์ ํ ๋ ์ฌ์ฉ๋๋ค.
#ex)Customers ํ
์ด๋ธ์ ํน์ ๋ ์ฝ๋ ์ญ์ ํ๊ธฐ
DELETE FROM Customers
WHERE CustomerName='Alfreds Futterkiste';
#ex)ํ
์ด๋ธ ๋ด์ ๋ชจ๋ ๋ ์ฝ๋ ์ญ์ ํ๊ธฐ
DELETE FROM table_name;์ ํ๋ ํ๋์ ๊ฐ์ฅ ์์๊ฐ ๋๋ ๊ฐ์ฅ ํฐ ๊ฐ์ ๋ฆฌํดํ๋ค.
#ex)Products ํ
์ด๋ธ์ Price ์ค ๊ฐ์ฅ ์ต์ ๊ฐ๊ฒฉ์ ์ฐพ๋๋ค.
SELECT MIN(Price) AS SmallestPrice
FROM Products;COUNT() ํจ์๋ ์ง์ ๋ ๊ธฐ์ค๊ณผ ์ผ์นํ๋ ๋ ์ฝ๋์ ๊ฐ์๋ฅผ ๋ฐํํ๋ค.
AVG() ํจ์๋ ์ซ์ ํ๋์ ํ๊ท ๊ฐ์ ๋ฐํํ๋ค.
SUM() ํจ์๋ ์ซ์ ํ๋์ ์ด ํฉ๊ณ๋ฅผ ๋ฐํํ๋ค.
#ex)COUNT()
SELECT COUNT(column_name)
FROM table_name
WHERE condition;
#ex)AVG()
SELECT AVG(column_name)
FROM table_name
WHERE condition;
#ex)SUM()
SELECT SUM(column_name)
FROM table_name
WHERE condition;aggregate functions์ ํจ๊ป ์ฌ์ฉ๋์ด ๊ฒฐ๊ณผ ์งํฉ์ ํ๋ ์ด์์ ์ด๋ก ๊ทธ๋ฃนํํ๋ค.
#ex)Customersํ
์ด๋ธ์์ ๊ฐ์ Country๋ฅผ ๊ฐ๊ณ ์๋ CustomerID์ ์
SELECT COUNT(CustomerID), Country
FROM Customers
GROUP BY Country;WHERE ์ด aggregate functions์ ํจ๊ป ์ฌ์ฉ๋์ด์ง ์ ์์ด์ HAVING์ ์ฌ์ฉํ๋ค.
#ex)Customersํ
์ด๋ธ์์ 5๋ช
์ด์์ CustmerID๋ฅผ ๊ฐ๊ณ ์๋ Country๋ง ๋์ด
SELECT COUNT(CustomerID), Country
FROM Customers
GROUP BY Country
HAVING COUNT(CustomerID) > 5;WHERE ์ ์์ ํ๋์ ์ง์ ๋ ํจํด์ ๊ฒ์ํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.
- % : ๋ฐฑ๋ถ์จ ๊ธฐํธ๋ 0, 1 ๋๋ ๋ณต์ ๋ฌธ์๋ฅผ ๋ํ๋ธ๋ค.
- _ : ๋ฐ์ค์ ๋ฌธ์ ํ๊ฐ๋ฅผ ๋ํ๋ธ๋ค.
AND ๋๋ OR ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ๋ฌ ์กฐ๊ฑด์ ๊ฒฐํฉ๋ ๊ฐ๋ฅํ๋ค.
#ex)Customers ํ
์ด๋ธ์ CustomerNameํ๋์์ 'a'๋ก ์์ํ๋ ๋ชจ๋ ๊ฐ
SELECT * FROM Customers
WHERE CustomerName LIKE 'a%';
#ex)Customers ํ
์ด๋ธ์ CustomerNameํ๋์์ 'a' ๋๋ 'b'๋๋ 'c'๋ก ์์ํ๋ ๋ชจ๋ ๊ฐ
SELECT * FROM Customers
WHERE CustomerName LIKE '[a-c]%';| LIKE Operator | Description |
|---|---|
| WHERE CustomerName LIKE 'a%' | Finds any values that starts with 'a' |
| WHERE CustomerName LIKE '%a' | Finds any values that ends with 'a' |
| WHERE CustomerName LIKE '%or%' | Finds any values that have 'or' in any position |
| WHERE CUstomerName LIKE '_r%' | Finds any values that 'r' in the second position |
| WHERE CustomerName LIKE 'a_%_%' | Finds any values that start with 'a' and are at least 3 characters in length |
| WHERE ContactName LIKE 'a%o' | Finds any values that starts with 'a' and ends with 'o' |
Aliases๋ ํ ์ด๋ธ ๋๋ ํ ์ด๋ธ ํ๋์ ์์ ์ด๋ฆ์ ์ฝ๊ธฐ ์ฝ๊ฒ ์ง์ ํ๋ ๊ฒ์ ์ฌ์ฉ๋๋ค. Aliases๋ ์กฐํ ๊ธฐ๊ฐ ๋์๋ง ์กด์ฌํ๋ค.
SELECT coulumn_name AS alias_name
FROM table_name;
SELECT column_name
FROM table_name AS alias_name;JOIN๋ฌธ์ 2๊ฐ ์ด์์ ํ ์ด๋ธ์ ๊ด๋ จ๋์ด์ง ํ๋๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ์ฌ ๊ฒฐํฉ์ํจ๋ค.
INNER JOIN๋ฌธ์ 2๊ฐ ์ด์์ ํ ์ด๋ธ์์ ์ผ์นํ๋ ๊ฐ์ ๊ฐ์ง ๋ ์ฝ๋๋ง ์ ํํ๋ค.
SELECT column_names
FROM table1
INNER JOIN table2 ON table1.column_name = table2.column_name;์ ์์ ์์ ๋ง์ฝ table1.column_name๊ณผ table2.column_name์์ ์ผ์นํ๋ ๊ฐ์ด ์๋ค๋ฉด ์ด๋ ํ ๋ ์ฝ๋๋ ์ ํ๋์ด์ง์ง ์๋๋ค.
LEFT JOIN์ ์ผ์ชฝ ํ ์ด๋ธ์ ๋ชจ๋ ๋ ์ฝ๋์ ์ค๋ฅธ์ชฝ ํ ์ด๋ธ์ ์ผ์นํ๋ ๊ฐ์ ๊ฐ์ง ๋ ์ฝ๋๋ฅผ ๋ฐํํ๋ฉฐ, ์ค๋ฅธ์ชฝ ๋ ์ฝ๋์์ ์ผ์นํ๋ ๊ฐ์ด ์๋ค๋ฉด NULL ๊ฐ์ด ๋์ค๊ฒ ๋๋ค.
SELECT column_names
FROM table1
LEFT JOIN table2 ON table1.column_name = table2.column_name;RIGHT JOIN์ LEFT JOIN๊ณผ ๋ฐ๋์ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ง๋ค.
SELECT column_names
FROM table1
RIGHT JOIN table2 ON table1.column_name = table2.column_name;FULL OUTER JOIN์ ์ผ์ชฝ๊ณผ ์ค๋ฅธ์ชฝ ํ ์ด๋ธ์ ๋ชจ๋ ๊ฐ์ ๋ฐํํ๋ค.
SELECT column_names
FROM table1
FULL OUTER JOIN table2 ON table1.column_name = table2.column_name;SELF JOIN์ ํ๋์ ํ ์ด๋ธ์ ๋๊ฐ์ ํ ์ด๋ธ์ฒ๋ผ JOIN์ผ๋ก ์กฐํํ๋ ๋ฐฉ๋ฒ์ผ๋ก, ์ํ๋ ๋ฐ์ดํฐ๋ค์ด ํ ํ ์ด๋ธ์ ๋ค์ด์์ ๋ ์ฌ์ฉํ๋ค.
SELECT column_names
FROM table1 T1, table1 T2
WHERE condition;๋ ๊ฐ ์ด์์ SELECT๋ฌธ์ ๊ฒฐ๊ณผ ์งํฉ์ ๊ฒฐํฉํ๋ ๋ฐ ์ฌ์ฉ๋๋ ์ฐ์ฐ์์ด๋ค.
๊ฐ SELECT๋ฌธ์ ๊ฐ์ ์์ ์ด์ ๊ฐ์ ธ์ผ ํ๋ฉฐ, ์ด์ ์ ์ฌํ ๋ฐ์ดํฐ ํ์ ์ ๊ฐ์ ธ์ผ ํ๋ค. ๋ํ, ๊ฐ SELECT๋ฌธ์ ์ด์ ๊ฐ์ ์์๋ก ์์ด์ผ ํ๋ค.
UNION ์ฐ์ฐ์๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ค๋ณต๊ฐ์ ์ ์ธํ๊ณ ์ ํํ๋ค. ๋ฐ๋ผ์ ์ค๋ณต๊ฐ์ ํ์ฉํ๋ ค๋ฉด UNION ALL์ ์ฌ์ฉํ๋ค.
SELECT column_names FROM table1
UNION
SELECT column_names FROM table2ํ์ ์ฟผ๋ฆฌ์ ๋ ์ฝ๋ ์กด์ฌ ์ฌ๋ถ๋ฅผ ํ
์คํธํ๋ ๋ฐ ์ฌ์ฉ๋์ด์ง๋ค.
ํ์ ์ฟผ๋ฆฌ๊ฐ ํ๋ ์ด์์ ๋ ์ฝ๋๋ฅผ ๋ฐํํ๋ฉด true๋ฅผ ๋ฐํํ๋ค.
SELECT column_names
FROM table_name
WHERE EXISTS
(SELECT column_name FROM table_name WHERE condition);ANY ์ฐ์ฐ์๋ ํ์ ์ฟผ๋ฆฌ ๊ฐ ์ค ์กฐ๊ฑด์ ์ถฉ์กฑํ๋ ๊ฐ๋ค์ด ์์ผ๋ฉด true์ ํจ๊ป ๋ฐํํ๋ค.
ALL ์ฐ์ฐ์๋ ๋ชจ๋ ํ์ ์ฟผ๋ฆฌ ๊ฐ์ด ์กฐ๊ฑด์ ์ถฉ์กฑํ๋ฉด true์ ํจ๊ป ๋ฐํํ๋ค.
#ex)ANY
SELECT column_names
FROM table_name
WHERE column_name operator ANY
(SELECT column_name FROM table_name WHERE condition);
#ex)ALL
SELECT collumn_names
FROM table_name
WHERE column_name operator ALL
(SELECT column_name FROM table_name WHERE condition);ํ ์ค ์ฃผ์์ --๋ก ์์ํ๋ค.
์ฌ๋ฌ์ค ์ฃผ์์ /*๋ก ์์ํ๊ณ */๋ก ๋๋๋ค.