DAY 7 - SQL활용#4 JOIN(ㅁㅇ)

Min·2023년 8월 2일

1. JOIN

  • 두개의 테이블을 합치는 작업을 조인 이라고 한다.

  • 관계형 데이터베이스에서는 데이터 중복 저장을 피하려고 데이터를 여러 테이블로 세분화해 저장해야한다.

    이럴때 필요한 것이 '조인'

    ✔ JOIN의 기본 사용법

    • 두 개의 테이블에 하나라도 같은 컬럼이 있어야한다
    • 두 컬럼의 값은 공유되어야한다.
    • 조인을 위해 기본키(Primary Key)와 외래키(Foreign Key)를 활용한다

cross join 크로스조인

select * from btable,gtable;

equi join 이퀴조인 동등조인 자연조인

select * from btable,table where btable.gno=gtable.gno;

셀프조인

select e1.employee_id,e1.manager_id,e2.employee_id,e2.first_name
from employees e1,employees e2
where e1.manager_id=e2.employee_id;

2. SUB쿼리

  • sql문 안에 sql문이 중복되어 존재 함
  • 서브쿼리는 하나의 SELECT 문장으로, 괄호로 둘러싸인 형태

ex)

select * from locations
where country_id in(
	select country_id from countries where region_id=2;
    );

해석 : 2번 대륙에 존재하는 나라정보를 바깥쪽 sql에서 안쪽에서 검색된 나라에 존재하는 도시정보를 출력함.

2.1 exists 함수

  • exists() 함수는 특정 sql 실행 결과가 있는지 없는지에 따라 실행 여부를 결정하는 함수이다.
  • 괄호안에 오는 sql를 실행한 결과 데이터가 있으면 true, 없으면 false.
    not exists는 데이터가 있으면 false 없으면 true

ex) 10번 부서가 존재하면 모든 사원을 출력해보자

select * from emlployees
where exists(
	select * from departments where depatment_id=10
    );

3. any, some , all 사용법

  • any, some은 여러 비교 대상 중 하나 이상이 일치하면 결과를 출력한다.
  • all은 여러 비교 대상 중 모두가 일치하면 결과를 출력한다.

3.1 any , some

ex)

Salary
50
100
150
200

select salary from employees where salary <= any (30,90,170); Salary 테이블에는 50,100,150,200이 있고 sql에는 30,90,170보다 Salary 값이 작거나 같으면 결과를 출력한다.

50은 90과 170보다 작으니 충족
100은 170보다 작으니 충족
150은 170보다 작으니 충족
200은 (30,90,170)의 값 모두에 만족하지 않아 출력하지 않는다.

3.2 all

select salry from employees where salary >= all (30,90,170);

Salary 컬럼의 값 200이 30,90,170의 모든 값에 만족하여 200만 출력한다.

0개의 댓글