일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- PRIMARY KEY
- 혼자공부하는SQL
- 독후감
- 영국여행
- 제주도여행
- 김호연작가
- GenAI
- R
- 클러스터형인덱스
- 디지털마케팅
- 스플라인
- 에이바우트
- Jupyter notebook
- Github
- 제주2주살이
- RStudio
- 유럽여행
- digital marketing
- 제주도
- 보조인덱스
- 런던
- 스토어드 프로시저
- Linux
- 오블완
- 맛집
- 혼공S
- 티스토리챌린지
- PRML
- 책리뷰
- SQL
- Today
- Total
Soy Library
[혼공S] CH3-(1). 기본 중에 기본 SELECT ~ FROM ~ WHERE 본문
실습용 데이터베이스 구축
market_db 만들기
# 만약 market_db가 존재하면 우선 삭제
DROP DATABASE IF EXISTS market_db;
# market_db 만들기
CREATE DATABASE market_db;
USE 문은 데이터베이스를 선택하는 문장: 2장에서 더블클릭으로 shop_db를 선택했는데 그와 같은 과정.
USE market_db;
Create table 문을 통해서 member 테이블을 만듦. 멤버 테이블은 mem_id를 primary key로 하였고, buy 테이블에서는 num을 primary key로 하였다.
auto_increment: 자동으로 숫자를 입력해준다는 의미로, 순번을 직접 입력할 필요 없이 1, 2, 3, .... 순으로 자동으로 증가하게 됨. member_id는 Foreign key로 사용되었는데, 이는 5장에서 자세히 다룰 것임.
# member 테이블
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 문을 사용한다. char랑, varchar, date형의 데이터는 따옴표를 이용하여 표시하고, 숫자는 따옴표 없이 적어주면 된다. buy 테이블에서 맨 처음 열은 auto_increment가 되는 열이기 때문에 null값을 넣어준다.
# 멤버 테이블의 첫 번째 행의 데이터
INSERT INTO member VALUES('TWC', '트와이스', 9, '서울', '02', '11111111', 167, '2015.10.19') ;
# BUY 테이블의 첫 번째 행의 데이터
INSERT INTO buy VALUES(NULL, 'BLK', '지갑', NULL, 30, 2) ;
select 문을 이용하여 만들어진 테이블을 불러온다. 그럼 아래와 같은 표가 출력되는 것을 볼 수 있다.
SELECT * FROM member;
SELECT * FROM buy;
기본 조회하기: SELECT ~ FROM
select 문의 기본 형식은 다음과 같다. (MySQL 매뉴얼에 나온 select문 형식은 복잡하기 때문에 간단하게 적어본다.)
SELECT 열_이름
FROM 테이블_이름
WHERE 조건식
GROUP BY 열_이름
HAVING 조건식
ORDER BY 열_이름
LIMIT 숫자 ;
정리하자면, 맨 처음에 사용할 데이터베이스 이름을 use로 불러들이고, select를 통해서 조건에 맞는 데이터를 특정 테이블에서 가져오는 것이다. 예시는 아래와 같다.
USE member_db ;
SELECT * FROM member ;
-- 위는 아래와 같이 한 줄로 나타낼 수 있음.
SELECT * FROM member_db.member ;
해당 테이블에서 특정 열만 가져오는 것은 아래와 같다.
SELECT mem_name FROM member ;
SELECT addr, debut_date, mem_name FROM member ;
# 열 이름 별칭
SELECT addr, debut_date "데뷔 일자", mem_name FROM member ;
데뷔 일자 열의 원래의 열 이름은 "debut_date"이었는데 이를 "데뷔 일자"로 바꿔서 불러들일 수 있는 것이다.
특정한 조건만 조회하기: SELECT ~ FROM ~ WHERE
where문을 이용해서 해당 데이터의 특정 조건만을 갖는 데이터만을 추출할 수 있다. 예시는 아래와 같다.
SELECT * FROM member WHERE mem_name = "블랙핑크" ;
SELECT * FROM member WHERE mem_number = 4 ;
숫자로 표현된 데이터는 관계 연산자를 이용하여 범위를 지정하여 데이터를 출력할 수 있다.
SELECT mem_id, mem_name FROM member WHERE height <= 162 ;
-- AND 논리연산자
SELECT mem_name, height, mem_number FROM member WHERE height >= 165 AND mem_number > 6 ;
-- OR 논리연산자
SELECT mem_name, height, mem_number FROM member WHERE height >= 165 OR mem_number > 6 ;
-- BETWEEN ~ AND
SELECT mem_name, height FROM member WHERE height BETWEEN 163 AND 165 ; -- BETWEEN은 해당 값도 포함.
-- IN
SELECT mem_name, addr FROM member WHERE addr = '경기' OR addr = '전남' OR addr = '경남' ;
SELECT mem_name, addr FROM member WHERE addr IN('경기', '전남', '경남') ;
-- LIKE
SELECT * FROM member WHERE mem_name LIKE '우%' ;
SELECT * FROM member WHERE mem_name LIKE '__핑크' ;
SELECT * FROM member WHERE mem_name LIKE '____' ;
서브쿼리
Select문 안에 또 select문이 들어갈 수도 있다. 예를 들어, 에이핑크의 평균 키보다 큰 그룹을 검색하고 싶다고 가정해보자. 먼저 mem_name이 에이핑크인 데이터의 키를 출력해야한다. 그리고 출력된 키보다 큰 그룹을 또 다시 출력하면 된다.
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 = '에이핑크') ;
Reference
혼자 공부하는 SQL, 우재남 지음
'Study > SQL' 카테고리의 다른 글
[혼공S] CH4-(1). MySQL의 데이터 형식 (0) | 2022.01.23 |
---|---|
[혼공S] CH3-(3). 데이터 변경을 위한 SQL 문 (0) | 2022.01.11 |
[혼공S] CH3-(2). 좀 더 깊게 알아보는 SELECT문 (0) | 2022.01.10 |
[혼공S] CH2. 실전용 SQL 미리 맛보기 (3) | 2021.12.24 |
[혼공S] CH1. 데이터베이스와 SQL (0) | 2021.12.08 |