[파이썬][SQL] SQL과 데이터베이스
Keypoint
- Database를 왜 써야하는가?
- 외래키와 기본키가 무엇인가?
- 기본키는 어떤 특징을 가지고 있는가?
- 관계설정은 어떻게 할 수 있을까?
SQL
- SQL 종류
-
Data Definition Language (DDL)
DDL 은 데이터를 정의할 때 사용되는 언어를 가리킵니다. 예를 들어 테이블을 만들 때 사용하는
CREATE
이나 테이블을 제거할 때 사용되는DROP
등 입니다. 데이터베이스의 테이블과 같은 오브젝트를 정의할 때 사용됩니다. -
Data Manipulation Language (DML)
DML 은 데이터베이스에 데이터를 저장할 때 사용되는 언어를 가리킵니다. 예를 들어
INSERT
처럼 새로운 레코드를 추가할 때 사용되는 문법들이 포함됩니다. 따라서 데이터를 삭제하는DELETE
라든가 변경하는UPDATE
등이 여기에 포함됩니다. -
Data Control Language (DCL)
DCL 은 데이터베이스에 대한 접근 권한과 관련된 문법입니다. 어느 유저가 데이터베이스에 접근할 수 있는지 권한을 설정하거나 없애는 역할이죠. 예를 들어 권한을 주는
GRANT
나 권한을 가져가는REVOKE
등이 포함됩니다. -
Data Query Language (DQL)
DQL 은 정해진 스키마 내에서 쿼리를 할 수 있는 언어입니다. 여기에 포함된 문법은
SELECT
정도가 있습니다. 물론 이렇게 따로 언어가 분류되지만 DQL 을 DML 의 일부분으로 말하곤 합니다. -
Transaction Control Language (TCL)
TCL 은 DML 을 거친 데이터 변경사항을 수정할 수 있습니다. 예를 들어
COMMIT
처럼 DML 이 작업한 내용을 데이터베이스에 커밋하거나ROLLBACK
처럼 커밋했던 내용을 다시 롤백하는 문법들이 있습니다.
-
관계형 데이터베이스
- 데이터 : 각 항목에 저장되는 값
- 테이블 (relation) : 사전에 정의된 행과 열로 구성되어 있는 체계화된 데이터
- 필드(column) : 테이블 열
- 레코드 (tuple) : 테이블의 한 행의 저장된 정보
- 키 (key) : 테이블의 각 레코드를 구분할 수 있는 값, 각 레코드마다 고유값이어야 하며 기본기 (primary key)와 외래키 (foreign key) 등
스키마 디자인
CLI로 스키마 디자인하기
GUI로 스키마 디자인 확인하기
CREATE TABLE 테이블 이블
: 테이블 형성
인덱스 이름 데이터 타입
: 새로운 인덱스 형성
인덱스 이름 데이터 타입 PRIMARY KEY
: 기본키 형성
FOREIGN KEY(이전관계 기본키 이름) REFERENCES 이전관계 테이블 이름(이전관계 기본키 이름)
: 외래키 형성
기본 쿼리문
동그라미 친 부분이 1 대 다 관계이다. (선을 자세히 보면 관계성을 볼 수 있다.)
- SQL을 사용할 때 알고 있어야 하는 작업
SELECT
: (필수적) 데이터셋에 포함될 특성을 특정FROM
: (필수적) 결과들을 도출해낼 데이터베이스 테이블 명시WHERE
: (선택적) 필터 역할AND, OR, NOT
ORDER BY
: (선택적) 돌려받는 데이터 결과 정렬INSERT INTO
NULL VALUES
UPDATE
DELETE
COUNT
LIKE
: 특정 값 필터WILDCARDS
: 와일드카드, 전부 선택ALIASES
JOINS
INNER JOIN
: 공통된 부분 연결LEFT JOIN
:OUTER JOIN
중의 방법으로 좌측으로 방향 선택RIGHT JOIN
:OUTER JOIN
중의 방법으로 우측으로 방향 선택
GROUP BY
- DB 관련
- SQL Create DB
- SQL Drop DB
- SQL Create Table
- SQL Drop Table
- SQL Alter Table
- SQL Not Null
- SQL Unique
- SQL Primary Key
- SQL Foreign Key
- SQL Default
- SQL Auto Increment
- SQL Dates
- SQL 명령어 정리
-
SELECT
SELECT 'Hello World'; # 일반 문자열 SELECT 2; # 숫자 SELECT 15 + 3; # 단순 계산
-
FROM
SELECT 특성_1 # 특정 특성을 테이블에 사용 FROM 테이블_이름; SELECT 특성_1, 특성_2 # 다수의 특성을 테이블에 사용 FROM 테이블_이름; SELECT * # 테이블의 모든 특성 선택 # **여기서 *는 와일드 카드로 전부 선택시 사용한다.** FROM 테이블_이름;
-
WHERE
SELECT 특성_1, 특성_2 FROM 테이블_이름 WHERE 특성_1 = "특정 값"; # 특정 값과 동일한 데이터 찾기 SELECT 특성_1, 특성_2 FROM 테이블_이름 WHERE 특성_2 <> "특정 값"; # 특정 값을 제외한 데이터 찾기 SELECT 특성_1, 특성_2 FROM 테이블_이름 WHERE 특성_1 > "특정 값"; # 특정 값보다 크거나 작은 데이터를 필터 SELECT 특성_1, 특성_2 FROM 테이블_이름 WHERE 특성_1 <= "특정 값"; # 특정 값을 포함하는 '이상' '이하' SELECT 특성_1, 특성_2 FROM 테이블_이름 WHERE 특성_2 LIKE "%특정 문자열%"; # 특정 값과 비슷한 값들을 필터 "*특정 문자열*"로도 가능 SELECT 특성_1, 특성_2 FROM 테이블_이름 WHERE 특성_2 IN ("특정값_1", "특정값_2"); # 리스트의 값들과 일치하는 데이터 필터 SELECT * FROM 테이블_이름 WHERE 특성_1 IS NULL; # 값이 없는 NULL을 찾을 때 SELECT * FROM 테이블_이름 WHERE 특성_1 IS NOT NULL; # 값이 없는 경우를 제외할 때
-
ORDER BY
SELECT * FROM 테이블_이름 ORDER BY 특성_1; # 데이터 정령 (오름차) SELECT * FROM 테이블_이름 ORDER BY 특성_1 DESC; # 데이터 정렬 (내림차)
-
LIMIT
SELECT * FROM 테이블_이름 LIMIT 200; # 갯수 한정 (200 숫자 위치를 바꾸면 된다)
-
DISTINCT
SELECT DISTINCT 특성_1 # 유니크한 값들 선택 FROM 테이블_이름; # SELECT DISTINCT # 여러 특성의 유니크한 '조합'값 선택 특성_1 ,특성_2 ,특성_3 FROM 테이블_이름;
-
INNER JOIN
SELECT * FROM 테이블_1 JOIN 테이블_2 ON 테이블_1.특성_A = 테이블_2.특성_B; # 예시 SELECT c.FirstName || ' ' || c.LastName AS 'Customer Name', e.Firstname || ' ' || e.LastName AS 'Employee Name' FROM customers AS c JOIN employees AS e ON c.SupportRepId = e.EmployeeId;
-
OUTER JOIN
SELECT * FROM 테이블_1 LEFT OUTER JOIN 테이블_2 ON 테이블_1.특성_A = 테이블_2.특성_B SELECT * FROM 테이블_1 RIGHT OUTER JOIN 테이블_2 ON 테이블_1.특성_A = 테이블_2.특성_B
-