У SQL підзапит можна просто визначити як запит в іншому запиті. Іншими словами, ми можемо сказати, що підзапит — це запит, вбудований у пункт WHERE іншого запиту SQL. Важливі правила для підзапитів:
- Ви можете розмістити підзапит у ряді пропозицій SQL: ДЕ речення, речення HAVING, речення FROM. Підзапити можна використовувати з операторами SELECT, UPDATE, INSERT, DELETE разом із оператором виразу. Це може бути оператор рівності або оператор порівняння, наприклад =,>, =, <= і оператор Like.
- Підзапит – це запит всередині іншого запиту. Зовнішній запит називається as основний запит а внутрішній запит називається as підзапит .
- Підзапит зазвичай виконується першим, якщо в підзапиті їх немає співвідношення з основний запит , коли є співвідношення, аналізатор приймає рішення на льоту на який запит виконати пріоритет і відповідно використовує вихідні дані підзапиту.
- Підзапит має бути в дужках.
- Підзапити знаходяться в правій частині оператора порівняння.
- СОРТУВАТИ ЗА команда не можна використовувати в підзапиті. GROUPBY Команда може використовуватися для виконання тієї ж функції, що й команда ORDER BY.
- Використовуйте однорядкові оператори з однорядковими підзапитами. Використовуйте багаторядкові оператори з багаторядковими підзапитами.
Синтаксис: Для підзапитів немає загального синтаксису. Однак підзапити найчастіше використовуються з оператором SELECT, як показано нижче:
SELECT column_name FROM table_name WHERE column_name expression operator ( SELECT COLUMN_NAME from TABLE_NAME WHERE ... );>
Зразок таблиці :
БАЗА ДАНИХ
для циклу в c
| ІМ'Я | ROLL_NO | МІСЦЕЗНАХОДЖЕННЯ | НОМЕР ТЕЛЕФОНУ |
|---|---|---|---|
| ОЗП | 101 | Ченнаї | 9988775566 |
| Радж | 102 | Коїмбатор | 8877665544 |
| Сасі | 103 | Мадурай | 7766553344 |
| Лікування | 104 | Салем | 8989898989 |
| суматхі | 105 | Канчіпурам | 8989856868 |
СТУДЕНТ
| ІМ'Я | ROLL_NO | РОЗДІЛ |
|---|---|---|
| Лікування | 104 | А |
| суматхі | 105 | Б |
| Радж | 102 | А |
Зразки запитів
послідовність фібоначчі java
:
- Щоб відобразити NAME, LOCATION, PHONE_NUMBER студентів із таблиці DATABASE, розділ якої A
Select NAME, LOCATION, PHONE_NUMBER from DATABASE WHERE ROLL_NO IN (SELECT ROLL_NO from STUDENT where SECTION=’A’);>
- Пояснення: перший підзапит виконує SELECT ROLL_NO від STUDENT, де SECTION='A' повертає ROLL_NO з таблиці STUDENT, у якій SECTION дорівнює 'A'. Потім зовнішній запит виконує його та повертає NAME, LOCATION, PHONE_NUMBER з таблиці DATABASE студента, чий ROLL_NO повертається з внутрішнього підзапиту. Вихід:
| ІМ'Я | ROLL_NO | МІСЦЕЗНАХОДЖЕННЯ | НОМЕР ТЕЛЕФОНУ |
| Лікування | 104 | Салем | 8989898989 |
| Радж | 102 | Коїмбатор | 8877665544 |
- Приклад запиту вставки:
Таблиця1: Студент1
| ІМ'Я | ROLL_NO | МІСЦЕЗНАХОДЖЕННЯ | НОМЕР ТЕЛЕФОНУ | |
|---|---|---|---|---|
| ОЗП | 101 | Ченнаї | 9988773344 | |
| Раджу | 102 | Коімбатор | 9090909090 | |
| Лікування | 103 | Салем | 8989898989 |
Таблиця2: Студент2
| ІМ'Я | ROLL_NO | МІСЦЕЗНАХОДЖЕННЯ | НОМЕР ТЕЛЕФОНУ | |
|---|---|---|---|---|
| Радж | 111 | Ченнаї | 8787878787 | |
| Поки | 112 | Мумбаї | 6565656565 | |
| Шрі | 113 | Коімбатор | 7878787878 |
- Щоб вставити Student2 в таблицю Student1:
INSERT INTO Student1 SELECT * FROM Student2;>
- Вихід:
| ІМ'Я | ROLL_NO | МІСЦЕЗНАХОДЖЕННЯ | НОМЕР ТЕЛЕФОНУ | |
|---|---|---|---|---|
| ОЗП | 101 | Ченнаї | 9988773344 | |
| Раджу | 102 | Коімбатор | 9090909090 | |
| Лікування | 103 | Салем | 8989898989 | |
| Радж | 111 | Ченнаї | 8787878787 | |
| Поки | 112 | мумбаї | 6565656565 | |
| Шрі | 113 | Коімбатор | 7878787878 |
- Видалити студентів із таблиці Student2, rollno яких таке ж, як і в таблиці Student1, і має розташування як chennai
DELETE FROM Student2 WHERE ROLL_NO IN ( SELECT ROLL_NO FROM Student1 WHERE LOCATION = ’chennai’);>
- Вихід:
1 row delete successfully.>
- Відобразити таблицю Student2:
| ІМ'Я | ROLL_NO | МІСЦЕЗНАХОДЖЕННЯ | НОМЕР ТЕЛЕФОНУ | |
|---|---|---|---|---|
| Поки | 112 | Мумбаї | 6565656565 | |
| Шрі | 113 | Коімбатор | 7878787878 |
- Щоб оновити ім’я студентів до гіків у таблиці Student2, розташування яких таке ж, як Raju,Ravi у таблиці Student1
UPDATE Student2 SET NAME=’geeks’ WHERE LOCATION IN ( SELECT LOCATION FROM Student1 WHERE NAME IN (‘Raju’,’Ravi’));>
- Вихід:
1 row updated successfully.>
- Відобразити таблицю Student2:
| ІМ'Я | ROLL_NO | МІСЦЕЗНАХОДЖЕННЯ | НОМЕР ТЕЛЕФОНУ | |
|---|---|---|---|---|
| Поки | 112 | Мумбаї | 6565656565 | |
| вундеркінди | 113 | Коімбатор | 7878787878 |