Операція об'єднання ⇐ ПредыдущаяСтр 6 из 6
Об'єднання двох таблиць містить ті рядки, що є або в першій, або в другій, або в обох таблицях. Об'єднання ( UNION ) відношень А та В можна отримати в результаті їх злиття з утворенням одного відношення з виключенням кортежів-дублікатів Відношення А та В мають бути сумісні за об'єднанням, тобто мати однакову кількість полів із співпадаючими типами даних Реляційна алгебра: А UNION В Оператор SQL: SELECT * FROM A UNION SELECT * FROM B;
Операція взяття різниці Різниця ( EXCEPT ) двох відношень А та В складається з кортежів, які є у відношенні А, але відсутні у відношенні В. Різницеюдвох таблиць А є В є таблиця, що містить всі рядки, які присутні в таблиці А, але відсутні в таблиці S. Відношення А та В мають бути сумісні за об'єднанням. Реляційна алгебра: A MINUS B Операція SQL: SELECT * FROM A EXCEPT ( SELECT * FROM B; SELECT * FROM А WHERE NOT EXISTS (SELECT * FROM В WHERE А.а1=В.b1 AND B.b2=A.a2 AND…); Операція перетину Операція перетину ( INTERSECT ) визначає відношення, яке містить кортежі, присутні як у відношенні А, так і у відношенні В. Відношення А та В мають бути сумісні за об'єднанням Перетином двох таблиць R та S є таблиця, що містить всі рядки, присутні в обох вихідних таблицях одночасно. Реляційна алгебра: A INTERSECT B SQL:
SELECT * FROM A INTERSECT SELECT * FROM B;
SELECT * FROM А, В WHERE А.a1=В.b1 AND А.a2=В.b2 AND … ; SELECT * FROM А WHERE А.a1 IN (SELECT В.b1 FROM В WHERE В.b1=А.a1) AND А.a2 IN (SELECT В.b2 FROM В WHERE В.b2=А.a2) AND …;
Декартів добуток таблиць Декартів добуток АxВ двох відношень (двох таблиць) визначає нове відношення - результат конкатенації (тобто зчеплення) кожного кортежу (кожного запису) із відношення А з кожним кортежем (кожним записом) з відношення В . Для одержання декартова добутку кількох таблиць треба указати у фразі FROM перелік таблиць, що перемножуються, а у фразі SELECT - усі їхні стовпці. Реляційна алгебра: A TIMES B SQL: SELECT A.Поле1, A.Поле2, …, B...Поле1, B.Поле2, … FROM A, B;
SELECT A.Поле1, A.Поле2, …, B...Поле1, B.Поле2, … FROM A CROSS JOIN B;
Операція з'єднання З'єднання - це підмножина декартова добутку З'єднання -це процес, коли дві або більш за таблицю об'єднуються в одну В SQL для завдання типу з'єднання таблиць в логічному наборі записів, з якого вибиратиметься необхідна інформація, використовується операція JOIN в реченні FROM Формат операции: FROMім’я_таблиці_1{INNER | LEFT | RIGHT} JOIN ім’я_таблиці_2ON умова_з'єднання Різновиди операторів join та операцій з'єднання: - cross join - inner join - outer join Оператор CROSS JOINповертає декартів добуток таблиць. Для отримання повного декартова добутку в списку вибору Selectвказують ALL (*). Select * From T1 cross join T2;
Виконання Q-з’єднання забезпечує операторINNER JOIN. Select * FromT1 inner joinT2onT1.A=T2.C; Виконання природного з’єднання забезпечує операторINNER JOIN. Select * FromT1inner joinT2onT1.A = T2.А; SelectT1.*, Т2.* FromT1, T2whereT1.A = T2.А; Зовнішнє з'єднання(OUTER JOIN)схоже на внутрішнє, але в результуючий набір даних включаються також записи провідної таблиці з'єднання, які об'єднуються з порожньою множиною записів іншої таблиці. Яка з таблиць буде провідною, визначає вид з'єднання. LEFT OUTER JOIN - ліве зовнішнє з'єднання, провідною є таблиця, розташована зліва від виду з'єднання. RIGHT OUTER JOIN- праве зовнішнє з'єднання, провідна таблиця розташована праворуч від виду з'єднання. FULL OUTER JOIN –повне зовнішнє з'єднання, за якого у результуюче відношення поміщаються всі кортежі з обох відношень, а для позначення неспівпадаючих значень кортежів в ньому використовуються визначники NULL. Операція ділення Операція ділення може бути реалізована реченням SELECT з корельованими вкладеними підзапитами з використанням предикату EXISTS. Реляційна алгебра: A(X,Y) DEVIDE BY B(Y) Оператор SQL: SELECT DISTINCTA.X FROMA WHERE NOT EXIST (SELECT* FROMB WHERE NOT EXIST (SELECT * FROMAasA1 WHEREA1.X = A.X ANDA1.Y = B.Y)); Такі конструкції необхідні у запитах зі словом “всі”. Приклад. Вибрати імена та прізвища клієнтів, які купили всі товари (товари всіх назв). SELECT DISTINCTКлієнт.Прізвище, Клієнт.Ім’я FROMКлієнт WHERE NOT EXIST (SELECT* FROMТовар WHERE NOT EXIST (SELECT* FROMУгода WHEREУгода.КодТовару = Товар.КодТовару ANDУгода.КодКлієнта = Клієнт.КодКлієнта));
©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.
|