русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Особливості багатотабличних запитів


Дата добавления: 2015-07-09; просмотров: 785; Нарушение авторских прав


Найважливішою особливістю запитів SQL є їхня здатність визначати зв'язки між декількома таблицями й виводити інформацію з них у термінах цих зв'язків. Такі операції називаються об'єднанням, що є одним з видів операцій у реляційних БД - адже це є основою реляційного підходу до зберігання даних у таблицях. Використовуючи об'єднання, відбувається безпосереднє зв'язування інформації з будь-яким номером таблиці, і, таким чином, створюються зв'язки між порівнянними частинами даних.

При багатотабличному запиті, таблиці, представлені у вигляді списку в команді FROM, відокремлюються друг від друга комами. Предикат запиту може посилатися до будь-якого стовпця будь-якої зв'язаної таблиці й, отже, може використатися для зв'язку ними. Звичайно предикат порівнює значення в стовпцях різних таблиць, щоб визначити, чи задовольняє WHERE установленій умові. До цього імена таблиць у запитах опускалися, тому запитувалася тільки одна таблиця одночасно. Навіть при запиті з декількох таблиць допускається опускати їхні імена, якщо, звичайно, вони різні. Тепер же виникає необхідність використання імен стовпців і таблиць, оскільки в багатотабличному запиті можуть виникати неоднозначності.

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

SELECT TEACHERS.TFAM, PREDMET.PNAME

FROM TEACHERS, PREDMET

WHERE TEACHERS.TNUM = PREDMET. TNUM;

Результат цього запиту представлений нижче:

TFAM PNAME

---------------------------------------------

Викулина Фізика

Костыркин Хімія

Казанко Математика

Позднякова Економіка

Загарийчук Філософія

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



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

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

У свою чергу, об'єднання в багатотабличних запитах, які використають предикати, засновані на рівностях, називаються об'єднаннями по рівності. Об'єднання по рівності це найбільш загальний вид об'єднання, однак, існують й інші види об'єднань - фактично можна використати кожної з реляційних операторів. Прикладом іншого виду об'єднання може служити наступний запит:

SELECT TEACHERS.TFAM, PREDMET.PNAME

FROM TEACHERS, PREDMET

WHERE TEACHERS.TFAM < PREDMET.PNAME

AND TEACHERS.TFAM BETWEEN 'К' AND 'С';

Результат цього запиту такий:

TFAM PNAME

-------------------------------------------

Костыркин Фізика

Костыркин Хімія

Костыркин Математика

Костыркин Філософія

Костыркин Економіка

Казанко Фізика

Казанко Хімія

Казанко Математика

Казанко Філософія

Казанко Економіка

Познякова Фізика

Познякова Хімія

Познякова Філософія

Познякова Економіка

У цьому випадку запит навряд чи буде мати практичне значення - з його допомогою виводиться інформація про викладачів, прізвище яких за алфавітом розташоване раніше, ніж найменування навчального предмета з таблиці PREDMET, при цьому вибираються викладачі із прізвищем, що розміщене між літерами К и С.

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

SELECT TEACHERS.TFAM, USP.OCENKA

FROM TEACHERS, PREDMET, USP

WHERE TEACHERS.TNUM = PREDMET.TNUM

AND PREDMET.PNUM = USP.PNUM;

У результаті буде одержано:

TFAM OCENKA

-----------------------------------

Викулина 5

Казанко 4

Казанко 4

Позднякова 3

Загарийчук 5

Таким чином, при об'єднанні таблиць, мабуть, добре проглядається логіка зв'язку між даними й можна більше не обмежуватися переглядом однієї таблиці в кожен момент часу. Крім того, об'єднання дозволяє робити складні порівняння між будь-якими полями будь-якого числа таблиць і використати отримані результати для того, щоб вирішувати - яку інформацію хотілося б бачити.



<== предыдущая лекция | следующая лекция ==>
Прості запити й правила їхнього виконання | Об'єднання таблиць


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 1.211 сек.