구조적 쿼리언어 (SQL: Structured Query Language)
관계형 데이터베이스에 정보를 저장하고 처리하기 위한 프로그래밍 언어입니다. 관계형 데이터베이스는 정보를 표 형식으로 저장하며, 행과 열은 다양한 데이터 속상과 데이터 값 간의 다양한 관계를 나타냅니다.
특징
- 비절차적 언어
- 관계 DB의 표준 언어
- 관계 대수와 관계 해석에 기반한 혼합 언어
- 데이터 정의(DDL), 조작(DML), 제어(DCL) 기능을 모두 갖춘 언어
- 대화식 질의어로 사용 가능
- 다른 프로그램 언어(COBOL, PL/1, C, PASCAL)에 삽입된 형태로 사용 가능
SQL에서 사용하는 테이블의 종류
- 기본 테이블(Base Table): CREATE by DDL, 독립적으로 존재, 테이블명을 기록해야함
- 뷰 테이블(View Table): CREATE by DDL, 기본 테이블에서 유도된 가상 테이블
- 임시 테이블(Temporary Table): Make by DML, 질의 처리 과정에서 임시적으로 만들어지는 테이블
※ Select 쿼리 실행 순서
뷰(View)
View에 대해서
-
View의 의미는 하나의 select문과 같다. 물론 뷰를 통해 insert, update, delete가 가능하지만 대개의 경우는 select를 위해 사용한다. View란 한 개 이상의 기본 테이블이나 다른 뷰를 이용하여 생성되는 가상 테이블(virtual table)이다.
-
View는 기존에 생성된 테이블 또는 다른 View에서 접근할 수 있는 전체 데이터 중에서 일부만 접근할 수 있도록 제한하기 위한 기법이다.
장점
- 논리적 데이터 독립성을 제공
- 동일 데이터에 대해 동시에 여러 사용자의 상이한 응용이나 요구를 지원
- 사용자의 데이터관리를 간단하게 함
- 접근 제어를 통한 자동 보안이 제공됨
단점
- 독립적인 인덱스를 가질 수 없다
- ALTER VIEW문을 사용할 수 없다. 즉 View의 정의를 변경할 수 없다.
- View로 구성된 내용에 대한 삽입, 삭제, 갱신, 연산에 제약이 따른다.
서브쿼리(Subquery)
조인(JOIN)
두 개 이상의 테이블이나 데이터베이스를 연결하여 데이터를 검색하는 방법입이다. 테이블을 연결하려면, 적어도 하나의 Attribute를 서로 공유하고 있어야 합니다.
종류
※ 예시를 돕기위한 A,B 테이블
- INNER JOIN
- 교집합으로, 기준 테이블과 join 테이블의 중복된 값을 보여줌
- LEFT OUTER JOIN
- INNER JOIN 결과를 구한 후, 우측 릴레이션의 어떤 튜플과도 맞지 않는 좌측 릴레이션의 튜플들에 NULL값을 붙인다.
- LEFT에 있는거만(A-B)를 원할 경우: WHERE B.ID IS NULL 붙임
- RIGHT OUTER JOIN
- LEFT OUTER JOIN과 반대로 우측 릴레이션의 튜플에 NULL을 붙인다.
- 마찬가지로 (B-A) 원할 경우: WHERE A.ID IS NULL 추가
- FULL OUTER JOIN
- LEFT OUTER JOIN + RIGHT OUTER JOIN
- 우측 릴레이션에 NULL 추가 후 좌측 릴레이션에 NULL 추가
- 교집합 부분을 빼기 위해: WHERE A.ID IS NULL or B.ID IS NULL
- CROSS JOIN
- 조인 테이블에 있는 튜플들의 순서쌍을 반환한다.
- 결과 행의 수: A테이블, B테이블의 행 수를 곱한 것과 같다.
- 카르테시안 곱과 같은 연산.
- SELF JOIN
- 동일 테이블에서 2개의 속성을 연결해 EQUI JOIN하는 것
- FROM 절에 동일 테이블이 2번 이상 나타나므로 컬럼 이름이 모두 동일해서 반드시 테이블 별칭(Alias)를 사용해야함
- 컬럼에도 테이블 별칭을 이용해 어느 테이블의 컬럼인지 식별해줘야 함
[참고]
https://pearlluck.tistory.com/46