[DB] 기초

DB

기본용어

  1. 스키마

image-20200420102111571

  1. 테이블(관계)

  2. Column(열), 속성
    • 각 열에는 고유한 데이터 형식이 있다.
  3. row(행), 레코드

  4. PK (Primary Key / 기본키)
    • 각 행의 고유값으로 저장된 레코드를 고유하게 식별할 수 있는 값

image-20200420102352344

SQL

Structured Query Language

  1. DDL ( 데이터 정의 언어 )

    • 데이터 정의
    • Create Drop Alter
  2. DML ( 데이터 조작 언어 )

    • 데이터 저장, 수정,삭제, 조회 등
    • CRUD
  3. DCL ( 데이터 제어 언어 )

    • 데이터베이스 사용자의 권한 제어
    • Grant Revoke commit rollback

기본문법

SELECT *
FROM *
GROUP by *
ORDER by *
WHERE *
  1. Select
    • Select문은 데이터를 읽어올 수 있으며, 특정한 테이블을 반환한다.
select *
from aritlces_article;
  1. 테이블 생성
create table [테이블이름] (
	column1 datatype [constrains]
    column2 datatype [constrains]
)

## constrains : not null, primary key, unique

## 예시
create table classmates (
	id INTEGER PRIMARY KEY AutoIncrement
    name Text not null
    age Integer
)
  1. Datatype(SQLite)

image-20200420103042956

CRUD

  1. 추가
    • 특정 테이블에 새로운 행을 추가하여 데이터를 추가
insert into table (column1, ...)
	values (value1, ...);
	
## 예시
insert into classmates (name, age) values ('홍길동', 23);
  1. 읽기
    • 특정 테이블에 특정 레코드를 조회
select * or column1, ...
from 테이블명
where 조건

# * 은 모든 컬럼조회를 뜻함
  1. 삭제
    • 특정 테이블에 특정 레코드를 삭제
delete from 테이블명 
where id=4;

DELETE FROM 테이블명 WHERE 삭제할 레코드;
  1. 수정
    • 특정 테이블에 특정 레코드를 수정
update 테이블
set column1=value1, ...
where 조건

UPDATE flights SET 수정할데이터칼럼 WHERE 수정할레코드

# 예시
update classmates
set name='홍길동', adress='제주' ### 수정할 데이터컬럼
where id=4; ### 수정할 레코드

select distinct name from classmates;
select name, max(age), count(*), min(age)
from classmates;

조건식 where

select *
from classmates
where name='김' and age >= 18;

## 이름이 김인 사람중에 나이가 18세이상인살마 조회.
select *
from classmates
where phone like '010-%'

# 010- 으로 시작하는사람들 출력
select *
from classmates
order by age ASC name DESC;

## 나이 오름차순, 이름 내림차순
select name
from classmates
limit 1 offset 2;

# 10명만 가져오기
select *
from users
limit 10;
select sex, count(name)
from classmates
group by sex;

## 성별을 기준으로 그룹핑하기

.headers on

.mode column

관계

  1. 관계없음
  2. 1:1 관계
    • 일부일처제 사회(결혼관계), 사람(주민등록번호)
  3. 1:N 관계
    • 학급:학생, 게시글:댓글
  4. M:N 다대다 관계
    • 게시글:좋아요, 팔로우, 수강신청, 예약
    • a : title, content(editor), image(편집)

연습문제

1.

CREATE TABLE flights (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    departure TEXT NOT NULL,
    flight_num TEXT NOT NULL,
    waypoint TEXT NOT NULL,
    arrival TEXT NOT NULL,
    price INTEGER NOT NULL,
);

2.

INSERT INTO flights (id, flight_num, departure, waypoint, arrival, price) VALUES (1, 'RT9122', 'Madrid', 'Beijing', 'Incheon', 200);

INSERT INTO flights VALUES ('2', 'XZ0352', 'LA', 'Moscow', 'Incheon', 800);

INSERT INTO flights (flight_num, departure, waypoint, arrival, price) VALUES ('SQ0972', 'London', 'Beijing', 'Sydney', 500);

3.

SELECT * FROM flights

4.

SELECT waypoint from flights

5.

SELECT id, flight_num FROM flights WHERE price < 600;

6.

SELECT departure FROM flights WHERE arrival = 'Incheon' AND price >= 500;

7.

SELECT id, flight_num FROM flights WHERE waypoint = 'Beijing' AND flight_num LIKE '__0__2';

SELECT id, flight_num FROM flights WHERE waypoint = 'Beijing' AND flight_num LIKE '%0%2';

## 와일드카드 사용법 숙지

8.

UPDATE flights SET waypoint = 'TOkyo' WHERE flight_num = 'SQ0972';

9.

DELETE FROM flights WHERE flight_num = 'RT9122';

10.

DROP TABLE flights