SQL이란?
Structured Query Language
DBMS(Database Management System)에서 데이터를 관리할 수 있게 하는 언어
- RDBMS(Relational-DBMS) - SQL Database
테이블을 분리하고 고유 ID를 연결하여 데이터를 관리한다.
데이터의 중복을 피하고 효율적으로 관리할 수 있다.
분리된 테이블을 JOIN해서 확인할 수 있다.
MySQL, Oracle, MongoDB, Cassandra, DinamoDB, Riak, Redis 등
- No-SQL Database 비관계형
명령어
SELECT
SELECT * FROM Customers;
SELECT Country FROM Customers;
DISTINCT
SELECT DISTINCT Country FROM Customers;
WHERE
SELECT * FROM Orders
WHERE EmployeeID = 3;
ORDER BY
SELECT * FROM Customers
ORDER BY ContactName (ASC);
SELECT * FROM Customers
ORDER BY ContactName DESC;
LIMIT
SELECT * FROM Customers
LIMIT 10;
SELECT * FROM Customers
LIMIT 0, 10;
SELECT * FROM Customers
LIMIT 30, 10;
AS
SELECT
CustomerId AS '아이디',
CustomerName AS '고객명',
Address AS '주소'
FROM Customers;
INSERT INTO
특정한 컬럼에 데이터를 넣을 때는 괄호 안에 컬럼명 명시
모든 컬럼에 넣을 때는 생략 가능
INSERT INTO Customers (CustomerName, City, Country)
VALUES ('Cardinal', 'Stavanger', 'Norway');
UPDATE … SET
UPDATE Categories
SET CategoryName = 'First Category', Desciption = 'Hi'
WHERE CategoryID = 1;
DELETE
DELETE FROM Categories
WHERE CategoryID > 5
DELETE FROM Customers;
LIKE
WHERE 절과 함께 쓰임
SELECT * FROM Customers
WHERE CustomerName LIKE 'a%';
SELECT * FROM Customers
WHERE CustomerName LIKE '%a';
SELECT * FROM Customers
WHERE CustomerName LIKE '_r%';
Wildcards
WHERE 절과 함께 쓰임
기호 | 설명 | 예시 |
---|
% | 0또는 하나 이상의 문자 | bl% finds bl, black, blue, and blob |
_ | 문자 하나 | h_t finds hot, hat, and hit |
[] | 괄호 내의 문자 | h[oa]t finds hot and hat, but not hit |
^ | 괄호 내의 문자가 아닌 것 | h[^oa]t finds hit, but not hot and hat |
- | 범위 내 문자 하나 | c[a-b]t finds cat and cbt |
IN
WHERE 절 내에서 여러개의 값을 가져올 때 씀 (여러개의 OR과 같음)
SELECT * FROM Customers
WHERE Country IN ('Germany', 'France', 'UK');
JOIN
(INNER) JOIN
: Returns records that have matching values in both tables
LEFT (OUTER) JOIN
: Returns all records from the left table, and the matched records from the right table
RIGHT (OUTER) JOIN
: Returns all records from the right table, and the matched records from the left table
FULL (OUTER) JOIN
: Returns all records when there is a match in either left or right table

SELECT F.FLAVOR
FROM FIRST_HALF F
JOIN ICECREAM_INFO I
ON F.FLAVOR = I.FLAVOR
WHERE TOTAL_ORDER > 3000 AND INGREDIENT_TYPE = 'fruit_based'
ORDER BY F.TOTAL_ORDER DESC;
연산자
연산자 | 의미 |
---|
+, -, *, / | 각각 더하기, 빼기, 곱하기, 나누기 |
%, MOD | 나머지 |
IS | 양쪽이 모두 TRUE 또는 FALSE |
IS NOT | 한쪽은 TRUE, 한쪽은 FALSE |
AND, && | 양쪽이 모두 TRUE일 때만 TRUE |
OR, | |
= | 양쪽 값이 같음 |
!=, <> | 양쪽 값이 다름 |
>, < | (왼쪽, 오른쪽) 값이 더 큼 |
>=, <= | (왼쪽, 오른쪽) 값이 같거나 더 큼 |
BETWEEN {MIN} AND {MAX} | 두 값 사이에 있음 |
NOT BETWEEN {MIN} AND {MAX} | 두 값 사이가 아닌 곳에 있음 |
IN (...) | 괄호 안의 값들 가운데 있음 |
NOT IN (...) | 괄호 안의 값들 가운데 없음 |
LIKE '... % ...' | 0~N개 문자를 가진 패턴 |
LIKE '... _ ...' | _ 갯수만큼의 문자를 가진 패턴 |
사칙연산
연산자 | 의미 |
---|
+, -, *, / | 더하기, 빼기, 곱하기, 나누기 |
% | 나머지 |
문자열 사칙연산
SELECT 'ABC' + 3;
SELECT 'ABC' * 3;
SELECT '1' + 3;
참/거짓
MIN, MAX
SELECT MAX(Price) AS LargestPrice, MIN(Price) AS SmallestPrice
FROM Products;
COUNT, AVG, SUM
SELECT COUNT(DISTINCT Country) FROM Customers;
SELECT COUNT(*) FROM Products WHERE Price = 18;
SELECT AVG(Price) FROM Products WHERE CategoryID = 1;
SELECT SUM(Price) FROM Products WHERE CategoryID = 1;
숫자 관련 함수
함수 | 설명 |
---|
ROUND | 반올림 |
CEIL | 올림 |
FLOOR | 내림 |
ABS | 절대값 |
GREATEST | (괄호 안에서) 가장 큰 값 |
LEAST | (괄호 안에서) 가장 작은 값 |
함수 | 설명 |
---|
MAX | 가장 큰 값 |
MIN | 가장 작은 값 |
COUNT | 갯수 (NULL값 제외) |
SUM | 총합 |
AVG | 평균 값 |
POW(A, B), POWER(A, B) | A를 B만큼 제곱 |
SQRT | 제곱근 |
TRUNCATE(N, n) | N을 소숫점 n자리까지 선택 |
문자열 관련 함수
함수 | 설명 |
---|
UCASE, UPPER | 모두 대문자로 |
LCASE, LOWER | 모두 소문자로 |
CONCAT(...) | 괄호 안의 내용 이어붙임 |
CONCAT_WS(S, ...) | 괄호 안의 내용 S로 이어붙임 |
SUBSTR, SUBSTRING | 주어진 값에 따라 문자열 자름 |
LEFT | 왼쪽부터 N글자 |
RIGHT | 오른쪽부터 N글자 |
LENGTH | 문자열의 바이트 길이 |
CHAR_LENGTH, CHARACTER_LEGNTH | 문자열의 문자 길이 |
TRIM | 양쪽 공백 제거 |
LTRIM | 왼쪽 공백 제거 |
RTRIM | 오른쪽 공백 제거 |
LPAD(S, N, P) | S가 N글자가 될 때까지 P를 이어붙임 |
RPAD(S, N, P) | S가 N글자가 될 때까지 P를 이어붙임 |
REPLACE(S, A, B) | S중 A를 B로 변경 |
INSTR(S, s) | S중 s의 첫 위치 반환, 없을 시 0 |
CAST(A AS T) | A를 T 자료형으로 변환 |
CONVERT(A, T) | A를 T 자료형으로 변환 |
시간/날짜 관련 함수
함수 | 설명 |
---|
CURRENT_DATE, CURDATE | 현재 날짜 반환 |
CURRENT_TIME, CURTIME | 현재 시간 반환 |
CURRENT_TIMESTAMP, NOW | 현재 시간과 날짜 반환 |
DATE | 문자열에 따라 날짜 생성 |
TIME | 문자열에 따라 시간 생성 |
YEAR | 주어진 DATETIME값의 년도 반환 |
MONTHNAME | 주어진 DATETIME값의 월(영문) 반환 |
MONTH | 주어진 DATETIME값의 월 반환 |
WEEKDAY | 주어진 DATETIME값의 요일값 반환(월요일: 0) |
DAYNAME | 주어진 DATETIME값의 요일명 반환 |
DAYOFMONTH, DAY | 주어진 DATETIME값의 날짜(일) 반환 |
HOUR | 주어진 DATETIME의 시 반환 |
MINUTE | 주어진 DATETIME의 분 반환 |
SECOND | 주어진 DATETIME의 초 반환 |
ADDDATE, DATE_ADD | 시간/날짜 더하기 |
SUBDATE, DATE_SUB | 시간/날짜 빼기 |
DATE_DIFF | 두 시간/날짜 간 일수차 |
TIME_DIFF | 두 시간/날짜 간 시간차 |
LAST_DAY | 해당 달의 마지막 날짜 |
DATE_FORMAT | 시간/날짜를 지정한 형식으로 반환 |
STR TO DATE(S, F) | S를 F형식으로 해석하여 시간/날짜 생성 |
날짜 형식
형식 | 설명 |
---|
%Y | 년도 4자리 |
%y | 년도 2자리 |
%M | 월 영문 |
%m | 월 숫자 |
%D | 일 영문(1st, 2nd, 3rd...) |
%d, %e | 일 숫자 (01 ~ 31) |
%T | hh:mm:ss |
%r | hh:mm:ss AM/PM |
%H, %k | 시 (~23) |
%h, %l | 시 (~12) |
%i | 분 |
%S, %s | 초 |
%p | AM/PM |
조건문 함수
형식 | 설명 |
---|
IF(조건, T, F) | 조건이 참이라면 T, 거짓이면 F 반환 |
IFNULL(A, B) | A가 NULL일 시 B 출력 |