목차
- Select
- select 절
- where 절
- from 절
- 실행 모델
- 조인
- 자연 조인
- 재명명 연산
- 스트링 연산
- order by 집합 연산
- Null 값
- +) 연습문제
1. Select
주어진 조건에 적합한 데이터를 검색하여 반환
6개의 절을 가질 수 있음
select 절과 from 절은 생략 불가능
나머지 절들은 반드시 위의 순서를 지켜야 함
- select A1, A2, …, An
- from R1, R2, …, Rn
- where P
- group by <grouping attributes>
- having <conditions>
- order by <ordering attributes>
select 문장의 결과는 관계이며 select 문장은 절의 구성요소로 나올 수 있음 (중첩 가능)
select 절
관계 대수의 투영 연산(Π)
select 절은 질의 결과에서 사용자가 보고 싶은 속성 리스트를 가짐
select 절에서는 DB 시스템이 제공하는 각종 함수 사용 가능 (sum, log 등)
-
- 기호: 모든 속성을 의미
- distinct 키워드: select 문장의 결과 테이블에 터플 중복을 허용하지 않음
- all 키워드: 중복 결과 허용 (기본 값)
Select distinct deptName
from professor;
where 절
관계 대수의 선택 조건(σ)
결과 터플이 만족하여야 하는 조건을 명시
논리연산자 사용 가능
- and
- or
- not
Select name
from professor
where deptName = 'CS' and salary > 8000;
where 절 연산자 between
Select name
from professor
where salary between 5000 and 6000;
from 절
관계 대수의 카티시안곱(×)
질의에 관련이 있는 테이블을 나열
Select *
from professor, teaches;
실행 모델
select 문장은 모두 6개의 절로 구성될 수 있음
- from 절에 명시된 각 테이블에서 한 개씩의 터플을 추출
- 이를 where 절에 명시되어 있는 조건에 적용
- 조건이 참인 터플을 group by 절로 보냄
- 같은 작업을 from 절에 명시된 테이블의 모든 터플에 적용
- group by 절에 명시된 속성을 이용하여 서브 그룹으로 나눔
- 각 서브 그룹에 대하여 having 조건을 적용
- 조건이 참인 서브 그룹에 대하여 order by 절을 적용
요약하자면 from → where → group by → having → order by
조인
SQL 문장에서 조인은 where 절에서 명시
Select name, cID
from professor, teaches
where professor.pID=teaches.pID
professor.pID와 teaches.pID 간 동등 조인
<, > 등을 사용하면 세타 조인도 가능함
자연 조인
Select *
from professor natural join teaches;
Select *
from professor, teaches
where professor.pID=teaches.pID;
두 문장은 같은 터플이 조인되지만
- 위의 문장은 professor.pID와 teaches.pID가 동일하므로 하나의 속성으로 나오지만 (자연 조인)
- 아래 문장은 professor.pID와 teaches.pID 속성이 각각 나온다 (카디티시안곱)
<aside> 📌 테이블에 대하여 자연 조인을 적용할 때에는 동일한 이름을 가진 속성으로 인하여 원하지 않는 조인 연산이 일어나지 않도록 주의하여야 함
</aside>
Select name, title
from (professor natural join teaches) join course using(cID);
using을 사용해 cID라는 속성에 대해서만 조인 속성으로 적용
재명명 연산
as 키워드 사용하여 재명명
as 키워드 생략 가능
Select sID, name myName, deptName
from student;
Select sID, name, myName, deptName
from student;
위의 문장은 name as myName으로 재명명한 것
아래의 문장은 myName이 student 테이블에 없는 속성이므로 잘못된 문장
Select distinct T.name
from professor as T, professor as S
where T.salary > S.salary and S.deptName = 'CS';
재명명 연산으로 professor 테이블을 두 개 사용하는 것과 같은 효과를 낼 수 있음
스트링 연산
like 연산자는 패턴을 활용하여 스트링에 대한 비교 연산을 제공
- %: 길이에 무관한 임의 스트링
- _: 임의의 한 문자
- \%: %를 문자 ‘%’로 인식하도록 함
데이터베이스 시스템은 다양한 형태의 스트링 연산을 제공
- 합성
- 대소문자 변환
- 스크링 길이
- 일부 스트링 추출 등
order by
터플 정렬 연산
다른 테이블이 생성되는 것은 아님
기본 값은 오름차순 (알파벳 순서)
desc 키워드를 추가하여 내림차순 변경
Select distinct name
from professor
order by deptName desc, name;
- deptName 값 기준으로 내림차순 1차 정렬
- 동일한 deptName 값에서는 name 속성으로 오름차순 정렬
집합 연산
- 합집합: 두 입력 테이블을 더함 (중복 무관)
- 교집합: 두 입력 테이블에서 적게 나오는 횟수만큼 결과 터플이 나옴
- 차집합
(select cID from teaches where semester = 'Fall' and year = 2009)
union
(select cID from teaches where semester = 'Fall' and year = 2010);
(select cID from teaches where semester = 'Fall' and year = 2009)
intersect
(select cID from teaches where semester = 'Fall' and year = 2010);
(select cID from teaches where semester = 'Fall' and year = 2009)
union
(select cID from teaches where semester = 'Fall' and year = 2010);
3. Null 값
터플의 속성 값으로 값이 존재하지 않는 null 값을 가질 수 있음
null ≠ “”
null = null + 5
null 값이 속한 비교 연산자의 결과는 → unknown
unknown를 포함한 AND, OR, NOR의 결과는 다음과 같음
- OR
- unknown or true = true
- unknown or false = unknown
- unknown or unknown = unknown
- AND
- true or unknown = unknown
- false and unknown = false
- unknown and unknown = unknown
- NOT
- not unknown = unknown
where 절 결과가 unknown일 경우 false와 같이 결과가 반환되지 않음
+) 연습문제
기호 모음: Π σ ⋈ ρ ×
'전공 > 데이터베이스' 카테고리의 다른 글
[데이터베이스] #6 SQL III (집계 함수, 조인 테이블) (0) | 2024.04.08 |
---|---|
[데이터베이스] #5 오라클 실습 (개념) (0) | 2024.04.08 |
[데이터베이스] #3 SQL I (데이터베이스 언어, DDL SQL) (0) | 2024.04.08 |
[데이터베이스] #2 관계형 데이터 모델 (0) | 2024.04.08 |
[데이터베이스] #1 데이터베이스 소개 (0) | 2024.04.08 |