📒 요약 : 이전 장에서는 workbench에서 제공하는 도구의 버튼을 클릭하여 데이터베이스와 테이블을 만들고 이용해보았다. 이번 장에서부터는 직접 SQL문을 입력하여 데이터베이스를 관리해볼 것이다.
이름이 '데이터베이스 이름'인 데이터베이스를 만들고 싶을 때에는 아래와 같은 sql문을 입력하고 실행하면 된다.
CREATE DATABASE (데이터베이스 이름)
✔️ 참고 : 데이터베이스를 삭제하고 싶을 때에는 아래의 문장을 이용한다. 그러면 이름이 '(데이터베이스 이름)'인 데이터베이스가 삭제된다.
DROP DATABASE IF EXISTS (데이터베이스 이름)
코드 해석 : 만약 '데이트베이스 이름'이 존재하면 그것을 떨구어라(삭제해라)
이번에는 데이터에비스 안에 들어가는 테이블을 만들 차례이다. 우선 아래의 생성 예시를 살펴보자.
USE market_db;
CREATE TABLE member
(
mem_id CHAR(8) NOT NULL PRIMARY KEY,
mem_name VARCHAR(10) NOT NULL,
mem_number INT NOT NULL,
addr CHAR(2) NOT NULL,
phone1 CHAR(3),
phone2 CHAR(8),
height SMALLINT,
debut_date DATE
);
뭔가 복잡해보이는 글자들이 많은데, 해석하자면 다음과 같다.
USE market_db; : market_db 데이터베이스를 이용할 것이다. 다음에 만들어질 테이블은 해당 데이터베이스 안에 들어가ㅔ 된다.
CREATE TABLE member : 이름이 member인 테이블을 생성한다.
# 아래의 () 안에 있는 내용이 member 테이블의 데이터가 될 것이다.
(
mem_id CHAR(8) NOT NULL PRIMARY KEY,
mem_name VARCHAR(10) NOT NULL,
mem_number INT NOT NULL,
addr CHAR(2) NOT NULL,
phone1 CHAR(3),
phone2 CHAR(8),
height SMALLINT,
debut_date DATE
각 줄의 첫 번째 내용(ex. mem_id)은 열 이름이 될 것이다.
그리고 그 뒤에 있는 내용들이 각 열의 옵션이 된다. 이전 장에서 보았던 char(8), not null, primary key 등을 확인할 수 있다.
);
✔️ 참고 : 테이블에 새로운 데이터를 입력할 때에는 INSERT문을 이용하면 된다. 아래의 예시를 살펴보자.
INSERT INTO member VALUES('TWC', '트와이스', 9, '서울', '02', '11111111', 167, '2015.10.19');
위의 SQL 문을 해석하면 다음과 같다.
member table에 집어 넣을 것이다. 그 값으로 VALUES() 안에 있는 것을 넣을 것이다. 이 때 들어가는 데이터는 member 테이블을 만들 때 설정했던 조건을 따라 작성하면 된다.
이제 테이블을 다 만들었으니, 다음 내용에서는 테이블에 들어 있는 데이터를 조회하는 방법에 대해 알아보자.
앞 장에서는 member 테이블의 전체 내용을 조회하기 위해서 아래와 같은 SQL문을 입력했다.
SELECT * FROM member;
이제 필요한 내용만 골라서 조회하는 방법에 대해 알아보자. 먼저 전체 내용을 보여주자면 다음과 같다.
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}] -> 숫자
USE market_db;
SELECT * FROM member;
위의 sql문은 market_db 데이터베이스의 member 테이블의 전체 내용을 조회하겠다는 의미이다. 이를 다음과 같이 쓸 수도 있다.
SELECT * FROM market_db.member;
(데이터베이스 이름).(테이블 이름) 형식을 사용할 수도 있다.
테이블의 내용 중 필요한 열만 가져올 때에는 * 자리에 열의 이름을 넣으면 된다. 아래는 멤버의 이름이 들어 있는 열의 내용을 조회하는 예시이다.
SELECT mem_name FROM member;
여러 개의 열을 조회할 때에는 다음과 같이 ,를 이용하면 된다.
SELECT addr, debut_date, mem_name FROM member;
WHERE절은 조회하는 결과에 특정한 조건을 추가해서 원하는 데이터만 보고 싶을 때 사용한다. 기본적인 형식은 다음과 같다.
SELECT (열 이름) FROM (테이블 이름) WHERE (조건식);
특정 조건을 부여할 때 관계 연산자나 논리 연산자도 이용할 수 있다. 파이썬과 같은 다른 언어에서 사용하는 연산자를 그대로 사용할 수 있다고 보면 된다. 아래는 그 예시이다.
SELECT * FROM member WHERE mem_name'블랙핑크';
SELECT mem_id, mem_name FROM member WHERE height <= 162;
SELECT * FROM member WHERE height >=165 AND mem_number > 6;
조회하고싶은 데이터 값의 범위를 지정할 때 AND 연산자를 이용할 수도 있지만, BETWEEN~AND 를 사용할 수도 있다. 아래의 예시는 멤버들의 키가 163 이상 165 이하인 데이터를 조회하는 SQL문이다.
SELECT mem_name, height FROM member WHERE height BETWEEN 163 AND 165;
BETWEEN~AND가 정수 데이터에서 사요ㅛ하는 것이었다면 IN은 문자형 데이터를 다룰 때 이용한다. 여러 종류의 데이터를 선택할 때 이전에는 OR로 보고 싶은 데이터의 범위를 하나하나 지정해주었어야 했지만, IN은 하나로 묶어서 표현하여 가독성이 좋다. 아래의 두 SQL문은 의미가 같다.
SELECT mem_name, addr FROM member WHERE addr = '경기' OR addr='전남' OR addr = '경남';
SELECT mem_name, addr FROM memeber IN('경기', '전남', '경남');
LIKE는 문자열 중 일부 글자를 검색할 때 이용한다. 우선 예시를 보자.
SELECT * FROM member WHERE mem_name LIKE '우%';
우%의 의미는 가장 앞 글자가 '우'이고 그 뒤에는 무엇이든 허용한다는 의미로, 첫 글자가 '우'인 데이터를 출력한다.
한 글자를 매칭할 때에는 _를 사용한다.
SELECT * FROM member WHERE mem_name LIKE '__우';
_의 개수에 따라 허용하는 글자 수가 달라진다. 예를 들어 위의 예시는 앞 두 글자는 상관 없고 뒤는 '우'인 회원을 검색하는 것이다.