728x90
Join
- 두 개 이상의 테이블을 서로 묶어서 새로운 테이블로 만들어 내는것
Cross join (교차조인)
-- 교차 조인(cross join)
-- 두 개 이상의 테이블에서 가능한 모든 조합을 만들어내는 조인 방식
select student.*, enrol.*
from student
cross join enrol;
Inner join (이너조인 = equi join 이퀴조인))
- inner join = 두 테이블 간에 중복되는 데이터, 즉 양쪽 테이블 모두에 존재하는 데이터만을 결과로 반환하는 조인 방식
- equi join = 조인 조건이 등호(=)를 사용하는 경우
- where절에서 = 연산자 사용
-- inner join(equi join)
select stu.stu_no, stu_name, stu_dept, enr_grade
from student stu, enrol en
where stu.stu_no = en.stu_no;
-- 점수가 70점 이상인 학생 이름 검색
SELECT
stu_name
FROM
student s,
enrol e
WHERE
s.stu_no = e.stu_no AND enr_grade >= 70;
-- 점수가 70점 이상인 학생 이름 검색(equi-join)
SELECT
stu_name
FROM
student s,
enrol e
WHERE
s.stu_no = e.stu_no AND enr_grade >= 70;
-- 강종영 교수가 강의하는 과목을 수강하는 학생의 이름을 검색 (equi join)
SELECT
stu_name
FROM
student s,
enrol e,
subject su
WHERE
su.sub_no = e.sub_no
AND e.stu_no = s.stu_no
AND sub_prof = '강종영';
-- 컴퓨터개론을 수강하는 학생들의 학번과 이름을 검색해라(equi join)
SELECT
stu_name, s.stu_no
FROM
student s,
enrol e,
subject su
WHERE
su.sub_no = e.sub_no
AND e.stu_no = s.stu_no
AND sub_name = '컴퓨터개론';
Natural join (내추럴 조인)
- 이너조인보다 편리함 / 네추럴조인 앞뒤로 합치고 싶은 테이블 입력
-- natural join
select stu.stu_no, stu_name, stu_dept, enr_grade
from student stu natural join enrol en;
-- 학생테이블과 수강테이블을 natural join
SELECT
*
FROM
student natual
JOIN
enrol;
-- 과목이름과 학번, 점수를 검색 natural join
SELECT
sub_name, enrol.stu_no, enr_grade
FROM
subject
NATURAL JOIN
enrol;
-- 점수가 70점 이하인학색 이름 검색(natural join)
SELECT
stu_name
FROM
student
NATURAL JOIN
enrol
WHERE
enr_grade <= 70;
join~using
- 조인하려는 두 테이블에서 기준 열의 이름이 정확히 일치할 때 사용할 수 있으며, 쿼리를 간결하게 만들고 싶을 때
유용합니다. 단, 단일 열에 대한 동등 비교만 가능합니다.
select stu.stu_no, stu_name, stu_dept, enr_grade
from student stu join enrol using(stu_no);
-- 과목이름과 학번, 점수를 검색해라(join using)
SELECT
sub_name, enrol.stu_no, enr_grade
FROM
subject
JOIN
enrol USING (sub_no);
SELECT
stu_name, enr_grade
FROM
student s
JOIN
enrol e USING (stu_no)
WHERE
enr_grade >= 60;
join~on
- 두 테이블 간의 조인 조건을 자유롭게 지정할 수 있으며, 열 이름이 다르거나 복잡한 조건을 사용해야 하는 경우에
적합
select stu.stu_no, stu_name, stu_dept, enr_grade
from student stu join enrol en on stu.stu_no = en.stu_no;
Outer join(외부조인)
- 한 쪽에는 데이터가 있지만, 다른 한 쪽에는 데이터가 없는경우 데이터가 있는 쪽 테이블의 내용을 모두 출력
- left outer join - 왼쪽에 있는 테이블의 모든 결과를 가져온 후 오른쪽 테이블의 데이터를 매칭
- right outer join - 오른쪽에 있는 테이블의 모든 결과를 가져온 후 왼쪽 테이블의 데이터를 매칭
select*
from subject natural join enrol;
select a.*, sub_name
from enrol a right outer join subject b
on a.sub_no = b.sub_no;
select a.*, sub_name
from enrol a left outer join subject b
on a.sub_no = b.sub_no;
Self join
-- self join
select a.empno as 사원번호, a.ename as 사원이름,
b.empno as 상급자사원번호, b.ename as 상급자이름
from emp a join emp b on a.mgr=b.empno;
728x90
'DBMS > MySQL' 카테고리의 다른 글
[MySQL] 스토어드 프로시저 (0) | 2024.03.18 |
---|---|
[MySQL] 뷰(View) (0) | 2024.03.18 |
[MySQL] Top N 질의문 (0) | 2024.03.18 |
[MySQL] DB 언어 분류(DML/DDL/DCL) (0) | 2024.03.15 |
[MySQL] MySQL Grammar 모음(계속 업데이트) (0) | 2024.03.14 |