관계형 데이터베이스:
데이터 간에 관계가 있는 데이터 항목들의 모음
테이블 행, 열의 정보를 구조화하는 방식
서로 관련된 데이터 포인터를 저장하고, 이에 대한 엑세스를 제공
관계: 여러 테이블 간의 (논리적) 연결
관계로 할 수 있는 것: 이 관계로 인해 두 테이블을 사용하여 데이터를 다양한 형식으로 조회할 수 있음


관계형 데이터베이스 관련 키워드
DBMS(Database Management System): 데이터베이스를 관리하는 소프트웨어 프로그램
데이터 저장 및 관리를 용이하게 하는 시스템
데이터베이스와 사용자 간의 인터페이스 역할
사용자가 데이터 구성, 업데이트, 모니터링, 백업, 복구 등을 할 수 있도록 도움
RDBMS(Releational Database Management System): 관계형 데이터베이스를 관리하는 소프트웨어 프로그램 (SQLite, MySQL, PostgreSQL, Oracle Database...)
SQL(Structure Query Language): 데이터베이스에 정보를 저장하고 처리하기 위한 프로그래밍 언어(데이터베이스에서만 쓰는 언어!) => 테이블 형태로 구조화된 관계형 데이터베이스에게 요청을 질의(요청)
SQL Syntax

SQL statements: SQL을 구성하는 가장 기본적인 코드 블록

=> 해당 예시 코드는 SELECT Statement라고 부름
=> 이 Statement는 SELECT, FROM 2개의 keyword로 구성됨
수행 목적에 따른 SQL Statements 4가지 유형


-- 01. Querying data
SELECT
LastName
FROM
employees;
SELECT
LastName, FirstName
FROM
employees;
SELECT
*
FROM
employees;
SELECT
FirstName AS '이름'
FROM
employees;
SELECT
Name,
Milliseconds / 60000 AS '재생 시간(분)'
FROM
tracks;

-- 02. Sorting data
SELECT
FirstName
FROM
employees
ORDER BY
FirstName;
SELECT
FirstName
FROM
employees
ORDER BY
FirstName DESC;
SELECT
Country, City
FROM
customers
ORDER BY
Country DESC, City;
SELECT
Name,
Milliseconds / 60000 AS '재생 시간(분)'
FROM
tracks
ORDER BY
Milliseconds DESC;
SELECT DISTINCT
Country
FROM
customers
ORDER BY
Country;

DISTINCT statement: 조회 결과에서 중복된 레코드를 제거

SELECT 키워드 바로 뒤에 작성해야 함
SELECT DISTINCT 키워드 다음에 고유한 값을 선택하려는 하나 이상의 필드를 지정
WHERE statement: 조회 시 특정 검색 조건을 지정

FROM clause 뒤에 위치
search_condition은 비교연산자 및 논리연산자(AND, OR, NOT 등)를 사용하는 구문이 사용됨
-- 03. Filtering data
SELECT
LastName, FirstName, City
FROM
customers
WHERE
City = 'Prague';
SELECT
LastName, FirstName, City
FROM
customers
WHERE
City != 'Prague';
SELECT
LastName, FirstName, Company, Country
FROM
customers
WHERE
Company IS NULL
AND Country = 'USA';
SELECT
LastName, FirstName, Company, Country
FROM
customers
WHERE
Company IS NULL
OR Country = 'USA';
SELECT
Name, Bytes
FROM
tracks
WHERE
Bytes BETWEEN 100000 AND 500000;
SELECT
LastName, FirstName, Country
FROM
customers
WHERE
Country IN ('Canada', 'Germany', 'France');
SELECT
LastName, FirstName, Country
FROM
customers
WHERE
Country NOT IN ('Canada', 'Germany', 'France');
SELECT
LastName, FirstName
FROM
customers
WHERE
LastName LIKE '%son';
SELECT
LastName, FirstName
FROM
customers
WHERE
FirstName LIKE '___a';
Operators
Comparision Operators(비교 연산자)
: =, >=, <=, !=, IS, LIKE, IN, BETWEEN...AND
Logical Operators(논리 연산자)
: AND(&&), OR(||), NOT(!)
IN Operator: 값이 특정 목록 안에 있는지 확인
LIKE Operator: 값이 특정 패턴에 일치하는지 확인(Wildcards와 함께 사용)
Wildcard Characters
'%': 0개 이상의 문자열과 일치하는지 확인
'_': 단일 문자와 일치하는지 확인
LIMIT clause: 조회하는 레코드 수를 제한

하나 또는 두 개의 인자를 사용 (0 또는 양의 정수)
row_count는 조회하는 최대 레코드 수를 지정
SELECT
TrackId, Name, Bytes
FROM
tracks
ORDER BY
Bytes DESC
LIMIT
7;
SELECT
TrackId, Name, Bytes
FROM
tracks
ORDER BY
Bytes DESC
LIMIT
3, 4;

-- 4. Grouping data
SELECT
Composer, AVG(BYTES)
FROM
tracks
GROUP BY
Composer
ORDER BY
AVG(Bytes) DESC;
SELECT
Composer,
AVG(Bytes) AS avgOfBytes
FROM
tracks
GROUP BY
Composer
ORDER BY
avgOfBytes DESC;
SELECT
Composer,
AVG(Milliseconds / 60000) AS avgOfMinute
FROM
tracks
GROUP BY
Composer
HAVING
avgOfMinute < 10;
HAVING clause: 집계 항목에 대한 세부 조건을 지정. 주로 GROUP BY와 함께 사용되며 GROUP BY가 없다면 WHERE처럼 동작
SELECT statement 실행 순서
데이터베이스에 새 테이블을 만듦


Data Types 종류

데이터 무결성
데이터베이스 내의 데이터에 대한 정확성, 일관성을 보장하기 위해 데이터 변경 혹은 수정 시 여러 제한을 두어 데이터의 정확성을 보증하는 것
데이터베이스에 저장된 데이터의 무결성을 보장하고 데이터베이스의 상태를 일관되게 유지하는 것이 목적
Constraints 종류













