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 값을 중복없이 나타낼 수 있다.

업데이트:

댓글남기기