select course_idfrom sectionwhere semester = 'Fall' and course_id in (select course_idfrom sectionwhere semester = 'Spring');1. Table 생성
on delete cascade 는 referenced 되는 private key 가 사라졌을 때, 열 전체를 삭제한다는 옵션.
on delete set null 은 referenced 되는 private key 가 사라졌을 때, 그 부분을 null 로 채운다는 옵션.
2. 제거, 삭제
제거, 삽입, 변경 등에서 where 문 등에서 서브쿼리문이 나오면, 그 문을 모두 처리한 후 데이터를 수정한다.
3. 삽입, 변경
4. join
5. copy
6. where
1. like
where 문 등 bool 값이 필요할 때 사용.
% 는 정규식에서 [a-zA-Z]* 비슷하게 그냥 아무 스트링이 온다는 의미
_ 는 정규식에서 . 와 같은 의미
ecape 문자가 지원되어서 %, _ 를 \%ㅡ, \_ 를 이용해 표현가능
2. between
ㅈㄱㄴ
not 유무 가능
3. in
유사품 not in 도 있음
where 문 작성 시 다른 table 에 있거나 없는 원소인지 판단할 때 쓰임
집합 관련 연산으로도 처리가능하나 이게 더 간단함. 특히 임시로 만든 set 일 땐.
단 distinct 는 적용 안됨.
4. > from, > all
위의 in 과 비슷하다. some 이나 all 뒤에 오는 집합의 원소 중 하나라도 관계식이 해당되면 some, 모두 해당되어야하면 all 이다. > = < >= <= 모두 가능하다.
5. exists
not exists 도 있음.
집합이 존재하느냐에 따라 bool 값을 줌
이걸 잘 써먹으면 포함관계라던가 그런것도 표현가능함.
7. order by
위에서부터 오름차순이 asc 으로 디폴트 값이라 생략해도 된다.
적은 순서대로 우선순위가 적용된다.
8. 집합 계산
union, intersect, except 구문이 제공되며 기본적으로 중복된 행을 제거한다.
중복이 싫으면 union all 처럼 뒤에 all 을 적는다.
9. Aggregate Function
1. 잡 펑션
sum, count, avg 등 제공
where 절 등에서 내용이 비게 된 relation 에 대해서 func 을 수행해야할 경우
count 는 0, 나머지는 null 이 들어간 relation 을 만든다.
2. group by
같은 그룹으로 묶어서 개별적으로 aggregation 을 진행한다.
3. having
group by 가 나와야지만 사용할 수 있으며, 그것이 만든 그룹들에 대해서 where 과 비슷한 역할을 함.
사실 from 에 서브쿼리를 넣으면 having 을 대체할 수 있음
10. null, unknown
1. null
덧셈같은 수치계산에선 null 이 들어가면 무조건 null 이 나온다.
조건문에선 null 없이 결과를 알 수 있으면 예를 들어 true | null 이면 예측가능한 결과값을 내놓는다.
아닌 경우에는 null 을 내놓는다.
비교문에서 null 이 들어가면 unknown 을 내놓는다.
select distinct 문처럼 멀티셋에서 그냥 셋으로 바뀔 때 주의해야한다.
{(A, null), (A, null), (B, null)} 이런 경우 앞의 두개는 같은 것이 되어 하나만 남는다.
aggregate func 에서는 count(*) 을 제외하고 null 이 들어간 행을 모두 무시한다.
2. unknown
그러므로 bool 값이 true, false, unknown 을 정의역으로 갖는다.
where 문에 unknown 값이 들어가면 그건 버린다.
하지만 is null, is unknown 으로 캐치 가능하다.
11. Correlated Subquery
바깥쪽에서 from 의 table 을 서브쿼리에서 지시 가능하다.
이 경우 where 에서 검사하고 있는 하나의 튜플이 지시된다..
위의 예에서라면 서브쿼리에서 가르키는 S의 대상은 계속 바뀌면서 적용된다.
별명 붙이는건 본질이 아니니 착각하지 말 것.
12. With
1. from 정레 sql 구문이 들어옴
대신 무조건 as 로 별명을 지어야함.
또한 lateral 이라는 구문 없이는 Correlated Subquery 못씀
2. with
위에 from 절에 있는 nested relation 구문들을 위로 뺄 수 있다.
13. 스칼라 서브쿼리
댓글 없음:
댓글 쓰기