오류 해결하기
어떠한 부서의 최소급여와 같은 급여를 받는 사람을 출력하라.
SELECT employee_id, last_name
FROM employees
WHERE salary = (SELECT MIN(salary)
FROM employees
GROUP BY department_id);
SQL Error [1242] [21000]: Subquery returns more than 1 row
위 코드를 아래와 같이 바꿔주면 에러발생X
SELECT employee_id, last_name, salary, department_id
FROM employees
WHERE (department_id, salary) IN (SELECT department_id, min(salary)
FROM employees
GROUP BY department_id);
employee_id|last_name |salary |department_id|
-----------+----------+--------+-------------+
101|Kochhar |18700.00| 90|
102|De Haan |18700.00| 90|
107|Lorentz | 4620.00| 60|
SELECT employee_id, job_id
FROM employees
WHERE job_id = (SELECT job_id
FROM employees
WHERE last_name ='Haas');
last_name|job_id|
---------+------+
• 서브쿼리의 조건인 last_name이 'Haas' 인 사원이 존재하지 않기 때문에 메인쿼리에서 조건값을 돌려받지 못해 결과적으로 일치값을 가진 행을 찾을 수 없게 되었음.
연습문제
- employees 테이블에서 Abel과 동일한 부서에 소속된 사원들의 last_name과 hire_date를 출력하되 비교의 대상인 Abel은 제외하시오.
SELECT last_name, hire_date
FROM employees
WHERE department_id IN (SELECT department_id
FROM employees
WHERE last_name = 'Abel')
AND last_name != 'Abel';
last_name |hire_date |
----------+----------+
Russell |1996-10-01|
Partners |1997-01-05|
Errazuriz |1997-03-10|
- employees 테이블에서 평균 이상의 급여를 받는 사원들의 employee_id, last_name, salary를 출력하되 급여를 기준으로 오름차순 하시오.
SELECT employee_id, last_name, salary
FROM employees
WHERE salary >= (SELECT AVG(salary)
FROM employees
)
ORDER BY salary;
employee_id|last_name |salary |
-----------+----------+--------+
203|Mavris | 7150.00|
123|Vollman | 7150.00|
165|Lee | 7480.00|
- employees 테이블에서 last_name에 ‘u’가 포함된 사원과 같은 부서에 근무하는 모든 사원의 employee_id, last_name을 출력하시오.
SELECT employee_id, last_name
FROM employees
WHERE department_id in (SELECT department_id
FROM employees
WHERE last_name LIKE '%u%');
employee_id|last_name |
-----------+-----------+
103|Hunold |
104|Ernst |
105|Austin |
- employees 테이블과 departments 테이블을 사용하여 구문을 작성하시오. location_id가 1700인 부서에 소속된 사원들의 employee_id, last_name, department_id, job_id를 출력하시오
SELECT employee_id, last_name, department_id, job_id
FROM employees
WHERE department_id IN (SELECT department_id
FROM departments
WHERE location_id = 1700);
employee_id|last_name |department_id|job_id |
-----------+----------+-------------+----------+
200|Whalen | 10|AD_ASST |
114|Raphaely | 30|PU_MAN |
115|Khoo | 30|PU_CLERK |
- employees 테이블과 departments 테이블을 사용하여 구문을 작성하시오. 직원이 소속되어 있지 않은 빈 부서의 departments_id, department_name을 출력하시오
SELECT department_id, department_name
FROM departments
WHERE department_id NOT IN (SELECT DISTINCT department_id
FROM employees
WHERE department_id IS NOT NULL);
department_id|department_name |
-------------+--------------------+
120|Treasury |
130|Corporate Tax |
140|Control And Credit |
DML(데이터) - 세인업데
DDL(구조) - 크알드트리
DCL(권한) - 그리
'DB > MySQL' 카테고리의 다른 글
[Mysql] 예제로 공부하는 트랙잭션 공부 (0) | 2023.10.04 |
---|---|
DML(Data Manipulation Language / 데이터조작어) (0) | 2023.09.19 |
[Mysql] 인라인뷰, 조건의 쌍비교 방식 (2) | 2023.09.16 |
[Mysql] 서브쿼리 (0) | 2023.09.16 |
[Mysql] 통계와 관련된 그룹 함수 (0) | 2023.09.16 |