SQL
SQL¶
Create (생성)¶
CREATE TABLE table_name {
id int NOT NULL,
name char(50) NOT NULL,
address char(50),
CONSTRAINT id_pk PRIMARY KEY(id)
}
INSERT INTO table_name (col1, col2, col3) VALUES (val1, val2, val3);
Read (조회)¶
SELECT * FROM table_name;
SELECT * FROM table_name WHERE col1 = '1';
SELECT * FROM table_name WHERE col2 LIKE "SQL%";
SELECT * FROM table_name WHERE date BETWEEN '1997-01-01' AND '1997-12-31';
SELECT * FROM table_name WHERE id IN (1, 2 ,3);
SELECT * FROM table_name ORDER BY col1;
SELECT * FROM table_name LIMIT 5;
SELECT * FROM table_name GROUP BY col1;
SELECT * FROM table_name GROUP BY col1 HAVING col2 = '1';
- 쿼리 실행 순서
- FROM
- ON
- JOIN
- WHERE
- GROUP BY : WHERE 구로 검색한 뒤, 열의 값을 기준으로 그룹화하여 집계!
- HAVING : GROUP BY의 조건절
- SELECT
- DISTINCT
- ORDER BY
-
쿼리 실행 순서 예시
SELECT city AS `도시`, COUNT(city) AS `집계` FROM user WHERE user.age >= 18 GROUP BY city HAVING city >= 'b' ORDER BY city;- FROM 에서 데이터 집합을 만든다
- WHERE는 FROM에서 만든 데이터 집합을 조건에 맞게 걸러낸다
- GROUP BY는 WHERE에서 필터링한 데이터를 그룹화 한다
- HAVING은 GROUP BY에서 집계한 데이터 집합을 다시 조건에 맞게 필터링한다
- SELECT는 그룹화하고 필터링한 데이터 집합을 집계한다
- ORDER BY는 집계한 데이터 집합을 정렬한다
Update (수정)¶
Delete (삭제)¶
재귀테이블¶
WITH RECURSIVE TEMP_HOUR AS (
SELECT 0 AS HOUR
UNION ALL
SELECT HOUR+1
FROM TEMP_HOUR
WHERE HOUR < 23
);
IF절¶
IF (조건, '참', '거짓') AS 'column 이름'
---
SELECT
ANIMAL_TYPE,
IF(NAME IS NOT NULL, NAME, 'No name') AS `NAME`,
SEX_UPON_INTAKE
FROM ANIMAL_INS;
문자열¶
- 합치기
CONCAT('a', 'b')
- 자르기
SUBSTRING(STR, 1, 10)
DATETIME¶
- 연/월/일/시/분/초
YEAR(DATETIME)MONTH(DATETIME)DAY(DATETIME)HOUR(DATETIME)MINUTE(DATETIME)SECOND(DATETIME)
- DATE_FORMAT()
DATE_FORMAT(DATETIME, '%Y-%m-%d')
TIP¶
- COLUMN 중에 NULL이 있을 수도 있으니, IS NOT NULL 조건을 추가해줘야 하나 확인할 것
- 문제의 조건을 읽고, 조건을 모두 노트에 옮겨 적어두는 것도 방법!