SQL 문법 간단정리

dowon kim·2023년 6월 2일
0

엑셀보다 쉬운 SQL

목록 보기
5/5

SQL 분류

  • 데이터 정의어 :

    DDL 테이블이나 관계의 구조를 생성하는 데 사용하며
    CREATE ALTER DROP 문 등이 있다

  • 데이터 조작어 :

    DML 테이블에 데이터를 검색 삽입 수정 삭제하는 데 사용하며
    SELECT INSERT DELETE UPDATE 문 등이 있다
    여기서 SELECT 문은 특별히 질의어 query라고 부른다

  • 데이터 제어어 :

    DCL 데이터의 사용 권한을 관리하는 데 사용하며 GRANT REVOKE 문 등이 있다

SQL 쿼리 처리순서

1 FROM
2 ON
3 JOIN
4 WHERE
5 GROUP BY
6 WITH CUBE 또는 WITH ROLLUP
7 HAVING
8 SELECT
9 DISTINCT
10 ORDER BY
11 TOP

SELECT

  • SELECT 문은 테이블에서 원하는 정보를 불러올 때 사용하는 문법
  • 테이블의 열에 속하는 데이터를 불러온다.
  • *은 모든 것을 가져오는 것을 뜻함
SELECT col1, col2, ....
FROM table_name;

DISTINCT

중복을 배제하고 고유값만을 출력하고자 할 때 사용 ( SELECT와 같이 사용 )

SELECT DISTINCT col1, col2, ...
FROM table_name;

WHERE

조건을 걸어 검색하고자 할 때 사용

SELECT col1, col2, ...
FROM table
WHERE condition;
  • 비교 연산자
    같을 때 "="
    같지 않을 때 "!=", "<>"
    클 때 "<"
    크거나 같을 때 "<="

AND, OR, NOT

복합 연산자

SELECT col1, col2, ...
FROM table
WHERE condition1 and condition2;

SELECT col1, col2, ....
FROM table
WHERE condition1 or condition2;

SELECT col1, col2, ...
FROM table
WHERE NOT condition;

ORDER BY

결과를 오름차순이나 내림차순으로 정렬

SELECT col1, col2, ...
FROM table
ORDER BY col1 ASC|DESC;

SELECT col1, col2, ...
FROM table
ORDER BY FIELD (col1, order1, order2, ...);

LIMIT

출력 결과의 갯수를 제한

SELECT * FROM table LIMIT 3;
SELECT * FROM table LIMIT 2, 3;
SELECT * FROM table LIMIT 0, 4;

NULL VALUE

값이 NULL인 값을 검색

SELECT col1, col2, ...
FROM table
WHERE col_name IS NOT NULL;

SELECT col1, col2, ...
FROM table
WHERE col_name IS NULL;

LIKE

특정 패턴을 탐색

SELECT col1, col2, ...
FROM table
WHERE col_name LIKE pattern;

%, _ , + , [] , [^] ,

% : 0개 문자 혹은 여러 개의 문자를 의미 ('%hanmail.net' : 한메일로 끝나는 모든 계정들)
_ : 특정 위치의 1개의 문자 일치 ('해%':두번째글자에 구 가 들어가는것을 포함한 모든 문자열)
+ : 문자를 연결 ('국어' + '수학' = '국어수학')
[ ] : 1개의 문자와 일치 ('[0-5]%':0-5 사이 숫자로 시작하는 문자열)
[^] : 1개의 문자와 불일치 ('[0-5]%':0-5 사이 숫자로 시작하지 않는 문자열)

IN()

WHERE 절 내 여러 값을 설정하고 할 때 사용

SELECT col
FROM table
WHERE col_name IN (val1, val2, ...);

BETWEEN

WHERE 절 내 검색 조건으로 범위를 지정하고자 할 때 사용

SELECT col1
FROM table
WHERE col_name BETWEEN val1 AND val2;

JOIN

두 개나 그 이상의 테이블의 행을 서로 결합하고자 할 때
INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL OUTER JOIN 이 존재

SELECT col1
FROM table1 INNER JOIN table2
ON table1.col = table2.col;

SELECT col1
FROM table1 LEFT INNER JOIN table2
ON table1.col = table2.col;

SELECT col1
FROM table1 RIGHT JOIN table2
ON table1.col = table2.col;

SELECT col1
FROM table1 FULL OUTER JOIN table2
ON table1.col = table2.col;

UNION

SELECT의 컬럼 리스트를 기준으로 두 개 이상의 질의 결과를 하나의 테이블로 합치고자 할 때

SELECT col FROM table1
UNION
SELECT col FROM table2;

UNION은 디폴트로 중복값을 제거함, 제거하고 싶지 않을 때는 UNION ALL을 사용해야 한다.

MIN, MAX, COUNT, AVG, SUM

최소값 , 최대값 , 갯수 , 평균 , 합계

SELECT MIN (col) FROM table;
SELECT MAX (col) FROM table;
SELECT COUNT (col) FROM table;
SELECT AVG (col) FROM table;
SELECT SUM (col) FROM table;

GROUP BY

집계함수와 함께 사용되어, 결과를 지정한 칼럼에 따라 그룹으로 묶고자 할 때

SELECT col1
FROM table
WHERE condition
GROUP BY col_name;

HAVING

WHERE 조건을 걸 수 없는 집계함수에 조건을 걸고자 할 때 사용

SELECT col1
FROM table
WHERE condition
GROUP BY col_name
HAVING condition;

CONCAT

여러 문자열을 하나로 합치고자 할 때 사용

SELECT CONCAT(str1, str2, str3, ...);

ROUND(), TRUNC()

ROUND는 반올림, TRUNC는 버림

SELECT ROUND|TRUNC (val, digit)
FROM table

CASE

if문 또는 switch문처럼 사용됨

SELECT employee_id
     , first_name
     , job_id
     , CASE WHEN job_id = 13 THEN 'CLERK'
            WHEN job_id = 14 THEN 'MANAGER'
            ELSE 'N/A'
       END AS [job_title]
  FROM employees
 WHERe department_id IN (1, 3)
 // like if
 
 SELECT employee_id
     , first_name
     , CASE job_id
            WHEN 13 THEN 'CLERK'
            WHEN 14 THEN 'MANAGER'
            ELSE 'N/A'
       END AS [job_title]
  FROM employees
 WHERE department_id = 3
 // like switch
 
 SELECT employee_id
     , first_name
     , job_id
     , CASE WHEN department_id = 3 AND job_id = 13 THEN 'CLERK'
            WHEN department_id = 3 AND job_id = 14 THEN 'MANAGER'
       END AS [job_title]
  FROM employees
 WHERE department_id IN (1, 3)
 // 조건 여러개
 
 SELECT employee_id
     , first_name
     , job_id
     , salary
  FROM employees
 WHERE department_id IN (1, 3)
   AND (CASE WHEN salary >= 4000 THEN 1
             WHEN salary >= 3000 THEN 2
             WHEN salary >= 2000 THEN 3
       END) = 1
 //where절에 사용
       
 SELECT employee_id
     , first_name
     , department_id
     , salary
     , CASE department_id
            WHEN 1 THEN
                 CASE WHEN salary >= 4000 THEN '1등급'
                      WHEN salary >= 3000 THEN '2등급'
                      WHEN salary >= 2000 THEN '3등급'
                 END
            WHEN 3 THEN
                 CASE WHEN salary >= 4000 THEN '1등급'
                      WHEN salary >= 3000 THEN '2등급'
                      WHEN salary >= 2000 THEN '3등급'
                 END
       END AS [salary_grade] 
  FROM employees
 WHERE department_id IN (1, 3)
 //case 중첩
profile
The pain is so persistent that it is like a snail, and the joy is so short that it is like a rabbit's tail running through the fields of autumn

0개의 댓글