Язык структурных запросов sql введение
![]()
|
Select S.номер_поставщика, p.номер_детали, рейтинг from S Inner Join P on S.город=P.город или запросом, написанным с отклонением от стандарта ANSI Select S.*,P.* from S, P where S.город=P.город 3. Соединение таблиц с дополнительным условием. Пример. Выдать все комбинации информации о поставщиках и деталях, расположенных в одном городе, опустив поставщиков с рейтингом = 20. Select S.номер_поставщика, p.номер_детали, рейтинг from S Cross Join P where S.город=P.город and S.рейтинг<>20
Подготовьте запрос и проверьте полученный результат. 4. Соединение таблицы с ней самой. Пример. Выдать все пары поставщиков из одного города. Select one.номер_поставщика, two.номер_поставщика from S one Cross Join S two where one.город = two.город and one.номер_поставщика < two.номер_поставщика
Подготовьте запрос и проверьте полученный результат. Замечание: замена фразы Cross на Inner в этом и предыдущем примере результата не меняет. 5. Внутреннее соединение Пример. Выдать для каждой поставки номер поставщика, его фамилию и количество деталей. Select S.номер_поставщика, S.фамилия, SP.количество from SP inner join S on S.номер_поставщика=SP.номер_поставщика или Select S.номер_поставщика, S.фамилия, SP.количество from SP natural inner join S
Подготовьте запрос и проверьте полученный результат. 6. Соединение трех таблиц. Пример. Выдать все пары названий городов таких, что какой-либо поставщик, находящийся в первом из этих городов, поставляет деталь, хранимую в другом городе. Select distinct S.город, P.город from SP inner join S on S.номер_поставщика = SP.номер_поставщика inner joinPon P.номер_детали = SP.номер_детали
Подготовьте запрос и проверьте полученный результат. Замечание: еще раз приведем для сравнения запрос, написанный с отклонением от стандарта ANSI и дающим тот же результат Select distinct S.город, P.город from S, SP, P where S.номер_поставщика = SP.номер_поставщика and P.номер_детали = SP.номер_детали и отметим еще раз, что при написании запросов предпочтение следует отдавать конструкциям стандарта ANSI. 7. Простое внешнее соединение двух таблиц. Пример левого внешнего соединения. Select S.номер_поставщика, S.фамилия, SP.количество from S left outer join SP on (S.номер_поставщика=SP.номер_поставщика) Добавление ключевого слова outer перед именем таблицы SP превращает ее в подчиненную таблицу. Результатом этого внешнего соединения будет получение сведений обо всех поставщиках, независимо делали ли они поставки.
Подготовьте запрос и проверьте полученный результат. Сравните с результатом получения внутреннего соединения. Полное внешнее соединение даст аналогичный результат, правое - результат, аналогичный внутреннему соединению. 8. Внешнее соединение внутреннего соединения с третьей таблицей. Для получении внешнего соединения будем использовать представление (View). Представление можно рассматривать как хранимый запрос, на основании которого создается объект базы данных. Этот объект схож с таблицей, но в его содержимом динамически отражаются только те записи, которые были заданы при создании. Создается представление командой Createview Create view имя_представления as запрос, а удаляется командой Drop view. create view z1 as select sp.номер_поствщика, sp.номер_детали, p.название, p.цвет, p.вес from SP join P on SP.номер_детали = P.номер_детали where цвет in ('Красный', 'Зеленый'); select S.n_post, S.name, z1.n_det, z1.name, z1.cvet, z1.ves from s left join z1 on(s.n_post=z1.n_post) Первым оператором выполняет внутреннее соединение таблиц SP и P, а затем оператором Select выполняется внешнее соединение как комбинирование этой информации с данными из главной таблицы S. Результат:
Подготовьте запрос и проверьте полученный результат. V. Использование значений oid-столбца Для нахождения в таблице дубликата значения можно использовать в самосоединении скрытый oid-столбцец. Условие x.oid != y.oid, заданное в следующем примере эквивалентно следующему утверждению: строка x не является той же самой, что и строка y. Пример. В таблице описания деталей найти детали с одинаковым весом. Select x.номер_детали, x.название, x.вес from P x cross join P y where x.вес = y.вес and x.oid != y.oid
Подготовьте запрос и проверьте полученный результат. VI. Подзапросы Оператор select, вложенный в спецификатор where другого оператора select (или одного из операторов insert, delete, update), называется подзапросом. В состав каждого подзапроса должны входить спецификаторы select и from. Кроме того, каждый подзапрос должен быть заключен в круглые скобки, чтобы указать серверу баз данных на то, что эту операцию следует выполнить первой. Подзапросы бывают коррелированными и некоррелированными. Подзапрос является коррелированным, если его значение зависит от значения, производимого внешним оператором select, который содержит этот подзапрос. Любой другой вид запроса называется некоррелированным. Важное свойство коррелированного подзароса состоит в следующим: так как он зависит от значения результата внешнего оператора select, то должен выполняться повторно по одному разу для каждого значения, производимого внешним оператором select. Некоррелированный подзапрос выполняется только один раз. Подзапрос включается в спецификатор where оператора select с помощью следующих ключевых слов: ALL ANY IN EXISTS |