SQL BASIC

실습환경 : W3Schools try mysql

1. 간단한 데이터 조회하기🔎

1-1. 모든 데이터 가져오기

🔎 문법

SELECT * FROM { 테이블 }
📝 예시

-- Customers의 모든 데이터를 가져오기
SELECT * FROM Customers

1-2. 특정 열 가져오기

🔎 문법

SELECT { 열 이름 } FROM { 테이블 }
SELECT { 열 이름 } AS { 별칭 } FROM { 테이블 }
📝 예시

-- Employees에서 LastName을 이름으로 BirthDate를 생일로 바꿔서 가져오기
SELECT
    LastName AS '이름',
    BirthDate AS '생일'
FROM
    Employees

1-3. 검색 조건

🔎 문법

SELECT * FROM { 테이블 } WHERE { 조건식 }
📝 예시

-- Customers 중 Country가 Germany인 경우
SELECT * FROM Customers WHERE Country = 'Germany'

-- Orders 중 ShipperID가 2가 아닌 경우
SELECT * FROM Orders WHERE ShipperID != 2

-- OrderDetails 중 Quantity 100이 넘는 경우
SELECT * FROM OrderDetails WHERE Quantity > 100

-- Employees 중 FirstName이 O 이후로 시작하는 경우
SELECT * FROM Employees WHERE FirstName >= 'O';

-- Employees 중 BirthDate가 1950-01-01 이전인 경우
SELECT * FROM Employees WHERE BirthDate <= '1950-01-01'

1-4. 패턴 매칭

🔎 문법

SELECT * FROM { 테이블 } WHERE { 조건식 } { LIKE, Between, IN} { 필터 }

-- 특정 값으로 시작하는 값 가져오기
SELECT * FROM { 테이블 } WHERE text LIKE '우아한%' -- '우아한 ...'

-- 특정 값으로 끝나는 값 가져오기
SELECT * FROM { 테이블 } WHERE text LIKE '%우아한' -- '... 우아한'

-- 특정 값이 포함되는 값 가져오기
SELECT * FROM { 테이블 } WHERE text LIKE '%우아한%' -- '... 우아한 테크코스 ...'

-- 그 외 조회조건
BETWEEN a AND b -- a와 b사이에 값이 있다.(a, b값 포함)
IN (list) -- list중 어느 값이라도 일치한다
IS NULL -- null값을 갖는다
📝 예시

-- Orders 중 OrderDate가 '1996-07-01' ~ '1996-07-05' 사이인 경우
SELECT * FROM Orders WHERE OrderDate BETWEEN '1996-07-01' AND '1996-07-05'

-- Products 중 CategoryID가 5 혹은 6에 해당하는 경우
SELECT * FROM Products WHERE CategoryID IN (5, 6)

-- Orders 중 OrderDate가 1996년 08월인 경우
SELECT * FROM Orders WHERE OrderDate Like '1996-08%'

1-5. 정렬

🔎 문법

SELECT * FROM { 테이블 } ORDER BY { 열 이름 } -- 오름차순
SELECT * FROM { 테이블 } ORDER BY { 열 이름 } DESC -- 내림차순
SELECT * FROM { 테이블 } ORDER BY { 열 이름 } LIMIT { 숫자 } -- 정렬된 데이터에서 숫자만큼만 가져오기
📝 예시

-- Employees 중 가장 어린 5명
SELECT * FROM Employees ORDER BY BirthDate DESC LIMIT 5

2. 데이터 가공하기 📦

2-1. 사칙연산

사칙연산은 일반적인 사칙연산 순서와 같음.

ROUND

SELECT 3 / 2 --> 1.50000
  • ROUND를 통해 소수점 몇째 자리까지 보여줄지 정할 수 있음.
SELECT ROUND(3 / 2) --> 2
SELECT ROUND(3 / 2, 1) --> 1.5
SELECT ROUND(3 / 2, 2) --> 1.50

2-2. 문자열 연산

SUBSTRING

SELECT SUBSTRING('20210328', 1, 4) AS '올해 년도'
  • 결과 substring

날짜 관련 함수들

SELECT YEAR('20201117') AS '올해 년도'
SELECT DATE('20201117') AS 'yyyy-mm-dd'
SELECT MONTH('20201117) AS ''
SELECT DAY('20201117) AS '일'

연산 예시

📝 예시

-- Employee의 생일 중 년도만 조회
SELECT YEAR(BirthDate) FROM Employees
SELECT SUBSTRING(BirthDate, 1, 4) FROM Employees

-- Employees의 LastName과 FirstName을 합쳐 FullName 항목으로 조회
SELECT CONCAT(LastName, ' ', FirstName) as FullName FROM Employees

2-3. GROUP BY

  • GROUP BYWHERE에서 필터링한 데이터를 그룹화한다.
  • HAVINGGROUP BY에서 집계한 데이터 집합을 다시 조건에 맞게 필터링할 때 사용한다.
📝 예시

SELECT
    Country, COUNT(*)
FROM Customers
    GROUP BY Country
    HAVING COUNT(Country) = 1;

3. 복수의 테이블 다루기

3-1. 서브쿼리

SELECT 절에 쿼리 추가하기

  • 고객(Customers) 중 국가가 Mexico인 사람과 Germany인 사람수를 조획한다.
SELECT Country, COUNT(*)
FROM Customers
WHERE Country IN ('Mexico', 'Germany')
GROUP BY Country
  • 위 데이터를 열로 표현하고 싶다면?
SELECT
    (SELECT COUNT(*) FROM [Customers] WHERE Country = 'Germany')
SELECT
    (SELECT COUNT(*) FROM [Customers] WHERE Country = 'Mexico')

FROM 절에 쿼리 추가하기

SELECT Country, CustomerName
FROM (SELECT * FROM Customers WHERE Country IN('Germany', 'Mexico'))

연습

  • 상세 주문 데이터(OrderDetails) 중 수량(Quantity)이 가장 많은 데이터 조회
SELECT * FROM OrderDetails
WHERE Quantity = (SELECT MAX(Quantity) FROM OrderDetails)
  • 평균 가격(Price)보다 비싼 상품들(Products) 조회
SELECT  * FROM Products
WHERE Price >= (SELECT AVG(Price) FROM Products)

3-2. JOIN

  • JOIN의 DEFAULT는 INNER JOIN(교집합) JOIN문을 사용할 때는 각각의 테이블 중 어떤 열을 기준으로 합칠 것인지가 중요하다. 이 때, ON 명령어를 활용한다.

INNER JOIN

inner join

LEFT JOIN

left join

RIGHT JOIN

right join


4. SQL 읽기 📖

노르웨이 국적이 아닌 고객의 국가이름과 고객명을 조회 (국가이름 순 정렬)

SELECT Country, CustomerName  -- (3)
FROM Customers                -- (1)
    WHERE Country <> 'Norway' -- (2)
        ORDER BY Country      -- (4)
  1. FROM에서 데이터 집합을 만든다.
  2. WHEREFROM에서 만든 데이터 집합을 조건에 맞게 걸러낸다.
  3. SELECT에서는 걸러낸 데이터 중 선택한 열들을 가져온다.
  4. 모두 진행한 이후, ORDER BY를 통해 데이터 집합을 정렬한다.

5. SQL 쓰기 ✍️

  • 대소문자를 구별하지 않는다.
  • 한줄 또는 여러 줄로 작성할 수 있다.
  • 명령어를 대문자로 작성하고 나머지를 소문자로 작성한다.
  • 예약어는 사용할 수 없다.
  • 들여쓰기 규칙

    • SELECT절은 들여쓰기 하지 않는다.
    • UNION절은 그 다음 SELECT와 함께 작성한다.
    • 칼럼은 한 줄마다 작성한다.
    • FROM절의 테이블 목록, WHERE절의 검색 조건 목록은 한 줄씩 작성한다.
    • 서브쿼리의 괄호는 각각 한 줄로 작성한다.

Written by@yujo
📝 배우고 느낀 점을 기록하고 공유하는 블로그

GitHub