728x90
반응형
본 포스팅은 '한빛출판네트워크'의 '혼공SQL' 책을 기반으로 작성한 포스팅입니다.
1. 실습용 데이터베이스 구축
1.1 데이터베이스 만들기
DROP DATABASE IF EXISTS market_db; -- 만약 market_db가 존재하면 삭제
CREATE DATABASE market_db; -- 다시 market_db 생성
1.2 데이터베이스 지정
- USE를 활용하여 현재 사용하는 데이터베이스를 지정
USE market_db;
1.3 테이블 만들기
1.3.1 회원 테이블(member)
CREATE TABLE member -- 회원 테이블(member) 생성
( mem_id CHAR(8) NOT NULL PRIMARY KEY, -- 사용자 아이디(문자열 8자 / null값 x / PK)
mem_name VARCHAR(10) NOT NULL, -- 이름 (문자열 10자 / null값 x)
mem_number INT NOT NULL, -- 인원수 (정수 / null 값 x)
addr CHAR(2) NOT NULL, -- 지역(문자열 2자 / null 값 x)
phone1 CHAR(3), -- 연락처의 국번(02, 031, 055 등 문자열 3자)
phone2 CHAR(8), -- 연락처의 나머지 전화번호(하이픈제외 / 문자열 8자)
height SMALLINT, -- 평균 키
debut_date DATE -- 데뷔 일자 (날짜)
);
1.3.2 구매 테이블(buy)
CREATE TABLE buy -- 구매 테이블(buy) 생성
( num INT AUTO_INCREMENT NOT NULL PRIMARY KEY, -- 순번(정수 / 자동 숫자 입력 / null 값 x / PK)
mem_id CHAR(8) NOT NULL, -- 아이디(문자열 8자 / null 값 x / FK)
prod_name CHAR(6) NOT NULL, -- 제품이름 (문자열 6자 / null 값 x)
group_name CHAR(4) , -- 분류 (문자열 4자)
price INT NOT NULL, -- 가격 (정수 / null 값 x)
amount SMALLINT NOT NULL, -- 수량 (정수 / null 값 x)
FOREIGN KEY (mem_id) REFERENCES member(mem_id) -- foreign key 지정
);
1.4 데이터 입력하기
1.4.1 회원 테이블(member)
- CHAR, VARCHAR DATE 형은 작은따옴표로 값을 묶어주기
- INT형은 그대로 넣어주기
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');
1.4.2 구매 테이블 (buy)
- 구매테이블의 순번(num)은 자동으로 입력되므로 NULL로 기재
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);
1.5 데이터 조회하기
SELECT * FROM member;
SELECT * FROM buy;
2. SELECT
SELECT 열_이름
FROM 테이블_이름
WHERE 조건식
GROUP BY 열_이름
HAVING 조건식
ORDER BY 열_이름
LIMIT 숫자
📌 아래 2개의 식은 동일함
테이블의 전체 이름은 데이터베이스 이름.테이블 이름이나 USE문으로 데이터베이스를 지정해놓았기에 생략이 가능함
SELECT * FROM market_db.member;
SELECT * FROM member;
📌 필요한 열만 가지고 올 수도 있음
SELECT mem_name FROM member;
📌 열 이름의 별칭(alias) 설정 가능
- 열 이름 다음에 지정하고 싶은 별칭 입력
- 별칭에 공백이 있으면 큰따옴표로 묶기
SELECT addr 주소, debut_date "데뷔 일자" FROM member;
3. WHERE
SELECT 열_이름 FROM 테이블_이름
WHERE 조건식;
📌 회원 테이블에서 회원 이름이 ‘블랙핑크’인 데이터만 추출
select * from member
where mem_name = '블랙핑크';
4. 관계 연산자, 논리 연산자
4.1 관계 연산자
- <, >, = 등
select mem_id, mem_name from member
where height <= 162;
4.2 논리 연산자
- AND, OR
select mem_name, height, mem_number from member
where height >= 162 and mem_number > 6;
4.3 BETWEEN ~ AND
select mem_name, height from member
where height between 163 and 165;
-- where height >= 163 and height <=165와 같음
4.4. IN()
- 문자열은 범위를 지정할 수 없기에 IN을 사용하여 옵션 지정
- OR 연산자로 일일이 써줄 필요 없음
select mem_name, addr from member
where addr IN('경기', '전남', '경남');
4.5 LIKE
📌 문자열의 일부 글자를 검색하려면 LIKE를 사용
select * from member
where mem_name LIKE '우%';
📌 뒤의 글자를 검색하려면 언더바(_)를 사용
select * from member
where mem_name LIKE '__핑크';
5. 서브 쿼리
- mem_name이 ‘에이핑크’인 회원의 평균 키(height)보다 큰 회원을 검색
📌 서브 쿼리를 사용하지 않을 때는 아래의 코드로 검색
select height from member where mem_name = '에이핑크';
select mem_name, height from member where height > 164;
📌 서브 쿼리를 사용하였을 때
select mem_name, height from member
where height > (select height from member where mem_name = '에이핑크');
728x90
반응형
'Data Analysis > 혼공SQL' 카테고리의 다른 글
[혼공SQL] 4-3 SQL 프로그래밍 (0) | 2022.07.04 |
---|---|
[혼공SQL] 4-2 두 테이블을 묶는 조인 (0) | 2022.06.24 |
[혼공SQL] 4-1 MySQL의 데이터 형식 (0) | 2022.06.23 |
[혼공SQL] 3-3. 데이터 변경을 위한 SQL문 (0) | 2022.06.22 |
[혼공SQL] 3-2. SELECT (0) | 2022.05.18 |