|
Программирование >> Руководство по sql
from titles where title like Is Anger!) or price between (select price from titles where title like Is Anger%) (select price from titles where title like Life Without*) Еще один способ, который охватывает оба эти случая, заключается в нахождении минимальной и максимальной цен. Как вариант, можно воспользоваться идентификационными номерами книг вместо их названий: SQL: select title, title id, price from titles where price between (select min(price) from titles where title id in (PS2106, PS2091)) (select max(price) from titles where title id in (PS2106, PS2091)) Без подзапросов этот код мог бы выглядеть примерно так: SQL: select tl.title, tl.title id, tl.price from titles tl, titles life, titles anger where life.title like Life% and anger.title like Is Anger% and (tl.price between life.price and anger.price or tl.price between anger.price and life.price) В запрос можно было бы включить и оператор OR, поскольку вы не знаете, какая из цен выще. Скобки гарантируют правильную работу OR (они нужны, чтобы ограничить количество возвращаемых строк, поскольку в этом трехтабличном запросе отсутствуют объединения). Отображение данных в формате электронной таблицы Таблица titleauthors соединяет авторов и названия книг. Поскольку у каждой книги может быть один или несколько авторов, эта таблица содержит двадцать пять строк для семнадцати книг: по одной строке для каждой комбинации автор-название. Десять книг имеют одного автора, щесть книг имеют двух авторов и одна книга имеет трех авторов. Для отображения значений titleid с первым и вторым авторами в одной строке можно воспользоваться следующим коррелированным подзапросом: SQL: select distinct title id, (select au id from titleauthors where au ord = 1 and title id = t.title id) as aul, (select au id from titleauthors where au ord = 2 and title id = t.title id) as au2, from titleauthors t Этот запрос дает следующие результаты:
В зависимости от того, как этот вид подзапроса обрабатывается в ващей системе, может оказаться, что ключевое слово DISTINCT вам не потребуется. Единственную строку с тремя авторами можно отобразить, добавив в предложение SELECT третий коррелированный подзапрос: SQL: select distinct title id (select au id from titleauthors where au ord = 1 and title id = t.titlejd) as aul, (select au id from titleauthors where au ord = 2 and titlejd = t.titlejd) as au2, (select aujd from titleauthors where au ord = 3 and titlejd = t.titlejd) as au3, from titleauthors t Результат: titlejd aul au2 au3 BU1032 409-56-7008 213-46-8915 NULL PS7777 486-29-1786 NULL NULL PC9999 486-29-1786 NULL NULL
Еще один способ получения того же результата заключается в использовании новой таблицы и трех запросов, каждый из которых соответствует первому, второму и третьему авторам. Если соответствующая ячейка пуста, можно добавить комментарий типа попе . В приведенном ниже примере используется временная таблица (хотя она может быть и постоянной): SQL: create table tau order (title id char (6), aul char (11), au2 char (11), au3 char (11)) Во-первых, воспользуемся оператором INSERT для добавления всех строк с первыми (или единственными) авторами: SQL: insert tau order select title id, au id, none, none from titleauthors where au ord = 1 Вот какой результат позволяет получить выполнение оператора SELECT для
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |