์กฐ์ธ(Join)
- ๊ด๊ณํ DB์์ ๊ฐ์ฅ ๊ธฐ๋ณธ, ์ค์ํ ๊ธฐ๋ฅ
- ๋๊ฐ ์ด์์ ํ
์ด๋ธ์ ์๋ก ์ฐ๊ฒฐํ์ฌ ๋ฐ์ดํฐ ์ถ์ถ
- ๋ง์ด ํ ์๋ก ์ฑ๋ฅ ์ ํ
์กฐ์ธ ์ ๋ฐ์ดํฐ ์งํฉ ๋ ๋ฒจ์ ๋ณํ ์ดํด
- 1:M ์กฐ์ธ - ๊ฒฐ๊ณผ ์งํฉ์ M ์งํฉ์ ๋ ๋ฒจ์ ๊ทธ๋๋ก ์ ์ง
์ค์ต
-- ์ง์ ์ ๋ณด์ ์ง์์ด ์ํ ๋ถ์๋ช
์ ๊ฐ์ ธ์ค๊ธฐ
SELECT A.*, B.DNAME
FROM HR.EMP A
JOIN HR.DEPT B ON A.DEPTNO = B.DEPTNO;
-- job์ด SALESMAN์ธ ์ง์์ ๋ณด์ ์ง์์ด ์ํ ๋ถ์๋ช
์ ๊ฐ์ ธ์ค๊ธฐ.
SELECT A.*, B.DNAME
FROM HR.EMP A
JOIN HR.DEPT B ON A.DEPTNO = B.DEPTNO
WHERE A.JOB = 'SALESMAN';
-- ๋ถ์๋ช
SALES์ RESEARCH์ ์์ ์ง์๋ค์ ๋ถ์๋ช
, ์ง์๋ฒํธ, ์ง์๋ช
, JOB ๊ทธ๋ฆฌ๊ณ ๊ณผ๊ฑฐ ๊ธ์ฌ ์ ๋ณด ์ถ์ถ
-- 1
SELECT B.DNAME, A.EMPNO, A.ENAME, A.JOB, C.FROMDATE, C.TODATE, C.SAL
FROM HR.EMP A
JOIN HR.DEPT B ON A.DEPTNO = B.DEPTNO
JOIN HR.EMP_SALARY_HIST C ON A.EMPNO = C.EMPNO
WHERE B.DNAME IN ('SALES', 'RESEARCH');
-- 2
SELECT A.DNAME, B.EMPNO, B.ENAME, B.JOB, C.FROMDATE, C.TODATE, C.SAL
FROM HR.DEPT A
JOIN HR.EMP B ON A.DEPTNO = B.DEPTNO
JOIN HR.EMP_SALARY_HIST C ON B.EMPNO = C.EMPNO
WHERE A.DNAME IN ('SALES', 'RESEARCH');
-- > ์งํฉ ๋ ๋ฒจ์ ๋ง์ง๋ง์ joinํ EMP_SALARY_HIST๋ฅผ ๋ฐ๋ผ๊ฐ
-- ์กฐ์ธ ์์์ ์คํ์๋ ์ฐจ์ด ์ง๋ฌธ
-- ๋ถ์๋ช
SALES์ RESEARCH์ ์์ ์ง์๋ค์ ๋ถ์๋ช
, ์ง์๋ฒํธ, ์ง์๋ช
, JOB ๊ทธ๋ฆฌ๊ณ ๊ณผ๊ฑฐ ๊ธ์ฌ ์ ๋ณด์ค 1983๋
์ด์ ๋ฐ์ดํฐ๋ ๋ฌด์ํ๊ณ ๋ฐ์ดํฐ ์ถ์ถ
SELECT A.DNAME, B.EMPNO, B.ENAME, B.JOB, C.FROMDATE, C.TODATE, C.SAL
FROM HR.DEPT A
JOIN HR.EMP B ON A.DEPTNO = B.DEPTNO
JOIN HR.EMP_SALARY_HIST C ON B.EMPNO = C.EMPNO
WHERE 1=1
AND A.DNAME IN ('SALES', 'RESEARCH')
AND C.FROMDATE >= TO_DATE('19830101', 'yyyymmdd')
ORDER BY 1, 2, 3, C.FROMDATE;
-- > ์ปฌ๋ผ๋ช
๋์ ์ซ์๊ฐ์ ์ง์ ํ์ฌ order by. ์ซ์๊ฐ์ select ์ ์ ์ฌ์ฉ๋ ์ปฌ๋ผ๋ช
๋ค์ ์์๋๋ก ์ง์ ํ ๊ฒ
-- ๋ถ์๋ช
SALES์ RESEARCH ์์ ์ง์๋ณ๋ก ๊ณผ๊ฑฐ๋ถํฐ ํ์ฌ๊น์ง ๋ชจ๋ ๊ธ์ฌ๋ฅผ ์ทจํฉํ ํ๊ท ๊ธ์ฌ
SELECT B.EMPNO, B.ENAME, AVG(C.SAL)
FROM HR.DEPT A
JOIN HR.EMP B ON A.DEPTNO = B.DEPTNO
JOIN HR.EMP_SALARY_HIST C ON B.EMPNO = C.EMPNO
WHERE 1=1
AND A.DNAME IN ('SALES', 'RESEARCH')
GROUP BY B.EMPNO;
-- with ์ ์ฌ์ฉ
WITH
TEMP_01 as
(
SELECT A.DNAME, B.EMPNO, B.ENAME, B.JOB, C.FROMDATE, C.TODATE, C.SAL
FROM HR.DEPT A
JOIN HR.EMP B ON A.DEPTNO = B.DEPTNO
JOIN HR.EMP_SALARY_HIST C ON B.EMPNO = C.EMPNO
WHERE 1=1
AND A.DNAME IN ('SALES', 'RESEARCH')
ORDER BY A.DNAME, B.EMPNO, C.FROMDATE
)
SELECT EMPNO, MAX(ENAME) AS ENAME, AVG(SAL) AS AVG_SAL
FROM TEMP_01
group BY EMPNO;
-- ์ง์๋ช
SMITH์ ๊ณผ๊ฑฐ ์์ ๋ถ์ ์ ๋ณด๋ฅผ ๊ตฌํ ๊ฒ.
SELECT A.ENAME, A.EMPNO, B.DEPTNO, C.DNAME, B.FROMDATE, B.TODATE
FROM HR.EMP A
JOIN HR.EMP_DEPT_HIST B ON A.EMPNO = B.EMPNO
JOIN HR.DEPT C ON B.DEPTNO = C.DEPTNO
์ถ์ฒ : ๋ฐ์ดํฐ ๋ถ์ SQL Fundamentals
๋ฐ์ดํฐ ๋ถ์ SQL Fundamentals ๊ฐ์ - ์ธํ๋ฐ
SQL์ ํต์ฌ ์์์ ๋ํ ์์ธํ ๊ฐ์์ ์ค์ต์ ํตํด, ์ฌ๋ฌ๋ถ์ด SQL ๋ถ์ ์ ๋ฌธ๊ฐ๋ก ์ฑ์ฅํ ์ ์๋๋ก ํ๋ค๋ฆฌ์ง ์๋ ๋ผ๋๋ฅผ ๋ง๋ค์ด ๋๋ฆฌ๊ฒ ์ต๋๋ค., SQL ๋ถ์ ์ ๋ฌธ๊ฐ๋ก ๋๊ธฐ ์ํ ์ฒซ๊ฑธ์! ๐ช์์ธํ
www.inflearn.com
'๐ป Programming > SQL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[DBeaver] DB Dump ๋ฐฑ์ ๋ฐ ๋ฐฑ์ ํ์ผ ๋ณต๊ตฌ ๋ฐฉ๋ฒ (0) | 2024.02.20 |
---|---|
[DBeaver] DBeaver์ค์น + PostgreSQL ์ฐ๊ฒฐํ๊ธฐ (0) | 2024.02.13 |
[PostgreSQL] macOS m1 ํ๊ฒฝ์ PostgreSQL ์ค์น (0) | 2024.02.13 |
[MySQL] mysql ์์์ ์ฒ๋ฆฌ (0) | 2024.02.03 |