오래 못 할 짓 하지 않기
[ DB ] 4. More SQL 본문
With
: 임시적으로 만드는 Relation table
여기에서 VNDR_CODE가 1001이나 1002인것들만 추출한다고 해보자
위 테이블을 보면 2개의 Select 덩어리가 있다.
두 개의 덩어리는 다 같은 내용에다가 마지막 where절 부분만 다르다.
Select + From + Join 만 같고 Where만 다르다면, Where 전 부분을 한 덩어리로 치환할 수 있지 않을까?
라는 생각에서 시작한다.
이렇게 완성 가능하다.
그냥 긴 구문을 하나의 변수에 담아둔다고 생각하면 편하다.
그걸 Table로 사용할 수 있기 때문에 From에 넣어도 된다.
IN / NOT IN
다음과 같이 2017 2학기, 2018 1학기에 열린 수업을 조회한다고 했을 때
Outer 쿼리에는 2017 2학기 수업들을 골라내고, 그 뒤 조건으로는
그렇게 골라낸 course_id 중에서 뒤에 Subquery에 있는 것들을 골라낸다는 뜻이다.
내가 적은 Attribute가 In 뒤에 오는 결과에 포함된다면 조건에 통과
Not In은 그 반대
ALL
Where 뒤에 있는 salary랑
ALL 뒤에 오는 결과들이랑 [ 모두 비교 ] 하여 하나라도 만족하지 않는다면 False
Some
: 뒤에 오는 집단에서 하나라도 조건에 포함된다면
Bio 부서에 있는 사람들 중에 한 명에 대해서라도 월급을 더 많이 받는 직원을 뽑아라.
위 쿼리로 적을 수 있지만
아래 쿼리도 같은 내용인데 Some을 사용한다.
Salary > Some ( 뒤에 오는 집단)
= 뒤에 오는 집단의 Salary보다 높은 게 있으면 통과
Exists / Not Exists
2017 2학기 and 2018 1학기에 열린 course_id를 출력해라
> 2017 2학기에 열린 수업 course_id가 , 2018 1학기에 열린 수업 course_id를 뽑아낸 relation에 존재하는지 판단.
UNIQUE
2017년에 딱 한 번 수업한건지 판단
> 수업 course_id 뽑을거임
> 근데 조건은 2017 Relation에서 UNIQUE한 거면 뽑음
ER
= Entity - Relation
E-R Schema를 짤 때
피해야 하는 2가지
1) Redundancy : 중복되면 안 된다.
2) Incompleteness : 설계가 완벽해야한다.
구성 요소)
● Entity : Data object / ex) 사람, 회사
● Relationship sets : Entity 간의 관계를 설명해준다. / ex) 사람 사람 : 친구, 부모, 연인 / ex) 회사 : 자회사, 하청업
● Attributes : Entity에 들어가는 세부 내용 / ex) 이름 , 부서
Entity : Instructor , Student
Relationship set : advisor
Attributes : ID , Name , Salary / ID , name, tot_cred
(출처)
한동대학교 홍참길교수님 - DB
(참고)
https://royzero.tistory.com/entry/SQL-WITH%EC%A0%88-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0
'3학년 1학기 > 데이터베이스(DB)' 카테고리의 다른 글
[ DB ] 6. 정규화 ( Normalization ) (0) | 2024.04.08 |
---|---|
[ DB ] 5. E-R Model (0) | 2024.04.08 |
[ DB ] 3. SQL ( DML ) (0) | 2024.03.18 |
[ DB ] 2. R - DBMS(2) (0) | 2024.03.11 |
[ DB ] 1. R - DBMS (0) | 2024.03.07 |