SQL-Запросы с подзапросами для анализа данных

SQLSQLBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом проекте вы научитесь использовать подзапросы для извлечения соответствующей информации из таблиц сотрудников (emp) и департаментов (dept) в базе данных по персоналу. Вы будете практиковать написание сложных запросов SQL для доступа к и анализу данных из нескольких таблиц.

👀 Предварительный просмотр

Изображение предварительного просмотра запроса SQL

🎯 Задачи

В этом проекте вы научитесь:

  • Как запустить сервер MySQL и импортировать базу данных по персоналу
  • Как использовать подзапрос для поиска сотрудника с самой высокой зарплатой
  • Как вычислить долю сотрудников в определенном департаменте по сравнению с всей компанией
  • Как извлечь всех сотрудников, работающих в определенном месте, с использованием подзапроса
  • Как найти сотрудников, чья зарплата превышает среднюю зарплату в их департаменте

🏆 Достижения

После завершения этого проекта вы сможете:

  • Разобраться в концепции и использовании подзапросов в SQL
  • писать сложные запросы SQL, которые объединяют данные из нескольких таблиц
  • Анализировать и извлекать значимые выводы из базы данных с использованием подзапросов
  • Показать свои навыки SQL в практическом, реальном сценарии

Запустить MySQL и импортировать базу данных

В этом шаге вы научитесь как запустить сервер MySQL и импортировать базу данных по персоналу.

  1. Запустите сервер MySQL с использованием команды sudo без пароля:
sudo service mysql start
  1. Перейдите в MySQL-пrompt:
sudo mysql
  1. Импортируйте данные из файла personnel.sql в базу данных MySQL:
SOURCE /home/labex/project/personnel.sql;

Это создаст базу данных personnel и заполнит ее необходимыми таблицами и данными.

Запросить сотрудника с самой высокой зарплатой

В этом шаге вы научитесь использовать подзапрос для извлечения имени сотрудника с самой высокой зарплатой.

  1. Создайте новый файл с именем subquery.sql в директории /home/labex/project.
  2. В файле subquery.sql добавьте следующий запрос SQL:
-- Запрос для извлечения сотрудника(ов) с самой высокой зарплатой
SELECT ename AS `Name` FROM emp WHERE sal = (SELECT MAX(sal) FROM emp);

Этот запрос сначала находит максимальную зарплату в таблице emp с использованием подзапроса, а затем выбирает ename (имя сотрудника) сотрудника(ов), у которых есть эта максимальная зарплата.

Вычислить долю сотрудников в департаменте 10

В этом шаге вы научитесь использовать подзапрос для вычисления доли сотрудников в департаменте 10 по сравнению с всей компанией.

  1. В файле subquery.sql добавьте следующий запрос SQL:
-- Запрос для вычисления доли сотрудников в департаменте 10
SELECT d.dname AS Department, COUNT(e.empno) / (SELECT COUNT(empno) FROM emp) AS Proportion
FROM emp e
JOIN dept d ON e.deptno = d.deptno
WHERE d.deptno = 10;

Этот запрос сначала подсчитывает количество сотрудников в департаменте 10 путем объединения таблиц emp и dept. Затем он делит это количество на общее количество сотрудников в таблице emp (с использованием подзапроса) для вычисления доли.

Извлечь сотрудников, работающих в Нью-Йорке

В этом шаге вы научитесь использовать подзапрос для извлечения всех сотрудников, работающих в локации Нью-Йорк.

  1. В файле subquery.sql добавьте следующий запрос SQL:
-- Запрос для извлечения всех сотрудников, работающих в Нью-Йорке
SELECT e.*
FROM emp e
JOIN dept d ON e.deptno = d.deptno
WHERE d.loc = 'NEW YORK';

Этот запрос объединяет таблицы emp и dept, чтобы извлечь сотрудников, чей департамент находится в Нью-Йорке.

Извлечь сотрудников с зарплатой выше средней по департаменту

В этом шаге вы научитесь использовать подзапрос для извлечения сотрудников, чья зарплата выше средней зарплаты в их соответствующем департаменте.

  1. В файле subquery.sql добавьте следующий запрос SQL:
-- Запрос для извлечения сотрудников, чья зарплата выше средней зарплаты в их соответствующем департаменте
SELECT e.* FROM emp e
JOIN (SELECT deptno, AVG(sal) AS avg_sal FROM emp GROUP BY deptno) AS avg
ON e.deptno = avg.deptno
WHERE e.sal > avg.avg_sal;

Этот запрос сначала вычисляет среднюю зарплату для каждого департамента с использованием подзапроса. Затем он объединяет этот подзапрос с таблицей emp, чтобы выбрать сотрудников, чья зарплата выше средней зарплаты в их департаменте.

После завершения этих шагов в файле subquery.sql должны быть все необходимые SQL-запросы для выполнения требований проекта.

  1. Сохраните файл.
  2. В MySQL-пrompt выполните следующую команду для выполнения скрипта subquery.sql:
SOURCE /home/labex/project/subquery.sql;

Вы должны увидеть следующий вывод:

Результат выполнения SQL-запроса
✨ Проверить решение и практиковаться

Резюме

Поздравляем! Вы завершили этот проект. Вы можете практиковаться в более многих лабораторных работах в LabEx, чтобы улучшить свои навыки.