|
Программирование >> Руководство по sql
from authors aul, authors au2
В этих результатах достаточно сложно разобраться и они не кажутся правильными. Чтобы прояснить ситуацию, давайте сначала устраним повторяющиеся строки для трех авторов (Straight, Stringer и Karsen). Для этого используем в списке выбора ключевое слово DISTINCT. SQL: select distinct aul.au fname,aul.au lname, aul.zip from authors aul, authors au2 where aul.city = Oakland and aul.zip = au2.zip Результат: au fname Dick Dirk Livia Marjorie Stearns au lname Straight Stringer Karsen Green MacFeather 94609 94609 94609 94618 94612 Теперь в результате нет повторяющихся строк, но при этом в нем просто перечисляются все авторы, живущие в Окленде, а не только имеющие одинаковые почтовые коды. Что происходит? При самоообъединении все значения почтовых кодов сравниваются сами с собой и поэтому в результат автоматически попадают все авторы из Окленда. Чтобы устранить из результата авторов, чьи почтовые коды совпадают только с их же собственными кодами, в предложение WHERE нужно добавить дополнительное условие: SQL: select distinct aul.au fname,aul.au Iname, aul.zip from authors aul, authors au2 where aul.city = Oakland and aul.zip = au2.zip and aul.au id != au2.au id Результат: au fname Dick Dirk Livia au lname Straight Stringer Karsen 94609 94609 94609 Если не использовать в запросе ключевое слово DISTINCT, в результате снова появятся повторяющиеся строки: SQL: select aul.au fname,aul.au lname, aul.zip from authors aul, authors au2 where aul.city = Oakland and aul.zip = au2.zip and aul.au id != au2.au id Результат: au fname Dirk Dirk Dick Dick Livia Livia au lname Stringer Stringer Straight Straight Karsen Karsen 94609 94609 94609 94609 94609 94609 Устранение дублирующихся строк особенно важно, когда требуется узнать сколько? , а не кто именно? Использование при самообъединении оператора неравенства в предыдущем примере для устранения повторяющихся строк при самообъединении использовался оператор неравенства. Вместо него также может применяться ключевое слово NOT. Выражение NOT имя столбца = имястолбца эквивалентно выражению 1шя столбца != имястолбца. Таким образом предыдущий запрос можно записать в следующем виде: SQL: select distinct aul.au fname,aul.au lname, aul.zip from authors aul, authors au2 where aul.city = Oakland and aul.zip = au2.zip and not aul.au id = au2.au id В качестве другого примера использования при самообъединении оператора неравенства рассмотрим запрос, с помощью которого находятся значения идентификаторов книг и авторов для всех книг, написанных в соавторстве. Другими словами, находятся все строки в таблице titleauthors с одинаковыми значениями titlejd, но разными значениями auid. SQL: select distinct tl.title id, tl.au id from titleauthors tl, titleauthors t2 where tl.title id = t2.title id and tl.au id != t2.au id order by tl.title id
Объединение нескольких таблиц Таблица titleauthors в нашей базе данных хорошо иллюстрирует ситуацию, когда может потребоваться объединение более двух таблиц. Для получения полной информации о книгах и их авторах в случае базы данных bookbiz необходимо объединить три таблицы. Например, чтобы найти названия всех книг определенного типа (tradcook) и имена их авторов, нужно выполнить следующий запрос: SQL: select au lname, au fname, title from authors a, titles t, titleauthors ta where a.au id = ta.au id and t.title id = ta.title id and t.type= trad cook Результат: au lname au fname title OLeary Michael Sushi, Anyone? Gringlesby Burt Sushi, Anyone? Yokomoto Akiko Sushi, Anyone? Blotchet-Halls Reginald Fifty Years in Buckingham Palace Kitchens Panteley Sylvia Onions, Leeks, and Garlic: Cooking Secrets of the Mediterranean В структуре нашей базы данных titleauthors используется в качестве промежуточной таблицы для объединения таблиц authors и titles. Такое трехступенчатое объединение необходимо даже для выяснения такого простого факта, кто написал какую книгу. Несколько условий объединения почти всегда соединяются с помошью оператора AND, как, например, в предыдущем примере. Оператор OR в этом случае используется крайне редко, поскольку получаемые с его помощью условия недостаточно офаничивают объединение.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |