DB의 데이터를 조작하기 위해서는 DBMS를 거쳐야 한다.
DBMS에 접속 후, SQL을 통해 DB의 데이터를 조작할 수 있다.
DBMS에서 여러 개의 DB를 관리할 수 있다.
DB 생성 - CREATE DATABASE db4;
DB 삭제 - DROP DATABASE db4;
DB 조회 - SHOW DATABASE;
DB 사용 - USE db3;
SQL은 지정하고자 하는 항목, 값으로 구성되어 있다.
ex)
SELECT name
FROM menus
WHERE category = 한식;
관계형 DB에서 데이터를 테이블 형태로 관리한다.
DB 안에서 복수의 테이블을 만들어 관리할 수 있다.
테이블 생성 - CREATE TABLE menus (id INT, name VARCHAR(100));
테이블 삭제 - DROP TABLE menus;
테이블 안에 데이터 (레코드)를 적재해서 데이터를 관리한다.
INSERT INTO menus (id, name)
VALUES (1, '카레');
테이블에 적재된 데이터(레코드)를 SQL을 사용해 데이터를 조작할 수 있다.
테이블에 적재한 데이터(레코드)를 검색할 수 있다.
메뉴 테이블의 모든 데이터를 검색
SELECT *
FROM menus;
메뉴 테이블의 이름만 검색
SELECT name
FROM menus
검색조건을 설정해 특정한 데이터만 검색할 수 있다.
users 테이블에서 나이가 21인 데이터를 검색
SELECT *
FROM users
WHERE age = 21;
users 테이블에서 나이가 21이고 이름이 사카인 데이터를 검색
SELECT *
FROM users
WHERE age = 21
AND name = ‘사카’
users 테이블에서 이름이 사카이거나 마르티넬리인 데이터를 검색
SELECT *
FROM users
WHERE name = ‘사카’
OR name = ‘마르티넬리’
검색조건은 ‘=‘뿐만 아니라, ‘!=‘, ‘>, <, >=, <=‘, ‘BETWEEN’, IN’, ‘LIKE’, ‘IS NULL’등이 있음
테이블에 저장된 데이터(레코드)를 수정(갱신)할 수 있다.
menu 테이블의 id가 1인 데이터의 name 속성을 ‘스튜’로 변경
UPDATE menus
SET name = ‘스튜’
WHERE id = 1;
테이블에 저장된(레코드)를 삭제할 수 있다.
menus 테이블의 name 속성이 카레인 레코드 삭제
DELETE FROM menus
WHERE name = ‘카레’;
테이블에 저장된 데이터 (레코드)를 검색할 때 정렬해서 검색할 수 있다.
오름차순 / 내림차순
ASC (기본값) / DESC
users 테이블의 데이터들을 age 속성 기준 내림차순으로 정렬해 검색
SELECT *
FROM users
ORDER BY age DESC;
users 테이블의 age 속성이 30미만인 데이터들을 age 속성 기준 오름차순으로 정렬해 감색
SELECT *
FROM users
WHERE age < 30
ORDER BY age;
테이블에 저장된 데이터 (레코드)를 검색 개수를 지정해 검색할 수 있다.
users 테이블의 데이터들을 age 속성 기준 내림차순으로 정렬해 상위 3개 데이터만 검색
SELECT *
FROM users
ORDER BY age DESC
LIMIT 3;
데이터의 건수를 검색할 수 있다.
users 테이블에서 age가 30이상인 데이터의 수를 검색
SELECT COUNT(*)
FROM users
WHERE age >= 30;
특정 속성에 저장되어 있는 값의 최대값, 최소값, 합계, 평균을 구할 수 있다.
age의 최대값 검색 - SELECT MAX(age) FROM users;
age의 최소값 검색 - SELECT MIN(age) FROM users;
age의 합계 검색 - SELECT SUM(age) FROM users;
age의 평균 검색 - SELECT AVG(age) FROM users;
데이터 (레코드)를 그룹화할 수 있다.
테이블에 저장되어 있는 속성의 값이 동일한 데이터 (레코드)를 그룹으로 묶어서 검색을 할 수 있다.
주로 그룹별 데이터 건수를 검색할 때 사용된다.
users 테이블에서 gender 속성 그룹별로 데이터 건수 검색
SELECT gender, COUNT(*)
FROM users
GROUP BY gender;
그룹화된 데이터에 추출 조건을 세부적으로 설정해서 검색할 수 있다.
users 테이블에서 gender 속성 그룹별로 데이터 건수가 3개 이상인 그룹을 검색
SELECT gender, COUNT(*)
FROM users
GROUP BY gender
HAVING COUNT(*) >= 3;
검색 조건을 지정하는 의미에서는 같지만, 실행 순서에서 차이가 있다.
WHERE에서 지정한 조건은 그룹화 전에 수행
HAVING에서 지정한 조건은 그룹화 이후에 수행
SELECT age, COUNT(*)
FROM users
WHERE gender = 'man'
GROUP BY age
HAVING COUNT(*) >= 3;
두 개 이상의 테이블을 결합해서 한 번에 데이터를 얻는 것이다.
테이블을 결합하기 위해선 각 테이블 간에 공통 키가 필요하다.
이 키를 활용해 테이블을 결합할 수 있다.
키가 되는 속성 값이 테이블 간에 일치하는 데이터(레코드)만 결합하여 얻는 방식이다.
users, items 테이블을 결합해 데이터 검색
SELECT *
FROM users u
INNER JOIN items i
ON u.item_id = i.id;
기존 테이블의 데이터와 키가 되는 속성 값이 테이블 간에 일치하는 레코드를 결합하여 얻는 방식이다.
users, items 테이블을 결합해 데이터 검색
SELECT *
FROM users u
LEFT JOIN items i
ON u.item_id = i.id;
그림으로 배우는 데이터베이스 - 사카가미 코오다이