Главная страница
Навигация по странице:

  • Select S.* ,P .* from S, P where S.город=P.город 3. Соединение таблиц с дополнительным условием. Пример

  • Select S.номер_поставщика , p.номер_детали , рейтинг from S Cross Join P where S. город =P. город

  • Пример

  • Select S.номер_поставщика , S.фамилия , SP.количество from SP natural inner join S

  • Select distinct S. город , P. город from SP inner join S on S. номер _ поставщика = SP. номер

  • Select distinct S. город , P. город from S, SP, P where S. номер _ поставщика = SP. номер _

  • Select S.номер_поставщика , S.фамилия , SP.количество from S left outer join SP on (S. номер _

  • V. Использование значений oid-столбца

  • sql запросы. Язык структурных запросов sql введение


    Скачать 63.05 Kb.
    НазваниеЯзык структурных запросов sql введение
    Дата20.04.2018
    Размер63.05 Kb.
    Формат файлаdocx
    Имя файлаsql запросы.docx
    ТипМетодические указания
    #41691
    страница3 из 5
    1   2   3   4   5

    SelectS.номер_поставщикаp.номер_детали, рейтинг

    from S

    Inner Join  P  on  S.город=P.город

    или запросом, написанным с отклонением от стандарта ANSI

    Select S.*,P.* from S, P

    whereS.город=P.город

    3. Соединение таблиц с дополнительным условием.

    Пример.

    Выдать все комбинации информации о поставщиках и деталях, расположенных в одном городе, опустив поставщиков с рейтингом = 20.

    SelectS.номер_поставщикаp.номер_детали, рейтинг

    from S

    Cross Join  P    

    where  S.город=P.город  and S.рейтинг<>20

     

    Результат:

    Hомеp_поставщика

    Номер_детали

    Рейтинг

     

    S2

    P2

    10

     

    S2

    P5

    10

     

    S3

    P2

    30

     

    S3

    P5

    30

    Подготовьте запрос и проверьте полученный результат.

    4. Соединение таблицы с ней самой.

    Пример.

    Выдать все пары поставщиков из одного города.

    Selectone.номер_поставщикаtwo.номер_поставщика

    from S one

    Cross Join  S two 

    where  one.город = two.город  and one.номер_поставщика < two.номер_поставщика

     

    Результат:

    Hомеp_поставщика

    Номер_поставщика

     

    S1

    S4

     

    S2

    S3

    Подготовьте запрос и проверьте полученный результат.

    Замечание: замена фразы Cross на Inner в этом и предыдущем примере результата не меняет.

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

    Пример.

    Выдать для каждой поставки  номер поставщика, его фамилию и количество деталей.

     

    SelectS.номер_поставщикаS.фамилияSP.количество

    from SP

    inner join S on S.номер_поставщика=SP.номер_поставщика

     

    или

     

    SelectS.номер_поставщикаS.фамилияSP.количество

    from SP

    natural inner join S

     

    Результат:

    Hомеp_поставщика

    Фамилия

    Количество

     

    S1

    Смит

    300

     

    S1

    Смит

    200

     

    S1

    Смит

    400

     

    S1

    Смит

    200

     

    S1

    Смит

    100

     

    S1

    Смит

    100

     

    S2

    Джонс

    300

     

    S2

    Джонс

    400

     

    S3

    Блейк

    200

     

    S4

    Кларк

    200

     

    S4

    Кларк

    300

     

    S4

    Кларк

    400

    Подготовьте запрос и проверьте полученный результат.

    6. Соединение трех таблиц.

    Пример.

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

    Select_distinct_S._город_,_P._город_from__SP_inner__join_S_on_S._номер___поставщика__=_SP._номер'>Select distinct S.город, P.город

    from SP

    inner join  S   on  S.номер_поставщика = SP.номер_поставщика

    inner joinPonP.номер_детали = SP.номер_детали

     

    Результат:

    s.город

    p.город

     

    Лондон

    Лондон

     

    Лондон

    Париж

     

    Лондон

    Рим

     

    Париж

    Лондон

     

    Париж

    Париж

     

    Париж

    Рим

    Подготовьте запрос и проверьте полученный результат.

    Замечание:  еще раз приведем для сравнения запрос, написанный с отклонением от стандарта ANSI и дающим тот же результат

    Select distinct S.город, P.город

    from S, SP, P

    where S.номер_поставщика = SP.номер_поставщика

    andP.номер_детали = SP.номер_детали

    и отметим еще раз, что при написании запросов предпочтение следует отдавать конструкциям стандарта ANSI.

    7. Простое внешнее соединение двух таблиц.

    Пример левого внешнего соединения.

    SelectS.номер_поставщикаS.фамилияSP.количество

    from S

    left outer join SP  on (S.номер_поставщика=SP.номер_поставщика)

    Добавление ключевого слова outer перед именем таблицы SP превращает ее в подчиненную таблицу. Результатом этого внешнего соединения будет получение сведений обо всех поставщиках, независимо делали ли они поставки.

    Результат:

    Hомеp_поставщика

    Фамилия

    Количество

     

    S1

    Смит

    300

     

    S1

    Смит

    200

     

    S1

    Смит

    400

     

    S1

    Смит

    200

     

    S1

    Смит

    100

     

    S1

    Смит

    100

     

    S2

    Джонс

    300

     

    S2

    Джонс

    400

     

    S3

    Блейк

    200

     

    S4

    Кларк

    200

     

    S4

    Кларк

    300

     

    S4

    Кларк

    400

     

    S5

    Адамс

     

    Подготовьте запрос и проверьте полученный результат. Сравните с результатом получения внутреннего соединения.

    Полное внешнее соединение даст аналогичный результат, правое - результат, аналогичный внутреннему соединению.

    8. Внешнее соединение внутреннего соединения с третьей таблицей.

    Для получении внешнего соединения будем использовать представление (View). Представление можно рассматривать как хранимый запрос, на основании которого создается объект базы данных. Этот объект схож с таблицей, но в его содержимом динамически отражаются только те записи, которые были заданы при создании. Создается представление командой Create view

    Create view имя_представления as запрос,

    а удаляется командой Drop view.

    createview z1 as

    selectsp.номер_поствщикаsp.номер_деталиp.названиеp.цветp.вес

    from SP

    join  PonSP.номер_детали = P.номер_детали

    where  цвет in ('Красный', 'Зеленый');

     

    selectS.n_postS.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.

    Результат:

    Hомеp_пост

    Фамилия

    Номер_дет

    Название

    Цвет

    Вес

    S1

    Смит

    P1

    Гайка

    Красный

    12

    S1

    Смит

    P2

    Болт

    Зеленый

    17

    S1

    Смит

    P4

    Винт

    Красный

    14

    S1

    Смит

    P6

    Блюм

    Красный

    19

    S2

    Джонс

    P1

    Гайка

    Красный

    12

    S2

    Джонс

    P2

    Болт

    Зеленый

    17

    S3

    Блейк

    P2

    Болт

    Зеленый

    17

    S4

    Кларк

    P2

    Болт

    Зеленый

    17

    S4

    Кларк

    P4

    Винт

    Красный

    14

    S5

    Адамс

     

     

     

     

    Подготовьте запрос и проверьте полученный результат.

    V. Использование значений oid-столбца

    Для нахождения в таблице дубликата значения можно использовать в самосоединении скрытый oid-столбцец. Условие x.oid != y.oid, заданное в следующем примере эквивалентно следующему утверждению: строка x не является той же самой, что и строка y.

    Пример.

    В таблице описания деталей найти детали с одинаковым весом.

    Selectx.номер_деталиx.названиеx.вес

    from P x

    cross join P y

    where x.вес = y.вес   and   x.oid != y.oid

     

    Результат:

    номер_детали

    название

    вес

     

    P2

    Болт

    17

     

    P3

    Винт

    17

     

    P1

    Болт

    12

     

    P5

    Кулачок

    12

    Подготовьте запрос и проверьте полученный результат.

    VI. Подзапросы

    Оператор select, вложенный в спецификатор where другого оператора select (или одного из операторов insert, delete, update), называется подзапросом. В состав каждого подзапроса должны входить спецификаторы select и from. Кроме того, каждый подзапрос должен быть заключен в круглые скобки, чтобы указать серверу баз данных на то, что эту операцию следует выполнить первой.

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

    Важное свойство коррелированного подзароса состоит в следующим: так как он зависит от значения результата внешнего оператора select, то должен выполняться повторно по одному разу для каждого значения, производимого внешним оператором select. Некоррелированный подзапрос выполняется только один раз.

    Подзапрос включается в спецификатор where оператора select с помощью следующих ключевых слов:

    ALL

    ANY

    IN

    EXISTS
    1   2   3   4   5


    написать администратору сайта