русс | укр

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

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

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

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


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

Інші об'єднання таблиць по рівності


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


Величезна безліч багатотабличних запитів заснована на стосунках предок/потомок, але|та| в SQL| не потрібний, щоб|аби| зв'язані стовпці були парою "зовнішній ключ|джерело| – первинний ключ|джерело|". Будь-які два стовпці з|із| двох таблиць можуть бути зв'язаними стовпцями, якщо лише|тільки| вони мають порівнянних типів|типи| даних.

Об'єднання таблиць по нерівності. Термін "об'єднання" застосовується до будь-якого запиту, який об'єднує дані з|із| двох таблиць бази даних шляхом порівняння значень в двох стовпцях цих таблиць. Найпоширенішими є об'єднання, створені на основі рівності зв'язаних стовпців (об'єднання по рівності). Крім того, SQL| дозволяє об'єднувати таблиці за допомогою інших операцій порівняння. Наприклад, отримати|одержувати| всі коди дисциплін яким студентом з|із| кодом 1 була отримана|одержувати| оцінка більша, ніж по дисципліні з|із| кодом 1.

SELECT| Marks1|.SubjNo

FROM| Marks| AS| Marks1|, Marks| AS| Marks2|

WHERE| Marks1|.Mark > Marks2|.Mark

AND| Marks2|.SubjNo = 1 AND| Marks1|.StNo = 1

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

Повні|цілковиті| імена стовпців. У учбовій базі даних є|наявний| декілька випадків, коли дві таблиці містять|утримують| стовпці з|із| однаковими іменами. Наприклад, стовпці з|із| ім'ям GrNo| є|наявний| в таблицях Groups| і Students|.

Щоб|аби| виключити різночитання, при вказівці стовпців необхідно використовувати їх повні|цілковиті| імена. Повне|цілковите| ім'я стовпця містить|утримує| ім'я стовпця і ім'я таблиці, в якій він знаходиться|перебуває|. Повні|цілковиті| імена двох стовпців GrNo| в учбовій базі даних будуть такими:



Groups|.GrNo Students|.GrNo

У операторові SELECT| замість простих імен стовпців завжди можна використовувати повні|цілковиті| імена. Таблиця, задана в повному|цілковитому| імені стовпця, повинна, звичайно, відповідати одній з таблиць, заданих в пропозиції|реченні| FROM|.

Читання всіх стовпців. Як вже говорилося|мовилося| раніше, оператор SELECT| * використовується для читання всіх стовпців таблиці, вказаної в пропозиції|реченні| FROM|. У багатотабличному запиті зірочка означає вибір всіх стовпців зі|із| всіх таблиць, вказаних в пропозиції|реченні| FROM|.

Самооб'едіненія. Деякі багатотабличні запити використовують стосунки, що існують|наявний| усередині|всередині| однієї з таблиць. Передбачимо|припускатимемо|, наприклад, що потрібно вивести список імен всіх викладачів і їх керівників. Кожному викладачеві відповідає один рядок в таблиці Teachers|, а стовпець ChiefNo| містить|утримує| ідентифікатор викладача, що є керівником. Стовпцю ChiefNo| слід було б бути зовнішнім ключем|джерелом| для таблиці, в якій зберігаються дані про керівників. І він ним, фактично, є|з'являється| – це зовнішній ключ|джерело| для самої таблиці Teachers|.

Для об'єднання таблиці з|із| самою собою в SQL| застосовується саме такий підхід: використання "віртуальної копії". Замість того щоб|аби| насправді зробити копію таблиці, SQL| дозволяє вам послатися на неї, використовуючи інше ім'я, яке називається псевдонімом таблиці.

Наприклад: вивести список всіх викладачів і їх керівників.

SELECT| Teachers|. TName|, Chiefs|.TName

FROM| Teachers|, Teachers| Chiefs|

WHERE| Teachers|. ChiefNo| = Chiefs|.TNo

Псевдоніми таблиць. Як вже було сказано в попередньому параграфі, псевдоніми таблиць необхідні в запитах, що включають самообъединения|. Проте|однак| псевдонім можна використовувати в будь-якому запиті (наприклад, якщо запит стосується таблиці іншого користувача або якщо ім'я таблиці дуже довге і використовувати його в повних|цілковитих| іменах стовпців утомливо|стомливий|).

Зовнішнє об'єднання таблиць. Операція об'єднання в SQL| сполучає|з'єднує| інформацію з|із| двох таблиць, формуючи пари зв'язаних рядків з|із| цих двох таблиць. Об'єднану|з'єднану| таблицю утворюють пари тих рядків з|із| різних таблиць, в|біля| яких в зв'язаних стовпцях містяться|утримуються| однакові значення. Якщо рядок однієї з таблиць не має пари, то такий вигляд|вид| об'єднання, званий внутрішнім об'єднанням, може привести до неочікуваних|несподіваних| результатів (втраті деяких даних в результаті|внаслідок| запиту). Для створення|створіння| об'єднань таблиць, що мають неоднакові значення в стовпцях, на основі яких здійснюється зв'язок, застосовують зовнішнє об'єднання таблиць найбільш повно представлене|уявляти| в стандарті SQL2|.

 

Література:

1. Джеймс Р. Грофф, Пів Н. Вайнберг. SQL|: повне|цілковите| керівництво: пер.с англ. –К|.: Видавнича група BHV|, 2000.–608с. Стор. 31–39,69–166.

 

 

1.2 Об'єднання і стандарт SQL2|

 

У стандарті SQL2| був визначений абсолютно|цілком| новий метод підтримки зовнішніх об'єднань, який не спирався|обпирався| ні на одну популярну СУБД. У специфікації стандарту SQL2| підтримка зовнішніх об'єднань здійснювалася в пропозиції|реченні| FROM| з|із| ретельно розробленим синтаксисом, що дозволяв користувачеві точно визначити, як вихідні|початкові| таблиці мають бути об'єднані|з'єднані| в запиті. Розширена пропозиція|речення| FROM| підтримує також операцію UNION| над таблицями і допускає складні комбінації запитів на об'єднання операторів SELECT| і об'єднань таблиць.

 

1.2.1 Внутрішні об'єднання в стандарті SQL2|

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

Наприклад: вивести список прізвищ студентів, і назви груп, в яких вони вчаться|.

SELECT| StName|, GrName|

FROM| Students| INNER| JOIN| Groups|

ON| Students|.GrNo = Groups|.GrNo

(У цих простих двохтабличних об'єднаннях весь вміст пропозиції|речення| WHERE| просто перейшов в пропозицію|речення| ON|, і пропозиція|речення| ON| не додає|добавляє| нічого нового в мову|язик| SQL|.

Стандарт SQL2| допускає ще один варіант запиту на просте внутрішнє об'єднання таблиць Students| і Groups|. Оскільки|тому що| зв'язані стовпці цих таблиць мають однакові імена і порівнюються на предмет рівності (що робиться|чинить| досить часто), то можна використовувати альтернативну форму пропозиції|речення| ON|, в якій задається список імен зв'язаних стовпців:

SELECT| StName|, GrName|

FROM| Students| INNER| JOIN| Groups| USING| (GrNo|)

Нижче приведений синтаксис оператора JOIN|:

1. природне з'єднання|сполука|.

FROM| спецификация_таблиц|.,

таблица1|

NATURAL| {INNER|FULL|[OUTER|]|LEFT[OUTER|]|RIGHT[OUTER|]}JOIN|

таблица2| .

2. з'єднання|сполука| з використанням вираження|виразу|.

FROM| спецификация_таблицы|.,

таблица1|

{INNER||[OUTER|] FULL||[OUTER|]LEFT||[OUTER|]RIGHT|} JOIN|

таблица2|

ON| умова | USING|(список_столбцов|).

3. об'єднання або декартовий твір|добуток|.

FROM| спецификация_таблицы|.,

таблица1| {UNION| | CROSS| JOIN|} таблица2|.

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

SELECT| StName|, GrName|

FROM| Students| NATURAL| INNER| JOIN| Groups|

 

1.2.2 Зовнішні об'єднання в стандарті SQL2|

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

SELECT| Chief|.TName, SubOrdinate|.TName

FROM| Teachers| AS| Chief| FULL| OUTER| JOIN| Teachers| AS| SubOrdinate|

ON| Chief|.TNo = SubOrdinate|.TChiefNo

Результат такого запиту (дані з|із| Додатка|застосування| А) приведений на мал. 10.1.

 

Chief.TName   SubOrdinate.TName  
NULL   Іванов  
Іванов   Петров  
Петров   Стрільців  
Петров   Сидоров  
Сидоров   NULL  
Стрільців   NULL  

 

мал. 10.1 Результатом такого запиту на зовнішнє об'єднання.

 

Таблиця результатів запиту міститиме|утримуватиме| по одному рядку для кожної зв'язаної пари начальник/подчиненный, а також по одному рядку для кожного незв'язаного запису для начальника або підлеглого, розширеною значеннями NULL| в стовпцях іншої таблиці.

Ключове|джерельне| слово OUTER|, так само як і ключове|джерельне| слово INNER|, в стандарті SQL2| не є обов'язковим. Тому попередній запит можна, було б переписати таким чином:

SELECT| Chief|.TName, SubOrdinate|.TName

FROM| Teachers| AS| Chief| FULL| JOIN| Teachers| AS| SubOrdinate|

ON| Chief|.TNo = SubOrdinate|.TChiefNo

По слову FULL| СУБД сама визначає, що запрошується зовнішнє об'єднання.

Цілком природно, що в стандарті SQL2| ліве і праве зовнішні об'єднання позначаються|значать| словами LEFT| і RIGHT| замість слова FULL|. Ось|от| варіант того ж запиту, що визначає ліве зовнішнє об'єднання:

SELECT| Chief|.TName, SubOrdinate|.TName

FROM| Teachers| AS| Chief| LEFT| OUTER| JOIN| Teachers| AS| SubOrdinate|

ON| Chief|.TNo = SubOrdinate|.TChiefNo

В результаті|внаслідок| такого запиту (дані з|із| Додатка|застосування| А.) буде отримано|одержувати| наступне|таке| відношення|ставлення| (мал. 10.2).

 

Chief.TName   SubOrdinate.TName  
Іванов   Петров  
Петров   Стрільців  
Петров   Сидоров  
Сидоров   NULL  
Стрільців   NULL  

 

мал. 10.2 Результатом такого запиту на зовнішнє об'єднання

 

1.2.3 Перехресні об'єднання і запити на об'єднання в SQL2|

Розширена пропозиція|речення| FROM| в стандарті SQL2| підтримує також два інших способу з'єднання|сполуки| даних з|із| двох таблиць – декартовий твір|добуток| і запити на об'єднання. Строго|суворий| кажучи, жоден з них не є операцією "об'єднання", але|та| вони підтримуються в стандарті SQL2| за допомогою тих же самих пропозицій|речень|, що і внутрішні і зовнішні об'єднання. Ось|от| запит, що створює декартовий твір|добуток| таблиць Students| і Groups|:

SELECT| *

FROM| Students| CROSS| JOIN| Groups|

 

1.2.4 Багатотабличні об'єднання в стандарті SQL2|

Одна з крупних переваг розширеної пропозиції|речення| FROM| полягає в тому, що воно дає єдиний стандарт для визначення як внутрішніх і зовнішніх об'єднань, так і творів|добутків| і запитів на об'єднання. Іншим, навіть ще важливішою|поважною| перевагою цієї пропозиції|речення| є те, що воно забезпечує дуже ясну і чітку специфікацію об'єднань три і чотирьох таблиць, а також творів|добутків| і запитів на об'єднання. Для побудови|шикування| цих складних об'єднань будь-які вирази описані раніше, можуть бути поміщені|ув'язнені| в круглі дужки. Результуюче вираження|вираз|, у свою чергу|в свою чергу|, можна використовувати для створення|створіння| інших виразів об'єднання, неначебто|начебто| воно було простим таблицею. Точно так, як і SQL| дозволяє за допомогою круглих дужок комбінувати різні арифметичні операції (+, – * і /) і будувати складні вирази, стандарт SQL2| дає можливість|спроможність| створювати складні вирази для об'єднань.

 



<== предыдущая лекция | следующая лекция ==>
Умови пошуку | 


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


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

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

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


 


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

 
 

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

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