doo_ 2023. 12. 11. 16:01

[오늘 할 일]

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 등으로 구분

  • NUMERIC/DECIMAL : 고정 소수점 숫자를 나타내는 데 사용 이 둘은 거의 동일한 의미를 가지며, 몇몇 DBMS에서는 이 둘을 상호 교환하여 사용
  • SMALLINT : 2Byte로 표현되는 작은 범위 정수
  • BIGINT : 4Byte로 표현되는 큰 범위 정수
  • FLOAT : 부동 소수점 숫자를 나타내는 데 사용
  • REAL : 4Byte 부동 소수점 숫자를 나타내는데 사용

- 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 테이블_이름;