📋

3회차

 

(실습) 주석

이제부터 구문이 조금 복잡해질 것입니다. 아래 주석 구문은 쿼리를 설명하거나 쿼리를 잠시 보류하는 용도로 사용할 수 있습니다.
-- 해당 구문은 전체 고객 정보를 조회합니다. SELECT * FROM Customers;
-- 해당 구문은 전체 고객 정보를 조회합니다. SELECT * FROM Customers --WHERE CustomerID > 50;
/* 여러 줄 주석입니다. SELECT City FROM Customers; */ SELECT * FROM Customers;

(실습) 조건문

해당 구문은 아래 페이지에서 실습하세요. 다른 Page에서 실습이 되지 않습니다. 앞서 말씀드린 것처럼, 해당 웹 서비스가 실제 DB가 아니기 때문에 그렇습니다.
  • 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;
다음은 W3School에서 제공하고 있는 구문입니다. 만약 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;
💡
저는 택배를 배달하는 택배기사입니다. CustomerID와 CustomerName, Address, OrderDate, City, PostalCode를 알아야 합니다. 해당 data를 출력해주세요.
출처 : 위니브출처 : 위니브
출처 : 위니브
이제 데이터를 살펴보세요. W3School에서 INNER JOIN 할 수 있는 데이터를 모두 합쳐보세요. 위의 문제들에 대한 연습문제를 제공하고 있습니다. 아래 문제를 풀어보세요. 정답도 제공하고 있어요.

(실습) UNION

데이터를 결합합니다.
SELECT City FROM Customers UNION SELECT City FROM Suppliers ORDER BY City;
JOIN과 마찬가지로 W3School에서 제공하는 다양한 데이터를 합쳐보세요.

(실습) 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

서브 쿼리가 모두 참이어야 참을 반환합니다.
SELECT ProductName FROM Products WHERE ProductID = ALL (SELECT ProductID FROM OrderDetails WHERE Quantity = 10);