Вы можете использовать подзапрос в любом месте, где разрешена таблица, и вы просто читаете таблицу, например, предложения FROM
или JOIN
. Это называется производной таблицей . Это ваш третий пример. Поскольку он должен быть только для чтения, вы не можете использовать его в качестве цели для UPDATE
или DELETE
(но вы можете присоединиться к подзапросу в запросе UPDATE
или DELETE
).
Вы можете использовать подзапрос везде, где разрешено выражение. Подзапрос должен выбрать одно значение и должен возвращать не более одной строки (если он теперь возвращает строки, он оценивается как NULL
). Ограничением является то, что вы не можете использовать подзапрос в предложении WHERE
запроса UPDATE
или DELETE
, нацеленного на ту же таблицу; по этой причине вам необходимо присоединиться к подзапросу (см. Вы не можете указать целевую таблицу для обновления в предложении FROM ).
Это означает, что подзапрос можно использовать в SELECT
список, в предложении WHERE
и в предложении HAVING
. Даже в предложении ON
, хотя я редко видел такие примеры.
Вы можете использовать подзапрос вместо списка значений в выражении IN
, например
SELECT Salary
FROM Employee
WHERE id in (SELECT Emp_id FROM Employee_Department WHERE Dept_id = 100)
Однако, по моему опыту, MySQL часто плохо оптимизирует их, и их лучше записывать как объединения:
SELECT e.Salary
FROM Employee AS e
JOIN Employee_Department AS d ON e.id = d.emp_id
WHERE d.dept_id = 100;
Запрос SELECT
также может использоваться в качестве источника данных в запрос INSERT
:
INSERT INTO low_salary_employees
SELECT employee_id
FROM Employee
WHERE Salary < (SELECT MAX(Salary)/10 FROM Employee)