Database에서의 필터링
SELECT * // *(모든 열)을 선택해라 FROM employee // employee에서 WHERE gender = 'M' // gender = 'M'인 데이터들을
- 위와 같은 query문을 Database에 보내면 해당 데이터들을 응답으로 보내줌
File-based System의 단점
- Data redundancy(데이터 중복)
- Data Iconsistency(데이터 불일치)
- Difficult data access
- Security problems(unauthorized access)
- Difficult concurrent access(동시 접근 어려움)
*파일이 열려있으면 locked
Atomicity(원자성)
: 하나의 트랜젝션 내에서는 모든 연산이 성공하거나 모두 실패해야 함
Consistency(일관성)
: 하나의 트랜젝션 전후에 데이터베이스의 일관된 상태가 유지되어야 함
Isolation(격리성, 고립성)
: 각각의 트랜젝션은 독립적이기에 서로의 연산을 확인받거나 영향을 줄 수 없음
Durability(지속성)
: 하나의 성공된 트랜젝션에 대한 로그가 기록되고 영구적으로 남음
SQL 기반 관계형 데이터베이스
: 데이터가 구조화된(structured) 테이블을 사용하는 데이터베이스
: 데이터의 구조가 고정되어 있어 SQL을 사용할 수 있음
: MySQL, Oracle, SQLite, PostgreSQLNoSQL 기반 비관계형 데이터베이스
: SQL을 사용할 수 있는 데이터베이스와 달리 데이터의 구조가 고정되어 있지 않음
: 테이블을 사용하지 않고 데이터를 다른 형태로 저장
: MongoDB와 같은 문서 지향 데이터베이스
CREATE DATABASE 데이터베이스_이름;
USE 데이터베이스_이름;
USE
를 이용해 사용할 데이터베이스를 선택해야 함// 아래 표에 적힌 필드 조건에 따라 작성
CREATE TABLE user (
id int PRIMARY KEY AUTO_INCREMENT,
name varchar(255),
email varchar(255)
);
Enter
키를 이용해 여러 줄의 코드를 입력할 수 있음PRIMARY KEY AUTO_INCREMENT
: 값을 default로 입력하면 자동으로 증가된 기본 키가 입력됨DESCRIBE user;
// 위 명령어 수행시 출력되는 테이블
mysql> describe user;
+-------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+----------------+
| id | int | NO | PRI | NULL | auto_increment |
| name | varchar(255) | YES | | NULL | |
| email | varchar(255) | YES | | NULL | |
+-------+--------------+------+-----+---------+----------------+
예시
: 다음은 Brazil에서 온 고객을 도시별로 묶은 뒤에, 각 도시 수에 따라 내름차순 정렬한 후 CustomerId에 따라 오름차순으로 정렬한 3개의 결과만 요청
SELECT c.CustomerId, c.FirstName, count(c.City) as 'City Count' FROM customers AS c JOIN employees AS e ON c.SupportRepId = e.EmployeeId WHERE c.Country = 'Brazil' GROUP BY c.City ORDER BY 3 DESC, c.CustomerId ASC LIMIT 3
SELECT 'hello world' // 일반 문자열
SELECT 2 // 숫자
SELECT 15 + 3 // 간단한 연산
// 특정 특성을 테이블에서 사용
SELECT 특성_1
FROM 테이블_이름
// 여러 특성을 테이블에서 사용
SELECT 특성_1, 특성_2
FROM 테이블_이름
// 테이블의 모든 특성을 선택
SELECT *
FROM 테이블_이름
// 특정 값과 동일한 데이터 찾기
SELECT 특성_1, 특성_2
FROM 테이블_이름
WHERE 특성_1 = "특정 값"
// 특정 값을 제외한 값 찾기
WHERE 특성_2 <> "특정 값"
// 특정 값보다 작거나 같은 값 찾기
WHERE 특성_1 <= "특정 값"
// 문자열에서 특정 값과 비슷한 값들을 필터할 때에는 'LIKE'와 '\%' 혹은 '\*' 사용
WHERE 특성_2 LIKE "특정 문자열%" // 특정 문자열로 시작
WHERE 특성_2 LIKE "%특정 문자열" // 특정 문자열로 끝
WHERE 특성_2 LIKE "%특정 문자열%" // 특정 문자열로 포함
// 리스트의 값들과 일치하는 데이터를 필터할 때에는 'IN' 사용
WHERE 특성_2 IN ("특정값_1", "특정값_2")
// 값이 없는 경우, 'NULL' 을 찾을 때에는 'IS'와 같이 사용
// 값이 없는 경우를 제외할 때에는 'NOT' 을 추가해 이용
WHERE 특성_1 IS NULL
WHERE 특성_1 IS NOT NULL
// 기본 정렬은 오름차순
SELECT *
FROM 테이블_이름
ORDER BY 특성_1
// 내림차순으로 정렬
ORDER BY 특성_1 DESC
// 데이터 결과를 200개만 출력
SELECT *
FROM 테이블_이름
LIMIT 200
// 특성_1을 기준으로 유니크한 값들만 선택
SELECT DISTINCT 특성_1
FROM 테이블_이름
// 특성_1, 특성_2, 특성_3의 유니크한 '조합' 값들을 선택
SELECT
DISTINCT
특성_1
,특성_2
,특성_3
FROM 테이블_이름
// 둘 이상의 테이블을 서로 공통된 부분을 기준으로 연결
SELECT *
FROM 테이블_1
INNER JOIN 테이블_2 ON 테이블_1.특성_A = 테이블_2.특성_B
INNER JOIN
이나 JOIN
으로 실행// 'LEFT OUTER JOIN'으로 LEFT INCLUSIVE을 실행
SELECT *
FROM 테이블_1
LEFT OUTER JOIN 테이블_2 ON 테이블_1.특성_A = 테이블_2.특성_B
// 'RIGHT OUTER JOIN'으로 RIGHT INCLUSIVE을 실행
SELECT *
FROM 테이블_1
RIGHT OUTER JOIN 테이블_2 ON 테이블_1.특성_A = 테이블_2.특성_B
INSERT INTO 테이블 (필드_1, 필드_2, 필드_3, 필드_4)
VALUES (데이터_1, 데이터_2, 데이터_3, 데이터_4);