2 분 소요

SQL Basic

데이터베이스 관련 명령어

  • 데이터베이스 생성 : CREATE DATABASE 데이터베이스_이름
  • 데이터베이스 사용 : USE 데이터베이스_이름
  • 테이블 생성
    CREATE TABLE user (
        id int PRIMARY KEY AUTO_INCREMENT,
        name varchar(255),
        email varchar(255)
    );
    
  • 테이블 정보 확인(user 테이블) : DESCRIBE user;

SQL 명령어

  • SELECT

    SELECT "HELLO WORLD"
    -- 일반 문자열
    
    SELECT 2
    -- 숫자
    
    SELECT 15 + 3
    -- 연산
    
  • FROM FROM 뒤에 결과를 도출할 테이블 이름 명시

    SELECT 특성_1
    FROM 테이블_이름
    -- 한가지 특성을 테이블에서 사용
    
    SELECT 특성_1, 특성_2
    FROM 테이블_이름
    -- 여러가지 특성 테이블에서 사용
    
    SELECT *
    FROM 테이블_이름
    -- 테이블의 모든 특성 선택
    
  • WHERE 필터의 역할. 선택적으로 사용할 수 있다.

    SELECT 특성_1, 특성_2
    FROM 테이블_이름
    WHERE 특성_1 = "특정 값"
    -- 특정 값과 동일한 데이터 찾기
    
    SELECT 특성_1, 특성_2
    FROM 테이블_이름
    WHERE 특성_2 <> "특정 값"
    -- 특정 값을 제외한 데이터 찾기
    
    SELECT 특성_1, 특성_2
    FROM 테이블_이름
    WHERE 특성_1 > "특정 값"
    -- 특정 값보다 큰 데이터
    
    SELECT 특성_1, 특성_2
    FROM 테이블_이름
    WHERE 특성_1 <= "특정 값"
    -- 특정 값보다 작거나 같은 데이터
    
    SELECT 특성_1, 특성_2
    FROM 테이블_이름
    WHERE 특성_2 LIKE "%특정 문자열%"
    -- 특정 값과 비슷한 데이터
    
    SELECT 특성_1, 특성_2
    FROM 테이블_이름
    WHERE 특성_2 IN ("특정값_1", "특정값_2")
    -- 리스트의 값과 일치하는 데이터
    
    SELECT *
    FROM 테이블_이름
    WHERE 특성_1 IS NULL
    -- NULL 값을 찾을 때
    
    SELECT *
    FROM 테이블_이름
    WHERE 특성_1 IS NOT NULL
    -- NULL이 아닌 데이터를 찾을 때
    
  • ORDER BY 출력된 데이터 정렬. 선택적으로 사용할 수 있다. 오름차순이 기본값이다.

    SELECT *
    FROM 테이블_이름
    ORDER BY 특성_1
    
    SELECT *
    FROM 테이블_이름
    ORDER BY 특성_1 DESC
    -- 내림차순 정렬
    
  • LIMIT 출력할 데이터 개수 지정. 선택적으로 사용할 수 있고 쿼리문 마지막에 쓴다.

    SELECT *
    FROM 테이블_이름
    LIMIT 200
    -- 데이터 200까지만 출력
    
  • DISTINCT 유니크한 값 출력
    SELECT DISTINCT 특성_1
    FROM 테이블_이름
    -- 특성 기준으로 유니크한 값만 출력
    
    SELECT
    DISTINCT
      특성_1
      ,특성_2
      ,특성_3
    FROM 테이블_이름
    --  특성_1, 특성_2, 특성_3의 유니크한 '조합' 값들을 선택
    
  • INNER JOIN INNER JOIN 또는 JOIN으로 사용
    SELECT *
    FROM 테이블_1
    JOIN 테이블_2 ON 테이블_1.특성_A = 테이블_2.특성_B
    -- 둘 이상의 테이블을 공통된 부분을 기준으로 연결
    
  • OUTER JOIN
    SELECT *
    FROM 테이블_1
    LEFT OUTER JOIN 테이블_2 ON 테이블_1.특성_A = 테이블_2.특성_B
    -- 'LEFT OUTER JOIN'으로 LEFT INCLUSIVE을 실행
    
    SELECT *
    FROM 테이블_1
    RIGHT OUTER JOIN 테이블_2 ON 테이블_1.특성_A = 테이블_2.특성_B
    -- 'RIGHT OUTER JOIN'으로 RIGHT INCLUSIVE을 실행
    

SQL Advanced

  • CASE
    SELECT CASE
        WHEN CustomerId <= 25 THEN 'GROUP 1'
        WHEN CustomerId <= 50 THEN 'GROUP 2'
        ELSE 'GROUP 3'
      END
    FROM customers
    -- CustomerId 필드값에 따라 3개의 그룹('GROUP 1', 'GROUP 2', 'GROUP 3')으로 나눈다. 
    -- CustomerId 필드값이 25 이하인 경우에는 'GROUP 1', 26부터 50 사이인 경우에는 'GROUP 2', 51 이상은 'GROUP 3' 으로 분류
    
SUBQUERY 사용 예시
SELECT CustomerId, CustomerId = (SELECT CustomerId FROM customers WHERE CustomerId = 2)
FROM customers
WHERE CustomerId < 6
  • IN, NOT IN
    SELECT *
    FROM customers
    WHERE CustomerId IN (SELECT CustomerId FROM customers WHERE CustomerId < 10)
    -- customers 테이블에서 'CustomerId' 의 값이
    -- 서브쿼리에서 돌려받는 값에 속한 결과들만 조회
    
  • EXISTS, NOT EXISTS
    SELECT EmployeeId
    FROM employees e
    WHERE EXISTS (
      SELECT 1
      FROM customers c
      WHERE c.SupportRepId = e.EmployeeId
      )
    ORDER BY EmployeeId
    -- employees 테이블에서부터 'EmployeeId' 필드 조회.
    -- 이때 서브쿼리로 customers 테이블의 'SupportRepId' 필드값과 employees 테이블의 'EmployeeId' 필드값을 비교해 
    -- 일치하는 레코드들 조회
    
  • FROM
    SELECT *
    FROM (
      SELECT CustomerId
      FROM customers
      WHERE CustomerId < 10
      )