UNION
https://www.w3schools.com/sql/sql_union.asp
UNION 구문은 둘 이상의 SELECT statements를 결합시킬때 이용한다.
각 UNION이된 SELECT statement는 같은 열의 수를 가진다.
열은 반드시 같은 데이터 타입이다.
각 SELECT statement의 열은 같은 순서를 가진다.
UNION은 distinct 값을 가지게 된다. 즉, 중복없이 값을 리턴한다.
하지만 UNION ALL을 이용하면 중복되게 값을 리턴 할 수 있다.
Customers와 Suppliers의 City를 중복없이 결합하고 City를 오름차순 정렬해준다.
Customers와 Suppliers의 City를 중복으로 결합하고 City를 오름차순 정렬해준다.
이때 중복으로 결합된 것을 확인하기 위해서는 Customers의 테이블 총 레코드수가 91개이고 Suppliers의 테이블 총 레코드수가 29개이니 120개가 맞다.
WHERE절을 이용해서도 UNION을 할 수 있다.
Customers의 Country가 UK인 것과 Suppliers의 Country가 Germany인 것을 서로 UNION한다.
위의 쿼리문도 사용하여 ALL이 있을때와 없을때를 비교해보자.
GROUP BY
https://www.w3schools.com/sql/sql_groupby.asp
GROUP BY 구문은 계산 함수(COUNT, MAX, MIN, SUM, AVG) 같은 것들을 쓸때 사용되며 하나 이상의 열의 결과를 그룹화한다.
즉 계산함수를 이용하여 나타낸 값을 그룹화하여 어떤 값을 도출하고 싶을 때 이용한다.
http://makand.tistory.com/entry/SQL-GROUP-BY-%EA%B5%AC%EB%AC%B8
Customers 테이블에서 CustomerID의 개수를 카운트 한 후 Country로 그룹화 시키면 각 Country마다의 수가 나타나게 된다.
Orders 테이블에서 Orders.OrderID의 개수를 카운트 한 후 Orders의 테이블에 Shippers 테이블이 LEFT JOIN을 하게 되는데 ShipperID가 같은 것을 기준으로 조인한다.
그리고 마지막으로 ShipperName 기준으로 GROUP BY를 하여 그룹화한다.
HAVING
https://www.w3schools.com/sql/sql_having.asp
HAVING 절은 WHERE 키워드에 계산 함수가 쓰일 수 없기에 추가되었는 절이다.
위 쿼리문을 먼저 해보고
위 쿼리문을 그다음 실행해보고
쿼리문을 실행하여 WHERE대신 왜 HAVING을 써야하는지 파악해보자.
이 쿼리문은 Customers 테이블에서 CustomerID의 개수와 Country 필드를 가져오는데 Country를 기준으로 그룹화한다는 것이다.
이때 COUNT(CustomerID)가 9보다 큰 값을 필터링하고 마지막에 COUNT(CustomerID)를 기준으로 내림차순 정렬한 값을 리턴해준다.
Orders 테이블에서 Orders.OrderID 를 카운트하고 INNER JOIN을 하게 되는데 Orders와 Employees의 EmployeeID가 같은 것의 교집합을 조인하게 된다.
이때 나온 값 중 LastName이 Davolio거나 Leverling인 값을 필터링하고 마지막으로 LastName을 기준으로 그룹화한다.
마지막으로 COUNT(Orders.OrderID)가 29보다 큰 값만 리턴해준다.
EXISTS
https://www.w3schools.com/sql/sql_exists.asp
EXISTS 구문은 하위 쿼리의 레코드 존재 여부를 테스트하는데 사용된다.
하위 쿼리가 하나 이상 존재한다면 true를 반환한다.
IN과 EXISTS가 유사한데 차이점은
EXISTS는 해당 row가 존재하는지만 확인하고 더이상 수행하지 않지만
IN은 실제 존재하는 데이터들의 모든 값까지 확인하기에 EXISTS가 더 좋은 성능을 나타내므로 사용을 권장한다.
Products의 SupplierId와 Suppliers의 SupplierId가 같고 Price가 20 미만인 값들이 존재하는 그런 SupplierName를 출력한다.
ANY / ALL
https://www.w3schools.com/sql/sql_any_all.asp
ANY 구문은 하위 쿼리가 하나라도 만족하면 true를 반환한다.
이 쿼리문에서는 OrderDetails 테이블에 레코드들중 하나라도 quantity = 10을 만족하면 True를 반환하고
그 ProductID가 존재하면 WHERE절을 만족한다.
ALL 구문은 하위 쿼리가 모두 만족해야 true를 반환한다.
아래 링크를 참고해서 모든 내용을 이해해보자.
'Applied > Database' 카테고리의 다른 글
데이터베이스 CREATE / DROP / ALTER DB, TABLE (0) | 2018.08.20 |
---|---|
데이터베이스 SELECT INTO, INSERT INTO SELECT, ISNULL, PROCEDURES (0) | 2018.08.18 |
데이터베이스 JOIN ( INNER, LEFT, RIGHT, FULL, SELF ) (0) | 2018.08.14 |
데이터베이스 IN, BETWEEN, ALIAS (0) | 2018.08.12 |
데이터베이스 LIKE, Wildcards (0) | 2018.08.10 |