[DB] 그림으로 배우는 데이터베이스 (3)

19·2022년 12월 25일
0

독서

목록 보기
3/3

3. 데이터베이스 조작

데이터 조작

DB의 데이터를 조작하기 위해서는 DBMS를 거쳐야 한다.
DBMS에 접속 후, SQL을 통해 DB의 데이터를 조작할 수 있다.

DBMS에서 여러 개의 DB를 관리할 수 있다.

DB 생성  -  CREATE DATABASE db4;
DB 삭제  -  DROP DATABASE db4;
DB 조회  -  SHOW DATABASE;
DB 사용  -  USE db3;

SQL

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의 차이점

검색 조건을 지정하는 의미에서는 같지만, 실행 순서에서 차이가 있다.
WHERE에서 지정한 조건은 그룹화 전에 수행
HAVING에서 지정한 조건은 그룹화 이후에 수행

SELECT age, COUNT(*)
FROM users
WHERE gender = 'man'
GROUP BY age
HAVING COUNT(*) >= 3;
  • WHERE로 성별이 남성인 레코드를 그룹화 이전에 추출
  • HAVING으로 그룹화된 데이터 건수가 3건 이상인 데이터만 추출

데이터 결합 - JOIN

두 개 이상의 테이블을 결합해서 한 번에 데이터를 얻는 것이다.
테이블을 결합하기 위해선 각 테이블 간에 공통 키가 필요하다.
이 키를 활용해 테이블을 결합할 수 있다.

내부 결합 - INNER JOIN

키가 되는 속성 값이 테이블 간에 일치하는 데이터(레코드)만 결합하여 얻는 방식이다.

users, items 테이블을 결합해 데이터 검색
SELECT *
FROM users u
INNER JOIN items i
ON u.item_id = i.id;
  • users의 item_id와 items의 id값이 일치하는 데이터만 추출해서 검색한다.

외부 결합 - OUTER JOIN

기존 테이블의 데이터와 키가 되는 속성 값이 테이블 간에 일치하는 레코드를 결합하여 얻는 방식이다.

users, items 테이블을 결합해 데이터 검색
SELECT *
FROM users u
LEFT JOIN items i
ON u.item_id = i.id;
  • users 테이블의 데이터 + users의 item_id와 items의 id값이 일치하는 데이터를 검색한다.

참고

그림으로 배우는 데이터베이스 - 사카가미 코오다이

profile
하나씩 차근차근

0개의 댓글