본문 바로가기
Computer Science/Database Systems

[Database Systems] SQL (1)

by __K.Jun__ 2025. 1. 30.

Data  Definition Language (DDL)

메타 데이터를 정의(Create, Modify, Delete)하기 위해 사용되는 명령어의 집합

Data Manipulation Language (DML)

tuple들을 조작(Retrieval, Insert, Modify, Delete)하기 위해 사용되는 명령어들의 집합

Schema Creation

Schema: 동일한 DB 애플리케이션에 속하는 Table과 Constraint가 포함된 Construct의 집합

CREATE SCHEMA <schema name> 문을 사용해서 Schema를 생성할 수 있다.

Table Creation

CREATE TABLE 문: table name, attributes(이름, 타입), Initial constraints를 포함해서 table을 생성할 수 있다.

 

- Attributes

Data types: INT, FLOAT, DECIMAL, CHAR(n), VARCHAR(n), ...

NOT NULL: NULL이 허용되지 않는 attribute

DEFAULT: 아무 값도 설정되지 않았을 때 갖는 기본 값

 

- Initial constraint

PRIMARY KEY: 1개 이상의 attirbute로 이루어진 PK 집합 만들기

UNIQUE: 어떤 두 tuple도 이 attiribute에 대해 동일한 value를 가질 수 없다.

FOREIGN KEY: Referential integrity constraint을 위한 FK를 명세. Referential triggered action을 명세할 수 있다. (ON DELETE or ON UPDATE -> SET NULL or CASCADE or SET DEFAULT)

 

- Table creation example

 

- Referential triggered actions을 추가할 경우

Schema Deletion

DROP SCHEMA <schema name> CASCADE: Schema와 schema안에 있는 모든 element를 삭제

DROP SCHEMA <schema name> RESTRICT: Schema 어떤 element도 가지고 있지 않을 때 DROP SCHEMA를 허용, 그렇지 않을 때는 제한

Table Deletion

DROP TABLE <table name> CASCADE: Table과 그 table을 참조하는 모든 element를 지우기

DROP TABLE <table name> RESTRICT: 어떤 element도 그 table을 참조하지 않을 때 DRMP TABLE을 허용, 그렇지 않을 때는 제한

Altering Tables

1. Column을 추가하거나 삭제

2. Column을 변경

3. 테이블의 constraints를 추가하거나 삭제

ALTER TABLE <table name>문을 사용.

SELECT Query

- SELECT문

DB로부터 데이터를 가져오기 위한 기본 문장이다.

relational operation의 select와는 다른 개념이다.

이는 relational algebra operation의 SELECT(WHERE), PROJECT(SELECT), JOIN(FROM)의 조합이다. 

relational model은 tuple의 중복을 허용하지 않지만, SELECT 문의 결과는 중복을 허용한다. 중복을 허용하고 싶지 않다면 DISTINCT 절을 사용하면 된다.

 

기본 형태는 다음과 같다.

<attribute list>: 얻고자 하는 attribute의 list

<table list>: query를 처리하는데 필요한 relation들의 이름

<condition>: query를 통해 얻고자 하는 tuple을 식별하기 위한 boolean expression

쉽게 생각 하자면, table list에 있는 table들을 CARTESIAN PRODUCT로 모든 조합을 만들고, condition으로 걸러낸 후, 보고 싶은 attribute를 attiribute list에 포함시키면 된다. condition에는 보통 FK = PK 조건과 찾고자 하는 tuple이 가지고 있는 특징이 조건으로 들어간다.

 

- Ambiguous Attribute Names

같은 attribute name을 서로 다른 relation에서 가지고 있는 게 허용 된다. 따라. 앞에 relation 이름을 써서 구분할 수도 있고 AS를 통해 별칭을 붙여 구분할 수도 있다.

 

- Missing WHERE Clause

SELECT문에 SELECT와 FROM만 존재한다면 table list에 있는 테이블간 tuple의 모든 조합(CARTESIAN PRODUCT)을 가져오는것이다.

 

- USE of the Asterisk

SELECT * : 결과로 모든 attribute를 선택

 

- Tables as Sets

SELECT문의 결과는 중복을 허용한다. 하지만 집합처럼 중복을 없애고 싶다면 SELECT에 있는 attribute 앞에 DISTINCT를 붙여주면 된다. 아무것도 쓰지 않는다면 디폴트로 ALL이 적용된다.

SELECT의 결과로 나오는 테이블 끼리 집합 연산인 UNION, EXCEPT, INTERSECT등을 적용할 수 있는데, 이를 적용하면 자동으로 tuple의 중복이 제거된다.

이 예제에서는 집합 연산을 하면 중복이 제거되기 때문에 DISTINCT가 없어도 결과는 똑같다.

728x90