SELECT 는 말 그대로 데이터를 선택하는 문법이다. 사용자가 원하는 데이터를 선택(조회)하는 문법이기에 가장 많이 사용된다.
1. DROP DATABASE / CREATE DATABASE
DROP DATABASE IF EXISTS market_db; -- 만약 market_db가 존재하면 우선 삭제한다.
CREATE DATABASE market_db;
2. USE / VARCHAR
USE market_db;
CREATE TABLE member -- 회원 테이블
( mem_id CHAR(8) NOT NULL PRIMARY KEY, -- 사용자 아이디(PK)
mem_name VARCHAR(10) NOT NULL, -- 이름
...
);
3. AUTO INCREMENT / INSERT
CREATE TABLE buy -- 구매 테이블
( num INT AUTO_INCREMENT NOT NULL PRIMARY KEY, -- 순번(PK)
...
)
INSERT INTO member VALUES('TWC', '트와이스', 9, '서울', '02', '11111111', 167, '2015.10.19');
1. SELECT 문의 기본 형식
SELECT select_expr
[FROM table_references]
[WHERE where_condition]
[GROUP BY {col_name / expr / position}
[HAVING where_condition]
[ORDER BY {col_name / expr / position}
[LIMIT {[offset,] row_count / row_count OFFSET offset}]
되게 복잡해 보이니 조금 쉽게 해석..? 해보자
SELECT 열 이름
FROM 테이블 이름
WHERE 조건식
GROUP BY 열 이름
HAVING 조건식
ORDER BY 열 이름
LIMIT 숫자
이게 SELECT의 전부이다. (CH03 ~ CH04)
이번엔 SELECT, FROM, WHERE에 대해 알아보자
2. SELECT와 FROM
USE market_db;
SELECT * FROM member;
SELECT 열_이름 FROM 테이블_이름
1. SELECT ~ FROM ~의 한계
쿠팡에서 고객을 매번 SELECT로 불러오면 매번 너무 많은 결과를 출력해야한다 ➡️ 조건을 추가해서 원하는 데이터만 SELECT하면 되겠다
2. 기본적인 WHERE절
SELECT * FROM member WHERE mem_name='블랙핑크';
SELECT 열_이름 FROM 테이블_이름 WHERE 조건식
SELECT * FROM member WHERE mem_number = 4;
3. 관계 연산자, 논리 연산자의 사용
SELECT mem_id, mem_name
FROM member
WHERE height <= 162;
조회(SELECT) ➡️ mem_id, mem_name, 열 이름
어디서?(FROM) ➡️ member, 테이블 이름
조건(WHERE) ➡️ height가 162 이하
SELECT mem_name, height, mem_number
FROM member
WHERE height >= 165 AND mem_number > 6;
조회(SELECT) ➡️ mem_name, height, mem_number, 열 이름
어디서?(FROM) ➡️ member, 테이블 이름
조건(WHERE) ➡️ height가 165 이상 그리고 mem_number가 6 초과
4. BETWEEN ~ AND
SELECT mem_name, height
FROM member
WHERE height >= 163 AND height <= 165;
조회(SELECT) ➡️ mem_name, height, 열 이름
어디서?(FROM) ➡️ member, 테이블 이름
조건(WHERE) ➡️ height가 163 이상 그리고 height가 165 이하 = height가 163~165 사이였으면 좋겠어요!
SELECT mem_name, height
FROM member
WHERE height BETWEEN 163 AND 165;
AND만 사용했을 때와 결과는 똑같다
5. IN()
SELECT mem_name, addr
FROM member
WHERE addr = '경기' OR addr = '전남' OR addr = '경남';
조회(SELECT) ➡️ mem_name, addr, 열 이름
어디서?(FROM) ➡️ member, 테이블 이름
조건(WHERE) ➡️ addr이 경기 또는 addr이 전남 또는 addr이 경남
숫자로 구성된 데이터는 BETWEEN ~ AND 사용해서 간결했는데 문자 데이터는 어떻게 할까?
SELECT mem_name, addr
FROM member
WHERE addr IN('경기', '전남', '경남')
결과는 OR 사용 시와 같지만 훨씬 간편하게 사용 가능하다
조건식에서 여러 문자 중 하나에 포함되는지 비교할 때 IN()
6. LIKE
SELECT *
FROM member
WHERE mem_name LIKE '우%'
SELECT *
FROM member
WHERE mem_name LIKE '__핑크'
SELECT 열 이름
FROM 테이블 이름
WHERE 조건식
GROUP BY 열 이름
HAVING 조건식
ORDER BY 열 이름
LIMIT 숫자
ORDER BY 열 이름
LIMIT 숫자
ORDER BY는 결과값을 어떤 순서로 출력할지 조절
1. ASC, DESC
SELECT mem_id, mem_name, debut_date
FROM member
ORDER BY debut_date DESC;
2. WHERE / ORDER BY 순서
➡️ 결론 : WHERE이 ORDER BY보다 앞에 있어야 한다.
3. 정렬 조건 다수
SELECT mem_id, mem_name, debut_date, height
FROM member
WHERE height >= 164
ORDER BY height DESC, debut_date ASC;
4. 출력 개수 제한 : LIMIT
SELECT mem_name, height
FROM member
ORDER BY height DESC
LIMIT 3, 2;
LIMIT 시작, 개수
5. 중복 결과 제거 : DISTINCT
1) 그냥 지역 SELECT
SELECT addr FROM member;
정렬 X 중복 O
2) 정렬 ORDER BY
SELECT addr FROM member ORDER BY addr;
정렬 O, 중복 O
3) 중복 제거 DISTINCT
SELECT DISTINCT addr FROM member;
정렬 X, 중복 X
4) 정렬 + 중복 제거
SELECT DISTINCT addr FROM member ORDER BY addr;
정렬 O, 중복 X
SELECT 열 이름
FROM 테이블 이름
WHERE 조건식
GROUP BY 열 이름
HAVING 조건식
ORDER BY 열 이름
LIMIT 숫자
GROUP BY 열 이름
HAVING 조건식
GROUP BY는 어떤 그룹으로 묶어주는 역할
1. 집계 함수
함수명 | 설명 |
---|---|
SUM() | 합계 |
AVG() | 평균 |
MIN() | 최소값 |
MAX() | 최대값 |
COUNT() | 행의 개수 |
COUNT(DISTINCT) | 행의 개수(중복 제거) |
2. GROUP BY 활용
SELECT mem_id, SUM(amount) FROM buy GROUP BY mem_id;
SELECT 열 이름, SUM(amount) : 열 이름, SUM(amount) 조회
FROM buy : 테이블 buy에서
GROUP BY mem_id : mem_id로 묶어서
SELECT mem_id "회원 아이디", SUM(price*amount) "총 구매 금액"
FROM buy GROUP BY mem_id;
3. HAVING 절
SELECT mem_id "회원 아이디", SUM(price*amount) "총 구매 금액"
FROM buy GROUP BY mem_id;
여기에서 총 구매액 1000이상인 회원에게 사은품을 증정하려고 하면?? ➡️ WHERE 사용해야하나?
SELECT mem_id "회원 아이디", SUM(price*amount) "총 구매 금액"
FROM buy
WHERE SUM(price*amount) > 1000;
GROUP BY mem_id;
➡️ 오류 발생 : WHERE은 집계 함수 사용 불가능
GROUP BY에 조건을 추가하려면 HAVING을 사용
SELECT mem_id "회원 아이디", SUM(price*amount) "총 구매 금액"
FROM buy
GROUP BY mem_id
HAVING SUM(price*amount) > 1000;
만약 순서를 지정하고 싶으면 ORDER BY 추가하면 됨
1. INSERT 기본
INSERT INTO 테이블[(열1, 열2, ...)] VALUES (값1, 값2, ...)
2. 자동으로 증가하는 AUTO_INCREMENT
toy_id INT AUTO_INCREMENT PRIMARY KEY
열을 지정할 때 1부터 증가하는 값을 입력해줌
!!!!!!!!!!!!무조건 PRIMARY KEY!!!!!!!!!!!!로 지정해야함
CREATE TABLE honghong3 (
toy_id INT AUTO_INCREMENT PRIMARY KEY,
toy_name CHAR(4),
age INT);
ALTER TABLE honghong3 AUTO_INCREMENT=1000;
SET @@auto_increment_increment=3;
1000부터 시작하는 id + 3씩 증가하는 id ➡️ 설정 확인
3. INSERT INTO ~ SELECT
INSERT INTO 테이블이름 (열이름1, 열_이름2, ...)
SELECT문;
데이터 백만개 INSERT할 생각에 머리가 아픔
그런데 데이터가 이미 다른 테이블에 저장되어 있다면?
그럴 때 사용하는 문법
💡주의할 점
열의 개수를 맞추는 것이 중요.
만약 내가 만든 테이블의 열 개수가 SELECT 문의 열 개수가 안맞으면 오류 발생
1. UPDATE 기본
UPDATE 테이블_이름
SET 열1=값1, 열2=값2, ...
WHERE 조건 ;
영어로 SEOUL로 작성한 것을 한글 서울로 바꾸고 싶을 때
UPDATE city_popul
SET city_name = '서울'
WHERE city_name = 'SEOUL'
💡만약 WHERE 절이 없다면?
당연히 모든 열이 와바박 바뀌기 때문에 주의해야한다.
WHERE(조건)절이 없는 UPDATE라면 두번 세번 생각해보고 실행해야한다.
1. DELETE 기본
DELETE FROM 테이블_이름 WHERE 조건;
city_name이 New로 시작하는 모든 것을..삭제하고싶다!
DELETE FROM city_popul
WHERE city_name LIKE 'New%';
2. DELETE, DROP, TRUNCATE
셋 다 삭제하는 문법이지만 다르다
1) DELETE
2) DROP
3) TRUNCATE
SELECT * FROM member ___ height;
ORDER BY는 결과값을 어떤 순서로 출력할지 조절
➡️ ORDER BY
SELECT * FROM member ___ 5,2;
LIMIT 시작, 개수 -> LIMIT 5, 2 : 5번째 부터 2개 조회
➡️ LIMIT
SELECT ___ phone1 FROM member;
중복 결과 제거 : DISTINCT
➡️ DISTINCT
INSERT INTO 테이블이름 (열이름1, 열_이름2, ...)
SELECT문;
DELETE FROM 테이블_이름 WHERE 조건;
흑흑 감사합니다 더 열심히 할게요 ㅠㅠ