Перейти к содержимому
шпаргалка.
Esc
навигацияоткрыть⌘Jпредпросмотр
На этой странице

Запросы и операции

Все темы Systems Analyst

Какие виды JOIN запросов вы знаете?

В SQL существует несколько типов JOIN запросов:

  1. INNER JOIN: Возвращает строки из двух таблиц, которые имеют соответствующие значения в обеих таблицах.

  2. LEFT JOIN (или LEFT OUTER JOIN ): Возвращает все строки из левой таблицы и соответствующие строки из правой таблицы. Если нет соответствия, то значения в правой таблице будут NULL.

  3. RIGHT JOIN (или RIGHT OUTER JOIN ): Возвращает все строки из правой таблицы и соответствующие строки из левой таблицы. Если нет соответствия, то значения в левой таблице будут NULL.

  4. FULL JOIN (или FULL OUTER JOIN ): Возвращает все строки из обеих таблиц. Если нет соответствия, то значения будут NULL в соответствующей таблице.

  5. CROSS JOIN: Возвращает декартово произведение двух таблиц, то есть комбинацию всех строк из одной таблицы с каждой строкой из другой таблицы.

Эти типы JOIN позволяют объединять данные из разных таблиц по определенным условиям, что является мощным инструментом для работы с реляционными базами данных.


Напишите JOIN для получения сотрудников и названий их отделов.

Даны две таблицы:

Таблица “Employees”:

  • employee_id

  • employee_name

  • department_id

Таблица “Departments”:

  • department_id

  • department_name

Напишите SQL-запрос для выбора всех сотрудников и названий их отделов, при условии, что у сотрудника указан department_id, который совпадает с department_id в таблице Departments.

SQL запрос:

SELECT e.employee_name, d.department_name
FROM Employees e
JOIN Departments d ON e.department_id = d.department_id;

Этот запрос соединяет таблицы Employees и Departments по department_id и выбирает имена сотрудников и названия их отделов.


Задача SQL. Дают таблицы. Напишите SELECT с такими-то условиями запроса (задача на GROUP BY).

Дана таблица “Orders”:

  • order_id

  • customer_id

  • order_date

  • order_amount

Напишите SQL-запрос для вычисления суммарного заказанного объема (order_amount) для каждого клиента (customer_id) за каждый год (используя год из столбца order_date).

SQL запрос:

SELECT customer_id, YEAR(order_date) AS order_year, SUM(order_amount) AS total_amount
FROM Orders
GROUP BY customer_id, YEAR(order_date);

Этот запрос группирует данные по customer_id и году заказа (извлеченному из столбца order_date), вычисляя общий заказанный объем (total_amount) для каждого клиента за каждый год.


Назовите все способы в SQL выбрать данные из первой таблицы, которых нет во второй таблице (NOT IN, NOT EXISTS и др).

В SQL существует несколько способов выбрать данные из первой таблицы, которых нет во второй таблице. Вот основные из них:

  1. NOT IN :
    SELECT column_list
    FROM table1
    WHERE column_name NOT IN (SELECT column_name FROM table2);

    NOT IN требует внимания к NULL: если подзапрос вернул NULL, несовпавшее сравнение может дать UNKNOWN, и строка не попадёт в WHERE. Для поиска отсутствующих совпадений часто проще использовать NOT EXISTS.

  2. NOT EXISTS :
    SELECT column_list
    FROM table1 t1
    WHERE NOT EXISTS (SELECT 1 FROM table2 t2 WHERE t2.column_name = t1.column_name);

    Этот способ использует предикат NOT EXISTS, который проверяет, существует ли подзапрос (в данном случае, совпадение по column_name в table2) и возвращает строки из table1, для которых подзапрос не вернул результат.

  3. LEFT JOIN с IS NULL :
    SELECT t1.column_list
    FROM table1 t1
    LEFT JOIN table2 t2 ON t1.column_name = t2.column_name
    WHERE t2.column_name IS NULL;

    Здесь используется LEFT JOIN для соединения table1 и table2 по column_name, и затем в WHERE условие проверяется, что вторая таблица не содержит совпадений (т.е., t2.column_name IS NULL).


Чем LEFT JOIN отличается от FULL JOIN?

В SQL операторы LEFT JOIN и FULL JOIN являются разновидностями операции объединения таблиц (JOIN). Основное различие между ними заключается в том, как они обрабатывают строки, которые не имеют совпадений между соединяемыми таблицами:

  1. LEFT JOIN (или LEFT OUTER JOIN ):
    • Возвращает все строки из левой таблицы (table1), включая строки, которые не имеют соответствия в правой таблице (table2).

    • Если для строки из table1 нет совпадающей строки в table2, то в результате соединения для table2 будут добавлены NULL значения.

    • По сути, LEFT JOIN сохраняет все строки из левой таблицы и соответствующие им строки из правой таблицы (если они есть).

    Пример:

    SELECT *
    FROM table1
    LEFT JOIN table2 ON table1.id = table2.id;
  2. FULL JOIN (или FULL OUTER JOIN ):
    • Возвращает все строки из обеих таблиц (table1 и table2), даже если для них нет соответствующих строк в другой таблице.

    • Если для строки из одной таблицы нет совпадающей строки в другой таблице, то в результате соединения для соответствующей таблицы будут добавлены NULL значения.

    Пример:

    SELECT *
    FROM table1
    FULL JOIN table2 ON table1.id = table2.id;

Таким образом, основное различие между LEFT JOIN и FULL JOIN заключается в том, что LEFT JOIN сохраняет все строки из левой таблицы, а FULL JOIN сохраняет все строки из обеих таблиц, даже если для них нет совпадающих строк в другой таблице.

Эта страница была полезной?