Chapter 7 More SQL: Complex Queries, Triggers, Views, and Schema Modification
배울 내용
- Nested queries : 중첩 질의
- joined tables : 조인
- aggregate functions : 집계함수
- grouping : 그룹핑
학습에 앞서 Null이란
meanings of NULL
- unkown value : 알려지지 않은 값
- unavailable or withhold value : 이용할 수 없거나 보류된 값
- not applicated attribute : 적용할 수 없는 값
예로 집전화 같은 경우, 집전화 번호가 있는지 아니면 공개를 안하는 건지 적용할 수 없는 다른 값인지 알 수 없다는 것
comparisons involving null
조건 문에 null에 따른 연산 결과 표
checking attribute value is NULL
- IS or IS NOT NULL
값이 null인지 아닌지 확인 하는 명령어 아래는 예시
Nested Queries, Tuples, and Set/Multiset
Nested queries : 중첩질의
- Outer query(외부 질의) and nested subqueries(내부쿼리)로 이루어짐
예시)
순서는 subquery순으로 진행되며 3가지의 table이 join되는 상황
subqueries : project, department, employee 테이블의 attribute인 dnum=dnumber가 같고 mgr_ssn=ssn(매니저)이 같고 lname이 smith인 사람의 pnumber을 가져오거나
OR
works_on, employee 테이블에서 essn=ssn과 lname이 smith인 pno을 가져와
outer queries: distinct(중복없이) pnumber을 출력해 달라
튜플 형태의 경우 다음과 같이 구성
outer query에 해당되어 있는 내용이 subquery에 참조 되었을 때 correlated(상관 되었다고 표기)
예)
위를 아래와 같이 하나의 query로 표현할 수 있음
exists function
존재하는지 여부에 대해 확인, 출력값 True, False
예시) 자녀가 한명이라도 있는 매니져가 있는가?
unique
복사된 값이 없고 유니크한 값인지 확인
Joined table
테이블을 조인 할때 가장 중요한 것은 key이다 주로 외래키로 조인함
예) Dno가 Dnumber의 외래키이다. 이를 이용하여 EMPLOYEE, DEPARTMENT table을 조인한다.
join type
- inner join : default join
join 조건에서 동일한 값이 있는 행만 반환
- natural join : inner join의 하위 개념
두 테이블간의 join 조건에서 동일한 이름을 갖는 모든 칼럼들에 대해 join을 수행함
join이 되는 테이블의 데이터 도메인과 칼럼명 칼럼값이 동일해야 하는 제약조건이 있다. --> 따라서 on ~절이 없다!!!
칼럼 값이 같지 않으면 결과 출력이 안됨
- outer join
모듬 컬럼을 가져온다. 빈공간을 null로 채움
Aggregate function(집계함수)
built in aggregate function
다양한 집계를 위한 함수들이 DBMS에 내장되어 있음
- count, sum, max, min, avg
사용예시)
grouping
특정 나이대의 연봉, 어떤 부서가 돈을 제일 많이 버는지 등등 집계를 위한 그룹핑이 필요
예)
Dno(부서 번호)별로 묶어서, Dno, COUNT(*){EMPLOYEE의 row 수, 즉 고용자 수}, AVG(Salary)
즉 부서별 고용자 수와 평균 임금을 출력
having
추가적인 조건을 나타냄
개수가 2이상일 때만 출력
총합 예시 문제
각 부서의 고용자중 임금이 40000이 넘는 사람의 수를 카운트 하고 싶다. 조건으로 5명 이하는 출력하지 않을때 아래와 같이 SQL을 작성 할 수 있다.
여기서 오류는 임금이 40000 이상인 부분에서 이미 걸러지기 때문에 count(*)에서 문제가 발생한다
시험 끝나고 추가바람