https://youtu.be/dgpBXNa9vJc?feature=shared
갖고 노는 MySQL 데이터베이스 강좌 - 얄코
https://www.yalco.kr
실습환경 및 강좌내용 사이트
SELECT
CustomerID AS '아이디',
CustomerName AS '고객명',
City AS '도시',
Country AS '국가'
FROM Customers
WHERE
City = 'London' OR Country = 'Mexico'
ORDER BY CustomerName
LIMIT 0, 5;
SELECT
FROM
WHERE 조건
- AS 로 칼럼명 변경
- LIMIT 로 원하는 만큼
- ORDER BY
: ASC = 오름차순
: DESC = 내림차순
각종 연산자들
연산자 의미
+, -, *, / |
각각 더하기, 빼기, 곱하기, 나누기 |
%, MOD |
나머지 |
IS |
양쪽이 모두 TRUE 또는 FALSE |
IS NOT |
한쪽은 TRUE, 한쪽은 FALSE |
AND, && |
양쪽이 모두 TRUE일 때만 TRUE |
OR, || |
한쪽은 TRUE면 TRUE |
= |
양쪽 값이 같음 |
!=, <> |
양쪽 값이 다름 |
>, < |
(왼쪽, 오른쪽) 값이 더 큼 |
>=, <= |
(왼쪽, 오른쪽) 값이 같거나 더 큼 |
BETWEEN {MIN} AND {MAX} |
두 값 사이에 있음 |
NOT BETWEEN {MIN} AND {MAX} |
두 값 사이가 아닌 곳에 있음 |
IN (...) |
괄호 안의 값들 가운데 있음 |
NOT IN (...) |
괄호 안의 값들 가운데 없음 |
LIKE '... % ...' |
0~N개 문자를 가진 패턴 |
LIKE '... _ ...' |
_ 갯수만큼의 문자를 가진 패턴 |
숫자 관련 함수들
ROUND |
반올림 |
CEIL |
올림 |
FLOOR |
내림 |
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 |
두 시간/날짜 간 시간차 |
DATE_FORMAT |
시간/날짜를 지정한 형식으로 반환 |
STR _ TO _ DATE(S, F) |
S를 F형식으로 해석하여 시간/날짜 생성 |
기타 함수들
IF(조건, T, F) |
조건이 참이라면 T, 거짓이면 F 반환 |
IFNULL(A, B) |
A가 NULL일 시 B 출력 |
SELECT
CASE
WHEN -1 > 0 THEN '-1은 양수다.'
WHEN -1 = 0 THEN '-1은 0이다.'
ELSE '-1은 음수다.'
END;
조건에 따라 그룹으로 묶기
GROUP BY (조건에 따라 집계된 값을 가져옴)
SELECT
Country, City,
CONCAT_WS(', ', City, Country)
FROM Customers
GROUP BY Country, City;
WITH ROLLUP (전체의 집계값)
SELECT
Country, COUNT(*)
FROM Suppliers
GROUP BY Country
WITH ROLLUP;
HAVING (그룹화된 데이터 걸러내기)
SELECT
COUNT(*) AS Count, OrderDate
FROM Orders
WHERE OrderDate > DATE('1996-12-31')
GROUP BY OrderDate
HAVING Count > 2;
-- WHERE 은 그룹화하기 전의 데이터, HAVING 은 그룹 후 집계
DISTINCT
- GROUP BY 와 달리 집계함수가 사용되지 않는다 (COUNT 같은 거)
- GROUP BY와 달리 정렬하지 않아 빠르다( ORDER BY로 수동으로 정렬해줄 수 있음)
SELECT DISTINCT CategoryID
FROM Products;
-- 위의 GROUP BY를 사용한 쿼리와 결과 비교
-- GROUP BY와 함께 사용
SELECT
Country,
COUNT(DISTINCT CITY)
FROM Customers
GROUP BY Country;