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

+ Recent posts