23.12.11
[오늘 할 일]
1. SQL 코드카다
2. SQLD 자격증 대비반 6주차&7주차 수강
3. 아티클 스터디
[내용정리]
1. SQL 코드카타
SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE ANIMAL_TYPE = 'dog'
AND NAME LIKE '%el%'
ORDER BY NAME
# MIN( ) / MAX()
# '%EL%' -> 앞 OR 뒤로 EL이 포함된
SELECT ANIMAL_TYPE, IFNULL(NAME,"No name") as NAME, SEX_UPON_INTAKE
FROM ANIMAL_INS
ORDER BY ANIMAL_ID
#IFNULL( , )
SELECT ANIMAL_ID, NAME, DATE_FORMAT(DATETIME, '%Y-%m-%d')
FROM ANIMAL_INS
ORDER BY ANIMAL_ID
#DATE_FORMAT
구분기호 | 역할 | 구분기호 | 역할 | 구분기호 | 역할 |
%Y | 4자리 년도 | %m | 숫자 월(두자리) | %d | 일자(두자리) |
%y | 2자리 년도 | %c | 숫자 월(한자리) | %e | 일자(한자리) |
%M | 긴 월(영문) | %W | 긴 요일(영문) | %i | 분 |
%b | 짧은 월(영문) | %a | 짧은 요일(영문) | %T | hh:mm:ss |
%I | 시간(12시간) | %S | 초 | $r | hh:ss AM,PM |
%H | 시간(24시간) |
2. SQLD 자격증 대비반 6~7주차
> 실습 : Oracle live SQL
[6주차]
-- 한 줄 주석
/*
여러 줄 주석
*/
-- 테이블 생성
CREATE TABLE TestUser (
id NUMBER PRIMARY KEY,
name VARCHAR2(50) NOT NULL,
age NUMBER
);
-- 테이블 추가
INSERT INTO TestUser (id, name, age)
VALUES (1, 'aiden', 22);
INSERT INTO TestUser (id, name, age)
VALUES (2, 'soo', 25);
-- 테이블 조회
SELECT * FROM TestUser;
<7주차>
[관계형 데이터베이스 개요] (like 표)
1. 관계형 데이터베이스(Relational Database)
- 행과 열의 2차원 관계로 정의된 데이터로 생성, 수정, 삭제 그리고 조회가 가능하다.
- 데이터베이스 이전 '파일 시스템'을 통한 정보의 관리는 중복되는 데이터의 관리가 어렵고 일관성 있는 데이터 축적에도 큰 한계가 존재. 이를 조금 더 체계적으로 정의하고 조작하는 방법을 고민하면서 나옴.
> RDMS : Relational Database Management System
2. SQL : Structured Query Language
데이터베이스에서 생성, 수정, 삭제 등의 행위를 수행하기 위해 고안된 언어
1) 언어분류
- SQL은 특정한 규치엑 맞춰서 구문을 작성해야 하는 자체 표준이 존재함. (다만 데이터베이스를 제공하는 회사에 다른 특징을 가지고 있기에 회사마다 다른 처리가 필요)
a. 데이터 정의어 (Data Definition Language)
- 테이블 구조 정의
- 생성(CREATE), 변경(ALTER,RENAME),삭제(DROP)
b. 데이터 조작어 (Data Manipulation Language)
- 테이블에 저장된 데이터를 조작
- 데이터를 삽입(INSERT), 조회(SELECT), 수정(UPDATE), 삭제(DELETE)
c. 데이터 제어 언어 (Data Control Language)
- 데이터베이스에 접근하여 이를 제어하기 위한 권한을 관리
- 권한 부여(GRANT), 회수(REVOKE)
d. 트랜잭션 제어어 (Date Definition Language)
- DML에 의해 조작된 결과를 작업단위(트랜잭션)별로 제어하는 언어
- COMMIT, ROLLBACK
* 복습) 트랜잭션(TRANSACTION) 특징
a. 원자성(Atomicity)
b. 일관성(Consistency)
c. 독립성(Isolation)
d. 지속성(Duration)
* SQL Syntax
- 세미콜론(;) : 각각의 SQL문을 구분하는 표준
- SQL키워드는 대소문자를 구문하지 않음. but 대문자로 작성하는 것을 권장(for 가독성)
* SQL 문(Statement) : 완전한 SQL 코드 조각
* SQL 절(Clause) : SQL문의 하위단위
3) 테이블
- 관계형 데이터베이스는 데이터베이스의 기본 단위인 테이블의 형태로 데이터를 저장한다. excel 시트 구조랑 동일.
- 여러 테이블 간에는 관계가 있을 수 있는데, 이를 연결해주는 것이 외래키(FK). (관계가 형성)
[DDL]
1. DDL 정의와 유형
1) 정의
- Data Definition Language는 데이터베이스를 구성하는 다양한 요소를 정의하거나 변경하고 제거하는 언어다.
테이블을 만드는 것이니 속성(COLUNM) 설정 중요.
- 테이블의 구성 요소 중 가장 중요한 것은 칼럼이 어떤 방식으로 저장할지 등 정의하는 일이다.
2) 데표적인 데이터 유형
a. CHARICTER(Size) - CHAR로 표현
- 고정 길이의 문자열 정보로, 해당 길이보다 작은 경우 남은 부분은 공백으로 채워짐
- 기본 길이 1Byte ~ 4,000Byte (SQL Server은 8,000Byte)
b. VARCHAR(Size) - VARCHAR로 표현
- 가변 길이의 문자열 정보
+참고) 일반적으로 1개의 문자는 4Byte 크기를 가
c. NUMBERIC(몇자리, 소수점)
- 정수, 실수 등의 숫자 정보
- ISO/ANSI의 기준에 따라 NUMERIC, DECIMAL, SAMLLINT, INT, FLOAT, REAL 등으로 구분
|
- SQL Server의 경우 ISO/ANSI의 기준에 맞춰 작은 정수, 정수, 큰 정수, 실수 등으로 제공
- Oracle 경우 NUMBER 타입이 대표적
d. DATETIME
- 날짜 시각 등과 관련된 정보
- SQL Server 경우 DATETIME, Oracle은 DATE로 표현
2. 제약조건(CONSTRAINT) - 테이블에 부적절한 값이 들어지 않도록 하는 규칙
a. NOT NULL
b. UNIQUE
c. PRIMARY KEY
- 테이블당 1개의 기본키만 설정
- NOT NULL + NUIQUE 제약조건 기본 설정
CONSTRAINT PK_example PRIMARY KEY(col1, col2, col3)
e. FOREIGN KEY
- 참조하는 테이블이 먼저 생성되어 있어야 하며, 외래키가 참조하는 칼럼은 테이블의 기본키(PK)여야 한다.
CONSTRAINT FK_example FOREIGN KEY(col4) REFERENCES table_example(col1)
f. DEFAULT
해당 속성에 값을 입력하지 않을 경우 부여될 기본 값
g. CHECK
미리 지정한 조건에 맞는 데이터를 입력, 주로 특정 '값, 범위'를 지정
3. 테이블 생성(CREATE)
CREATE TABLE table_name (
-- column_1 data_type constraints
name VARCHAR2(10) NOT NULL,
age NUMBER(2),
email VARCHAR2(40) NOT NULL UNIQUE
);
4. 테이블 수정 (ALTER)
1) COLUMN & CONSTRAINT 추가
-- ADD
ALTER TABLE 테이블명 ADD 칼럼명 데이터_유형;
ALTER TABLE player ADD address VARCHAR(20);
-- CONSTRAINT
ALTER TABLE 테이블_이름 ADD CONSTRAINT 제약_조건_이름 제약조건 (컬럼_이름);
ALTER TABLE player ADD CONSTRAINT player_fk FOREIGN KEY team_id REFERENCES TEAM(team_id);
2) COLUMN & CONSTRAINT 삭제
-- DROP COLUMN
ALTER TABLE 테이블_이름 DROP COLUMN 삭제_할_컬럼_이름;
ALTER TABLE player DROP COLUMN address;
-- DROP Constraint
ALTER TABLE 테이블_이름 DROP CONSTRAINT 제약_조건_이름;
ALTER TABLE player DROP CONSTRAINT player_fk;
3) COLUMN & CONSTRAINT 수정
-- Oracle
ALTER TABLE 테이블_이름 MODIFY (
컬럼_이름_1 데이터_유형 [DEFAULT 식] [NOT NULL],
컬럼_이름_2 데이터_유형 [DEFAULT 식] [NOT NULL]
...);
-- SQL Server
ALTER TABLE 테이블_이름 ALTER COLUMN (
컬럼_이름_1 데이터_유형 [DEFAULT 식] [NOT NULL],
컬럼_이름_2 데이터_유형 [DEFAULT 식] [NOT NULL]
...);
4) COLUMN & TABLE 이름 변경
-- CLOUMN
-- Oracle
ALTER TABLE 테이블_이름 RENAME COLUMN 변경_할_컬럼_이름 TO 새로운_컬럼_이름;
-- SQL Server
SP_RENAME 테이블_명.변경_할_컬럼_이름, 새로운_컬럼_이름, 'COLUMN';
-- TABLE
-- Oracle
RENAME 기존_테이블_이름 TO 새로운_테이블_이름;
-- SQL Server
SP_RENAME 기존_테이블_이름, 새로운_테이블_이름;
5. DROP TABLE
- 테이블 전체를 삭제할 때 사용, CASCADE CONSTRAINT를 쓰면 참조하고 있는 제약조건에 대해서 해당 테이블이 삭제될 때 같이 삭제될지 여부를 결정한다.
DROP TABLE 테이블_이름 [CASCADE CONSTRAINT];
+) CASCADE CONSTRAINT 옵션,
- 참조가 걸려있는 값을 수정/삭제할 때 해당 값을 참조하고 있는 모든 레코드 역시 종속적으로수정/삭제를 가능하게 하는 옵션이다. (SQL Server에서는 해당 옵션이 존재하지 않아 참조 테이블 관계가 있을 시 제약 조건 혹은 참조 테이블을 먼저 삭제해야 테이블 삭제가 가능하다.)
-- 참조하고 있는 모든 레코드도 함께 수정
ALTER TABLE ORDERS ADD FOREIGN KEY (product_id) REFERENCES Product(id) ON UPDATE CASCADE;
-- 참조하고 있는 모든 레코드도 함께 삭제
ALTER TABLE ORDERS ADD FOREIGN KEY (product_id) REFERENCES Product (id) ON DELETE CASCADE;
-- 참조하던 레코드가 사라지면 NULL 값으로 변경
ALTER TABLE ORDERS ADD FOREIGN KEY (product_id) REFERENCES Product (id) ON DELETE SET NULL;
6. TRUNCATE TABLE
테이블은 그대로 남기고 데이터만 삭제할 경우
TRUNCATE TABLE 테이블_이름;