join

SQL문 연습2
SET SESSION sql_mode = (SELECT REPLACE(@@sql_mode, 'ONLY_FULL_GROUP_BY', ''));
SET sql_mode = (SELECT REPLACE(@@sql_mode, 'ONLY_FULL_GROUP_BY', ''));
DROP DATABASE IF EXISTS a6;
CREATE DATABASE a6;
USE a6;
CREATE TABLE dept (
id int UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
name varchar(50) NOT null
);
INSERT INTO dept SET name = '홍보';
INSERT INTO dept SET name = '기획';
SELECT * FROM dept;
CREATE TABLE USER (
userId int UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
name varchar(50) NOT NULL,
deptId int UNSIGNED NOT NULL,
salary int UNSIGNED NOT NULL,
regDate datetime NOT null DEFAULT now()
);
INSERT INTO USER SET name = "홍길동", deptId = 1, salary = 5000;
INSERT INTO USER SET name = "홍길순", deptId = 1, salary = 6000;
INSERT INTO USER SET name = "임꺽정", deptId = 2, salary = 4000;
SELECT * FROM USER;
SELECT count(*) AS '사원수' FROM USER;
SELECT max(userId) AS '가장 큰 사원 번호' FROM USER;
SELECT max(salary) AS '가장 고액 연봉' FROM USER;
SELECT min(salary) AS '가장 저액 연봉' FROM USER;
SELECT sum(salary) AS '1년 고정 지출(인건비)' FROM USER;
SELECT dept.name AS '부서', sum(salary) AS '1년 고정 지출(인건비)' FROM USER INNER JOIN dept ON USER.deptId = dept.id GROUP BY deptId;
SELECT dept.name AS '부서', max(salary) AS '1년 고정 지출(인건비)' FROM USER INNER JOIN dept ON USER.deptId = dept.id GROUP BY deptId;
SELECT dept.name AS '부서', min(salary) AS '1년 고정 지출(인건비)' FROM USER INNER JOIN dept ON USER.deptId = dept.id GROUP BY deptId;
SELECT dept.name AS '부서', avg(salary) AS '평균(인건비)' FROM USER INNER JOIN dept ON USER.deptId = dept.id GROUP BY deptId;
SELECT
D.name AS '부서명',
GROUP_CONCAT(U.name) AS '사원리스트',
TRUNCATE(avg(U.salary),0) AS '평균연봉',
max(U.salary) AS '최고연봉',
min(U.salary) AS '최소연봉',
count(*) AS '사원수'
FROM `user` AS U
INNER JOIN dept AS D
ON U.deptId = D.id
GROUP BY deptId;
SELECT
D.name AS '부서명',
GROUP_CONCAT(U.name) AS '사원리스트',
TRUNCATE(avg(U.salary),0) AS '평균연봉',
max(U.salary) AS '최고연봉',
min(U.salary) AS '최소연봉',
count(*) AS '사원수'
FROM `user` AS U
INNER JOIN dept AS D
ON U.deptId = D.id
GROUP BY deptId
HAVING `평균연봉` > 5000;
SELECT * FROM (
SELECT
D.name AS '부서명',
GROUP_CONCAT(U.name) AS '사원리스트',
TRUNCATE(avg(U.salary),0) AS '평균연봉',
max(U.salary) AS '최고연봉',
min(U.salary) AS '최소연봉',
count(*) AS '사원수'
FROM `user` AS U
INNER JOIN dept AS D
ON U.deptId = D.id
GROUP BY deptId
) AS D WHERE D.`평균연봉` >= 5000;
SELECT D.name AS '부서', U.name AS '이름', max(U.salary) AS '연봉', U.regDate AS '입사일' FROM `user` AS U JOIN dept AS D ON D.id = U.deptId, GROUP BY deptId;
SELECT `부서명`, U.name, `최고연봉`, U.regDate AS '입사일' FROM (
SELECT
D.name AS '부서명',
GROUP_CONCAT(U.name) AS '사원리스트',
TRUNCATE(avg(U.salary),0) AS '평균연봉',
max(U.salary) AS '최고연봉',
min(U.salary) AS '최소연봉',
count(*) AS '사원수'
FROM `user` AS U
INNER JOIN dept AS D
ON U.deptId = D.id
GROUP BY deptId
) AS D
INNER JOIN `user` AS U
WHERE U.salary = D.`최고연봉`;
SELECT
U.deptId AS id,
max(U.salary) AS maxSalary
FROM `user` AS U
GROUP BY U.deptId;
SELECT D.* FROM (
SELECT
U.deptId AS id,
max(U.salary) AS maxSalary
FROM `user` AS U
GROUP BY U.deptId
) AS D
INNER JOIN `user`;
SELECT D.id AS '부서번호', U.name AS '사원명', D.maxSalary AS '연봉' FROM (
SELECT
U.deptId AS id,
max(U.salary) AS maxSalary
FROM `user` AS U
GROUP BY U.deptId
) AS D
INNER JOIN `user` AS U
WHERE U.salary = D.maxSalary;
SELECT DD.name AS '부서명', U.name AS '사원명', D.maxSalary AS '연봉' FROM (
SELECT
U.deptId AS id,
max(U.salary) AS maxSalary
FROM `user` AS U
GROUP BY U.deptId
) AS D
INNER JOIN `user` AS U
INNER JOIN dept AS DD
ON DD.id = U.deptId
WHERE U.salary = D.maxSalary;
DROP DATABASE IF EXISTS a6;
CREATE DATABASE a6;
USE a6;
CREATE TABLE dept (
id int UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
name varchar(50) NOT NULL
);
INSERT INTO dept SET name = "홍보";
INSERT INTO dept SET name = "기획";
INSERT INTO dept SET name = "IT";
SELECT * FROM dept;
CREATE TABLE emp (
id int UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
name varchar(50) NOT NULL,
deptId int UNSIGNED NOT NULL,
salary int UNSIGNED NOT NULL,
regDate datetime NOT NULL DEFAULT now()
);
INSERT INTO emp SET name = "홍길동", deptId = 1, salary = 5000;
INSERT INTO emp SET name = "홍길순", deptId = 1, salary = 6000;
INSERT INTO emp SET name = "임꺽정", deptId = 2, salary = 4000;
select * from emp;
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 '부서명',
E.id AS '사원번호',
E.name AS '사원명'
FROM emp AS E
RIGHT JOIN dept AS D
ON E.deptId = D.id;
SELECT
D.name AS '부서명',
IfNULL(E.id, 0) AS '사원번호',
E.name AS '사원명'
FROM dept AS D
LEFT JOIN emp AS E
ON E.deptId = D.id;
SELECT
D.name AS '부서명',
IFNULL(max(E.salary), 0) AS '최고연봉'
FROM dept AS D
LEFT JOIN emp AS E
ON E.deptId = D.id
GROUP BY D.name;
SELECT
D.name AS '부서명',
IFNULL(min(E.salary), 0) AS '최저연봉'
FROM dept AS D
LEFT JOIN emp AS E
ON E.deptId = D.id
GROUP BY D.name;
SELECT
D.name AS '부서명',
IFNULL(avg(E.salary), 0) AS '평균연봉'
FROM dept AS D
LEFT JOIN emp AS E
ON E.deptId = D.id
GROUP BY D.name;
SELECT
E.name AS '이름',
S.`최고연봉` AS '최고연봉',
S2.`이름` AS '이름',
S2.`최저연봉` AS '최저연봉'
FROM (
SELECT
max(salary) AS '최고연봉',
min(salary) AS '최저연봉'
FROM emp
) AS S
INNER JOIN emp AS E
INNER JOIN (
SELECT
E.name AS '이름',
S.`최저연봉` AS '최저연봉'
FROM (
SELECT
max(salary) AS '최고연봉',
min(salary) AS '최저연봉'
FROM emp
) AS S
INNER JOIN emp AS E
WHERE S.`최저연봉` = E.salary
) AS S2
WHERE S.`최고연봉` = E.salary;
SET SESSION sql_mode = (SELECT REPLACE(@@sql_mode, 'ONLY_FULL_GROUP_BY', ''));
SET sql_mode = (SELECT REPLACE(@@sql_mode, 'ONLY_FULL_GROUP_BY', ''));
DROP DATABASE IF EXISTS a6;
CREATE DATABASE a6;
USE a6;
CREATE TABLE dept (
id int UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
name varchar(50) NOT null
);
INSERT INTO dept SET name = '홍보';
INSERT INTO dept SET name = '기획';
SELECT * FROM dept;
CREATE TABLE USER (
userId int UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
name varchar(50) NOT NULL,
deptId int UNSIGNED NOT NULL,
salary int UNSIGNED NOT NULL,
regDate datetime NOT null DEFAULT now()
);
INSERT INTO USER SET name = "홍길동", deptId = 1, salary = 5000;
INSERT INTO USER SET name = "홍길순", deptId = 1, salary = 6000;
INSERT INTO USER SET name = "임꺽정", deptId = 2, salary = 4000;
SELECT * FROM USER;
SELECT count(*) AS '사원수' FROM USER;
SELECT max(userId) AS '가장 큰 사원 번호' FROM USER;
SELECT max(salary) AS '가장 고액 연봉' FROM USER;
SELECT min(salary) AS '가장 저액 연봉' FROM USER;
SELECT sum(salary) AS '1년 고정 지출(인건비)' FROM USER;
SELECT dept.name AS '부서', sum(salary) AS '1년 고정 지출(인건비)' FROM USER INNER JOIN dept ON USER.deptId = dept.id GROUP BY deptId;
SELECT dept.name AS '부서', max(salary) AS '1년 고정 지출(인건비)' FROM USER INNER JOIN dept ON USER.deptId = dept.id GROUP BY deptId;
SELECT dept.name AS '부서', min(salary) AS '1년 고정 지출(인건비)' FROM USER INNER JOIN dept ON USER.deptId = dept.id GROUP BY deptId;
SELECT dept.name AS '부서', avg(salary) AS '평균(인건비)' FROM USER INNER JOIN dept ON USER.deptId = dept.id GROUP BY deptId;
SELECT
D.name AS '부서명',
GROUP_CONCAT(U.name) AS '사원리스트',
TRUNCATE(avg(U.salary),0) AS '평균연봉',
max(U.salary) AS '최고연봉',
min(U.salary) AS '최소연봉',
count(*) AS '사원수'
FROM `user` AS U
INNER JOIN dept AS D
ON U.deptId = D.id
GROUP BY deptId;
SELECT
D.name AS '부서명',
GROUP_CONCAT(U.name) AS '사원리스트',
TRUNCATE(avg(U.salary),0) AS '평균연봉',
max(U.salary) AS '최고연봉',
min(U.salary) AS '최소연봉',
count(*) AS '사원수'
FROM `user` AS U
INNER JOIN dept AS D
ON U.deptId = D.id
GROUP BY deptId
HAVING `평균연봉` > 5000;
SELECT * FROM (
SELECT
D.name AS '부서명',
GROUP_CONCAT(U.name) AS '사원리스트',
TRUNCATE(avg(U.salary),0) AS '평균연봉',
max(U.salary) AS '최고연봉',
min(U.salary) AS '최소연봉',
count(*) AS '사원수'
FROM `user` AS U
INNER JOIN dept AS D
ON U.deptId = D.id
GROUP BY deptId
) AS D WHERE D.`평균연봉` >= 5000;
SELECT D.name AS '부서', U.name AS '이름', max(U.salary) AS '연봉', U.regDate AS '입사일' FROM `user` AS U JOIN dept AS D ON D.id = U.deptId, GROUP BY deptId;
SELECT `부서명`, U.name, `최고연봉`, U.regDate AS '입사일' FROM (
SELECT
D.name AS '부서명',
GROUP_CONCAT(U.name) AS '사원리스트',
TRUNCATE(avg(U.salary),0) AS '평균연봉',
max(U.salary) AS '최고연봉',
min(U.salary) AS '최소연봉',
count(*) AS '사원수'
FROM `user` AS U
INNER JOIN dept AS D
ON U.deptId = D.id
GROUP BY deptId
) AS D
INNER JOIN `user` AS U
WHERE U.salary = D.`최고연봉`;
SELECT
U.deptId AS id,
max(U.salary) AS maxSalary
FROM `user` AS U
GROUP BY U.deptId;
SELECT D.* FROM (
SELECT
U.deptId AS id,
max(U.salary) AS maxSalary
FROM `user` AS U
GROUP BY U.deptId
) AS D
INNER JOIN `user`;
SELECT D.id AS '부서번호', U.name AS '사원명', D.maxSalary AS '연봉' FROM (
SELECT
U.deptId AS id,
max(U.salary) AS maxSalary
FROM `user` AS U
GROUP BY U.deptId
) AS D
INNER JOIN `user` AS U
WHERE U.salary = D.maxSalary;
SELECT DD.name AS '부서명', U.name AS '사원명', D.maxSalary AS '연봉' FROM (
SELECT
U.deptId AS id,
max(U.salary) AS maxSalary
FROM `user` AS U
GROUP BY U.deptId
) AS D
INNER JOIN `user` AS U
INNER JOIN dept AS DD
ON DD.id = U.deptId
WHERE U.salary = D.maxSalary;
DROP DATABASE IF EXISTS a6;
CREATE DATABASE a6;
USE a6;
CREATE TABLE dept (
id int UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
name varchar(50) NOT NULL
);
INSERT INTO dept SET name = "홍보";
INSERT INTO dept SET name = "기획";
INSERT INTO dept SET name = "IT";
SELECT * FROM dept;
CREATE TABLE emp (
id int UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
name varchar(50) NOT NULL,
deptId int UNSIGNED NOT NULL,
salary int UNSIGNED NOT NULL,
regDate datetime NOT NULL DEFAULT now()
);
INSERT INTO emp SET name = "홍길동", deptId = 1, salary = 5000;
INSERT INTO emp SET name = "홍길순", deptId = 1, salary = 6000;
INSERT INTO emp SET name = "임꺽정", deptId = 2, salary = 4000;
select * from emp;
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 '부서명',
E.id AS '사원번호',
E.name AS '사원명'
FROM emp AS E
RIGHT JOIN dept AS D
ON E.deptId = D.id;
SELECT
D.name AS '부서명',
IfNULL(E.id, 0) AS '사원번호',
E.name AS '사원명'
FROM dept AS D
LEFT JOIN emp AS E
ON E.deptId = D.id;
SELECT
D.name AS '부서명',
IFNULL(max(E.salary), 0) AS '최고연봉'
FROM dept AS D
LEFT JOIN emp AS E
ON E.deptId = D.id
GROUP BY D.name;
SELECT
D.name AS '부서명',
IFNULL(min(E.salary), 0) AS '최저연봉'
FROM dept AS D
LEFT JOIN emp AS E
ON E.deptId = D.id
GROUP BY D.name;
SELECT
D.name AS '부서명',
IFNULL(avg(E.salary), 0) AS '평균연봉'
FROM dept AS D
LEFT JOIN emp AS E
ON E.deptId = D.id
GROUP BY D.name;
SELECT
E.name AS '이름',
S.`최고연봉` AS '최고연봉',
S2.`이름` AS '이름',
S2.`최저연봉` AS '최저연봉'
FROM (
SELECT
max(salary) AS '최고연봉',
min(salary) AS '최저연봉'
FROM emp
) AS S
INNER JOIN emp AS E
INNER JOIN (
SELECT
E.name AS '이름',
S.`최저연봉` AS '최저연봉'
FROM (
SELECT
max(salary) AS '최고연봉',
min(salary) AS '최저연봉'
FROM emp
) AS S
INNER JOIN emp AS E
WHERE S.`최저연봉` = E.salary
) AS S2
WHERE S.`최고연봉` = E.salary;