DML(Data Manipulation Language)
INSERT 문: 데이터 입력시 사용
INSERT INTO table_name (col1, col2, col3) VALUES(value1, value2, value3)
SELECT 문을 사용하는 응용도 가능
INSERT INTO table2 (col1, col2)
SELECT col1, col2 FROM table1
WHERE id>5;
DELETE 문: 데이터 삭제시 사용. 주의하여 사용하여야 하며 트랜잭션을 사용할 것을 권장
DELETE table_name WHERE id=1;
UPDATE 문: 기존의 레코드를 변경할 때 사용
UPDATE table_name
SET col1=value1, col2=value2
WHERE id>5;
DQL(Data Query Language) 문
SELECT 문: 레코드를 조회할 때 사용
SELECT column_name FROM table_name
temp table 만들어서 조회하는 방법
SELECT * fROM
(SELECT id, customer_name, REPLACE(customer_address, ' ', '') AS address
FROM customer) AS temp_table_name
WHERE address = "서울시마포구"
SELECT INTO를 사용하는 방법
- mapo_customer 테이블에 결과를 저장하게 됨
SELECT *
INTO mapo_customer
FROM customer
WHERE customer_address = '서울시 마포구'
논리연산자
- AND: A AND B, 우리가 논리연산에서 자주 사용하는 AND
- BETWEEN: bETWEEN 1 AND 10, 1부터 10사이의 값인 지 확인
- IN: 값들 중에 있는 지 있으면 True
- LIKE: wildcard로 문자열을 확인이 가능함. 단 성능저하의 주범!
- NOT: 부정 연산. e.g., NOT IN, NOT BETWEEN
- OR: 우리가 논리연산에서 자주 사용하는 OR와 비슷함
- IS NULL: NULL 확인
집합연산자
- UNION: 여러 개의 SQL문을 하나로 합침
SELECT * FROM customer WHERE address = '서울특별시 마포구'
UNION ALL
SELECT * FROM customer WHERE address = '서울특별시 영등포구'
- UNION ALL은 중복 여부와 관계 없이 하나의 SQL문으로 합침
- UNION은 중복을 제거하며, 이 때문에 성능이 하락할 수 있음
GROUP BY
- 하나 이상의 열을 기준으로 그룹을 묶어서 결과를 반환
- 집계 함수와 사용할 수 있음(MAX, MIN, AVG, COUNT, SUM)
- 아래는 기본 예, 첫번째로 customer_gender로 group by를 수행하고 두번째로 address에 대해 group by를 수행할 것
SELECT customer_gender, address FROM customer
GROUP BY customer_gender, address
집계 함수와 같이 쓸경우, 아래와 같이 각 그룹들의 개수에 대한 열을 추가로 생성
SELECT customer_gender, COUNT(*) AS 인원수 FROM customer
GROUP BY customer_gender
주소까지 적용하면 아래와 같음(추가로 주소에 대한 것도 group by 및 정렬까지 할경우)
SELECT customer_gender, address, COUNT(*) AS 인원수 FROM customer
GROUP BY customer_gender, address
ORDER BY customer_gender, address
아래와 같이 GROUP BY에 활용하지 않은 값도 사용이 가능
SELECT customer_gender, max(age) AS 나이최대값 FROM customer
GROUP BY customer_gender
ORDER BY customer_gender
CASE
- 일반적인 CASE 문처럼 사용할 수 있음. 아래는 CASE 문에 대한 예제임
SELECT id,
성별=
CASE gender
WHEN 0 THEN 'male'
WHEN 1 THEN 'female'
ELSE 'UNKNOWN'
END
FROM customer
나이 컬럼에 대입해보면,
SELECT id
나이=
CASE
WHEN age < 10 THEN '어린이'
WHEN age >=10 AND age <20 THEN '10대'
WHEN age >=20 AND age <30 THEN '20대'
WHEN age >=30 AND age <40 THEN '30대'
WHEN age >=40 AND age <50 THEN '40대'
WHEN age >=50 AND age <60 THEN '50대'
WEHN age IS NULL THEN '미확인'
ELSE '어르신'
END
FROM customer