← К оглавлению занятия

Занятие 27. Практикум 7

📁 Блок: SQL / MySQL / Подзапросы и CTE ⏱️ Время изучения: ~90 мин 🎯 Сложность: Практикум
#join #where #null #in #select #as #create

⚡ Кратко: примеры

  • Сотрудники без привилегий — три способа.
  • Заказы в Las Vegas от выбранных сотрудников.
  • Клиенты из компаний A–F и перевозчик №3.

💻 Рабочие примеры

Пример 1. Сотрудники без привилегий — LEFT JOIN

USE northwind;

SELECT e.first_name, e.last_name
FROM employees AS e
LEFT JOIN employee_privileges AS ep ON e.id = ep.employee_id
WHERE ep.employee_id IS NULL;

LEFT JOIN сохраняет всех сотрудников; фильтр IS NULL оставляет только тех, у кого нет записи в employee_privileges.

Пример 2. Сотрудники без привилегий — подзапрос

USE northwind;

SELECT first_name, last_name
FROM employees
WHERE id NOT IN (
    SELECT employee_id FROM employee_privileges
);

Пример 3. Сотрудники без привилегий — CTE

USE northwind;

WITH privileged AS (
    SELECT employee_id FROM employee_privileges
)
SELECT first_name, last_name
FROM employees
WHERE id NOT IN (SELECT employee_id FROM privileged);

Пример 4. Заказы в Las Vegas от выбранных сотрудников — подзапрос

USE northwind;

SELECT *
FROM orders
WHERE ship_city = 'Las Vegas'
  AND employee_id IN (
      SELECT id
      FROM employees
      WHERE first_name LIKE '%e%'
         OR job_title = 'Sales Representative'
  );

Пример 5. Заказы в Las Vegas от выбранных сотрудников — CTE

USE northwind;

WITH selected_employees AS (
    SELECT id
    FROM employees
    WHERE first_name LIKE '%e%'
       OR job_title = 'Sales Representative'
)
SELECT *
FROM orders
WHERE ship_city = 'Las Vegas'
  AND employee_id IN (SELECT id FROM selected_employees);