SQL
- SQL 동작 순서, 9개
FROM → JOIN → WHERE → GROUP BY → HAVING → SELECT → DISTINCT → ORDER BY → LIMIT, OFFSET
NULL
- IFNULL
NULL일 때 어떤 것을 가져올지 설정합니다.
IFNULL(alias, name)
alias 가 null 이면 name 을 출력한다.
- IS NULL
WHERE 절에 사용합니다. NULL 인 것을 선택합니다.
WHERE NAME IS NULL
- IS NOT NULL
WHERE 절에 사용합니다. NULL이 아닌 것을 선택합니다.
WHERE NAME IS NOT NULL
- NULL AS
특정 열이나 값을 NULL로 명시적으로 지정한다. 그 결과에 별칭을 부여할 때 사용한다. UNION, JOIN 같은 연산을 사용할 때 테이블 간의 열 구조를 일치하기 위해 사용합니다.
SELECT order_id, user_id
FROM OnlineOrders
UNION ALL
SELECT order_id, NULL AS user_id
FROM OfflineOrders;
조건문
- DISTINCT
중복 값을 제거한다.
SELECT DISTINCT column_name
FROM table_name;
여러 열을 함께 사용할 할 수 있다.
SELECT DISTINCT first_name, last_name
FROM Employees;
이 쿼리는 "first_name"과 "last_name"의 조합이 유일한 행만을 반환합니다. 즉, 이름과 성의 조합이 같은 직원이 여러 명 있더라도, 그 조합은 결과에서 단 한 번만 나타납니다.
- IN, NOT IN
IN : 특정 집합에 속한 데이터를 선택하는데 사용합니다.
NOT IN : 조건문으로 특정 집합에 속하지 않은 데이터를 선택하는데 사용합니다.
주로 SELECT, WHERE 사용합니다.
WHERE column_name NOT IN (value1, value2, value3, ...);
서브 쿼리랑도 활용합니다.
두 가지를 활용할 수도 있습니다.
WHERE
(CATEGORY, PRICE) IN (SELECT CATEGORY, MAX(PRICE)
FROM FOOD_PRODUCT
GROUP BY CATEGORY
)
- CASE WHEN
조건에 따라 다른 값을 선택하거나 계산하는데 사용하는 조건문 입니다.
CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
...
ELSE default_result
END
- 비트 비교
AND 연산자로 비트 단위에서 두 숫자의 해당 비트가 모두 1인 경우 1이 나옵니다.
비트 마스크를 사용하여 특정 비트가 설정되었는지 확인하는데 사용합니다.
SKILL_CODE & CODE = CODE
1100 (12 in decimal)
& 0101 (5 in decimal)
----
0100 (4 in decimal)
WHERE 문을 사용할 때 일치하면 > 같이 사용한다.
숫자
- COUNT()
집계 함수 중 하나로, 테이블 내에서 특정한 조건을 만족하는 행의 수를 세는데 사용합니다.
SELECT COUNT(column_name)
FROM table_name;
SELECT COUNT(*)
FROM table_name;
SELECT customer_id, COUNT(*)
FROM Orders
GROUP BY customer_id;
- MAX(), MIN()
MAX : 집계 함수 중 하나로, 특정 열의 가장 큰 값을 찾는데 사용합니다.
MIN : 집계 함수 중 하나로, 특정 열의 가장 작은 값을 찾는데 사용합니다.
GROUP BY랑 사용할 수 있습니다.
SELECT MAX(salary)
FROM Employees;
SELECT department_id, MAX(salary)
FROM Employees
GROUP BY department_id;
SELECT MIN(salary)
FROM Employees;
SELECT department_id, MIN(salary)
FROM Employees
GROUP BY department_id;
- SUM() : 총합
집계 함수 중 하나로, 특정 열의 값들을 모두 더하는데 사용합니다.
SELECT SUM(total_amount)
FROM Orders;
SELECT customer_id, SUM(total_amount)
FROM Orders
GROUP BY customer_id;
- ROUND()
주어진 숫자를 지정된 소수점까지 반올림합니다.
형태
ROUND(number, decimal_places)
number : 반올림하려는 숫자
decimal_places : 숫자를 반올림하려는 소수점 이하 자릿수입니다. 1이면 첫 번쨰 소수가 보이게 나옵니다.
ROUND(123.4567, 2) = 123.46
연도 DATE
- DATE_FORMAT
날짜와 시간을 특정 포맷으로 변환할 때 사용합니다. 문자열을 반환합니다.
DATE_FORMAT(NOW(), '%Y-%m-%d')
변환할 날짜, 날짜 형식을 입력 받습니다.
- YEAR
날짜 값으로부터 연도 부분을 추출할 때 사용합니다. 4자리 숫자로 반환합니다.
YEAR(NOW())
- DATE
날짜 부분만 가져오고 싶을 때 사용합니다.
DATE(NOW())
DATE(NOW()) = '2022-04-13'
STRING 문자열
MYSQL의 STRING은 1부터 시작한다.
- LEFT
문자열의 왼쪽 부분에서 지정된 수의 문자를 반환하는 함수입니다.
LEFT(STRING, 2)
LEFT(’Hello, World’, 4) = ‘Hell’
- SUBSTRING, SUBSTR
문자열의 특정 부분을 추출할 때 사용하는 함수입니다.
SUBSTRING(STRING, 추출할 위치, 추출할 문자 수)
문자수를 생략하면 추출할 위치에서 끝까지 모든 문자를 반환합니다.
SUBSTRING('Hello World', 2, 3) = ‘ell
- CONCAT
두 개 이상의 문자열을 하나로 결합하는데 사용합니다.
CONCAT(string1, string2, ..., stringN)
🔥 SELECT에 CONCAT 사용한 필드를 정렬하면 잘 작동하지 않는다. 왜냐하면 문자열이기 때문이다. 고로 정렬할려면 CONCAT 전에 값으로 정렬해야 한다.
JOIN
- LEFT JOIN
왼쪽 테이블에 모든 정보를 가져오고 싶을 때 사용합니다. JOIN을 사용하면 조건을 충족하는 것만 가져옵니다.
UNION
UNION은 2개 이상의 SELECT 문의 결과를 하나의 결과 집합으로 결합하는 데 사용합니다.
각 SELECT 문에서 얻은 결과 중 중복된 행을 제거하고 유니크한 결과만을 반환합니다.
SELECT의 필드가 같아야 합니다.
SELECT city FROM Customers
UNION
SELECT city FROM Suppliers
ORDER BY city;
UNION ALL 은 UNION과 유사하게 작동하지만 중복된 행을 제거하지 않고 모든 행을 포함시킵니다. UNION ALL은 UNION 보다 더 빠르게 작동합니다. 중복을 제거하는 추가 작업이 없기 때문입니다.
변수
- 변수 선언
SET @HOUR = -1;
- 1씩 증가
(@HOUR := @HOUR + 1)
WHERE @HOUR < 23
:= 값을 할당할 때 사용됩니다.