SQL의 기본 질의문(Query)
데이터베이스로부터 정보를 검색/조회하는 명령이다. 기본적인 질의 문은 3개의 절(Clause) Select, From, Where로 구성된다.
테이블의 별명(Alias)
테이블 명이 너무 길 때 표시하기가 불편하기 때문에 별명(alias)을 사용한다. 서로 다른 테이블이 동일한 속성 명을 가질 수 있다.
뷰(view)
SQL에서 뷰는 다른 테이블들에서 유도되는 가상 테이블이다.
SQL에서 기본 질의
기본 질의 문
- SQL은 데이터베이스로부터 정보를 검색하는 문장을 가짐
- 질의 문(Query Statement)은 다음 3개의 절(Clause)로 구성됨
- Select (attribute list)
- From (table list)
- Where (condition)
- Where절에 조인 조건을 기술할 수 있음
- 관계 대수와 SQL의 중요한 차이점
- 관계 대수의 결과 릴레이션은 일종의 집합이기 때문에 중복 투플을 가질 수 없지만
- SQL의 결과 테이블은 중복 투플을 가질 수 있음
- 중복 투플을 가질 수 있기 때문에 집합이 아니라 다중집합(Multi-set 또는 bag) 임
- DISTINCT 를 사용하여 중복을 제거할 수 있음
alias, *, DISTINCT, WHERE 절의 생략
- (테이블 명).(속성 명) : 서로 다른 테이블이 동일한 속성 명을 가질 수 있음, 이 경우 테이블 명과 함께 속성 명을 사용함으로써 모호함을 방지해야 함
- 테이블 명이 너무 길 때 표시하기가 불편하기 때문에 별명(alias)을 사용함, (테이블명).(속성 명) 대신 (별명).(속성 명)을 사용할 수 있음
- SELECT 절에서 * 을 사용하면 결과 테이블에 모든 속성들을 표시함
- 결과 테이블에서 중복된 투플을 제거하고자 할 때는 SELECT절에서 DISTINCT 를 사용하면 됨
- WHERE 절을 생략하면 투플 선택에 대한 조건이 없다는 것을 의미함, 즉, FROM 절에 있는 테이블의 모든 투플이 선택됨
질의 문의 집합 연산
- SQL은 일부 집합 연산들을 수용함
- SQL에서는 합집합(UNION) 연산, 차집합(EXCEPT) 연산, 교집합(INTERSECT) 연산을 제공함
- 테이블에 대한 집합 연산의 결과는 투플들의 집합임, 즉, 중복된 투플은 결과에서 제거됨
- 집합 연산들은 합집합 호환성을 갖는 테이블에만 적용, 즉, 두 개의 테이블은 동일한 속성들을 가지며 이 속성들은 같은 순서로 나타나야 함
중첩 질의(Nested Query)
- 질의는 중첩될 수 있음
- 보통 Where절에 또 다른 완전한 조회문이 올 수 있음
- IN, NOT IN, EXISTS, NOT EXISTS, ANY, ALL 등의 연산 키워드가 있음
- From 절도 중첩 질의를 포함할 수 있음
SQL 질의에서의 NULL
- NULL 은 알려지지 않는 값, 이용할 수 없는 값, 적용할 수 없는 값을 의미
- 속성 값이 NULL 인지 검사하는 연산들이 있음,IS 또는 IS NOT 을 사용
조인 조건의 또 다른 형태
- 보통 Where 절에 조인조건을 명시함
- 새로운 SQL 표준에서는 From 절에 명시하는 형태를 제안, 또한 여러 가지 유형의 조인을 명시할 수 있도록 함
- JOIN, NATURAL JOIN, LEFT OUTER JOIN, RIGHT OUTER JOIN, CROSS JOIN
집단 함수(Aggregate Function)
- SQL에서는 COUNT, SUM, MAX, MIN, AVG 등을 포함
그룹화
- 많은 경우에, 테이블 내에 있는 투플들을 그룹화 속성을 기준으로 여러 그룹으로 나눌 수 있음
- 각 그룹 별로 독립적으로 집단 함수들을 적용할 수 있음
- SQL은 SELECT 절에 나타나는 속성들 중에서 그룹화 속성을 GROUP BY절에 명시하도록 함
그룹 조건을 명시하는 Having
- 때때로 어떤 조건들을 만족하는 그룹들에 대해서만 집단함수들을 적용하기도 함
- HAVING절은 집단함수를 적용할 그룹들을 선택하는 데 사용됨
- LIKE 비교 연산자는 문자열의 일부에 대해 비교 조건을 명시
- 부분 문자열은 두 개의 예약 문자를 사용
- ‘%’(또는 ‘*’)은 0보다 큰 임의 개수의 문자로 대체
- ‘-’는 임의의 한 개 문자로 대체
Order By 절
- ORDER BY 절은 하나 이상의 속성을 기준으로 결과 투플들을 정렬할 수 있음
- 디폴트 정렬 순서는 오름차순임
- 내림차순으로 정렬하고자 한다면 키워드 DESC로 지정
- 키워드 ASC 는 오름차순 정렬을 명시적으로 지정할 때 사용함
SQL에서 삽입, 삭제, 갱신문
삽입 문(Insert)
- 테이블에 투플을 추가하는 데 사용
- 속성 값들의 순서는 CREATE TABLE 명령에서 명시한 속성들의 순서와 같아야 함
- 질의로 검색되는 결과를 삽입할 수도 있음
삭제 문(Delete)
- 릴레이션에서 투플들을 제거하는 명령
- 삭제할 투플들의 조건을 나타내는 WHERE절을 포함함
- 한 번에 한 테이블 내의 투플들만 삭제함
- WHERE 절을 생략한 경우에는 테이블 내의 모든 투플을 삭제하고 테이블은 빈 테이블로 남게 됨
갱신 문(Update)
- 투플의 속성 값을 수정하기 위해 사용
- WHERE 절은 테이블에서 수정할 투플들을 선택하는데 사용됨
- SET 절은 변경할 속성과 그들의 새로운 값을 명시함
- UPDATE 명령은 같은 테이블 내에서 여러 투플을 수정할 수 있음
SQL에서 뷰의 구성
뷰의 개념
- SQL에서 뷰는 다른 테이블들에서 유도되는 가상 테이블
- 뷰에 적용할 수 있는 갱신 연산들은 제한되지만 질의 연산은 아무런 제한을 받지 않음
- 물리적으로 존재하지 않더라도 자주 참조할 필요가 있는 테이블을 명시하는 한 가지 방법
- 다수의 테이블을 조인하는 질의를 사용하는 대신에, 자주 검색하고자 하는 속성들을 포함하고 있는 조인의 결과를 미리 뷰로 정의할 수 있음
- 그러면 다수의 테이블을 조인하는 질의 대신에 뷰로 구성된 하나의 테이블을 검색함으로써 원하는 속성을 검색할 수 있음
뷰의 명시
- 뷰를 정의하는 명령 : CREATE VIEW
- 뷰의 정의는
- 뷰 이름
- 속성 이름의 리스트
- 뷰의 내용을 나타내는 질의 로 구성됨
- 뷰의 주요 장점은 질의들을 간단하게 작성할 수 있다는 것
- 뷰는 항상 최신 정보를 반영해야 하므로 만약, 뷰의 정의에 사용된 테이블이 수정되면 뷰는 자동적으로 변경사항들을 반영해야 함
- 따라서 뷰는 뷰의 정의 시점이 아니라 뷰에 대해 질의를 할 때 구체화 됨
- 뷰를 최신 정보로 유지하는 것은 사용자가 아니라 DBMS의 책임
- 어떤 뷰가 더 이상 필요하지 않으면 DROP VIEW를 사용하여 뷰를 제거함