ch2. 관계 대수와 SQL - (3)

wonnie1224·2022년 10월 16일
0

DB

목록 보기
7/7

2) 조인

(1) 내부 조인(inner join)

SQL 89 : WHERE절에 조인 조건 포함!!!
SELECT 컬럼명
FROM R, S
WHERE R.A <조인 조건> S.B

구 표준 방식은 외부 조인(outer join)을 지원하지 않음

SQL 92 : ON 절에 조인 조건 따로 표시!!!
SELECT 컬럼명
FROM R
INNER JOIN S
ON R.A <조인 조건> S.B

(2) 크로스 조인(cross join)

: 카티션 곱 생성하는 조인

--(SQL 89)
select *
from department, employee

--(SQL 92)
select *
from department cross join employee

(4) 자체 조인(self join)

: 자기 자신과 조인

  • 하나의 테이블에 2개의 별칭 사용

--(SQL 89)
SELECT 컬럼들
FROM R AS R1, R AS R2
WHERE R1.A <조인조건> R2.B

--(SQL 92)
SELECT 컬럼들
FROM R AS R1
INNER JOIN R AS R2
ON R1.A <조인조건> R2.B


3) 부속 질의 (서브 쿼리)

  • SELECT문 안에 포함된 쿼리
    INSERT, DELETE, UPDATE문에도 포함될 수 O

  • SELECT... FROM... WHERE or HAVING절(SELECT... FROM... WHERE...)

  • 서브 쿼리는 또 다른 서브 쿼리를 포함할 수 있음

(1) 단일값 반환

  • 서브 쿼리가 1번만 수행됨
  • 외부 질의의 where / having 절에서 비교연산자자(=, <, <=, >, >=, <>) 사용함
  • 서브 쿼리의 select 절에 사용된 컬럼의 데이터 타입 = 외부 쿼리 where 절에 사용된 컬럼의 데이터 타입
    -> 당근임..

(2) 단일 컬럼 반환

  • 서브쿼리의 결과 - 1개의 컬럼으로 이뤄진 #개의 투플 반환
  • 외부질의의 where / having 절에서 IN, ANY, ALL 같은 연산자 사용
    -- ANY와 ALL 연산자는 비교 연산자(=, <, <=, >, >=, <>)와 같이 사용
    -- 서브쿼리 결과 값과 한 행씩 비교해서 참/거짓 판단

  • IN 은 '= ANY'와 같은 표현
  • NOT IN 은 <> ALL
  • ANY는 SOME

(3) 상관 부속 질의

서브 쿼리에서 외부 쿼리의 일부 컬럼을 참조

외부 쿼리의 현재 순서 행이 후보 행이 됨
이 행의 어떤 컬럼 값으로 서브 쿼리 1번 수행
서브 쿼리의 결과 따라 현재 후보 행이 결과에 들어갈지 결정
이걸 외부 쿼리의 모든 행에 대해 반복

  • EXISTS : 서브 쿼리 결과가 어떤 행 반환하는지 여부만 검사
  • NOT EXISTS

-- 서브 쿼리의 조건을 만족하는 행의 존재 여부만 테스트하는 거라서
열 이름 안 나열해도 됨!
ex) WHERE ~ EXISTS(SELECT 1 FROM ~ WHERE~) / EXISTS(SELECT * FROM~WHERE~)

(4) INSERT, DELETE, UPDATE

📌 INSERT INTO 테이블명 VALUES (값 리스트);
테이블명(컬럼 리스트)로 써도 됨

📌 DELETE FROM 테이블명 [WHERE 절];

  • where절 안 쓰면 모든 투플 삭제함
  • 부모테이블에서 투플 삭제하면 참조 무결성 제약 조건 위배 가능
  • 자식 테이블에선 삭제해도 상관 없음

📌 **UPDATE 테이블 SET 컬럼 = 값, 컬럼 = 값,... [WHERE 절];

  • where절 안 쓰면 모든 투플 값 바꿈
  • 기본키 / 외래키 칼럼 값이 수정되면 참조 무결성 제약 조건 위배 가능
profile
안녕하세요😊 컴퓨터비전을 공부하고 있는 대학생입니다 🙌

0개의 댓글

관련 채용 정보