๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ๊ณ๋ ์ค๋ซ๋์ SQL ์ธ์ด๋ฅผ ์ฌ์ฉํ๋ ๊ด๊ณํ DBMS๊ฐ ์ง๋ฐฐํด ์์ต๋๋ค. ๊ทธ๋์ ์๋ก์ด ๋ณ์ข ์ NoSQL์ด๋ผ๊ณ ๋ถ๋ฆ ๋๋ค. ๊ทธ๋ค์ ์ด ์์ฅ์์ ์ค์ค๋ก ํน์ ์์น๋ฅผ ๊ฐ์ฒํ์ง๋ง ๊ด๊ณํ DBMS๋ ์ฃฝ์ง ์์ ๊ฒ์ด๋ฉฐ ๊ณ์ํด์ ๊ทธ๋ค์ ๋ชฉ์ ์ ์ํด ์ ๊ทน์ ์ผ๋ก ์ฌ์ฉ๋๊ณ ์์ต๋๋ค.
์ด ๊ธฐ์ฌ์์๋ ๊ธฐ๋ฅ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ฐ๋
์ ์ค๋ช
ํ๊ณ ์ถ์ต๋๋ค. ๋ ๋์ ์ดํด๋ฅผ ์ํด ์ด๋ฅผ ๊ณ ์ ์ ์ธ ๊ด๊ณํ ๋ชจ๋ธ๊ณผ ๋น๊ตํ์ฌ ์ค๋ช
ํ๊ฒ ์ต๋๋ค. ์ธํฐ๋ท์์ ๋ฐ๊ฒฌ๋ ๊ฐ์ข
SQL ํ
์คํธ์ ๋ฌธ์ ์ ์ ์๋ก ๋ค์ด๋ณด๊ฒ ์ต๋๋ค.
์๊ฐ
๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ํ ์ด๋ธ๊ณผ ํ๋์์ ์๋ํฉ๋๋ค. ๊ธฐ๋ฅ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์๋ ํด๋์ค์ ํจ์๊ฐ ๊ฐ๊ฐ ์ฌ์ฉ๋ฉ๋๋ค. N๊ฐ ํค๊ฐ ์๋ ํ ์ด๋ธ์ ํ๋๋ N๊ฐ ๋งค๊ฐ๋ณ์์ ํจ์๋ก ํ์๋ฉ๋๋ค. ํ ์ด๋ธ ๊ฐ์ ๊ด๊ณ ๋์ ์ฐ๊ฒฐ์ด ์ด๋ฃจ์ด์ง ํด๋์ค์ ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ ํจ์๊ฐ ์ฌ์ฉ๋ฉ๋๋ค. JOIN ๋์ ํจ์ ํฉ์ฑ์ด ์ฌ์ฉ๋ฉ๋๋ค.
์์ ์ผ๋ก ๋ฐ๋ก ์ด๋ํ๊ธฐ ์ ์ ๋๋ฉ์ธ ๋ก์ง ์์ ์ ๋ํด ์ค๋ช ํ๊ฒ ์ต๋๋ค. DDL์ ๊ฒฝ์ฐ PostgreSQL ๊ตฌ๋ฌธ์ ์ฌ์ฉํฉ๋๋ค. ๊ธฐ๋ฅ์ ์ผ๋ก๋ ์์ฒด ๊ตฌ๋ฌธ์ด ์์ต๋๋ค.
ํ ์ด๋ธ ๋ฐ ํ๋
์ด๋ฆ ๋ฐ ๊ฐ๊ฒฉ ํ๋๊ฐ ์๋ ๊ฐ๋จํ Sku ๊ฐ์ฒด:
๊ด๊ณํ
CREATE TABLE Sku
(
id bigint NOT NULL,
name character varying(100),
price numeric(10,5),
CONSTRAINT id_pkey PRIMARY KEY (id)
)
๊ธฐ๋ฅ์
CLASS Sku;
name = DATA STRING[100] (Sku);
price = DATA NUMERIC[10,5] (Sku);
XNUMX๊ฐ๋ฅผ ๋ฐํํฉ๋๋ค ๊ธฐ๋ฅ, ํ๋์ ๋งค๊ฐ๋ณ์ Sku๋ฅผ ์ ๋ ฅ์ผ๋ก ์ฌ์ฉํ๊ณ ๊ธฐ๋ณธ ์ ํ์ ๋ฐํํฉ๋๋ค.
๊ธฐ๋ฅ์ DBMS์์๋ ๊ฐ ๊ฐ์ฒด์ ์๋์ผ๋ก ์์ฑ๋๊ณ ํ์ํ ๊ฒฝ์ฐ ์ก์ธ์คํ ์ ์๋ ๋ด๋ถ ์ฝ๋๊ฐ ์๋ค๊ณ ๊ฐ์ ํฉ๋๋ค.
์ ํ/๋งค์ฅ/๊ณต๊ธ์ ์ฒด์ ๊ฐ๊ฒฉ์ ์ค์ ํด ๋ณด๊ฒ ์ต๋๋ค. ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ๋ณ๊ฒฝ๋ ์ ์์ผ๋ฏ๋ก ํ ์ด๋ธ์ ์๊ฐ ํ๋๋ฅผ ์ถ๊ฐํด ๋ณด๊ฒ ์ต๋๋ค. ์ฝ๋๋ฅผ ๋จ์ถํ๊ธฐ ์ํด ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋๋ ํฐ๋ฆฌ์ ๋ํ ํ ์ด๋ธ ์ ์ธ์ ๊ฑด๋๋ฐ๊ฒ ์ต๋๋ค.
๊ด๊ณํ
CREATE TABLE prices
(
skuId bigint NOT NULL,
storeId bigint NOT NULL,
supplierId bigint NOT NULL,
dateTime timestamp without time zone,
price numeric(10,5),
CONSTRAINT prices_pkey PRIMARY KEY (skuId, storeId, supplierId)
)
๊ธฐ๋ฅ์
CLASS Sku;
CLASS Store;
CLASS Supplier;
dateTime = DATA DATETIME (Sku, Store, Supplier);
price = DATA NUMERIC[10,5] (Sku, Store, Supplier);
์ง์
๋ง์ง๋ง ์์์๋ ํน์ ์๊ฐ์ ๊ฐ๊ฒฉ์ ๋น ๋ฅด๊ฒ ์ฐพ์ ์ ์๋๋ก ๋ชจ๋ ํค์ ๋ ์ง์ ๋ํ ์ธ๋ฑ์ค๋ฅผ ๊ตฌ์ถํ๊ฒ ์ต๋๋ค.
๊ด๊ณํ
CREATE INDEX prices_date
ON prices
(skuId, storeId, supplierId, dateTime)
๊ธฐ๋ฅ์
INDEX Sku sk, Store st, Supplier sp, dateTime(sk, st, sp);
์์
ํด๋นํ๋ ๋น๊ต์ ๊ฐ๋จํ ๋ฌธ์ ๋ถํฐ ์์ํ๊ฒ ์ต๋๋ค.
๋จผ์ ๋๋ฉ์ธ ๋ ผ๋ฆฌ๋ฅผ ์ ์ธํด ๋ณด๊ฒ ์ต๋๋ค(๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ฒฝ์ฐ ์ ๋ฌธ์์์ ์ง์ ์ํ๋จ).
CLASS Department;
name = DATA STRING[100] (Department);
CLASS Employee;
department = DATA Department (Employee);
chief = DATA Employee (Employee);
name = DATA STRING[100] (Employee);
salary = DATA NUMERIC[14,2] (Employee);
1.1 ์์
์ง์ ์์ฌ๋ณด๋ค ๋ ๋ง์ ๊ธ์ฌ๋ฅผ ๋ฐ๋ ์ง์์ ๋ชฉ๋ก์ ํ์ํ์ญ์์ค.
๊ด๊ณํ
select a.*
from employee a, employee b
where b.id = a.chief_id
and a.salary > b.salary
๊ธฐ๋ฅ์
SELECT name(Employee a) WHERE salary(a) > salary(chief(a));
1.2 ์์
ํด๋น ๋ถ์์์ ์ต๋ ๊ธ์ฌ๋ฅผ ๋ฐ๋ ์ง์์ ๋์ดํ์ธ์.
๊ด๊ณํ
select a.*
from employee a
where a.salary = ( select max(salary) from employee b
where b.department_id = a.department_id )
๊ธฐ๋ฅ์
maxSalary 'ะะฐะบัะธะผะฐะปัะฝะฐั ะทะฐัะฟะปะฐัะฐ' (Department s) =
GROUP MAX salary(Employee e) IF department(e) = s;
SELECT name(Employee a) WHERE salary(a) = maxSalary(department(a));
// ะธะปะธ ะตัะปะธ "ะทะฐะธะฝะปะฐะนะฝะธัั"
SELECT name(Employee a) WHERE
salary(a) = maxSalary(GROUP MAX salary(Employee e) IF department(e) = department(a));
๋ ๊ตฌํ ๋ชจ๋ ๋์ผํฉ๋๋ค. ์ฒซ ๋ฒ์งธ ๊ฒฝ์ฐ, ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ CREATE VIEW๋ฅผ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, ์ด๋ ๋์ผํ ๋ฐฉ์์ผ๋ก ๋จผ์ ํน์ ๋ถ์์ ์ต๋ ๊ธ์ฌ๋ฅผ ๊ณ์ฐํฉ๋๋ค. ๋ค์์์๋ ๋ช ํ์ฑ์ ์ํด ์๋ฃจ์ ์ ๋ ์ ๋ฐ์ํ๋ ์ฒซ ๋ฒ์งธ ์ฌ๋ก๋ฅผ ์ฌ์ฉํ๊ฒ ์ต๋๋ค.
1.3 ์์
๋ถ์ ID, ์ง์ ์๊ฐ 3๋ช ์ ์ด๊ณผํ์ง ์๋ ๋ชฉ๋ก์ ํ์ํฉ๋๋ค.
๊ด๊ณํ
select department_id
from employee
group by department_id
having count(*) <= 3
๊ธฐ๋ฅ์
countEmployees 'ะะพะปะธัะตััะฒะพ ัะพัััะดะฝะธะบะพะฒ' (Department d) =
GROUP SUM 1 IF department(Employee e) = d;
SELECT Department d WHERE countEmployees(d) <= 3;
1.4 ์์
๊ฐ์ ๋ถ์์ ๊ทผ๋ฌดํ๋ ์ง์ ๋ ๊ด๋ฆฌ์๊ฐ ์๋ ์ง์์ ๋ชฉ๋ก์ ํ์ํฉ๋๋ค.
๊ด๊ณํ
select a.*
from employee a
left join employee b on (b.id = a.chief_id and b.department_id = a.department_id)
where b.id is null
๊ธฐ๋ฅ์
SELECT name(Employee a) WHERE NOT (department(chief(a)) = department(a));
1.5 ์์
์ต๋ ์ด ์ง์ ๊ธ์ฌ๊ฐ ํฌํจ๋ ๋ถ์ ID ๋ชฉ๋ก์ ์ฐพ์ต๋๋ค.
๊ด๊ณํ
with sum_salary as
( select department_id, sum(salary) salary
from employee
group by department_id )
select department_id
from sum_salary a
where a.salary = ( select max(salary) from sum_salary )
๊ธฐ๋ฅ์
salarySum 'ะะฐะบัะธะผะฐะปัะฝะฐั ะทะฐัะฟะปะฐัะฐ' (Department d) =
GROUP SUM salary(Employee e) IF department(e) = d;
maxSalarySum 'ะะฐะบัะธะผะฐะปัะฝะฐั ะทะฐัะฟะปะฐัะฐ ะพัะดะตะปะพะฒ' () =
GROUP MAX salarySum(Department d);
SELECT Department d WHERE salarySum(d) = maxSalarySum();
๋ค๋ฅธ ์์
์์ ๋ ๋ณต์กํ ์์
์ผ๋ก ๋์ด ๊ฐ์๋ค
2.1 ์์
1997๋ ์ 30๋ฒ ์ ํ์ 1๊ฐ ์ด์ ํ๋งคํ ํ๋งค์๋ ๋๊ตฌ์ ๋๊น?
๋๋ฉ์ธ ๋ก์ง(์ด์ RDBMS์ ๋ง์ฐฌ๊ฐ์ง๋ก ์ ์ธ์ ๊ฑด๋๋๋๋ค):
CLASS Employee 'ะัะพะดะฐะฒะตั';
lastName 'ะคะฐะผะธะปะธั' = DATA STRING[100] (Employee);
CLASS Product 'ะัะพะดัะบั';
id = DATA INTEGER (Product);
name = DATA STRING[100] (Product);
CLASS Order 'ะะฐะบะฐะท';
date = DATA DATE (Order);
employee = DATA Employee (Order);
CLASS Detail 'ะกััะพะบะฐ ะทะฐะบะฐะทะฐ';
order = DATA Order (Detail);
product = DATA Product (Detail);
quantity = DATA NUMERIC[10,5] (Detail);
๊ด๊ณํ
select LastName
from Employees as e
where (
select sum(od.Quantity)
from [Order Details] as od
where od.ProductID = 1 and od.OrderID in (
select o.OrderID
from Orders as o
where year(o.OrderDate) = 1997 and e.EmployeeID = o.EmployeeID)
) > 30
๊ธฐ๋ฅ์
sold (Employee e, INTEGER productId, INTEGER year) =
GROUP SUM quantity(OrderDetail d) IF
employee(order(d)) = e AND
id(product(d)) = productId AND
extractYear(date(order(d))) = year;
SELECT lastName(Employee e) WHERE sold(e, 1, 1997) > 30;
2.2 ์์
๊ฐ ๊ตฌ๋งค์(์ด๋ฆ, ์ฑ)์ ๋ํด ๊ตฌ๋งค์๊ฐ 1997๋ ์ ๊ฐ์ฅ ๋ง์ ๋์ ์ง์ถํ ๋ ๊ฐ์ง ์ํ(์ด๋ฆ)์ ์ฐพ์ผ์ญ์์ค.
์ด์ ์์์ ๋๋ฉ์ธ ๋ ผ๋ฆฌ๋ฅผ ํ์ฅํฉ๋๋ค.
CLASS Customer 'ะะปะธะตะฝั';
contactName 'ะคะะ' = DATA STRING[100] (Customer);
customer = DATA Customer (Order);
unitPrice = DATA NUMERIC[14,2] (Detail);
discount = DATA NUMERIC[6,2] (Detail);
๊ด๊ณํ
SELECT ContactName, ProductName FROM (
SELECT c.ContactName, p.ProductName
, ROW_NUMBER() OVER (
PARTITION BY c.ContactName
ORDER BY SUM(od.Quantity * od.UnitPrice * (1 - od.Discount)) DESC
) AS RatingByAmt
FROM Customers c
JOIN Orders o ON o.CustomerID = c.CustomerID
JOIN [Order Details] od ON od.OrderID = o.OrderID
JOIN Products p ON p.ProductID = od.ProductID
WHERE YEAR(o.OrderDate) = 1997
GROUP BY c.ContactName, p.ProductName
) t
WHERE RatingByAmt < 3
๊ธฐ๋ฅ์
sum (Detail d) = quantity(d) * unitPrice(d) * (1 - discount(d));
bought 'ะัะฟะธะป' (Customer c, Product p, INTEGER y) =
GROUP SUM sum(Detail d) IF
customer(order(d)) = c AND
product(d) = p AND
extractYear(date(order(d))) = y;
rating 'ะ ะตะนัะธะฝะณ' (Customer c, Product p, INTEGER y) =
PARTITION SUM 1 ORDER DESC bought(c, p, y), p BY c, y;
SELECT contactName(Customer c), name(Product p) WHERE rating(c, p, 1997) < 3;
PARTITION ์ฐ์ฐ์๋ ๋ค์ ์์น์ ๋ฐ๋ผ ์๋ํฉ๋๋ค. ์ง์ ๋ ๊ทธ๋ฃน(์ฌ๊ธฐ์๋ Customer ๋ฐ Year, ๊ทธ๋ฌ๋ ์์์ ํํ์์ผ ์ ์์) ๋ด์์ SUM(์ฌ๊ธฐ์๋ 1) ๋ค์์ ์ง์ ๋ ํํ์์ ํฉ์ฐํ๊ณ ๊ทธ๋ฃน ๋ด์์๋ ORDER( ์ฌ๊ธฐ์์ ๊ตฌ๋งคํ์ผ๋ฉฐ, ๋์ผํ๋ค๋ฉด ๋ด๋ถ ์ ํ ์ฝ๋์ ๋ฐ๋ผ ๊ตฌ๋งคํ์ต๋๋ค.)
2.3 ์์
ํ์ฌ ์ฃผ๋ฌธ์ ์ดํํ๊ธฐ ์ํด ๊ณต๊ธ์ ์ฒด๋ก๋ถํฐ ์ฃผ๋ฌธํด์ผ ํ๋ ์ํ ์์ ๋๋ค.
๋๋ฉ์ธ ๋ก์ง์ ๋ค์ ํ์ฅํด ๋ณด๊ฒ ์ต๋๋ค.
CLASS Supplier 'ะะพััะฐะฒัะธะบ';
companyName = DATA STRING[100] (Supplier);
supplier = DATA Supplier (Product);
unitsInStock 'ะััะฐัะพะบ ะฝะฐ ัะบะปะฐะดะต' = DATA NUMERIC[10,3] (Product);
reorderLevel 'ะะพัะผะฐ ะฟัะพะดะฐะถะธ' = DATA NUMERIC[10,3] (Product);
๊ด๊ณํ
select s.CompanyName, p.ProductName, sum(od.Quantity) + p.ReorderLevel โ p.UnitsInStock as ToOrder
from Orders o
join [Order Details] od on o.OrderID = od.OrderID
join Products p on od.ProductID = p.ProductID
join Suppliers s on p.SupplierID = s.SupplierID
where o.ShippedDate is null
group by s.CompanyName, p.ProductName, p.UnitsInStock, p.ReorderLevel
having p.UnitsInStock < sum(od.Quantity) + p.ReorderLevel
๊ธฐ๋ฅ์
orderedNotShipped 'ะะฐะบะฐะทะฐะฝะพ, ะฝะพ ะฝะต ะพัะณััะถะตะฝะพ' (Product p) =
GROUP SUM quantity(OrderDetail d) IF product(d) = p;
toOrder 'ะ ะทะฐะบะฐะทั' (Product p) = orderedNotShipped(p) + reorderLevel(p) - unitsInStock(p);
SELECT companyName(supplier(Product p)), name(p), toOrder(p) WHERE toOrder(p) > 0;
๋ณํ ๋ฌธ์
๊ทธ๋ฆฌ๊ณ ๋ง์ง๋ง ์๋ ๊ฐ์ธ์ ์ผ๋ก ์ ๊ฐ ๋ง๋ ๊ฒ์ ๋๋ค. ์์ ๋คํธ์ํฌ์ ๋ ผ๋ฆฌ๊ฐ ์์ต๋๋ค. ์ฌ๋๋ค์ ์๋ก ์น๊ตฌ๊ฐ ๋ ์ ์๊ณ ์๋ก ์ข์ํ ์๋ ์์ต๋๋ค. ๊ธฐ๋ฅ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด์ ์์ ๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
CLASS Person;
likes = DATA BOOLEAN (Person, Person);
friends = DATA BOOLEAN (Person, Person);
์ฐ์ ์ ์์ ์ ์๋ ํ๋ณด์๋ฅผ ์ฐพ๋ ๊ฒ์ด ํ์ํฉ๋๋ค. ๋ณด๋ค ๊ณต์์ ์ผ๋ก, A๋ B์ ์น๊ตฌ์ด๊ณ , B๋ C์ ์น๊ตฌ์ด๊ณ , A๋ C๋ฅผ ์ข์ํ์ง๋ง A๋ C์ ์น๊ตฌ๊ฐ ์๋ ๋ชจ๋ A, B, C ์ฌ๋์ ์ฐพ์์ผ ํฉ๋๋ค.
๊ธฐ๋ฅ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด์ ์์ ์ฟผ๋ฆฌ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
SELECT Person a, Person b, Person c WHERE
likes(a, c) AND NOT friends(a, c) AND
friends(a, b) AND friends(b, c);
๋ ์๋ SQL์์ ์ด ๋ฌธ์ ๋ฅผ ์ค์ค๋ก ํด๊ฒฐํ๋๋ก ๊ถ์ฅ๋ฉ๋๋ค. ๋น์ ์ด ์ข์ํ๋ ์ฌ๋๋ณด๋ค ์น๊ตฌ๊ฐ ํจ์ฌ ์ ๋ค๊ณ ๊ฐ์ ํฉ๋๋ค. ๋ฐ๋ผ์ ๋ณ๋์ ํ ์ด๋ธ์ ์์ต๋๋ค. ์ฑ๊ณตํ๋ฉด ๋ณ์ด ๋ ๊ฐ ์๋ ์์ ๋ ์์ต๋๋ค. ๊ทธ ์์์ ์ฐ์ ์ ๋์นญ์ ์ด์ง ์์ต๋๋ค. ๊ธฐ๋ฅ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
SELECT Person a, Person b, Person c WHERE
likes(a, c) AND NOT friends(a, c) AND
(friends(a, b) OR friends(b, a)) AND
(friends(b, c) OR friends(c, b));
UPD: ์ฒซ ๋ฒ์งธ ๋ฐ ๋ ๋ฒ์งธ ๋ณํ ๋ฌธ์ ์ ๋ํ ์๋ฃจ์
SELECT
pl.PersonAID
,pf.PersonAID
,pff.PersonAID
FROM Persons AS p
--ะะฐะนะบะธ
JOIN PersonRelationShip AS pl ON pl.PersonAID = p.PersonID
AND pl.Relation = 'Like'
--ะััะทัั
JOIN PersonRelationShip AS pf ON pf.PersonAID = p.PersonID
AND pf.Relation = 'Friend'
--ะััะทัั ะััะทะตะน
JOIN PersonRelationShip AS pff ON pff.PersonAID = pf.PersonBID
AND pff.PersonBID = pl.PersonBID
AND pff.Relation = 'Friend'
--ะัั ะฝะต ะดััะถะฐั
LEFT JOIN PersonRelationShip AS pnf ON pnf.PersonAID = p.PersonID
AND pnf.PersonBID = pff.PersonBID
AND pnf.Relation = 'Friend'
WHERE pnf.PersonAID IS NULL
;WITH PersonRelationShipCollapsed AS (
SELECT pl.PersonAID
,pl.PersonBID
,pl.Relation
FROM #PersonRelationShip AS pl
UNION
SELECT pl.PersonBID AS PersonAID
,pl.PersonAID AS PersonBID
,pl.Relation
FROM #PersonRelationShip AS pl
)
SELECT
pl.PersonAID
,pf.PersonBID
,pff.PersonBID
FROM #Persons AS p
--ะะฐะนะบะธ
JOIN PersonRelationShipCollapsed AS pl ON pl.PersonAID = p.PersonID
AND pl.Relation = 'Like'
--ะััะทัั
JOIN PersonRelationShipCollapsed AS pf ON pf.PersonAID = p.PersonID
AND pf.Relation = 'Friend'
--ะััะทัั ะััะทะตะน
JOIN PersonRelationShipCollapsed AS pff ON pff.PersonAID = pf.PersonBID
AND pff.PersonBID = pl.PersonBID
AND pff.Relation = 'Friend'
--ะัั ะฝะต ะดััะถะฐั
LEFT JOIN PersonRelationShipCollapsed AS pnf ON pnf.PersonAID = p.PersonID
AND pnf.PersonBID = pff.PersonBID
AND pnf.Relation = 'Friend'
WHERE pnf.[PersonAID] IS NULL
๊ฒฐ๋ก
์ฃผ์ด์ง ์ธ์ด ๊ตฌ๋ฌธ์ ์ฃผ์ด์ง ๊ฐ๋ ์ ๊ตฌํํ๊ธฐ ์ํ ์ต์ ์ค ํ๋์ผ ๋ฟ์ด๋ผ๋ ์ ์ ์ ์ํด์ผ ํฉ๋๋ค. SQL์ ๊ธฐ๋ณธ์ผ๋ก ์ผ์๊ณ , ์ต๋ํ ์ ์ฌํ๊ฒ ๋ง๋๋ ๊ฒ์ด ๋ชฉํ์์ต๋๋ค. ๋ฌผ๋ก ํค์๋ ์ด๋ฆ, ๋จ์ด ๋ ์ง์คํฐ ๋ฑ์ด ๋ง์์ ๋ค์ง ์๋ ๊ฒฝ์ฐ๋ ์์ต๋๋ค. ์ฌ๊ธฐ์ ๊ฐ์ฅ ์ค์ํ ๊ฒ์ ๊ฐ๋ ์์ฒด์ ๋๋ค. ์ํ๋ ๊ฒฝ์ฐ C++์ Python์ ๋ชจ๋ ์ ์ฌํ ๊ตฌ๋ฌธ์ผ๋ก ๋ง๋ค ์ ์์ต๋๋ค.
์ ์๊ฐ์๋ ์ค๋ช ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ๋ ์๋ ๋ค์๊ณผ ๊ฐ์ ์ฅ์ ์ด ์์ต๋๋ค.
- ํธํจ. ์ด๋ ๋จ์ํ ๊ฒฝ์ฐ์๋ ๋ช ํํ์ง ์์ ์๋์ ์ผ๋ก ์ฃผ๊ด์ ์ธ ์งํ์ ๋๋ค. ๊ทธ๋ฌ๋ ๋ ๋ณต์กํ ์ฌ๋ก(์: ๋ณํ ๊ด๋ จ ๋ฌธ์ )๋ฅผ ์ดํด๋ณด๋ฉด ์ด๋ฌํ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ๋ ๊ฒ์ด ํจ์ฌ ์ฝ๋ค๊ณ ์๊ฐํฉ๋๋ค.
- ะะฝะบะฐะฟััะปััะธั. ์ผ๋ถ ์์์๋ ์ค๊ฐ ํจ์๋ฅผ ์ ์ธํ์ต๋๋ค(์: ํ๋งค, ๊ตฌ์ ๋ฑ), ์ด๋ฅผ ๋ฐํ์ผ๋ก ํ์ ๊ธฐ๋ฅ์ด ๊ตฌ์ถ๋์์ต๋๋ค. ์ด๋ฅผ ํตํด ํ์ํ ๊ฒฝ์ฐ ํด๋น ๊ธฐ๋ฅ์ ์์กดํ๋ ๊ธฐ๋ฅ์ ๋ ผ๋ฆฌ๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ณ ๋ ํน์ ๊ธฐ๋ฅ์ ๋ ผ๋ฆฌ๋ฅผ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ํ๋งค๋ฅผ ํ ์ ์์ต๋๋ค. ํ๋งค ์์ ํ ๋ค๋ฅธ ๊ฐ์ฒด์์ ๊ณ์ฐ๋์์ง๋ง ๋๋จธ์ง ๋ ผ๋ฆฌ๋ ๋ณ๊ฒฝ๋์ง ์์ต๋๋ค. ์, CREATE VIEW๋ฅผ ์ฌ์ฉํ์ฌ RDBMS์์ ๊ตฌํํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋ชจ๋ ๋ ผ๋ฆฌ๊ฐ ์ด๋ฐ ๋ฐฉ์์ผ๋ก ์์ฑ๋๋ฉด ์ฝ๊ธฐ๊ฐ ์ฝ์ง ์์ ๊ฒ์ ๋๋ค.
- ์๋ฏธ์์ ๊ณต๋ฐฑ ์์. ์ด๋ฌํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ํ
์ด๋ธ๊ณผ ํ๋ ๋์ ํจ์์ ํด๋์ค์์ ์๋ํฉ๋๋ค. ๊ณ ์ ํ๋ก๊ทธ๋๋ฐ๊ณผ ๊ฐ์ต๋๋ค(๋ฉ์๋๊ฐ ํด๋น ํด๋์ค์ ํํ๋ก ์ฒซ ๋ฒ์งธ ๋งค๊ฐ๋ณ์๋ฅผ ๊ฐ๋ ํจ์๋ผ๊ณ ๊ฐ์ ํ๋ ๊ฒฝ์ฐ). ๋ฐ๋ผ์ ๋ฒ์ฉ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ "์น๊ตฌ๋ฅผ ์ฌ๊ท๋" ๊ฒ์ด ํจ์ฌ ์ฌ์์ง๋๋ค. ๋ํ ์ด ๊ฐ๋
์ ์ฌ์ฉํ๋ฉด ํจ์ฌ ๋ ๋ณต์กํ ๊ธฐ๋ฅ์ ๊ตฌํํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ๋ค์๊ณผ ๊ฐ์ ์ฐ์ฐ์๋ฅผ ํฌํจํ ์ ์์ต๋๋ค.
CONSTRAINT sold(Employee e, 1, 2019) > 100 IF name(e) = 'ะะตัั' MESSAGE 'ะงัะพ-ัะพ ะะตัั ะฟัะพะดะฐะตั ัะปะธัะบะพะผ ะผะฝะพะณะพ ะพะดะฝะพะณะพ ัะพะฒะฐัะฐ ะฒ 2019 ะณะพะดั';
- ์์๊ณผ ๋คํ์ฑ. ๊ธฐ๋ฅ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์๋ CLASS ClassP: Class1, Class2 ๊ตฌ์ฑ์ ํตํด ๋ค์ค ์์์ ๋์ ํ๊ณ ๋ค์ค ๋คํ์ฑ์ ๊ตฌํํ ์ ์์ต๋๋ค. ๋๋ ์๋ง๋ ํฅํ ๊ธฐ์ฌ์์ ์ ํํ ์ด๋ป๊ฒ ์ฐ๋์ง ์ธ ๊ฒ์ ๋๋ค.
์ด๊ฒ์ ๋จ์ง ๊ฐ๋
์ผ ๋ฟ์ด์ง๋ง ๋ชจ๋ ๊ธฐ๋ฅ์ ๋
ผ๋ฆฌ๋ฅผ ๊ด๊ณํ ๋
ผ๋ฆฌ๋ก ๋ณํํ๋ Java ๊ตฌํ์ด ์ด๋ฏธ ์์ต๋๋ค. ๋ํ ํํ์ ๋
ผ๋ฆฌ์ ๊ธฐํ ๋ง์ ๊ฒ๋ค์ด ์๋ฆ๋ต๊ฒ ์ฐ๊ฒฐ๋์ด ์์ต๋๋ค. ๋๋ถ์ ์ฐ๋ฆฌ๋ ์ ์ฒด๋ฅผ ์ป์ต๋๋ค.
์ถ์ฒ : habr.com