728x90

# SQL의 내장 타입(data type)

char(n) : 사용자가 지정하는 길이 n을 갖는 고정 길이 문자열.

varchar(n) : 사용자가 지정하는 최대 길이 n을 갖는 가변 길이 문자열.

int : 정수(기계 종속적인 정수의 유한 부분 집합).

smallint : 작은 정수(정수 도메인 타입의 기계 종속적인 부분 집합.

numeric(p,d) : 사용자가 지정하는 정확도를 갖는 고정 소수점 수.

                    수는 p개의 숫자로 구성. p개의 숫자에서 d개는 소수점의 오른쪽에 있음.

real, double precision : 기계 종속적인 정확도를 가지는 이동 소수점 수와 기계 종속 수준 두 배의 정확도를 지닌 이동                                  소수점 수. 부동 소수점 표현.

float(n) : 적어도 n개의 숫자의 정확도를 가지는 이동 소수점 수.

 

 

# SQL 질의의 기본 구조

select  A1, A2, ..., An

from   r1, r2, ..., rm

where P

Ai : 속성

Ri : 릴레이션

P : 조건

- SQL 질의의 결과는 릴레이션

# select 절

- 질의의 결과 속성을 나열

- 관계 대수 연산 해당

- 대/소문자 구분하지 않음

- SQL 은 질의 결과에서 중복 허용

- 중복 제거 할 경우, select 뒤에 distinct 라는 키워드 삽입

- 모든 교수들의 소속 학과를 찾고 중복 제거

  select distinct dept_name

  from instructor

- 키워드 all : 중복 제거하지 않음 (default)

  select all dept_name

  from instructor

- 별표 “*”  select절에서 모든 속성

  select *

  from instructor

- The select 절은 상수나 투플들의 속성들에 적용되는 +, , *, / 연산자를 포함하는 산술적인 표현들을 사용

  select ID, name, salary/12

  from instructor

-> instructor 릴레이션에 아무런 변화 없음

 

# where 절

- where 절은 결과가 충족해야 하는 특정 조건 지정

- 관계 대수의 선택 연산에 해당

- 컴퓨터과학과에서 급여가 80000이 넘는 모든 교수의 이름을 구하라

  select name

  from instructor

  where dept_name = ‘Comp. Sci.' and salary > 80000

- 논리적인 접속사 and, or, not 사용 가능

- 비교 연산자 <, <=, >, >=, =, <> 사용가능

 

# from 절

- from 절에 질의를 수행하기 위해 접근해야하는 릴레이션들 나열

- 관계 대수 카티션 곱 연산

- instructor X teaches 의 카티션 곱

  select *

  from instructor, teaches

=> 모든 instructor  teaches 투플들 결합

- 카티션 곱은 적합하지 않지만 where절 조건에서 사용됨 (관계 대수 선택 연산)

 

# 조인

- 대학 내에 있는 수업을 하는 모든 교수에 대해, 그들의 이름과 그들이 가르치는 수업 아이디를 구하라

  select name, course_id

  from instructor, teaches

  where instructor.ID = teaches.ID

 

- 컴퓨터과학과에서 제공하는 각 교과목의 course ID, semester, year, title를 구하라

  select section.course_id, semester, year, title

  from section, course

  where section.course_id = course.course_id and dept_name = ‘Comp. Sci.'

 

# 자연 조인

- 자연 조인은 두 릴레이션의 스키마에서 나타나는 속성의 값이 같은 투플의 짝만을 고려함. 공통인 속성이 먼저 나열.

  select *

  from instructor natural join teaches

- 자연 조인의 위험 : 속성을 잘못 동일시함

- 모든 교수들의 이름과 그들이 가르치는 수업의 제목을 나열하라

- 잘못된 버전(course.dept_name instructor.dept_name 속성을 동일시함)

  select name, title

  from instructor natural join teaches natural join course

- 옳은 버전

  select name, title

  from instructor natural join teaches, course

  where teaches.course_id= course.course_id

- Join using 명령 : 속성 이름들의 목록 필요

  select name, title

  from (instructor natural join teaches) join course using(course_id)

 

# Rename 연산 : as

- SQL은 결과 릴레이션에서 속성의 이름을 재명명할 수 있음 :

  old-name as new-name

  select ID, name, salary/12 as monthly_salary

  from instructor

- 적어도 컴퓨터과학과 한 교수보다 급여가 많은 모든 교수들의 이름을 구하여라.

  select distinct T. name

  from instructor as T, instructor as S

  where T.salary > S.salary and S.dept_name = ‘Comp. Sci.’

- 키워드 as 는 생략 가능

  instructor as T => instructor T

 

# 문자열 연산

- SQL은 문자열 비교를 위한 문자열 일치 연산자 포함.

- 연산자 like는 두 개의 특수 문자를 사용하여 나타냄 :

  퍼센트 (%) : % 문자는 어떠한 부분 문자열과도 일치한다.

  밑줄 (_) : _ 문자는 어떠한 한 문자와도 일치한다.

- 이름에 “zar”이라는 부분 문자열이 포함 된 교수의 이름을 구하여라

  select name

  from instructor

  where name like '%zar%’

- Escape 키워드 이용하여 “100 %” 문자열 찾기

  like ‘100 \%(escape \)

- SQL은 다양한 문자열 연산 지원

  문자열 병합 (using “||”)

  대문자, 소문자로 변환하기

  문자열 길이 찾기, 부분 문자열 추출, 문자열 끝의 공백 제거

 

# 투플 출력의 순서 : order by

- 모든 교수들을 알파벳 순서로 나열

  select distinct name

  from instructor

  order by name

- 내림차순은 desc, 오름차순은 asc(default)

  order by name desc

- 여러 속성 정렬 가능

  order by dept_name, name

 

# between 비교 연산자

급여가 $90,000$100,000 사이에 있는 교수들의 이름

(>= $90,000 and <= $100,000)

select name

from instructor

where salary between 90000 and 100000

 

# 집합 연산 : 중복 제거

union : or (또는)

intersect : and (모두 만족하는)

except : but not (차집합)

 

# 널 값 값 아님. symbol

- 투플은 특정 속성에 대해 null 값 가질 수 있음

- null 은 알 수 없는 값을 나타내거나 값이 존재하지 않음을 의미

- null 과 관련된 수학 연산식의 결과는 null

: 5 + null null

- is null 은 널 값인지 확인

: 급여가 null인 모든 교수들을 찾아라.

select name

from instructor

where salary is null

 

# Unknown

- null 값을 포함하는 비교의 결과를 unknown 으로 처리

: 5 < null or null <> null or null = null

- unknown 값 부울 연산 :

OR :

(unknown or true) = true,

(unknown or false) = unknown

(unknown or unknown) = unknown

 

AND :

(true and unknown) = unknown,

(false and unknown) = false,

(unknown and unknown) = unknown

 

NOT :

(not unknown) = unknown

 

“P is unknown” Punknown으로 판명되면 true

- where 절의 투플에 대한 값이 false unknown으로 판명되면,

그 투플은 결과에 포함하지 않는다.

 

# 집계 함수

- 릴레이션 열의 값의 다중집합을 입력 값으로 가지며, 결과값으로는 단일 값을 가짐

avg : 평균

min : 최소값

max : 최대값

sum : 총합

count : 개수

group by : 각 학과별 평균 급여를 구하라

select dept_name, avg (salary) as avg_salary

from instructor

group by dept_name;

집계되지 않고 select 절에 나타나는 속성은 오직 group by절의 속성

having 절 : 각각의 그룹에 대해 적용됨

평균 급여가 얼마 이상인 학과의 교수들의 평균 급여를 구하라

select dept_name, avg (salary)

from instructor

group by dept_name

having avg (salary) > 42000;

 

# 널 값과 부울 값과의 집계

- count(*)를 제외한 집계 함수는 입력 값에서 null 값 무시

- 빈 집합이 적용되었을 때

  count0으로 정의

  모든 집계 함수들은 null 값 반환

반응형

'전공 공부 > 데이터베이스시스템' 카테고리의 다른 글

집합 비교  (0) 2020.12.31
중첩 하위 질의  (0) 2020.12.31
관계 연산자  (0) 2020.12.31
키(Key)  (0) 2020.12.31
데이터베이스시스템의 역사  (0) 2020.12.30
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기