SELECT ~ FROM ~ WHERE
SQL의 SELECT 문은 데이터베이스에서 데이터를 조회하는 데 사용되는 문법이다.
SELECT 문을 사용해 데이터베이스 테이블에서 필요한 데이터를 선택하고 결과를 반환받을 수 있다.
SELECT column1, column2, ...
FROM table_name
WHERE 조회하려는_조건;
실습용 데이터베이스 및 테이블 생성하기
'이것이 MySQL이다' 책을 참고하며 학습을 진행했기 때문에 교안에 나와있는대로 데이터를 만들었다는 점 참고
기존에 db가 존재한다면 삭제하고 새로운 db를 생성한다.
CREATE DATABASE
DROP DATABASE IF EXISTS market_db;
CREATE DATABASE market_db;
테이블을 생성하기 전에 반드시 USE 문을 이용해 어떤 데이터베이스에 테이블을 만들 것인지 지정해주어야한다.
GUI 상에서는 우측 데이터베이스 리스트에서 해당 데이터베이스를 더블 클릭하면 선택된다.
CREATE TABLE
<회원 (member) 테이블>
USE market_db;
CREATE TABLE member -- 회원 테이블(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 -- 데뷔 일자
);
<구매 (buy) 테이블>
CREATE TABLE buy -- 구매 테이블(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)
);
-> AUTO_INCREMENT - 자동으로 숫자가 입력되는 옵션
실습용 데이터 입력하기
INSERT INTO 테이블_이름 VALUES(값1, 값2, 값3 ....);
INSERT INTO member VALUES('TWC', '트와이스', 9, '서울', '02', '11111111', 167, '2015.10.19');
INSERT INTO buy VALUES(NULL, 'BLK', '지갑', NULL, 30, 2);
-> CHAR, VARCHAR, DATE 형은 작은 따옴표로 값을 묶어주어야 한다. INT는 따옴표로 묶지 않고 입력한다.
구매 테이블의 첫번째 열인 num은 AUTO_INCREMENT 옵션을 지정해서 자동 입력되기 때문에 NULL로 입력해준다.
SELECT 문의 기본 형식
SELECT select_expr
[FROM table_references]
[WHERE where_condition]
[GROUP BY {col_name | expr | position}]
[HAVING where_condition]
[ORDER BY {col_name | expr | position]
[LIMIT {[offset,] row_count | row_count OFFSET offset}]
// 대괄호로 묶인 부분은 생략 가능
SELECT 열_이름
FROM 테이블_이름
WHERE 조건식
GROUP BY 열_이름
HAVING 조건식
ORDER BY 열_이름
LIMIT 숫자
SELECT와 FROM
USE market_db;
SELECT * FROM member;
// SELECT * FROM market_db.member; 쿼리와
SELECT * FROM member; 쿼리는 동일하다. (이미 USE로 지정해놓아서!)
열 (Column) 이름에 별칭 (Alias) 붙이기
열 이름 다음에 지정하고 싶은 별칭을 작성해준다.
공백이 포함되어 있을 경우 큰 따옴표로 묶어주어야 한다.
SELECT addr 주소, debut_date "데뷔 일자", mem_name FROM member;
SELECT ~ FROM ~ WHERE로 특정 조건만 조회하기
SELECT ~ FROM은 대부분 WHERE 절과 함께 사용한다.
SELECT ~ FROM 만으로 데이터를 조회하면 데이터의 모든 행을 출력하기 때문에 가독성이 떨어지고 성능이 저하된다.
- 기본적인 WHERE 절
SELECT * FROM member WHERE mem_name = '블랙핑크';
-> member 테이블에서 member 이름이 '블랙핑크'인 데이터의 모든 열을 출력
SELECT * FROM member WHERE mem_number = 4;
-> member 테이블에서 member 수가 4인 데이터의 모든 열을 출력
INT형 열을 조회할 때는 작은 따옴표를 사용하지 않는다.
- 관계 연산자, 논리 연산자를 사용한 WHERE 절
SELECT mem_id, mem_name
FROM member
WHERE height <= 162;
-> member 테이블에서 키가 162 이하인 데이터의 mem_id, mem_name 열만 출력
SELECT mem_name, height, mem_nember
FROM member
WHERE height >= 165 AND mem_number > 6;
-> member 테이블에서 키가 165 이상이고 (AND) member 수가 6 초과인 데이터의 mem_name, height, mem_number 열만 출력
논리 연산자 AND를 사용해 두 가지 이상의 조건을 만족하는 데이터를 조회할 수 있다
SELECT mem_name, height, mem_number
FROM member
WHERE height >= 165 OR mem_number > 6;
-> member 테이블에서 키가 165 이상이거나 (OR) member 수가 6 초과인 데이터의 mem_name, height, mem_number 열만 출력
BETWEEN ~ AND
SELECT mem_name, height
FROM member
WHERE height BETWEEN 163 AND 165;
-> member 테이블에서 키가 163 이상, 165 이하인 데이터의 mem_anme, height 열만 출력
BETWEEN 163 AND 165 는 163 <= x <= 165 와 의미 상으로 동일하다.
IN( )
SELECT mem_name, addr
FROM member
WHERE addr = '경기' OR addr ='전남' OR addr ='경남';
// 문자로 표현되는 데이터는 범위를 지정할 수 없어 OR로 일일히 지정해야 함
// IN()을 사용하면 코드를 간결하게 할 수 있음
SELECT mem_name, addr
FROM member
WHERE addr IN('경기', '전남', '경남');
LIKE
SELECT *
FROM member
WHERE mem_name LIKE '우%';
-> 앞 글자가 '우' 이고 뒤에 오는 문자는 무엇이든 (%) 허용한다는 의미
언더바 (_)
SELECT *
FROM member
WHERE mem_name LIKE '__핑크'; // 2개의 언더바 __ 사용
서브 쿼리 (Subquery)
SELECT 문 안에는 또 다른 SELECT 문이 들어갈 수 있다.
SELECT height FROM member WHERE mem_name ='에이핑크';
SELECT mem_name, height FROM member WHERE height > 164;
// 위 2개의 SQL문을 서브쿼리를 이용해 하나의 SQL문으로 바꾸기
SELECT mem_name, height FROM member
WHERE height > (SELECT height FROM member WHERE mem_name = '에이핑크');
'Language > SQL' 카테고리의 다른 글
[MySQL] MySQL의 데이터 형식을 알아보자 (0) | 2024.08.20 |
---|---|
[MySQL] 데이터를 삭제하는 DELETE 문 (0) | 2024.08.20 |
[MySQL] 데이터를 수정하는 UPDATE 문 (0) | 2024.08.20 |
[MySQL] 데이터를 입력하는 INSERT ~ 문 (0) | 2024.08.20 |
[MySQL] 데이터를 조회하는 SELECT ~ FROM ~ WHERE 문 (2) (0) | 2024.08.20 |