728x90
Chapter3 SQL 기본 문법
3-1 기본 중에 기본 SELECT ~ FROM ~ WHERE
SELECT문
- 구축이 완료된 테이블에서 데이터를 추출하는 기능
- 기본 형식 SELECT ~ FROM ~ WHERE
실습용 데이터베이스
DROP DATABASE IF EXISTS market_db; -- 만약 market_db가 존재하면 우선 삭제한다.
CREATE DATABASE market_db;
USE market_db;
CREATE TABLE member -- 회원 테이블
( mem_id CHAR(8) NOT NULL PRIMARY KEY, -- 사용자 아이디(PK)
mem_name VARCHAR(10) NOT NULL, -- 이름
mem_number INT NOT NULL, -- 인원수
addr CHAR(2) NOT NULL, -- 지역(경기,서울,경남 식으로 2글자만입력)
phone1 CHAR(3), -- 연락처의 국번(02, 031, 055 등)
phone2 CHAR(8), -- 연락처의 나머지 전화번호(하이픈제외)
height SMALLINT, -- 평균 키
debut_date DATE -- 데뷔 일자
);
CREATE TABLE buy -- 구매 테이블
( num INT AUTO_INCREMENT NOT NULL PRIMARY KEY, -- 순번(PK)
mem_id CHAR(8) NOT NULL, -- 아이디(FK)
prod_name CHAR(6) NOT NULL, -- 제품이름
group_name CHAR(4) , -- 분류
price INT NOT NULL, -- 가격
amount SMALLINT NOT NULL, -- 수량
FOREIGN KEY (mem_id) REFERENCES member(mem_id)
);
INSERT INTO member VALUES('TWC', '트와이스', 9, '서울', '02', '11111111', 167, '2015.10.19');
INSERT INTO member VALUES('BLK', '블랙핑크', 4, '경남', '055', '22222222', 163, '2016.08.08');
INSERT INTO member VALUES('WMN', '여자친구', 6, '경기', '031', '33333333', 166, '2015.01.15');
INSERT INTO member VALUES('OMY', '오마이걸', 7, '서울', NULL, NULL, 160, '2015.04.21');
INSERT INTO member VALUES('GRL', '소녀시대', 8, '서울', '02', '44444444', 168, '2007.08.02');
INSERT INTO member VALUES('ITZ', '잇지', 5, '경남', NULL, NULL, 167, '2019.02.12');
INSERT INTO member VALUES('RED', '레드벨벳', 4, '경북', '054', '55555555', 161, '2014.08.01');
INSERT INTO member VALUES('APN', '에이핑크', 6, '경기', '031', '77777777', 164, '2011.02.10');
INSERT INTO member VALUES('SPC', '우주소녀', 13, '서울', '02', '88888888', 162, '2016.02.25');
INSERT INTO member VALUES('MMU', '마마무', 4, '전남', '061', '99999999', 165, '2014.06.19');
INSERT INTO buy VALUES(NULL, 'BLK', '지갑', NULL, 30, 2);
INSERT INTO buy VALUES(NULL, 'BLK', '맥북프로', '디지털', 1000, 1);
INSERT INTO buy VALUES(NULL, 'APN', '아이폰', '디지털', 200, 1);
INSERT INTO buy VALUES(NULL, 'MMU', '아이폰', '디지털', 200, 5);
INSERT INTO buy VALUES(NULL, 'BLK', '청바지', '패션', 50, 3);
INSERT INTO buy VALUES(NULL, 'MMU', '에어팟', '디지털', 80, 10);
INSERT INTO buy VALUES(NULL, 'GRL', '혼공SQL', '서적', 15, 5);
INSERT INTO buy VALUES(NULL, 'APN', '혼공SQL', '서적', 15, 2);
INSERT INTO buy VALUES(NULL, 'APN', '청바지', '패션', 50, 1);
INSERT INTO buy VALUES(NULL, 'MMU', '지갑', NULL, 30, 1);
INSERT INTO buy VALUES(NULL, 'APN', '혼공SQL', '서적', 15, 1);
INSERT INTO buy VALUES(NULL, 'MMU', '지갑', NULL, 30, 4);
SELECT * FROM member;
SELECT * FROM buy;
USE문 : 데이터베이스를 선택하는 문장
- USE 데이터베이스_이름;
AUTO_INCREMENT : 자동으로 숫자 입력
SELECT문 형식
SELECT 열_이름
FROM 테이블_이름
WHERE 조건식
GROUP BY 열_이름
HAVING 조건식
ORDER BY 열_이름
LIMIT 숫자
관계 연산자 : <, >, <=, >=, = 등
논리 연산자 : AND, OR
BETWEEN A AND B
IN()
LIKE : 문자 검색
- 무엇이든 허용: %, 하나로 지정: _
확인문제
- 4번
- 회원 테이블(PK), 구매 테이블(FK)은 연결되어 있다.
- 2, 3번
- 테이블 지정 X
- MySQL 워크벤치를 재시작하거나, 새 쿼리 창을 열면 USE를 재지정해야 한다.
- 1번
- 1, 3번
3-2 좀 더 깊게 알아보는 SELECT 문
ORDER BY: 결과의 정렬
- ASC(기본값): 오름차순, DESC: 내림차순
LIMIT: 결과의 개수 제한
- 중간부터 출력도 가능(LIMIT3, 2; 는 3번째부터 2건 조회)
DISTINCT: 중복된 데이터 제거
GROUP BY: 지정한 열의 데이터들을 그룹으로 묶음
- HABING: GROUP BY절에 조건식 추가
- GROUP BY와 함께 주로 사용되는 집계 함수
SUM() | 합계를 구합니다 |
AVG() | 평균을 구합니다 |
MIN() | 최소값을 구합니다 |
MAX() | 최대값을 구합니다 |
COUNT() | 행의 개수를 셉니다 |
COUNT(DISTINCT) | 행의 개수를 셉니다(중복은 1개만 인정) |
간단한 실습
확인문제
- SELECT, FROM, WHERE, ORDER BY, LIMIT 순서
-
- SELECT * FROM member ORDER BY height;
- SELECT * FROM member LIMIT 5, 2;
- SELECT DISTINCT phone1 FROM member;
- 오름차순 ASC, 내림차순 DESC
- LIMIT 0, 3, 5
- DISTINCT
- HAVING()
3-3 데이터 변경을 위한 SQL문
INSERT: 테이블에 데이터 삽입 하는 명령어
INSERT INTO 테이블(열1, 열2, ...) VALUES(값1, 값2, ...)
AUTO_INCREMENT: 1부터 증가하는 값을 입력, 반드시 PRIMARY KEY로 지정
- @@auto_increment_increment: AUTO_INCREMENT의 증가값을 지정하는 시스템 변수
INSERT INTO ~ SELECT: 다른 테이블의 데이터를 한 번에 입력하는 구문
INSERT INTO 테이블_이름 (열_이름1, 열_이름2, ...)
SELECT 문;
UPDATE: 기존에 입력되어 있는 값 수정
UPDATE 테이블_이름
SET 열1=값1, 열2=값2, ...
WHERE 조건;
DELETE: 테이블의 행 데이터 삭제
DELETE FROM 테이블이름 WHERE 조건;
확인문제
- 테이블 이름 생략 불가능
- AUTO_INCREMENT 값 직접 입력X / INSERT문에서 해당 위치의 열은 NULL를 남겨 둠
- LAST_INSERT_ID() : AUTO_INCREMENT로 지정한 열에 현재 어디까지 입력되었는지 확인하는 함수
- INSERT INTO ~ SELECT: 다른 테이블의 데이터를 한 번에 입력하는 구문
- UPDATE, SET, WHERE
- TRUNCATE
728x90
'SQL > 혼자 공부하는 SQL' 카테고리의 다른 글
[혼자 공부하는 SQL] 6장 (2) | 2024.01.07 |
---|---|
[혼자 공부하는 SQL] 5장 (0) | 2023.12.16 |
[혼자 공부하는 SQL] 4-3 (0) | 2023.12.08 |
[혼자 공부하는 SQL] 4(4-1, 4-2)장 (4) | 2023.12.04 |
[혼자 공부하는 SQL] 2장 (0) | 2023.11.24 |