DB Basics
Database
Database는 여러 사람이 공유하여 사용할 목적으로 체계화해 통합, 관리하는 데이터의 집합이다.
DBMS (Database Management System)
RDBMS
관계형 모델 기반 databse 관리 시스템
관계형 데이터베이스 (RDBMS)
관계를 열과 행으로 이루어진 테이블 집합으로 구성
각 열에 특정 종류의 데이터를 기록
테이블의 행은 각 객체/entity와 관련된 값의 모음
RDBMS vs NOSQL

기본 용어
Schema
Database에서 자료의 구조와 제약조건 (구조, 표현 방법, 관계 등)에 관한 전반적인 명세
Table (관계)
열과 행의 모델을 사용해 조작된 데이터 요소들의 집합
PK
각행의 고유값으로 저장된 레코드를 고유하게 식별할 수 있는 값
SQL (Structured Query Language)
RDBMS의 data를 관리하기 위해 특수하게 설계된 언어

Table 생성
CREATE TABLE table (
column1 datatype [constraints],
column2 datatype [constaraints],
);
ex)
CREATE TABLE contacts (
contact_id INTEGER PRIMARY KEY,
first_name TEXT NOT NULL,
last_name TEXT NOT NULL,
email TEXT NOT NULL UNIQUE,
phone TEXT NOT NULL UNIQUE
);
Rename Table
ALTER TABLE table_name
RENAME TO new_table_name;
Data Types (in SQLite
)
SQLite
)
SELECT
DISTINCT
중복없이 가져오기
sqlite> SELECT DISTINCT waypoint FROM flights; waypoint ---------- Beijing Moscow Beijing
COUNT()
특정 개수 가져오기
LIKE
와일드 카드
%
: 문자열이 있을 수도 있다_
: 반드시 한 개의 문자가 있다
LIMIT ... OFFSET
개수 제한 .... 몇 번째까지
ex)
-- 처음 10개의 Row를 반환 SELECT * FROM test LIMIT 10; -- 위 SQL과 아래의 SQL은 같은 결과 SELECT * FROM test LIMIT 10 OFFSET 0; -- 11번째 부터 10개의 Row를 반환. SELECT * FROM test LIMIT 10 OFFSET 10;
.schema ____
CREATE
sqlite> CREATE TABLE flights(
...> id INTEGER PRIMARY KEY AUTOINCREMENT,
...> flight_num TEXT NOT NULL,
...> departure TEXT NOT NULL,
...> waypoint TEXT NOT NULL,
...> arrival TEXT NOT NULL,
...> price INTEGER NOT NULL
...> );
IF NOT EXISTS
해당 table이 존재하지 않을 때에만 생성하기
sqlite> CREATE TABLE IF NOT EXISTS flights(
...> id INTEGER PRIMARY KEY AUTOINCREMENT,
...> flight_num TEXT NOT NULL,
...> departure TEXT NOT NULL,
...> waypoint TEXT NOT NULL,
...> arrival TEXT NOT NULL,
...> price INTEGER NOT NULL
...> );
Table 조회
sqlite> .tables
INSERT
lite> INSERT INTO flights(flight_num, departure, waypoint, arrival, price) VALUES('RT9122', 'Madrid', 'Beijing', 'Incheon', 200);
id flight_num departure waypoint arrival price
---------- ---------- ---------- ---------- ---------- ----------
1 RT9122 Madrid Beijing Incheon 200
UPDATE
sqlite> UPDATE flights SET waypoint = 'Tokyo' WHERE flight_num = 'SQ0972';
DELETE
sqlite> DROP TABLE flights;
sqlite> .tables
sqlite> select*from flights;
Error: no such table: flights
Select exercise
1. flights 테이블 전체 데이터를 조회하시오
sqlite> SELECT * FROM flights;
id flight_num departure waypoint arrival price
---------- ---------- ---------- ---------- ---------- ----------
1 RT9122 Madrid Beijing Incheon 200
2 XZ0352 LA Moscow Incheon 800
3 SQ0972 London Beijing Sydney 500
2. 모든 waypoint를 조회하시오
sqlite> SELECT waypoint FROM flights;
waypoint
----------
Beijing
Moscow
Beijing
3. 항공권 가격이 600 미만인 항공편들의 id와 flight_num을 조회하시오
sqlite> SELECT id, flight_num from flights WHERE price<600;
id flight_num
---------- ----------
1 RT9122
3 SQ0972
4. 도착지가 Incheon이고 가격이 500 이상인 항공편의 departure를 조회하시오
sqlite> SELECT departure FROM flights WHERE arrival = 'Incheon' AND 500 <= price;
departure
----------
LA
5. 항공편의 숫자부분이 0으로 시작하고 2로 끝나면서 경유지가 Beijing인 항공편들의 id와 flight_num을 조회하시오
ver 1
sqlite> SELECT id, flight_num FROM flights where waypoint = 'Beijing' AND flight_num LIKE '__0__2';
id flight_num
---------- ----------
3 SQ0972
ver 2
sqlite> SELECT id, flight_num FROM flights where waypoint = 'Beijing' AND flight_num LIKE '__0%2';
id flight_num
---------- ----------
3 SQ0972
ver 2
sqlite> SELECT id, flight_num FROM flights where waypoint = 'Beijing' AND flight_num LIKE '%0%2';
id flight_num
---------- ----------
3 SQ0972
.read
sqlite> .read hello_user.sql
1,"정호","유",40,"전라북도",016-7280-2855,370
2,"경희","이",36,"경상남도",011-9854-5133,5900
3,"정자","구",37,"전라남도",011-4177-8170,3100
4,"미경","장",40,"충청남도",011-9079-4419,250000
5,"영환","차",30,"충청북도",011-2921-4284,220
6,"서준","이",26,"충청북도",02-8601-7361,530
7,"주원","민",18,"경기도",011-2525-1976,390
8,"예진","김",33,"충청북도",010-5123-9107,3700
9,"서현","김",23,"제주특별자치도",016-6839-1106,43000
10,"서윤","오",22,"충청남도",011-9693-6452,49000
+
CLI에서 예쁘게 보기
sqlite> .headers on
sqlite> .mode column
Last updated
Was this helpful?