MySQL
요약 노트 (2022년 1월 ~ 2022년 3월까지 공부했던 내용 정리)
혼자 공부하는 SQL책과 한빛미디어에서 제공하는 유튜브 강의로 공부함
DROP
문, CREATE
문DROP DATABASE IF EXISTS 데이터베이스_이름; -- 기존 데이터베이스 삭제
CREATE DATABASE 데이터베이스_이름; -- 데이터베이스 새로 만들기
2) 테이블 만들기: USE
문, CREATE
문USE 데이터베이스_이름; -- 데이터베이스 선택
CREATE TABLE 테이블_이름
( 열_이름 데이터타입 PK NN ...
열_이름 데이터타입 PK NN ...
);
3) 데이터 입력하기: INSERT
문INSERT INTO 테이블_이름 VALUES(데이터, 데이터, ..., 데이터);
4) 데이터 조회하기: SELECT
문SELECT 열_이름 FROM 테이블_이름
USE
문USE
문USE 데이터베이스_이름;
SELECT
문SELECT
문SELECT 열_이름
FROM 테이블_이름
WHERE 조건식
GROUP BY 열_이름
HAVING 조건식
ORDER BY 열_이름
LIMIT 숫자
SELECT ~ FROM ~ WHERE
SELECT 열_이름 FROM 테이블_이름 WHERE 조건식
SELECT 열_이름
FROM 테이블_이름
WHERE 조건식
USE market_db;
SELECT * FROM member; -- *는 모든 것을 의미(즉, 모든 열), FROM 테이블_이름
SELECT * FROM market_db.member; -- FROM 데이터베이스_이름.테이블_이름(위 코드와 동일한 결과)
SELECT addr 주소, debut_date "데뷔 일자", mem_name
FROM member; -- addr 열 이름은 주소, debut_date 열 이름은 데뷔 일자로 지정됨
=
>
, <
>=
, <=
SELECT * FROM member WHERE mem_number = 4;
AND
, OR
등으로 참, 거짓을 판별함AND
OR
SELECT mem_name, height, mem_number
FROM member
WHERE height >= 165 AND mem_number > 4;
BETWEEN ~ AND
BETWEEN ~ AND
BETWEEN ~ AND
예시: 회원 테이블(member)에서 평균 키(height)가 163이상 165이하인 회원의 두 개의 열(mem_name, height) 조회하기SELECT mem_name, height
FROM member
WHERE height BETWEEN 163 AND 165;
IN()
IN()
IN()
예시: 회원 테이블(member)에서 주소(addr)가 경기/전남/경남 중 한 곳에 사는 회원의 두 개의 열(mem_name, addr) 조회하기SELECT mem_name, addr
FROM member
WHERE addr IN('경기', '전남', '경남');
LIKE
LIKE
%
: 문자열에서 여러 문자에 대응하는 기호_
: 문자열에서 한 문자에 대응하는 기호LIKE
예시: 회원 테이블(member)에서 이름(mem_name)의 첫 글자가 '우'로 시작하는 회원의 모든 열 조회하기SELECT *
FROM member
WHERE mem_name LIKE '우%'; -- %는 그 뒤에 무엇이든 허용한다는 의미
LIKE
예시: 회원 테이블(member)에서 이름(mem_name)의 앞 두 글자는 상관없고 뒤는 '핑크'인 회원의 모든 열 조회하기SELECT *
FROM member
WHERE mem_name LIKE '__핑크'; -- 언더바(-)는 한 글자와 매치
SELECT mem_name, height FROM member
WHERE height > (SELECT height FROM member WHERE mem_name = '에이핑크');
ORDER BY
절ORDER BY
절ASC
(기본값) : 오름차순DESC
: 내림차순ORDER BY
절 예시(ASC): 회원 테이블(member)에서 데뷔 일자(debut_date)가 빠른 순서대로 정렬하여 세 개의 열(mem_id, mem_name, debut_date) 조회하기SELECT mem_id, mem_name, debut_date
FROM member
ORDER BY debut_date;
ORDER BY
절 예시(DESC): 회원 테이블(member)에서 데뷔 일자(debut_date)가 늦은 순서대로 정렬하여 세 개의 열(mem_id, mem_name, debut_date) 조회하기SELECT mem_id, mem_name, debut_date
FROM member
ORDER BY debut_date DESC;
LIMIT
LIMIT
LIMIT
예시: 회원 테이블(member)에서 모든 열을 조회할 때 전체 중 앞에서 3건만 조회하기SELECT *
FROM member
LIMIT 3;
LIMIT 시작, 개수
(=LIMIT 개수 OFFSET 시작)LIMIT 시작, 개수
예시: 회원 테이블(member)에서 모든 열을 조회할 때 전체 중 0번째부터 3건만 조회하기SELECT *
FROM member
LIMIT 0, 3; -- LIMIT 3 OFFSET 0
DISTINCT
DISTINCT
DISTINCT
예시: 회원 테이블(member)에서 회원이 사는 지역(addr)을 조회할 때 중복을 제거하여 조회하기SELECT DISTINCT addr FROM member;
GROUP BY
절GROUP BY
절GROUP BY
절 예시: 구매 테이블(buy)에서 회원(mem_id)이 구매한 개수(amount)의 총합 출력하기SELECT mem_id "회원 아이디", SUM(amount) "총 구매 개수"
FROM buy GROUP BY mem_id;
COUNT(*)
: 모든 행의 개수를 셈COUNT(열_이름)
: 열 이름의 값이 NULL인 것을 제외한 행의 개수를 셈HAVING
절HAVING
절HAVING
절 예시: 구매 테이블(buy)에서 회원(mem_id)이 구매한 금액(price*amount)의 총합에서 총 구매액이 1000이상인 회원 아이디 출력하기SELECT mem_id "회원 아이디", SUM(price*amount) "총 구매 금액"
FROM buy
GROUP BY mem_id
HAVING SUM(price*amount) > 1000;
INSERT
문INSERT
문INSERT INTO 테이블_이름 [(열1, 열2, ...)] VALUES (값1, 값2, ...);
AUTO_INCREMENT
AUTO_INCREMENT
AUTO_INCREMENT
로 지정하는 열은 꼭 PRIMARY KEY
로 지정해야 함AUTO_INCREMENT
의 시작값과 증가값 지정ALTER TABLE 테이블_이름 AUTO_INCREMENT=시작값; -- 시작값 지정
SET @@auto_increment_increment=증가값; -- 증가값 지정
AUTO_INCREMENT
예시: 아이디(toy_id) 열이 자동 증가인 테이블 만들기(시작값: 1000, 증가값: 3이면 아이디는 1000, 1003, 1006, ..으로 증가함)CREATE TABLE hongong(
toy_id INT AUTO_INCREMENT PRIMARY KEY,
toy_name CHAR(4),
age INT);
ALTER TABLE hongong AUTO_INCREMENT=1000; -- 시작값은 1000으로 지정
SET @@auto_increment_increment=3; -- 증가값은 3으로 지정
INSERT INTO ~ SELECT
구문INSERT INTO ~ SELECT
구문INSERT INTO 테이블_이름 (열_이름1, 열_이름2,...)
SELECT 문;
UPDATE
문UPDATE
문UPDATE 테이블_이름
SET 열1=값1, 열2=값2,...
WHERE 조건;
DELETE
문DELETE
문DELETE FROM 테이블_이름 WHERE 조건;
DELETE
문, DROP
문, TRUNCATE
문DELETE FROM 테이블_이름;
DROP TABLE 테이블_이름;
TRUNCATE TABLE 테이블_이름;
우재남. (2021). 혼자 공부하는 SQL. 한빛미디어. p102-p154.