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 |