📜 Rename operation - AS
// select ID, name, salary/12 from instructor
// arithmetic operation을 실행한 attribute는 이름이 없음
select ID, name, salary/12 as monthly_salary from instructor
📜 String operation - like
select name from instructor where name like '%dar%'
// name 문자열에 dar이 포함된 튜플을 찾아 name만 반환 (앞뒤로 어떤 문자열이 와도 상관 X)
select name from instructor where name like '100\%' escape '\'
// '\'을 escape문자로 지정하여 %가 특수 문자가 아닌 실제 '%'로 인식되도록 조정
select name from instructor where name like '___%'
// name 문자열이 최소 3글자 이상인 튜플을 찾아 name만 반환
- 문자열 연산은 대소문자를 구분한다.```
코드를 입력하세요- concatenation 지원 (||) ``` sql select * from student where dept_name = 'Comp.' || ' Sci.'; // dept_name이 'Comp. Sci'인 학생들을 전부 반환 // OR가 아님에 유의, 진짜 or를 쓰려면 ||가 아닌 or를 써야 함.
- 대소문자 변경가능 (UPPER, LOWER), 길이(LENGTH()), 문자열 추출(SUBSTRING)
📜 Ordering
select name from instructor order by name
select name from instructor order by name desc
select dept_name, name from instructor order by dept_name desc, name
// dept_name은 내림차순으로 배열, 같은 dept_name에 대해서만 name은 오름차순으로 배열
📜 Set Operations
(select course_id from section where sem = ‘Fall’ and year = 2009)
union
(select course_id from section where sem = ‘Spring’ and year = 2010)
(select course_id from section where sem = ‘Fall’ and year = 2009)
intersect
(select course_id from section where sem = ‘Spring’ and year = 2010)
(select course_id from section where sem = ‘Fall’ and year = 2009)
except
(select course_id from section where sem = ‘Spring’ and year = 2010)
합집합, 교집합, 차집합 연산할 때는 union, intersect, except를 사용
위의 연산은 set operation이므로 중복을 허용하지 않음. 중복을 허용하게 하고 싶을 때는 뒤에 all을 붙여 union all, intersect all, except all을 사용
📜 Null
tuple들은 null 값을 가질 수 있으며, unknown value나 값이 존재하지 않음을 지칭할 때 사용한다.
null 값과의 arithmetic operation은 무조건 null을 반환한다.
null 값과의 비교도 무조건 unknown을 반환한다.
null 값과의 논리연산은 연산에 따라 다른데,
- AND
- true AND unknown => unknown
- false AND unknown => false
- unknown AND unknown => unknown
- OR
- true OR unknown => true
- false OR unknown => unknown
- unknown OR unknown => unknown
- NOT
- NOT unknown = > unknown
where로 나온 논리 연산 값이 unknown일때, where는 이를 false로 인식한다.
is null로 null임을 체크할 수 있다.
📜 Aggregate Functions
- avg : 평균을 반환
예시)
select avg(salary) from instructor where dept_name='Comp. Sci'
// dept_name = 'Comp. Sci'인 instructor의 salary를 찾아 평균을 반환
select count(distinct ID) from course where semester='Spring' and year=2014
// semester = 'Spring'이고 year=2014인 course를 찾아 count(중복 허용 X)
select count(*) from course
// course의 전체 row를 세서 반환
- group by : 열의 값을 기준으로 결과행을 그룹으로 분리하도록 지정함.
select dept_name, avg(salary) from instructor group by dept_name // dept_name을 기준으로 나누어 각각의 salary 평균값을 구한후 결과 출력
- group by를 쓸 때는 aggregate function이 쓰이지 않은 모든 attribute를 group by 해주어야 함.
select dept_name, ID, avg(salary) from instructor group by dept_name, ID;
- having : group by로 그룹화 한 후의 where 문과 동일하다.
select dept_name, avg(salary) from instructor group by dept_name having avg(salary) > 42000; // dept_name을 기준으로 나누어 각각의 salary 평균값을 구한후, avg(salary)값이 42000을 넘는 튜플만 출력
📜 Nested Subqueries
// section의 튜플 등 중 semester='Fall', year='2009' 이면서 semester='Spring', year= 2010인 것을 출력(intersection과 동일)
select distinct course_id
from section
where semester='Fall' and year=2009
and course_id in
(select course_id from section where semester ='Spring' and year = 2010)
// in 뒤의 query의 결과를 바탕으로 바깥 쿼리 결과 도출후 in 연산(intersection) 실행