w3schools.com 의 ‘SQL’과정을 참고하였습니다.
SQL UNION
- 두개이상의
SELECT
문에서 결과를 가져와서 합치는 것 - 같은 컬럼 수를 가지고 있어야 한다.
- 데이터 타입이 같아야 한다.
- 같은 순서를 가지고 있어야 한다.
-- 기본 UNION
-- 두개의 SELECT문에 중복된 값의 경우, 하나만 가져온다. 기본적으로 DISTINCT 된 값
SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;
-- 중복된 것을 포함
SELECT column_name(s) FROM table1
UNION ALL
SELECT column_name(s) FROM table2;
-- 예제
SELECT 'Customer' As Type, ContactName, City, Country
FROM Customers
UNION
SELECT 'Supplier', ContactName, City, Country
FROM Suppliers;
SQL GROUP BY / HAVING
- 집계 함수 (COUNT,ALL,MAX,MIN 등)을 사용 할 수 있다.
- GROUP을 지정할 때, WHERE절과 같이 조건을 지정하기 위해
HAVING
을 사용 - SELECT에는 GROUP BY에 사용된 속성만 올 수 있다.
SELECT column_name(s)
FROM table_name
WHERE condition
GROUP BY column_name(s) HAVING condition
ORDER BY column_name(s);
-- 예제
-- CustomerID 가 5를 초과하는 데이터를 Country로 그룹화 하고
-- 그 데이터들의 CustomerID 갯수와, Country를 출력
SELECT COUNT(CustomerID), Country
FROM Customers
GROUP BY Country
HAVING COUNT(CustomerID) > 5;
-- 순서 1.FROM 2. JOIN - WHERE 3. SELECT 부속 질의문 4. GROUP BY 5. SELECT
-- JOIN한 테이블에서 ' Davolio', 'Fuller'라는 이름을 가진 사람들 중에 OrderID가 25 초과인사람들
SELECT Employees.LastName, COUNT(Orders.OrderID) AS NumberOfOrders
FROM Orders
INNER JOIN Employees ON Orders.EmployeeID = Employees.EmployeeID
WHERE LastName = 'Davolio' OR LastName = 'Fuller'
GROUP BY LastName
HAVING COUNT(Orders.OrderID) > 25;
SQL EXISTS
- 서브쿼리 조건이 ROW에 존재 할 경우, 실행이 된다.
SELECT column_name(s)
FROM table_name
WHERE EXISTS
(SELECT column_name FROM table_name WHERE condition);
IN 과 EXISTS 의 차이는?
- EXISTS는 해당 ROW가 있는지 확인만 한다
- SELECT절을 평가하지 않으므로, 일반적으로 IN에 비해 성능이 좋다.
- IN은 실재 존재하는 데이터의 모든 값까지 확인한다
- IN의 경우, NULL 데이터에 대해 FALSE를 리턴하기 때문에, NULL 처리를 하지 않을 경우 오류가 생길 수도 있다.
SQL ANY , ALL
ANY
와ALL
연산자는WHERE
와HAVING
절에 사용된다.ANY
: 조건이 하나라도 있을 경우, trueALL
: 모든 조건이 있어야만, true
-- 예제
-- 수량이 99개 초과인 Product ID가 하나라도 있으면,
-- 그것의 ProductName출력
SELECT ProductName
FROM Products
WHERE ProductID = ANY (SELECT ProductID FROM OrderDetails WHERE Quantity > 99);
SQL SELECT INTO
- 테이블에 있는 데이터를 새로운 테이블에 복사할 때 사용 ```sql – 테이블 전체 row를 복사 할때, IN은 새로운 데이터베이스에 저장 SELECT * INTO newtable [IN externaldb] FROM oldtable WHERE condition;
– 기존 테이블의 스키마는 사용하되, 컬럼은 비어있는 새로운 테이블을 만들 때 사용. SELECT * INTO newtable FROM oldtable WHERE 1 = 0;
## SQL INSERT INTO SELECT
- 데이터를 복하사고, 복사한 데이터를 지정한 테이블에 삽입할 때 사용
- `INSERT INTO SELECT`는 데이터 타입과 붙여넣기 할 테이블이 필요하다
- 기본의 테이블은 영향을 받지 않는다.
```sql
-- 예제
-- Supplier테이블에서 SupplierName,City, country 속성을 복사하여
-- Customers테이블에 CustomerName, City, Country 속성으로 삽입
INSERT INTO Customers (CustomerName, City, Country)
SELECT SupplierName, City, Country FROM Suppliers;
-- 예제
INSERT INTO Customer (CustomerName, City, Country)
SELECT SupplierName, City, Country From Suppliers
WHERE Country = 'Germany';
SQL SELECT NULL
- IFNULL(), ISNULL(), COALESCE(), NVL()
- SQL 언어들마다 조금씩 다름 자세히보기
comments
-- 짧은 주석
/* 긴 주석
안녕하세요 sql 공부중입니다. */