본문 바로가기
컴퓨터공학/데이터베이스

데이터의 검색(query) - 1 기초편

by 유리병 2022. 8. 1.

SQL Query의 결과는 relation형태로 나온다.

 

기본적인 형식은 다음과 같다

select A1,A2,....,An		//이 속성들을 추출
from r1,r2,...,rn		//이 table에서 추출
where ~~			//이 조건에 맞는 튜플을 추출

from부에 명시된 table들에서 where조건에 맞는 tuple들의 select의 속성들을 결과로 도출한다. 

select부

select부를 통해 추출하고자 하는 속성을 결정할 수 있다.

 

 

 

all, distinct

SQL은 기본적으로 중복을 제거하지 않는다. 

중복을 명시하고자 하는 경우 all을 제거하고자 하는 경우 distinct를 추가한다. 

select all A1,...,An
select distinct A1,...,An

 

*

모든 속성을 보고싶을 경우 '*'을 사용한다

select *
from student;

 

as

속성의 이름을 다른 이름으로 표기하고자 할 때 as를 사용한다. 

select A1 as 이름
from student;

 

select 'A'
from instructor

강사 수만큼 A를 출력

 

+,-,*,/

select 내의 속성에 연산자 적용이 가능하다. 

select name, salary/12
from instructor;

위와 같이 연봉을 12로 나눈 월급을 계산할 수도 있다.

이를 as로 다음과 같이 수정할 수 있다.

select name, salary/12 as monthly_pay
from instructor

 

 

where부

where부를 통해 조건을 만족하는 tuple만을 추출할 수 있다.

 

string operator

: 문자열 검색

select name
from instructor
where name like '%ar%'

이름에 ar을 포함하는 튜플들을 추출한다. 

'%ar%': ar앞뒤로 어떤 문자가 와도 상관 없음을 의미한다. 

'%ar': ar앞에 어떤 문자가 와도 상관 없으나, ar로 끝나는 튜플을 검색한다.

'ar%': ar뒤에 어떤 문자가 와도 상관 없으나, ar로 시작하는 튜플을 검색한다.

'ar': 이름이 정확히 ar인 튜플을 검색한다.

 

: 글자수 검색

select name
from instructor
where name like '_ _ _';	//시각적 편의를 위해 띄어쓰기를 추가.

'___': 이름이 정확히 3 글자인 튜플을 검색

'%___' or '___%' or '%___%' : 최소 3글자 이상인 튜플을 검색

 

단순히 %나 _를 검색하고 싶을 경우 앞에 \을 붙여준다. 

 

between

select name
from instructor
where salary between 9000 and 10000   // (where salary>=9000 and salary<=10000)

 

tuple들의 비교

where (instructor.id,dept_name)=(teaches.id,'Biology')

instructor.id=teaches.id이고, dept_name='Biology'인 경우 추출

 

 

 

 

from부

from부를 통해 어느 테이블에서 데이터들을 추출할 지를 선택할 수 있다.

from부에 두 개 이상의 테이블이 올 경우 두 테이블을 cartesian product한다. 

 

 

as

table명을 as를 통해 다른 이름으로 접근할 수 있다.

select T.name
from instructor as T, instructor as S
where T.salary>S.salary and S.dept_name='comp.sci'

위와 같은 sql문을 통해 instructor 테이블을 T와 S로 접근할 수 있다.

 

self join

자기 자신과의 join 역시 가능하다. 

as에서의 예시가 self join의 예시에 해당한다

 

 

order by

선택한 속성을 기준으로 오름차/내림차순으로 정렬이 가능하다. 

 

문장의 맨 마지막에 적으며, 여러 속성으로 order by 한 경우, 먼저 선언한 속성을 비교 후 해당 속성이 같을 경우 다음 선언된 속성을 기준으로 정렬한다. 

 

select name
from instructor
where salary>9000
order by name desc

default값은 오름차순이다. 

asc: 오름차순

desc: 내림차순

 

set operation

union: 합집합

intersect: 교집합

except: 차집합

(select course_id from section where sem='Fall' and year=2017)
union
(select course_id from section where sem='Spring' and year=2018)

위와 같이 작성 가능하다. 

all과 distinct도 선택 가능하며 default값은 distinct이다. 

ex) intersect all 혹은 except distinct 역시 가능

 

 

null

null에 어떤 연산자를 취해도 그 결과는 null이 된다. 

ex) null+5=null

ex) null>5=null

ex) null<>nulll=null

 

null은 false로 취급한다. 

 

is null

is not null

해당 속성이 null인/null이 아닌 튜플들을 추출할 수 있다.

where salary is null
where salary is not null

 

limit - 상위 n개 튜플 추출

SELECT NAME
FROM ANIMAL_INS
ORDER BY DATETIME
LIMIT 1

위와 같이 limit n을 작성함으로써 상위 n개의 튜플만 추출할 수 있다.

'컴퓨터공학 > 데이터베이스' 카테고리의 다른 글

데이터의 검색(query) - 2 중급편  (0) 2022.08.01
테이블 생성 및 업데이트  (0) 2022.08.01