SQL 문법

김광훈·2022년 7월 24일
0

TIL(Today I Learned)

목록 보기
49/49

SQL 문법 정리

SQL이란?

  • Structured Query Language으로 구조화된 쿼리 언어를 의미한다.
  • RDBMS에서 DATA에 접근하기 위해 설계된 언어이다.

SQL 문법 종류

  • DDL(Data Definition Language)
  • DML(Data Manipulation Language)
  • DCK(Data Control Language)

DDL - Data Definition Language

테이블의 관계의 구조를 생성하는데 사용되는 언어이다.

  • CREATE : 새로운 데이터베이스 관계, 테이블, 인덱스를 만든다.
  • DROP : 이미 존재하는 데이터베이스 관계, 테이블, 인덱스를 삭제한다.
  • ALTER : 이미 존재하는 데이터베이스 개체에 대해 변경한다.
  • TRUNCATE : 관계에서 데이터를 제거한다.

DML - Data Manipulation Language

테이블 내의 데이터를 조회, 생성, 삭제, 수정하는데 사용되는 언어이다.

  • SELECT : 테이블 내의 데이터를 조회한다.
  • INSERT : 테이블의 데이터를 추가한다.
  • DELETE : 테이블의 데이터를 삭제한다.
  • UPDATE : 테이블의 데이터를 수정한다.

DCK - Data Control Language

데이터의 사용 권한을 관리하는데 사용되는 언어이다.

  • GRANT : 권한을 부여한다.
  • INVOKE : 권한을 박탈, 회수 한다.

권한의 종류

  • CONNECT : 데이터베이스 또는 스키마에 연결하는 권한
  • SELECT : 데이터베이스에서 데이터를 검색할 수 있는 권한
  • INSERT : 데이터베이스에서 데이터를 등록할 수 있는 권한
  • UPDATE : 데이터베이스에서 데이터를 수정할 수 있는 권한
  • DELETE : 데이터베이스에서 데이터를 삭제할 수 있는 권한
  • USAGE : 스키마 또는 함수와 같은 데이터베이스 개체를 사용할 수 있는 권한

SQL 문법

MySQL을 기준으로 작성되었습니다.

DML

SELECT, INSERT, DELETE, UPDATE 주요 문법 이외에도 WHERE, JOIN과 같이 데이터베이스를 조작하는데 도움이 되는 문법이 존재한다.

SELECT

테이블의 데이터를 조회한다.

--ORDERS 테이블의 모든 컬럼 조회
SELECT * FROM ORDERS;

--ORDERS 테이블 중 원하는 컬럼만 조회
SELECT ID, NAME FROM ORDERS;

SELECT DISTINCT

중복된 값을 제외하고 조회한다.

SELECT DISTINCT COUNTRY
FROM Customers
;

INSERT

테이블에 데이터를 생성한다.

--ORDERS 테이블에 데이터를 추가한다.
INSERT INTO ORDERS (ID, NAME, ORDER_INFO) VALUES('1', 'JHON', 'Chiken');

--컬럼의 순서를 맞춘다면 테이블을 컬럼명을 명시하지 않아도 된다.
INSERT INTO ORDERS VALUES('1', 'JOHN', 'Chiken');

DELETE

테이블 내에 데이터를 삭제한다.

--ORDERS 테이블의 모든 데이터를 삭제한다.
DELETE FROM ORDERS;

--ORDERS 테이블의 ID가 1인 데이터를 삭제한다.
DELETE FROM ORDERS
WHERE ID = 1
;

UPDATE

테이블 내의 데이터를 수정한다.

--ORDERS 테이블의 모든 행에 대해 ORDER_INFO 컬럼의 데이터를 수정한다.
UPDATE ORDERS
SET ORDER_INFO = 'Pizza'
;

--ORDERS 테이블의 ID가 1인 행의 ORDER_INFO 컬럼의 데이터를 수정한다.
UPDATE ORDERS
SET ORDERS_INFO = 'Pizza'
WHERE ID = 1
;

WHERE

명령어에 대한 조건을 설정한다.

--ORDERS의 ORDERS_INFO가 Pizza인 행만 조회한다.
SELECT *
FROM ORDERS
WHERE ORDERS_INFO = 'Pizza'

--ORDERS의 ORDERS ID가 10 이하인 행만 조회한다.
SELECT *
FROM ORDERS
WHERE ID <= 10
;

WHERE과 함께 사용할 수 있는 연산자는 아래와 같다.

  • =, <, >, <=, >=, <>
  • BEWTEEN
  • LIKE
  • IN

AND, OR, NOT

WHERE 절과 함께 논리연산자를 사용할 수 있다.

--이름이 JHON이고 ORDERS_INFO가 Pizza인 데이터를 조회한다.
SELECT *
FROM ORDERS
WHERE NAME = 'JHON' AND
ORDERS_INFO = 'Pizza'
;

--이름이 JHON 또는 Mary인 데이터를 조회한다.
SELECT *
FROM ORDERS
WHERE NAME ='JHON' OR
NAME = 'MARY'

--이름이 JHON이 아닌 데이터를 조회한다.
SELECT *
FROM ORDERS
WHERE NOT NAME = 'JHON'
;

ORDER BY

테이블의 데이터를 정렬해서 보여줄 수 있다.

--ORDERS 테이블을 ID 오름차순으로 정렬한다.
SELECT *
FROM ORDERS
ORDER BY ID
;

-- ORDERS 테이블을 ID 내림차순으로 정렬한다.
SELECT *
FROM ORDERS
ORDER BY ID DESC
;

IS NULL, IS NOT NULL

데이터베이스의 null값은 필드가 비어있다는것을 의미한다. 그래서 <,>,such as와 같은 연산자는 사용이 불가능하고 IS NULL과 IS NOT NULL과 같은 연산자로 NULL값 유무를 판단할 수 있다.

--ORDER테이블의 ORDER_INFO가 NULL인 데이터를 조회한다.
SELECT *
FROM ORDERS
WHERE ORDERS_INFO IS NULL
;

--ORDER테이블의 ORDER_INFO가 NULL이 아닌 데이터를 조회한다.
SELECT *
FROM ORDERS
WHERE ORDERS_INFO IS NOT NULL
;

LIMIT

테이블의 데이터가 많이 존재할 때, 데이터의 일부분만 확인하고자 할때 사용된다.
ORDER BY와 함께 사용할 경우 상위 10개 또는 하위 10개 데이터를 조회하는 식으로 사용할 수 있다.

--ORDER 테이블의 PRICE가 가장 높은 10개의 데이터를 조회해라
SELECT *
FROM ORDERS
ORDER BY PRICE DESC
LIMIT 10
;

MIN(), MAX(), AVG(), COUNT(), SUM()

최솟값 또는 최댓값 그리고, 평균, 갯수, 합을 얻을 수 있다.

--PRICE가 가장 낮은 데이터를 출력한다.
SELECT MIN(PRICE)
FROM ORDERS
;

-- PRICE가 가장 높은 데이터를 출력한다
SELECT MAX(PRICE)
FROM ORDERS
;

LIKE

검색 시 단어를 포함하여 검색할 수 있다.

  • LIKE '%p' : 마지막 단어가 p로 끝나는 데이터를 조회한다.
  • LIKE 'p%' : 첫번째 단어가 p로 시작하는 데이터를 조회한다.
  • LIKE '%p%' : p가 존재하는 데이터를 조회한다.
  • LIKE '_p%' : 두번재 단어가 p로 시작하는 데이터를 조회한다.
--ORDERS_INFO에 P로 시작하는 단어를 검색한다.
SELECT *
FROM ORDERS
WHERE ORDERS_INFO LIKE 'p%'
;

이 외에도 조회하는데 도움이 되는 문법이 있다.

  • [] : 'h[oa]t' hot 또는 hat를 찾는다.
  • ^ : 'h[^oa]t' hat 또는 hot를 제외한 모든 것을 찾는다.
    • : 'h[a-c]t' hat부터 hct까지에 대한 단어를 모두 찾는다.

IN

찾으려는 단어가 두개 이상일 때 IN을 사용한다.

--ORDERS_INFO가 Cheiken과 Pizza인 경우에 대해 조회한다.
SELECT *
FROM ORDERS
WHERE ORDERS_INFO IN ('Cheiken', 'Pizza')
;

BETWEEN

특정 컬럼에 대해 범위를 두고 조회할 때 사용된다.

--ORDERS 테이블의 ID가 1이상 10이하인 데이터를 조회한다.
SELECT *
FROM ORDERS
WHERE ID BETWEEN 1 AND 10
;

Aliases

테이블 또는 컬럼의 일시적인 별명을 만들어 주는데 사용한다.

--NAME을 NICKNAME으로 변경해서 출력한다.
SELECT o.ID, o.NAME AS NICKNAME, o.ORDERS_INFO
FROM ORDERS AS o
;

JOIN

두 개의 테이블을 연관성이 있는 컬럼으로 묶어 조회한다.

  • INNER JOIN : 두 개의 테이블이 서로 매칭되는 데이터만 조회한다.
  • LEFT JOIN : TABLE1을 모두 조회하고, TABLE1에 매칭되는 TABLE2 데이터를 조회한다. TABLE1에 존재하지만, TABLE2에는 존재하지 않는 컬럼이 존재할 경우 NULL이 된다.
  • RIGHT JOIN : TABLE2를 모두 조회하고, TABLE2에 매칭되는 TABLE2 데이터를 조회한다. LEFT JOIN과 마찬가지로 존재하지 않는 컬럼은 NULL이 된다.
--Table1과 Table2를 ID로 JOIN한다.
SELECT *
FROM TABLE1 i
INNER JOIN TABLE2 j
ON i.ID = j.ID
;

UNION

두 개의 SELECT 결과물을 합친다.

--TABLE1과 TABLE2의 NAME컬럼을 내림차순으로 조회한다.
SELECT NAME
FROM TABLE1
UNION
SELECT NAME
FROM TABLE2
ORDER BY NAME DESC
;

GROUP BY

컬럼의 동일한 데이터를 묶고, 카운트와 같이 사용하여 동일 데이터 별 갯수를 계산할 수 있도록 도와준다.

SELECT COUNT(NAME)
FROM TABLE1
GROUP BY NAME

이 외에도 많은 sql 문법이 존재하며, 많은 문법들은 이 글을 작성하기 위해 참조한 글을 확인해보자

Reference

W3Schools SQL

profile
잘 부탁드려요

0개의 댓글