- LEFT JOIN - 왼쪽 테이블을 중심 테이블로 설정
- RIGHT JOIN - 오른쪽 테이블을 중심 테이블로 설정
DROP DATABASE IF EXISTS a6;
CREATE DATABASE a6;
USE a6;
CREATE TABLE dept (
id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
regDate DATETIME NOT NULL,
`name` CHAR(100) NOT NULL UNIQUE
);
INSERT INTO dept
SET regDate = NOW(),
`name` = '홍보';
INSERT INTO dept
SET regDate = NOW(),
`name` = '기획';
INSERT INTO dept
SET regDate = NOW(),
`name` = 'IT';
CREATE TABLE emp (
id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
regDate DATETIME NOT NULL,
`name` CHAR(100) NOT NULL,
deptId INT UNSIGNED NOT NULL,
salary INT UNSIGNED NOT NULL
);
INSERT INTO emp
SET regDate = NOW(),
`name` = '홍길동',
deptId = 1,
salary = 5000;
INSERT INTO emp
SET regDate = NOW(),
`name` = '홍길순',
deptId = 1,
salary = 6000;
INSERT INTO emp
SET regDate = NOW(),
`name` = '임꺽정',
deptId = 2,
salary = 4000;
SELECT D.name AS `부서명`,
E.id AS `사원번호`,
E.name AS `사원명`
FROM emp AS E
INNER JOIN dept AS D
ON E.deptId = D.id;
SELECT D.name AS `부서명`,
E.id AS `사원번호`,
E.name AS `사원명`
FROM dept AS D
LEFT JOIN emp AS E
ON E.deptId = D.id;
SELECT D.name AS `부서명`,
IF(E.id IS NOT NULL, E.id, 0) AS `사원번호`,
IFNULL(E.name, "-") AS `사원명`
FROM dept AS D
LEFT JOIN emp AS E
ON E.deptId = D.id;
SELECT D.name AS `부서명`,
MAX(IFNULL(E.salary, 0)) AS `최고연봉`
FROM dept AS D
LEFT JOIN emp AS E
ON D.id = E.deptId
GROUP BY D.id;
SELECT D.name AS `부서명`,
MIN(IFNULL(E.salary, 0)) AS `최고연봉`
FROM dept AS D
LEFT JOIN emp AS E
ON D.id = E.deptId
GROUP BY D.id;
SELECT D.name AS `부서명`,
AVG(IFNULL(E.salary, 0)) AS `최고연봉`
FROM dept AS D
LEFT JOIN emp AS E
ON D.id = E.deptId
GROUP BY D.id;
(
SELECT E.salary AS `연봉`,
E.name AS `사원명`,
'최고연봉자' AS `타입`
FROM emp AS E
ORDER BY E.salary DESC
LIMIT 1
)
UNION ALL
(
SELECT E.salary AS `연봉`,
E.name AS `사원명`,
'최저연봉자' AS `타입`
FROM emp AS E
ORDER BY E.salary ASC
LIMIT 1
)
ORDER BY `타입` ASC