5. Basic SQL

ushin20
|2023. 5. 2. 18:31

SQL은 선언적인 언어로 매우 쉽다. 외국에서는 "SEQUEL"이라고 한다. 앞에서 배웠던 tabe, row, column으로 이루어져 있다.

 

SQL schema

CREATE SCHEMA COMPANY(이름) AUTHORIZATION 'Ushin';

Schema name과 각 element에 대한 권한, 설명을 함께 표기한다.

 

Catalog

Schema는 여러개일 수 있다. Schema들의 이름을 모아둔 것을 catalog라고 한다.

 

CREATE TABLE

CREATE TABLE COMPANY.EMPLOYEE

or

CREATE TABLE EMPLOYEE

Table도 만들 수 있다. 이런 table들을 필요에 맞게 view의 형태로 보여줄 수 있다. 실제로 table을 만들어서 물리적으로 저장하는 것이 아니라 임시로 만들어진다. CREATE VIEW로 가능하다.

Example of CREATE TABLE

Foreign Key 설정은 약간의 error를 발생시킬 가능성이 있다. 가령, 상호 참조를 하거나 아직 만들어지지 않은 table을 참조하는 에러가 발생할 수 있다. 보통은 table을 다 만들고 foreign key 등의 설정을 진행하여 의도하지 않은 error를 피한다.

 

Attribute Data Types

Numeric Char(string) Bit-string Boolean DATE
INT
FLOAT
DOUBLE
CHAR(n)
VARCHAR(n)
: n byte 잡아두고 사용하는 만큼만 저장한다.
BIT(n)
BIT VARYING(n)
BLOB(n)
TRUE
FALSE
NULL
YEAR
MONTH
DAY

 

여러가지 명령어들

Schema CREATE SCHEMA COMPANY(이름) AUTHORIZATION 'Ushin';
Table CREATE TABLE COMPANY.EMPLOYEE ~;
or
CREATE TABLE EMPLOYEE ~;
Domain CREATE DOMAIN SSN_TYPE AS CHAR(9);
Type CREATE TYPE ~;
Check (Attribute) (type) CHECK (condition);
Primary key (Attribute) (type) PRIMARY KEY;
Unique (Attribute) (type) UNIQUE;

 

Constraints in SQL

앞에서 봤던 제약들이다.

Key constraint Key value는 중복이 되면 안된다.
Entity Integrity constraint Primary key는 null이 되면 안된다.
Referential Integrity constraint Foregin key는 값이 있는 Primary key(혹은 null)를 참조한다.
Domain constraint 허용된 attribute 범위에 있는 값이어야 한다.
Null constraint Null 허용여부에 따라 사용이 가능하다.

 

Foregin key violation

SET NULL, CASCADE, SET DEFAULT의 대응이 가능하다.

SET NULL CASCADE SET DEFAULT
FK = null 지워지는 PK 값을 FK에 넣기 Default 값으로 설정

 

Giving name to Constraints

Constraint에 이름을 줄 수 있다.

Named constraint

CHECK를 이용해서 constraint을 줄 수도 있다.

CHECK (Dept_create_date <= Mgr_start_date)

 

Basic Retrieval Queries in SQL

SELECT 명령어를 이용하면, 2개 이상의 tuple들이 결과로 나오는데, 이 때 중복되는 값이 있을 수 있다. Relational model에서는 중복을 허용하지 않았던 것과 상반된다. 중복되는 tuple을 Multiset or Bag behavior라고 한다.

Attribute 간에 PK나 unique한 값이 아니라면, 중복되는 값은 있을 수 밖에 없기 때문에 발생하는 일이다. DISTINCT 명령어나 집합 명령어를 통해 중복을 지워줄 수도 있다.

 

SELECT statement

SELECT <attribute list>

FROM <table list>

WHERE <condition>

GROUP BY <grouping attribute>

HAVIING <grouping condition>

ORDER BY <attribute list>

 

예시는 다음과 같다.

기억해야할 점은, WHERE이 없으면 모든 가능한 조합이 결과로 나온다. 애매한 경우 table의 이름을 명시할 수도 있으며, aliasing도 가능하다.

특정 attribute를 고르지 못하는 경우에는 *를 이용해 모든 attribute를 선택하여 결과를 볼 수 있다.

 

Set operation

UNION(합집합), EXCEPT(차집합), INTERSECT(교집합)의 명령어가 있다. 중복을 허용하는 것을 원하면 UNION ALL처럼 명시해줘야 한다. 기본적으로 DISTINCT이다.

 

Pattern Matching

LIKE와 BETWEEN이 있다.

WHERE ssn LIKE '__1__3456'

WHERE ssn LIKE '%34%'

WHERE (ssn BETWEEN 3013 AND 4031) AND dno=5;

 

Arithmetic operation

SELECT 사용시에 사칙연산을 이용해 검색할 수 있다.

 

Ordering of query results

ORDER BY D.Dname DESC, E.Lname ASC, E.Fname ASC

ORDER BY <attribute list>에 의해 나오는 결과는 기본적으로 ascending(오름차순)이다. Descending을 원하면 DESC라고 명시해줘야 한다.

 

INSERT

CREATE TABLE에서 만들어둔 attribute 순서를 지켜서 입력해줘야 한다.

Simple example of INSERT
SELECT와 함께 사용이 가능하다. Query의 결과로부터 value들을 받아 여러개의 tuple을 생성하는 방법이다.
비슷한 table을 만들 때, 필요한 정보들을 끌어다가 만들 수도 있다.

 

DELETE

WHERE 조건을 적어주지 않으면, 모든 data를 삭제하게 된다. 비슷한 명령어로 DROP이 있다. DELETE는 저장된 정보만을 지우는 반면, DROP은 해당 table 자체를 지우는 방법이다.

 

UPDATE

Pnumber=10인 프로젝트의 Plocation과 Dnum을 위와 같이 바꾼다. WHERE이 없으면 모든 프로젝트가 바뀌게 된다.

SET과 함께 사용된다. SET은 변경할 attribute와 변결될 값을 명시해야 한다.

Dname=Research인 DEPARTMENT에서 선택된 Dnumber에 EMPLOYEE의 Dno가 있으면 월급을 올려주겠다.

WHERE-WHERE도 가능하다.