CS/Database

[데이터베이스] 5. Basic SQL (chapter 6)

공영재 2023. 12. 2. 17:35

Reference - Fundamentals of Database Systems 7th edition

 

 

SQL

 

SQL은 관계형 데이터베이스에서 데이터를 처리하는 선언적 언어다. 따라서 절차적인 Python, C와 달리 선언만 하면 되기에 상대적으로 쉬울 것이다.

 

Table = relation, row = tuple, column = attribute다.

SQL schema는 DB의 이름이다. schema 안엔 DB의 권한이나 설명이 포함되어 있다. 

 

Example

- Create Schema

CREATE SCHEMA COMPANY AUTHORIZATION 'Jsmith';

- Create table

CREATE TABLE COMPANY.EMPLOYEE (or 그냥 EMPLOYEE)

- View

사용자가 보기를 원할 때 JOIN 등을 통해 임시로 만드는 가상의 테이블. 

 

Candidate key 중 유일해야할 때 UNIQUE, FOREIGN KEY의 경우 REFERENCES x를 통해 참조하는 테이블 설정.

회사의 예시 테이블을 만들면 아래와 같다. VARCHAR()는 가변 Character type을 말한다.

이때 Primary Key도 Set(A, B)의 형태로 존재할 수 있다.

 

foreign key issue로 table이 생성되지 않을 수 있는데, circular reference나 refer하는 table이 아직 생성되지 않았을 때는 Create가 불가능하다.

 

- Attribute data types

numeric : INT, FLOAT

character-string : CHAR, VARCHAR

Bit-string : BIT, BLOB(이미지, 동영상)

Boolean : TRUE, FALSE, NULL

DATE : YYYY-MM-DD

Timestamp : Include DATE, TIME

DOMAIN : Attribute가 가질 수 있는 값의 범위. ex. CREATE DOMAIN A AS CHAR(10); 

TYPE과 FUNCTION도 만들 수 있다.

 

- Attribute Constraints

3 basic constraints + NOT NULL + CHECK (값이 특정 범위안에 있는지, 비즈니스 상황에 따라 바뀔 수 있음)

PRIMARY KEY, UNIQUE도 data type 뒤에 keyword를 작성해서 설정할 수 있다.

Foreign Key의 경우 violation이 발생하면 option을 설정해줄 수 있다.

CONSTRAINT keyword를 통해 이름을 설정할 수도 있다.

 

- SELECT

SELECT-FROM-WHERE keyword가 가장 중요하다.

SELECT <attribute and function list> FROM <table list> WHERE <condition>;으로 수행되어진다.

그 뒤에 GROUP BY <grouping attributes> HAVING <grouping conditions> ORDER BY(=정렬) <attribute list>로 SELECT가 이루어진다.

 

operator

WHERE문은 logical comparison( >, =, ..etc)이 가능하다. 참고로 같지 않음을 표기할 땐 '<>'를 사용한다.

또한 AS를 통해 별칭을 설정할 수 있으며, asterisk (*)를 통해 모두 포함하게끔 SELECT할 수 있다.

WHERE를 작성하지 않으면, cross product로 모든 값을 보낸다.

논리 설계와 다르게 SQL은 tuple에 중복이 가능하며, 중복되는 tuple을 mutliset(or bag)이라 한다.

중복을 허용할땐 SELECT ALL, 불허할땐 SELECT DISTINCT를 하면 된다.

합집합, 차집합, 교집합의 경우 SELECT 되는 값이 동일할 때 UNION, EXCEPT, INTERSECT를 통해 구할 수 있다.

LIKE operator는 text에서 pattern을 매칭할 때 사용한다. LIKE '%abc%', 혹은 LIKE '010____1234' 등으로 사용 가능하다.

ORDER BY는 default로 오름차순이며, ASC(혹은 DESC)를 통해 어떤 순서로 정렬할 지 정한다.

 

- INSERT

tuple은 순서를 지키는 set이므로, 순서를 지켜서 value를 INSERT INTO 해야 한다.

 

- DELETE

참조 무결성에 유의해야 한다. 일단 reject하지만, option이 있을 땐 option에 따라 수행하게 된다. DELETE FROM을 사용하며, DELETE FROM A WHERE condition; 으로 사용할 수 있다.

 

- UPDATE

Primary Key인지, Foreign Key인지, 그 외의 Key인지에 따라 constraints가 달라진다. SET을 사용한다.

예시로 UPDATE PROJECT SET DNUM=5 WHERE PNUM=10; 처럼 사용할 수 있다.

 

반응형
loading