SELECT [ALL | DISTINCT] 속성_리스트
FROM 테이블 리스트;
select name
from instructor
조건식 사용
논리 연산자 사용 가능: and, or, not
비교 연산자 사용 가능: <, <=, >, >=, =, <>(같지 않다)
수식 사용 가능
LIKE: 검색 조건 부분적으로 알 때 (정확히 알면 = 연산자)
%
0개 이상의 문자
LIKE '데이터%'
데이터로 시작하는 문자열LIKE '%데이터%'
데이터가 포함된 문자열_
1개의 문자
LIKE '데이터___'
데이터로 시작하는 6자 길이의 문자열SELECT [ALL | DISTINCT] 속성_리스트
FROM 테이블_리스트
[WHERE 조건];
select name
from instructor
where dept_name = 'Comp.Sci' and salary > 70000
select name
from instructor
where name LIKE '김%'
ASC: 오름차순 (디폴트)
DESC: 내림차순
여러 개의 속성으로 정렬 가능
SELECT [ALL | DISTINCT] 속성_리스트
FROM 테이블_리스트
[WHERE 조건]
[ORDER BY 속성_리스트 [ASC | DESC] ];
select distinct name
from instructor
order by dept_name, nane
SUM, AVG는 숫자 데이터 타입 속성에만 적용
나머지는 문자, 날짜, 숫자 데이터 타입 모두 가능
null인 속성 값 제외하고 계산
WHERE 절에서 사용 불가
SELECT, HAVING 절에만 사용 가능
select avg (salary)
from insturctor
where dept_name='Comp.Sci';
select count (*)
from course;
GROUP BY: 그룹을 나누는 기준이 되는 속성 지정
HAVING: 그룹에 대한 조건
WHERE와 구분하기
SELECT [ALL | DISTINCT] 속성_리스트
FROM 테이블_리스트
[WHERE 조건]
[GROUP BY 속성_리스트 [HAVING 조건] ]
[ORDER BY 속성_리스트 [ASC | DESC] ];
select dept_name, avg(salary) as avg_salary
from instructor
group by dept_name;
select name avg(salary) as avg_salary
from insturctor
group by dept_name
having avg (salary) > 42000;
두 릴레이션을 받아 하나의 릴레이션을 결과로 리턴한다
특정 튜플을 이어 붙인다
보통 from 절에서 서브 쿼리로 사용된다
inner join
outer join
SELECT 속성_리스트
FROM 테이블1 LEFT | RIGHT | FULL OUTER JOIN 테이블2 ON [조인조건]
[WHERE 검색조건]
course 테이블
prereq 테이블
course inner join prereq on
course.course_id = prereq.course_id
course left outer join prereq on
course.course_id - prereq.course_id
SELECT 문 안에 또 다른 SELECT문
부속 질의문은 괄호로 묶음
부속 질의문은 ORDER BY 절 사용 불가
상위 질의문보다 먼저 수행
결과의 개수에 따라 단일 행 서브 쿼리, 다중 행 서브 쿼리로 나뉨
일반 비교 연산자 사용 가능
하나의 행을 결과로 반환
일반 비교 연산자 사용 불가
여러 행을 결과로 반환
다중 행 서브 쿼리에 사용 가능한 연산자
IN
질의문의 결과 값 중 일치하는 것이 있으면 참
NOT IN
질의문의 결과 중 일치하는 것이 없으면 참
EXISTS
질의문의 결과 값이 하나라도 존재하면 참
NOT EXISTS
질의문의 결과 값이 하나도 존재하지 않으면 참
ALL
질의문의 결과 값 모두가 비교한 결과가 참이면 만족 (비교 연산자와 사용)
ANY
또는 SOME
질의문의 결과 값 중 하나라도 비교한 결과가 참이면 검색 결과 만족 (비교
연산자와 사용)
select course_id
from section as S
where semester = 'Fall' and year= 2017 and
exists (select *
from section as T
where semester='Spring' and year=2018
and S.course_id=T.course_id);
select dept_name,
(select count(*)
from instructor
where department.dept_name = instructor.dept_name)
as num_instructors
from department;
FROM and JOIN
WHERE
GROUP BY
HAVING
SELECT
ORDER BY
LIMIT