본문 바로가기

Contact English

【데이터베이스】 12강. SQL

 

12강. SQL

 

추천글 : 【데이터베이스】 데이터베이스 목차


1. 개요 [본문]

2. CREATE TABLE [본문]

3. INSERT [본문]

4. SELECT [본문]

5. JOIN [본문]

6. Nested Query [본문]

7. DCL [본문]

8. 사용자 등급 지정 및 해제 [본문]

9. 테이블 및 속성에 대한 권한 부여 및 취소 [본문]

10. CREATE INDEX [본문]

11. CREATE VIEW [본문]

12. DROP VIEW [본문]

13. 내장 SQL [본문]

14. 커서 [본문]

15. 스토어드 프로시저 [본문]


a. SQL example 


 

1. 개요 [목차]

⑴ 특징 : SQL은 indententaion error가 없음

⑵ PostgreSQL : 30년에 걸쳐 개발된 오픈 소스 관계형 데이터베이스 시스템

① 튜링상 수상자인 Michael Stonebraker가 만든 row-oriented DBMS 

방법 1. pgAdmin

① 1st. https://www.enterprisedb.com/downloads/postgres-postgresql-downloads : 맥OS에서는 조금 복잡함

② 2nd. pdAdmin4 실행

③ 3rd. Object > Create > Server > General : Name 입력 > Connection : Host name, Password 입력

④ 4th. Servers > PostgreSQL 12 > Databases > postgres > Schemas > public : 오른쪽 마우스 클릭 후 Query Tool

⑤ 5th. CSV 파일 import

○ File > Preferences > Paths > Binary paths > PostgreSQL Binary Path : $DIR/../../bin 입력 후 박스 체크

○ CREATE TABLE

○ public > Tables > 생성한 테이블 우클릭 후 Import/Export

○ Options : Import 클릭, Filename 입력, Encoding은 UTF8, Header는 Yes, Delimiter는 , (내용에 따라 셋팅 다름)

○ Columns : NULL Strings으로 -- (내용에 따라 다름)

방법 2. JDBC driver-based DB tool (예 : Dbeaver)

방법 3. Python ODBC module (예 : psycopg2)

방법 4. phpmyadmin : 웹 환경에서 구현 가능한 SQL

 

 

2. CREATE TABLE [목차]

⑴ 개요 : SQL에서 SELECT문은 관계 대수의 σ와 π 연산을 합쳐 놓은 형태

⑵ 표기 형식

 

CREATE TABLE [테이블명] (

1번 열의 이름 1번 열의 자료형,

2번 열의 이름 2번 열의 자료형,

···

마지막 열의 이름 마지막 열의 자료형

)

 

① 자료형의 종류 : INT4, FLOAT8, VARCHAR(1), VARCHAR(2), ··· 

⑶ UNIQUE : 대체키로 사용할 속성 또는 속성의 집합을 지정, 즉 중복된 값을 가질 수 없음

⑷ ON DELETE 옵션 : 참조 테이블의 참조 속성 값이 변경되었을 때 기본 테이블에 취해야 할 사항들을 지정

⑸ ON UPDATE 옵션 : 참조 테이블의 참조 속성 값이 변경되었을 때 기본 테이블에 취해야 할 사항을 지정

⑹ 각 옵션에는 NO ACTION, CASCADE, SET NULL, SET DEFAULT 모드가 있다.

⑺ NO ACTION : 참조 테이블에 변화가 있어도 기본 테이블에는 아무런 조치를 취하지 않음

⑻ CASCADE : 참조 테이블의 튜플이 삭제되면 기본 테이블의 관련 튜플도 모두 삭제되고, 속성이 변경되면 관련 튜플의 속성 값도 모두 변경. 트리거 연산

⑼ SET NULL : 참조 테이블에 변화가 있으면 기본 테이블의 관련 튜플의 기본값은 NULL로 변경

⑽ SET DEFAULT : 참조 테이블에 변화가 있으면 기본 테이블의 관련 튜플의 기본값은 DEFAULT 값으로 변경

 

 

3. INSERT [목차]

⑴ 표기 형

 

INSERT INTO public.TABLE_NAME(

col_1, ···, col_n)

VALUES (value_1, ···, value_n);

 

 

4. SELECT [목차]

⑴ 표기 형식

 

SELECT select_list

FROM table_name

WHERE condition

ORDER BY field_name [ASC / DESC]

LIMIT number;

 

⑵ DISTINCT

⑶ 함수를 이용한 질의문

① 함수의 종류 : SUM, AVG, MAX, MIN, COUNT

⑷ 검색된 결과의 정렬

① LIMIT : 검색 개수를 특정 number로 제한

② 정렬을 수행할 때 ORDER BY 절을 사용하며, 오름차순은 ASC, 내림차순은 DESC로 나타냄

③ 정렬의 기준은 2가지 이상 주어질 수 있다. "ORDER BY 학번 ASC, 학년 DESC"는 1차적으로 학번을 기준으로 오름차순으로 정렬하고, 학번이 같은 경우 학년의 내림차순으로 정렬하라는 의미

⑸ 그룹 분류 질의문

속성의 값을 그룹으로 분류하고자 할 때 사용하며 GROUP BY 절을 사용

② GROUP BY에 의해 그룹으로 분류된 후 조건을 설정할 때 그 행 뒤에 "HAVING condition"을 쓰면 됨  

③ GROUP BY에 쓰는 속성만 SELECT의 대상이 될 수 있음

⑹ 부속 질의문

① 메인 질의문과 부속 질의문을 연결할 때 '='을 사용하는 경우와 'IN'을 사용하는 경우의 차이점은 부속 질의문에서 얻어진 결과가 한 가지인 경우 '='을 하용하지만 부속질의문에서 얻어진 결과가 하나 이상 여러 가지인 경우는 'IN'을 사용

⑺ 부분 매치 질의문

① '%'는 여러 문자를 대신하고, '_'는 한 자리를 대신

② '%'나 '_' 이용 시 '=' 대신 'LIKE' 사용

⑻ NULL 값과 비교

 

 

5. JOIN : INNER JOIN, OUTER JOIN으로 구분 [목차]

⑴ INNER JOIN : EQUI JOIN과 NON-EQUI JOIN으로 구분

① EQUI JOIN의 표기 형식

 

SELECT [테이블명1.]속성명, [테이블명2.]속성명, ...

FROM 테이블명1, 테이블명2, ...

WHERE 테이블명1.속성명 = 테이블명2.속성명;

 

SELECT [테이블명1.]속성명, [테이블명2.]속성명, ...

FROM 테이블명1

NATURAL JOIN 테이블명2;

 

SELECT [테이블명1.]속성명, [테이블명2.]속성명, ...

FROM 테이블명1

JOIN 테이블명2

USING(속성명);

 

SELECT [테이블명1.]속성명, [테이블명2.]속성명, ...

FROM 테이블명1

JOIN 테이블명2

ON join_condition

 

② NON-EQUI JOIN의 표기 형식

 

SELECT [테이블명1.]속성명, [테이블명2.]속성명, ...

FROM 테이블명1, 테이블명2, ...

WHERE (NON-EQUI JOIN 조건)

 

⑵ OUTER JOIN : LEFT OUTER JOIN, RIGHT OUTER JOIN, FULL OUTER JOIN이 있다. 이는 릴레이션에서 JOIN 조건에 만족하지 않는 튜플도 결과로 출력하기 위한 방법이다.

① LEFT OUTER JOIN의 표기 형식

 

SELECT [테이블명1.]속성명, [테이블명2.]속성명, ...

FROM 테이블명1

LEFT OUTER JOIN 테이블명2

ON 테이블명1.속성명 = 테이블명2.속성명

 

SELECT [테이블명1.]속성명, [테이블명2.]속성명

FROM 테이블명1, 테이블명2

WHERE 테이블명1.속성명 = 테이블명2.속성명(+);

 

⑶ SELF JOIN : 같은 테이블에서 2개의 속성을 연결하여 EQUI JOIN을 하는 JOIN 방법

 

 

6. Nested Query [목차]

⑴ 표기 형식

 

SELECT select_list

FROM

(SELECT ··· ) AS alias

···

 

① AS 명령어 : 변수처럼 사용할 수 있게 함

② Nested Query에 alias가 반드시 있어야 함

③ "SUM(속성 1) / COUNT(속성 2)"와 같은 것도 변수처럼 지정할 수 있음

⑵ 다중 Nested Query 

 

SELECT ··· 

FROM (

SELECT ··· 속성 1, 속성 2 AS alias1 

FROM (

SELECT ···

FROM ··· 

WHERE ···

) AS alias2 

GROUP BY ···

ORDER BY ··· 

) AS alias3

GROUP BY ···

ORDER BY ···

 

⑶ WITH의 문법

 

WITH 이름 as (

SELECT ···

)

FROM ···

 

 

7. DCL(data control language) [목차]

유형 1. COMMIT

① 데이터베이스 조작 작업을 영구적으로 반영하여 완료

② "COMMIT;"과 같이 사용

유형 2. ROLLBACK

① 데이터베이스 조작 작업이 비정상적으로 종료되었을 때 원래의 상태로 복귀한다.

② "ROLLBACK;"과 같이 사용한다.

유형 3. GRANT : 데이터베이스 사용자에게 사용 권한을 부여한다.

유형 4. REVOKE : 데이터베이스 사용자의 사용 권한을 취소한다.

 

 

8. 사용자 등급 지정 및 해제 [목차]

⑴ 등급 부여 표기 형식

 

GRANT 사용자 등급 TO 사용자_ID_리스트 [IDENTIFIED BY 암호]

 

⑵ 등급 해제 표기 형식

 

REVOKE 사용자등급 FROM 사용자_ID_리스트

 

⑶ 사용자 등급 : DBA, RESOURCE, CONNECT가 있음

① DBA : 데이터베이스 관리자

② RESOURCE : 데이터베이스 생성 및 테이블 생성 가능자

③ CONNECT : 단순 사용자

 

 

9. 테이블 및 속성에 대한 권한 부여 및 취소 [목차]

⑴ 권한 부여

 

GRANT 권한_리스트 ON 개체 TO 사용자 [WITH GRANT OPTION]

 

⑵ 권한 철회

 

REVOKE [GRANT OPTION FOR] 권한_리스트 ON 개체 FROM 사용자 [CASCADE];

 

⑶ 권한 종류 : ALL, SELECT, INSERT, DELETE, UPDATE, ALTER 등

⑷ WITH GRANT OPTION : 부여받은 권한을 다른 사용자에게 다시 부여할 수 있는 권한을 부여한다.

⑸ GRANT OPTION FOR : 다른 사용자에게 권한을 부여할 수 있는 권한을 취소한다.

⑹ CASCADE : 권한 취소시 권한을 부여받았던 사용자가 다른 사용자에게 부여한 권한도 연쇄적으로 취소한다.

① 트리거 연산

 

 

10. CREATE INDEX [목차]

⑴ 인덱스는 검색을 빠르게 하기 위해 만든 보조적인 데이터 구조

⑵ 표기 형식

 

CREATE [UNIQUE] INDEX <인덱스명>

ON 테이블명 ({속성명 [ASC | DESC][, 속성명[ASC | DESC]]})

[CLUSTER];

 

⑶ CLUSTER : 지정된 키에 따라 튜플들을 그룹으로 저장하기 위해 사용

 

 

11. CREATE VIEW [목차]

⑴ 표기 형식

 

CREATE VIEW 뷰명 [(속성명[, 속성명, ...])]

AS SELECT문

[WITH CHECK OPTION];

 

⑵ AS SELECT문 : 일반 SELECT문과 같으며, UNION이다 ORDER BY를 사용할 수 없다.

⑶ WITH CHECK OPTION : 뷰에 대한 갱신이나 삽입 연산이 실행될 때 뷰의 정의 조건을 위배하면 실행을 거부한다.

⑷ 속성명을 기술하지 않으면, SELECT 문의 속성명이 자동으로 뷰의 속성명이 된다.

 

 

12. DROP VIEW [목차]

⑴ 표기형식

 

DROP VIEW 뷰명 {RESTRICT | CASCADE};

 

⑵ RESTRICT : 뷰를 다른 곳에서 참조하고 있으면 제거가 취소된다.

⑶ CASCADE : 뷰를 참조하는 다른 뷰나 제약조건까지 모두 제거된다.

① 트리거 연산

 

 

13. 내장 SQL [목차]

⑴ 내장 SQL은 응용프로그램이 실행될 때 함께 실행되도록 호스트 프로그램 언어에 삽입한 SQL이다.

내장 SQL의 특징

내장 SQL문은 실행 결과가 여러 개의 튜플이어도 맨 처음의 튜플 하나만을 반환한다.

내장 SQL문에 의해 반환되는 튜플은 일반 변수를 사용하여 저장할 수 있다.

내장 SQL문은 호스트 프로그램을 컴파일할 때 선행 처리기에 의해 분리되어 컴파일된다.

호스트 프로그램 변수와 데이터베이스 필드의 이름은 같아도 된다.

내장 SQL문이 실행되면 SQL 실행 상태가 SQL 상태 변수에 전달된다.

내장 SQL과 호스트 언어의 실행문 구별

① 명령문의 구분

○ C/C++에서 내장 SQL문은 "EXEC SQL"과 세미콜론(;) 문자 사이에 기술한다.

○ 자바에서는 다음과 같은 형식으로 사용한다.

#SQL{<내장 SQL문>};

② 변수의 구분

○ 내장 SQL문에서 사용하는 호스트 변수는 변수 앞에 콜론(:) 문자를 붙인다.

○ 호스트 언어 내에서 호스트 변수는 콜론(:) 없이 그대로 사용한다.

③ 내장 SQL 문 예시

 

EXEC SQL SELECT [테이블명1.]속성명, [테이블명2.]속성명, ...

INTO :변수1, :변수2, ...

FROM 테이블명1, 테이블명2, ...

WHERE (조건);

 

 

14. 커서(Cursor) [목차]

⑴ 커서는 내장 SQL문의 실행 결과로 반환된 복수 개의 튜플들을 접근할 수 있도록 해주는 개념이다.

⑵ 커서를 사용하여 질의 결과로 반환된 튜플들을 한 번에 하나씩 차례로 처리할 수 있다.

⑶ 커서 관련 명령어

① DECLARE : 커서를 정의하는 등 커서와 관련된 선언을 하는 명령어

② OPEN : 커서가 질의 결과의 첫 번째 튜플을 가리키도록 설정하는 명령어

③ FETCH : 질의 결과에 대한 튜플들 중 현재의 다음 튜플로 커서를 이동시키는 명령어

 

EXEC SQL FETCH cur_pointer INTO :storage;

// 읽은 값을 호스트 변수 :storage에 저장하고 다음 튜플로 이동한다.

 

④ CLOSE : 질의 실행 결과에 대한 처리 종료 시 커서를 닫기 위해 사용하는 명령어

 

 

15. 스토어드 프로시저(Stored Procedure) [목차]

⑴ 스토어드 프로시저의 개념

① 프로시저 : 특정 작업을 수행하는 SQL문을 논리적으로 모듈화한 것

② 스토어드 프로시저 : 몇몇 프로시저들을 미리 컴파일해서 저장해 놓은 것

③ 구성 : 선언부, 실행부, 예외 처리부

⑵ 스토어드 프로시저의 장점

① 모듈별 프로그래밍 허용 : 반복 사용, 원본코드와 관계없이 수정 가능

② 빠른 SQL 실행 시간 : 최적화 가능, 캐시 메모리에 저장

③ 보안성 향상 : 사용자에 대한 데이터베이스 접근 권한 제한

④ 네트워크 통신량 감소

⑶ 스토어드 프로시저의 생성

① 표기 형식

 

CREATE [OR REPLACE] PROCEDURE 프로시저명 (파라미터)

[지역변수 선언]

프로시저 BODY;

 

② OR REPLACE : 동일한 이름의 스토어드 프로시저가 존재할 시 대체 가능

③ 파라미터

○ IN : 호출되는 스토어드 프로시저에 값을 전달받는 변수

○ OUT : 스토어드 프로시저가 값을 반환시 이용하는 변수

○ INOUT

④ 프로시저 BODY : BEGIN으로 시작해 END로 끝냄, 변수에 값을 치환할 때 예약어 SET을 사용함

⑷ 스토어드 프로시저 제거

 

DROP PROCEDURE 프로시저명;

 

⑸ 스토어드 프로시저 실행

 

EXECUTE 프로시저명;

또는 EXEC 프로시저명;

 

입력: 2017.10.02 22:06

수정: 2024.02.27 14:46