[SQL] SQL 기본 문법 정리
SQL 문을 실제 실행하면서 확인할 수 있는 사이트이다. 해당 사이트를 활용해 기본 문법을 실행하면서 정리해보자.
W3Schools - SQL Tryit Editor v1.6
SELECT
-- 원하는 컬럼 조회
-- SELECT '컬럼명' FROM '테이블명'
SELECT CustomerName, ContactName FROM Customers;
-- 전체 조회
-- SELECT '모든 컬럼' FROM '테이블명'
SELECT * FROM Customers;
- SELECT 는 조회할 컬럼을 지정하는 명령어이다.
- 컬럼명 대신 * 를 사용하면 모든 컬럼을 조회한다.
WHERE
-- ID 값이 4 이하인 조건
SELECT * FROM Customers
WHERE CustomerID <= 4;
-- City 가 Berlin 인 조건
SELECT * FROM Customers
WHERE City = "Berlin";
- WHERE 는 조건문이다. 해당 조건에 맞는 데이터만 조회한다.
- 관계, 논리 연산자 사용이 가능하다.
- 숫자형 데이터는 부등호가 사용가능하다.
- 문자열의 경우 LIKE 를 사용해 일치 여부를 검사할 수 있다.
LIKE
-- Berlin City 조회
SELECT * FROM Customers
WHERE City Like "Berlin";
-- Ber 로 시작하는 City 조회
SELECT * FROM Customers
WHERE City Like "Ber%";
-- Ber 이후 1글자만 허용
SELECT * FROM Customers
WHERE City Like "Ber_";
- LIKE 는 문자열 패턴 검색 연산자이다.
- 기본적으로 Like “Berlin” 은 정확하게 Berlin 데이터를 검색한다. Berlins, ABerlin 등은 검색되지 않는다.
- 이때 추가 조건을 [%, _] 사용해서 검색할 수 있다.
- % 는 모든 문자를 의미한다.
- _ 는 한 글자를 의미한다.
- Ber% 는 “Ber” 로 시작하는 모든 문자열을 검색한다.
- 실제 Bern, Bergamo, Berlin 이 모두 검색된다.
- Ber_ 는 “Ber” 뒤에 임의의 한 글자가 추가된 문자열을 검색한다.
- 검색시 Bern 하나만 검색된다.
- % 는 모든 문자를 포함하기에 공백도 포함된다.
- Bern% 검색 시 Bern 이 검색된다.
- _ 는 한 글자를 명확하게 의미한다.
- Bern_ 검색 시 Bern 는 검색되지 않는다.
AND, OR
SELECT * FROM Customers
WHERE City = "Berlin" AND CustomerID = 1;
- 여러 조건을 논리 연산자를 사용해 표현할 수 있다.
BETWEEN
SELECT * FROM Customers
WHERE CustomerID BETWEEN 160 and 165;
- BETWEEN 을 사용해 범위 데이터를 조회할 수 있다.
IN
SELECT * FROM Customers
WHERE City IN ("Berlin", "Bern")
SELECT * FROM Customers
WHERE City = "Berlin" OR City = "Bern"
- 특정 데이터가 포함된 데이터를 조회할 수 있다.
- IN 은 = 연산자를 여러 번 수행한 결과와 같다.
ORDER BY
-- 오름차순 정렬
SELECT * FROM Customers
ORDER BY CustomerID ASC
-- 내림차순 정렬
SELECT * FROM Customers
ORDER BY CustomerID DESC
- 조회된 데이터를 정렬한다.
- ASC(Ascending order) 는 오름차순 정렬이다.
-
DESC(Descending order) 는 내림차순 정렬이다.
- , 를 사용해서 여러 정렬 조건을 추가할 수 있다.
- CustomerID 가 같은 경우 다음 조건으로 정렬
GROUP BY
SELECT ProductID, sum(Quantity) AS Total FROM OrderDetails
GROUP BY ProductID;
- Group BY 는 그룹화하는 연산자이다.
- 말 그대로 ProductID 가 동일한 데이터들을 하나의 그룹으로 만드는 과정이다.
- 해당 SQL 문은 ProductID 를 기준으로 Quantity 의 총 합을 조회한다.
- 추가로 사용된 것이 별칭과 집계함수이다.
AS
SELECT ProductID, sum(Quantity) FROM OrderDetails
GROUP BY ProductID;
-- 별칭 추가
SELECT ProductID, sum(Quantity) AS Total FROM OrderDetails
GROUP BY ProductID;
- 사이트에서 위 쿼리를 실제 실행하면 합계의 컬럼명이 “Expr1001” 로 나타난다.
- 혹은 컬럼명이 “sum(Quantity)” 그대로 표시될 수도 있다.
- 컬럼명을 정확하게 하기 위해서 별칭을 사용한다.
- AS Total 을 추가해 총량을 Total 로 지정한다.
- FROM 절에서 테이블에 별칭을 사용 시 다른 절에서 해당 별칭으로 테이블을 접근할 수 있다.
- SELECT 절에서 정의된 별칭은 다른 절에서 사용할 수 없다.
집계함수
SELECT ProductID,
COUNT(*) AS number_of_orders,
SUM(Quantity) AS total_quantity,
AVG(Quantity) AS average_quantity,
MIN(Quantity) AS min_quantity,
MAX(Quantity) AS max_quantity
FROM OrderDetails
GROUP BY ProductID;
- COUNT() : 행의 개수 (ProductID 로 그룹화 했을 때 포함된 행의 개수)
- SUM() : 컬럼의 합계
- AVG() : 컬럼의 평균
- MIN() : 컬럼의 최솟값
- MAX() : 컬럼의 최댓값
HAVING
SELECT ProductID,
SUM(Quantity) AS total_quantity
FROM OrderDetails
GROUP BY ProductID
HAVING SUM(Quantity) >= 100
-- WHERE 절 추가
SELECT ProductID,
SUM(Quantity) AS total_quantity
FROM OrderDetails
WHERE Quantity >= 10
GROUP BY ProductID
HAVING SUM(Quantity) >= 100
- 그룹화된 데이터에 대해서 조건을 지정한다.
- 기본 데이터의 조건은 WHERE, 그룹화 이후의 조건은 HAVING 이다.
- 두 번째 SQL 문은
- Quantity 가 10 이상인 데이터에 대해서
- ProductID 로 그룹화를 진행하고
- 그룹 중에서 Sum(Quantity) 가 100 이상인 데이터를 조회한다.
DISTINCT
SELECT DISTINCT(SHIPPERID) FROM Orders;
- 중복된 값을 제거하고 하나만 출력하는 연산자이다.
- 위 쿼리를 실행하면 Orders 에 있는 ShipperID 값을 중복없이 나타낼 수 있다.
댓글남기기