Index
📌 실습용 데이터베이스 만들기
📌 SELECT ~ FROM
📌 SELECT ~ FROM ~ WHERE
1. 실습용 데이터베이스 만들기
(1) 데이터베이스 설계하기
SELECT ~ FROM과 SELECT ~ FROM ~ WHERE 절 실습에 사용할 데이터베이스를 만들어보자.
제주도 여행과 관련된 정보가 담겨 있는 데이터베이스와
제주도 호텔 정보가 담긴 테이블을 구성하려고 한다.
* 데이터베이스명: jeju_db
* 테이블명: hotel
열 이름(한글) | 열 이름(영문) | 데이터 형식 | 최대 길이 | Not Null |
호텔명 | hotel_name | VARCHAR | 10 | O |
주소 | addr | CHAR | 4 | O |
객실수 | room_num | INT | O | |
전화번호 | phone | CHAR | 8 | X |
등급 | class | INT | O | |
이용후기수 | review_num | INT | X | |
평균별점 | star_avg | FLOAT | X |
호텔명 | 주소 | 객실수 | 전화번호 | 등급 | 이용후기수 | 평균별점 |
A 호텔 | 노형동 | 30 | 11111111 | 3 | 1200 | 3.5 |
B 호텔 | 외도동 | 48 | 22222222 | 3 | 2862 | 4.1 |
C 호텔 | 삼양동 | 65 | 4 | 5984 | 3.8 | |
D 호텔 | 노형동 | 56 | 4 | 1654 | 3.9 | |
E 호텔 | 일도1동 | 96 | 33333333 | 5 | 8569 | 4.6 |
F 호텔 | 삼도1동 | 83 | 4 | 8546 | 4.9 | |
G 호텔 | 용담2동 | 66 | 44444444 | 5 | 9663 | 4.5 |
H 호텔 | 도두동 | 72 | 55555555 | 3 | 536 | 4.6 |
I 호텔 | 일도1동 | 51 | 3 | 1368 | 4.2 | |
J 호텔 | 화북동 | 84 | 66666666 | 4 | 7468 | 4.3 |
※ 실제 정보가 아닌 가상으로 만들어낸 자료임
※ 주소는 동 지역으로 표기
(2) 데이터베이스 및 테이블 생성하기
위의 정보를 활용해 데이터베이스와 테이블을 만들어보자.
CREATE DATABASE jeju_db; -- jeju_db 데이터베이스 생성
USE jeju_db; -- jeju_db 데이터베이스 선택
CREATE TABLE hotel -- hotel 테이블 생성
( hotel_name VARCHAR(10) NOT NULL PRIMARY KEY, -- 호텔명(PK)
addr CHAR(4) NOT NULL, -- 주소
room_num INT NOT NULL, -- 객실수
phone CHAR(8), -- 전화번호
class INT NOT NULL, -- 등급(1 ~ 5)
review_num INT, -- 이용후기수
star_avg FLOAT -- 평균별점(1.0 ~ 5.0)
);
INSERT INTO hotel VALUES('A 호텔', '노형동', 30, '11111111', 3, 1200, 3.5);
INSERT INTO hotel VALUES('B 호텔', '외도동', 48, '22222222', 3, 2862, 4.1);
INSERT INTO hotel VALUES('C 호텔', '삼양동', 65, NULL, 4, 5984, 3.8);
INSERT INTO hotel VALUES('D 호텔', '노형동', 56, NULL, 4, 1654, 3.9);
INSERT INTO hotel VALUES('E 호텔', '일도1동', 96, '33333333', 5, 8569, 4.6);
INSERT INTO hotel VALUES('F 호텔', '삼도1동', 83, NULL, 4, 8546, 4.9);
INSERT INTO hotel VALUES('G 호텔', '용담2동', 66, '44444444', 5, 9663, 4.5);
INSERT INTO hotel VALUES('H 호텔', '도두동', 72, '55555555', 3, 536, 4.6);
INSERT INTO hotel VALUES('I 호텔', '일도1동', 51, NULL, 3, 1368, 4.2);
INSERT INTO hotel VALUES('J 호텔', '화북동', 84, '66666666', 4, 7468, 4.3);
SELECT * FROM hotel;
SQL 탭에 위 코드를 작성하고 실행시키면 market_db와 hotel 테이블을 생성할 수 있다.
2. SELECT ~ FROM
(1) SELECT ~ FROM (모든 행 조회하기)
USE jeju_db; -- jeju_db 데이터베이스 선택
SELECT * FROM hotel; -- (1) hotel 테이블의 모든 열 조회
SELECT hotel_name, room_num FROM hotel; -- (2) hotel 테이블의 hotel_name, room_num 열만 조회
SELECT hotel_name, class, star_avg FROM hotel; -- (3) hotel 테이블의 hotel_name, class, star_avg 열만 조회
(1) Result | (2) Result | (3) Result |
![]() |
![]() |
![]() |
※ USE문은 MySQL 워크벤치를 재시작하거나, 쿼리 창을 새로 열 때마다 다시 실행해줘야 한다.
(2) 별칭(alias) 사용하기
SELECT hotel_name 호텔명, room_num "객실 수" FROM hotel; -- (1) [호텔명, 객실 수] 별칭 사용
SELECT hotel_name 호텔명, class 등급, star_avg "평균 별점" FROM hotel; -- (2) [호텔명, 등급, 평균 별점] 별칭 사용
(1) Result | (2) Result |
![]() |
![]() |
※ 별칭에 띄어쓰기가 있으면 따옴표(")를 사용해야 한다.
3. SELECT ~ FROM ~ WHERE
(1) SELECT ~ FROM ~ WHERE (특정한 조건을 만족하는 행만 조회하기)
SELECT * FROM hotel WHERE addr = '일도1동'; -- (1) 주소가 일도1동인 행만 조회
SELECT * FROM hotel WHERE class = 5; -- (2) 등급이 5인 행만 조회
(1) Result | (2) Result |
![]() |
![]() |
(2) 관계연산자, 논리연산자 사용
[ 관계연산자 (>, <, >=, <=, =, !=)]
SELECT hotel_name, review_num
FROM hotel
WHERE review_num >= 7000; -- (1) review_num이 7000 이상인 행의 hotel_name, review_num 열만 조회
SELECT hotel_name, star_avg
FROM hotel
WHERE star_avg >= 4.0; -- (2) star_avg가 4.0 이상인 행의 hotel_name, star_avg 열만 조회
(1) Result | (2) Result |
![]() |
![]() |
[ 논리연산자 (AND, OR, NOT) ]
SELECT hotel_name, addr
FROM hotel
WHERE addr = '노형동' OR addr = '일도1동'; -- (1) addr이 노형동이거나 일도1동인 행의 hotel_name, addr 열만 조회
SELECT hotel_name, review_num
FROM hotel
WHERE review_num >= 7000 AND review_num <= 9000; -- (2) review_num이 7000 이상이고 9000이하인 행의 hotel_name, review_num 열만 조회
(1) Result | (2) Result |
![]() |
![]() |
※ AND 논리연산자는 모든 조건이 참이어야 하고, OR 논리연산자는 여러 조건 중 하나라도 참이면 성립된다.
(3) IN()
IN()을 사용하면 OR 논리연산자를 길게 나열하지 않고 간단하게 표현할 수 있다.
SELECT hotel_name, addr
FROM hotel
WHERE addr = '노형동' OR addr = '일도1동'; -- (1) OR 논리연산자 사용
SELECT hotel_name, addr
FROM hotel
WHERE addr IN('노형동', '일도1동'); -- (2) IN() 사용
(1) Result | (2) Result |
![]() |
![]() |
(4) BETWEEN()
BETWEEN()을 사용하면 값의 범위를 간단하게 표현할 수 있다.
SELECT hotel_name, review_num
FROM hotel
WHERE review_num >= 7000 AND review_num <= 9000; -- (1) AND 논리연산자 사용
SELECT hotel_name, review_num
FROM hotel
WHERE review_num BETWEEN 7000 AND 9000; -- (2) BETWEEN() 사용
(1) Result | (2) Result |
![]() |
![]() |
(5) LIKE()
LIKE()를 사용하면 문자열의 일부 글자를 검색할 수 있다.
SELECT *
FROM hotel
WHERE addr LIKE '삼%'; -- (1) 주소가 '삼'으로 시작하는 행의 모든 열 조회
SELECT *
FROM hotel
WHERE addr LIKE '삼__'; -- (2) 주소가 '삼'으로 시작하고 3글자인 행의 모든 열 조회
(1) Result | (2) Result |
![]() |
![]() |
※ % (무엇이든 허용) / _ (한 글자)
Reference
📙 우재남, 한빛미디어, 혼자 공부하는 SQL
'📖 STUDY > SQL' 카테고리의 다른 글
[EP.04] 데이터 입력, 수정, 삭제 (0) | 2023.10.16 |
---|---|
[EP.03] ORDER BY, GROUP BY (0) | 2023.10.16 |
[EP.01] 데이터베이스 (2) | 2023.10.11 |
[EP.00] SQL 공부 다시 시작하기 (2) | 2023.10.11 |
[SQL] 윈도우 함수 (0) | 2022.04.07 |