Студопедия
Новини освіти і науки:
МАРК РЕГНЕРУС ДОСЛІДЖЕННЯ: Наскільки відрізняються діти, які виросли в одностатевих союзах


РЕЗОЛЮЦІЯ: Громадського обговорення навчальної програми статевого виховання


ЧОМУ ФОНД ОЛЕНИ ПІНЧУК І МОЗ УКРАЇНИ ПРОПАГУЮТЬ "СЕКСУАЛЬНІ УРОКИ"


ЕКЗИСТЕНЦІЙНО-ПСИХОЛОГІЧНІ ОСНОВИ ПОРУШЕННЯ СТАТЕВОЇ ІДЕНТИЧНОСТІ ПІДЛІТКІВ


Батьківський, громадянський рух в Україні закликає МОН зупинити тотальну сексуалізацію дітей і підлітків


Відкрите звернення Міністру освіти й науки України - Гриневич Лілії Михайлівні


Представництво українського жіноцтва в ООН: низький рівень культури спілкування в соціальних мережах


Гендерна антидискримінаційна експертиза може зробити нас моральними рабами


ЛІВИЙ МАРКСИЗМ У НОВИХ ПІДРУЧНИКАХ ДЛЯ ШКОЛЯРІВ


ВІДКРИТА ЗАЯВА на підтримку позиції Ганни Турчинової та права кожної людини на свободу думки, світогляду та вираження поглядів



Вкладені запити.

Зовнішні з'єднання.

З'єднання.

Однією з найбільш важливих операцій, які виконуються над реляційними базами даних, є операція з'єднання (join), що повертає рядки, сформовані із двох або більше різних таблиць і з'єднані в процесі виконання запиту. Щоб обмежити кількість рядків, що повертаються запитом, необхідно використовувати оператор WHERE. Наприклад, якщо в таблицях Prices і Parts є стовпець PartNum, то можна з'єднати рядки, що належать одному товару:

 

SELECT Description, Price FROM Parts, Prices WHERE Parts.PartNum = Prices.PartNum

 

Внутрішні з'єднання не можуть генерувати повне картезіанське з'єднання для таблиць, що з'єднуються. Наприклад, якщо створити з'єднання за допомогою наступного запиту

 

SELECT * FROM Employee, Department

WHERE Employee.DeptNum = Department.DeptNum

 

то при виконанні цього оператора будуть вибрані всі рядки з таблиці Employee, що відповідають рядкам з таблиці Department. При цьому результат не буде включати тих рядків таблиці Department, для яких немає відповідних рядків у таблиці Employee, а також тих рядків з таблиці Employee, для яких відсутні відповідні рядки в таблиці Department.

Щоб створити запит, що повертає рядки, які не мають відповідних рядків в одній із цих таблиць, необхідно використати зовнішнє з'єднання. Наприклад, припустимо, ви хочете вибрати рядки для кожного співробітника, включаючи тих, хто ще не належить ні до якого відділу. Це можна зробити з використанням наступного зовнішнього з'єднання:

 

SELECT * FROM Employee LEFT OUTER JOIN Department

ON Employee.DeptNum = Department.DeptNum

 

У цьому прикладі ми використали LEFT OUTER JOIN, щоб гарантувати, що в результуючій множині будуть представлені всі рядки з лівої таблиці (Employee). Щоб включити всі рядки із правої таблиці, можна використати RIGHT OUTER JOIN, а щоб забезпечити вибір всіх рядків з обох таблиць - FULL OUTER JOIN.

 

Інформацію для оператора WHERE можна одержати шляхом виконання інших запитів, що називаюоться вкладеними запитами (subquery). Вкладений запит може використовуватися із предикатом EXISTS (або NOT EXISTS). Припустимо, ви хочете вибрати список всіх відділів, номерів яких немає в жодному записі таблиці Employee.

 

SELECT DeptName FROM Department

WHERE DeptNum NOT EXISTS (SELECT * FROM Employee)

 

Вкладені запити застосовуються при використанні предикатів IN і NOT IN. Наприклад, за допомогою наступного запиту можна одержати список всіх відділів, які в цей час мають співробітників:

 

SELECT DeptName FROM Department

WHERE DeptNum IN (SELECT DeptNum FROM Employee)

 

Найчастіше вкладені запити використовуються для виконання операцій порівняння із ключовими словами ANY або ALL. Наприклад, якщо списки штатних і позаштатних співробітників розташовуються в різних таблицях і ви хочете скласти список позаштатних співробітників, що одержують більш високу зарплату, ніж постійні співробітники, використайте наступний запит:

 

SELECT Ex.Name FROM Executives Ex

WHERE Ex.Salary > ALL (SELECT Emp.Salary FROM Employee Emp)

 

Аналогічним образом за допомогою модифікатора ANY можна сформувати список позаштатних співробітників, у якому хоча б один позаштатний співробітник одержує більш високу зарплату:

 

SELECT Ex.Name FROM Executives Ex

WHERE Ex.Salary > ANY (SELECT Emp.Salary FROM Employee Emp)


Читайте також:

  1. Вкладені цикли
  2. Теорема про вкладені відрізки.




Переглядів: 1205

<== попередня сторінка | наступна сторінка ==>
Операції, що виконуються над сукупністю даних. | Оператор UPDATE.

Не знайшли потрібну інформацію? Скористайтесь пошуком google:

  

© studopedia.com.ua При використанні або копіюванні матеріалів пряме посилання на сайт обов'язкове.


Генерація сторінки за: 0.003 сек.