코딩 테스트

SQL 테스트 (2)

orin602 2024. 12. 30. 14:23

샘플 데이터가 없어서 쿼리문만 작성


1. SELECT / WHERE / AND / OR

> 이름이 john 이거나 급여가 4000 이상인 직원 조회하기.

> employees 테이블에서 first_name이 john이거나 salary가 4000 이상인 직원들의 first_name, last_name, salary 조회.

SELECT first_name, last_name, salary
  FROM employees
 WHERE first_name = 'John' OR salary >= 4000;

> 특정 연도에 입사한 직원 조회하기.

> employees 테이블에서 hird_date가 2010년에 해당하는 직원들의 first_name, last_name, hire_date 조회.

SELECT first_name, last_name, hire_date
  FROM employees
 WHERE YEAR(hire_date) = 2010;

2. GROUP BY / HAVING

> 부서별 평균 급여 조회

> empolyees 테이블에서 각 부서별 평균 급여를 구하고, 평균 급여가 5000 이상인 부서만 출력.

SELECT department_id, AVG(salary) AS average_salary
  FROM employees
GROUP BY department_id
HAVING AVG(salary) >= 5000;

> 직 수가 3명 이하인 부서 조회

> employees 테이블에서 직원 수가 3명 이하인 부서들의 department_id와 해당 부서의 직원 수를 조회.

SELECT department_id, COUNT(employee_id) AS employee_count
  FROM employees
GROUP BY department_id
HAVING COUNT(employee_id) <= 3;

3. JOIN

> 직원과 부서 정보 조회(INNER JOIN)

> employees 테이블과 departments 테이블을 조인해 employee_id, first_name, last_name, department_name 조회.

SELECT E.employee_id, E.first_name, E.last_name, D.department_name
  FORM employees E
INNER JOIN departments D ON E.department_id = D.department_id;

> 부서와 직원 정보 조회(LEFT JOIN)

> 두 테이블을 LEFT JOIN해 모든 직원의 first_name, last_name, 부서 이름 출력.

> 부서가 없는 직원도 포함.

SELECT E.first_name, E.last_name, D.department_name
  FROM employees E
LEFT JOIN departments D ON E.department_id = D.department_id;

4. 서브쿼리

> 최고 급여를 받는 직원 조회

SELECT first_name, last_name, salary
  FORM employees
 WHERE salary = (SELECT MAX(salary) 
                   FROM employees);

5. 문자열 함수

> 직원 이름을 대문자로 조회.

> first_name과 last_name을 합쳐서 대문자로 출력하기.

SELECT UPPER(CONCAT(first_name, ' ', last_name)) AS full_name
  FROM employees;

> 이름에 "S"가 포함된 직원 조회

SELECT first_name, last_name
  FORM emlpoyees
 WHERE first_name LIKE '%S%' OR last_name LIKE '%S%';

6. 날짜 함수

> 입사일 기준 1년 미만인 직원 조회

SELECT first_name, last_name, hire_date
  FROM employees
 WHERE hire_date > CURDATE() - INTERVAL 1 YEAR;

> 입사일이 6개월 이전인 직원 조회

SELECT first_name, last_name, hire_date
  FROM employees
 WHERE hire_date > CURDATE() - INTERVAL 6 MONTH;

7. LIMIT / OFFSET

> 상위 10명의 직원 조회

> 급여가 높은 순으로 상위 10명의 직원들 조회.

SELECT first_name, last_name, salary
  FROM employees
ORDER BY salary DESC
 LIMIT 10;

> 11번부터 20번까지의 직원 조회

> employee_id가 11번부터 20번까지인 직원 조회.

SELECT first_name, last_name, emlpoyee_id
  FROM employees
 WHERE employee_id BETWEEN 11 AND 20;

8. 복합 쿼리

> 부서별 최고 급여를 받는 직원 조회

SELECT e.first_name, last_name, e.salary, e.department_id
  FORM employees
INNER JOIN 
    (SELECT department_id, MAX(salary) AS max_salary
       FORM employees
     GROUP BY department_id
     )
subquery ON e.department_id = subquery.department_id
AND e.salary = subquery.max_salary;

 

'코딩 테스트' 카테고리의 다른 글

SQL 테스트 (1)  (0) 2024.12.30
배열 및 문자열  (0) 2024.12.30
기본 알고리즘  (0) 2024.12.30