조건문
- Oracle의 경우에는 DECODE, CASE WHEN
- MsSQL의 경우에는 CASE WHEN
- MySQL의 경우에는 IF, CASE WHEN
- CASE WHEN 조건 THEN 참일경우_실행구문 ELSE 거짓일경우_실행구문 END
SELECT CASE WHEN 'GOOD'='JOB' THEN 'HELLO' ELSE 'WORLD' END;
SELECT CustomerID, City,
CASE
WHEN CustomerID > 50 THEN '50번을 넘음!'
WHEN City='London' THEN '도시가 런던!'
ELSE '50번 이하임!'
END AS '출력 문구'
FROM Customers;
만약 City데이터가 NULL값을 가지고 있다면 정렬 순서를 Country 기준으로, 아니라면 City 기준으로 정렬시키는 쿼리
SELECT CustomerName, City, Country FROM Customers
ORDER BY
(CASE
WHEN City IS NULL THEN Country
ELSE City
END);
JOIN
기준을 가지고 데이터를 합친다. 여기서는 INNER JOIN만 사용
-- w3school 기본 예제입니다.
-- OrderID는 Orders라는 table에 있습니다.
-- CustomerName는 Customers라는 table에 있습니다.
-- OrderDate는 Orders라는 table에 있습니다.
SELECT Orders.OrderID, Customers.CustomerName, Orders.OrderDate
-- 기준 table은 Orders입니다.
FROM Orders
-- INNER JOIN을 할 table은 Customers입니다.
INNER JOIN Customers
-- INNER JOIN의 기준은 두 table 모두 있는 CustomerID입니다.
ON Orders.CustomerID=Customers.CustomerID;
<aside> 💡 저는 택배를 배달하는 택배기사입니다. CustomerID와 CustomerName, Address, OrderDate, City, PostalCode를 알아야 합니다. 해당 data를 출력해주세요.
</aside>
UNION
데이터를 결합
SELECT City FROM Customers
UNION
SELECT City FROM Suppliers
ORDER BY City;
GROUP BY
특정 열을 기준으로 그룹화 하여 다른 특정 열에 붙일 때 사용 아래 코드에서 GROUP BY 코드를 삭제하면 작동하지 않는다. 그 이유는 SELECT 절에서 이미 그룹 함수와 기준열이 쓰였기 때문이다.
SELECT COUNT(CustomerID), Country
FROM Customers
GROUP BY Country;
HAVING
구룹화된 데이터에 조건을 부여
SELECT COUNT(CustomerID), Country
FROM Customers
GROUP BY Country
HAVING COUNT(CustomerID) > 5;
EXIST
서브 쿼리가 참일 경우 참을, 거짓일 경우 거짓을 반환
SELECT SupplierName
FROM Suppliers
WHERE EXISTS (SELECT ProductName FROM Products WHERE Products.SupplierID = Suppliers.supplierID AND Price < 20);
ANY
서브 쿼리가 하나라도 참이라면 참을 반환
SELECT ProductName
FROM Products
WHERE ProductID = ANY (SELECT ProductID FROM OrderDetails WHERE Quantity = 10);
ALL
서브 쿼리가 모두 참이어야 참을 반환