📋

6.3 기타 구문

(실습) 주석

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

(실습) 조건문

해당 구문은 아래 페이지에서 실습하세요. 다른 Page에서 실습이 되지 않습니다.
  • 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만 사용해보도록 하겠습니다.
SELECT Orders.OrderID, Customers.CustomerName, Orders.OrderDate FROM Orders INNER JOIN Customers ON Orders.CustomerID=Customers.CustomerID;
 
출처 : W3SCHOOL출처 : W3SCHOOL
출처 : W3SCHOOL
이제 데이터를 살펴보세요. 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);