Методические указания по их использованию. Пособие содержит большое количество примеров на использование операторов sql, которые могут быть полезны как на этапе освоения материала, так и выступать в качестве вопросов для самопроверки



Download 441,57 Kb.
bet22/71
Sana15.01.2023
Hajmi441,57 Kb.
#899634
TuriМетодические указания
1   ...   18   19   20   21   22   23   24   25   ...   71
Bog'liq
Методичка SQL(14) (оптимизация)

Результат




А

В

102

102

104

104

106

106

A




B

102




101

104




102

106




104

107




106







108



Рис. 3.4. R1 INNER JOIN R2
Как вы можете видеть, строка из R1 соединяется со строкой из R2, если их значения одинаковы. Поэтому в результате возвращаются значения 102, 104 и 106. Значение 107 из таблицы R1 не имеет соответствий в таблице R2, и поэтому не включается в результат. Аналогично, значения 101 и 108 из таблицы R2 не встречаются в таблице R1, поэтому и они тоже не включаются в набор.
Данная форма эквивалентна следующему запросу с условием WHERE
SELECT А, В FROM R1, R2 WHERE А = В;

3.4.2. Внешнее соединение.


Внешние соединения отличаются от внутренних тем, что могут возвращать строки, соответствующие условию и некоторые из тех, что не соответствуют ему.

3.4.2.1. Левое внешнее соединение.


В левом внешнем соединении результатом являются все строки левой таблицы, вне зависимости от того, имеют ли они подходящую пару в правой таблице. Но какая, же из них левая, а какая правая? Оказывается, это таблицы, указанные слева и справа от ключевых слов OUTER JOIN. Например, в следующей команде, R1 — левая таблица, а R2 — правая, и задано левое внешнее объединение.
SELECT А, В
FROM R1 LEFT OUTER JOIN R2 ON А=В;
Рисунок демонстрирует результаты такого соединения.

Результат




А

В

102

102

104

104

106

106

107

NULL



A




B

102




101

104




102

106




104

107




106







108



Рис. 3.5. R1 LEFT OUTER JOIN R2
Заметьте, что все значения из таблицы R1 включены в результат, так как она является левой таблицей. Значение 107, не встречающееся в таблице R2, тоже включено в результат, однако в строке вместе с ним нет значения из R2, оно пустое(NULL).

3.4.2.2. Правое внешнее соединение.


В правом внешнем соединении результатом являются все строки правой таблицы, вне зависимости от того, имеют ли они подходящее соответствие в левой таблице. Другими словами, правое соединение работает так же, как и левое, с тем лишь отличием, что возвращаются все строки из правой таблицы.
SELECT A, B
FROM R1 RIGHT OUTER JOIN R2 ON A=B

В приведённом примере R1 по-прежнему является левой таблицей, а R2 — правой, поскольку именно в таком порядке они указаны по отношению к ключевым словам OUTER JOIN. Поэтому результат соединения содержит все строки таблицы R2 и строки таблицы R1, соответствующие условию, если такие имеются (см. Рис. 3.6.).



Результат




А

В

NULL

101

102

102

104

104

106

106

NULL

108



A




B

102




101

104




102

106




104

107




106







108



Рис. 3.6. R1 RIGHT OUTER JOIN R2

Правое внешнее соединение противоположно левому. На одинаковых таблицах — левой R1 и правой R2— результаты правого и левого внешних объединений сильно различаются. На этот раз возвращаются все значения таблицы R2. Значения 101 и 108, не встречающиеся в R1, тоже включены в результат — в виде пустого значения в соответствующем поле. Опять-таки, строка включается в результат, несмотря на отсутствие значений в таблице R1.


3.4.2.3. Полное внешнее соединение.


В полном внешнем соединении результатом являются строки обеих таблицы, вне зависимости от того, имеют ли они соответствия в другой таблице. Другими словами, оно работает так же, как левое и правое, но на этот раз возвращаются значения обеих таблиц. Рассмотрим пример:
SELECT А, В
FROM R1 FULL OUTER JOIN R2 ON А=В;
Опять же, R1 — левая таблица, а R2 — правая, хотя на этот раз это не так важно. Полное внешнее coединение возвратит строки из всех таблиц, включая и те, что соответствуют условию, если такие найдутся (см. Рис. 3.7.).


Результат




А

В

NULL

101

102

102

104

104

106

106

107

NULL

NULL

108
A




B

102




101

104




102

106




104

107




106







108



Рис. 3.7. R1 FULL OUTER JOIN R2
Полное внешнее соединение — это комбинация левого и правого соединения. К сожалению, по крайней мере в одной из систем баз данных, они вызовут ошибку. В MySQL, которая не поддерживает FULL OUTER JOIN вопреки стандарту SQL, результатом будет синтаксическая ошибка: SQL Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'OUTER JOIN entries ON …'
Различие между внутренними и внешними соединениями.
Результаты внешнего соединения всегда включают в себя результаты соответствующего внутреннего соединения, а также не соответствующие условию строки из левой, правой или обеих таблиц — в зависимости от типа соединения.
Различие между левым и правым внешним соединением лишь в том, что в первом возвращаются все строки левой таблицы с соответствиями из правой, а во втором — наоборот, все строки правой таблицы с соответствиями из левой.
В то же время, полное внешнее объединение всегда включает результаты, как левого, так и правого объединения.

3.4.2.4. Перекрёстное соединение.


В перекрёстном соединении каждая строка из одной таблицы соединяется с каждой строкой из другой таблицы. Отличительной чертой перекрёстного соединения является отсутствие условия ON, как вы можете заметить из следующего запроса:
SELECT A, B FROM R1 CROSS JOIN R2



A


B
102

101
104


102

06

104
107


106
108





Результат













А

В




Продолжение

102

101




106

101

102

102




106

102

102

104




106

104

102

106




106

106

102

108




106

10

104

101




107

101

104

102




107

102

104

104




107

104

104

106




107

106

104

108




107

108




Рис. 3.8. R1 CROSS JOIN R2
Как можно видеть, перекрестное соединение эквивалентно декартову произведению. Перекрёстные соединения могут быть полезны, но используются чрезвычайно редко. Они применяются для генерации табличной структуры, содержащей все возможные комбинации двух наборов значений (в нашем примере, значений полей двух таблиц; это полезно при генерации тестовых данных или поиске недостающих значений).

3.4.3. Реальные примеры соединений.


Внутреннее соединение.

Пример 21.


Получить информацию о стоимости и количестве каждого продукта на складе


SELECT Продукты.Продукт, Наличие.Количество, Наличие.Цена
FROM Продукты JOIN Наличие
ON Продукты.ID_Продукта = Наличие.Продукт;

Результат





Download 441,57 Kb.

Do'stlaringiz bilan baham:
1   ...   18   19   20   21   22   23   24   25   ...   71




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish