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 문의 속성명이 자동으로 뷰의 속성명이 된다.
⑴ 표기형식
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
'▶ 자연과학 > ▷ 데이터베이스∙빅데이터분석기사' 카테고리의 다른 글
【빅데이터분석기사】 2023년 하반기 빅데이터분석기사 실기 문제 (0) | 2023.12.02 |
---|---|
【데이터베이스】 데이터베이스 목차 (0) | 2023.09.18 |
【데이터베이스】 10강. 기타 데이터베이스 (0) | 2017.10.03 |
【데이터베이스】 11강. 빅데이터분석기사 (0) | 2017.10.02 |
【데이터베이스】 3-1강. 정규화 (0) | 2017.10.02 |
최근댓글