<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://iu5bmstu.ru/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=81.9.52.28</id>
	<title>Кафедра ИУ5 МГТУ им. Н.Э.Баумана, студенческое сообщество - Вклад [ru]</title>
	<link rel="self" type="application/atom+xml" href="https://iu5bmstu.ru/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=81.9.52.28"/>
	<link rel="alternate" type="text/html" href="https://iu5bmstu.ru/index.php?title=%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/81.9.52.28"/>
	<updated>2026-04-30T04:16:39Z</updated>
	<subtitle>Вклад</subtitle>
	<generator>MediaWiki 1.41.0</generator>
	<entry>
		<id>https://iu5bmstu.ru/index.php?title=SQL-%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D1%8B_%D0%BA_%D1%8D%D0%BA%D0%B7%D0%B0%D0%BC%D0%B5%D0%BD%D1%83_%D0%BF%D0%BE_%D0%A1%D0%9F%D0%90%D0%A1%D0%9E%D0%98_(10_%D1%81%D0%B5%D0%BC%D0%B5%D1%81%D1%82%D1%80)&amp;diff=3887</id>
		<title>SQL-запросы к экзамену по СПАСОИ (10 семестр)</title>
		<link rel="alternate" type="text/html" href="https://iu5bmstu.ru/index.php?title=SQL-%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D1%8B_%D0%BA_%D1%8D%D0%BA%D0%B7%D0%B0%D0%BC%D0%B5%D0%BD%D1%83_%D0%BF%D0%BE_%D0%A1%D0%9F%D0%90%D0%A1%D0%9E%D0%98_(10_%D1%81%D0%B5%D0%BC%D0%B5%D1%81%D1%82%D1%80)&amp;diff=3887"/>
		<updated>2013-06-16T18:21:40Z</updated>

		<summary type="html">&lt;p&gt;81.9.52.28: /* Билет 11 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right; clear:both; margin-right:1.0em;&amp;quot;&amp;gt;__TOC__&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Билет экзамена по [[:Категория:Структурное проектирование АСОИ (10 семестр) | СПАСОИ]] состоит из двух частей:&lt;br /&gt;
# теория;&lt;br /&gt;
# SQL-запрос.&lt;br /&gt;
&lt;br /&gt;
На этой странице собраны все сформированные запросы по билетам.&lt;br /&gt;
&lt;br /&gt;
Странно, что ни в одном билете нет запроса с сортировкой результатов. Возможно, они буду в дополнительных заданиях.&lt;br /&gt;
&lt;br /&gt;
== Схема БД ==&lt;br /&gt;
&lt;br /&gt;
Схема БД используется всё [[СПАСОИ_(10)_-_Лекция_№8_-_SQL#Некоторые возможности языка SQL | та же]], что была в прошлом семестре и на лекциях.&lt;br /&gt;
&lt;br /&gt;
Для написания запросов и проверки их выполнения создана БД в СУБД [http://www.postgresql.org/ PostgreSQL].&lt;br /&gt;
&lt;br /&gt;
Скрипт создания можно загрузить [http://yadi.sk/d/ArwqOGAy5pPfi отсюда].&lt;br /&gt;
&lt;br /&gt;
=== Таблицы БД ===&lt;br /&gt;
&lt;br /&gt;
==== Поставщики ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.s;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika |       imya       | sostoyanie |   gorod&lt;br /&gt;
 -------------------+------------------+------------+------------&lt;br /&gt;
  S5                | Мелисандра       |      65000 | Мадрид&lt;br /&gt;
  S2                | Бран Старк       |      60000 | Мурманск&lt;br /&gt;
  S1                | Якен Хгар        |    1500000 | Йокогама&lt;br /&gt;
  S7                | Сирио Форель     |    1500000 | Йокогама&lt;br /&gt;
  S4                | Джейме Ланнистер |     750000 | Лондон&lt;br /&gt;
  S3                | Серсея Ланнистер |    1200000 | Лондон&lt;br /&gt;
  S8                | Тирион Ланнистер |       2571 | Манчестер&lt;br /&gt;
  S9                | Иванов           |      35000 | Мытищи&lt;br /&gt;
  S10               | Русе Болтон      |      44444 | Баренцбург&lt;br /&gt;
  S11               | Петров Иван      |      35000 | Мытищи&lt;br /&gt;
  S14               | Рендилл Тарли    |    1111111 | Прага&lt;br /&gt;
  S13               | Сэмвелл Тарли    |     999999 | Прага&lt;br /&gt;
  S6                | Оша              |            | Москва&lt;br /&gt;
  S16               | Ходор            |            | Москва&lt;br /&gt;
  S15               | Мелисса Флорент  |     888888 | Стокгольм&lt;br /&gt;
  S12               | Петров Пётр      |      35001 | Мытищи&lt;br /&gt;
  S17               | Томми Версетти   |  123456789 | Майами&lt;br /&gt;
  S18               | Безликий         |          1 | Йокогама&lt;br /&gt;
 (18 rows)&lt;br /&gt;
&lt;br /&gt;
==== Детали ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.p;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_detali |       nazvanie       |     cvet      | ves  |      gorod&lt;br /&gt;
 --------------+----------------------+---------------+------+-----------------&lt;br /&gt;
  P9           | подставка            | синий         |  400 | Нижний Новгород&lt;br /&gt;
  P10          | стойка               | синий         | 2000 | Нижний Новгород&lt;br /&gt;
  P11          | абажур               | синий         |  400 | Нижний Новгород&lt;br /&gt;
  P1           | гайка                | чёрный        |   20 | Лондон&lt;br /&gt;
  P3           | ось                  | белый         | 5000 | Эдинбург&lt;br /&gt;
  P4           | зубчатое колесо      | чёрный        |   50 | Эдинбург&lt;br /&gt;
  P6           | транзистор           | коричневый    |    2 | Токио&lt;br /&gt;
  P7           | печатная плата       | зелёный       |  200 | Токио&lt;br /&gt;
  P8           | диод                 | коричневый    |    1 | Токио&lt;br /&gt;
  P12          | универсальная деталь | универсальный |    1 | Париж&lt;br /&gt;
  P13          | уникальная деталь    | уникальный    |    1 | Бостон&lt;br /&gt;
  P14          | болт                 | серый         |   20 | Ижевск&lt;br /&gt;
  P15          | рама                 | красный       | 3000 | Манчестер&lt;br /&gt;
  P16          | колесо               | белый         | 1500 | Манчестер&lt;br /&gt;
  P5           | втулка               | серый         |  350 | Манчестер&lt;br /&gt;
  P17          | бумага               | белый         |    1 | Астрахань&lt;br /&gt;
  P18          | плитка               | белый         |  300 | Флоренция&lt;br /&gt;
  P19          | орнамент             | серый         |  800 | Флоренция&lt;br /&gt;
  P20          | уголок               | серый         |  100 | Флоренция&lt;br /&gt;
  P21          | гайка 01-01          | серебристый   |   20 | Клин&lt;br /&gt;
  P22          | усиленная рама       | красный       | 3200 | Череповец&lt;br /&gt;
  P23          | винт                 | розовый       |    5 | Ижевск&lt;br /&gt;
  P24          | труселя              | красный       |   20 | Челябинск&lt;br /&gt;
  P25          | штуцерная деталь     | коричневый    |  450 | Череповец&lt;br /&gt;
  P2           | шуруп                | чёрный        |    5 | Лондон&lt;br /&gt;
  P26          | лезвие               | бесцветный    |  120 | Йокогама&lt;br /&gt;
 (26 rows)&lt;br /&gt;
&lt;br /&gt;
==== Изделия ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.j;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_izdelia |       nazvanie        |      gorod&lt;br /&gt;
 ---------------+-----------------------+-----------------&lt;br /&gt;
  J1            | автомобиль            | Магнитогорск&lt;br /&gt;
  J2            | процессор             | Зеленоград&lt;br /&gt;
  J3            | торшер                | Нижний Новгород&lt;br /&gt;
  J4            | универсальное изделие | Париж&lt;br /&gt;
  J5            | уникальное изделие    | Бостон&lt;br /&gt;
  J6            | велосипед 01/23       | Манчестер&lt;br /&gt;
  J7            | изделие из болтов     | Челябинск&lt;br /&gt;
  J8            | шкаф                  | Ярославль&lt;br /&gt;
  J9            | рама 02-01            | Череповец&lt;br /&gt;
  J10           | книга                 | Астрахань&lt;br /&gt;
  J11           | панно 01-03           | Флоренция&lt;br /&gt;
  J12           | велосипед 03-04       | Клин&lt;br /&gt;
  J13           | рама 02-03            | Череповец&lt;br /&gt;
  J14           | штуцер 01-02          | Череповец&lt;br /&gt;
  J15           | велосипед 01-04       | Клин&lt;br /&gt;
  J16           | кружевное бельё       | Челябинск&lt;br /&gt;
  J17           | штуцер 01-03          | Череповец&lt;br /&gt;
  J18           | кинжал                | Йокогама&lt;br /&gt;
 (18 rows)&lt;br /&gt;
&lt;br /&gt;
==== Сборки ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.spj;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika | nomer_detali | nomer_izdelia | kolichestvo&lt;br /&gt;
 -------------------+--------------+---------------+-------------&lt;br /&gt;
  S1                | P6           | J2            |          20&lt;br /&gt;
  S1                | P7           | J2            |           5&lt;br /&gt;
  S2                | P1           | J1            |           4&lt;br /&gt;
  S6                | P4           | J1            |           2&lt;br /&gt;
  S6                | P5           | J1            |           6&lt;br /&gt;
  S3                | P9           | J3            |           1&lt;br /&gt;
  S4                | P10          | J3            |           1&lt;br /&gt;
  S5                | P11          | J3            |           1&lt;br /&gt;
  S2                | P4           | J1            |           8&lt;br /&gt;
  S6                | P3           | J1            |          50&lt;br /&gt;
  S7                | P8           | J2            |          25&lt;br /&gt;
  S1                | P12          | J4            |           1&lt;br /&gt;
  S2                | P12          | J4            |           1&lt;br /&gt;
  S3                | P12          | J4            |           1&lt;br /&gt;
  S4                | P12          | J4            |           1&lt;br /&gt;
  S5                | P12          | J4            |           1&lt;br /&gt;
  S7                | P12          | J4            |           1&lt;br /&gt;
  S7                | P2           | J1            |           1&lt;br /&gt;
  S6                | P2           | J1            |           9&lt;br /&gt;
  S6                | P12          | J4            |           7&lt;br /&gt;
  S1                | P13          | J5            |          14&lt;br /&gt;
  S6                | P14          | J1            |        9000&lt;br /&gt;
  S2                | P14          | J1            |           3&lt;br /&gt;
  S6                | P1           | J1            |          12&lt;br /&gt;
  S8                | P15          | J6            |           1&lt;br /&gt;
  S8                | P16          | J6            |           2&lt;br /&gt;
  S3                | P5           | J6            |          10&lt;br /&gt;
  S10               | P2           | J8            |           4&lt;br /&gt;
  S8                | P1           | J7            |          16&lt;br /&gt;
  S9                | P14          | J7            |           3&lt;br /&gt;
  S11               | P10          | J3            |           2&lt;br /&gt;
  S12               | P15          | J1            |           3&lt;br /&gt;
  S11               | P11          | J3            |           4&lt;br /&gt;
  S10               | P14          | J9            |           5&lt;br /&gt;
  S13               | P17          | J10           |        1001&lt;br /&gt;
  S14               | P17          | J10           |        1111&lt;br /&gt;
  S15               | P17          | J10           |        1010&lt;br /&gt;
  S5                | P18          | J11           |           9&lt;br /&gt;
  S5                | P19          | J11           |           1&lt;br /&gt;
  S5                | P20          | J11           |           4&lt;br /&gt;
  S9                | P14          | J8            |          25&lt;br /&gt;
  S12               | P21          | J12           |          15&lt;br /&gt;
  S11               | P22          | J13           |           9&lt;br /&gt;
  S11               | P1           | J14           |          26&lt;br /&gt;
  S12               | P1           | J14           |          13&lt;br /&gt;
  S12               | P2           | J14           |          54&lt;br /&gt;
  S12               | P23          | J4            |         101&lt;br /&gt;
  S12               | P16          | J15           |          40&lt;br /&gt;
  S7                | P21          | J12           |           3&lt;br /&gt;
  S8                | P21          | J12           |           4&lt;br /&gt;
  S9                | P21          | J12           |           5&lt;br /&gt;
  S1                | P24          | J16           |           1&lt;br /&gt;
  S1                | P15          | J6            |           3&lt;br /&gt;
  S4                | P25          | J17           |           1&lt;br /&gt;
  S17               | P16          | J1            |           4&lt;br /&gt;
  S18               | P26          | J18           |           1&lt;br /&gt;
 (56 rows)&lt;br /&gt;
&lt;br /&gt;
== Готовые запросы ==&lt;br /&gt;
&lt;br /&gt;
Если видите, что тот или иной запрос можно составить короче и рациональней - смело вносите правку.&lt;br /&gt;
&lt;br /&gt;
В трёх билетах в задании на запрос встречается формулировка &amp;quot;&#039;&#039;только и только&#039;&#039;&amp;quot;. Как оказалось, это означает следующее: если холодильники поставляет &#039;&#039;только и только&#039;&#039; Уася, то:&lt;br /&gt;
# кроме Уаси никто не поставляет холодильники;&lt;br /&gt;
# Уася не поставляет ничего, кроме холодильников.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;s&amp;gt;Великий и могучий русский языка, ну что за экономия на бумаге.&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Существующие запросы, естественно, оказались неправильными и их пришлось переписать.&lt;br /&gt;
&lt;br /&gt;
=== Билет 1 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера поставщиков, которые поставляют, по крайней мере, все те детали, которые поставляет поставщик с номером &#039;S2&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nomer_postavshika&lt;br /&gt;
FROM spasoi_ekz.spj SPJX&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT nomer_detali&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJY&lt;br /&gt;
                  WHERE nomer_postavshika = &#039;S2&#039;&lt;br /&gt;
                    AND NOT EXISTS (&lt;br /&gt;
                                    SELECT *&lt;br /&gt;
                                    FROM spasoi_ekz.spj&lt;br /&gt;
                                    WHERE nomer_postavshika = SPJX.nomer_postavshika&lt;br /&gt;
                                      AND nomer_detali = SPJY.nomer_detali&lt;br /&gt;
                                   )&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika&lt;br /&gt;
 -------------------&lt;br /&gt;
  S6&lt;br /&gt;
  S2&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 2 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера деталей и общее их количество для всех номеров деталей, поставляемых более чем одним поставщиком.&lt;br /&gt;
&lt;br /&gt;
Текст запроса, каким его дал Григорьев на лекции, впоследствии исправив его:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali AS &amp;quot;Номер детали&amp;quot;,&lt;br /&gt;
       SUM(kolichestvo) AS &amp;quot;Сколько штук поставляется&amp;quot;,&lt;br /&gt;
       COUNT(DISTINCT nomer_postavshika) AS &amp;quot;Сколько у неё поставщиков&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_postavshika) &amp;gt; 1;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali AS &amp;quot;Номер детали&amp;quot;,&lt;br /&gt;
       kol AS &amp;quot;Сколько штук поставляется&amp;quot;&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT nomer_detali,&lt;br /&gt;
             SUM(kolichestvo) AS kol,&lt;br /&gt;
             COUNT(DISTINCT nomer_postavshika)&lt;br /&gt;
      FROM spasoi_ekz.spj&lt;br /&gt;
      GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_postavshika) &amp;gt; 1&lt;br /&gt;
     ) A;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер детали | Сколько штук поставляется | Сколько у неё поставщиков&lt;br /&gt;
 --------------+---------------------------+---------------------------&lt;br /&gt;
  P1           |                        71 |                         5&lt;br /&gt;
  P10          |                         3 |                         2&lt;br /&gt;
  P11          |                         5 |                         2&lt;br /&gt;
  P12          |                        13 |                         7&lt;br /&gt;
  P14          |                      9036 |                         4&lt;br /&gt;
  P15          |                         7 |                         3&lt;br /&gt;
  P16          |                        46 |                         3&lt;br /&gt;
  P17          |                      3122 |                         3&lt;br /&gt;
  P2           |                        68 |                         4&lt;br /&gt;
  P21          |                        27 |                         4&lt;br /&gt;
  P4           |                        10 |                         2&lt;br /&gt;
  P5           |                        16 |                         2&lt;br /&gt;
 (12 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 3 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера поставщиков, поставляющих детали с номером &#039;P1&#039; для какого-либо изделия в количестве (в поставке) большим, чем средний объём поставок деталей с номером &#039;P2&#039; для этого изделия.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT X.nomer_postavshika &lt;br /&gt;
FROM spasoi_ekz.spj X&lt;br /&gt;
WHERE X.nomer_detali = &#039;P1&#039;&lt;br /&gt;
  AND X.kolichestvo &amp;gt; (&lt;br /&gt;
                       SELECT AVG(kolichestvo)&lt;br /&gt;
                       FROM spasoi_ekz.spj&lt;br /&gt;
                       WHERE nomer_izdelia = X.nomer_izdelia&lt;br /&gt;
                         AND nomer_detali = &#039;P2&#039;&lt;br /&gt;
                      );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но длиннее и нерациональней&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nomer_postavshika&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT *&lt;br /&gt;
      FROM spasoi_ekz.spj&lt;br /&gt;
      WHERE nomer_izdelia IN(&lt;br /&gt;
                             SELECT nomer_izdelia&lt;br /&gt;
                             FROM spasoi_ekz.spj&lt;br /&gt;
                             WHERE nomer_detali = &#039;P1&#039;&lt;br /&gt;
                            )&lt;br /&gt;
        AND nomer_izdelia IN(&lt;br /&gt;
	                     SELECT nomer_izdelia&lt;br /&gt;
	                     FROM spasoi_ekz.spj&lt;br /&gt;
	                     WHERE nomer_detali = &#039;P2&#039;&lt;br /&gt;
	                    )&lt;br /&gt;
     ) A&lt;br /&gt;
WHERE nomer_detali = &#039;P1&#039; AND kolichestvo &amp;gt;&lt;br /&gt;
(&lt;br /&gt;
 SELECT AVG(kolichestvo)&lt;br /&gt;
 FROM (&lt;br /&gt;
       SELECT *&lt;br /&gt;
       FROM spasoi_ekz.spj&lt;br /&gt;
       WHERE nomer_izdelia IN(&lt;br /&gt;
                              SELECT nomer_izdelia&lt;br /&gt;
                              FROM spasoi_ekz.spj&lt;br /&gt;
                              WHERE nomer_detali = &#039;P1&#039;&lt;br /&gt;
                             )&lt;br /&gt;
         AND nomer_izdelia IN(&lt;br /&gt;
                              SELECT nomer_izdelia&lt;br /&gt;
                              FROM spasoi_ekz.spj&lt;br /&gt;
                              WHERE nomer_detali = &#039;P2&#039;&lt;br /&gt;
                             )&lt;br /&gt;
      ) B&lt;br /&gt;
 WHERE nomer_detali = &#039;P2&#039;&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika&lt;br /&gt;
 -------------------&lt;br /&gt;
  S6&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 4 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера изделий, для которых детали поставляет только поставщик с номером ‘S1’.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_izdelia&lt;br /&gt;
FROM spasoi_ekz.spj X&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT *&lt;br /&gt;
                  FROM spasoi_ekz.spj&lt;br /&gt;
                  WHERE nomer_postavshika != &#039;S1&#039;&lt;br /&gt;
                    AND X.nomer_izdelia = nomer_izdelia&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но без EXISTS&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nomer_izdelia&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
WHERE nomer_izdelia IN(&lt;br /&gt;
                       SELECT nomer_izdelia&lt;br /&gt;
                       FROM spasoi_ekz.spj&lt;br /&gt;
                       WHERE nomer_postavshika = &#039;S1&#039;&lt;br /&gt;
                      )&lt;br /&gt;
  AND nomer_izdelia NOT IN(&lt;br /&gt;
                           SELECT nomer_izdelia&lt;br /&gt;
                           FROM spasoi_ekz.spj&lt;br /&gt;
                           WHERE nomer_postavshika != &#039;S1&#039;&lt;br /&gt;
                          );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_izdelia&lt;br /&gt;
 ---------------&lt;br /&gt;
  J5&lt;br /&gt;
  J16&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 5 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих детали с названием &amp;quot;Болт&amp;quot; в количестве (в поставке) большим, чем средний объём всех поставок деталей с номером &#039;P1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                           ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                        JOIN spasoi_ekz.p P&lt;br /&gt;
                           ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                              AND nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
WHERE kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT AVG(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj&lt;br /&gt;
                     WHERE nomer_detali = &#039;P1&#039;&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но без JOIN&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s&lt;br /&gt;
WHERE nomer_postavshika IN (&lt;br /&gt;
                            SELECT nomer_postavshika&lt;br /&gt;
                            FROM spasoi_ekz.spj&lt;br /&gt;
                            WHERE nomer_detali = (&lt;br /&gt;
                                                  SELECT nomer_detali&lt;br /&gt;
                                                  FROM spasoi_ekz.p&lt;br /&gt;
                                                  WHERE LOWER(nazvanie) = LOWER(&#039;Болт&#039;)&lt;br /&gt;
                                                 )&lt;br /&gt;
                              AND kolichestvo &amp;gt; (&lt;br /&gt;
                                                 SELECT AVG(kolichestvo)&lt;br /&gt;
                                                 FROM spasoi_ekz.spj&lt;br /&gt;
                                                 WHERE nomer_detali = &#039;P1&#039;&lt;br /&gt;
                                                )&lt;br /&gt;
                           );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  imya&lt;br /&gt;
 ------&lt;br /&gt;
  Оша&lt;br /&gt;
  Иванов&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 6 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия деталей, поставляемых поставщиком, проживающим в том же городе, где изготавливаются эти детали, для изделия с названием ‘Велосипед 01/23’.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT P.nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                        JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                        JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
WHERE S.gorod = P.gorod&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Велосипед 01/23&#039;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос без JOIN&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nazvanie&lt;br /&gt;
FROM spasoi_ekz.S S, spasoi_ekz.p P, spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE S.gorod = P.gorod&lt;br /&gt;
  AND P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
  AND S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
  AND nomer_izdelia = (&lt;br /&gt;
                       SELECT nomer_izdelia&lt;br /&gt;
                       FROM spasoi_ekz.j&lt;br /&gt;
                       WHERE nazvanie = LOWER(&#039;Велосипед 01/23&#039;)&lt;br /&gt;
                      );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nazvanie&lt;br /&gt;
 ----------&lt;br /&gt;
  рама&lt;br /&gt;
  колесо&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 7 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия изделий, куда входят детали с названием &#039;Болт&#039;, поставляемых поставщиками с именем &#039;Иванов&#039;, в количестве (в поставке) большим, чем средний объём поставок для этого изделия.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT J.nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                        JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                        JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
WHERE imya LIKE &#039;%Иванов%&#039;&lt;br /&gt;
  AND P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
  AND kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT AVG(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj X&lt;br /&gt;
                     WHERE SPJ.nomer_izdelia = X.nomer_izdelia&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё один вариант запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie&lt;br /&gt;
FROM spasoi_ekz.j&lt;br /&gt;
WHERE nomer_izdelia IN (&lt;br /&gt;
                        SELECT nomer_izdelia&lt;br /&gt;
                        FROM (spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                                                   ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                                                      AND imya LIKE &#039;%Иванов%&#039;&lt;br /&gt;
                                                 JOIN spasoi_ekz.p P&lt;br /&gt;
                                                   ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                                      AND nazvanie = LOWER(&#039;Болт&#039;)) A&lt;br /&gt;
                        WHERE kolichestvo &amp;gt; (&lt;br /&gt;
                                             SELECT AVG(kolichestvo)&lt;br /&gt;
                                             FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                                                       ON SPJ.nomer_izdelia = A.nomer_izdelia&lt;br /&gt;
                                            )&lt;br /&gt;
                       );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;И ещё вариант этого же запроса, но длиннее и нерациональней&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT J.nazvanie, kolichestvo&lt;br /&gt;
      FROM spasoi_ekz.s S, spasoi_ekz.p P, spasoi_ekz.j J, spasoi_ekz.spj SPJ&lt;br /&gt;
      WHERE J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
        AND P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
        AND P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
        AND S.imya LIKE &#039;%Иванов%&#039;&lt;br /&gt;
        AND S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
     ) A&lt;br /&gt;
WHERE kolichestvo &amp;gt;&lt;br /&gt;
(&lt;br /&gt;
 SELECT AVG(kolichestvo)&lt;br /&gt;
 FROM spasoi_ekz.spj&lt;br /&gt;
 WHERE nomer_izdelia IN(&lt;br /&gt;
                        SELECT J.nomer_izdelia&lt;br /&gt;
                        FROM spasoi_ekz.s S, spasoi_ekz.p P, spasoi_ekz.j J, spasoi_ekz.spj SPJ&lt;br /&gt;
                        WHERE J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
                          AND P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                          AND P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
                          AND S.imya LIKE &#039;%Иванов%&#039;&lt;br /&gt;
                          AND S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
                       )&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
      nazvanie&lt;br /&gt;
 -------------------&lt;br /&gt;
  шкаф&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 8 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера изделий и общее количество деталей для них, поставляемых поставщиками с именем &#039;Петров&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_izdelia AS &amp;quot;Номер изделия&amp;quot;, SUM(kolichestvo) AS &amp;quot;Количество деталей&amp;quot; &lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                             -- так как &amp;quot;поставщикАМИ&amp;quot; и возможны&lt;br /&gt;
                             -- Иван Петров и Петров Иван, то LIKE %Петров%&lt;br /&gt;
                             AND imya LIKE &#039;%Петров%&#039;&lt;br /&gt;
GROUP BY nomer_izdelia;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер изделия | Количество деталей&lt;br /&gt;
 ---------------+--------------------&lt;br /&gt;
  J4            |                101&lt;br /&gt;
  J3            |                  6&lt;br /&gt;
  J13           |                  9&lt;br /&gt;
  J15           |                 40&lt;br /&gt;
  J1            |                  3&lt;br /&gt;
  J12           |                 15&lt;br /&gt;
  J14           |                 93&lt;br /&gt;
 (7 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 9 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера деталей и общее их количество для всех номеров деталей, которые входят только в одно изделие.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali, SUM(kolichestvo)&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_izdelia) = 1;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali, kol FROM (&lt;br /&gt;
       SELECT nomer_detali, SUM(kolichestvo) AS kol, COUNT(DISTINCT nomer_izdelia) = 1&lt;br /&gt;
       FROM spasoi_ekz.spj&lt;br /&gt;
       GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_izdelia) = 1&lt;br /&gt;
    ) A;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_detali | sum&lt;br /&gt;
 --------------+------&lt;br /&gt;
  P10          |    3&lt;br /&gt;
  P11          |    5&lt;br /&gt;
  P12          |   13&lt;br /&gt;
  P13          |   14&lt;br /&gt;
  P17          | 3122&lt;br /&gt;
  P18          |    9&lt;br /&gt;
  P19          |    1&lt;br /&gt;
  P20          |    4&lt;br /&gt;
  P21          |   27&lt;br /&gt;
  P22          |    9&lt;br /&gt;
  P23          |  101&lt;br /&gt;
  P24          |    1&lt;br /&gt;
  P25          |    1&lt;br /&gt;
  P26          |    1&lt;br /&gt;
  P3           |   50&lt;br /&gt;
  P4           |   10&lt;br /&gt;
  P6           |   20&lt;br /&gt;
  P7           |    5&lt;br /&gt;
  P8           |   25&lt;br /&gt;
  P9           |    1&lt;br /&gt;
 (20 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 10 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих детали с названием &#039;Болт&#039; для изделия с названием &#039;Рама 02-01&#039; в количестве (в поставке) большим, чем минимальное значение поставки детали с номером &#039;P1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
			   ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
			      AND J.nazvanie = LOWER(&#039;Рама 02-01&#039;)&lt;br /&gt;
			 JOIN spasoi_ekz.p P&lt;br /&gt;
			   ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
			      AND P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
			 JOIN spasoi_ekz.s S&lt;br /&gt;
			   ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE kolichestvo &amp;gt; (&lt;br /&gt;
		     SELECT MIN(kolichestvo)&lt;br /&gt;
		     FROM spasoi_ekz.spj &lt;br /&gt;
		     WHERE nomer_detali = &#039;P1&#039;&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Русе Болтон&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 11 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия городов и суммарное состояние проживающих в каждом городе поставщиков, у которых минимальный объём поставки деталей больше 1000.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT gorod, SUM(sostoyanie)&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ &lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
GROUP BY gorod&lt;br /&gt;
HAVING MIN(kolichestvo) &amp;gt; 1000&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT gorod, SUM(sostoyanie)&lt;br /&gt;
FROM spasoi_ekz.s S&lt;br /&gt;
WHERE (	&lt;br /&gt;
       SELECT MIN(kolichestvo)	&lt;br /&gt;
       FROM spasoi_ekz.spj X	&lt;br /&gt;
       WHERE X.nomer_postavshika = S.nomer_postavshika		&lt;br /&gt;
      ) &amp;gt; 1000&lt;br /&gt;
GROUP BY gorod;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Вариант подлиннее для тех, кто не ищет лёгких путей&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT gorod, SUM(sostoyanie)&lt;br /&gt;
FROM spasoi_ekz.s&lt;br /&gt;
WHERE nomer_postavshika IN (&lt;br /&gt;
                            SELECT nomer_postavshika&lt;br /&gt;
                            FROM spasoi_ekz.spj&lt;br /&gt;
                            GROUP BY nomer_postavshika HAVING MIN(kolichestvo) &amp;gt; 1000&lt;br /&gt;
                           )&lt;br /&gt;
GROUP BY gorod;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;!-- а этот запрос выполняет не совсем то и не правильно&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT gorod, sost&lt;br /&gt;
FROM (&lt;br /&gt;
SELECT gorod, SUM(sostoyanie) AS sost, SUM(SPJ.kolichestvo)&lt;br /&gt;
FROM spasoi_ekz.spj, spasoi_ekz.s&lt;br /&gt;
WHERE S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
GROUP BY S.gorod HAVING SUM(SPJ.kolichestvo) &amp;gt; 1000&lt;br /&gt;
) A;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; --&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
    gorod   |   sum&lt;br /&gt;
 -----------+---------&lt;br /&gt;
  Прага     | 2111110&lt;br /&gt;
  Стокгольм |  888888&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 12 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера деталей, поставляемых для какого-либо изделия поставщиком, проживающим в том же городе, где изготавливается это изделие.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali&lt;br /&gt;
FROM spasoi_ekz.spj SPJ, spasoi_ekz.s S, spasoi_ekz.j J&lt;br /&gt;
WHERE SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
  AND S.gorod = J.gorod&lt;br /&gt;
  AND J.nomer_izdelia = SPJ.nomer_izdelia;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_detali&lt;br /&gt;
 --------------&lt;br /&gt;
  P15&lt;br /&gt;
  P16&lt;br /&gt;
  P26&lt;br /&gt;
 (3 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 13 ===&lt;br /&gt;
&lt;br /&gt;
Написать &amp;lt;u&amp;gt;один&amp;lt;/u&amp;gt; запрос SELECT: выдать количества строк в таблице S (Поставщик) 1) с пустыми значениями и 2) непустыми значениями в столбце Состояние.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT COUNT(*) - COUNT(sostoyanie) AS &amp;quot;С пустым состоянием&amp;quot;, &lt;br /&gt;
       COUNT(sostoyanie) AS &amp;quot;С не пустым состоянием&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.s;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но длиннее и нерациональней&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SELECT COUNT(Snull.*) AS &amp;quot;С пустым состоянием&amp;quot;, COUNT(Snotnull.sostoyanie) AS &amp;quot;С не пустым состоянием&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.s Snull RIGHT OUTER JOIN spasoi_ekz.s Snotnull&lt;br /&gt;
                                      ON Snull.nomer_postavshika = Snotnull.nomer_postavshika&lt;br /&gt;
                                         AND Snull.sostoyanie IS NULL;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  С пустым состоянием | С не пустым состоянием&lt;br /&gt;
 ---------------------+-----------------------&lt;br /&gt;
                    2 |                    16&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 14 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют детали только и только для изделия с номером &#039;J1&#039;.&lt;br /&gt;
&lt;br /&gt;
Чтобы продемонстрировать выполнение запроса наглядно, возьмём изделие не &#039;J1&#039;, а &#039;J18&#039;, которое было создано специально для этого запроса. Если оставить &#039;J1&#039;, то наглядности не получится, так как по нашей схеме БД это изделие не попадает под условие &amp;quot;только и только&amp;quot;, и запрос вернёт пустой результат.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT imya&lt;br /&gt;
FROM spasoi_ekz.s S&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT *&lt;br /&gt;
                  FROM spasoi_ekz.spj&lt;br /&gt;
                  WHERE (&lt;br /&gt;
			 nomer_izdelia != &#039;J18&#039;&lt;br /&gt;
			 AND&lt;br /&gt;
			 nomer_postavshika  = S.nomer_postavshika)&lt;br /&gt;
		      OR&lt;br /&gt;
		        (&lt;br /&gt;
		         nomer_izdelia = &#039;J18&#039;&lt;br /&gt;
		         AND&lt;br /&gt;
		         nomer_postavshika != S.nomer_postavshika&lt;br /&gt;
			)&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;!-- этот запрос не подходит под &amp;quot;только и только&amp;quot;, подробности в начале страницы&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj A JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON A.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE nomer_izdelia = &#039;J1&#039;&lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT nomer_postavshika&lt;br /&gt;
                  FROM spasoi_ekz.spj&lt;br /&gt;
                  WHERE nomer_izdelia != &#039;J1&#039;&lt;br /&gt;
                    AND nomer_postavshika = A.nomer_postavshika&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       imya&lt;br /&gt;
 ----------------&lt;br /&gt;
  Безликий&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 15 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать наименования изделий, для которых детали поставляют только те поставщики, у которых состояние больше 1000000 у.е.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nazvanie&lt;br /&gt;
FROM spasoi_ekz.j&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
		  SELECT *&lt;br /&gt;
		  FROM spasoi_ekz.spj X JOIN spasoi_ekz.s S&lt;br /&gt;
		                          ON X.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
		  WHERE sostoyanie &amp;lt;= 1000000&lt;br /&gt;
		  AND X.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Вариант этого запроса без NOT EXISTS&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                        JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
WHERE sostoyanie &amp;gt; 1000000&lt;br /&gt;
  AND SPJ.nomer_izdelia NOT IN (&lt;br /&gt;
                                SELECT nomer_izdelia&lt;br /&gt;
                                FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                                                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                                WHERE sostoyanie &amp;lt; 1000000&lt;br /&gt;
                               );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       nazvanie&lt;br /&gt;
 --------------------&lt;br /&gt;
  кружевное бельё&lt;br /&gt;
  уникальное изделие&lt;br /&gt;
  процессор&lt;br /&gt;
 (3 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 16 ===&lt;br /&gt;
Написать запрос SELECT: выдать цвета и для каждого цвета общее количество деталей, входящих в изделие с названием &#039;Панно 01-03&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT cvet AS &amp;quot;Цвет&amp;quot;, SUM(kolichestvo) AS &amp;quot;Деталей&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
			     AND J.nazvanie = LOWER(&#039;Панно 01-03&#039;)&lt;br /&gt;
			JOIN spasoi_ekz.P P&lt;br /&gt;
			  ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
GROUP BY cvet;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Цвет  | Деталей&lt;br /&gt;
 -------+---------&lt;br /&gt;
  белый |       9&lt;br /&gt;
  серый |       5&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 17 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера поставщиков и количество сделанных ими поставок при условии, что среднее число деталей во всех этих поставках больше 1000.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_postavshika AS &amp;quot;Номер поставщика&amp;quot;,&lt;br /&gt;
       COUNT(*) AS &amp;quot;Количество поставок&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
GROUP BY nomer_postavshika HAVING AVG(kolichestvo) &amp;gt; 1000;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_postavshika AS &amp;quot;Номер поставщика&amp;quot;, COUNT(*) AS &amp;quot;Количество поставок&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
WHERE nomer_postavshika IN (&lt;br /&gt;
                            SELECT nomer_postavshika&lt;br /&gt;
                            FROM spasoi_ekz.spj&lt;br /&gt;
                            GROUP BY nomer_postavshika HAVING AVG(kolichestvo) &amp;gt; 1000&lt;br /&gt;
                           )&lt;br /&gt;
GROUP BY nomer_postavshika;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;И ещё вариант запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_postavshika AS &amp;quot;Номер поставщика&amp;quot;, COUNT(*) AS &amp;quot;Количество поставок&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
WHERE (&lt;br /&gt;
       SELECT AVG(kolichestvo)&lt;br /&gt;
       FROM spasoi_ekz.spj X&lt;br /&gt;
       WHERE X.nomer_postavshika = spj.nomer_postavshika&lt;br /&gt;
       ) &amp;gt; 1000&lt;br /&gt;
GROUP BY nomer_postavshika;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;И даже ещё вариант запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nom AS &amp;quot;Номер поставщика&amp;quot;, cnt AS &amp;quot;Количество поставок&amp;quot;&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT S.nomer_postavshika AS nom,&lt;br /&gt;
             COUNT(SPJ.nomer_postavshika) AS cnt,&lt;br /&gt;
             AVG(SPJ.kolichestvo) AS kol&lt;br /&gt;
      FROM spasoi_ekz.s S, spasoi_ekz.spj SPJ&lt;br /&gt;
      WHERE S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
      GROUP BY S.nomer_postavshika&lt;br /&gt;
     ) A&lt;br /&gt;
WHERE kol &amp;gt; 1000;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер поставщика | Количество поставок&lt;br /&gt;
 ------------------+---------------------&lt;br /&gt;
  S13              |                   1&lt;br /&gt;
  S6               |                   7&lt;br /&gt;
  S14              |                   1&lt;br /&gt;
  S15              |                   1&lt;br /&gt;
 (4 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 18 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, имеющих состояние больше 1000 и поставляющих деталь с названием &#039;Гайка 01-01&#039; для изделия с названием &#039;Велосипед 03-04&#039; в количестве (в поставке) большим, чем средний объём поставки, выполненной поставщиками с именем &#039;Иванов&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:2nd dufficulty.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;5px&amp;quot;&amp;gt;&#039;&#039;&#039;Второй по сложности запрос экзамена!&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;4px&amp;quot;&amp;gt;&#039;&#039;&#039;Вот уж не свезло, так не свезло&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                    JOIN spasoi_ekz.j J&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
WHERE sostoyanie &amp;gt; 1000&lt;br /&gt;
  AND P.nazvanie = LOWER(&#039;Гайка 01-01&#039;)&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Велосипед 03-04&#039;)&lt;br /&gt;
  AND kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT AVG(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                       ON SPJ.nomer_postavshika = S.nomer_postavshika &lt;br /&gt;
                     WHERE S.imya = &#039;Иванов&#039;&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Пётр&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 19 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия красных деталей, которые входят только в изделие с названием &#039;Рама 02-03&#039; в количестве, меньшем 10 единиц в поставке.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT X.nazvanie&lt;br /&gt;
FROM spasoi_ekz.p X JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_detali = X.nomer_detali&lt;br /&gt;
WHERE X.cvet = &#039;красный&#039;&lt;br /&gt;
  AND kolichestvo &amp;lt; 10&lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT *&lt;br /&gt;
                  FROM spasoi_ekz.j J JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                                        ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                  WHERE J.nazvanie != LOWER(&#039;Рама 02-03&#039;)&lt;br /&gt;
                    AND X.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант этого же запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT P.nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND cvet = &#039;красный&#039;&lt;br /&gt;
                        JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                              AND J.nazvanie = LOWER(&#039;Рама 02-03&#039;)&lt;br /&gt;
WHERE kolichestvo &amp;lt; 10&lt;br /&gt;
  AND SPJ.nomer_detali NOT IN (&lt;br /&gt;
                               SELECT nomer_detali&lt;br /&gt;
                               FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                                         ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                                                            AND J.nazvanie != LOWER(&#039;Рама 02-03&#039;)&lt;br /&gt;
                              );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     nazvanie&lt;br /&gt;
 ----------------&lt;br /&gt;
  усиленная рама&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 20 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих только белые детали.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT *&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                                            ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                  WHERE nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    AND P.cvet != &#039;белый&#039;&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё один вариант этого же запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND cvet = &#039;белый&#039;&lt;br /&gt;
                        JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE S.nomer_postavshika NOT IN (&lt;br /&gt;
                                  SELECT nomer_postavshika&lt;br /&gt;
                                  FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                                                            ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                                               AND cvet != &#039;белый&#039;&lt;br /&gt;
                                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;И ещё один вариант этого же запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s&lt;br /&gt;
WHERE nomer_postavshika NOT IN  (&lt;br /&gt;
                                 SELECT spj.nomer_postavshika&lt;br /&gt;
                                 FROM spasoi_ekz.spj SPJ, spasoi_ekz.p P&lt;br /&gt;
                                 WHERE SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                   AND p.cvet != &#039;белый&#039;&lt;br /&gt;
                                )&lt;br /&gt;
  AND nomer_postavshika  IN (&lt;br /&gt;
                             SELECT spj.nomer_postavshika&lt;br /&gt;
                             FROM spasoi_ekz.spj SPJ, spasoi_ekz.p P&lt;br /&gt;
                             WHERE SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                               AND p.cvet = &#039;белый&#039;&lt;br /&gt;
                            );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       imya&lt;br /&gt;
 -----------------&lt;br /&gt;
  Рендилл Тарли&lt;br /&gt;
  Сэмвелл Тарли&lt;br /&gt;
  Мелисса Флорент&lt;br /&gt;
  Томми Версетти&lt;br /&gt;
 (4 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 21 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия изделий, для которых детали поставляет только и только поставщик с номером &#039;S1&#039;.&lt;br /&gt;
&lt;br /&gt;
Чтобы продемонстрировать выполнение запроса наглядно, возьмём поставщика не &#039;S1&#039;, а &#039;S18&#039;, который был создан специально для этого запроса. Если оставить &#039;S1&#039;, то наглядности не получится, так как по нашей схеме БД этот поставщик не попадает под условие &amp;quot;&#039;&#039;только и только&#039;&#039;&amp;quot;, и запрос вернёт пустой результат.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie&lt;br /&gt;
FROM spasoi_ekz.j&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT *&lt;br /&gt;
                  FROM spasoi_ekz.spj&lt;br /&gt;
                  WHERE nomer_postavshika != &#039;S18&#039;&lt;br /&gt;
                    AND nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                 )&lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT *&lt;br /&gt;
                  FROM spasoi_ekz.spj&lt;br /&gt;
                  WHERE nomer_postavshika = &#039;S18&#039;&lt;br /&gt;
                    AND nomer_izdelia != J.nomer_izdelia&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       nazvanie&lt;br /&gt;
 --------------------&lt;br /&gt;
  кинжал&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 22 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют только детали с номером &#039;P1&#039; для изделия с именем &#039;Штуцер 01-02&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                             AND J.nazvanie = LOWER(&#039;Штуцер 01-02&#039;)&lt;br /&gt;
                        JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT *&lt;br /&gt;
                  FROM spasoi_ekz.spj X JOIN spasoi_ekz.j J&lt;br /&gt;
                                          ON X.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                  WHERE X.nomer_detali != &#039;P1&#039; &lt;br /&gt;
                    AND j.nazvanie = LOWER(&#039;Штуцер 01-02&#039;)&lt;br /&gt;
                    AND S.nomer_postavshika = X.nomer_postavshika&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- неверный запрос - номер изделия, а не название&lt;br /&gt;
SELECT imya FROM S X&lt;br /&gt;
JOIN SPJ Y ON X.nomer_postavshika=Y.nomer_postavshika&lt;br /&gt;
WHERE X.nomer_postavshika NOT IN (&lt;br /&gt;
                  SELECT DISTINCT nomer_postavshika FROM SPJ Z&lt;br /&gt;
                  WHERE Z.nomer_izdelia != &#039;Штуцер 01-02&#039;&lt;br /&gt;
                  AND Z.nomer_detali!=&#039;P1&#039;);--&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но длиннее и нерациональней&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                             AND J.nazvanie = LOWER(&#039;Штуцер 01-02&#039;)&lt;br /&gt;
                        JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND SPJ.nomer_detali = &#039;P1&#039;&lt;br /&gt;
                        JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE SPJ.nomer_postavshika NOT IN (&lt;br /&gt;
                                    SELECT nomer_postavshika&lt;br /&gt;
                                    FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                                              ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                                                                 AND J.nazvanie = LOWER(&#039;Штуцер 01-02&#039;)&lt;br /&gt;
                                                            JOIN spasoi_ekz.p P&lt;br /&gt;
                                                              ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                                                 AND SPJ.nomer_detali != &#039;P1&#039;&lt;br /&gt;
                              );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Иван&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 23 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют деталь с названием &#039;Винт&#039; в количестве большим 100 единиц в одной поставке и имеют состояние больше среднего по их родному городу.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT S.imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
WHERE P.nazvanie = LOWER(&#039;Винт&#039;)&lt;br /&gt;
  AND SPJ.kolichestvo &amp;gt; 100&lt;br /&gt;
  AND S.sostoyanie &amp;gt; (&lt;br /&gt;
                      SELECT AVG(SS.sostoyanie)&lt;br /&gt;
                      FROM spasoi_ekz.s SS&lt;br /&gt;
                      WHERE SS.gorod = S.gorod&lt;br /&gt;
                     );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Пётр&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 24 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать наименования деталей и общее их количество для всех наименований деталей, изготавливаемых в одном городе.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- С этим запросом возникла неожиданная проблема - задание то ли неполное, то ли неправильное, потому что нельзя однозначно сказать, что по нему требуется сделать.&lt;br /&gt;
&lt;br /&gt;
Так что тут несколько вариантов запросов (кто как понял).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Первый вариант запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie, kol&lt;br /&gt;
FROM spasoi_ekz.p A, (&lt;br /&gt;
                      SELECT X.gorod, SUM(kolichestvo) as kol&lt;br /&gt;
                      FROM spasoi_ekz.p X, spasoi_ekz.spj Y&lt;br /&gt;
                      WHERE Y.nomer_detali = X.nomer_detali&lt;br /&gt;
                      GROUP BY X.gorod&lt;br /&gt;
                     ) B&lt;br /&gt;
WHERE A.gorod = B.gorod;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
        nazvanie       | kol&lt;br /&gt;
 ----------------------+------&lt;br /&gt;
  подставка            |    9&lt;br /&gt;
  стойка               |    9&lt;br /&gt;
  абажур               |    9&lt;br /&gt;
  гайка                |  139&lt;br /&gt;
  ось                  |   60&lt;br /&gt;
  зубчатое колесо      |   60&lt;br /&gt;
  транзистор           |   50&lt;br /&gt;
  печатная плата       |   50&lt;br /&gt;
  диод                 |   50&lt;br /&gt;
  универсальная деталь |   13&lt;br /&gt;
  уникальная деталь    |   14&lt;br /&gt;
  болт                 | 9137&lt;br /&gt;
  рама                 |   69&lt;br /&gt;
  колесо               |   69&lt;br /&gt;
  втулка               |   69&lt;br /&gt;
  бумага               | 3122&lt;br /&gt;
  плитка               |   14&lt;br /&gt;
  орнамент             |   14&lt;br /&gt;
  уголок               |   14&lt;br /&gt;
  гайка 01-01          |   27&lt;br /&gt;
  усиленная рама       |   10&lt;br /&gt;
  винт                 | 9137&lt;br /&gt;
  труселя              |    1&lt;br /&gt;
  штуцерная деталь     |   10&lt;br /&gt;
  шуруп                |  139&lt;br /&gt;
 (25 rows)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
и --&amp;gt;&lt;br /&gt;
В уточнение задания Григорьев сказал следующее: &amp;quot;&#039;&#039;Следует учесть, что в качестве наименования города может выступать переменная, в которую в некоторой программе должно быть занесено конкретное значение перед выполнением запроса&#039;&#039;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
То есть, вообще говоря, задание на запрос неполное, и его можно трактовать так: выдать наименования деталей и общее их количество для всех наименований деталей, изготавливаемых в городе &amp;lt;code&amp;gt;%НАЗВАНИЕГОРОДА%&amp;lt;/code&amp;gt;. Вот эта переменная задаётся где-то в программе, а в БД идёт запрос с уже подставленным конкретным названием. &lt;br /&gt;
&lt;br /&gt;
Этот вариант запроса составлен, например, для Лондона. &lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie, SUM(kolichestvo)&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
WHERE gorod = &#039;Лондон&#039;&lt;br /&gt;
GROUP BY nazvanie;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nazvanie | sum&lt;br /&gt;
 ----------+-----&lt;br /&gt;
  гайка    |  71&lt;br /&gt;
  шуруп    |  68&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 25 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих хотя бы одну белую деталь для изделия с названием &#039;Велосипед 01-04&#039; с объёмом поставки большим, чем средний объём поставки этого поставщика.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                    JOIN spasoi_ekz.j J&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
WHERE cvet = &#039;белый&#039;&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Велосипед 01-04&#039;)&lt;br /&gt;
  AND kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT AVG(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj SPJ&lt;br /&gt;
                     WHERE SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Пётр&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 26 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера красных деталей и количество поставок этих деталей.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT P.nomer_detali AS &amp;quot;Номер детали&amp;quot;, COUNT(kolichestvo) AS &amp;quot;Количество поставок с ней&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.p P, spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
  AND cvet = &#039;красный&#039;&lt;br /&gt;
GROUP BY P.nomer_detali;   &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос через JOIN&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT SPJ.nomer_detali AS &amp;quot;Номер детали&amp;quot;, COUNT(kolichestvo) AS &amp;quot;Количество поставок с ней&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND cvet = &#039;красный&#039;&lt;br /&gt;
GROUP BY SPJ.nomer_detali;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер детали | Количество поставок с ней&lt;br /&gt;
 --------------+---------------------------&lt;br /&gt;
  P15          |                         3&lt;br /&gt;
  P22          |                         1&lt;br /&gt;
  P24          |                         1&lt;br /&gt;
 (3 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 27 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать наименования городов и среднее состояние поставщиков для каждого города, поставляющих детали с названием &#039;Гайка 01-01&#039; для изделия с названием &#039;Велосипед 03-04&#039; в количестве (в поставке) большим, чем минимальный объём поставки, выполненной поставщиком с номером &#039;S1&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:1st dufficulty.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;7px&amp;quot;&amp;gt;&#039;&#039;&#039;Сложнейший запрос экзамена!&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;5px&amp;quot;&amp;gt;&#039;&#039;&#039;Сохрани Джа, вытащить такое&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT S.gorod AS &amp;quot;Город&amp;quot;, AVG(S.sostoyanie) AS &amp;quot;Среднее состояние&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                    JOIN spasoi_ekz.j J&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
WHERE P.nazvanie = LOWER(&#039;Гайка 01-01&#039;)&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Велосипед 03-04&#039;)&lt;br /&gt;
  AND kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT MIN(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj&lt;br /&gt;
                     WHERE nomer_postavshika = &#039;S1&#039;&lt;br /&gt;
                    )&lt;br /&gt;
GROUP BY S.gorod;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
    Город   |   Среднее состояние&lt;br /&gt;
 -----------+-----------------------&lt;br /&gt;
  Мытищи    |    35000.500000000000&lt;br /&gt;
  Йокогама  |  1500000.000000000000&lt;br /&gt;
  Манчестер | 2571.0000000000000000&lt;br /&gt;
 (3 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 28 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия изделий, куда входит хотя бы одна красная деталь весом больше 10 граммов, поставляемая только поставщиком с номером &#039;S1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT J.nazvanie&lt;br /&gt;
FROM spasoi_ekz.j J JOIN spasoi_ekz.spj SPJ1&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ1.nomer_izdelia&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ1.nomer_detali&lt;br /&gt;
WHERE P.ves &amp;gt; 10&lt;br /&gt;
 AND P.cvet = &#039;красный&#039;&lt;br /&gt;
 AND NOT EXISTS (&lt;br /&gt;
                 SELECT SPJ2.nomer_postavshika&lt;br /&gt;
                 FROM spasoi_ekz.spj SPJ2         &lt;br /&gt;
                 WHERE SPJ2.nomer_detali = P.nomer_detali&lt;br /&gt;
	 	   AND SPJ2.nomer_postavshika != &#039;S1&#039;&lt;br /&gt;
                );                     &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     nazvanie&lt;br /&gt;
 -----------------&lt;br /&gt;
  кружевное бельё&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 29 ===&lt;br /&gt;
Написать запрос SELECT: выдать названия деталей, которые входят только и только в состав изделия с названием &#039;Штуцер 01-03&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nazvanie&lt;br /&gt;
FROM spasoi_ekz.p&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT SPJ.nomer_izdelia&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                            ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
                  WHERE (&lt;br /&gt;
                         J.nazvanie != LOWER(&#039;Штуцер 01-03&#039;)&lt;br /&gt;
                         AND&lt;br /&gt;
                         SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                        )&lt;br /&gt;
                     OR (&lt;br /&gt;
                         J.nazvanie = LOWER(&#039;Штуцер 01-03&#039;)&lt;br /&gt;
                         AND&lt;br /&gt;
                         SPJ.nomer_detali != P.nomer_detali&lt;br /&gt;
                        )&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
      nazvanie&lt;br /&gt;
 ------------------&lt;br /&gt;
  штуцерная деталь&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 30 ===&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют, по крайней мере, все те детали, которые поставляет поставщик с номером &#039;S2&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT imya&lt;br /&gt;
FROM spasoi_ekz.s S&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT nomer_detali&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJY&lt;br /&gt;
                  WHERE nomer_postavshika = &#039;S2&#039;&lt;br /&gt;
                    AND NOT EXISTS (&lt;br /&gt;
                                    SELECT *&lt;br /&gt;
                                    FROM spasoi_ekz.spj&lt;br /&gt;
                                    WHERE nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                                      AND nomer_detali = SPJY.nomer_detali&lt;br /&gt;
                                   )&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  imya&lt;br /&gt;
 ------------&lt;br /&gt;
  Оша&lt;br /&gt;
  Бран Старк&lt;br /&gt;
 (2 rows)&lt;br /&gt;
[[Категория:Структурное проектирование АСОИ (10 семестр)]]&lt;/div&gt;</summary>
		<author><name>81.9.52.28</name></author>
	</entry>
	<entry>
		<id>https://iu5bmstu.ru/index.php?title=SQL-%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D1%8B_%D0%BA_%D1%8D%D0%BA%D0%B7%D0%B0%D0%BC%D0%B5%D0%BD%D1%83_%D0%BF%D0%BE_%D0%A1%D0%9F%D0%90%D0%A1%D0%9E%D0%98_(10_%D1%81%D0%B5%D0%BC%D0%B5%D1%81%D1%82%D1%80)&amp;diff=3872</id>
		<title>SQL-запросы к экзамену по СПАСОИ (10 семестр)</title>
		<link rel="alternate" type="text/html" href="https://iu5bmstu.ru/index.php?title=SQL-%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D1%8B_%D0%BA_%D1%8D%D0%BA%D0%B7%D0%B0%D0%BC%D0%B5%D0%BD%D1%83_%D0%BF%D0%BE_%D0%A1%D0%9F%D0%90%D0%A1%D0%9E%D0%98_(10_%D1%81%D0%B5%D0%BC%D0%B5%D1%81%D1%82%D1%80)&amp;diff=3872"/>
		<updated>2013-06-16T12:10:23Z</updated>

		<summary type="html">&lt;p&gt;81.9.52.28: /* Билет 21 */ Необходимо название изделий, оно в таблице J&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right; clear:both; margin-right:1.0em;&amp;quot;&amp;gt;__TOC__&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Билет экзамена по [[:Категория:Структурное проектирование АСОИ (10 семестр) | СПАСОИ]] состоит из двух частей:&lt;br /&gt;
# теория;&lt;br /&gt;
# SQL-запрос.&lt;br /&gt;
&lt;br /&gt;
На этой странице собраны все сформированные запросы по билетам.&lt;br /&gt;
&lt;br /&gt;
Странно, что ни в одном билете нет запроса с сортировкой результатов. Возможно, они буду в дополнительных заданиях.&lt;br /&gt;
&lt;br /&gt;
== Схема БД ==&lt;br /&gt;
&lt;br /&gt;
Схема БД используется всё [[СПАСОИ_(10)_-_Лекция_№8_-_SQL#Некоторые возможности языка SQL | та же]], что была в прошлом семестре и на лекциях.&lt;br /&gt;
&lt;br /&gt;
Для написания запросов и проверки их выполнения создана БД в СУБД [http://www.postgresql.org/ PostgreSQL].&lt;br /&gt;
&lt;br /&gt;
Скрипт создания можно загрузить [http://yadi.sk/d/ArwqOGAy5pPfi отсюда].&lt;br /&gt;
&lt;br /&gt;
=== Таблицы БД ===&lt;br /&gt;
&lt;br /&gt;
==== Поставщики ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.s;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika |       imya       | sostoyanie |   gorod&lt;br /&gt;
 -------------------+------------------+------------+------------&lt;br /&gt;
  S5                | Мелисандра       |      65000 | Мадрид&lt;br /&gt;
  S2                | Бран Старк       |      60000 | Мурманск&lt;br /&gt;
  S1                | Якен Хгар        |    1500000 | Йокогама&lt;br /&gt;
  S7                | Сирио Форель     |    1500000 | Йокогама&lt;br /&gt;
  S4                | Джейме Ланнистер |     750000 | Лондон&lt;br /&gt;
  S3                | Серсея Ланнистер |    1200000 | Лондон&lt;br /&gt;
  S8                | Тирион Ланнистер |       2571 | Манчестер&lt;br /&gt;
  S9                | Иванов           |      35000 | Мытищи&lt;br /&gt;
  S10               | Русе Болтон      |      44444 | Баренцбург&lt;br /&gt;
  S11               | Петров Иван      |      35000 | Мытищи&lt;br /&gt;
  S14               | Рендилл Тарли    |    1111111 | Прага&lt;br /&gt;
  S13               | Сэмвелл Тарли    |     999999 | Прага&lt;br /&gt;
  S6                | Оша              |            | Москва&lt;br /&gt;
  S16               | Ходор            |            | Москва&lt;br /&gt;
  S15               | Мелисса Флорент  |     888888 | Стокгольм&lt;br /&gt;
  S12               | Петров Пётр      |      35001 | Мытищи&lt;br /&gt;
  S17               | Томми Версетти   |  123456789 | Майами&lt;br /&gt;
  S18               | Безликий         |          1 | Йокогама&lt;br /&gt;
 (18 rows)&lt;br /&gt;
&lt;br /&gt;
==== Детали ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.p;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_detali |       nazvanie       |     cvet      | ves  |      gorod&lt;br /&gt;
 --------------+----------------------+---------------+------+-----------------&lt;br /&gt;
  P9           | подставка            | синий         |  400 | Нижний Новгород&lt;br /&gt;
  P10          | стойка               | синий         | 2000 | Нижний Новгород&lt;br /&gt;
  P11          | абажур               | синий         |  400 | Нижний Новгород&lt;br /&gt;
  P1           | гайка                | чёрный        |   20 | Лондон&lt;br /&gt;
  P3           | ось                  | белый         | 5000 | Эдинбург&lt;br /&gt;
  P4           | зубчатое колесо      | чёрный        |   50 | Эдинбург&lt;br /&gt;
  P6           | транзистор           | коричневый    |    2 | Токио&lt;br /&gt;
  P7           | печатная плата       | зелёный       |  200 | Токио&lt;br /&gt;
  P8           | диод                 | коричневый    |    1 | Токио&lt;br /&gt;
  P12          | универсальная деталь | универсальный |    1 | Париж&lt;br /&gt;
  P13          | уникальная деталь    | уникальный    |    1 | Бостон&lt;br /&gt;
  P14          | болт                 | серый         |   20 | Ижевск&lt;br /&gt;
  P15          | рама                 | красный       | 3000 | Манчестер&lt;br /&gt;
  P16          | колесо               | белый         | 1500 | Манчестер&lt;br /&gt;
  P5           | втулка               | серый         |  350 | Манчестер&lt;br /&gt;
  P17          | бумага               | белый         |    1 | Астрахань&lt;br /&gt;
  P18          | плитка               | белый         |  300 | Флоренция&lt;br /&gt;
  P19          | орнамент             | серый         |  800 | Флоренция&lt;br /&gt;
  P20          | уголок               | серый         |  100 | Флоренция&lt;br /&gt;
  P21          | гайка 01-01          | серебристый   |   20 | Клин&lt;br /&gt;
  P22          | усиленная рама       | красный       | 3200 | Череповец&lt;br /&gt;
  P23          | винт                 | розовый       |    5 | Ижевск&lt;br /&gt;
  P24          | труселя              | красный       |   20 | Челябинск&lt;br /&gt;
  P25          | штуцерная деталь     | коричневый    |  450 | Череповец&lt;br /&gt;
  P2           | шуруп                | чёрный        |    5 | Лондон&lt;br /&gt;
  P26          | лезвие               | бесцветный    |  120 | Йокогама&lt;br /&gt;
 (26 rows)&lt;br /&gt;
&lt;br /&gt;
==== Изделия ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.j;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_izdelia |       nazvanie        |      gorod&lt;br /&gt;
 ---------------+-----------------------+-----------------&lt;br /&gt;
  J1            | автомобиль            | Магнитогорск&lt;br /&gt;
  J2            | процессор             | Зеленоград&lt;br /&gt;
  J3            | торшер                | Нижний Новгород&lt;br /&gt;
  J4            | универсальное изделие | Париж&lt;br /&gt;
  J5            | уникальное изделие    | Бостон&lt;br /&gt;
  J6            | велосипед 01/23       | Манчестер&lt;br /&gt;
  J7            | изделие из болтов     | Челябинск&lt;br /&gt;
  J8            | шкаф                  | Ярославль&lt;br /&gt;
  J9            | рама 02-01            | Череповец&lt;br /&gt;
  J10           | книга                 | Астрахань&lt;br /&gt;
  J11           | панно 01-03           | Флоренция&lt;br /&gt;
  J12           | велосипед 03-04       | Клин&lt;br /&gt;
  J13           | рама 02-03            | Череповец&lt;br /&gt;
  J14           | штуцер 01-02          | Череповец&lt;br /&gt;
  J15           | велосипед 01-04       | Клин&lt;br /&gt;
  J16           | кружевное бельё       | Челябинск&lt;br /&gt;
  J17           | штуцер 01-03          | Череповец&lt;br /&gt;
  J18           | кинжал                | Йокогама&lt;br /&gt;
 (18 rows)&lt;br /&gt;
&lt;br /&gt;
==== Сборки ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.spj;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika | nomer_detali | nomer_izdelia | kolichestvo&lt;br /&gt;
 -------------------+--------------+---------------+-------------&lt;br /&gt;
  S1                | P6           | J2            |          20&lt;br /&gt;
  S1                | P7           | J2            |           5&lt;br /&gt;
  S2                | P1           | J1            |           4&lt;br /&gt;
  S6                | P4           | J1            |           2&lt;br /&gt;
  S6                | P5           | J1            |           6&lt;br /&gt;
  S3                | P9           | J3            |           1&lt;br /&gt;
  S4                | P10          | J3            |           1&lt;br /&gt;
  S5                | P11          | J3            |           1&lt;br /&gt;
  S2                | P4           | J1            |           8&lt;br /&gt;
  S6                | P3           | J1            |          50&lt;br /&gt;
  S7                | P8           | J2            |          25&lt;br /&gt;
  S1                | P12          | J4            |           1&lt;br /&gt;
  S2                | P12          | J4            |           1&lt;br /&gt;
  S3                | P12          | J4            |           1&lt;br /&gt;
  S4                | P12          | J4            |           1&lt;br /&gt;
  S5                | P12          | J4            |           1&lt;br /&gt;
  S7                | P12          | J4            |           1&lt;br /&gt;
  S7                | P2           | J1            |           1&lt;br /&gt;
  S6                | P2           | J1            |           9&lt;br /&gt;
  S6                | P12          | J4            |           7&lt;br /&gt;
  S1                | P13          | J5            |          14&lt;br /&gt;
  S6                | P14          | J1            |        9000&lt;br /&gt;
  S2                | P14          | J1            |           3&lt;br /&gt;
  S6                | P1           | J1            |          12&lt;br /&gt;
  S8                | P15          | J6            |           1&lt;br /&gt;
  S8                | P16          | J6            |           2&lt;br /&gt;
  S3                | P5           | J6            |          10&lt;br /&gt;
  S10               | P2           | J8            |           4&lt;br /&gt;
  S8                | P1           | J7            |          16&lt;br /&gt;
  S9                | P14          | J7            |           3&lt;br /&gt;
  S11               | P10          | J3            |           2&lt;br /&gt;
  S12               | P15          | J1            |           3&lt;br /&gt;
  S11               | P11          | J3            |           4&lt;br /&gt;
  S10               | P14          | J9            |           5&lt;br /&gt;
  S13               | P17          | J10           |        1001&lt;br /&gt;
  S14               | P17          | J10           |        1111&lt;br /&gt;
  S15               | P17          | J10           |        1010&lt;br /&gt;
  S5                | P18          | J11           |           9&lt;br /&gt;
  S5                | P19          | J11           |           1&lt;br /&gt;
  S5                | P20          | J11           |           4&lt;br /&gt;
  S9                | P14          | J8            |          25&lt;br /&gt;
  S12               | P21          | J12           |          15&lt;br /&gt;
  S11               | P22          | J13           |           9&lt;br /&gt;
  S11               | P1           | J14           |          26&lt;br /&gt;
  S12               | P1           | J14           |          13&lt;br /&gt;
  S12               | P2           | J14           |          54&lt;br /&gt;
  S12               | P23          | J4            |         101&lt;br /&gt;
  S12               | P16          | J15           |          40&lt;br /&gt;
  S7                | P21          | J12           |           3&lt;br /&gt;
  S8                | P21          | J12           |           4&lt;br /&gt;
  S9                | P21          | J12           |           5&lt;br /&gt;
  S1                | P24          | J16           |           1&lt;br /&gt;
  S1                | P15          | J6            |           3&lt;br /&gt;
  S4                | P25          | J17           |           1&lt;br /&gt;
  S17               | P16          | J1            |           4&lt;br /&gt;
  S18               | P26          | J18           |           1&lt;br /&gt;
 (56 rows)&lt;br /&gt;
&lt;br /&gt;
== Готовые запросы ==&lt;br /&gt;
&lt;br /&gt;
Если видите, что тот или иной запрос можно составить короче и рациональней - смело вносите правку.&lt;br /&gt;
&lt;br /&gt;
В трёх билетах в задании на запрос встречается формулировка &amp;quot;&#039;&#039;только и только&#039;&#039;&amp;quot;. Как оказалось, это означает следующее: если холодильники поставляет &#039;&#039;только и только&#039;&#039; Уася, то:&lt;br /&gt;
# кроме Уаси никто не поставляет холодильники;&lt;br /&gt;
# Уася не поставляет ничего, кроме холодильников.&lt;br /&gt;
&lt;br /&gt;
Существующие запросы, естественно, оказались неправильными и их пришлось переписать. &amp;lt;s&amp;gt;Великий и могучий русский языка, ну что за экономия на бумаге.&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Билет 1 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера поставщиков, которые поставляют, по крайней мере, все те детали, которые поставляет поставщик с номером &#039;S2&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nomer_postavshika&lt;br /&gt;
FROM spasoi_ekz.spj SPJX&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT nomer_detali&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJY&lt;br /&gt;
                  WHERE nomer_postavshika = &#039;S2&#039;&lt;br /&gt;
                    AND NOT EXISTS (&lt;br /&gt;
                                    SELECT *&lt;br /&gt;
                                    FROM spasoi_ekz.spj&lt;br /&gt;
                                    WHERE nomer_postavshika = SPJX.nomer_postavshika&lt;br /&gt;
                                      AND nomer_detali = SPJY.nomer_detali&lt;br /&gt;
                                   )&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika&lt;br /&gt;
 -------------------&lt;br /&gt;
  S6&lt;br /&gt;
  S2&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 2 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера деталей и общее их количество для всех номеров деталей, поставляемых более чем одним поставщиком.&lt;br /&gt;
&lt;br /&gt;
Текст запроса, каким его дал Григорьев на лекции, впоследствии исправив его:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali AS &amp;quot;Номер детали&amp;quot;,&lt;br /&gt;
       SUM(kolichestvo) AS &amp;quot;Сколько штук поставляется&amp;quot;,&lt;br /&gt;
       COUNT(DISTINCT nomer_postavshika) AS &amp;quot;Сколько у неё поставщиков&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_postavshika) &amp;gt; 1;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali AS &amp;quot;Номер детали&amp;quot;,&lt;br /&gt;
       kol AS &amp;quot;Сколько штук поставляется&amp;quot;&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT nomer_detali,&lt;br /&gt;
             SUM(kolichestvo) AS kol,&lt;br /&gt;
             COUNT(DISTINCT nomer_postavshika)&lt;br /&gt;
      FROM spasoi_ekz.spj&lt;br /&gt;
      GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_postavshika) &amp;gt; 1&lt;br /&gt;
     ) A;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер детали | Сколько штук поставляется | Сколько у неё поставщиков&lt;br /&gt;
 --------------+---------------------------+---------------------------&lt;br /&gt;
  P1           |                        71 |                         5&lt;br /&gt;
  P10          |                         3 |                         2&lt;br /&gt;
  P11          |                         5 |                         2&lt;br /&gt;
  P12          |                        13 |                         7&lt;br /&gt;
  P14          |                      9036 |                         4&lt;br /&gt;
  P15          |                         7 |                         3&lt;br /&gt;
  P16          |                        46 |                         3&lt;br /&gt;
  P17          |                      3122 |                         3&lt;br /&gt;
  P2           |                        68 |                         4&lt;br /&gt;
  P21          |                        27 |                         4&lt;br /&gt;
  P4           |                        10 |                         2&lt;br /&gt;
  P5           |                        16 |                         2&lt;br /&gt;
 (12 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 3 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера поставщиков, поставляющих детали с номером &#039;P1&#039; для какого-либо изделия в количестве (в поставке) большим, чем средний объём поставок деталей с номером &#039;P2&#039; для этого изделия.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT X.nomer_postavshika &lt;br /&gt;
FROM spasoi_ekz.spj X&lt;br /&gt;
WHERE X.nomer_detali = &#039;P1&#039;&lt;br /&gt;
  AND X.kolichestvo &amp;gt; (&lt;br /&gt;
                       SELECT AVG(kolichestvo)&lt;br /&gt;
                       FROM spasoi_ekz.spj&lt;br /&gt;
                       WHERE nomer_izdelia = X.nomer_izdelia&lt;br /&gt;
                         AND nomer_detali = &#039;P2&#039;&lt;br /&gt;
                      );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но длиннее и нерациональней&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nomer_postavshika&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT *&lt;br /&gt;
      FROM spasoi_ekz.spj&lt;br /&gt;
      WHERE nomer_izdelia IN(&lt;br /&gt;
                             SELECT nomer_izdelia&lt;br /&gt;
                             FROM spasoi_ekz.spj&lt;br /&gt;
                             WHERE nomer_detali = &#039;P1&#039;&lt;br /&gt;
                            )&lt;br /&gt;
        AND nomer_izdelia IN(&lt;br /&gt;
	                     SELECT nomer_izdelia&lt;br /&gt;
	                     FROM spasoi_ekz.spj&lt;br /&gt;
	                     WHERE nomer_detali = &#039;P2&#039;&lt;br /&gt;
	                    )&lt;br /&gt;
     ) A&lt;br /&gt;
WHERE nomer_detali = &#039;P1&#039; AND kolichestvo &amp;gt;&lt;br /&gt;
(&lt;br /&gt;
 SELECT AVG(kolichestvo)&lt;br /&gt;
 FROM (&lt;br /&gt;
       SELECT *&lt;br /&gt;
       FROM spasoi_ekz.spj&lt;br /&gt;
       WHERE nomer_izdelia IN(&lt;br /&gt;
                              SELECT nomer_izdelia&lt;br /&gt;
                              FROM spasoi_ekz.spj&lt;br /&gt;
                              WHERE nomer_detali = &#039;P1&#039;&lt;br /&gt;
                             )&lt;br /&gt;
         AND nomer_izdelia IN(&lt;br /&gt;
                              SELECT nomer_izdelia&lt;br /&gt;
                              FROM spasoi_ekz.spj&lt;br /&gt;
                              WHERE nomer_detali = &#039;P2&#039;&lt;br /&gt;
                             )&lt;br /&gt;
      ) B&lt;br /&gt;
 WHERE nomer_detali = &#039;P2&#039;&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika&lt;br /&gt;
 -------------------&lt;br /&gt;
  S6&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 4 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера изделий, для которых детали поставляет только поставщик с номером ‘S1’.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_izdelia&lt;br /&gt;
FROM spasoi_ekz.spj X&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT *&lt;br /&gt;
                  FROM spasoi_ekz.spj&lt;br /&gt;
                  WHERE nomer_postavshika != &#039;S1&#039;&lt;br /&gt;
                    AND X.nomer_izdelia = nomer_izdelia&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но без EXISTS&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nomer_izdelia&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
WHERE nomer_izdelia IN(&lt;br /&gt;
                       SELECT nomer_izdelia&lt;br /&gt;
                       FROM spasoi_ekz.spj&lt;br /&gt;
                       WHERE nomer_postavshika = &#039;S1&#039;&lt;br /&gt;
                      )&lt;br /&gt;
  AND nomer_izdelia NOT IN(&lt;br /&gt;
                           SELECT nomer_izdelia&lt;br /&gt;
                           FROM spasoi_ekz.spj&lt;br /&gt;
                           WHERE nomer_postavshika != &#039;S1&#039;&lt;br /&gt;
                          );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_izdelia&lt;br /&gt;
 ---------------&lt;br /&gt;
  J5&lt;br /&gt;
  J16&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 5 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих детали с названием &amp;quot;Болт&amp;quot; в количестве (в поставке) большим, чем средний объём всех поставок деталей с номером &#039;P1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                           ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                        JOIN spasoi_ekz.p P&lt;br /&gt;
                           ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                              AND nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
WHERE kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT AVG(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj&lt;br /&gt;
                     WHERE nomer_detali = &#039;P1&#039;&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но без JOIN&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s&lt;br /&gt;
WHERE nomer_postavshika IN (&lt;br /&gt;
                            SELECT nomer_postavshika&lt;br /&gt;
                            FROM spasoi_ekz.spj&lt;br /&gt;
                            WHERE nomer_detali = (&lt;br /&gt;
                                                  SELECT nomer_detali&lt;br /&gt;
                                                  FROM spasoi_ekz.p&lt;br /&gt;
                                                  WHERE LOWER(nazvanie) = LOWER(&#039;Болт&#039;)&lt;br /&gt;
                                                 )&lt;br /&gt;
                              AND kolichestvo &amp;gt; (&lt;br /&gt;
                                                 SELECT AVG(kolichestvo)&lt;br /&gt;
                                                 FROM spasoi_ekz.spj&lt;br /&gt;
                                                 WHERE nomer_detali = &#039;P1&#039;&lt;br /&gt;
                                                )&lt;br /&gt;
                           );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  imya&lt;br /&gt;
 ------&lt;br /&gt;
  Оша&lt;br /&gt;
  Иванов&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 6 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия деталей, поставляемых поставщиком, проживающим в том же городе, где изготавливаются эти детали, для изделия с названием ‘Велосипед 01/23’.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT P.nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                        JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                        JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
WHERE S.gorod = P.gorod&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Велосипед 01/23&#039;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос без JOIN&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nazvanie&lt;br /&gt;
FROM spasoi_ekz.S S, spasoi_ekz.p P, spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE S.gorod = P.gorod&lt;br /&gt;
  AND P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
  AND S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
  AND nomer_izdelia = (&lt;br /&gt;
                       SELECT nomer_izdelia&lt;br /&gt;
                       FROM spasoi_ekz.j&lt;br /&gt;
                       WHERE nazvanie = LOWER(&#039;Велосипед 01/23&#039;)&lt;br /&gt;
                      );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nazvanie&lt;br /&gt;
 ----------&lt;br /&gt;
  рама&lt;br /&gt;
  колесо&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 7 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия изделий, куда входят детали с названием &#039;Болт&#039;, поставляемых поставщиками с именем &#039;Иванов&#039;, в количестве (в поставке) большим, чем средний объём поставок для этого изделия.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT J.nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                        JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                        JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
WHERE imya LIKE &#039;%Иванов%&#039;&lt;br /&gt;
  AND P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
  AND kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT AVG(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj X&lt;br /&gt;
                     WHERE SPJ.nomer_izdelia = X.nomer_izdelia&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё один вариант запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie&lt;br /&gt;
FROM spasoi_ekz.j&lt;br /&gt;
WHERE nomer_izdelia IN (&lt;br /&gt;
                        SELECT nomer_izdelia&lt;br /&gt;
                        FROM (spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                                                   ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                                                      AND imya LIKE &#039;%Иванов%&#039;&lt;br /&gt;
                                                 JOIN spasoi_ekz.p P&lt;br /&gt;
                                                   ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                                      AND nazvanie = LOWER(&#039;Болт&#039;)) A&lt;br /&gt;
                        WHERE kolichestvo &amp;gt; (&lt;br /&gt;
                                             SELECT AVG(kolichestvo)&lt;br /&gt;
                                             FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                                                       ON SPJ.nomer_izdelia = A.nomer_izdelia&lt;br /&gt;
                                            )&lt;br /&gt;
                       );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;И ещё вариант этого же запроса, но длиннее и нерациональней&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT J.nazvanie, kolichestvo&lt;br /&gt;
      FROM spasoi_ekz.s S, spasoi_ekz.p P, spasoi_ekz.j J, spasoi_ekz.spj SPJ&lt;br /&gt;
      WHERE J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
        AND P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
        AND P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
        AND S.imya LIKE &#039;%Иванов%&#039;&lt;br /&gt;
        AND S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
     ) A&lt;br /&gt;
WHERE kolichestvo &amp;gt;&lt;br /&gt;
(&lt;br /&gt;
 SELECT AVG(kolichestvo)&lt;br /&gt;
 FROM spasoi_ekz.spj&lt;br /&gt;
 WHERE nomer_izdelia IN(&lt;br /&gt;
                        SELECT J.nomer_izdelia&lt;br /&gt;
                        FROM spasoi_ekz.s S, spasoi_ekz.p P, spasoi_ekz.j J, spasoi_ekz.spj SPJ&lt;br /&gt;
                        WHERE J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
                          AND P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                          AND P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
                          AND S.imya LIKE &#039;%Иванов%&#039;&lt;br /&gt;
                          AND S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
                       )&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
      nazvanie&lt;br /&gt;
 -------------------&lt;br /&gt;
  шкаф&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 8 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера изделий и общее количество деталей для них, поставляемых поставщиками с именем &#039;Петров&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_izdelia AS &amp;quot;Номер изделия&amp;quot;, SUM(kolichestvo) AS &amp;quot;Количество деталей&amp;quot; &lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                             -- так как &amp;quot;поставщикАМИ&amp;quot; и возможны&lt;br /&gt;
                             -- Иван Петров и Петров Иван, то LIKE %Петров%&lt;br /&gt;
                             AND imya LIKE &#039;%Петров%&#039;&lt;br /&gt;
GROUP BY nomer_izdelia;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер изделия | Количество деталей&lt;br /&gt;
 ---------------+--------------------&lt;br /&gt;
  J4            |                101&lt;br /&gt;
  J3            |                  6&lt;br /&gt;
  J13           |                  9&lt;br /&gt;
  J15           |                 40&lt;br /&gt;
  J1            |                  3&lt;br /&gt;
  J12           |                 15&lt;br /&gt;
  J14           |                 93&lt;br /&gt;
 (7 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 9 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера деталей и общее их количество для всех номеров деталей, которые входят только в одно изделие.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali, SUM(kolichestvo)&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_izdelia) = 1;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali, kol FROM (&lt;br /&gt;
       SELECT nomer_detali, SUM(kolichestvo) AS kol, COUNT(DISTINCT nomer_izdelia) = 1&lt;br /&gt;
       FROM spasoi_ekz.spj&lt;br /&gt;
       GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_izdelia) = 1&lt;br /&gt;
    ) A;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_detali | sum&lt;br /&gt;
 --------------+------&lt;br /&gt;
  P10          |    3&lt;br /&gt;
  P11          |    5&lt;br /&gt;
  P12          |   13&lt;br /&gt;
  P13          |   14&lt;br /&gt;
  P17          | 3122&lt;br /&gt;
  P18          |    9&lt;br /&gt;
  P19          |    1&lt;br /&gt;
  P20          |    4&lt;br /&gt;
  P21          |   27&lt;br /&gt;
  P22          |    9&lt;br /&gt;
  P23          |  101&lt;br /&gt;
  P24          |    1&lt;br /&gt;
  P25          |    1&lt;br /&gt;
  P26          |    1&lt;br /&gt;
  P3           |   50&lt;br /&gt;
  P4           |   10&lt;br /&gt;
  P6           |   20&lt;br /&gt;
  P7           |    5&lt;br /&gt;
  P8           |   25&lt;br /&gt;
  P9           |    1&lt;br /&gt;
 (20 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 10 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих детали с названием &#039;Болт&#039; для изделия с названием &#039;Рама 02-01&#039; в количестве (в поставке) большим, чем минимальное значение поставки детали с номером &#039;P1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
			   ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
			      AND J.nazvanie = LOWER(&#039;Рама 02-01&#039;)&lt;br /&gt;
			 JOIN spasoi_ekz.p P&lt;br /&gt;
			   ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
			      AND P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
			 JOIN spasoi_ekz.s S&lt;br /&gt;
			   ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE kolichestvo &amp;gt; (&lt;br /&gt;
		     SELECT MIN(kolichestvo)&lt;br /&gt;
		     FROM spasoi_ekz.spj &lt;br /&gt;
		     WHERE nomer_detali = &#039;P1&#039;&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Русе Болтон&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 11 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия городов и суммарное состояние проживающих в каждом городе поставщиков, у которых минимальный объём поставки деталей больше 1000.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT gorod, SUM(sostoyanie)&lt;br /&gt;
FROM spasoi_ekz.s S&lt;br /&gt;
WHERE (	&lt;br /&gt;
       SELECT MIN(kolichestvo)	&lt;br /&gt;
       FROM spasoi_ekz.spj X	&lt;br /&gt;
       WHERE X.nomer_postavshika = S.nomer_postavshika		&lt;br /&gt;
      ) &amp;gt; 1000&lt;br /&gt;
GROUP BY gorod;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Вариант подлиннее для тех, кто не ищет лёгких путей&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT gorod, SUM(sostoyanie)&lt;br /&gt;
FROM spasoi_ekz.s&lt;br /&gt;
WHERE nomer_postavshika IN (&lt;br /&gt;
                            SELECT nomer_postavshika&lt;br /&gt;
                            FROM spasoi_ekz.spj&lt;br /&gt;
                            GROUP BY nomer_postavshika HAVING MIN(kolichestvo) &amp;gt; 1000&lt;br /&gt;
                           )&lt;br /&gt;
GROUP BY gorod;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;!-- а этот запрос выполняет не совсем то и не правильно&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT gorod, sost&lt;br /&gt;
FROM (&lt;br /&gt;
SELECT gorod, SUM(sostoyanie) AS sost, SUM(SPJ.kolichestvo)&lt;br /&gt;
FROM spasoi_ekz.spj, spasoi_ekz.s&lt;br /&gt;
WHERE S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
GROUP BY S.gorod HAVING SUM(SPJ.kolichestvo) &amp;gt; 1000&lt;br /&gt;
) A;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; --&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
    gorod   |   sum&lt;br /&gt;
 -----------+---------&lt;br /&gt;
  Прага     | 2111110&lt;br /&gt;
  Стокгольм |  888888&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 12 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера деталей, поставляемых для какого-либо изделия поставщиком, проживающим в том же городе, где изготавливается это изделие.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali&lt;br /&gt;
FROM spasoi_ekz.spj SPJ, spasoi_ekz.s S, spasoi_ekz.j J&lt;br /&gt;
WHERE SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
  AND S.gorod = J.gorod&lt;br /&gt;
  AND J.nomer_izdelia = SPJ.nomer_izdelia;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_detali&lt;br /&gt;
 --------------&lt;br /&gt;
  P15&lt;br /&gt;
  P16&lt;br /&gt;
  P26&lt;br /&gt;
 (3 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 13 ===&lt;br /&gt;
&lt;br /&gt;
Написать &amp;lt;u&amp;gt;один&amp;lt;/u&amp;gt; запрос SELECT: выдать количества строк в таблице S (Поставщик) 1) с пустыми значениями и 2) непустыми значениями в столбце Состояние.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT COUNT(*) - COUNT(sostoyanie) AS &amp;quot;С пустым состоянием&amp;quot;, &lt;br /&gt;
       COUNT(sostoyanie) AS &amp;quot;С не пустым состоянием&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.s;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но длиннее и нерациональней&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SELECT COUNT(Snull.*) AS &amp;quot;С пустым состоянием&amp;quot;, COUNT(Snotnull.sostoyanie) AS &amp;quot;С не пустым состоянием&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.s Snull RIGHT OUTER JOIN spasoi_ekz.s Snotnull&lt;br /&gt;
                                      ON Snull.nomer_postavshika = Snotnull.nomer_postavshika&lt;br /&gt;
                                         AND Snull.sostoyanie IS NULL;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  С пустым состоянием | С не пустым состоянием&lt;br /&gt;
 ---------------------+-----------------------&lt;br /&gt;
                    2 |                    16&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 14 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют детали только и только для изделия с номером &#039;J1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
Чтобы продемонстрировать выполнение запроса наглядно, возьмём поставщика не &#039;J1&#039;, а &#039;S18&#039;, который был создан специально для этого запроса. Если оставить &#039;J1&#039;, то наглядности не получится, так как по нашей схеме БД этот поставщик не попадает под условие &amp;quot;только и только&amp;quot;, и запрос вернёт пустой результат.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SELECT DISTINCT imya&lt;br /&gt;
FROM spasoi_ekz.s&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT *&lt;br /&gt;
                  FROM spasoi_ekz.spj&lt;br /&gt;
                  WHERE &lt;br /&gt;
			(&lt;br /&gt;
				nomer_izdelia != &#039;J18&#039; AND &lt;br /&gt;
				nomer_postavshika  = s.nomer_postavshika &lt;br /&gt;
			)&lt;br /&gt;
		OR&lt;br /&gt;
			(&lt;br /&gt;
				nomer_izdelia = &#039;J18&#039; AND &lt;br /&gt;
				nomer_postavshika  != s.nomer_postavshika &lt;br /&gt;
			)&lt;br /&gt;
		);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj A JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON A.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE nomer_izdelia = &#039;J1&#039;&lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT nomer_postavshika&lt;br /&gt;
                  FROM spasoi_ekz.spj&lt;br /&gt;
                  WHERE nomer_izdelia != &#039;J1&#039;&lt;br /&gt;
                    AND nomer_postavshika = A.nomer_postavshika&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       imya&lt;br /&gt;
 ----------------&lt;br /&gt;
  Безликий&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 15 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать наименования изделий, для которых детали поставляют только те поставщики, у которых состояние больше 1000000 у.е.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT J.nazvanie&lt;br /&gt;
FROM spasoi_ekz.j J&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
		  SELECT *&lt;br /&gt;
		  FROM spasoi_ekz.spj X JOIN spasoi_ekz.s S&lt;br /&gt;
		                          ON X.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
		  WHERE sostoyanie &amp;lt;= 1000000&lt;br /&gt;
		  AND X.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Вариант этого запроса без NOT EXISTS&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                        JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
WHERE sostoyanie &amp;gt; 1000000&lt;br /&gt;
  AND SPJ.nomer_izdelia NOT IN (&lt;br /&gt;
                                SELECT nomer_izdelia&lt;br /&gt;
                                FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                                                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                                WHERE sostoyanie &amp;lt; 1000000&lt;br /&gt;
                               );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       nazvanie&lt;br /&gt;
 --------------------&lt;br /&gt;
  кружевное бельё&lt;br /&gt;
  уникальное изделие&lt;br /&gt;
  процессор&lt;br /&gt;
 (3 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 16 ===&lt;br /&gt;
Написать запрос SELECT: выдать цвета и для каждого цвета общее количество деталей, входящих в изделие с названием &#039;Панно 01-03&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT cvet AS &amp;quot;Цвет&amp;quot;, SUM(kolichestvo) AS &amp;quot;Деталей&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
			     AND J.nazvanie = LOWER(&#039;Панно 01-03&#039;)&lt;br /&gt;
			JOIN spasoi_ekz.P P&lt;br /&gt;
			  ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
GROUP BY cvet;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Цвет  | Деталей&lt;br /&gt;
 -------+---------&lt;br /&gt;
  белый |       9&lt;br /&gt;
  серый |       5&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 17 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера поставщиков и количество сделанных ими поставок при условии, что среднее число деталей во всех этих поставках больше 1000.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_postavshika AS &amp;quot;Номер поставщика&amp;quot;, COUNT(*) AS &amp;quot;Количество поставок&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
WHERE nomer_postavshika IN (&lt;br /&gt;
                            SELECT nomer_postavshika&lt;br /&gt;
                            FROM spasoi_ekz.spj&lt;br /&gt;
                            GROUP BY nomer_postavshika HAVING AVG(kolichestvo) &amp;gt; 1000&lt;br /&gt;
                           )&lt;br /&gt;
GROUP BY nomer_postavshika;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_postavshika AS &amp;quot;Номер поставщика&amp;quot;, COUNT(*) AS &amp;quot;Количество поставок&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
WHERE (&lt;br /&gt;
       SELECT AVG(kolichestvo)&lt;br /&gt;
       FROM spasoi_ekz.spj X&lt;br /&gt;
       WHERE X.nomer_postavshika = spj.nomer_postavshika&lt;br /&gt;
       ) &amp;gt; 1000&lt;br /&gt;
GROUP BY nomer_postavshika;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;И ещё вариант запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nom AS &amp;quot;Номер поставщика&amp;quot;, cnt AS &amp;quot;Количество поставок&amp;quot;&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT S.nomer_postavshika AS nom,&lt;br /&gt;
             COUNT(SPJ.nomer_postavshika) AS cnt,&lt;br /&gt;
             AVG(SPJ.kolichestvo) AS kol&lt;br /&gt;
      FROM spasoi_ekz.s S, spasoi_ekz.spj SPJ&lt;br /&gt;
      WHERE S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
      GROUP BY S.nomer_postavshika&lt;br /&gt;
     ) A&lt;br /&gt;
WHERE kol &amp;gt; 1000;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер поставщика | Количество поставок&lt;br /&gt;
 ------------------+---------------------&lt;br /&gt;
  S13              |                   1&lt;br /&gt;
  S6               |                   7&lt;br /&gt;
  S14              |                   1&lt;br /&gt;
  S15              |                   1&lt;br /&gt;
 (4 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 18 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, имеющих состояние больше 1000 и поставляющих деталь с названием &#039;Гайка 01-01&#039; для изделия с названием &#039;Велосипед 03-04&#039; в количестве (в поставке) большим, чем средний объём поставки, выполненной поставщиками с именем &#039;Иванов&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:2nd dufficulty.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;5px&amp;quot;&amp;gt;&#039;&#039;&#039;Второй по сложности запрос экзамена!&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;4px&amp;quot;&amp;gt;&#039;&#039;&#039;Вот уж не свезло, так не свезло&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                    JOIN spasoi_ekz.j J&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
WHERE sostoyanie &amp;gt; 1000&lt;br /&gt;
  AND P.nazvanie = LOWER(&#039;Гайка 01-01&#039;)&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Велосипед 03-04&#039;)&lt;br /&gt;
  AND kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT AVG(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                       ON SPJ.nomer_postavshika = S.nomer_postavshika &lt;br /&gt;
                     WHERE S.imya = &#039;Иванов&#039;&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Пётр&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 19 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия красных деталей, которые входят только в изделие с названием &#039;Рама 02-03&#039; в количестве, меньшем 10 единиц в поставке.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT X.nazvanie&lt;br /&gt;
FROM spasoi_ekz.p X JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_detali = X.nomer_detali&lt;br /&gt;
WHERE X.cvet = &#039;красный&#039;&lt;br /&gt;
  AND kolichestvo &amp;lt; 10&lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT *&lt;br /&gt;
                  FROM spasoi_ekz.j J JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                                        ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                  WHERE J.nazvanie != LOWER(&#039;Рама 02-03&#039;)&lt;br /&gt;
                    AND X.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант этого же запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT P.nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND cvet = &#039;красный&#039;&lt;br /&gt;
                        JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                              AND J.nazvanie = LOWER(&#039;Рама 02-03&#039;)&lt;br /&gt;
WHERE kolichestvo &amp;lt; 10&lt;br /&gt;
  AND SPJ.nomer_detali NOT IN (&lt;br /&gt;
                               SELECT nomer_detali&lt;br /&gt;
                               FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                                         ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                                                            AND J.nazvanie != LOWER(&#039;Рама 02-03&#039;)&lt;br /&gt;
                              );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     nazvanie&lt;br /&gt;
 ----------------&lt;br /&gt;
  усиленная рама&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 20 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих только белые детали.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT *&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                                            ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                  WHERE nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    AND P.cvet != &#039;белый&#039;&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё один вариант этого же запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND cvet = &#039;белый&#039;&lt;br /&gt;
                        JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE S.nomer_postavshika NOT IN (&lt;br /&gt;
                                  SELECT nomer_postavshika&lt;br /&gt;
                                  FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                                                            ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                                               AND cvet != &#039;белый&#039;&lt;br /&gt;
                                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;И ещё один вариант этого же запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s&lt;br /&gt;
WHERE nomer_postavshika NOT IN  (&lt;br /&gt;
                                 SELECT spj.nomer_postavshika&lt;br /&gt;
                                 FROM spasoi_ekz.spj SPJ, spasoi_ekz.p P&lt;br /&gt;
                                 WHERE SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                   AND p.cvet != &#039;белый&#039;&lt;br /&gt;
                                )&lt;br /&gt;
  AND nomer_postavshika  IN (&lt;br /&gt;
                             SELECT spj.nomer_postavshika&lt;br /&gt;
                             FROM spasoi_ekz.spj SPJ, spasoi_ekz.p P&lt;br /&gt;
                             WHERE SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                               AND p.cvet = &#039;белый&#039;&lt;br /&gt;
                            );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       imya&lt;br /&gt;
 -----------------&lt;br /&gt;
  Рендилл Тарли&lt;br /&gt;
  Сэмвелл Тарли&lt;br /&gt;
  Мелисса Флорент&lt;br /&gt;
  Томми Версетти&lt;br /&gt;
 (4 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 21 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия изделий, для которых детали поставляет только и только поставщик с номером &#039;S1&#039;.&lt;br /&gt;
&lt;br /&gt;
Чтобы продемонстрировать выполнение запроса наглядно, возьмём поставщика не &#039;S1&#039;, а &#039;S18&#039;, который был создан специально для этого запроса. Если оставить &#039;S1&#039;, то наглядности не получится, так как по нашей схеме БД этот поставщик не попадает под условие &amp;quot;&#039;&#039;только и только&#039;&#039;&amp;quot;, и запрос вернёт пустой результат.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT J.nazvanie&lt;br /&gt;
FROM spasoi_ekz.j J&lt;br /&gt;
WHERE &lt;br /&gt;
  NOT EXISTS (&lt;br /&gt;
                  SELECT *&lt;br /&gt;
                  FROM spasoi_ekz.spj&lt;br /&gt;
                  WHERE nomer_postavshika != &#039;S18&#039; AND nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                 )&lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT *&lt;br /&gt;
                  FROM spasoi_ekz.spj&lt;br /&gt;
                  WHERE nomer_postavshika = &#039;S18&#039; AND nomer_izdelia != J.nomer_izdelia&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       nazvanie&lt;br /&gt;
 --------------------&lt;br /&gt;
  кинжал&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 22 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют только детали с номером &#039;P1&#039; для изделия с именем &#039;Штуцер 01-02&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                             AND J.nazvanie = LOWER(&#039;Штуцер 01-02&#039;)&lt;br /&gt;
                        JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT *&lt;br /&gt;
                  FROM spasoi_ekz.spj X JOIN spasoi_ekz.j J&lt;br /&gt;
                                          ON X.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                  WHERE X.nomer_detali != &#039;P1&#039; &lt;br /&gt;
                    AND j.nazvanie = LOWER(&#039;Штуцер 01-02&#039;)&lt;br /&gt;
                    AND S.nomer_postavshika = X.nomer_postavshika&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- неверный запрос - номер изделия, а не название&lt;br /&gt;
SELECT imya FROM S X&lt;br /&gt;
JOIN SPJ Y ON X.nomer_postavshika=Y.nomer_postavshika&lt;br /&gt;
WHERE X.nomer_postavshika NOT IN (&lt;br /&gt;
                  SELECT DISTINCT nomer_postavshika FROM SPJ Z&lt;br /&gt;
                  WHERE Z.nomer_izdelia != &#039;Штуцер 01-02&#039;&lt;br /&gt;
                  AND Z.nomer_detali!=&#039;P1&#039;);--&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но длиннее и нерациональней&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                             AND J.nazvanie = LOWER(&#039;Штуцер 01-02&#039;)&lt;br /&gt;
                        JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND SPJ.nomer_detali = &#039;P1&#039;&lt;br /&gt;
                        JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE SPJ.nomer_postavshika NOT IN (&lt;br /&gt;
                                    SELECT nomer_postavshika&lt;br /&gt;
                                    FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                                              ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                                                                 AND J.nazvanie = LOWER(&#039;Штуцер 01-02&#039;)&lt;br /&gt;
                                                            JOIN spasoi_ekz.p P&lt;br /&gt;
                                                              ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                                                 AND SPJ.nomer_detali != &#039;P1&#039;&lt;br /&gt;
                              );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Иван&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 23 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют деталь с названием &#039;Винт&#039; в количестве большим 100 единиц в одной поставке и имеют состояние больше среднего по их родному городу.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT S.imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
WHERE P.nazvanie = LOWER(&#039;Винт&#039;)&lt;br /&gt;
  AND SPJ.kolichestvo &amp;gt; 100&lt;br /&gt;
  AND S.sostoyanie &amp;gt; (&lt;br /&gt;
                      SELECT AVG(SS.sostoyanie)&lt;br /&gt;
                      FROM spasoi_ekz.s SS&lt;br /&gt;
                      WHERE SS.gorod = S.gorod&lt;br /&gt;
                     );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Пётр&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 24 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать наименования деталей и общее их количество для всех наименований деталей, изготавливаемых в одном городе.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- С этим запросом возникла неожиданная проблема - задание то ли неполное, то ли неправильное, потому что нельзя однозначно сказать, что по нему требуется сделать.&lt;br /&gt;
&lt;br /&gt;
Так что тут несколько вариантов запросов (кто как понял).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Первый вариант запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie, kol&lt;br /&gt;
FROM spasoi_ekz.p A, (&lt;br /&gt;
                      SELECT X.gorod, SUM(kolichestvo) as kol&lt;br /&gt;
                      FROM spasoi_ekz.p X, spasoi_ekz.spj Y&lt;br /&gt;
                      WHERE Y.nomer_detali = X.nomer_detali&lt;br /&gt;
                      GROUP BY X.gorod&lt;br /&gt;
                     ) B&lt;br /&gt;
WHERE A.gorod = B.gorod;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
        nazvanie       | kol&lt;br /&gt;
 ----------------------+------&lt;br /&gt;
  подставка            |    9&lt;br /&gt;
  стойка               |    9&lt;br /&gt;
  абажур               |    9&lt;br /&gt;
  гайка                |  139&lt;br /&gt;
  ось                  |   60&lt;br /&gt;
  зубчатое колесо      |   60&lt;br /&gt;
  транзистор           |   50&lt;br /&gt;
  печатная плата       |   50&lt;br /&gt;
  диод                 |   50&lt;br /&gt;
  универсальная деталь |   13&lt;br /&gt;
  уникальная деталь    |   14&lt;br /&gt;
  болт                 | 9137&lt;br /&gt;
  рама                 |   69&lt;br /&gt;
  колесо               |   69&lt;br /&gt;
  втулка               |   69&lt;br /&gt;
  бумага               | 3122&lt;br /&gt;
  плитка               |   14&lt;br /&gt;
  орнамент             |   14&lt;br /&gt;
  уголок               |   14&lt;br /&gt;
  гайка 01-01          |   27&lt;br /&gt;
  усиленная рама       |   10&lt;br /&gt;
  винт                 | 9137&lt;br /&gt;
  труселя              |    1&lt;br /&gt;
  штуцерная деталь     |   10&lt;br /&gt;
  шуруп                |  139&lt;br /&gt;
 (25 rows)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
и --&amp;gt;&lt;br /&gt;
В уточнение задания Григорьев сказал следующее: &amp;quot;&#039;&#039;Следует учесть, что в качестве наименования города может выступать переменная, в которую в некоторой программе должно быть занесено конкретное значение перед выполнением запроса&#039;&#039;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
То есть, вообще говоря, задание на запрос неполное, и его можно трактовать так: выдать наименования деталей и общее их количество для всех наименований деталей, изготавливаемых в городе &amp;lt;code&amp;gt;%НАЗВАНИЕГОРОДА%&amp;lt;/code&amp;gt;. Вот эта переменная задаётся где-то в программе, а в БД идёт запрос с уже подставленным конкретным названием. &lt;br /&gt;
&lt;br /&gt;
Этот вариант запроса составлен, например, для Лондона. &lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie, SUM(kolichestvo)&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
WHERE gorod = &#039;Лондон&#039;&lt;br /&gt;
GROUP BY nazvanie;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nazvanie | sum&lt;br /&gt;
 ----------+-----&lt;br /&gt;
  гайка    |  71&lt;br /&gt;
  шуруп    |  68&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 25 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих хотя бы одну белую деталь для изделия с названием &#039;Велосипед 01-04&#039; с объёмом поставки большим, чем средний объём поставки этого поставщика.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                    JOIN spasoi_ekz.j J&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
WHERE cvet = &#039;белый&#039;&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Велосипед 01-04&#039;)&lt;br /&gt;
  AND kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT AVG(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj SPJ&lt;br /&gt;
                     WHERE SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Пётр&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 26 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера красных деталей и количество поставок этих деталей.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT P.nomer_detali AS &amp;quot;Номер детали&amp;quot;, COUNT(kolichestvo) AS &amp;quot;Количество поставок с ней&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.p P, spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
  AND cvet = &#039;красный&#039;&lt;br /&gt;
GROUP BY P.nomer_detali;   &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос через JOIN&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT SPJ.nomer_detali AS &amp;quot;Номер детали&amp;quot;, COUNT(kolichestvo) AS &amp;quot;Количество поставок с ней&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND cvet = &#039;красный&#039;&lt;br /&gt;
GROUP BY SPJ.nomer_detali;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер детали | Количество поставок с ней&lt;br /&gt;
 --------------+---------------------------&lt;br /&gt;
  P15          |                         3&lt;br /&gt;
  P22          |                         1&lt;br /&gt;
  P24          |                         1&lt;br /&gt;
 (3 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 27 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать наименования городов и среднее состояние поставщиков для каждого города, поставляющих детали с названием &#039;Гайка 01-01&#039; для изделия с названием &#039;Велосипед 03-04&#039; в количестве (в поставке) большим, чем минимальный объём поставки, выполненной поставщиком с номером &#039;S1&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:1st dufficulty.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;7px&amp;quot;&amp;gt;&#039;&#039;&#039;Сложнейший запрос экзамена!&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;5px&amp;quot;&amp;gt;&#039;&#039;&#039;Сохрани Джа, вытащить такое&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT S.gorod AS &amp;quot;Город&amp;quot;, AVG(S.sostoyanie) AS &amp;quot;Среднее состояние&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                    JOIN spasoi_ekz.j J&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
WHERE P.nazvanie = LOWER(&#039;Гайка 01-01&#039;)&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Велосипед 03-04&#039;)&lt;br /&gt;
  AND kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT MIN(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj&lt;br /&gt;
                     WHERE nomer_postavshika = &#039;S1&#039;&lt;br /&gt;
                    )&lt;br /&gt;
GROUP BY S.gorod;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
    Город   |   Среднее состояние&lt;br /&gt;
 -----------+-----------------------&lt;br /&gt;
  Мытищи    |    35000.500000000000&lt;br /&gt;
  Йокогама  |  1500000.000000000000&lt;br /&gt;
  Манчестер | 2571.0000000000000000&lt;br /&gt;
 (3 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 28 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия изделий, куда входит хотя бы одна красная деталь весом больше 10 граммов, поставляемая только поставщиком с номером &#039;S1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT J.nazvanie&lt;br /&gt;
FROM spasoi_ekz.j J JOIN spasoi_ekz.spj SPJ1&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ1.nomer_izdelia&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ1.nomer_detali&lt;br /&gt;
WHERE P.ves &amp;gt; 10&lt;br /&gt;
 AND P.cvet = &#039;красный&#039;&lt;br /&gt;
 AND NOT EXISTS (&lt;br /&gt;
                 SELECT SPJ2.nomer_postavshika&lt;br /&gt;
                 FROM spasoi_ekz.spj SPJ2         &lt;br /&gt;
                 WHERE SPJ2.nomer_detali = P.nomer_detali&lt;br /&gt;
	 	   AND SPJ2.nomer_postavshika != &#039;S1&#039;&lt;br /&gt;
                );                     &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     nazvanie&lt;br /&gt;
 -----------------&lt;br /&gt;
  кружевное бельё&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 29 ===&lt;br /&gt;
Написать запрос SELECT: выдать названия деталей, которые входят только и только в состав изделия с названием &#039;Штуцер 01-03&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nazvanie&lt;br /&gt;
FROM spasoi_ekz.p P&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT SPJ.nomer_izdelia&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                            ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
                  WHERE (&lt;br /&gt;
                         J.nazvanie != LOWER(&#039;Штуцер 01-03&#039;)&lt;br /&gt;
                         AND&lt;br /&gt;
                         SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                        )&lt;br /&gt;
                     OR (&lt;br /&gt;
                         J.nazvanie = LOWER(&#039;Штуцер 01-03&#039;)&lt;br /&gt;
                         AND&lt;br /&gt;
                         SPJ.nomer_detali != P.nomer_detali&lt;br /&gt;
                        )&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
      nazvanie&lt;br /&gt;
 ------------------&lt;br /&gt;
  штуцерная деталь&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 30 ===&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют, по крайней мере, все те детали, которые поставляет поставщик с номером &#039;S2&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT imya&lt;br /&gt;
FROM spasoi_ekz.s S&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT nomer_detali&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJY&lt;br /&gt;
                  WHERE nomer_postavshika = &#039;S2&#039;&lt;br /&gt;
                    AND NOT EXISTS (&lt;br /&gt;
                                    SELECT *&lt;br /&gt;
                                    FROM spasoi_ekz.spj&lt;br /&gt;
                                    WHERE nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                                      AND nomer_detali = SPJY.nomer_detali&lt;br /&gt;
                                   )&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  imya&lt;br /&gt;
 ------------&lt;br /&gt;
  Оша&lt;br /&gt;
  Бран Старк&lt;br /&gt;
 (2 rows)&lt;br /&gt;
[[Категория:Структурное проектирование АСОИ (10 семестр)]]&lt;/div&gt;</summary>
		<author><name>81.9.52.28</name></author>
	</entry>
	<entry>
		<id>https://iu5bmstu.ru/index.php?title=SQL-%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D1%8B_%D0%BA_%D1%8D%D0%BA%D0%B7%D0%B0%D0%BC%D0%B5%D0%BD%D1%83_%D0%BF%D0%BE_%D0%A1%D0%9F%D0%90%D0%A1%D0%9E%D0%98_(10_%D1%81%D0%B5%D0%BC%D0%B5%D1%81%D1%82%D1%80)&amp;diff=3871</id>
		<title>SQL-запросы к экзамену по СПАСОИ (10 семестр)</title>
		<link rel="alternate" type="text/html" href="https://iu5bmstu.ru/index.php?title=SQL-%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D1%8B_%D0%BA_%D1%8D%D0%BA%D0%B7%D0%B0%D0%BC%D0%B5%D0%BD%D1%83_%D0%BF%D0%BE_%D0%A1%D0%9F%D0%90%D0%A1%D0%9E%D0%98_(10_%D1%81%D0%B5%D0%BC%D0%B5%D1%81%D1%82%D1%80)&amp;diff=3871"/>
		<updated>2013-06-16T11:56:08Z</updated>

		<summary type="html">&lt;p&gt;81.9.52.28: /* Билет 14 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right; clear:both; margin-right:1.0em;&amp;quot;&amp;gt;__TOC__&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Билет экзамена по [[:Категория:Структурное проектирование АСОИ (10 семестр) | СПАСОИ]] состоит из двух частей:&lt;br /&gt;
# теория;&lt;br /&gt;
# SQL-запрос.&lt;br /&gt;
&lt;br /&gt;
На этой странице собраны все сформированные запросы по билетам.&lt;br /&gt;
&lt;br /&gt;
Странно, что ни в одном билете нет запроса с сортировкой результатов. Возможно, они буду в дополнительных заданиях.&lt;br /&gt;
&lt;br /&gt;
== Схема БД ==&lt;br /&gt;
&lt;br /&gt;
Схема БД используется всё [[СПАСОИ_(10)_-_Лекция_№8_-_SQL#Некоторые возможности языка SQL | та же]], что была в прошлом семестре и на лекциях.&lt;br /&gt;
&lt;br /&gt;
Для написания запросов и проверки их выполнения создана БД в СУБД [http://www.postgresql.org/ PostgreSQL].&lt;br /&gt;
&lt;br /&gt;
Скрипт создания можно загрузить [http://yadi.sk/d/ArwqOGAy5pPfi отсюда].&lt;br /&gt;
&lt;br /&gt;
=== Таблицы БД ===&lt;br /&gt;
&lt;br /&gt;
==== Поставщики ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.s;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika |       imya       | sostoyanie |   gorod&lt;br /&gt;
 -------------------+------------------+------------+------------&lt;br /&gt;
  S5                | Мелисандра       |      65000 | Мадрид&lt;br /&gt;
  S2                | Бран Старк       |      60000 | Мурманск&lt;br /&gt;
  S1                | Якен Хгар        |    1500000 | Йокогама&lt;br /&gt;
  S7                | Сирио Форель     |    1500000 | Йокогама&lt;br /&gt;
  S4                | Джейме Ланнистер |     750000 | Лондон&lt;br /&gt;
  S3                | Серсея Ланнистер |    1200000 | Лондон&lt;br /&gt;
  S8                | Тирион Ланнистер |       2571 | Манчестер&lt;br /&gt;
  S9                | Иванов           |      35000 | Мытищи&lt;br /&gt;
  S10               | Русе Болтон      |      44444 | Баренцбург&lt;br /&gt;
  S11               | Петров Иван      |      35000 | Мытищи&lt;br /&gt;
  S14               | Рендилл Тарли    |    1111111 | Прага&lt;br /&gt;
  S13               | Сэмвелл Тарли    |     999999 | Прага&lt;br /&gt;
  S6                | Оша              |            | Москва&lt;br /&gt;
  S16               | Ходор            |            | Москва&lt;br /&gt;
  S15               | Мелисса Флорент  |     888888 | Стокгольм&lt;br /&gt;
  S12               | Петров Пётр      |      35001 | Мытищи&lt;br /&gt;
  S17               | Томми Версетти   |  123456789 | Майами&lt;br /&gt;
  S18               | Безликий         |          1 | Йокогама&lt;br /&gt;
 (18 rows)&lt;br /&gt;
&lt;br /&gt;
==== Детали ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.p;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_detali |       nazvanie       |     cvet      | ves  |      gorod&lt;br /&gt;
 --------------+----------------------+---------------+------+-----------------&lt;br /&gt;
  P9           | подставка            | синий         |  400 | Нижний Новгород&lt;br /&gt;
  P10          | стойка               | синий         | 2000 | Нижний Новгород&lt;br /&gt;
  P11          | абажур               | синий         |  400 | Нижний Новгород&lt;br /&gt;
  P1           | гайка                | чёрный        |   20 | Лондон&lt;br /&gt;
  P3           | ось                  | белый         | 5000 | Эдинбург&lt;br /&gt;
  P4           | зубчатое колесо      | чёрный        |   50 | Эдинбург&lt;br /&gt;
  P6           | транзистор           | коричневый    |    2 | Токио&lt;br /&gt;
  P7           | печатная плата       | зелёный       |  200 | Токио&lt;br /&gt;
  P8           | диод                 | коричневый    |    1 | Токио&lt;br /&gt;
  P12          | универсальная деталь | универсальный |    1 | Париж&lt;br /&gt;
  P13          | уникальная деталь    | уникальный    |    1 | Бостон&lt;br /&gt;
  P14          | болт                 | серый         |   20 | Ижевск&lt;br /&gt;
  P15          | рама                 | красный       | 3000 | Манчестер&lt;br /&gt;
  P16          | колесо               | белый         | 1500 | Манчестер&lt;br /&gt;
  P5           | втулка               | серый         |  350 | Манчестер&lt;br /&gt;
  P17          | бумага               | белый         |    1 | Астрахань&lt;br /&gt;
  P18          | плитка               | белый         |  300 | Флоренция&lt;br /&gt;
  P19          | орнамент             | серый         |  800 | Флоренция&lt;br /&gt;
  P20          | уголок               | серый         |  100 | Флоренция&lt;br /&gt;
  P21          | гайка 01-01          | серебристый   |   20 | Клин&lt;br /&gt;
  P22          | усиленная рама       | красный       | 3200 | Череповец&lt;br /&gt;
  P23          | винт                 | розовый       |    5 | Ижевск&lt;br /&gt;
  P24          | труселя              | красный       |   20 | Челябинск&lt;br /&gt;
  P25          | штуцерная деталь     | коричневый    |  450 | Череповец&lt;br /&gt;
  P2           | шуруп                | чёрный        |    5 | Лондон&lt;br /&gt;
  P26          | лезвие               | бесцветный    |  120 | Йокогама&lt;br /&gt;
 (26 rows)&lt;br /&gt;
&lt;br /&gt;
==== Изделия ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.j;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_izdelia |       nazvanie        |      gorod&lt;br /&gt;
 ---------------+-----------------------+-----------------&lt;br /&gt;
  J1            | автомобиль            | Магнитогорск&lt;br /&gt;
  J2            | процессор             | Зеленоград&lt;br /&gt;
  J3            | торшер                | Нижний Новгород&lt;br /&gt;
  J4            | универсальное изделие | Париж&lt;br /&gt;
  J5            | уникальное изделие    | Бостон&lt;br /&gt;
  J6            | велосипед 01/23       | Манчестер&lt;br /&gt;
  J7            | изделие из болтов     | Челябинск&lt;br /&gt;
  J8            | шкаф                  | Ярославль&lt;br /&gt;
  J9            | рама 02-01            | Череповец&lt;br /&gt;
  J10           | книга                 | Астрахань&lt;br /&gt;
  J11           | панно 01-03           | Флоренция&lt;br /&gt;
  J12           | велосипед 03-04       | Клин&lt;br /&gt;
  J13           | рама 02-03            | Череповец&lt;br /&gt;
  J14           | штуцер 01-02          | Череповец&lt;br /&gt;
  J15           | велосипед 01-04       | Клин&lt;br /&gt;
  J16           | кружевное бельё       | Челябинск&lt;br /&gt;
  J17           | штуцер 01-03          | Череповец&lt;br /&gt;
  J18           | кинжал                | Йокогама&lt;br /&gt;
 (18 rows)&lt;br /&gt;
&lt;br /&gt;
==== Сборки ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.spj;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika | nomer_detali | nomer_izdelia | kolichestvo&lt;br /&gt;
 -------------------+--------------+---------------+-------------&lt;br /&gt;
  S1                | P6           | J2            |          20&lt;br /&gt;
  S1                | P7           | J2            |           5&lt;br /&gt;
  S2                | P1           | J1            |           4&lt;br /&gt;
  S6                | P4           | J1            |           2&lt;br /&gt;
  S6                | P5           | J1            |           6&lt;br /&gt;
  S3                | P9           | J3            |           1&lt;br /&gt;
  S4                | P10          | J3            |           1&lt;br /&gt;
  S5                | P11          | J3            |           1&lt;br /&gt;
  S2                | P4           | J1            |           8&lt;br /&gt;
  S6                | P3           | J1            |          50&lt;br /&gt;
  S7                | P8           | J2            |          25&lt;br /&gt;
  S1                | P12          | J4            |           1&lt;br /&gt;
  S2                | P12          | J4            |           1&lt;br /&gt;
  S3                | P12          | J4            |           1&lt;br /&gt;
  S4                | P12          | J4            |           1&lt;br /&gt;
  S5                | P12          | J4            |           1&lt;br /&gt;
  S7                | P12          | J4            |           1&lt;br /&gt;
  S7                | P2           | J1            |           1&lt;br /&gt;
  S6                | P2           | J1            |           9&lt;br /&gt;
  S6                | P12          | J4            |           7&lt;br /&gt;
  S1                | P13          | J5            |          14&lt;br /&gt;
  S6                | P14          | J1            |        9000&lt;br /&gt;
  S2                | P14          | J1            |           3&lt;br /&gt;
  S6                | P1           | J1            |          12&lt;br /&gt;
  S8                | P15          | J6            |           1&lt;br /&gt;
  S8                | P16          | J6            |           2&lt;br /&gt;
  S3                | P5           | J6            |          10&lt;br /&gt;
  S10               | P2           | J8            |           4&lt;br /&gt;
  S8                | P1           | J7            |          16&lt;br /&gt;
  S9                | P14          | J7            |           3&lt;br /&gt;
  S11               | P10          | J3            |           2&lt;br /&gt;
  S12               | P15          | J1            |           3&lt;br /&gt;
  S11               | P11          | J3            |           4&lt;br /&gt;
  S10               | P14          | J9            |           5&lt;br /&gt;
  S13               | P17          | J10           |        1001&lt;br /&gt;
  S14               | P17          | J10           |        1111&lt;br /&gt;
  S15               | P17          | J10           |        1010&lt;br /&gt;
  S5                | P18          | J11           |           9&lt;br /&gt;
  S5                | P19          | J11           |           1&lt;br /&gt;
  S5                | P20          | J11           |           4&lt;br /&gt;
  S9                | P14          | J8            |          25&lt;br /&gt;
  S12               | P21          | J12           |          15&lt;br /&gt;
  S11               | P22          | J13           |           9&lt;br /&gt;
  S11               | P1           | J14           |          26&lt;br /&gt;
  S12               | P1           | J14           |          13&lt;br /&gt;
  S12               | P2           | J14           |          54&lt;br /&gt;
  S12               | P23          | J4            |         101&lt;br /&gt;
  S12               | P16          | J15           |          40&lt;br /&gt;
  S7                | P21          | J12           |           3&lt;br /&gt;
  S8                | P21          | J12           |           4&lt;br /&gt;
  S9                | P21          | J12           |           5&lt;br /&gt;
  S1                | P24          | J16           |           1&lt;br /&gt;
  S1                | P15          | J6            |           3&lt;br /&gt;
  S4                | P25          | J17           |           1&lt;br /&gt;
  S17               | P16          | J1            |           4&lt;br /&gt;
  S18               | P26          | J18           |           1&lt;br /&gt;
 (56 rows)&lt;br /&gt;
&lt;br /&gt;
== Готовые запросы ==&lt;br /&gt;
&lt;br /&gt;
Если видите, что тот или иной запрос можно составить короче и рациональней - смело вносите правку.&lt;br /&gt;
&lt;br /&gt;
В трёх билетах в задании на запрос встречается формулировка &amp;quot;&#039;&#039;только и только&#039;&#039;&amp;quot;. Как оказалось, это означает следующее: если холодильники поставляет &#039;&#039;только и только&#039;&#039; Уася, то:&lt;br /&gt;
# кроме Уаси никто не поставляет холодильники;&lt;br /&gt;
# Уася не поставляет ничего, кроме холодильников.&lt;br /&gt;
&lt;br /&gt;
Существующие запросы, естественно, оказались неправильными и их пришлось переписать. &amp;lt;s&amp;gt;Великий и могучий русский языка, ну что за экономия на бумаге.&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Билет 1 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера поставщиков, которые поставляют, по крайней мере, все те детали, которые поставляет поставщик с номером &#039;S2&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nomer_postavshika&lt;br /&gt;
FROM spasoi_ekz.spj SPJX&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT nomer_detali&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJY&lt;br /&gt;
                  WHERE nomer_postavshika = &#039;S2&#039;&lt;br /&gt;
                    AND NOT EXISTS (&lt;br /&gt;
                                    SELECT *&lt;br /&gt;
                                    FROM spasoi_ekz.spj&lt;br /&gt;
                                    WHERE nomer_postavshika = SPJX.nomer_postavshika&lt;br /&gt;
                                      AND nomer_detali = SPJY.nomer_detali&lt;br /&gt;
                                   )&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika&lt;br /&gt;
 -------------------&lt;br /&gt;
  S6&lt;br /&gt;
  S2&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 2 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера деталей и общее их количество для всех номеров деталей, поставляемых более чем одним поставщиком.&lt;br /&gt;
&lt;br /&gt;
Текст запроса, каким его дал Григорьев на лекции, впоследствии исправив его:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali AS &amp;quot;Номер детали&amp;quot;,&lt;br /&gt;
       SUM(kolichestvo) AS &amp;quot;Сколько штук поставляется&amp;quot;,&lt;br /&gt;
       COUNT(DISTINCT nomer_postavshika) AS &amp;quot;Сколько у неё поставщиков&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_postavshika) &amp;gt; 1;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali AS &amp;quot;Номер детали&amp;quot;,&lt;br /&gt;
       kol AS &amp;quot;Сколько штук поставляется&amp;quot;&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT nomer_detali,&lt;br /&gt;
             SUM(kolichestvo) AS kol,&lt;br /&gt;
             COUNT(DISTINCT nomer_postavshika)&lt;br /&gt;
      FROM spasoi_ekz.spj&lt;br /&gt;
      GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_postavshika) &amp;gt; 1&lt;br /&gt;
     ) A;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер детали | Сколько штук поставляется | Сколько у неё поставщиков&lt;br /&gt;
 --------------+---------------------------+---------------------------&lt;br /&gt;
  P1           |                        71 |                         5&lt;br /&gt;
  P10          |                         3 |                         2&lt;br /&gt;
  P11          |                         5 |                         2&lt;br /&gt;
  P12          |                        13 |                         7&lt;br /&gt;
  P14          |                      9036 |                         4&lt;br /&gt;
  P15          |                         7 |                         3&lt;br /&gt;
  P16          |                        46 |                         3&lt;br /&gt;
  P17          |                      3122 |                         3&lt;br /&gt;
  P2           |                        68 |                         4&lt;br /&gt;
  P21          |                        27 |                         4&lt;br /&gt;
  P4           |                        10 |                         2&lt;br /&gt;
  P5           |                        16 |                         2&lt;br /&gt;
 (12 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 3 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера поставщиков, поставляющих детали с номером &#039;P1&#039; для какого-либо изделия в количестве (в поставке) большим, чем средний объём поставок деталей с номером &#039;P2&#039; для этого изделия.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT X.nomer_postavshika &lt;br /&gt;
FROM spasoi_ekz.spj X&lt;br /&gt;
WHERE X.nomer_detali = &#039;P1&#039;&lt;br /&gt;
  AND X.kolichestvo &amp;gt; (&lt;br /&gt;
                       SELECT AVG(kolichestvo)&lt;br /&gt;
                       FROM spasoi_ekz.spj&lt;br /&gt;
                       WHERE nomer_izdelia = X.nomer_izdelia&lt;br /&gt;
                         AND nomer_detali = &#039;P2&#039;&lt;br /&gt;
                      );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но длиннее и нерациональней&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nomer_postavshika&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT *&lt;br /&gt;
      FROM spasoi_ekz.spj&lt;br /&gt;
      WHERE nomer_izdelia IN(&lt;br /&gt;
                             SELECT nomer_izdelia&lt;br /&gt;
                             FROM spasoi_ekz.spj&lt;br /&gt;
                             WHERE nomer_detali = &#039;P1&#039;&lt;br /&gt;
                            )&lt;br /&gt;
        AND nomer_izdelia IN(&lt;br /&gt;
	                     SELECT nomer_izdelia&lt;br /&gt;
	                     FROM spasoi_ekz.spj&lt;br /&gt;
	                     WHERE nomer_detali = &#039;P2&#039;&lt;br /&gt;
	                    )&lt;br /&gt;
     ) A&lt;br /&gt;
WHERE nomer_detali = &#039;P1&#039; AND kolichestvo &amp;gt;&lt;br /&gt;
(&lt;br /&gt;
 SELECT AVG(kolichestvo)&lt;br /&gt;
 FROM (&lt;br /&gt;
       SELECT *&lt;br /&gt;
       FROM spasoi_ekz.spj&lt;br /&gt;
       WHERE nomer_izdelia IN(&lt;br /&gt;
                              SELECT nomer_izdelia&lt;br /&gt;
                              FROM spasoi_ekz.spj&lt;br /&gt;
                              WHERE nomer_detali = &#039;P1&#039;&lt;br /&gt;
                             )&lt;br /&gt;
         AND nomer_izdelia IN(&lt;br /&gt;
                              SELECT nomer_izdelia&lt;br /&gt;
                              FROM spasoi_ekz.spj&lt;br /&gt;
                              WHERE nomer_detali = &#039;P2&#039;&lt;br /&gt;
                             )&lt;br /&gt;
      ) B&lt;br /&gt;
 WHERE nomer_detali = &#039;P2&#039;&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika&lt;br /&gt;
 -------------------&lt;br /&gt;
  S6&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 4 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера изделий, для которых детали поставляет только поставщик с номером ‘S1’.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_izdelia&lt;br /&gt;
FROM spasoi_ekz.spj X&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT *&lt;br /&gt;
                  FROM spasoi_ekz.spj&lt;br /&gt;
                  WHERE nomer_postavshika != &#039;S1&#039;&lt;br /&gt;
                    AND X.nomer_izdelia = nomer_izdelia&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но без EXISTS&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nomer_izdelia&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
WHERE nomer_izdelia IN(&lt;br /&gt;
                       SELECT nomer_izdelia&lt;br /&gt;
                       FROM spasoi_ekz.spj&lt;br /&gt;
                       WHERE nomer_postavshika = &#039;S1&#039;&lt;br /&gt;
                      )&lt;br /&gt;
  AND nomer_izdelia NOT IN(&lt;br /&gt;
                           SELECT nomer_izdelia&lt;br /&gt;
                           FROM spasoi_ekz.spj&lt;br /&gt;
                           WHERE nomer_postavshika != &#039;S1&#039;&lt;br /&gt;
                          );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_izdelia&lt;br /&gt;
 ---------------&lt;br /&gt;
  J5&lt;br /&gt;
  J16&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 5 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих детали с названием &amp;quot;Болт&amp;quot; в количестве (в поставке) большим, чем средний объём всех поставок деталей с номером &#039;P1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                           ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                        JOIN spasoi_ekz.p P&lt;br /&gt;
                           ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                              AND nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
WHERE kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT AVG(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj&lt;br /&gt;
                     WHERE nomer_detali = &#039;P1&#039;&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но без JOIN&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s&lt;br /&gt;
WHERE nomer_postavshika IN (&lt;br /&gt;
                            SELECT nomer_postavshika&lt;br /&gt;
                            FROM spasoi_ekz.spj&lt;br /&gt;
                            WHERE nomer_detali = (&lt;br /&gt;
                                                  SELECT nomer_detali&lt;br /&gt;
                                                  FROM spasoi_ekz.p&lt;br /&gt;
                                                  WHERE LOWER(nazvanie) = LOWER(&#039;Болт&#039;)&lt;br /&gt;
                                                 )&lt;br /&gt;
                              AND kolichestvo &amp;gt; (&lt;br /&gt;
                                                 SELECT AVG(kolichestvo)&lt;br /&gt;
                                                 FROM spasoi_ekz.spj&lt;br /&gt;
                                                 WHERE nomer_detali = &#039;P1&#039;&lt;br /&gt;
                                                )&lt;br /&gt;
                           );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  imya&lt;br /&gt;
 ------&lt;br /&gt;
  Оша&lt;br /&gt;
  Иванов&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 6 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия деталей, поставляемых поставщиком, проживающим в том же городе, где изготавливаются эти детали, для изделия с названием ‘Велосипед 01/23’.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT P.nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                        JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                        JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
WHERE S.gorod = P.gorod&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Велосипед 01/23&#039;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос без JOIN&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nazvanie&lt;br /&gt;
FROM spasoi_ekz.S S, spasoi_ekz.p P, spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE S.gorod = P.gorod&lt;br /&gt;
  AND P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
  AND S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
  AND nomer_izdelia = (&lt;br /&gt;
                       SELECT nomer_izdelia&lt;br /&gt;
                       FROM spasoi_ekz.j&lt;br /&gt;
                       WHERE nazvanie = LOWER(&#039;Велосипед 01/23&#039;)&lt;br /&gt;
                      );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nazvanie&lt;br /&gt;
 ----------&lt;br /&gt;
  рама&lt;br /&gt;
  колесо&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 7 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия изделий, куда входят детали с названием &#039;Болт&#039;, поставляемых поставщиками с именем &#039;Иванов&#039;, в количестве (в поставке) большим, чем средний объём поставок для этого изделия.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT J.nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                        JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                        JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
WHERE imya LIKE &#039;%Иванов%&#039;&lt;br /&gt;
  AND P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
  AND kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT AVG(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj X&lt;br /&gt;
                     WHERE SPJ.nomer_izdelia = X.nomer_izdelia&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё один вариант запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie&lt;br /&gt;
FROM spasoi_ekz.j&lt;br /&gt;
WHERE nomer_izdelia IN (&lt;br /&gt;
                        SELECT nomer_izdelia&lt;br /&gt;
                        FROM (spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                                                   ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                                                      AND imya LIKE &#039;%Иванов%&#039;&lt;br /&gt;
                                                 JOIN spasoi_ekz.p P&lt;br /&gt;
                                                   ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                                      AND nazvanie = LOWER(&#039;Болт&#039;)) A&lt;br /&gt;
                        WHERE kolichestvo &amp;gt; (&lt;br /&gt;
                                             SELECT AVG(kolichestvo)&lt;br /&gt;
                                             FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                                                       ON SPJ.nomer_izdelia = A.nomer_izdelia&lt;br /&gt;
                                            )&lt;br /&gt;
                       );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;И ещё вариант этого же запроса, но длиннее и нерациональней&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT J.nazvanie, kolichestvo&lt;br /&gt;
      FROM spasoi_ekz.s S, spasoi_ekz.p P, spasoi_ekz.j J, spasoi_ekz.spj SPJ&lt;br /&gt;
      WHERE J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
        AND P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
        AND P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
        AND S.imya LIKE &#039;%Иванов%&#039;&lt;br /&gt;
        AND S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
     ) A&lt;br /&gt;
WHERE kolichestvo &amp;gt;&lt;br /&gt;
(&lt;br /&gt;
 SELECT AVG(kolichestvo)&lt;br /&gt;
 FROM spasoi_ekz.spj&lt;br /&gt;
 WHERE nomer_izdelia IN(&lt;br /&gt;
                        SELECT J.nomer_izdelia&lt;br /&gt;
                        FROM spasoi_ekz.s S, spasoi_ekz.p P, spasoi_ekz.j J, spasoi_ekz.spj SPJ&lt;br /&gt;
                        WHERE J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
                          AND P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                          AND P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
                          AND S.imya LIKE &#039;%Иванов%&#039;&lt;br /&gt;
                          AND S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
                       )&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
      nazvanie&lt;br /&gt;
 -------------------&lt;br /&gt;
  шкаф&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 8 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера изделий и общее количество деталей для них, поставляемых поставщиками с именем &#039;Петров&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_izdelia AS &amp;quot;Номер изделия&amp;quot;, SUM(kolichestvo) AS &amp;quot;Количество деталей&amp;quot; &lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                             -- так как &amp;quot;поставщикАМИ&amp;quot; и возможны&lt;br /&gt;
                             -- Иван Петров и Петров Иван, то LIKE %Петров%&lt;br /&gt;
                             AND imya LIKE &#039;%Петров%&#039;&lt;br /&gt;
GROUP BY nomer_izdelia;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер изделия | Количество деталей&lt;br /&gt;
 ---------------+--------------------&lt;br /&gt;
  J4            |                101&lt;br /&gt;
  J3            |                  6&lt;br /&gt;
  J13           |                  9&lt;br /&gt;
  J15           |                 40&lt;br /&gt;
  J1            |                  3&lt;br /&gt;
  J12           |                 15&lt;br /&gt;
  J14           |                 93&lt;br /&gt;
 (7 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 9 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера деталей и общее их количество для всех номеров деталей, которые входят только в одно изделие.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali, SUM(kolichestvo)&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_izdelia) = 1;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali, kol FROM (&lt;br /&gt;
       SELECT nomer_detali, SUM(kolichestvo) AS kol, COUNT(DISTINCT nomer_izdelia) = 1&lt;br /&gt;
       FROM spasoi_ekz.spj&lt;br /&gt;
       GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_izdelia) = 1&lt;br /&gt;
    ) A;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_detali | sum&lt;br /&gt;
 --------------+------&lt;br /&gt;
  P10          |    3&lt;br /&gt;
  P11          |    5&lt;br /&gt;
  P12          |   13&lt;br /&gt;
  P13          |   14&lt;br /&gt;
  P17          | 3122&lt;br /&gt;
  P18          |    9&lt;br /&gt;
  P19          |    1&lt;br /&gt;
  P20          |    4&lt;br /&gt;
  P21          |   27&lt;br /&gt;
  P22          |    9&lt;br /&gt;
  P23          |  101&lt;br /&gt;
  P24          |    1&lt;br /&gt;
  P25          |    1&lt;br /&gt;
  P26          |    1&lt;br /&gt;
  P3           |   50&lt;br /&gt;
  P4           |   10&lt;br /&gt;
  P6           |   20&lt;br /&gt;
  P7           |    5&lt;br /&gt;
  P8           |   25&lt;br /&gt;
  P9           |    1&lt;br /&gt;
 (20 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 10 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих детали с названием &#039;Болт&#039; для изделия с названием &#039;Рама 02-01&#039; в количестве (в поставке) большим, чем минимальное значение поставки детали с номером &#039;P1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
			   ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
			      AND J.nazvanie = LOWER(&#039;Рама 02-01&#039;)&lt;br /&gt;
			 JOIN spasoi_ekz.p P&lt;br /&gt;
			   ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
			      AND P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
			 JOIN spasoi_ekz.s S&lt;br /&gt;
			   ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE kolichestvo &amp;gt; (&lt;br /&gt;
		     SELECT MIN(kolichestvo)&lt;br /&gt;
		     FROM spasoi_ekz.spj &lt;br /&gt;
		     WHERE nomer_detali = &#039;P1&#039;&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Русе Болтон&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 11 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия городов и суммарное состояние проживающих в каждом городе поставщиков, у которых минимальный объём поставки деталей больше 1000.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT gorod, SUM(sostoyanie)&lt;br /&gt;
FROM spasoi_ekz.s S&lt;br /&gt;
WHERE (	&lt;br /&gt;
       SELECT MIN(kolichestvo)	&lt;br /&gt;
       FROM spasoi_ekz.spj X	&lt;br /&gt;
       WHERE X.nomer_postavshika = S.nomer_postavshika		&lt;br /&gt;
      ) &amp;gt; 1000&lt;br /&gt;
GROUP BY gorod;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Вариант подлиннее для тех, кто не ищет лёгких путей&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT gorod, SUM(sostoyanie)&lt;br /&gt;
FROM spasoi_ekz.s&lt;br /&gt;
WHERE nomer_postavshika IN (&lt;br /&gt;
                            SELECT nomer_postavshika&lt;br /&gt;
                            FROM spasoi_ekz.spj&lt;br /&gt;
                            GROUP BY nomer_postavshika HAVING MIN(kolichestvo) &amp;gt; 1000&lt;br /&gt;
                           )&lt;br /&gt;
GROUP BY gorod;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;!-- а этот запрос выполняет не совсем то и не правильно&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT gorod, sost&lt;br /&gt;
FROM (&lt;br /&gt;
SELECT gorod, SUM(sostoyanie) AS sost, SUM(SPJ.kolichestvo)&lt;br /&gt;
FROM spasoi_ekz.spj, spasoi_ekz.s&lt;br /&gt;
WHERE S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
GROUP BY S.gorod HAVING SUM(SPJ.kolichestvo) &amp;gt; 1000&lt;br /&gt;
) A;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; --&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
    gorod   |   sum&lt;br /&gt;
 -----------+---------&lt;br /&gt;
  Прага     | 2111110&lt;br /&gt;
  Стокгольм |  888888&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 12 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера деталей, поставляемых для какого-либо изделия поставщиком, проживающим в том же городе, где изготавливается это изделие.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali&lt;br /&gt;
FROM spasoi_ekz.spj SPJ, spasoi_ekz.s S, spasoi_ekz.j J&lt;br /&gt;
WHERE SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
  AND S.gorod = J.gorod&lt;br /&gt;
  AND J.nomer_izdelia = SPJ.nomer_izdelia;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_detali&lt;br /&gt;
 --------------&lt;br /&gt;
  P15&lt;br /&gt;
  P16&lt;br /&gt;
  P26&lt;br /&gt;
 (3 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 13 ===&lt;br /&gt;
&lt;br /&gt;
Написать &amp;lt;u&amp;gt;один&amp;lt;/u&amp;gt; запрос SELECT: выдать количества строк в таблице S (Поставщик) 1) с пустыми значениями и 2) непустыми значениями в столбце Состояние.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT COUNT(*) - COUNT(sostoyanie) AS &amp;quot;С пустым состоянием&amp;quot;, &lt;br /&gt;
       COUNT(sostoyanie) AS &amp;quot;С не пустым состоянием&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.s;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но длиннее и нерациональней&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SELECT COUNT(Snull.*) AS &amp;quot;С пустым состоянием&amp;quot;, COUNT(Snotnull.sostoyanie) AS &amp;quot;С не пустым состоянием&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.s Snull RIGHT OUTER JOIN spasoi_ekz.s Snotnull&lt;br /&gt;
                                      ON Snull.nomer_postavshika = Snotnull.nomer_postavshika&lt;br /&gt;
                                         AND Snull.sostoyanie IS NULL;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  С пустым состоянием | С не пустым состоянием&lt;br /&gt;
 ---------------------+-----------------------&lt;br /&gt;
                    2 |                    16&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 14 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют детали только и только для изделия с номером &#039;J1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
Чтобы продемонстрировать выполнение запроса наглядно, возьмём поставщика не &#039;J1&#039;, а &#039;S18&#039;, который был создан специально для этого запроса. Если оставить &#039;J1&#039;, то наглядности не получится, так как по нашей схеме БД этот поставщик не попадает под условие &amp;quot;только и только&amp;quot;, и запрос вернёт пустой результат.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SELECT DISTINCT imya&lt;br /&gt;
FROM spasoi_ekz.s&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT *&lt;br /&gt;
                  FROM spasoi_ekz.spj&lt;br /&gt;
                  WHERE &lt;br /&gt;
			(&lt;br /&gt;
				nomer_izdelia != &#039;J18&#039; AND &lt;br /&gt;
				nomer_postavshika  = s.nomer_postavshika &lt;br /&gt;
			)&lt;br /&gt;
		OR&lt;br /&gt;
			(&lt;br /&gt;
				nomer_izdelia = &#039;J18&#039; AND &lt;br /&gt;
				nomer_postavshika  != s.nomer_postavshika &lt;br /&gt;
			)&lt;br /&gt;
		);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj A JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON A.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE nomer_izdelia = &#039;J1&#039;&lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT nomer_postavshika&lt;br /&gt;
                  FROM spasoi_ekz.spj&lt;br /&gt;
                  WHERE nomer_izdelia != &#039;J1&#039;&lt;br /&gt;
                    AND nomer_postavshika = A.nomer_postavshika&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       imya&lt;br /&gt;
 ----------------&lt;br /&gt;
  Безликий&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 15 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать наименования изделий, для которых детали поставляют только те поставщики, у которых состояние больше 1000000 у.е.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT J.nazvanie&lt;br /&gt;
FROM spasoi_ekz.j J&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
		  SELECT *&lt;br /&gt;
		  FROM spasoi_ekz.spj X JOIN spasoi_ekz.s S&lt;br /&gt;
		                          ON X.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
		  WHERE sostoyanie &amp;lt;= 1000000&lt;br /&gt;
		  AND X.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Вариант этого запроса без NOT EXISTS&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                        JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
WHERE sostoyanie &amp;gt; 1000000&lt;br /&gt;
  AND SPJ.nomer_izdelia NOT IN (&lt;br /&gt;
                                SELECT nomer_izdelia&lt;br /&gt;
                                FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                                                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                                WHERE sostoyanie &amp;lt; 1000000&lt;br /&gt;
                               );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       nazvanie&lt;br /&gt;
 --------------------&lt;br /&gt;
  кружевное бельё&lt;br /&gt;
  уникальное изделие&lt;br /&gt;
  процессор&lt;br /&gt;
 (3 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 16 ===&lt;br /&gt;
Написать запрос SELECT: выдать цвета и для каждого цвета общее количество деталей, входящих в изделие с названием &#039;Панно 01-03&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT cvet AS &amp;quot;Цвет&amp;quot;, SUM(kolichestvo) AS &amp;quot;Деталей&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
			     AND J.nazvanie = LOWER(&#039;Панно 01-03&#039;)&lt;br /&gt;
			JOIN spasoi_ekz.P P&lt;br /&gt;
			  ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
GROUP BY cvet;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Цвет  | Деталей&lt;br /&gt;
 -------+---------&lt;br /&gt;
  белый |       9&lt;br /&gt;
  серый |       5&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 17 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера поставщиков и количество сделанных ими поставок при условии, что среднее число деталей во всех этих поставках больше 1000.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_postavshika AS &amp;quot;Номер поставщика&amp;quot;, COUNT(*) AS &amp;quot;Количество поставок&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
WHERE nomer_postavshika IN (&lt;br /&gt;
                            SELECT nomer_postavshika&lt;br /&gt;
                            FROM spasoi_ekz.spj&lt;br /&gt;
                            GROUP BY nomer_postavshika HAVING AVG(kolichestvo) &amp;gt; 1000&lt;br /&gt;
                           )&lt;br /&gt;
GROUP BY nomer_postavshika;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_postavshika AS &amp;quot;Номер поставщика&amp;quot;, COUNT(*) AS &amp;quot;Количество поставок&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
WHERE (&lt;br /&gt;
       SELECT AVG(kolichestvo)&lt;br /&gt;
       FROM spasoi_ekz.spj X&lt;br /&gt;
       WHERE X.nomer_postavshika = spj.nomer_postavshika&lt;br /&gt;
       ) &amp;gt; 1000&lt;br /&gt;
GROUP BY nomer_postavshika;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;И ещё вариант запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nom AS &amp;quot;Номер поставщика&amp;quot;, cnt AS &amp;quot;Количество поставок&amp;quot;&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT S.nomer_postavshika AS nom,&lt;br /&gt;
             COUNT(SPJ.nomer_postavshika) AS cnt,&lt;br /&gt;
             AVG(SPJ.kolichestvo) AS kol&lt;br /&gt;
      FROM spasoi_ekz.s S, spasoi_ekz.spj SPJ&lt;br /&gt;
      WHERE S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
      GROUP BY S.nomer_postavshika&lt;br /&gt;
     ) A&lt;br /&gt;
WHERE kol &amp;gt; 1000;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер поставщика | Количество поставок&lt;br /&gt;
 ------------------+---------------------&lt;br /&gt;
  S13              |                   1&lt;br /&gt;
  S6               |                   7&lt;br /&gt;
  S14              |                   1&lt;br /&gt;
  S15              |                   1&lt;br /&gt;
 (4 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 18 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, имеющих состояние больше 1000 и поставляющих деталь с названием &#039;Гайка 01-01&#039; для изделия с названием &#039;Велосипед 03-04&#039; в количестве (в поставке) большим, чем средний объём поставки, выполненной поставщиками с именем &#039;Иванов&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:2nd dufficulty.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;5px&amp;quot;&amp;gt;&#039;&#039;&#039;Второй по сложности запрос экзамена!&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;4px&amp;quot;&amp;gt;&#039;&#039;&#039;Вот уж не свезло, так не свезло&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                    JOIN spasoi_ekz.j J&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
WHERE sostoyanie &amp;gt; 1000&lt;br /&gt;
  AND P.nazvanie = LOWER(&#039;Гайка 01-01&#039;)&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Велосипед 03-04&#039;)&lt;br /&gt;
  AND kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT AVG(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                       ON SPJ.nomer_postavshika = S.nomer_postavshika &lt;br /&gt;
                     WHERE S.imya = &#039;Иванов&#039;&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Пётр&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 19 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия красных деталей, которые входят только в изделие с названием &#039;Рама 02-03&#039; в количестве, меньшем 10 единиц в поставке.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT X.nazvanie&lt;br /&gt;
FROM spasoi_ekz.p X JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_detali = X.nomer_detali&lt;br /&gt;
WHERE X.cvet = &#039;красный&#039;&lt;br /&gt;
  AND kolichestvo &amp;lt; 10&lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT *&lt;br /&gt;
                  FROM spasoi_ekz.j J JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                                        ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                  WHERE J.nazvanie != LOWER(&#039;Рама 02-03&#039;)&lt;br /&gt;
                    AND X.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант этого же запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT P.nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND cvet = &#039;красный&#039;&lt;br /&gt;
                        JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                              AND J.nazvanie = LOWER(&#039;Рама 02-03&#039;)&lt;br /&gt;
WHERE kolichestvo &amp;lt; 10&lt;br /&gt;
  AND SPJ.nomer_detali NOT IN (&lt;br /&gt;
                               SELECT nomer_detali&lt;br /&gt;
                               FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                                         ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                                                            AND J.nazvanie != LOWER(&#039;Рама 02-03&#039;)&lt;br /&gt;
                              );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     nazvanie&lt;br /&gt;
 ----------------&lt;br /&gt;
  усиленная рама&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 20 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих только белые детали.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT *&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                                            ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                  WHERE nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    AND P.cvet != &#039;белый&#039;&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё один вариант этого же запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND cvet = &#039;белый&#039;&lt;br /&gt;
                        JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE S.nomer_postavshika NOT IN (&lt;br /&gt;
                                  SELECT nomer_postavshika&lt;br /&gt;
                                  FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                                                            ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                                               AND cvet != &#039;белый&#039;&lt;br /&gt;
                                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;И ещё один вариант этого же запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s&lt;br /&gt;
WHERE nomer_postavshika NOT IN  (&lt;br /&gt;
                                 SELECT spj.nomer_postavshika&lt;br /&gt;
                                 FROM spasoi_ekz.spj SPJ, spasoi_ekz.p P&lt;br /&gt;
                                 WHERE SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                   AND p.cvet != &#039;белый&#039;&lt;br /&gt;
                                )&lt;br /&gt;
  AND nomer_postavshika  IN (&lt;br /&gt;
                             SELECT spj.nomer_postavshika&lt;br /&gt;
                             FROM spasoi_ekz.spj SPJ, spasoi_ekz.p P&lt;br /&gt;
                             WHERE SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                               AND p.cvet = &#039;белый&#039;&lt;br /&gt;
                            );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       imya&lt;br /&gt;
 -----------------&lt;br /&gt;
  Рендилл Тарли&lt;br /&gt;
  Сэмвелл Тарли&lt;br /&gt;
  Мелисса Флорент&lt;br /&gt;
  Томми Версетти&lt;br /&gt;
 (4 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 21 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия изделий, для которых детали поставляет только и только поставщик с номером &#039;S1&#039;.&lt;br /&gt;
&lt;br /&gt;
Чтобы продемонстрировать выполнение запроса наглядно, возьмём поставщика не &#039;S1&#039;, а &#039;S18&#039;, который был создан специально для этого запроса. Если оставить &#039;S1&#039;, то наглядности не получится, так как по нашей схеме БД этот поставщик не попадает под условие &amp;quot;&#039;&#039;только и только&#039;&#039;&amp;quot;, и запрос вернёт пустой результат.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie&lt;br /&gt;
FROM  spasoi_ekz.SPJ SPJ&lt;br /&gt;
WHERE &lt;br /&gt;
  NOT EXISTS (&lt;br /&gt;
                  SELECT *&lt;br /&gt;
                  FROM spasoi_ekz.spj&lt;br /&gt;
                  WHERE nomer_postavshika != &#039;S18&#039; AND nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
                 )&lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT *&lt;br /&gt;
                  FROM spasoi_ekz.spj&lt;br /&gt;
                  WHERE nomer_postavshika = &#039;S18&#039; AND nomer_izdelia != SPJ.nomer_izdelia&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       nazvanie&lt;br /&gt;
 --------------------&lt;br /&gt;
  кинжал&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 22 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют только детали с номером &#039;P1&#039; для изделия с именем &#039;Штуцер 01-02&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                             AND J.nazvanie = LOWER(&#039;Штуцер 01-02&#039;)&lt;br /&gt;
                        JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT *&lt;br /&gt;
                  FROM spasoi_ekz.spj X JOIN spasoi_ekz.j J&lt;br /&gt;
                                          ON X.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                  WHERE X.nomer_detali != &#039;P1&#039; &lt;br /&gt;
                    AND j.nazvanie = LOWER(&#039;Штуцер 01-02&#039;)&lt;br /&gt;
                    AND S.nomer_postavshika = X.nomer_postavshika&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- неверный запрос - номер изделия, а не название&lt;br /&gt;
SELECT imya FROM S X&lt;br /&gt;
JOIN SPJ Y ON X.nomer_postavshika=Y.nomer_postavshika&lt;br /&gt;
WHERE X.nomer_postavshika NOT IN (&lt;br /&gt;
                  SELECT DISTINCT nomer_postavshika FROM SPJ Z&lt;br /&gt;
                  WHERE Z.nomer_izdelia != &#039;Штуцер 01-02&#039;&lt;br /&gt;
                  AND Z.nomer_detali!=&#039;P1&#039;);--&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но длиннее и нерациональней&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                             AND J.nazvanie = LOWER(&#039;Штуцер 01-02&#039;)&lt;br /&gt;
                        JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND SPJ.nomer_detali = &#039;P1&#039;&lt;br /&gt;
                        JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE SPJ.nomer_postavshika NOT IN (&lt;br /&gt;
                                    SELECT nomer_postavshika&lt;br /&gt;
                                    FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                                              ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                                                                 AND J.nazvanie = LOWER(&#039;Штуцер 01-02&#039;)&lt;br /&gt;
                                                            JOIN spasoi_ekz.p P&lt;br /&gt;
                                                              ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                                                 AND SPJ.nomer_detali != &#039;P1&#039;&lt;br /&gt;
                              );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Иван&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 23 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют деталь с названием &#039;Винт&#039; в количестве большим 100 единиц в одной поставке и имеют состояние больше среднего по их родному городу.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT S.imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
WHERE P.nazvanie = LOWER(&#039;Винт&#039;)&lt;br /&gt;
  AND SPJ.kolichestvo &amp;gt; 100&lt;br /&gt;
  AND S.sostoyanie &amp;gt; (&lt;br /&gt;
                      SELECT AVG(SS.sostoyanie)&lt;br /&gt;
                      FROM spasoi_ekz.s SS&lt;br /&gt;
                      WHERE SS.gorod = S.gorod&lt;br /&gt;
                     );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Пётр&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 24 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать наименования деталей и общее их количество для всех наименований деталей, изготавливаемых в одном городе.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- С этим запросом возникла неожиданная проблема - задание то ли неполное, то ли неправильное, потому что нельзя однозначно сказать, что по нему требуется сделать.&lt;br /&gt;
&lt;br /&gt;
Так что тут несколько вариантов запросов (кто как понял).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Первый вариант запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie, kol&lt;br /&gt;
FROM spasoi_ekz.p A, (&lt;br /&gt;
                      SELECT X.gorod, SUM(kolichestvo) as kol&lt;br /&gt;
                      FROM spasoi_ekz.p X, spasoi_ekz.spj Y&lt;br /&gt;
                      WHERE Y.nomer_detali = X.nomer_detali&lt;br /&gt;
                      GROUP BY X.gorod&lt;br /&gt;
                     ) B&lt;br /&gt;
WHERE A.gorod = B.gorod;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
        nazvanie       | kol&lt;br /&gt;
 ----------------------+------&lt;br /&gt;
  подставка            |    9&lt;br /&gt;
  стойка               |    9&lt;br /&gt;
  абажур               |    9&lt;br /&gt;
  гайка                |  139&lt;br /&gt;
  ось                  |   60&lt;br /&gt;
  зубчатое колесо      |   60&lt;br /&gt;
  транзистор           |   50&lt;br /&gt;
  печатная плата       |   50&lt;br /&gt;
  диод                 |   50&lt;br /&gt;
  универсальная деталь |   13&lt;br /&gt;
  уникальная деталь    |   14&lt;br /&gt;
  болт                 | 9137&lt;br /&gt;
  рама                 |   69&lt;br /&gt;
  колесо               |   69&lt;br /&gt;
  втулка               |   69&lt;br /&gt;
  бумага               | 3122&lt;br /&gt;
  плитка               |   14&lt;br /&gt;
  орнамент             |   14&lt;br /&gt;
  уголок               |   14&lt;br /&gt;
  гайка 01-01          |   27&lt;br /&gt;
  усиленная рама       |   10&lt;br /&gt;
  винт                 | 9137&lt;br /&gt;
  труселя              |    1&lt;br /&gt;
  штуцерная деталь     |   10&lt;br /&gt;
  шуруп                |  139&lt;br /&gt;
 (25 rows)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
и --&amp;gt;&lt;br /&gt;
В уточнение задания Григорьев сказал следующее: &amp;quot;&#039;&#039;Следует учесть, что в качестве наименования города может выступать переменная, в которую в некоторой программе должно быть занесено конкретное значение перед выполнением запроса&#039;&#039;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
То есть, вообще говоря, задание на запрос неполное, и его можно трактовать так: выдать наименования деталей и общее их количество для всех наименований деталей, изготавливаемых в городе &amp;lt;code&amp;gt;%НАЗВАНИЕГОРОДА%&amp;lt;/code&amp;gt;. Вот эта переменная задаётся где-то в программе, а в БД идёт запрос с уже подставленным конкретным названием. &lt;br /&gt;
&lt;br /&gt;
Этот вариант запроса составлен, например, для Лондона. &lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie, SUM(kolichestvo)&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
WHERE gorod = &#039;Лондон&#039;&lt;br /&gt;
GROUP BY nazvanie;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nazvanie | sum&lt;br /&gt;
 ----------+-----&lt;br /&gt;
  гайка    |  71&lt;br /&gt;
  шуруп    |  68&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 25 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих хотя бы одну белую деталь для изделия с названием &#039;Велосипед 01-04&#039; с объёмом поставки большим, чем средний объём поставки этого поставщика.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                    JOIN spasoi_ekz.j J&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
WHERE cvet = &#039;белый&#039;&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Велосипед 01-04&#039;)&lt;br /&gt;
  AND kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT AVG(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj SPJ&lt;br /&gt;
                     WHERE SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Пётр&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 26 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера красных деталей и количество поставок этих деталей.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT P.nomer_detali AS &amp;quot;Номер детали&amp;quot;, COUNT(kolichestvo) AS &amp;quot;Количество поставок с ней&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.p P, spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
  AND cvet = &#039;красный&#039;&lt;br /&gt;
GROUP BY P.nomer_detali;   &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос через JOIN&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT SPJ.nomer_detali AS &amp;quot;Номер детали&amp;quot;, COUNT(kolichestvo) AS &amp;quot;Количество поставок с ней&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND cvet = &#039;красный&#039;&lt;br /&gt;
GROUP BY SPJ.nomer_detali;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер детали | Количество поставок с ней&lt;br /&gt;
 --------------+---------------------------&lt;br /&gt;
  P15          |                         3&lt;br /&gt;
  P22          |                         1&lt;br /&gt;
  P24          |                         1&lt;br /&gt;
 (3 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 27 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать наименования городов и среднее состояние поставщиков для каждого города, поставляющих детали с названием &#039;Гайка 01-01&#039; для изделия с названием &#039;Велосипед 03-04&#039; в количестве (в поставке) большим, чем минимальный объём поставки, выполненной поставщиком с номером &#039;S1&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:1st dufficulty.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;7px&amp;quot;&amp;gt;&#039;&#039;&#039;Сложнейший запрос экзамена!&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;5px&amp;quot;&amp;gt;&#039;&#039;&#039;Сохрани Джа, вытащить такое&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT S.gorod AS &amp;quot;Город&amp;quot;, AVG(S.sostoyanie) AS &amp;quot;Среднее состояние&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                    JOIN spasoi_ekz.j J&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
WHERE P.nazvanie = LOWER(&#039;Гайка 01-01&#039;)&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Велосипед 03-04&#039;)&lt;br /&gt;
  AND kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT MIN(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj&lt;br /&gt;
                     WHERE nomer_postavshika = &#039;S1&#039;&lt;br /&gt;
                    )&lt;br /&gt;
GROUP BY S.gorod;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
    Город   |   Среднее состояние&lt;br /&gt;
 -----------+-----------------------&lt;br /&gt;
  Мытищи    |    35000.500000000000&lt;br /&gt;
  Йокогама  |  1500000.000000000000&lt;br /&gt;
  Манчестер | 2571.0000000000000000&lt;br /&gt;
 (3 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 28 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия изделий, куда входит хотя бы одна красная деталь весом больше 10 граммов, поставляемая только поставщиком с номером &#039;S1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT J.nazvanie&lt;br /&gt;
FROM spasoi_ekz.j J JOIN spasoi_ekz.spj SPJ1&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ1.nomer_izdelia&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ1.nomer_detali&lt;br /&gt;
WHERE P.ves &amp;gt; 10&lt;br /&gt;
 AND P.cvet = &#039;красный&#039;&lt;br /&gt;
 AND NOT EXISTS (&lt;br /&gt;
                 SELECT SPJ2.nomer_postavshika&lt;br /&gt;
                 FROM spasoi_ekz.spj SPJ2         &lt;br /&gt;
                 WHERE SPJ2.nomer_detali = P.nomer_detali&lt;br /&gt;
	 	   AND SPJ2.nomer_postavshika != &#039;S1&#039;&lt;br /&gt;
                );                     &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     nazvanie&lt;br /&gt;
 -----------------&lt;br /&gt;
  кружевное бельё&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 29 ===&lt;br /&gt;
Написать запрос SELECT: выдать названия деталей, которые входят только и только в состав изделия с названием &#039;Штуцер 01-03&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nazvanie&lt;br /&gt;
FROM spasoi_ekz.p P&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT SPJ.nomer_izdelia&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                            ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
                  WHERE (&lt;br /&gt;
                         J.nazvanie != LOWER(&#039;Штуцер 01-03&#039;)&lt;br /&gt;
                         AND&lt;br /&gt;
                         SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                        )&lt;br /&gt;
                     OR (&lt;br /&gt;
                         J.nazvanie = LOWER(&#039;Штуцер 01-03&#039;)&lt;br /&gt;
                         AND&lt;br /&gt;
                         SPJ.nomer_detali != P.nomer_detali&lt;br /&gt;
                        )&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
      nazvanie&lt;br /&gt;
 ------------------&lt;br /&gt;
  штуцерная деталь&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 30 ===&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют, по крайней мере, все те детали, которые поставляет поставщик с номером &#039;S2&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT imya&lt;br /&gt;
FROM spasoi_ekz.s S&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT nomer_detali&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJY&lt;br /&gt;
                  WHERE nomer_postavshika = &#039;S2&#039;&lt;br /&gt;
                    AND NOT EXISTS (&lt;br /&gt;
                                    SELECT *&lt;br /&gt;
                                    FROM spasoi_ekz.spj&lt;br /&gt;
                                    WHERE nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                                      AND nomer_detali = SPJY.nomer_detali&lt;br /&gt;
                                   )&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  imya&lt;br /&gt;
 ------------&lt;br /&gt;
  Оша&lt;br /&gt;
  Бран Старк&lt;br /&gt;
 (2 rows)&lt;br /&gt;
[[Категория:Структурное проектирование АСОИ (10 семестр)]]&lt;/div&gt;</summary>
		<author><name>81.9.52.28</name></author>
	</entry>
	<entry>
		<id>https://iu5bmstu.ru/index.php?title=SQL-%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D1%8B_%D0%BA_%D1%8D%D0%BA%D0%B7%D0%B0%D0%BC%D0%B5%D0%BD%D1%83_%D0%BF%D0%BE_%D0%A1%D0%9F%D0%90%D0%A1%D0%9E%D0%98_(10_%D1%81%D0%B5%D0%BC%D0%B5%D1%81%D1%82%D1%80)&amp;diff=3868</id>
		<title>SQL-запросы к экзамену по СПАСОИ (10 семестр)</title>
		<link rel="alternate" type="text/html" href="https://iu5bmstu.ru/index.php?title=SQL-%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D1%8B_%D0%BA_%D1%8D%D0%BA%D0%B7%D0%B0%D0%BC%D0%B5%D0%BD%D1%83_%D0%BF%D0%BE_%D0%A1%D0%9F%D0%90%D0%A1%D0%9E%D0%98_(10_%D1%81%D0%B5%D0%BC%D0%B5%D1%81%D1%82%D1%80)&amp;diff=3868"/>
		<updated>2013-06-16T11:50:07Z</updated>

		<summary type="html">&lt;p&gt;81.9.52.28: /* Билет 14 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right; clear:both; margin-right:1.0em;&amp;quot;&amp;gt;__TOC__&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Билет экзамена по [[:Категория:Структурное проектирование АСОИ (10 семестр) | СПАСОИ]] состоит из двух частей:&lt;br /&gt;
# теория;&lt;br /&gt;
# SQL-запрос.&lt;br /&gt;
&lt;br /&gt;
На этой странице собраны все сформированные запросы по билетам.&lt;br /&gt;
&lt;br /&gt;
Странно, что ни в одном билете нет запроса с сортировкой результатов. Возможно, они буду в дополнительных заданиях.&lt;br /&gt;
&lt;br /&gt;
== Схема БД ==&lt;br /&gt;
&lt;br /&gt;
Схема БД используется всё [[СПАСОИ_(10)_-_Лекция_№8_-_SQL#Некоторые возможности языка SQL | та же]], что была в прошлом семестре и на лекциях.&lt;br /&gt;
&lt;br /&gt;
Для написания запросов и проверки их выполнения создана БД в СУБД [http://www.postgresql.org/ PostgreSQL].&lt;br /&gt;
&lt;br /&gt;
Скрипт создания можно загрузить [http://yadi.sk/d/ArwqOGAy5pPfi отсюда].&lt;br /&gt;
&lt;br /&gt;
=== Таблицы БД ===&lt;br /&gt;
&lt;br /&gt;
==== Поставщики ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.s;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika |       imya       | sostoyanie |   gorod&lt;br /&gt;
 -------------------+------------------+------------+------------&lt;br /&gt;
  S5                | Мелисандра       |      65000 | Мадрид&lt;br /&gt;
  S2                | Бран Старк       |      60000 | Мурманск&lt;br /&gt;
  S1                | Якен Хгар        |    1500000 | Йокогама&lt;br /&gt;
  S7                | Сирио Форель     |    1500000 | Йокогама&lt;br /&gt;
  S4                | Джейме Ланнистер |     750000 | Лондон&lt;br /&gt;
  S3                | Серсея Ланнистер |    1200000 | Лондон&lt;br /&gt;
  S8                | Тирион Ланнистер |       2571 | Манчестер&lt;br /&gt;
  S9                | Иванов           |      35000 | Мытищи&lt;br /&gt;
  S10               | Русе Болтон      |      44444 | Баренцбург&lt;br /&gt;
  S11               | Петров Иван      |      35000 | Мытищи&lt;br /&gt;
  S14               | Рендилл Тарли    |    1111111 | Прага&lt;br /&gt;
  S13               | Сэмвелл Тарли    |     999999 | Прага&lt;br /&gt;
  S6                | Оша              |            | Москва&lt;br /&gt;
  S16               | Ходор            |            | Москва&lt;br /&gt;
  S15               | Мелисса Флорент  |     888888 | Стокгольм&lt;br /&gt;
  S12               | Петров Пётр      |      35001 | Мытищи&lt;br /&gt;
  S17               | Томми Версетти   |  123456789 | Майами&lt;br /&gt;
  S18               | Безликий         |          1 | Йокогама&lt;br /&gt;
 (18 rows)&lt;br /&gt;
&lt;br /&gt;
==== Детали ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.p;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_detali |       nazvanie       |     cvet      | ves  |      gorod&lt;br /&gt;
 --------------+----------------------+---------------+------+-----------------&lt;br /&gt;
  P9           | подставка            | синий         |  400 | Нижний Новгород&lt;br /&gt;
  P10          | стойка               | синий         | 2000 | Нижний Новгород&lt;br /&gt;
  P11          | абажур               | синий         |  400 | Нижний Новгород&lt;br /&gt;
  P1           | гайка                | чёрный        |   20 | Лондон&lt;br /&gt;
  P3           | ось                  | белый         | 5000 | Эдинбург&lt;br /&gt;
  P4           | зубчатое колесо      | чёрный        |   50 | Эдинбург&lt;br /&gt;
  P6           | транзистор           | коричневый    |    2 | Токио&lt;br /&gt;
  P7           | печатная плата       | зелёный       |  200 | Токио&lt;br /&gt;
  P8           | диод                 | коричневый    |    1 | Токио&lt;br /&gt;
  P12          | универсальная деталь | универсальный |    1 | Париж&lt;br /&gt;
  P13          | уникальная деталь    | уникальный    |    1 | Бостон&lt;br /&gt;
  P14          | болт                 | серый         |   20 | Ижевск&lt;br /&gt;
  P15          | рама                 | красный       | 3000 | Манчестер&lt;br /&gt;
  P16          | колесо               | белый         | 1500 | Манчестер&lt;br /&gt;
  P5           | втулка               | серый         |  350 | Манчестер&lt;br /&gt;
  P17          | бумага               | белый         |    1 | Астрахань&lt;br /&gt;
  P18          | плитка               | белый         |  300 | Флоренция&lt;br /&gt;
  P19          | орнамент             | серый         |  800 | Флоренция&lt;br /&gt;
  P20          | уголок               | серый         |  100 | Флоренция&lt;br /&gt;
  P21          | гайка 01-01          | серебристый   |   20 | Клин&lt;br /&gt;
  P22          | усиленная рама       | красный       | 3200 | Череповец&lt;br /&gt;
  P23          | винт                 | розовый       |    5 | Ижевск&lt;br /&gt;
  P24          | труселя              | красный       |   20 | Челябинск&lt;br /&gt;
  P25          | штуцерная деталь     | коричневый    |  450 | Череповец&lt;br /&gt;
  P2           | шуруп                | чёрный        |    5 | Лондон&lt;br /&gt;
  P26          | лезвие               | бесцветный    |  120 | Йокогама&lt;br /&gt;
 (26 rows)&lt;br /&gt;
&lt;br /&gt;
==== Изделия ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.j;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_izdelia |       nazvanie        |      gorod&lt;br /&gt;
 ---------------+-----------------------+-----------------&lt;br /&gt;
  J1            | автомобиль            | Магнитогорск&lt;br /&gt;
  J2            | процессор             | Зеленоград&lt;br /&gt;
  J3            | торшер                | Нижний Новгород&lt;br /&gt;
  J4            | универсальное изделие | Париж&lt;br /&gt;
  J5            | уникальное изделие    | Бостон&lt;br /&gt;
  J6            | велосипед 01/23       | Манчестер&lt;br /&gt;
  J7            | изделие из болтов     | Челябинск&lt;br /&gt;
  J8            | шкаф                  | Ярославль&lt;br /&gt;
  J9            | рама 02-01            | Череповец&lt;br /&gt;
  J10           | книга                 | Астрахань&lt;br /&gt;
  J11           | панно 01-03           | Флоренция&lt;br /&gt;
  J12           | велосипед 03-04       | Клин&lt;br /&gt;
  J13           | рама 02-03            | Череповец&lt;br /&gt;
  J14           | штуцер 01-02          | Череповец&lt;br /&gt;
  J15           | велосипед 01-04       | Клин&lt;br /&gt;
  J16           | кружевное бельё       | Челябинск&lt;br /&gt;
  J17           | штуцер 01-03          | Череповец&lt;br /&gt;
  J18           | кинжал                | Йокогама&lt;br /&gt;
 (18 rows)&lt;br /&gt;
&lt;br /&gt;
==== Сборки ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.spj;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika | nomer_detali | nomer_izdelia | kolichestvo&lt;br /&gt;
 -------------------+--------------+---------------+-------------&lt;br /&gt;
  S1                | P6           | J2            |          20&lt;br /&gt;
  S1                | P7           | J2            |           5&lt;br /&gt;
  S2                | P1           | J1            |           4&lt;br /&gt;
  S6                | P4           | J1            |           2&lt;br /&gt;
  S6                | P5           | J1            |           6&lt;br /&gt;
  S3                | P9           | J3            |           1&lt;br /&gt;
  S4                | P10          | J3            |           1&lt;br /&gt;
  S5                | P11          | J3            |           1&lt;br /&gt;
  S2                | P4           | J1            |           8&lt;br /&gt;
  S6                | P3           | J1            |          50&lt;br /&gt;
  S7                | P8           | J2            |          25&lt;br /&gt;
  S1                | P12          | J4            |           1&lt;br /&gt;
  S2                | P12          | J4            |           1&lt;br /&gt;
  S3                | P12          | J4            |           1&lt;br /&gt;
  S4                | P12          | J4            |           1&lt;br /&gt;
  S5                | P12          | J4            |           1&lt;br /&gt;
  S7                | P12          | J4            |           1&lt;br /&gt;
  S7                | P2           | J1            |           1&lt;br /&gt;
  S6                | P2           | J1            |           9&lt;br /&gt;
  S6                | P12          | J4            |           7&lt;br /&gt;
  S1                | P13          | J5            |          14&lt;br /&gt;
  S6                | P14          | J1            |        9000&lt;br /&gt;
  S2                | P14          | J1            |           3&lt;br /&gt;
  S6                | P1           | J1            |          12&lt;br /&gt;
  S8                | P15          | J6            |           1&lt;br /&gt;
  S8                | P16          | J6            |           2&lt;br /&gt;
  S3                | P5           | J6            |          10&lt;br /&gt;
  S10               | P2           | J8            |           4&lt;br /&gt;
  S8                | P1           | J7            |          16&lt;br /&gt;
  S9                | P14          | J7            |           3&lt;br /&gt;
  S11               | P10          | J3            |           2&lt;br /&gt;
  S12               | P15          | J1            |           3&lt;br /&gt;
  S11               | P11          | J3            |           4&lt;br /&gt;
  S10               | P14          | J9            |           5&lt;br /&gt;
  S13               | P17          | J10           |        1001&lt;br /&gt;
  S14               | P17          | J10           |        1111&lt;br /&gt;
  S15               | P17          | J10           |        1010&lt;br /&gt;
  S5                | P18          | J11           |           9&lt;br /&gt;
  S5                | P19          | J11           |           1&lt;br /&gt;
  S5                | P20          | J11           |           4&lt;br /&gt;
  S9                | P14          | J8            |          25&lt;br /&gt;
  S12               | P21          | J12           |          15&lt;br /&gt;
  S11               | P22          | J13           |           9&lt;br /&gt;
  S11               | P1           | J14           |          26&lt;br /&gt;
  S12               | P1           | J14           |          13&lt;br /&gt;
  S12               | P2           | J14           |          54&lt;br /&gt;
  S12               | P23          | J4            |         101&lt;br /&gt;
  S12               | P16          | J15           |          40&lt;br /&gt;
  S7                | P21          | J12           |           3&lt;br /&gt;
  S8                | P21          | J12           |           4&lt;br /&gt;
  S9                | P21          | J12           |           5&lt;br /&gt;
  S1                | P24          | J16           |           1&lt;br /&gt;
  S1                | P15          | J6            |           3&lt;br /&gt;
  S4                | P25          | J17           |           1&lt;br /&gt;
  S17               | P16          | J1            |           4&lt;br /&gt;
  S18               | P26          | J18           |           1&lt;br /&gt;
 (56 rows)&lt;br /&gt;
&lt;br /&gt;
== Готовые запросы ==&lt;br /&gt;
&lt;br /&gt;
Если видите, что тот или иной запрос можно составить короче и рациональней - смело вносите правку.&lt;br /&gt;
&lt;br /&gt;
В трёх билетах в задании на запрос встречается формулировка &amp;quot;&#039;&#039;только и только&#039;&#039;&amp;quot;. Как оказалось, это означает следующее: если холодильники поставляет &#039;&#039;только и только&#039;&#039; Уася, то:&lt;br /&gt;
# кроме Уаси никто не поставляет холодильники;&lt;br /&gt;
# Уася не поставляет ничего, кроме холодильников.&lt;br /&gt;
&lt;br /&gt;
Существующие запросы, естественно, оказались неправильными и их пришлось переписать. &amp;lt;s&amp;gt;Великий и могучий русский языка, ну что за экономия на бумаге.&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Билет 1 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера поставщиков, которые поставляют, по крайней мере, все те детали, которые поставляет поставщик с номером &#039;S2&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nomer_postavshika&lt;br /&gt;
FROM spasoi_ekz.spj SPJX&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT nomer_detali&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJY&lt;br /&gt;
                  WHERE nomer_postavshika = &#039;S2&#039;&lt;br /&gt;
                    AND NOT EXISTS (&lt;br /&gt;
                                    SELECT *&lt;br /&gt;
                                    FROM spasoi_ekz.spj&lt;br /&gt;
                                    WHERE nomer_postavshika = SPJX.nomer_postavshika&lt;br /&gt;
                                      AND nomer_detali = SPJY.nomer_detali&lt;br /&gt;
                                   )&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika&lt;br /&gt;
 -------------------&lt;br /&gt;
  S6&lt;br /&gt;
  S2&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 2 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера деталей и общее их количество для всех номеров деталей, поставляемых более чем одним поставщиком.&lt;br /&gt;
&lt;br /&gt;
Текст запроса, каким его дал Григорьев на лекции, впоследствии исправив его:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali AS &amp;quot;Номер детали&amp;quot;,&lt;br /&gt;
       SUM(kolichestvo) AS &amp;quot;Сколько штук поставляется&amp;quot;,&lt;br /&gt;
       COUNT(DISTINCT nomer_postavshika) AS &amp;quot;Сколько у неё поставщиков&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_postavshika) &amp;gt; 1;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali AS &amp;quot;Номер детали&amp;quot;,&lt;br /&gt;
       kol AS &amp;quot;Сколько штук поставляется&amp;quot;&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT nomer_detali,&lt;br /&gt;
             SUM(kolichestvo) AS kol,&lt;br /&gt;
             COUNT(DISTINCT nomer_postavshika)&lt;br /&gt;
      FROM spasoi_ekz.spj&lt;br /&gt;
      GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_postavshika) &amp;gt; 1&lt;br /&gt;
     ) A;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер детали | Сколько штук поставляется | Сколько у неё поставщиков&lt;br /&gt;
 --------------+---------------------------+---------------------------&lt;br /&gt;
  P1           |                        71 |                         5&lt;br /&gt;
  P10          |                         3 |                         2&lt;br /&gt;
  P11          |                         5 |                         2&lt;br /&gt;
  P12          |                        13 |                         7&lt;br /&gt;
  P14          |                      9036 |                         4&lt;br /&gt;
  P15          |                         7 |                         3&lt;br /&gt;
  P16          |                        46 |                         3&lt;br /&gt;
  P17          |                      3122 |                         3&lt;br /&gt;
  P2           |                        68 |                         4&lt;br /&gt;
  P21          |                        27 |                         4&lt;br /&gt;
  P4           |                        10 |                         2&lt;br /&gt;
  P5           |                        16 |                         2&lt;br /&gt;
 (12 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 3 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера поставщиков, поставляющих детали с номером &#039;P1&#039; для какого-либо изделия в количестве (в поставке) большим, чем средний объём поставок деталей с номером &#039;P2&#039; для этого изделия.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT X.nomer_postavshika &lt;br /&gt;
FROM spasoi_ekz.spj X&lt;br /&gt;
WHERE X.nomer_detali = &#039;P1&#039;&lt;br /&gt;
  AND X.kolichestvo &amp;gt; (&lt;br /&gt;
                       SELECT AVG(kolichestvo)&lt;br /&gt;
                       FROM spasoi_ekz.spj&lt;br /&gt;
                       WHERE nomer_izdelia = X.nomer_izdelia&lt;br /&gt;
                         AND nomer_detali = &#039;P2&#039;&lt;br /&gt;
                      );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но длиннее и нерациональней&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nomer_postavshika&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT *&lt;br /&gt;
      FROM spasoi_ekz.spj&lt;br /&gt;
      WHERE nomer_izdelia IN(&lt;br /&gt;
                             SELECT nomer_izdelia&lt;br /&gt;
                             FROM spasoi_ekz.spj&lt;br /&gt;
                             WHERE nomer_detali = &#039;P1&#039;&lt;br /&gt;
                            )&lt;br /&gt;
        AND nomer_izdelia IN(&lt;br /&gt;
	                     SELECT nomer_izdelia&lt;br /&gt;
	                     FROM spasoi_ekz.spj&lt;br /&gt;
	                     WHERE nomer_detali = &#039;P2&#039;&lt;br /&gt;
	                    )&lt;br /&gt;
     ) A&lt;br /&gt;
WHERE nomer_detali = &#039;P1&#039; AND kolichestvo &amp;gt;&lt;br /&gt;
(&lt;br /&gt;
 SELECT AVG(kolichestvo)&lt;br /&gt;
 FROM (&lt;br /&gt;
       SELECT *&lt;br /&gt;
       FROM spasoi_ekz.spj&lt;br /&gt;
       WHERE nomer_izdelia IN(&lt;br /&gt;
                              SELECT nomer_izdelia&lt;br /&gt;
                              FROM spasoi_ekz.spj&lt;br /&gt;
                              WHERE nomer_detali = &#039;P1&#039;&lt;br /&gt;
                             )&lt;br /&gt;
         AND nomer_izdelia IN(&lt;br /&gt;
                              SELECT nomer_izdelia&lt;br /&gt;
                              FROM spasoi_ekz.spj&lt;br /&gt;
                              WHERE nomer_detali = &#039;P2&#039;&lt;br /&gt;
                             )&lt;br /&gt;
      ) B&lt;br /&gt;
 WHERE nomer_detali = &#039;P2&#039;&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika&lt;br /&gt;
 -------------------&lt;br /&gt;
  S6&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 4 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера изделий, для которых детали поставляет только поставщик с номером ‘S1’.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_izdelia&lt;br /&gt;
FROM spasoi_ekz.spj X&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT *&lt;br /&gt;
                  FROM spasoi_ekz.spj&lt;br /&gt;
                  WHERE nomer_postavshika != &#039;S1&#039;&lt;br /&gt;
                    AND X.nomer_izdelia = nomer_izdelia&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но без EXISTS&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nomer_izdelia&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
WHERE nomer_izdelia IN(&lt;br /&gt;
                       SELECT nomer_izdelia&lt;br /&gt;
                       FROM spasoi_ekz.spj&lt;br /&gt;
                       WHERE nomer_postavshika = &#039;S1&#039;&lt;br /&gt;
                      )&lt;br /&gt;
  AND nomer_izdelia NOT IN(&lt;br /&gt;
                           SELECT nomer_izdelia&lt;br /&gt;
                           FROM spasoi_ekz.spj&lt;br /&gt;
                           WHERE nomer_postavshika != &#039;S1&#039;&lt;br /&gt;
                          );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_izdelia&lt;br /&gt;
 ---------------&lt;br /&gt;
  J5&lt;br /&gt;
  J16&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 5 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих детали с названием &amp;quot;Болт&amp;quot; в количестве (в поставке) большим, чем средний объём всех поставок деталей с номером &#039;P1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                           ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                        JOIN spasoi_ekz.p P&lt;br /&gt;
                           ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                              AND nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
WHERE kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT AVG(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj&lt;br /&gt;
                     WHERE nomer_detali = &#039;P1&#039;&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но без JOIN&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s&lt;br /&gt;
WHERE nomer_postavshika IN (&lt;br /&gt;
                            SELECT nomer_postavshika&lt;br /&gt;
                            FROM spasoi_ekz.spj&lt;br /&gt;
                            WHERE nomer_detali = (&lt;br /&gt;
                                                  SELECT nomer_detali&lt;br /&gt;
                                                  FROM spasoi_ekz.p&lt;br /&gt;
                                                  WHERE LOWER(nazvanie) = LOWER(&#039;Болт&#039;)&lt;br /&gt;
                                                 )&lt;br /&gt;
                              AND kolichestvo &amp;gt; (&lt;br /&gt;
                                                 SELECT AVG(kolichestvo)&lt;br /&gt;
                                                 FROM spasoi_ekz.spj&lt;br /&gt;
                                                 WHERE nomer_detali = &#039;P1&#039;&lt;br /&gt;
                                                )&lt;br /&gt;
                           );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  imya&lt;br /&gt;
 ------&lt;br /&gt;
  Оша&lt;br /&gt;
  Иванов&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 6 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия деталей, поставляемых поставщиком, проживающим в том же городе, где изготавливаются эти детали, для изделия с названием ‘Велосипед 01/23’.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT P.nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                        JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                        JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
WHERE S.gorod = P.gorod&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Велосипед 01/23&#039;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос без JOIN&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nazvanie&lt;br /&gt;
FROM spasoi_ekz.S S, spasoi_ekz.p P, spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE S.gorod = P.gorod&lt;br /&gt;
  AND P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
  AND S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
  AND nomer_izdelia = (&lt;br /&gt;
                       SELECT nomer_izdelia&lt;br /&gt;
                       FROM spasoi_ekz.j&lt;br /&gt;
                       WHERE nazvanie = LOWER(&#039;Велосипед 01/23&#039;)&lt;br /&gt;
                      );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nazvanie&lt;br /&gt;
 ----------&lt;br /&gt;
  рама&lt;br /&gt;
  колесо&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 7 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия изделий, куда входят детали с названием &#039;Болт&#039;, поставляемых поставщиками с именем &#039;Иванов&#039;, в количестве (в поставке) большим, чем средний объём поставок для этого изделия.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT J.nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                        JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                        JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
WHERE imya LIKE &#039;%Иванов%&#039;&lt;br /&gt;
  AND P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
  AND kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT AVG(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj X&lt;br /&gt;
                     WHERE SPJ.nomer_izdelia = X.nomer_izdelia&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё один вариант запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie&lt;br /&gt;
FROM spasoi_ekz.j&lt;br /&gt;
WHERE nomer_izdelia IN (&lt;br /&gt;
                        SELECT nomer_izdelia&lt;br /&gt;
                        FROM (spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                                                   ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                                                      AND imya LIKE &#039;%Иванов%&#039;&lt;br /&gt;
                                                 JOIN spasoi_ekz.p P&lt;br /&gt;
                                                   ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                                      AND nazvanie = LOWER(&#039;Болт&#039;)) A&lt;br /&gt;
                        WHERE kolichestvo &amp;gt; (&lt;br /&gt;
                                             SELECT AVG(kolichestvo)&lt;br /&gt;
                                             FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                                                       ON SPJ.nomer_izdelia = A.nomer_izdelia&lt;br /&gt;
                                            )&lt;br /&gt;
                       );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;И ещё вариант этого же запроса, но длиннее и нерациональней&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT J.nazvanie, kolichestvo&lt;br /&gt;
      FROM spasoi_ekz.s S, spasoi_ekz.p P, spasoi_ekz.j J, spasoi_ekz.spj SPJ&lt;br /&gt;
      WHERE J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
        AND P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
        AND P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
        AND S.imya LIKE &#039;%Иванов%&#039;&lt;br /&gt;
        AND S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
     ) A&lt;br /&gt;
WHERE kolichestvo &amp;gt;&lt;br /&gt;
(&lt;br /&gt;
 SELECT AVG(kolichestvo)&lt;br /&gt;
 FROM spasoi_ekz.spj&lt;br /&gt;
 WHERE nomer_izdelia IN(&lt;br /&gt;
                        SELECT J.nomer_izdelia&lt;br /&gt;
                        FROM spasoi_ekz.s S, spasoi_ekz.p P, spasoi_ekz.j J, spasoi_ekz.spj SPJ&lt;br /&gt;
                        WHERE J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
                          AND P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                          AND P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
                          AND S.imya LIKE &#039;%Иванов%&#039;&lt;br /&gt;
                          AND S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
                       )&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
      nazvanie&lt;br /&gt;
 -------------------&lt;br /&gt;
  шкаф&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 8 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера изделий и общее количество деталей для них, поставляемых поставщиками с именем &#039;Петров&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_izdelia AS &amp;quot;Номер изделия&amp;quot;, SUM(kolichestvo) AS &amp;quot;Количество деталей&amp;quot; &lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                             -- так как &amp;quot;поставщикАМИ&amp;quot; и возможны&lt;br /&gt;
                             -- Иван Петров и Петров Иван, то LIKE %Петров%&lt;br /&gt;
                             AND imya LIKE &#039;%Петров%&#039;&lt;br /&gt;
GROUP BY nomer_izdelia;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер изделия | Количество деталей&lt;br /&gt;
 ---------------+--------------------&lt;br /&gt;
  J4            |                101&lt;br /&gt;
  J3            |                  6&lt;br /&gt;
  J13           |                  9&lt;br /&gt;
  J15           |                 40&lt;br /&gt;
  J1            |                  3&lt;br /&gt;
  J12           |                 15&lt;br /&gt;
  J14           |                 93&lt;br /&gt;
 (7 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 9 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера деталей и общее их количество для всех номеров деталей, которые входят только в одно изделие.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali, SUM(kolichestvo)&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_izdelia) = 1;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali, kol FROM (&lt;br /&gt;
       SELECT nomer_detali, SUM(kolichestvo) AS kol, COUNT(DISTINCT nomer_izdelia) = 1&lt;br /&gt;
       FROM spasoi_ekz.spj&lt;br /&gt;
       GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_izdelia) = 1&lt;br /&gt;
    ) A;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_detali | sum&lt;br /&gt;
 --------------+------&lt;br /&gt;
  P10          |    3&lt;br /&gt;
  P11          |    5&lt;br /&gt;
  P12          |   13&lt;br /&gt;
  P13          |   14&lt;br /&gt;
  P17          | 3122&lt;br /&gt;
  P18          |    9&lt;br /&gt;
  P19          |    1&lt;br /&gt;
  P20          |    4&lt;br /&gt;
  P21          |   27&lt;br /&gt;
  P22          |    9&lt;br /&gt;
  P23          |  101&lt;br /&gt;
  P24          |    1&lt;br /&gt;
  P25          |    1&lt;br /&gt;
  P26          |    1&lt;br /&gt;
  P3           |   50&lt;br /&gt;
  P4           |   10&lt;br /&gt;
  P6           |   20&lt;br /&gt;
  P7           |    5&lt;br /&gt;
  P8           |   25&lt;br /&gt;
  P9           |    1&lt;br /&gt;
 (20 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 10 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих детали с названием &#039;Болт&#039; для изделия с названием &#039;Рама 02-01&#039; в количестве (в поставке) большим, чем минимальное значение поставки детали с номером &#039;P1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
			   ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
			      AND J.nazvanie = LOWER(&#039;Рама 02-01&#039;)&lt;br /&gt;
			 JOIN spasoi_ekz.p P&lt;br /&gt;
			   ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
			      AND P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
			 JOIN spasoi_ekz.s S&lt;br /&gt;
			   ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE kolichestvo &amp;gt; (&lt;br /&gt;
		     SELECT MIN(kolichestvo)&lt;br /&gt;
		     FROM spasoi_ekz.spj &lt;br /&gt;
		     WHERE nomer_detali = &#039;P1&#039;&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Русе Болтон&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 11 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия городов и суммарное состояние проживающих в каждом городе поставщиков, у которых минимальный объём поставки деталей больше 1000.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT gorod, SUM(sostoyanie)&lt;br /&gt;
FROM spasoi_ekz.s S&lt;br /&gt;
WHERE (	&lt;br /&gt;
       SELECT MIN(kolichestvo)	&lt;br /&gt;
       FROM spasoi_ekz.spj X	&lt;br /&gt;
       WHERE X.nomer_postavshika = S.nomer_postavshika		&lt;br /&gt;
      ) &amp;gt; 1000&lt;br /&gt;
GROUP BY gorod;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Вариант подлиннее для тех, кто не ищет лёгких путей&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT gorod, SUM(sostoyanie)&lt;br /&gt;
FROM spasoi_ekz.s&lt;br /&gt;
WHERE nomer_postavshika IN (&lt;br /&gt;
                            SELECT nomer_postavshika&lt;br /&gt;
                            FROM spasoi_ekz.spj&lt;br /&gt;
                            GROUP BY nomer_postavshika HAVING MIN(kolichestvo) &amp;gt; 1000&lt;br /&gt;
                           )&lt;br /&gt;
GROUP BY gorod;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;!-- а этот запрос выполняет не совсем то и не правильно&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT gorod, sost&lt;br /&gt;
FROM (&lt;br /&gt;
SELECT gorod, SUM(sostoyanie) AS sost, SUM(SPJ.kolichestvo)&lt;br /&gt;
FROM spasoi_ekz.spj, spasoi_ekz.s&lt;br /&gt;
WHERE S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
GROUP BY S.gorod HAVING SUM(SPJ.kolichestvo) &amp;gt; 1000&lt;br /&gt;
) A;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; --&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
    gorod   |   sum&lt;br /&gt;
 -----------+---------&lt;br /&gt;
  Прага     | 2111110&lt;br /&gt;
  Стокгольм |  888888&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 12 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера деталей, поставляемых для какого-либо изделия поставщиком, проживающим в том же городе, где изготавливается это изделие.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali&lt;br /&gt;
FROM spasoi_ekz.spj SPJ, spasoi_ekz.s S, spasoi_ekz.j J&lt;br /&gt;
WHERE SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
  AND S.gorod = J.gorod&lt;br /&gt;
  AND J.nomer_izdelia = SPJ.nomer_izdelia;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_detali&lt;br /&gt;
 --------------&lt;br /&gt;
  P15&lt;br /&gt;
  P16&lt;br /&gt;
  P26&lt;br /&gt;
 (3 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 13 ===&lt;br /&gt;
&lt;br /&gt;
Написать &amp;lt;u&amp;gt;один&amp;lt;/u&amp;gt; запрос SELECT: выдать количества строк в таблице S (Поставщик) 1) с пустыми значениями и 2) непустыми значениями в столбце Состояние.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT COUNT(*) - COUNT(sostoyanie) AS &amp;quot;С пустым состоянием&amp;quot;, &lt;br /&gt;
       COUNT(sostoyanie) AS &amp;quot;С не пустым состоянием&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.s;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но длиннее и нерациональней&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SELECT COUNT(Snull.*) AS &amp;quot;С пустым состоянием&amp;quot;, COUNT(Snotnull.sostoyanie) AS &amp;quot;С не пустым состоянием&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.s Snull RIGHT OUTER JOIN spasoi_ekz.s Snotnull&lt;br /&gt;
                                      ON Snull.nomer_postavshika = Snotnull.nomer_postavshika&lt;br /&gt;
                                         AND Snull.sostoyanie IS NULL;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  С пустым состоянием | С не пустым состоянием&lt;br /&gt;
 ---------------------+-----------------------&lt;br /&gt;
                    2 |                    16&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 14 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют детали только и только для изделия с номером &#039;J1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SELECT DISTINCT imya&lt;br /&gt;
FROM spasoi_ekz.s&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT *&lt;br /&gt;
                  FROM spasoi_ekz.spj&lt;br /&gt;
                  WHERE &lt;br /&gt;
			(&lt;br /&gt;
				nomer_izdelia != &#039;J18&#039; AND &lt;br /&gt;
				nomer_postavshika  = s.nomer_postavshika &lt;br /&gt;
			)&lt;br /&gt;
		OR&lt;br /&gt;
			(&lt;br /&gt;
				nomer_izdelia = &#039;J18&#039; AND &lt;br /&gt;
				nomer_postavshika  != s.nomer_postavshika &lt;br /&gt;
			)&lt;br /&gt;
		);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj A JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON A.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE nomer_izdelia = &#039;J1&#039;&lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT nomer_postavshika&lt;br /&gt;
                  FROM spasoi_ekz.spj&lt;br /&gt;
                  WHERE nomer_izdelia != &#039;J1&#039;&lt;br /&gt;
                    AND nomer_postavshika = A.nomer_postavshika&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       imya&lt;br /&gt;
 ----------------&lt;br /&gt;
  Безликий&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 15 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать наименования изделий, для которых детали поставляют только те поставщики, у которых состояние больше 1000000 у.е.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT J.nazvanie&lt;br /&gt;
FROM spasoi_ekz.j J&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
		  SELECT *&lt;br /&gt;
		  FROM spasoi_ekz.spj X JOIN spasoi_ekz.s S&lt;br /&gt;
		                          ON X.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
		  WHERE sostoyanie &amp;lt;= 1000000&lt;br /&gt;
		  AND X.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Вариант этого запроса без NOT EXISTS&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                        JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
WHERE sostoyanie &amp;gt; 1000000&lt;br /&gt;
  AND SPJ.nomer_izdelia NOT IN (&lt;br /&gt;
                                SELECT nomer_izdelia&lt;br /&gt;
                                FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                                                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                                WHERE sostoyanie &amp;lt; 1000000&lt;br /&gt;
                               );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       nazvanie&lt;br /&gt;
 --------------------&lt;br /&gt;
  кружевное бельё&lt;br /&gt;
  уникальное изделие&lt;br /&gt;
  процессор&lt;br /&gt;
 (3 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 16 ===&lt;br /&gt;
Написать запрос SELECT: выдать цвета и для каждого цвета общее количество деталей, входящих в изделие с названием &#039;Панно 01-03&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT cvet AS &amp;quot;Цвет&amp;quot;, SUM(kolichestvo) AS &amp;quot;Деталей&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
			     AND J.nazvanie = LOWER(&#039;Панно 01-03&#039;)&lt;br /&gt;
			JOIN spasoi_ekz.P P&lt;br /&gt;
			  ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
GROUP BY cvet;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Цвет  | Деталей&lt;br /&gt;
 -------+---------&lt;br /&gt;
  белый |       9&lt;br /&gt;
  серый |       5&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 17 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера поставщиков и количество сделанных ими поставок при условии, что среднее число деталей во всех этих поставках больше 1000.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_postavshika AS &amp;quot;Номер поставщика&amp;quot;, COUNT(*) AS &amp;quot;Количество поставок&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
WHERE nomer_postavshika IN (&lt;br /&gt;
                            SELECT nomer_postavshika&lt;br /&gt;
                            FROM spasoi_ekz.spj&lt;br /&gt;
                            GROUP BY nomer_postavshika HAVING AVG(kolichestvo) &amp;gt; 1000&lt;br /&gt;
                           )&lt;br /&gt;
GROUP BY nomer_postavshika;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_postavshika AS &amp;quot;Номер поставщика&amp;quot;, COUNT(*) AS &amp;quot;Количество поставок&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
WHERE (&lt;br /&gt;
       SELECT AVG(kolichestvo)&lt;br /&gt;
       FROM spasoi_ekz.spj X&lt;br /&gt;
       WHERE X.nomer_postavshika = spj.nomer_postavshika&lt;br /&gt;
       ) &amp;gt; 1000&lt;br /&gt;
GROUP BY nomer_postavshika;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;И ещё вариант запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nom AS &amp;quot;Номер поставщика&amp;quot;, cnt AS &amp;quot;Количество поставок&amp;quot;&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT S.nomer_postavshika AS nom,&lt;br /&gt;
             COUNT(SPJ.nomer_postavshika) AS cnt,&lt;br /&gt;
             AVG(SPJ.kolichestvo) AS kol&lt;br /&gt;
      FROM spasoi_ekz.s S, spasoi_ekz.spj SPJ&lt;br /&gt;
      WHERE S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
      GROUP BY S.nomer_postavshika&lt;br /&gt;
     ) A&lt;br /&gt;
WHERE kol &amp;gt; 1000;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер поставщика | Количество поставок&lt;br /&gt;
 ------------------+---------------------&lt;br /&gt;
  S13              |                   1&lt;br /&gt;
  S6               |                   7&lt;br /&gt;
  S14              |                   1&lt;br /&gt;
  S15              |                   1&lt;br /&gt;
 (4 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 18 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, имеющих состояние больше 1000 и поставляющих деталь с названием &#039;Гайка 01-01&#039; для изделия с названием &#039;Велосипед 03-04&#039; в количестве (в поставке) большим, чем средний объём поставки, выполненной поставщиками с именем &#039;Иванов&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:2nd dufficulty.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;5px&amp;quot;&amp;gt;&#039;&#039;&#039;Второй по сложности запрос экзамена!&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;4px&amp;quot;&amp;gt;&#039;&#039;&#039;Вот уж не свезло, так не свезло&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                    JOIN spasoi_ekz.j J&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
WHERE sostoyanie &amp;gt; 1000&lt;br /&gt;
  AND P.nazvanie = LOWER(&#039;Гайка 01-01&#039;)&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Велосипед 03-04&#039;)&lt;br /&gt;
  AND kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT AVG(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                       ON SPJ.nomer_postavshika = S.nomer_postavshika &lt;br /&gt;
                     WHERE S.imya = &#039;Иванов&#039;&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Пётр&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 19 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия красных деталей, которые входят только в изделие с названием &#039;Рама 02-03&#039; в количестве, меньшем 10 единиц в поставке.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT X.nazvanie&lt;br /&gt;
FROM spasoi_ekz.p X JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_detali = X.nomer_detali&lt;br /&gt;
WHERE X.cvet = &#039;красный&#039;&lt;br /&gt;
  AND kolichestvo &amp;lt; 10&lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT *&lt;br /&gt;
                  FROM spasoi_ekz.j J JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                                        ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                  WHERE J.nazvanie != LOWER(&#039;Рама 02-03&#039;)&lt;br /&gt;
                    AND X.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант этого же запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT P.nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND cvet = &#039;красный&#039;&lt;br /&gt;
                        JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                              AND J.nazvanie = LOWER(&#039;Рама 02-03&#039;)&lt;br /&gt;
WHERE kolichestvo &amp;lt; 10&lt;br /&gt;
  AND SPJ.nomer_detali NOT IN (&lt;br /&gt;
                               SELECT nomer_detali&lt;br /&gt;
                               FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                                         ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                                                            AND J.nazvanie != LOWER(&#039;Рама 02-03&#039;)&lt;br /&gt;
                              );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     nazvanie&lt;br /&gt;
 ----------------&lt;br /&gt;
  усиленная рама&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 20 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих только белые детали.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT *&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                                            ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                  WHERE nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    AND P.cvet != &#039;белый&#039;&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё один вариант этого же запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND cvet = &#039;белый&#039;&lt;br /&gt;
                        JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE S.nomer_postavshika NOT IN (&lt;br /&gt;
                                  SELECT nomer_postavshika&lt;br /&gt;
                                  FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                                                            ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                                               AND cvet != &#039;белый&#039;&lt;br /&gt;
                                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;И ещё один вариант этого же запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s&lt;br /&gt;
WHERE nomer_postavshika NOT IN  (&lt;br /&gt;
                                 SELECT spj.nomer_postavshika&lt;br /&gt;
                                 FROM spasoi_ekz.spj SPJ, spasoi_ekz.p P&lt;br /&gt;
                                 WHERE SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                   AND p.cvet != &#039;белый&#039;&lt;br /&gt;
                                )&lt;br /&gt;
  AND nomer_postavshika  IN (&lt;br /&gt;
                             SELECT spj.nomer_postavshika&lt;br /&gt;
                             FROM spasoi_ekz.spj SPJ, spasoi_ekz.p P&lt;br /&gt;
                             WHERE SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                               AND p.cvet = &#039;белый&#039;&lt;br /&gt;
                            );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       imya&lt;br /&gt;
 -----------------&lt;br /&gt;
  Рендилл Тарли&lt;br /&gt;
  Сэмвелл Тарли&lt;br /&gt;
  Мелисса Флорент&lt;br /&gt;
  Томми Версетти&lt;br /&gt;
 (4 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 21 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия изделий, для которых детали поставляет только и только поставщик с номером &#039;S1&#039;.&lt;br /&gt;
&lt;br /&gt;
Чтобы продемонстрировать выполнение запроса наглядно, возьмём поставщика не &#039;S1&#039;, а &#039;S18&#039;, который был создан специально для этого запроса. Если оставить &#039;S1&#039;, то наглядности не получится, так как по нашей схеме БД этот поставщик не попадает под условие &amp;quot;&#039;&#039;только и только&#039;&#039;&amp;quot;, и запрос вернёт пустой результат.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie&lt;br /&gt;
FROM spasoi_ekz.j J, spasoi_ekz.SPJ SPJ&lt;br /&gt;
WHERE J.nomer_izdelia = SPJ.nomer_izdelia &lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT *&lt;br /&gt;
                  FROM spasoi_ekz.spj&lt;br /&gt;
                  WHERE nomer_postavshika != &#039;S18&#039; AND nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                 )&lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT *&lt;br /&gt;
                  FROM spasoi_ekz.spj&lt;br /&gt;
                  WHERE nomer_postavshika = &#039;S18&#039; AND nomer_izdelia != J.nomer_izdelia&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       nazvanie&lt;br /&gt;
 --------------------&lt;br /&gt;
  кинжал&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 22 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют только детали с номером &#039;P1&#039; для изделия с именем &#039;Штуцер 01-02&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                             AND J.nazvanie = LOWER(&#039;Штуцер 01-02&#039;)&lt;br /&gt;
                        JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT *&lt;br /&gt;
                  FROM spasoi_ekz.spj X JOIN spasoi_ekz.j J&lt;br /&gt;
                                          ON X.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                  WHERE X.nomer_detali != &#039;P1&#039; &lt;br /&gt;
                    AND j.nazvanie = LOWER(&#039;Штуцер 01-02&#039;)&lt;br /&gt;
                    AND S.nomer_postavshika = X.nomer_postavshika&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- неверный запрос - номер изделия, а не название&lt;br /&gt;
SELECT imya FROM S X&lt;br /&gt;
JOIN SPJ Y ON X.nomer_postavshika=Y.nomer_postavshika&lt;br /&gt;
WHERE X.nomer_postavshika NOT IN (&lt;br /&gt;
                  SELECT DISTINCT nomer_postavshika FROM SPJ Z&lt;br /&gt;
                  WHERE Z.nomer_izdelia != &#039;Штуцер 01-02&#039;&lt;br /&gt;
                  AND Z.nomer_detali!=&#039;P1&#039;);--&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но длиннее и нерациональней&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                             AND J.nazvanie = LOWER(&#039;Штуцер 01-02&#039;)&lt;br /&gt;
                        JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND SPJ.nomer_detali = &#039;P1&#039;&lt;br /&gt;
                        JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE SPJ.nomer_postavshika NOT IN (&lt;br /&gt;
                                    SELECT nomer_postavshika&lt;br /&gt;
                                    FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                                              ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                                                                 AND J.nazvanie = LOWER(&#039;Штуцер 01-02&#039;)&lt;br /&gt;
                                                            JOIN spasoi_ekz.p P&lt;br /&gt;
                                                              ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                                                 AND SPJ.nomer_detali != &#039;P1&#039;&lt;br /&gt;
                              );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Иван&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 23 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют деталь с названием &#039;Винт&#039; в количестве большим 100 единиц в одной поставке и имеют состояние больше среднего по их родному городу.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT S.imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
WHERE P.nazvanie = LOWER(&#039;Винт&#039;)&lt;br /&gt;
  AND SPJ.kolichestvo &amp;gt; 100&lt;br /&gt;
  AND S.sostoyanie &amp;gt; (&lt;br /&gt;
                      SELECT AVG(SS.sostoyanie)&lt;br /&gt;
                      FROM spasoi_ekz.s SS&lt;br /&gt;
                      WHERE SS.gorod = S.gorod&lt;br /&gt;
                     );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Пётр&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 24 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать наименования деталей и общее их количество для всех наименований деталей, изготавливаемых в одном городе.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- С этим запросом возникла неожиданная проблема - задание то ли неполное, то ли неправильное, потому что нельзя однозначно сказать, что по нему требуется сделать.&lt;br /&gt;
&lt;br /&gt;
Так что тут несколько вариантов запросов (кто как понял).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Первый вариант запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie, kol&lt;br /&gt;
FROM spasoi_ekz.p A, (&lt;br /&gt;
                      SELECT X.gorod, SUM(kolichestvo) as kol&lt;br /&gt;
                      FROM spasoi_ekz.p X, spasoi_ekz.spj Y&lt;br /&gt;
                      WHERE Y.nomer_detali = X.nomer_detali&lt;br /&gt;
                      GROUP BY X.gorod&lt;br /&gt;
                     ) B&lt;br /&gt;
WHERE A.gorod = B.gorod;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
        nazvanie       | kol&lt;br /&gt;
 ----------------------+------&lt;br /&gt;
  подставка            |    9&lt;br /&gt;
  стойка               |    9&lt;br /&gt;
  абажур               |    9&lt;br /&gt;
  гайка                |  139&lt;br /&gt;
  ось                  |   60&lt;br /&gt;
  зубчатое колесо      |   60&lt;br /&gt;
  транзистор           |   50&lt;br /&gt;
  печатная плата       |   50&lt;br /&gt;
  диод                 |   50&lt;br /&gt;
  универсальная деталь |   13&lt;br /&gt;
  уникальная деталь    |   14&lt;br /&gt;
  болт                 | 9137&lt;br /&gt;
  рама                 |   69&lt;br /&gt;
  колесо               |   69&lt;br /&gt;
  втулка               |   69&lt;br /&gt;
  бумага               | 3122&lt;br /&gt;
  плитка               |   14&lt;br /&gt;
  орнамент             |   14&lt;br /&gt;
  уголок               |   14&lt;br /&gt;
  гайка 01-01          |   27&lt;br /&gt;
  усиленная рама       |   10&lt;br /&gt;
  винт                 | 9137&lt;br /&gt;
  труселя              |    1&lt;br /&gt;
  штуцерная деталь     |   10&lt;br /&gt;
  шуруп                |  139&lt;br /&gt;
 (25 rows)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
и --&amp;gt;&lt;br /&gt;
В уточнение задания Григорьев сказал следующее: &amp;quot;&#039;&#039;Следует учесть, что в качестве наименования города может выступать переменная, в которую в некоторой программе должно быть занесено конкретное значение перед выполнением запроса&#039;&#039;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
То есть, вообще говоря, задание на запрос неполное, и его можно трактовать так: выдать наименования деталей и общее их количество для всех наименований деталей, изготавливаемых в городе &amp;lt;code&amp;gt;%НАЗВАНИЕГОРОДА%&amp;lt;/code&amp;gt;. Вот эта переменная задаётся где-то в программе, а в БД идёт запрос с уже подставленным конкретным названием. &lt;br /&gt;
&lt;br /&gt;
Этот вариант запроса составлен, например, для Лондона. &lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie, SUM(kolichestvo)&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
WHERE gorod = &#039;Лондон&#039;&lt;br /&gt;
GROUP BY nazvanie;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nazvanie | sum&lt;br /&gt;
 ----------+-----&lt;br /&gt;
  гайка    |  71&lt;br /&gt;
  шуруп    |  68&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 25 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих хотя бы одну белую деталь для изделия с названием &#039;Велосипед 01-04&#039; с объёмом поставки большим, чем средний объём поставки этого поставщика.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                    JOIN spasoi_ekz.j J&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
WHERE cvet = &#039;белый&#039;&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Велосипед 01-04&#039;)&lt;br /&gt;
  AND kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT AVG(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj SPJ&lt;br /&gt;
                     WHERE SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Пётр&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 26 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера красных деталей и количество поставок этих деталей.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT P.nomer_detali AS &amp;quot;Номер детали&amp;quot;, COUNT(kolichestvo) AS &amp;quot;Количество поставок с ней&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.p P, spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
  AND cvet = &#039;красный&#039;&lt;br /&gt;
GROUP BY P.nomer_detali;   &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос через JOIN&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT SPJ.nomer_detali AS &amp;quot;Номер детали&amp;quot;, COUNT(kolichestvo) AS &amp;quot;Количество поставок с ней&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND cvet = &#039;красный&#039;&lt;br /&gt;
GROUP BY SPJ.nomer_detali;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер детали | Количество поставок с ней&lt;br /&gt;
 --------------+---------------------------&lt;br /&gt;
  P15          |                         3&lt;br /&gt;
  P22          |                         1&lt;br /&gt;
  P24          |                         1&lt;br /&gt;
 (3 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 27 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать наименования городов и среднее состояние поставщиков для каждого города, поставляющих детали с названием &#039;Гайка 01-01&#039; для изделия с названием &#039;Велосипед 03-04&#039; в количестве (в поставке) большим, чем минимальный объём поставки, выполненной поставщиком с номером &#039;S1&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:1st dufficulty.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;7px&amp;quot;&amp;gt;&#039;&#039;&#039;Сложнейший запрос экзамена!&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;5px&amp;quot;&amp;gt;&#039;&#039;&#039;Сохрани Джа, вытащить такое&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT S.gorod AS &amp;quot;Город&amp;quot;, AVG(S.sostoyanie) AS &amp;quot;Среднее состояние&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                    JOIN spasoi_ekz.j J&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
WHERE P.nazvanie = LOWER(&#039;Гайка 01-01&#039;)&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Велосипед 03-04&#039;)&lt;br /&gt;
  AND kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT MIN(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj&lt;br /&gt;
                     WHERE nomer_postavshika = &#039;S1&#039;&lt;br /&gt;
                    )&lt;br /&gt;
GROUP BY S.gorod;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
    Город   |   Среднее состояние&lt;br /&gt;
 -----------+-----------------------&lt;br /&gt;
  Мытищи    |    35000.500000000000&lt;br /&gt;
  Йокогама  |  1500000.000000000000&lt;br /&gt;
  Манчестер | 2571.0000000000000000&lt;br /&gt;
 (3 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 28 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия изделий, куда входит хотя бы одна красная деталь весом больше 10 граммов, поставляемая только поставщиком с номером &#039;S1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT J.nazvanie&lt;br /&gt;
FROM spasoi_ekz.j J JOIN spasoi_ekz.spj SPJ1&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ1.nomer_izdelia&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ1.nomer_detali&lt;br /&gt;
WHERE P.ves &amp;gt; 10&lt;br /&gt;
 AND P.cvet = &#039;красный&#039;&lt;br /&gt;
 AND NOT EXISTS (&lt;br /&gt;
                 SELECT SPJ2.nomer_postavshika&lt;br /&gt;
                 FROM spasoi_ekz.spj SPJ2         &lt;br /&gt;
                 WHERE SPJ2.nomer_detali = P.nomer_detali&lt;br /&gt;
	 	   AND SPJ2.nomer_postavshika != &#039;S1&#039;&lt;br /&gt;
                );                     &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     nazvanie&lt;br /&gt;
 -----------------&lt;br /&gt;
  кружевное бельё&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 29 ===&lt;br /&gt;
Написать запрос SELECT: выдать названия деталей, которые входят только и только в состав изделия с названием &#039;Штуцер 01-03&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nazvanie&lt;br /&gt;
FROM spasoi_ekz.p P&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT SPJ.nomer_izdelia&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                            ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
                  WHERE (&lt;br /&gt;
                         J.nazvanie != LOWER(&#039;Штуцер 01-03&#039;)&lt;br /&gt;
                         AND&lt;br /&gt;
                         SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                        )&lt;br /&gt;
                     OR (&lt;br /&gt;
                         J.nazvanie = LOWER(&#039;Штуцер 01-03&#039;)&lt;br /&gt;
                         AND&lt;br /&gt;
                         SPJ.nomer_detali != P.nomer_detali&lt;br /&gt;
                        )&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
      nazvanie&lt;br /&gt;
 ------------------&lt;br /&gt;
  штуцерная деталь&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 30 ===&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют, по крайней мере, все те детали, которые поставляет поставщик с номером &#039;S2&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT imya&lt;br /&gt;
FROM spasoi_ekz.s S&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT nomer_detali&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJY&lt;br /&gt;
                  WHERE nomer_postavshika = &#039;S2&#039;&lt;br /&gt;
                    AND NOT EXISTS (&lt;br /&gt;
                                    SELECT *&lt;br /&gt;
                                    FROM spasoi_ekz.spj&lt;br /&gt;
                                    WHERE nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                                      AND nomer_detali = SPJY.nomer_detali&lt;br /&gt;
                                   )&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  imya&lt;br /&gt;
 ------------&lt;br /&gt;
  Оша&lt;br /&gt;
  Бран Старк&lt;br /&gt;
 (2 rows)&lt;br /&gt;
[[Категория:Структурное проектирование АСОИ (10 семестр)]]&lt;/div&gt;</summary>
		<author><name>81.9.52.28</name></author>
	</entry>
	<entry>
		<id>https://iu5bmstu.ru/index.php?title=SQL-%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D1%8B_%D0%BA_%D1%8D%D0%BA%D0%B7%D0%B0%D0%BC%D0%B5%D0%BD%D1%83_%D0%BF%D0%BE_%D0%A1%D0%9F%D0%90%D0%A1%D0%9E%D0%98_(10_%D1%81%D0%B5%D0%BC%D0%B5%D1%81%D1%82%D1%80)&amp;diff=3867</id>
		<title>SQL-запросы к экзамену по СПАСОИ (10 семестр)</title>
		<link rel="alternate" type="text/html" href="https://iu5bmstu.ru/index.php?title=SQL-%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D1%8B_%D0%BA_%D1%8D%D0%BA%D0%B7%D0%B0%D0%BC%D0%B5%D0%BD%D1%83_%D0%BF%D0%BE_%D0%A1%D0%9F%D0%90%D0%A1%D0%9E%D0%98_(10_%D1%81%D0%B5%D0%BC%D0%B5%D1%81%D1%82%D1%80)&amp;diff=3867"/>
		<updated>2013-06-16T11:23:26Z</updated>

		<summary type="html">&lt;p&gt;81.9.52.28: /* Билет 29 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right; clear:both; margin-right:1.0em;&amp;quot;&amp;gt;__TOC__&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Билет экзамена по [[:Категория:Структурное проектирование АСОИ (10 семестр) | СПАСОИ]] состоит из двух частей:&lt;br /&gt;
# теория;&lt;br /&gt;
# SQL-запрос.&lt;br /&gt;
&lt;br /&gt;
На этой странице собраны все сформированные запросы по билетам.&lt;br /&gt;
&lt;br /&gt;
Странно, что ни в одном билете нет запроса с сортировкой результатов. Возможно, они буду в дополнительных заданиях.&lt;br /&gt;
&lt;br /&gt;
== Схема БД ==&lt;br /&gt;
&lt;br /&gt;
Схема БД используется всё [[СПАСОИ_(10)_-_Лекция_№8_-_SQL#Некоторые возможности языка SQL | та же]], что была в прошлом семестре и на лекциях.&lt;br /&gt;
&lt;br /&gt;
Для написания запросов и проверки их выполнения создана БД в СУБД [http://www.postgresql.org/ PostgreSQL].&lt;br /&gt;
&lt;br /&gt;
Скрипт создания можно загрузить [http://yadi.sk/d/ArwqOGAy5pPfi отсюда].&lt;br /&gt;
&lt;br /&gt;
=== Таблицы БД ===&lt;br /&gt;
&lt;br /&gt;
==== Поставщики ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.s;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika |       imya       | sostoyanie |   gorod&lt;br /&gt;
 -------------------+------------------+------------+------------&lt;br /&gt;
  S5                | Мелисандра       |      65000 | Мадрид&lt;br /&gt;
  S2                | Бран Старк       |      60000 | Мурманск&lt;br /&gt;
  S1                | Якен Хгар        |    1500000 | Йокогама&lt;br /&gt;
  S7                | Сирио Форель     |    1500000 | Йокогама&lt;br /&gt;
  S4                | Джейме Ланнистер |     750000 | Лондон&lt;br /&gt;
  S3                | Серсея Ланнистер |    1200000 | Лондон&lt;br /&gt;
  S8                | Тирион Ланнистер |       2571 | Манчестер&lt;br /&gt;
  S9                | Иванов           |      35000 | Мытищи&lt;br /&gt;
  S10               | Русе Болтон      |      44444 | Баренцбург&lt;br /&gt;
  S11               | Петров Иван      |      35000 | Мытищи&lt;br /&gt;
  S14               | Рендилл Тарли    |    1111111 | Прага&lt;br /&gt;
  S13               | Сэмвелл Тарли    |     999999 | Прага&lt;br /&gt;
  S6                | Оша              |            | Москва&lt;br /&gt;
  S16               | Ходор            |            | Москва&lt;br /&gt;
  S15               | Мелисса Флорент  |     888888 | Стокгольм&lt;br /&gt;
  S12               | Петров Пётр      |      35001 | Мытищи&lt;br /&gt;
  S17               | Томми Версетти   |  123456789 | Майами&lt;br /&gt;
  S18               | Безликий         |          1 | Йокогама&lt;br /&gt;
 (18 rows)&lt;br /&gt;
&lt;br /&gt;
==== Детали ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.p;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_detali |       nazvanie       |     cvet      | ves  |      gorod&lt;br /&gt;
 --------------+----------------------+---------------+------+-----------------&lt;br /&gt;
  P9           | подставка            | синий         |  400 | Нижний Новгород&lt;br /&gt;
  P10          | стойка               | синий         | 2000 | Нижний Новгород&lt;br /&gt;
  P11          | абажур               | синий         |  400 | Нижний Новгород&lt;br /&gt;
  P1           | гайка                | чёрный        |   20 | Лондон&lt;br /&gt;
  P3           | ось                  | белый         | 5000 | Эдинбург&lt;br /&gt;
  P4           | зубчатое колесо      | чёрный        |   50 | Эдинбург&lt;br /&gt;
  P6           | транзистор           | коричневый    |    2 | Токио&lt;br /&gt;
  P7           | печатная плата       | зелёный       |  200 | Токио&lt;br /&gt;
  P8           | диод                 | коричневый    |    1 | Токио&lt;br /&gt;
  P12          | универсальная деталь | универсальный |    1 | Париж&lt;br /&gt;
  P13          | уникальная деталь    | уникальный    |    1 | Бостон&lt;br /&gt;
  P14          | болт                 | серый         |   20 | Ижевск&lt;br /&gt;
  P15          | рама                 | красный       | 3000 | Манчестер&lt;br /&gt;
  P16          | колесо               | белый         | 1500 | Манчестер&lt;br /&gt;
  P5           | втулка               | серый         |  350 | Манчестер&lt;br /&gt;
  P17          | бумага               | белый         |    1 | Астрахань&lt;br /&gt;
  P18          | плитка               | белый         |  300 | Флоренция&lt;br /&gt;
  P19          | орнамент             | серый         |  800 | Флоренция&lt;br /&gt;
  P20          | уголок               | серый         |  100 | Флоренция&lt;br /&gt;
  P21          | гайка 01-01          | серебристый   |   20 | Клин&lt;br /&gt;
  P22          | усиленная рама       | красный       | 3200 | Череповец&lt;br /&gt;
  P23          | винт                 | розовый       |    5 | Ижевск&lt;br /&gt;
  P24          | труселя              | красный       |   20 | Челябинск&lt;br /&gt;
  P25          | штуцерная деталь     | коричневый    |  450 | Череповец&lt;br /&gt;
  P2           | шуруп                | чёрный        |    5 | Лондон&lt;br /&gt;
  P26          | лезвие               | бесцветный    |  120 | Йокогама&lt;br /&gt;
 (26 rows)&lt;br /&gt;
&lt;br /&gt;
==== Изделия ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.j;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_izdelia |       nazvanie        |      gorod&lt;br /&gt;
 ---------------+-----------------------+-----------------&lt;br /&gt;
  J1            | автомобиль            | Магнитогорск&lt;br /&gt;
  J2            | процессор             | Зеленоград&lt;br /&gt;
  J3            | торшер                | Нижний Новгород&lt;br /&gt;
  J4            | универсальное изделие | Париж&lt;br /&gt;
  J5            | уникальное изделие    | Бостон&lt;br /&gt;
  J6            | велосипед 01/23       | Манчестер&lt;br /&gt;
  J7            | изделие из болтов     | Челябинск&lt;br /&gt;
  J8            | шкаф                  | Ярославль&lt;br /&gt;
  J9            | рама 02-01            | Череповец&lt;br /&gt;
  J10           | книга                 | Астрахань&lt;br /&gt;
  J11           | панно 01-03           | Флоренция&lt;br /&gt;
  J12           | велосипед 03-04       | Клин&lt;br /&gt;
  J13           | рама 02-03            | Череповец&lt;br /&gt;
  J14           | штуцер 01-02          | Череповец&lt;br /&gt;
  J15           | велосипед 01-04       | Клин&lt;br /&gt;
  J16           | кружевное бельё       | Челябинск&lt;br /&gt;
  J17           | штуцер 01-03          | Череповец&lt;br /&gt;
  J18           | кинжал                | Йокогама&lt;br /&gt;
 (18 rows)&lt;br /&gt;
&lt;br /&gt;
==== Сборки ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.spj;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika | nomer_detali | nomer_izdelia | kolichestvo&lt;br /&gt;
 -------------------+--------------+---------------+-------------&lt;br /&gt;
  S1                | P6           | J2            |          20&lt;br /&gt;
  S1                | P7           | J2            |           5&lt;br /&gt;
  S2                | P1           | J1            |           4&lt;br /&gt;
  S6                | P4           | J1            |           2&lt;br /&gt;
  S6                | P5           | J1            |           6&lt;br /&gt;
  S3                | P9           | J3            |           1&lt;br /&gt;
  S4                | P10          | J3            |           1&lt;br /&gt;
  S5                | P11          | J3            |           1&lt;br /&gt;
  S2                | P4           | J1            |           8&lt;br /&gt;
  S6                | P3           | J1            |          50&lt;br /&gt;
  S7                | P8           | J2            |          25&lt;br /&gt;
  S1                | P12          | J4            |           1&lt;br /&gt;
  S2                | P12          | J4            |           1&lt;br /&gt;
  S3                | P12          | J4            |           1&lt;br /&gt;
  S4                | P12          | J4            |           1&lt;br /&gt;
  S5                | P12          | J4            |           1&lt;br /&gt;
  S7                | P12          | J4            |           1&lt;br /&gt;
  S7                | P2           | J1            |           1&lt;br /&gt;
  S6                | P2           | J1            |           9&lt;br /&gt;
  S6                | P12          | J4            |           7&lt;br /&gt;
  S1                | P13          | J5            |          14&lt;br /&gt;
  S6                | P14          | J1            |        9000&lt;br /&gt;
  S2                | P14          | J1            |           3&lt;br /&gt;
  S6                | P1           | J1            |          12&lt;br /&gt;
  S8                | P15          | J6            |           1&lt;br /&gt;
  S8                | P16          | J6            |           2&lt;br /&gt;
  S3                | P5           | J6            |          10&lt;br /&gt;
  S10               | P2           | J8            |           4&lt;br /&gt;
  S8                | P1           | J7            |          16&lt;br /&gt;
  S9                | P14          | J7            |           3&lt;br /&gt;
  S11               | P10          | J3            |           2&lt;br /&gt;
  S12               | P15          | J1            |           3&lt;br /&gt;
  S11               | P11          | J3            |           4&lt;br /&gt;
  S10               | P14          | J9            |           5&lt;br /&gt;
  S13               | P17          | J10           |        1001&lt;br /&gt;
  S14               | P17          | J10           |        1111&lt;br /&gt;
  S15               | P17          | J10           |        1010&lt;br /&gt;
  S5                | P18          | J11           |           9&lt;br /&gt;
  S5                | P19          | J11           |           1&lt;br /&gt;
  S5                | P20          | J11           |           4&lt;br /&gt;
  S9                | P14          | J8            |          25&lt;br /&gt;
  S12               | P21          | J12           |          15&lt;br /&gt;
  S11               | P22          | J13           |           9&lt;br /&gt;
  S11               | P1           | J14           |          26&lt;br /&gt;
  S12               | P1           | J14           |          13&lt;br /&gt;
  S12               | P2           | J14           |          54&lt;br /&gt;
  S12               | P23          | J4            |         101&lt;br /&gt;
  S12               | P16          | J15           |          40&lt;br /&gt;
  S7                | P21          | J12           |           3&lt;br /&gt;
  S8                | P21          | J12           |           4&lt;br /&gt;
  S9                | P21          | J12           |           5&lt;br /&gt;
  S1                | P24          | J16           |           1&lt;br /&gt;
  S1                | P15          | J6            |           3&lt;br /&gt;
  S4                | P25          | J17           |           1&lt;br /&gt;
  S17               | P16          | J1            |           4&lt;br /&gt;
  S18               | P26          | J18           |           1&lt;br /&gt;
 (56 rows)&lt;br /&gt;
&lt;br /&gt;
== Готовые запросы ==&lt;br /&gt;
&lt;br /&gt;
Если видите, что тот или иной запрос можно составить короче и рациональней - смело вносите правку.&lt;br /&gt;
&lt;br /&gt;
В трёх билетах в задании на запрос встречается формулировка &amp;quot;&#039;&#039;только и только&#039;&#039;&amp;quot;. Как оказалось, это означает следующее: если холодильники поставляет &#039;&#039;только и только&#039;&#039; Уася, то:&lt;br /&gt;
# кроме Уаси никто не поставляет холодильники;&lt;br /&gt;
# Уася не поставляет ничего, кроме холодильников.&lt;br /&gt;
&lt;br /&gt;
Существующие запросы, естественно, оказались неправильными и их пришлось переписать. &amp;lt;s&amp;gt;Великий и могучий русский языка, ну что за экономия на бумаге.&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Билет 1 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера поставщиков, которые поставляют, по крайней мере, все те детали, которые поставляет поставщик с номером &#039;S2&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nomer_postavshika&lt;br /&gt;
FROM spasoi_ekz.spj SPJX&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT nomer_detali&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJY&lt;br /&gt;
                  WHERE nomer_postavshika = &#039;S2&#039;&lt;br /&gt;
                    AND NOT EXISTS (&lt;br /&gt;
                                    SELECT *&lt;br /&gt;
                                    FROM spasoi_ekz.spj&lt;br /&gt;
                                    WHERE nomer_postavshika = SPJX.nomer_postavshika&lt;br /&gt;
                                      AND nomer_detali = SPJY.nomer_detali&lt;br /&gt;
                                   )&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika&lt;br /&gt;
 -------------------&lt;br /&gt;
  S6&lt;br /&gt;
  S2&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 2 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера деталей и общее их количество для всех номеров деталей, поставляемых более чем одним поставщиком.&lt;br /&gt;
&lt;br /&gt;
Текст запроса, каким его дал Григорьев на лекции, впоследствии исправив его:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali AS &amp;quot;Номер детали&amp;quot;,&lt;br /&gt;
       SUM(kolichestvo) AS &amp;quot;Сколько штук поставляется&amp;quot;,&lt;br /&gt;
       COUNT(DISTINCT nomer_postavshika) AS &amp;quot;Сколько у неё поставщиков&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_postavshika) &amp;gt; 1;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali AS &amp;quot;Номер детали&amp;quot;,&lt;br /&gt;
       kol AS &amp;quot;Сколько штук поставляется&amp;quot;&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT nomer_detali,&lt;br /&gt;
             SUM(kolichestvo) AS kol,&lt;br /&gt;
             COUNT(DISTINCT nomer_postavshika)&lt;br /&gt;
      FROM spasoi_ekz.spj&lt;br /&gt;
      GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_postavshika) &amp;gt; 1&lt;br /&gt;
     ) A;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер детали | Сколько штук поставляется | Сколько у неё поставщиков&lt;br /&gt;
 --------------+---------------------------+---------------------------&lt;br /&gt;
  P1           |                        71 |                         5&lt;br /&gt;
  P10          |                         3 |                         2&lt;br /&gt;
  P11          |                         5 |                         2&lt;br /&gt;
  P12          |                        13 |                         7&lt;br /&gt;
  P14          |                      9036 |                         4&lt;br /&gt;
  P15          |                         7 |                         3&lt;br /&gt;
  P16          |                        46 |                         3&lt;br /&gt;
  P17          |                      3122 |                         3&lt;br /&gt;
  P2           |                        68 |                         4&lt;br /&gt;
  P21          |                        27 |                         4&lt;br /&gt;
  P4           |                        10 |                         2&lt;br /&gt;
  P5           |                        16 |                         2&lt;br /&gt;
 (12 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 3 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера поставщиков, поставляющих детали с номером &#039;P1&#039; для какого-либо изделия в количестве (в поставке) большим, чем средний объём поставок деталей с номером &#039;P2&#039; для этого изделия.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT X.nomer_postavshika &lt;br /&gt;
FROM spasoi_ekz.spj X&lt;br /&gt;
WHERE X.nomer_detali = &#039;P1&#039;&lt;br /&gt;
  AND X.kolichestvo &amp;gt; (&lt;br /&gt;
                       SELECT AVG(kolichestvo)&lt;br /&gt;
                       FROM spasoi_ekz.spj&lt;br /&gt;
                       WHERE nomer_izdelia = X.nomer_izdelia&lt;br /&gt;
                         AND nomer_detali = &#039;P2&#039;&lt;br /&gt;
                      );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но длиннее и нерациональней&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nomer_postavshika&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT *&lt;br /&gt;
      FROM spasoi_ekz.spj&lt;br /&gt;
      WHERE nomer_izdelia IN(&lt;br /&gt;
                             SELECT nomer_izdelia&lt;br /&gt;
                             FROM spasoi_ekz.spj&lt;br /&gt;
                             WHERE nomer_detali = &#039;P1&#039;&lt;br /&gt;
                            )&lt;br /&gt;
        AND nomer_izdelia IN(&lt;br /&gt;
	                     SELECT nomer_izdelia&lt;br /&gt;
	                     FROM spasoi_ekz.spj&lt;br /&gt;
	                     WHERE nomer_detali = &#039;P2&#039;&lt;br /&gt;
	                    )&lt;br /&gt;
     ) A&lt;br /&gt;
WHERE nomer_detali = &#039;P1&#039; AND kolichestvo &amp;gt;&lt;br /&gt;
(&lt;br /&gt;
 SELECT AVG(kolichestvo)&lt;br /&gt;
 FROM (&lt;br /&gt;
       SELECT *&lt;br /&gt;
       FROM spasoi_ekz.spj&lt;br /&gt;
       WHERE nomer_izdelia IN(&lt;br /&gt;
                              SELECT nomer_izdelia&lt;br /&gt;
                              FROM spasoi_ekz.spj&lt;br /&gt;
                              WHERE nomer_detali = &#039;P1&#039;&lt;br /&gt;
                             )&lt;br /&gt;
         AND nomer_izdelia IN(&lt;br /&gt;
                              SELECT nomer_izdelia&lt;br /&gt;
                              FROM spasoi_ekz.spj&lt;br /&gt;
                              WHERE nomer_detali = &#039;P2&#039;&lt;br /&gt;
                             )&lt;br /&gt;
      ) B&lt;br /&gt;
 WHERE nomer_detali = &#039;P2&#039;&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika&lt;br /&gt;
 -------------------&lt;br /&gt;
  S6&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 4 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера изделий, для которых детали поставляет только поставщик с номером ‘S1’.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_izdelia&lt;br /&gt;
FROM spasoi_ekz.spj X&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT *&lt;br /&gt;
                  FROM spasoi_ekz.spj&lt;br /&gt;
                  WHERE nomer_postavshika != &#039;S1&#039;&lt;br /&gt;
                    AND X.nomer_izdelia = nomer_izdelia&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но без EXISTS&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nomer_izdelia&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
WHERE nomer_izdelia IN(&lt;br /&gt;
                       SELECT nomer_izdelia&lt;br /&gt;
                       FROM spasoi_ekz.spj&lt;br /&gt;
                       WHERE nomer_postavshika = &#039;S1&#039;&lt;br /&gt;
                      )&lt;br /&gt;
  AND nomer_izdelia NOT IN(&lt;br /&gt;
                           SELECT nomer_izdelia&lt;br /&gt;
                           FROM spasoi_ekz.spj&lt;br /&gt;
                           WHERE nomer_postavshika != &#039;S1&#039;&lt;br /&gt;
                          );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_izdelia&lt;br /&gt;
 ---------------&lt;br /&gt;
  J5&lt;br /&gt;
  J16&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 5 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих детали с названием &amp;quot;Болт&amp;quot; в количестве (в поставке) большим, чем средний объём всех поставок деталей с номером &#039;P1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                           ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                        JOIN spasoi_ekz.p P&lt;br /&gt;
                           ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                              AND nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
WHERE kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT AVG(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj&lt;br /&gt;
                     WHERE nomer_detali = &#039;P1&#039;&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но без JOIN&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s&lt;br /&gt;
WHERE nomer_postavshika IN (&lt;br /&gt;
                            SELECT nomer_postavshika&lt;br /&gt;
                            FROM spasoi_ekz.spj&lt;br /&gt;
                            WHERE nomer_detali = (&lt;br /&gt;
                                                  SELECT nomer_detali&lt;br /&gt;
                                                  FROM spasoi_ekz.p&lt;br /&gt;
                                                  WHERE LOWER(nazvanie) = LOWER(&#039;Болт&#039;)&lt;br /&gt;
                                                 )&lt;br /&gt;
                              AND kolichestvo &amp;gt; (&lt;br /&gt;
                                                 SELECT AVG(kolichestvo)&lt;br /&gt;
                                                 FROM spasoi_ekz.spj&lt;br /&gt;
                                                 WHERE nomer_detali = &#039;P1&#039;&lt;br /&gt;
                                                )&lt;br /&gt;
                           );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  imya&lt;br /&gt;
 ------&lt;br /&gt;
  Оша&lt;br /&gt;
  Иванов&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 6 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия деталей, поставляемых поставщиком, проживающим в том же городе, где изготавливаются эти детали, для изделия с названием ‘Велосипед 01/23’.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT P.nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                        JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                        JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
WHERE S.gorod = P.gorod&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Велосипед 01/23&#039;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос без JOIN&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nazvanie&lt;br /&gt;
FROM spasoi_ekz.S S, spasoi_ekz.p P, spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE S.gorod = P.gorod&lt;br /&gt;
  AND P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
  AND S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
  AND nomer_izdelia = (&lt;br /&gt;
                       SELECT nomer_izdelia&lt;br /&gt;
                       FROM spasoi_ekz.j&lt;br /&gt;
                       WHERE nazvanie = LOWER(&#039;Велосипед 01/23&#039;)&lt;br /&gt;
                      );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nazvanie&lt;br /&gt;
 ----------&lt;br /&gt;
  рама&lt;br /&gt;
  колесо&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 7 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия изделий, куда входят детали с названием &#039;Болт&#039;, поставляемых поставщиками с именем &#039;Иванов&#039;, в количестве (в поставке) большим, чем средний объём поставок для этого изделия.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT J.nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                        JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                        JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
WHERE imya LIKE &#039;%Иванов%&#039;&lt;br /&gt;
  AND P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
  AND kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT AVG(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj X&lt;br /&gt;
                     WHERE SPJ.nomer_izdelia = X.nomer_izdelia&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё один вариант запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie&lt;br /&gt;
FROM spasoi_ekz.j&lt;br /&gt;
WHERE nomer_izdelia IN (&lt;br /&gt;
                        SELECT nomer_izdelia&lt;br /&gt;
                        FROM (spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                                                   ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                                                      AND imya LIKE &#039;%Иванов%&#039;&lt;br /&gt;
                                                 JOIN spasoi_ekz.p P&lt;br /&gt;
                                                   ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                                      AND nazvanie = LOWER(&#039;Болт&#039;)) A&lt;br /&gt;
                        WHERE kolichestvo &amp;gt; (&lt;br /&gt;
                                             SELECT AVG(kolichestvo)&lt;br /&gt;
                                             FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                                                       ON SPJ.nomer_izdelia = A.nomer_izdelia&lt;br /&gt;
                                            )&lt;br /&gt;
                       );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;И ещё вариант этого же запроса, но длиннее и нерациональней&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT J.nazvanie, kolichestvo&lt;br /&gt;
      FROM spasoi_ekz.s S, spasoi_ekz.p P, spasoi_ekz.j J, spasoi_ekz.spj SPJ&lt;br /&gt;
      WHERE J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
        AND P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
        AND P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
        AND S.imya LIKE &#039;%Иванов%&#039;&lt;br /&gt;
        AND S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
     ) A&lt;br /&gt;
WHERE kolichestvo &amp;gt;&lt;br /&gt;
(&lt;br /&gt;
 SELECT AVG(kolichestvo)&lt;br /&gt;
 FROM spasoi_ekz.spj&lt;br /&gt;
 WHERE nomer_izdelia IN(&lt;br /&gt;
                        SELECT J.nomer_izdelia&lt;br /&gt;
                        FROM spasoi_ekz.s S, spasoi_ekz.p P, spasoi_ekz.j J, spasoi_ekz.spj SPJ&lt;br /&gt;
                        WHERE J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
                          AND P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                          AND P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
                          AND S.imya LIKE &#039;%Иванов%&#039;&lt;br /&gt;
                          AND S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
                       )&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
      nazvanie&lt;br /&gt;
 -------------------&lt;br /&gt;
  шкаф&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 8 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера изделий и общее количество деталей для них, поставляемых поставщиками с именем &#039;Петров&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_izdelia AS &amp;quot;Номер изделия&amp;quot;, SUM(kolichestvo) AS &amp;quot;Количество деталей&amp;quot; &lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                             -- так как &amp;quot;поставщикАМИ&amp;quot; и возможны&lt;br /&gt;
                             -- Иван Петров и Петров Иван, то LIKE %Петров%&lt;br /&gt;
                             AND imya LIKE &#039;%Петров%&#039;&lt;br /&gt;
GROUP BY nomer_izdelia;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер изделия | Количество деталей&lt;br /&gt;
 ---------------+--------------------&lt;br /&gt;
  J4            |                101&lt;br /&gt;
  J3            |                  6&lt;br /&gt;
  J13           |                  9&lt;br /&gt;
  J15           |                 40&lt;br /&gt;
  J1            |                  3&lt;br /&gt;
  J12           |                 15&lt;br /&gt;
  J14           |                 93&lt;br /&gt;
 (7 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 9 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера деталей и общее их количество для всех номеров деталей, которые входят только в одно изделие.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali, SUM(kolichestvo)&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_izdelia) = 1;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali, kol FROM (&lt;br /&gt;
       SELECT nomer_detali, SUM(kolichestvo) AS kol, COUNT(DISTINCT nomer_izdelia) = 1&lt;br /&gt;
       FROM spasoi_ekz.spj&lt;br /&gt;
       GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_izdelia) = 1&lt;br /&gt;
    ) A;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_detali | sum&lt;br /&gt;
 --------------+------&lt;br /&gt;
  P10          |    3&lt;br /&gt;
  P11          |    5&lt;br /&gt;
  P12          |   13&lt;br /&gt;
  P13          |   14&lt;br /&gt;
  P17          | 3122&lt;br /&gt;
  P18          |    9&lt;br /&gt;
  P19          |    1&lt;br /&gt;
  P20          |    4&lt;br /&gt;
  P21          |   27&lt;br /&gt;
  P22          |    9&lt;br /&gt;
  P23          |  101&lt;br /&gt;
  P24          |    1&lt;br /&gt;
  P25          |    1&lt;br /&gt;
  P26          |    1&lt;br /&gt;
  P3           |   50&lt;br /&gt;
  P4           |   10&lt;br /&gt;
  P6           |   20&lt;br /&gt;
  P7           |    5&lt;br /&gt;
  P8           |   25&lt;br /&gt;
  P9           |    1&lt;br /&gt;
 (20 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 10 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих детали с названием &#039;Болт&#039; для изделия с названием &#039;Рама 02-01&#039; в количестве (в поставке) большим, чем минимальное значение поставки детали с номером &#039;P1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
			   ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
			      AND J.nazvanie = LOWER(&#039;Рама 02-01&#039;)&lt;br /&gt;
			 JOIN spasoi_ekz.p P&lt;br /&gt;
			   ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
			      AND P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
			 JOIN spasoi_ekz.s S&lt;br /&gt;
			   ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE kolichestvo &amp;gt; (&lt;br /&gt;
		     SELECT MIN(kolichestvo)&lt;br /&gt;
		     FROM spasoi_ekz.spj &lt;br /&gt;
		     WHERE nomer_detali = &#039;P1&#039;&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Русе Болтон&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 11 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия городов и суммарное состояние проживающих в каждом городе поставщиков, у которых минимальный объём поставки деталей больше 1000.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT gorod, SUM(sostoyanie)&lt;br /&gt;
FROM spasoi_ekz.s S&lt;br /&gt;
WHERE (	&lt;br /&gt;
       SELECT MIN(kolichestvo)	&lt;br /&gt;
       FROM spasoi_ekz.spj X	&lt;br /&gt;
       WHERE X.nomer_postavshika = S.nomer_postavshika		&lt;br /&gt;
      ) &amp;gt; 1000&lt;br /&gt;
GROUP BY gorod;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Вариант подлиннее для тех, кто не ищет лёгких путей&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT gorod, SUM(sostoyanie)&lt;br /&gt;
FROM spasoi_ekz.s&lt;br /&gt;
WHERE nomer_postavshika IN (&lt;br /&gt;
                            SELECT nomer_postavshika&lt;br /&gt;
                            FROM spasoi_ekz.spj&lt;br /&gt;
                            GROUP BY nomer_postavshika HAVING MIN(kolichestvo) &amp;gt; 1000&lt;br /&gt;
                           )&lt;br /&gt;
GROUP BY gorod;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;!-- а этот запрос выполняет не совсем то и не правильно&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT gorod, sost&lt;br /&gt;
FROM (&lt;br /&gt;
SELECT gorod, SUM(sostoyanie) AS sost, SUM(SPJ.kolichestvo)&lt;br /&gt;
FROM spasoi_ekz.spj, spasoi_ekz.s&lt;br /&gt;
WHERE S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
GROUP BY S.gorod HAVING SUM(SPJ.kolichestvo) &amp;gt; 1000&lt;br /&gt;
) A;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; --&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
    gorod   |   sum&lt;br /&gt;
 -----------+---------&lt;br /&gt;
  Прага     | 2111110&lt;br /&gt;
  Стокгольм |  888888&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 12 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера деталей, поставляемых для какого-либо изделия поставщиком, проживающим в том же городе, где изготавливается это изделие.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali&lt;br /&gt;
FROM spasoi_ekz.spj SPJ, spasoi_ekz.s S, spasoi_ekz.j J&lt;br /&gt;
WHERE SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
  AND S.gorod = J.gorod&lt;br /&gt;
  AND J.nomer_izdelia = SPJ.nomer_izdelia;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_detali&lt;br /&gt;
 --------------&lt;br /&gt;
  P15&lt;br /&gt;
  P16&lt;br /&gt;
  P26&lt;br /&gt;
 (3 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 13 ===&lt;br /&gt;
&lt;br /&gt;
Написать &amp;lt;u&amp;gt;один&amp;lt;/u&amp;gt; запрос SELECT: выдать количества строк в таблице S (Поставщик) 1) с пустыми значениями и 2) непустыми значениями в столбце Состояние.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT COUNT(*) - COUNT(sostoyanie) AS &amp;quot;С пустым состоянием&amp;quot;, &lt;br /&gt;
       COUNT(sostoyanie) AS &amp;quot;С не пустым состоянием&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.s;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но длиннее и нерациональней&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SELECT COUNT(Snull.*) AS &amp;quot;С пустым состоянием&amp;quot;, COUNT(Snotnull.sostoyanie) AS &amp;quot;С не пустым состоянием&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.s Snull RIGHT OUTER JOIN spasoi_ekz.s Snotnull&lt;br /&gt;
                                      ON Snull.nomer_postavshika = Snotnull.nomer_postavshika&lt;br /&gt;
                                         AND Snull.sostoyanie IS NULL;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  С пустым состоянием | С не пустым состоянием&lt;br /&gt;
 ---------------------+-----------------------&lt;br /&gt;
                    2 |                    16&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 14 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют детали только и только для изделия с номером &#039;J1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj A JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON A.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE nomer_izdelia = &#039;J1&#039;&lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT nomer_postavshika&lt;br /&gt;
                  FROM spasoi_ekz.spj&lt;br /&gt;
                  WHERE nomer_izdelia != &#039;J1&#039;&lt;br /&gt;
                    AND nomer_postavshika = A.nomer_postavshika&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       imya&lt;br /&gt;
 ----------------&lt;br /&gt;
  Томми Версетти&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 15 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать наименования изделий, для которых детали поставляют только те поставщики, у которых состояние больше 1000000 у.е.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT J.nazvanie&lt;br /&gt;
FROM spasoi_ekz.j J&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
		  SELECT *&lt;br /&gt;
		  FROM spasoi_ekz.spj X JOIN spasoi_ekz.s S&lt;br /&gt;
		                          ON X.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
		  WHERE sostoyanie &amp;lt;= 1000000&lt;br /&gt;
		  AND X.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Вариант этого запроса без NOT EXISTS&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                        JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
WHERE sostoyanie &amp;gt; 1000000&lt;br /&gt;
  AND SPJ.nomer_izdelia NOT IN (&lt;br /&gt;
                                SELECT nomer_izdelia&lt;br /&gt;
                                FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                                                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                                WHERE sostoyanie &amp;lt; 1000000&lt;br /&gt;
                               );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       nazvanie&lt;br /&gt;
 --------------------&lt;br /&gt;
  кружевное бельё&lt;br /&gt;
  уникальное изделие&lt;br /&gt;
  процессор&lt;br /&gt;
 (3 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 16 ===&lt;br /&gt;
Написать запрос SELECT: выдать цвета и для каждого цвета общее количество деталей, входящих в изделие с названием &#039;Панно 01-03&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT cvet AS &amp;quot;Цвет&amp;quot;, SUM(kolichestvo) AS &amp;quot;Деталей&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
			     AND J.nazvanie = LOWER(&#039;Панно 01-03&#039;)&lt;br /&gt;
			JOIN spasoi_ekz.P P&lt;br /&gt;
			  ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
GROUP BY cvet;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Цвет  | Деталей&lt;br /&gt;
 -------+---------&lt;br /&gt;
  белый |       9&lt;br /&gt;
  серый |       5&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 17 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера поставщиков и количество сделанных ими поставок при условии, что среднее число деталей во всех этих поставках больше 1000.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_postavshika AS &amp;quot;Номер поставщика&amp;quot;, COUNT(*) AS &amp;quot;Количество поставок&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
WHERE nomer_postavshika IN (&lt;br /&gt;
                            SELECT nomer_postavshika&lt;br /&gt;
                            FROM spasoi_ekz.spj&lt;br /&gt;
                            GROUP BY nomer_postavshika HAVING AVG(kolichestvo) &amp;gt; 1000&lt;br /&gt;
                           )&lt;br /&gt;
GROUP BY nomer_postavshika;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_postavshika AS &amp;quot;Номер поставщика&amp;quot;, COUNT(*) AS &amp;quot;Количество поставок&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
WHERE (&lt;br /&gt;
       SELECT AVG(kolichestvo)&lt;br /&gt;
       FROM spasoi_ekz.spj X&lt;br /&gt;
       WHERE X.nomer_postavshika = spj.nomer_postavshika&lt;br /&gt;
       ) &amp;gt; 1000&lt;br /&gt;
GROUP BY nomer_postavshika;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;И ещё вариант запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nom AS &amp;quot;Номер поставщика&amp;quot;, cnt AS &amp;quot;Количество поставок&amp;quot;&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT S.nomer_postavshika AS nom,&lt;br /&gt;
             COUNT(SPJ.nomer_postavshika) AS cnt,&lt;br /&gt;
             AVG(SPJ.kolichestvo) AS kol&lt;br /&gt;
      FROM spasoi_ekz.s S, spasoi_ekz.spj SPJ&lt;br /&gt;
      WHERE S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
      GROUP BY S.nomer_postavshika&lt;br /&gt;
     ) A&lt;br /&gt;
WHERE kol &amp;gt; 1000;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер поставщика | Количество поставок&lt;br /&gt;
 ------------------+---------------------&lt;br /&gt;
  S13              |                   1&lt;br /&gt;
  S6               |                   7&lt;br /&gt;
  S14              |                   1&lt;br /&gt;
  S15              |                   1&lt;br /&gt;
 (4 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 18 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, имеющих состояние больше 1000 и поставляющих деталь с названием &#039;Гайка 01-01&#039; для изделия с названием &#039;Велосипед 03-04&#039; в количестве (в поставке) большим, чем средний объём поставки, выполненной поставщиками с именем &#039;Иванов&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:2nd dufficulty.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;5px&amp;quot;&amp;gt;&#039;&#039;&#039;Второй по сложности запрос экзамена!&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;4px&amp;quot;&amp;gt;&#039;&#039;&#039;Вот уж не свезло, так не свезло&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                    JOIN spasoi_ekz.j J&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
WHERE sostoyanie &amp;gt; 1000&lt;br /&gt;
  AND P.nazvanie = LOWER(&#039;Гайка 01-01&#039;)&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Велосипед 03-04&#039;)&lt;br /&gt;
  AND kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT AVG(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                       ON SPJ.nomer_postavshika = S.nomer_postavshika &lt;br /&gt;
                     WHERE S.imya = &#039;Иванов&#039;&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Пётр&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 19 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия красных деталей, которые входят только в изделие с названием &#039;Рама 02-03&#039; в количестве, меньшем 10 единиц в поставке.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT X.nazvanie&lt;br /&gt;
FROM spasoi_ekz.p X JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_detali = X.nomer_detali&lt;br /&gt;
WHERE X.cvet = &#039;красный&#039;&lt;br /&gt;
  AND kolichestvo &amp;lt; 10&lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT *&lt;br /&gt;
                  FROM spasoi_ekz.j J JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                                        ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                  WHERE J.nazvanie != LOWER(&#039;Рама 02-03&#039;)&lt;br /&gt;
                    AND X.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант этого же запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT P.nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND cvet = &#039;красный&#039;&lt;br /&gt;
                        JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                              AND J.nazvanie = LOWER(&#039;Рама 02-03&#039;)&lt;br /&gt;
WHERE kolichestvo &amp;lt; 10&lt;br /&gt;
  AND SPJ.nomer_detali NOT IN (&lt;br /&gt;
                               SELECT nomer_detali&lt;br /&gt;
                               FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                                         ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                                                            AND J.nazvanie != LOWER(&#039;Рама 02-03&#039;)&lt;br /&gt;
                              );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     nazvanie&lt;br /&gt;
 ----------------&lt;br /&gt;
  усиленная рама&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 20 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих только белые детали.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT *&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                                            ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                  WHERE nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    AND P.cvet != &#039;белый&#039;&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё один вариант этого же запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND cvet = &#039;белый&#039;&lt;br /&gt;
                        JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE S.nomer_postavshika NOT IN (&lt;br /&gt;
                                  SELECT nomer_postavshika&lt;br /&gt;
                                  FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                                                            ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                                               AND cvet != &#039;белый&#039;&lt;br /&gt;
                                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;И ещё один вариант этого же запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s&lt;br /&gt;
WHERE nomer_postavshika NOT IN  (&lt;br /&gt;
                                 SELECT spj.nomer_postavshika&lt;br /&gt;
                                 FROM spasoi_ekz.spj SPJ, spasoi_ekz.p P&lt;br /&gt;
                                 WHERE SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                   AND p.cvet != &#039;белый&#039;&lt;br /&gt;
                                )&lt;br /&gt;
  AND nomer_postavshika  IN (&lt;br /&gt;
                             SELECT spj.nomer_postavshika&lt;br /&gt;
                             FROM spasoi_ekz.spj SPJ, spasoi_ekz.p P&lt;br /&gt;
                             WHERE SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                               AND p.cvet = &#039;белый&#039;&lt;br /&gt;
                            );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       imya&lt;br /&gt;
 -----------------&lt;br /&gt;
  Рендилл Тарли&lt;br /&gt;
  Сэмвелл Тарли&lt;br /&gt;
  Мелисса Флорент&lt;br /&gt;
  Томми Версетти&lt;br /&gt;
 (4 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 21 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия изделий, для которых детали поставляет только и только поставщик с номером &#039;S1&#039;.&lt;br /&gt;
&lt;br /&gt;
Чтобы продемонстрировать выполнение запроса наглядно, возьмём поставщика не &#039;S1&#039;, а &#039;S18&#039;, который был создан специально для этого запроса. Если оставить &#039;S1&#039;, то наглядности не получится, так как по нашей схеме БД этот поставщик не попадает под условие &amp;quot;&#039;&#039;только и только&#039;&#039;&amp;quot;, и запрос вернёт пустой результат.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie&lt;br /&gt;
FROM spasoi_ekz.j J, spasoi_ekz.SPJ SPJ&lt;br /&gt;
WHERE J.nomer_izdelia = SPJ.nomer_izdelia &lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT *&lt;br /&gt;
                  FROM spasoi_ekz.spj&lt;br /&gt;
                  WHERE nomer_postavshika != &#039;S18&#039; AND nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                 )&lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT *&lt;br /&gt;
                  FROM spasoi_ekz.spj&lt;br /&gt;
                  WHERE nomer_postavshika = &#039;S18&#039; AND nomer_izdelia != J.nomer_izdelia&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       nazvanie&lt;br /&gt;
 --------------------&lt;br /&gt;
  кинжал&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 22 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют только детали с номером &#039;P1&#039; для изделия с именем &#039;Штуцер 01-02&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                             AND J.nazvanie = LOWER(&#039;Штуцер 01-02&#039;)&lt;br /&gt;
                        JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT *&lt;br /&gt;
                  FROM spasoi_ekz.spj X JOIN spasoi_ekz.j J&lt;br /&gt;
                                          ON X.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                  WHERE X.nomer_detali != &#039;P1&#039; &lt;br /&gt;
                    AND j.nazvanie = LOWER(&#039;Штуцер 01-02&#039;)&lt;br /&gt;
                    AND S.nomer_postavshika = X.nomer_postavshika&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- неверный запрос - номер изделия, а не название&lt;br /&gt;
SELECT imya FROM S X&lt;br /&gt;
JOIN SPJ Y ON X.nomer_postavshika=Y.nomer_postavshika&lt;br /&gt;
WHERE X.nomer_postavshika NOT IN (&lt;br /&gt;
                  SELECT DISTINCT nomer_postavshika FROM SPJ Z&lt;br /&gt;
                  WHERE Z.nomer_izdelia != &#039;Штуцер 01-02&#039;&lt;br /&gt;
                  AND Z.nomer_detali!=&#039;P1&#039;);--&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но длиннее и нерациональней&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                             AND J.nazvanie = LOWER(&#039;Штуцер 01-02&#039;)&lt;br /&gt;
                        JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND SPJ.nomer_detali = &#039;P1&#039;&lt;br /&gt;
                        JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE SPJ.nomer_postavshika NOT IN (&lt;br /&gt;
                                    SELECT nomer_postavshika&lt;br /&gt;
                                    FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                                              ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                                                                 AND J.nazvanie = LOWER(&#039;Штуцер 01-02&#039;)&lt;br /&gt;
                                                            JOIN spasoi_ekz.p P&lt;br /&gt;
                                                              ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                                                 AND SPJ.nomer_detali != &#039;P1&#039;&lt;br /&gt;
                              );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Иван&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 23 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют деталь с названием &#039;Винт&#039; в количестве большим 100 единиц в одной поставке и имеют состояние больше среднего по их родному городу.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT S.imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
WHERE P.nazvanie = LOWER(&#039;Винт&#039;)&lt;br /&gt;
  AND SPJ.kolichestvo &amp;gt; 100&lt;br /&gt;
  AND S.sostoyanie &amp;gt; (&lt;br /&gt;
                      SELECT AVG(SS.sostoyanie)&lt;br /&gt;
                      FROM spasoi_ekz.s SS&lt;br /&gt;
                      WHERE SS.gorod = S.gorod&lt;br /&gt;
                     );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Пётр&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 24 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать наименования деталей и общее их количество для всех наименований деталей, изготавливаемых в одном городе.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- С этим запросом возникла неожиданная проблема - задание то ли неполное, то ли неправильное, потому что нельзя однозначно сказать, что по нему требуется сделать.&lt;br /&gt;
&lt;br /&gt;
Так что тут несколько вариантов запросов (кто как понял).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Первый вариант запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie, kol&lt;br /&gt;
FROM spasoi_ekz.p A, (&lt;br /&gt;
                      SELECT X.gorod, SUM(kolichestvo) as kol&lt;br /&gt;
                      FROM spasoi_ekz.p X, spasoi_ekz.spj Y&lt;br /&gt;
                      WHERE Y.nomer_detali = X.nomer_detali&lt;br /&gt;
                      GROUP BY X.gorod&lt;br /&gt;
                     ) B&lt;br /&gt;
WHERE A.gorod = B.gorod;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
        nazvanie       | kol&lt;br /&gt;
 ----------------------+------&lt;br /&gt;
  подставка            |    9&lt;br /&gt;
  стойка               |    9&lt;br /&gt;
  абажур               |    9&lt;br /&gt;
  гайка                |  139&lt;br /&gt;
  ось                  |   60&lt;br /&gt;
  зубчатое колесо      |   60&lt;br /&gt;
  транзистор           |   50&lt;br /&gt;
  печатная плата       |   50&lt;br /&gt;
  диод                 |   50&lt;br /&gt;
  универсальная деталь |   13&lt;br /&gt;
  уникальная деталь    |   14&lt;br /&gt;
  болт                 | 9137&lt;br /&gt;
  рама                 |   69&lt;br /&gt;
  колесо               |   69&lt;br /&gt;
  втулка               |   69&lt;br /&gt;
  бумага               | 3122&lt;br /&gt;
  плитка               |   14&lt;br /&gt;
  орнамент             |   14&lt;br /&gt;
  уголок               |   14&lt;br /&gt;
  гайка 01-01          |   27&lt;br /&gt;
  усиленная рама       |   10&lt;br /&gt;
  винт                 | 9137&lt;br /&gt;
  труселя              |    1&lt;br /&gt;
  штуцерная деталь     |   10&lt;br /&gt;
  шуруп                |  139&lt;br /&gt;
 (25 rows)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
и --&amp;gt;&lt;br /&gt;
В уточнение задания Григорьев сказал следующее: &amp;quot;&#039;&#039;Следует учесть, что в качестве наименования города может выступать переменная, в которую в некоторой программе должно быть занесено конкретное значение перед выполнением запроса&#039;&#039;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
То есть, вообще говоря, задание на запрос неполное, и его можно трактовать так: выдать наименования деталей и общее их количество для всех наименований деталей, изготавливаемых в городе &amp;lt;code&amp;gt;%НАЗВАНИЕГОРОДА%&amp;lt;/code&amp;gt;. Вот эта переменная задаётся где-то в программе, а в БД идёт запрос с уже подставленным конкретным названием. &lt;br /&gt;
&lt;br /&gt;
Этот вариант запроса составлен, например, для Лондона. &lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie, SUM(kolichestvo)&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
WHERE gorod = &#039;Лондон&#039;&lt;br /&gt;
GROUP BY nazvanie;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nazvanie | sum&lt;br /&gt;
 ----------+-----&lt;br /&gt;
  гайка    |  71&lt;br /&gt;
  шуруп    |  68&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 25 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих хотя бы одну белую деталь для изделия с названием &#039;Велосипед 01-04&#039; с объёмом поставки большим, чем средний объём поставки этого поставщика.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                    JOIN spasoi_ekz.j J&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
WHERE cvet = &#039;белый&#039;&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Велосипед 01-04&#039;)&lt;br /&gt;
  AND kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT AVG(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj SPJ&lt;br /&gt;
                     WHERE SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Пётр&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 26 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера красных деталей и количество поставок этих деталей.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT P.nomer_detali AS &amp;quot;Номер детали&amp;quot;, COUNT(kolichestvo) AS &amp;quot;Количество поставок с ней&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.p P, spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
  AND cvet = &#039;красный&#039;&lt;br /&gt;
GROUP BY P.nomer_detali;   &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос через JOIN&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT SPJ.nomer_detali AS &amp;quot;Номер детали&amp;quot;, COUNT(kolichestvo) AS &amp;quot;Количество поставок с ней&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND cvet = &#039;красный&#039;&lt;br /&gt;
GROUP BY SPJ.nomer_detali;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер детали | Количество поставок с ней&lt;br /&gt;
 --------------+---------------------------&lt;br /&gt;
  P15          |                         3&lt;br /&gt;
  P22          |                         1&lt;br /&gt;
  P24          |                         1&lt;br /&gt;
 (3 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 27 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать наименования городов и среднее состояние поставщиков для каждого города, поставляющих детали с названием &#039;Гайка 01-01&#039; для изделия с названием &#039;Велосипед 03-04&#039; в количестве (в поставке) большим, чем минимальный объём поставки, выполненной поставщиком с номером &#039;S1&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:1st dufficulty.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;7px&amp;quot;&amp;gt;&#039;&#039;&#039;Сложнейший запрос экзамена!&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;5px&amp;quot;&amp;gt;&#039;&#039;&#039;Сохрани Джа, вытащить такое&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT S.gorod AS &amp;quot;Город&amp;quot;, AVG(S.sostoyanie) AS &amp;quot;Среднее состояние&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                    JOIN spasoi_ekz.j J&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
WHERE P.nazvanie = LOWER(&#039;Гайка 01-01&#039;)&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Велосипед 03-04&#039;)&lt;br /&gt;
  AND kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT MIN(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj&lt;br /&gt;
                     WHERE nomer_postavshika = &#039;S1&#039;&lt;br /&gt;
                    )&lt;br /&gt;
GROUP BY S.gorod;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
    Город   |   Среднее состояние&lt;br /&gt;
 -----------+-----------------------&lt;br /&gt;
  Мытищи    |    35000.500000000000&lt;br /&gt;
  Йокогама  |  1500000.000000000000&lt;br /&gt;
  Манчестер | 2571.0000000000000000&lt;br /&gt;
 (3 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 28 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия изделий, куда входит хотя бы одна красная деталь весом больше 10 граммов, поставляемая только поставщиком с номером &#039;S1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT J.nazvanie&lt;br /&gt;
FROM spasoi_ekz.j J JOIN spasoi_ekz.spj SPJ1&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ1.nomer_izdelia&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ1.nomer_detali&lt;br /&gt;
WHERE P.ves &amp;gt; 10&lt;br /&gt;
 AND P.cvet = &#039;красный&#039;&lt;br /&gt;
 AND NOT EXISTS (&lt;br /&gt;
                 SELECT SPJ2.nomer_postavshika&lt;br /&gt;
                 FROM spasoi_ekz.spj SPJ2         &lt;br /&gt;
                 WHERE SPJ2.nomer_detali = P.nomer_detali&lt;br /&gt;
	 	   AND SPJ2.nomer_postavshika != &#039;S1&#039;&lt;br /&gt;
                );                     &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     nazvanie&lt;br /&gt;
 -----------------&lt;br /&gt;
  кружевное бельё&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 29 ===&lt;br /&gt;
Написать запрос SELECT: выдать названия деталей, которые входят только и только в состав изделия с названием &#039;Штуцер 01-03&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nazvanie&lt;br /&gt;
FROM spasoi_ekz.p P&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT SPJ.nomer_izdelia&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                            ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
                  WHERE (&lt;br /&gt;
                         J.nazvanie != LOWER(&#039;Штуцер 01-03&#039;)&lt;br /&gt;
                         AND&lt;br /&gt;
                         SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                        )&lt;br /&gt;
                     OR (&lt;br /&gt;
                         J.nazvanie = LOWER(&#039;Штуцер 01-03&#039;)&lt;br /&gt;
                         AND&lt;br /&gt;
                         SPJ.nomer_detali != P.nomer_detali&lt;br /&gt;
                        )&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
      nazvanie&lt;br /&gt;
 ------------------&lt;br /&gt;
  штуцерная деталь&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 30 ===&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют, по крайней мере, все те детали, которые поставляет поставщик с номером &#039;S2&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT imya&lt;br /&gt;
FROM spasoi_ekz.s S&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT nomer_detali&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJY&lt;br /&gt;
                  WHERE nomer_postavshika = &#039;S2&#039;&lt;br /&gt;
                    AND NOT EXISTS (&lt;br /&gt;
                                    SELECT *&lt;br /&gt;
                                    FROM spasoi_ekz.spj&lt;br /&gt;
                                    WHERE nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                                      AND nomer_detali = SPJY.nomer_detali&lt;br /&gt;
                                   )&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  imya&lt;br /&gt;
 ------------&lt;br /&gt;
  Оша&lt;br /&gt;
  Бран Старк&lt;br /&gt;
 (2 rows)&lt;br /&gt;
[[Категория:Структурное проектирование АСОИ (10 семестр)]]&lt;/div&gt;</summary>
		<author><name>81.9.52.28</name></author>
	</entry>
	<entry>
		<id>https://iu5bmstu.ru/index.php?title=SQL-%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D1%8B_%D0%BA_%D1%8D%D0%BA%D0%B7%D0%B0%D0%BC%D0%B5%D0%BD%D1%83_%D0%BF%D0%BE_%D0%A1%D0%9F%D0%90%D0%A1%D0%9E%D0%98_(10_%D1%81%D0%B5%D0%BC%D0%B5%D1%81%D1%82%D1%80)&amp;diff=3866</id>
		<title>SQL-запросы к экзамену по СПАСОИ (10 семестр)</title>
		<link rel="alternate" type="text/html" href="https://iu5bmstu.ru/index.php?title=SQL-%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D1%8B_%D0%BA_%D1%8D%D0%BA%D0%B7%D0%B0%D0%BC%D0%B5%D0%BD%D1%83_%D0%BF%D0%BE_%D0%A1%D0%9F%D0%90%D0%A1%D0%9E%D0%98_(10_%D1%81%D0%B5%D0%BC%D0%B5%D1%81%D1%82%D1%80)&amp;diff=3866"/>
		<updated>2013-06-16T10:41:36Z</updated>

		<summary type="html">&lt;p&gt;81.9.52.28: /* Билет 15 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right; clear:both; margin-right:1.0em;&amp;quot;&amp;gt;__TOC__&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Билет экзамена по [[:Категория:Структурное проектирование АСОИ (10 семестр) | СПАСОИ]] состоит из двух частей:&lt;br /&gt;
# теория;&lt;br /&gt;
# SQL-запрос.&lt;br /&gt;
&lt;br /&gt;
На этой странице собраны все сформированные запросы по билетам.&lt;br /&gt;
&lt;br /&gt;
Странно, что ни в одном билете нет запроса с сортировкой результатов. Возможно, они буду в дополнительных заданиях.&lt;br /&gt;
&lt;br /&gt;
== Схема БД ==&lt;br /&gt;
&lt;br /&gt;
Схема БД используется всё [[СПАСОИ_(10)_-_Лекция_№8_-_SQL#Некоторые возможности языка SQL | та же]], что была в прошлом семестре и на лекциях.&lt;br /&gt;
&lt;br /&gt;
Для написания запросов и проверки их выполнения создана БД в СУБД [http://www.postgresql.org/ PostgreSQL].&lt;br /&gt;
&lt;br /&gt;
Скрипт создания можно загрузить [http://yadi.sk/d/ArwqOGAy5pPfi отсюда].&lt;br /&gt;
&lt;br /&gt;
=== Таблицы БД ===&lt;br /&gt;
&lt;br /&gt;
==== Поставщики ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.s;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika |       imya       | sostoyanie |   gorod&lt;br /&gt;
 -------------------+------------------+------------+------------&lt;br /&gt;
  S5                | Мелисандра       |      65000 | Мадрид&lt;br /&gt;
  S2                | Бран Старк       |      60000 | Мурманск&lt;br /&gt;
  S1                | Якен Хгар        |    1500000 | Йокогама&lt;br /&gt;
  S7                | Сирио Форель     |    1500000 | Йокогама&lt;br /&gt;
  S4                | Джейме Ланнистер |     750000 | Лондон&lt;br /&gt;
  S3                | Серсея Ланнистер |    1200000 | Лондон&lt;br /&gt;
  S8                | Тирион Ланнистер |       2571 | Манчестер&lt;br /&gt;
  S9                | Иванов           |      35000 | Мытищи&lt;br /&gt;
  S10               | Русе Болтон      |      44444 | Баренцбург&lt;br /&gt;
  S11               | Петров Иван      |      35000 | Мытищи&lt;br /&gt;
  S14               | Рендилл Тарли    |    1111111 | Прага&lt;br /&gt;
  S13               | Сэмвелл Тарли    |     999999 | Прага&lt;br /&gt;
  S6                | Оша              |            | Москва&lt;br /&gt;
  S16               | Ходор            |            | Москва&lt;br /&gt;
  S15               | Мелисса Флорент  |     888888 | Стокгольм&lt;br /&gt;
  S12               | Петров Пётр      |      35001 | Мытищи&lt;br /&gt;
  S17               | Томми Версетти   |  123456789 | Майами&lt;br /&gt;
  S18               | Безликий         |          1 | Йокогама&lt;br /&gt;
 (18 rows)&lt;br /&gt;
&lt;br /&gt;
==== Детали ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.p;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_detali |       nazvanie       |     cvet      | ves  |      gorod&lt;br /&gt;
 --------------+----------------------+---------------+------+-----------------&lt;br /&gt;
  P9           | подставка            | синий         |  400 | Нижний Новгород&lt;br /&gt;
  P10          | стойка               | синий         | 2000 | Нижний Новгород&lt;br /&gt;
  P11          | абажур               | синий         |  400 | Нижний Новгород&lt;br /&gt;
  P1           | гайка                | чёрный        |   20 | Лондон&lt;br /&gt;
  P3           | ось                  | белый         | 5000 | Эдинбург&lt;br /&gt;
  P4           | зубчатое колесо      | чёрный        |   50 | Эдинбург&lt;br /&gt;
  P6           | транзистор           | коричневый    |    2 | Токио&lt;br /&gt;
  P7           | печатная плата       | зелёный       |  200 | Токио&lt;br /&gt;
  P8           | диод                 | коричневый    |    1 | Токио&lt;br /&gt;
  P12          | универсальная деталь | универсальный |    1 | Париж&lt;br /&gt;
  P13          | уникальная деталь    | уникальный    |    1 | Бостон&lt;br /&gt;
  P14          | болт                 | серый         |   20 | Ижевск&lt;br /&gt;
  P15          | рама                 | красный       | 3000 | Манчестер&lt;br /&gt;
  P16          | колесо               | белый         | 1500 | Манчестер&lt;br /&gt;
  P5           | втулка               | серый         |  350 | Манчестер&lt;br /&gt;
  P17          | бумага               | белый         |    1 | Астрахань&lt;br /&gt;
  P18          | плитка               | белый         |  300 | Флоренция&lt;br /&gt;
  P19          | орнамент             | серый         |  800 | Флоренция&lt;br /&gt;
  P20          | уголок               | серый         |  100 | Флоренция&lt;br /&gt;
  P21          | гайка 01-01          | серебристый   |   20 | Клин&lt;br /&gt;
  P22          | усиленная рама       | красный       | 3200 | Череповец&lt;br /&gt;
  P23          | винт                 | розовый       |    5 | Ижевск&lt;br /&gt;
  P24          | труселя              | красный       |   20 | Челябинск&lt;br /&gt;
  P25          | штуцерная деталь     | коричневый    |  450 | Череповец&lt;br /&gt;
  P2           | шуруп                | чёрный        |    5 | Лондон&lt;br /&gt;
  P26          | лезвие               | бесцветный    |  120 | Йокогама&lt;br /&gt;
 (26 rows)&lt;br /&gt;
&lt;br /&gt;
==== Изделия ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.j;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_izdelia |       nazvanie        |      gorod&lt;br /&gt;
 ---------------+-----------------------+-----------------&lt;br /&gt;
  J1            | автомобиль            | Магнитогорск&lt;br /&gt;
  J2            | процессор             | Зеленоград&lt;br /&gt;
  J3            | торшер                | Нижний Новгород&lt;br /&gt;
  J4            | универсальное изделие | Париж&lt;br /&gt;
  J5            | уникальное изделие    | Бостон&lt;br /&gt;
  J6            | велосипед 01/23       | Манчестер&lt;br /&gt;
  J7            | изделие из болтов     | Челябинск&lt;br /&gt;
  J8            | шкаф                  | Ярославль&lt;br /&gt;
  J9            | рама 02-01            | Череповец&lt;br /&gt;
  J10           | книга                 | Астрахань&lt;br /&gt;
  J11           | панно 01-03           | Флоренция&lt;br /&gt;
  J12           | велосипед 03-04       | Клин&lt;br /&gt;
  J13           | рама 02-03            | Череповец&lt;br /&gt;
  J14           | штуцер 01-02          | Череповец&lt;br /&gt;
  J15           | велосипед 01-04       | Клин&lt;br /&gt;
  J16           | кружевное бельё       | Челябинск&lt;br /&gt;
  J17           | штуцер 01-03          | Череповец&lt;br /&gt;
  J18           | кинжал                | Йокогама&lt;br /&gt;
 (18 rows)&lt;br /&gt;
&lt;br /&gt;
==== Сборки ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.spj;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika | nomer_detali | nomer_izdelia | kolichestvo&lt;br /&gt;
 -------------------+--------------+---------------+-------------&lt;br /&gt;
  S1                | P6           | J2            |          20&lt;br /&gt;
  S1                | P7           | J2            |           5&lt;br /&gt;
  S2                | P1           | J1            |           4&lt;br /&gt;
  S6                | P4           | J1            |           2&lt;br /&gt;
  S6                | P5           | J1            |           6&lt;br /&gt;
  S3                | P9           | J3            |           1&lt;br /&gt;
  S4                | P10          | J3            |           1&lt;br /&gt;
  S5                | P11          | J3            |           1&lt;br /&gt;
  S2                | P4           | J1            |           8&lt;br /&gt;
  S6                | P3           | J1            |          50&lt;br /&gt;
  S7                | P8           | J2            |          25&lt;br /&gt;
  S1                | P12          | J4            |           1&lt;br /&gt;
  S2                | P12          | J4            |           1&lt;br /&gt;
  S3                | P12          | J4            |           1&lt;br /&gt;
  S4                | P12          | J4            |           1&lt;br /&gt;
  S5                | P12          | J4            |           1&lt;br /&gt;
  S7                | P12          | J4            |           1&lt;br /&gt;
  S7                | P2           | J1            |           1&lt;br /&gt;
  S6                | P2           | J1            |           9&lt;br /&gt;
  S6                | P12          | J4            |           7&lt;br /&gt;
  S1                | P13          | J5            |          14&lt;br /&gt;
  S6                | P14          | J1            |        9000&lt;br /&gt;
  S2                | P14          | J1            |           3&lt;br /&gt;
  S6                | P1           | J1            |          12&lt;br /&gt;
  S8                | P15          | J6            |           1&lt;br /&gt;
  S8                | P16          | J6            |           2&lt;br /&gt;
  S3                | P5           | J6            |          10&lt;br /&gt;
  S10               | P2           | J8            |           4&lt;br /&gt;
  S8                | P1           | J7            |          16&lt;br /&gt;
  S9                | P14          | J7            |           3&lt;br /&gt;
  S11               | P10          | J3            |           2&lt;br /&gt;
  S12               | P15          | J1            |           3&lt;br /&gt;
  S11               | P11          | J3            |           4&lt;br /&gt;
  S10               | P14          | J9            |           5&lt;br /&gt;
  S13               | P17          | J10           |        1001&lt;br /&gt;
  S14               | P17          | J10           |        1111&lt;br /&gt;
  S15               | P17          | J10           |        1010&lt;br /&gt;
  S5                | P18          | J11           |           9&lt;br /&gt;
  S5                | P19          | J11           |           1&lt;br /&gt;
  S5                | P20          | J11           |           4&lt;br /&gt;
  S9                | P14          | J8            |          25&lt;br /&gt;
  S12               | P21          | J12           |          15&lt;br /&gt;
  S11               | P22          | J13           |           9&lt;br /&gt;
  S11               | P1           | J14           |          26&lt;br /&gt;
  S12               | P1           | J14           |          13&lt;br /&gt;
  S12               | P2           | J14           |          54&lt;br /&gt;
  S12               | P23          | J4            |         101&lt;br /&gt;
  S12               | P16          | J15           |          40&lt;br /&gt;
  S7                | P21          | J12           |           3&lt;br /&gt;
  S8                | P21          | J12           |           4&lt;br /&gt;
  S9                | P21          | J12           |           5&lt;br /&gt;
  S1                | P24          | J16           |           1&lt;br /&gt;
  S1                | P15          | J6            |           3&lt;br /&gt;
  S4                | P25          | J17           |           1&lt;br /&gt;
  S17               | P16          | J1            |           4&lt;br /&gt;
  S18               | P26          | J18           |           1&lt;br /&gt;
 (56 rows)&lt;br /&gt;
&lt;br /&gt;
== Готовые запросы ==&lt;br /&gt;
&lt;br /&gt;
Если видите, что тот или иной запрос можно составить короче и рациональней - смело вносите правку.&lt;br /&gt;
&lt;br /&gt;
В трёх билетах в задании на запрос встречается формулировка &amp;quot;&#039;&#039;только и только&#039;&#039;&amp;quot;. Как оказалось, это означает следующее: если холодильники поставляет &#039;&#039;только и только&#039;&#039; Уася, то:&lt;br /&gt;
# кроме Уаси никто не поставляет холодильники;&lt;br /&gt;
# Уася не поставляет ничего, кроме холодильников.&lt;br /&gt;
&lt;br /&gt;
Существующие запросы, естественно, оказались неправильными и их пришлось переписать. &amp;lt;s&amp;gt;Великий и могучий русский языка, ну что за экономия на бумаге.&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Билет 1 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера поставщиков, которые поставляют, по крайней мере, все те детали, которые поставляет поставщик с номером &#039;S2&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nomer_postavshika&lt;br /&gt;
FROM spasoi_ekz.spj SPJX&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT nomer_detali&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJY&lt;br /&gt;
                  WHERE nomer_postavshika = &#039;S2&#039;&lt;br /&gt;
                    AND NOT EXISTS (&lt;br /&gt;
                                    SELECT *&lt;br /&gt;
                                    FROM spasoi_ekz.spj&lt;br /&gt;
                                    WHERE nomer_postavshika = SPJX.nomer_postavshika&lt;br /&gt;
                                      AND nomer_detali = SPJY.nomer_detali&lt;br /&gt;
                                   )&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika&lt;br /&gt;
 -------------------&lt;br /&gt;
  S6&lt;br /&gt;
  S2&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 2 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера деталей и общее их количество для всех номеров деталей, поставляемых более чем одним поставщиком.&lt;br /&gt;
&lt;br /&gt;
Текст запроса, каким его дал Григорьев на лекции, впоследствии исправив его:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali AS &amp;quot;Номер детали&amp;quot;,&lt;br /&gt;
       SUM(kolichestvo) AS &amp;quot;Сколько штук поставляется&amp;quot;,&lt;br /&gt;
       COUNT(DISTINCT nomer_postavshika) AS &amp;quot;Сколько у неё поставщиков&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_postavshika) &amp;gt; 1;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali AS &amp;quot;Номер детали&amp;quot;,&lt;br /&gt;
       kol AS &amp;quot;Сколько штук поставляется&amp;quot;&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT nomer_detali,&lt;br /&gt;
             SUM(kolichestvo) AS kol,&lt;br /&gt;
             COUNT(DISTINCT nomer_postavshika)&lt;br /&gt;
      FROM spasoi_ekz.spj&lt;br /&gt;
      GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_postavshika) &amp;gt; 1&lt;br /&gt;
     ) A;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер детали | Сколько штук поставляется | Сколько у неё поставщиков&lt;br /&gt;
 --------------+---------------------------+---------------------------&lt;br /&gt;
  P1           |                        71 |                         5&lt;br /&gt;
  P10          |                         3 |                         2&lt;br /&gt;
  P11          |                         5 |                         2&lt;br /&gt;
  P12          |                        13 |                         7&lt;br /&gt;
  P14          |                      9036 |                         4&lt;br /&gt;
  P15          |                         7 |                         3&lt;br /&gt;
  P16          |                        46 |                         3&lt;br /&gt;
  P17          |                      3122 |                         3&lt;br /&gt;
  P2           |                        68 |                         4&lt;br /&gt;
  P21          |                        27 |                         4&lt;br /&gt;
  P4           |                        10 |                         2&lt;br /&gt;
  P5           |                        16 |                         2&lt;br /&gt;
 (12 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 3 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера поставщиков, поставляющих детали с номером &#039;P1&#039; для какого-либо изделия в количестве (в поставке) большим, чем средний объём поставок деталей с номером &#039;P2&#039; для этого изделия.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT X.nomer_postavshika &lt;br /&gt;
FROM spasoi_ekz.spj X&lt;br /&gt;
WHERE X.nomer_detali = &#039;P1&#039;&lt;br /&gt;
  AND X.kolichestvo &amp;gt; (&lt;br /&gt;
                       SELECT AVG(kolichestvo)&lt;br /&gt;
                       FROM spasoi_ekz.spj&lt;br /&gt;
                       WHERE nomer_izdelia = X.nomer_izdelia&lt;br /&gt;
                         AND nomer_detali = &#039;P2&#039;&lt;br /&gt;
                      );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но длиннее и нерациональней&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nomer_postavshika&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT *&lt;br /&gt;
      FROM spasoi_ekz.spj&lt;br /&gt;
      WHERE nomer_izdelia IN(&lt;br /&gt;
                             SELECT nomer_izdelia&lt;br /&gt;
                             FROM spasoi_ekz.spj&lt;br /&gt;
                             WHERE nomer_detali = &#039;P1&#039;&lt;br /&gt;
                            )&lt;br /&gt;
        AND nomer_izdelia IN(&lt;br /&gt;
	                     SELECT nomer_izdelia&lt;br /&gt;
	                     FROM spasoi_ekz.spj&lt;br /&gt;
	                     WHERE nomer_detali = &#039;P2&#039;&lt;br /&gt;
	                    )&lt;br /&gt;
     ) A&lt;br /&gt;
WHERE nomer_detali = &#039;P1&#039; AND kolichestvo &amp;gt;&lt;br /&gt;
(&lt;br /&gt;
 SELECT AVG(kolichestvo)&lt;br /&gt;
 FROM (&lt;br /&gt;
       SELECT *&lt;br /&gt;
       FROM spasoi_ekz.spj&lt;br /&gt;
       WHERE nomer_izdelia IN(&lt;br /&gt;
                              SELECT nomer_izdelia&lt;br /&gt;
                              FROM spasoi_ekz.spj&lt;br /&gt;
                              WHERE nomer_detali = &#039;P1&#039;&lt;br /&gt;
                             )&lt;br /&gt;
         AND nomer_izdelia IN(&lt;br /&gt;
                              SELECT nomer_izdelia&lt;br /&gt;
                              FROM spasoi_ekz.spj&lt;br /&gt;
                              WHERE nomer_detali = &#039;P2&#039;&lt;br /&gt;
                             )&lt;br /&gt;
      ) B&lt;br /&gt;
 WHERE nomer_detali = &#039;P2&#039;&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika&lt;br /&gt;
 -------------------&lt;br /&gt;
  S6&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 4 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера изделий, для которых детали поставляет только поставщик с номером ‘S1’.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_izdelia&lt;br /&gt;
FROM spasoi_ekz.spj X&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT *&lt;br /&gt;
                  FROM spasoi_ekz.spj&lt;br /&gt;
                  WHERE nomer_postavshika != &#039;S1&#039;&lt;br /&gt;
                    AND X.nomer_izdelia = nomer_izdelia&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но без EXISTS&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nomer_izdelia&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
WHERE nomer_izdelia IN(&lt;br /&gt;
                       SELECT nomer_izdelia&lt;br /&gt;
                       FROM spasoi_ekz.spj&lt;br /&gt;
                       WHERE nomer_postavshika = &#039;S1&#039;&lt;br /&gt;
                      )&lt;br /&gt;
  AND nomer_izdelia NOT IN(&lt;br /&gt;
                           SELECT nomer_izdelia&lt;br /&gt;
                           FROM spasoi_ekz.spj&lt;br /&gt;
                           WHERE nomer_postavshika != &#039;S1&#039;&lt;br /&gt;
                          );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_izdelia&lt;br /&gt;
 ---------------&lt;br /&gt;
  J5&lt;br /&gt;
  J16&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 5 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих детали с названием &amp;quot;Болт&amp;quot; в количестве (в поставке) большим, чем средний объём всех поставок деталей с номером &#039;P1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                           ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                        JOIN spasoi_ekz.p P&lt;br /&gt;
                           ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                              AND nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
WHERE kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT AVG(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj&lt;br /&gt;
                     WHERE nomer_detali = &#039;P1&#039;&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но без JOIN&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s&lt;br /&gt;
WHERE nomer_postavshika IN (&lt;br /&gt;
                            SELECT nomer_postavshika&lt;br /&gt;
                            FROM spasoi_ekz.spj&lt;br /&gt;
                            WHERE nomer_detali = (&lt;br /&gt;
                                                  SELECT nomer_detali&lt;br /&gt;
                                                  FROM spasoi_ekz.p&lt;br /&gt;
                                                  WHERE LOWER(nazvanie) = LOWER(&#039;Болт&#039;)&lt;br /&gt;
                                                 )&lt;br /&gt;
                              AND kolichestvo &amp;gt; (&lt;br /&gt;
                                                 SELECT AVG(kolichestvo)&lt;br /&gt;
                                                 FROM spasoi_ekz.spj&lt;br /&gt;
                                                 WHERE nomer_detali = &#039;P1&#039;&lt;br /&gt;
                                                )&lt;br /&gt;
                           );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  imya&lt;br /&gt;
 ------&lt;br /&gt;
  Оша&lt;br /&gt;
  Иванов&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 6 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия деталей, поставляемых поставщиком, проживающим в том же городе, где изготавливаются эти детали, для изделия с названием ‘Велосипед 01/23’.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT P.nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                        JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                        JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
WHERE S.gorod = P.gorod&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Велосипед 01/23&#039;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос без JOIN&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nazvanie&lt;br /&gt;
FROM spasoi_ekz.S S, spasoi_ekz.p P, spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE S.gorod = P.gorod&lt;br /&gt;
  AND P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
  AND S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
  AND nomer_izdelia = (&lt;br /&gt;
                       SELECT nomer_izdelia&lt;br /&gt;
                       FROM spasoi_ekz.j&lt;br /&gt;
                       WHERE nazvanie = LOWER(&#039;Велосипед 01/23&#039;)&lt;br /&gt;
                      );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nazvanie&lt;br /&gt;
 ----------&lt;br /&gt;
  рама&lt;br /&gt;
  колесо&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 7 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия изделий, куда входят детали с названием &#039;Болт&#039;, поставляемых поставщиками с именем &#039;Иванов&#039;, в количестве (в поставке) большим, чем средний объём поставок для этого изделия.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT J.nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                        JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                        JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
WHERE imya LIKE &#039;%Иванов%&#039;&lt;br /&gt;
  AND P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
  AND kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT AVG(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj X&lt;br /&gt;
                     WHERE SPJ.nomer_izdelia = X.nomer_izdelia&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё один вариант запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie&lt;br /&gt;
FROM spasoi_ekz.j&lt;br /&gt;
WHERE nomer_izdelia IN (&lt;br /&gt;
                        SELECT nomer_izdelia&lt;br /&gt;
                        FROM (spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                                                   ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                                                      AND imya LIKE &#039;%Иванов%&#039;&lt;br /&gt;
                                                 JOIN spasoi_ekz.p P&lt;br /&gt;
                                                   ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                                      AND nazvanie = LOWER(&#039;Болт&#039;)) A&lt;br /&gt;
                        WHERE kolichestvo &amp;gt; (&lt;br /&gt;
                                             SELECT AVG(kolichestvo)&lt;br /&gt;
                                             FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                                                       ON SPJ.nomer_izdelia = A.nomer_izdelia&lt;br /&gt;
                                            )&lt;br /&gt;
                       );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;И ещё вариант этого же запроса, но длиннее и нерациональней&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT J.nazvanie, kolichestvo&lt;br /&gt;
      FROM spasoi_ekz.s S, spasoi_ekz.p P, spasoi_ekz.j J, spasoi_ekz.spj SPJ&lt;br /&gt;
      WHERE J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
        AND P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
        AND P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
        AND S.imya LIKE &#039;%Иванов%&#039;&lt;br /&gt;
        AND S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
     ) A&lt;br /&gt;
WHERE kolichestvo &amp;gt;&lt;br /&gt;
(&lt;br /&gt;
 SELECT AVG(kolichestvo)&lt;br /&gt;
 FROM spasoi_ekz.spj&lt;br /&gt;
 WHERE nomer_izdelia IN(&lt;br /&gt;
                        SELECT J.nomer_izdelia&lt;br /&gt;
                        FROM spasoi_ekz.s S, spasoi_ekz.p P, spasoi_ekz.j J, spasoi_ekz.spj SPJ&lt;br /&gt;
                        WHERE J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
                          AND P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                          AND P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
                          AND S.imya LIKE &#039;%Иванов%&#039;&lt;br /&gt;
                          AND S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
                       )&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
      nazvanie&lt;br /&gt;
 -------------------&lt;br /&gt;
  шкаф&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 8 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера изделий и общее количество деталей для них, поставляемых поставщиками с именем &#039;Петров&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_izdelia AS &amp;quot;Номер изделия&amp;quot;, SUM(kolichestvo) AS &amp;quot;Количество деталей&amp;quot; &lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                             -- так как &amp;quot;поставщикАМИ&amp;quot; и возможны&lt;br /&gt;
                             -- Иван Петров и Петров Иван, то LIKE %Петров%&lt;br /&gt;
                             AND imya LIKE &#039;%Петров%&#039;&lt;br /&gt;
GROUP BY nomer_izdelia;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер изделия | Количество деталей&lt;br /&gt;
 ---------------+--------------------&lt;br /&gt;
  J4            |                101&lt;br /&gt;
  J3            |                  6&lt;br /&gt;
  J13           |                  9&lt;br /&gt;
  J15           |                 40&lt;br /&gt;
  J1            |                  3&lt;br /&gt;
  J12           |                 15&lt;br /&gt;
  J14           |                 93&lt;br /&gt;
 (7 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 9 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера деталей и общее их количество для всех номеров деталей, которые входят только в одно изделие.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali, SUM(kolichestvo)&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_izdelia) = 1;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali, kol FROM (&lt;br /&gt;
       SELECT nomer_detali, SUM(kolichestvo) AS kol, COUNT(DISTINCT nomer_izdelia) = 1&lt;br /&gt;
       FROM spasoi_ekz.spj&lt;br /&gt;
       GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_izdelia) = 1&lt;br /&gt;
    ) A;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_detali | sum&lt;br /&gt;
 --------------+------&lt;br /&gt;
  P10          |    3&lt;br /&gt;
  P11          |    5&lt;br /&gt;
  P12          |   13&lt;br /&gt;
  P13          |   14&lt;br /&gt;
  P17          | 3122&lt;br /&gt;
  P18          |    9&lt;br /&gt;
  P19          |    1&lt;br /&gt;
  P20          |    4&lt;br /&gt;
  P21          |   27&lt;br /&gt;
  P22          |    9&lt;br /&gt;
  P23          |  101&lt;br /&gt;
  P24          |    1&lt;br /&gt;
  P25          |    1&lt;br /&gt;
  P26          |    1&lt;br /&gt;
  P3           |   50&lt;br /&gt;
  P4           |   10&lt;br /&gt;
  P6           |   20&lt;br /&gt;
  P7           |    5&lt;br /&gt;
  P8           |   25&lt;br /&gt;
  P9           |    1&lt;br /&gt;
 (20 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 10 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих детали с названием &#039;Болт&#039; для изделия с названием &#039;Рама 02-01&#039; в количестве (в поставке) большим, чем минимальное значение поставки детали с номером &#039;P1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
			   ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
			      AND J.nazvanie = LOWER(&#039;Рама 02-01&#039;)&lt;br /&gt;
			 JOIN spasoi_ekz.p P&lt;br /&gt;
			   ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
			      AND P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
			 JOIN spasoi_ekz.s S&lt;br /&gt;
			   ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE kolichestvo &amp;gt; (&lt;br /&gt;
		     SELECT MIN(kolichestvo)&lt;br /&gt;
		     FROM spasoi_ekz.spj &lt;br /&gt;
		     WHERE nomer_detali = &#039;P1&#039;&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Русе Болтон&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 11 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия городов и суммарное состояние проживающих в каждом городе поставщиков, у которых минимальный объём поставки деталей больше 1000.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT gorod, SUM(sostoyanie)&lt;br /&gt;
FROM spasoi_ekz.s S&lt;br /&gt;
WHERE (	&lt;br /&gt;
       SELECT MIN(kolichestvo)	&lt;br /&gt;
       FROM spasoi_ekz.spj X	&lt;br /&gt;
       WHERE X.nomer_postavshika = S.nomer_postavshika		&lt;br /&gt;
      ) &amp;gt; 1000&lt;br /&gt;
GROUP BY gorod;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Вариант подлиннее для тех, кто не ищет лёгких путей&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT gorod, SUM(sostoyanie)&lt;br /&gt;
FROM spasoi_ekz.s&lt;br /&gt;
WHERE nomer_postavshika IN (&lt;br /&gt;
                            SELECT nomer_postavshika&lt;br /&gt;
                            FROM spasoi_ekz.spj&lt;br /&gt;
                            GROUP BY nomer_postavshika HAVING MIN(kolichestvo) &amp;gt; 1000&lt;br /&gt;
                           )&lt;br /&gt;
GROUP BY gorod;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;!-- а этот запрос выполняет не совсем то и не правильно&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT gorod, sost&lt;br /&gt;
FROM (&lt;br /&gt;
SELECT gorod, SUM(sostoyanie) AS sost, SUM(SPJ.kolichestvo)&lt;br /&gt;
FROM spasoi_ekz.spj, spasoi_ekz.s&lt;br /&gt;
WHERE S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
GROUP BY S.gorod HAVING SUM(SPJ.kolichestvo) &amp;gt; 1000&lt;br /&gt;
) A;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; --&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
    gorod   |   sum&lt;br /&gt;
 -----------+---------&lt;br /&gt;
  Прага     | 2111110&lt;br /&gt;
  Стокгольм |  888888&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 12 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера деталей, поставляемых для какого-либо изделия поставщиком, проживающим в том же городе, где изготавливается это изделие.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali&lt;br /&gt;
FROM spasoi_ekz.spj SPJ, spasoi_ekz.s S, spasoi_ekz.j J&lt;br /&gt;
WHERE SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
  AND S.gorod = J.gorod&lt;br /&gt;
  AND J.nomer_izdelia = SPJ.nomer_izdelia;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_detali&lt;br /&gt;
 --------------&lt;br /&gt;
  P15&lt;br /&gt;
  P16&lt;br /&gt;
  P26&lt;br /&gt;
 (3 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 13 ===&lt;br /&gt;
&lt;br /&gt;
Написать &amp;lt;u&amp;gt;один&amp;lt;/u&amp;gt; запрос SELECT: выдать количества строк в таблице S (Поставщик) 1) с пустыми значениями и 2) непустыми значениями в столбце Состояние.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT COUNT(*) - COUNT(sostoyanie) AS &amp;quot;С пустым состоянием&amp;quot;, &lt;br /&gt;
       COUNT(sostoyanie) AS &amp;quot;С не пустым состоянием&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.s;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но длиннее и нерациональней&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SELECT COUNT(Snull.*) AS &amp;quot;С пустым состоянием&amp;quot;, COUNT(Snotnull.sostoyanie) AS &amp;quot;С не пустым состоянием&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.s Snull RIGHT OUTER JOIN spasoi_ekz.s Snotnull&lt;br /&gt;
                                      ON Snull.nomer_postavshika = Snotnull.nomer_postavshika&lt;br /&gt;
                                         AND Snull.sostoyanie IS NULL;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  С пустым состоянием | С не пустым состоянием&lt;br /&gt;
 ---------------------+-----------------------&lt;br /&gt;
                    2 |                    16&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 14 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют детали только и только для изделия с номером &#039;J1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj A JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON A.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE nomer_izdelia = &#039;J1&#039;&lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT nomer_postavshika&lt;br /&gt;
                  FROM spasoi_ekz.spj&lt;br /&gt;
                  WHERE nomer_izdelia != &#039;J1&#039;&lt;br /&gt;
                    AND nomer_postavshika = A.nomer_postavshika&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       imya&lt;br /&gt;
 ----------------&lt;br /&gt;
  Томми Версетти&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 15 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать наименования изделий, для которых детали поставляют только те поставщики, у которых состояние больше 1000000 у.е.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT J.nazvanie&lt;br /&gt;
FROM spasoi_ekz.j J&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
		  SELECT *&lt;br /&gt;
		  FROM spasoi_ekz.spj X JOIN spasoi_ekz.s S&lt;br /&gt;
		                          ON X.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
		  WHERE sostoyanie &amp;lt;= 1000000&lt;br /&gt;
		  AND X.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Вариант этого запроса без NOT EXISTS&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                        JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
WHERE sostoyanie &amp;gt; 1000000&lt;br /&gt;
  AND SPJ.nomer_izdelia NOT IN (&lt;br /&gt;
                                SELECT nomer_izdelia&lt;br /&gt;
                                FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                                                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                                WHERE sostoyanie &amp;lt; 1000000&lt;br /&gt;
                               );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       nazvanie&lt;br /&gt;
 --------------------&lt;br /&gt;
  кружевное бельё&lt;br /&gt;
  уникальное изделие&lt;br /&gt;
  процессор&lt;br /&gt;
 (3 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 16 ===&lt;br /&gt;
Написать запрос SELECT: выдать цвета и для каждого цвета общее количество деталей, входящих в изделие с названием &#039;Панно 01-03&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT cvet AS &amp;quot;Цвет&amp;quot;, SUM(kolichestvo) AS &amp;quot;Деталей&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
			     AND J.nazvanie = LOWER(&#039;Панно 01-03&#039;)&lt;br /&gt;
			JOIN spasoi_ekz.P P&lt;br /&gt;
			  ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
GROUP BY cvet;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Цвет  | Деталей&lt;br /&gt;
 -------+---------&lt;br /&gt;
  белый |       9&lt;br /&gt;
  серый |       5&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 17 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера поставщиков и количество сделанных ими поставок при условии, что среднее число деталей во всех этих поставках больше 1000.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_postavshika AS &amp;quot;Номер поставщика&amp;quot;, COUNT(*) AS &amp;quot;Количество поставок&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
WHERE nomer_postavshika IN (&lt;br /&gt;
                            SELECT nomer_postavshika&lt;br /&gt;
                            FROM spasoi_ekz.spj&lt;br /&gt;
                            GROUP BY nomer_postavshika HAVING AVG(kolichestvo) &amp;gt; 1000&lt;br /&gt;
                           )&lt;br /&gt;
GROUP BY nomer_postavshika;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_postavshika AS &amp;quot;Номер поставщика&amp;quot;, COUNT(*) AS &amp;quot;Количество поставок&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
WHERE (&lt;br /&gt;
       SELECT AVG(kolichestvo)&lt;br /&gt;
       FROM spasoi_ekz.spj X&lt;br /&gt;
       WHERE X.nomer_postavshika = spj.nomer_postavshika&lt;br /&gt;
       ) &amp;gt; 1000&lt;br /&gt;
GROUP BY nomer_postavshika;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;И ещё вариант запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nom AS &amp;quot;Номер поставщика&amp;quot;, cnt AS &amp;quot;Количество поставок&amp;quot;&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT S.nomer_postavshika AS nom,&lt;br /&gt;
             COUNT(SPJ.nomer_postavshika) AS cnt,&lt;br /&gt;
             AVG(SPJ.kolichestvo) AS kol&lt;br /&gt;
      FROM spasoi_ekz.s S, spasoi_ekz.spj SPJ&lt;br /&gt;
      WHERE S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
      GROUP BY S.nomer_postavshika&lt;br /&gt;
     ) A&lt;br /&gt;
WHERE kol &amp;gt; 1000;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер поставщика | Количество поставок&lt;br /&gt;
 ------------------+---------------------&lt;br /&gt;
  S13              |                   1&lt;br /&gt;
  S6               |                   7&lt;br /&gt;
  S14              |                   1&lt;br /&gt;
  S15              |                   1&lt;br /&gt;
 (4 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 18 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, имеющих состояние больше 1000 и поставляющих деталь с названием &#039;Гайка 01-01&#039; для изделия с названием &#039;Велосипед 03-04&#039; в количестве (в поставке) большим, чем средний объём поставки, выполненной поставщиками с именем &#039;Иванов&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:2nd dufficulty.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;5px&amp;quot;&amp;gt;&#039;&#039;&#039;Второй по сложности запрос экзамена!&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;4px&amp;quot;&amp;gt;&#039;&#039;&#039;Вот уж не свезло, так не свезло&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                    JOIN spasoi_ekz.j J&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
WHERE sostoyanie &amp;gt; 1000&lt;br /&gt;
  AND P.nazvanie = LOWER(&#039;Гайка 01-01&#039;)&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Велосипед 03-04&#039;)&lt;br /&gt;
  AND kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT AVG(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                       ON SPJ.nomer_postavshika = S.nomer_postavshika &lt;br /&gt;
                     WHERE S.imya = &#039;Иванов&#039;&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Пётр&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 19 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия красных деталей, которые входят только в изделие с названием &#039;Рама 02-03&#039; в количестве, меньшем 10 единиц в поставке.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT X.nazvanie&lt;br /&gt;
FROM spasoi_ekz.p X JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_detali = X.nomer_detali&lt;br /&gt;
WHERE X.cvet = &#039;красный&#039;&lt;br /&gt;
  AND kolichestvo &amp;lt; 10&lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT *&lt;br /&gt;
                  FROM spasoi_ekz.j J JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                                        ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                  WHERE J.nazvanie != LOWER(&#039;Рама 02-03&#039;)&lt;br /&gt;
                    AND X.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант этого же запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT P.nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND cvet = &#039;красный&#039;&lt;br /&gt;
                        JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                              AND J.nazvanie = LOWER(&#039;Рама 02-03&#039;)&lt;br /&gt;
WHERE kolichestvo &amp;lt; 10&lt;br /&gt;
  AND SPJ.nomer_detali NOT IN (&lt;br /&gt;
                               SELECT nomer_detali&lt;br /&gt;
                               FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                                         ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                                                            AND J.nazvanie != LOWER(&#039;Рама 02-03&#039;)&lt;br /&gt;
                              );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     nazvanie&lt;br /&gt;
 ----------------&lt;br /&gt;
  усиленная рама&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 20 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих только белые детали.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT *&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                                            ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                  WHERE nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    AND P.cvet != &#039;белый&#039;&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё один вариант этого же запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND cvet = &#039;белый&#039;&lt;br /&gt;
                        JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE S.nomer_postavshika NOT IN (&lt;br /&gt;
                                  SELECT nomer_postavshika&lt;br /&gt;
                                  FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                                                            ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                                               AND cvet != &#039;белый&#039;&lt;br /&gt;
                                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;И ещё один вариант этого же запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s&lt;br /&gt;
WHERE nomer_postavshika NOT IN  (&lt;br /&gt;
                                 SELECT spj.nomer_postavshika&lt;br /&gt;
                                 FROM spasoi_ekz.spj SPJ, spasoi_ekz.p P&lt;br /&gt;
                                 WHERE SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                   AND p.cvet != &#039;белый&#039;&lt;br /&gt;
                                )&lt;br /&gt;
  AND nomer_postavshika  IN (&lt;br /&gt;
                             SELECT spj.nomer_postavshika&lt;br /&gt;
                             FROM spasoi_ekz.spj SPJ, spasoi_ekz.p P&lt;br /&gt;
                             WHERE SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                               AND p.cvet = &#039;белый&#039;&lt;br /&gt;
                            );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       imya&lt;br /&gt;
 -----------------&lt;br /&gt;
  Рендилл Тарли&lt;br /&gt;
  Сэмвелл Тарли&lt;br /&gt;
  Мелисса Флорент&lt;br /&gt;
  Томми Версетти&lt;br /&gt;
 (4 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 21 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия изделий, для которых детали поставляет только и только поставщик с номером &#039;S1&#039;.&lt;br /&gt;
&lt;br /&gt;
Чтобы продемонстрировать выполнение запроса наглядно, возьмём поставщика не &#039;S1&#039;, а &#039;S18&#039;, который был создан специально для этого запроса. Если оставить &#039;S1&#039;, то наглядности не получится, так как по нашей схеме БД этот поставщик не попадает под условие &amp;quot;&#039;&#039;только и только&#039;&#039;&amp;quot;, и запрос вернёт пустой результат.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie&lt;br /&gt;
FROM spasoi_ekz.j J, spasoi_ekz.SPJ SPJ&lt;br /&gt;
WHERE J.nomer_izdelia = SPJ.nomer_izdelia &lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT *&lt;br /&gt;
                  FROM spasoi_ekz.spj&lt;br /&gt;
                  WHERE nomer_postavshika != &#039;S18&#039; AND nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                 )&lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT *&lt;br /&gt;
                  FROM spasoi_ekz.spj&lt;br /&gt;
                  WHERE nomer_postavshika = &#039;S18&#039; AND nomer_izdelia != J.nomer_izdelia&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       nazvanie&lt;br /&gt;
 --------------------&lt;br /&gt;
  кинжал&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 22 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют только детали с номером &#039;P1&#039; для изделия с именем &#039;Штуцер 01-02&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                             AND J.nazvanie = LOWER(&#039;Штуцер 01-02&#039;)&lt;br /&gt;
                        JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT *&lt;br /&gt;
                  FROM spasoi_ekz.spj X JOIN spasoi_ekz.j J&lt;br /&gt;
                                          ON X.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                  WHERE X.nomer_detali != &#039;P1&#039; &lt;br /&gt;
                    AND j.nazvanie = LOWER(&#039;Штуцер 01-02&#039;)&lt;br /&gt;
                    AND S.nomer_postavshika = X.nomer_postavshika&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- неверный запрос - номер изделия, а не название&lt;br /&gt;
SELECT imya FROM S X&lt;br /&gt;
JOIN SPJ Y ON X.nomer_postavshika=Y.nomer_postavshika&lt;br /&gt;
WHERE X.nomer_postavshika NOT IN (&lt;br /&gt;
                  SELECT DISTINCT nomer_postavshika FROM SPJ Z&lt;br /&gt;
                  WHERE Z.nomer_izdelia != &#039;Штуцер 01-02&#039;&lt;br /&gt;
                  AND Z.nomer_detali!=&#039;P1&#039;);--&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но длиннее и нерациональней&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                             AND J.nazvanie = LOWER(&#039;Штуцер 01-02&#039;)&lt;br /&gt;
                        JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND SPJ.nomer_detali = &#039;P1&#039;&lt;br /&gt;
                        JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE SPJ.nomer_postavshika NOT IN (&lt;br /&gt;
                                    SELECT nomer_postavshika&lt;br /&gt;
                                    FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                                              ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                                                                 AND J.nazvanie = LOWER(&#039;Штуцер 01-02&#039;)&lt;br /&gt;
                                                            JOIN spasoi_ekz.p P&lt;br /&gt;
                                                              ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                                                 AND SPJ.nomer_detali != &#039;P1&#039;&lt;br /&gt;
                              );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Иван&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 23 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют деталь с названием &#039;Винт&#039; в количестве большим 100 единиц в одной поставке и имеют состояние больше среднего по их родному городу.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT S.imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
WHERE P.nazvanie = LOWER(&#039;Винт&#039;)&lt;br /&gt;
  AND SPJ.kolichestvo &amp;gt; 100&lt;br /&gt;
  AND S.sostoyanie &amp;gt; (&lt;br /&gt;
                      SELECT AVG(SS.sostoyanie)&lt;br /&gt;
                      FROM spasoi_ekz.s SS&lt;br /&gt;
                      WHERE SS.gorod = S.gorod&lt;br /&gt;
                     );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Пётр&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 24 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать наименования деталей и общее их количество для всех наименований деталей, изготавливаемых в одном городе.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- С этим запросом возникла неожиданная проблема - задание то ли неполное, то ли неправильное, потому что нельзя однозначно сказать, что по нему требуется сделать.&lt;br /&gt;
&lt;br /&gt;
Так что тут несколько вариантов запросов (кто как понял).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Первый вариант запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie, kol&lt;br /&gt;
FROM spasoi_ekz.p A, (&lt;br /&gt;
                      SELECT X.gorod, SUM(kolichestvo) as kol&lt;br /&gt;
                      FROM spasoi_ekz.p X, spasoi_ekz.spj Y&lt;br /&gt;
                      WHERE Y.nomer_detali = X.nomer_detali&lt;br /&gt;
                      GROUP BY X.gorod&lt;br /&gt;
                     ) B&lt;br /&gt;
WHERE A.gorod = B.gorod;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
        nazvanie       | kol&lt;br /&gt;
 ----------------------+------&lt;br /&gt;
  подставка            |    9&lt;br /&gt;
  стойка               |    9&lt;br /&gt;
  абажур               |    9&lt;br /&gt;
  гайка                |  139&lt;br /&gt;
  ось                  |   60&lt;br /&gt;
  зубчатое колесо      |   60&lt;br /&gt;
  транзистор           |   50&lt;br /&gt;
  печатная плата       |   50&lt;br /&gt;
  диод                 |   50&lt;br /&gt;
  универсальная деталь |   13&lt;br /&gt;
  уникальная деталь    |   14&lt;br /&gt;
  болт                 | 9137&lt;br /&gt;
  рама                 |   69&lt;br /&gt;
  колесо               |   69&lt;br /&gt;
  втулка               |   69&lt;br /&gt;
  бумага               | 3122&lt;br /&gt;
  плитка               |   14&lt;br /&gt;
  орнамент             |   14&lt;br /&gt;
  уголок               |   14&lt;br /&gt;
  гайка 01-01          |   27&lt;br /&gt;
  усиленная рама       |   10&lt;br /&gt;
  винт                 | 9137&lt;br /&gt;
  труселя              |    1&lt;br /&gt;
  штуцерная деталь     |   10&lt;br /&gt;
  шуруп                |  139&lt;br /&gt;
 (25 rows)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
и --&amp;gt;&lt;br /&gt;
В уточнение задания Григорьев сказал следующее: &amp;quot;&#039;&#039;Следует учесть, что в качестве наименования города может выступать переменная, в которую в некоторой программе должно быть занесено конкретное значение перед выполнением запроса&#039;&#039;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
То есть, вообще говоря, задание на запрос неполное, и его можно трактовать так: выдать наименования деталей и общее их количество для всех наименований деталей, изготавливаемых в городе &amp;lt;code&amp;gt;%НАЗВАНИЕГОРОДА%&amp;lt;/code&amp;gt;. Вот эта переменная задаётся где-то в программе, а в БД идёт запрос с уже подставленным конкретным названием. &lt;br /&gt;
&lt;br /&gt;
Этот вариант запроса составлен, например, для Лондона. &lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie, SUM(kolichestvo)&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
WHERE gorod = &#039;Лондон&#039;&lt;br /&gt;
GROUP BY nazvanie;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nazvanie | sum&lt;br /&gt;
 ----------+-----&lt;br /&gt;
  гайка    |  71&lt;br /&gt;
  шуруп    |  68&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 25 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих хотя бы одну белую деталь для изделия с названием &#039;Велосипед 01-04&#039; с объёмом поставки большим, чем средний объём поставки этого поставщика.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                    JOIN spasoi_ekz.j J&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
WHERE cvet = &#039;белый&#039;&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Велосипед 01-04&#039;)&lt;br /&gt;
  AND kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT AVG(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj SPJ&lt;br /&gt;
                     WHERE SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Пётр&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 26 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера красных деталей и количество поставок этих деталей.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT P.nomer_detali AS &amp;quot;Номер детали&amp;quot;, COUNT(kolichestvo) AS &amp;quot;Количество поставок с ней&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.p P, spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
  AND cvet = &#039;красный&#039;&lt;br /&gt;
GROUP BY P.nomer_detali;   &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос через JOIN&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT SPJ.nomer_detali AS &amp;quot;Номер детали&amp;quot;, COUNT(kolichestvo) AS &amp;quot;Количество поставок с ней&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND cvet = &#039;красный&#039;&lt;br /&gt;
GROUP BY SPJ.nomer_detali;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер детали | Количество поставок с ней&lt;br /&gt;
 --------------+---------------------------&lt;br /&gt;
  P15          |                         3&lt;br /&gt;
  P22          |                         1&lt;br /&gt;
  P24          |                         1&lt;br /&gt;
 (3 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 27 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать наименования городов и среднее состояние поставщиков для каждого города, поставляющих детали с названием &#039;Гайка 01-01&#039; для изделия с названием &#039;Велосипед 03-04&#039; в количестве (в поставке) большим, чем минимальный объём поставки, выполненной поставщиком с номером &#039;S1&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:1st dufficulty.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;7px&amp;quot;&amp;gt;&#039;&#039;&#039;Сложнейший запрос экзамена!&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;5px&amp;quot;&amp;gt;&#039;&#039;&#039;Сохрани Джа, вытащить такое&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT S.gorod AS &amp;quot;Город&amp;quot;, AVG(S.sostoyanie) AS &amp;quot;Среднее состояние&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                    JOIN spasoi_ekz.j J&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
WHERE P.nazvanie = LOWER(&#039;Гайка 01-01&#039;)&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Велосипед 03-04&#039;)&lt;br /&gt;
  AND kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT MIN(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj&lt;br /&gt;
                     WHERE nomer_postavshika = &#039;S1&#039;&lt;br /&gt;
                    )&lt;br /&gt;
GROUP BY S.gorod;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
    Город   |   Среднее состояние&lt;br /&gt;
 -----------+-----------------------&lt;br /&gt;
  Мытищи    |    35000.500000000000&lt;br /&gt;
  Йокогама  |  1500000.000000000000&lt;br /&gt;
  Манчестер | 2571.0000000000000000&lt;br /&gt;
 (3 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 28 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия изделий, куда входит хотя бы одна красная деталь весом больше 10 граммов, поставляемая только поставщиком с номером &#039;S1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT J.nazvanie&lt;br /&gt;
FROM spasoi_ekz.j J JOIN spasoi_ekz.spj SPJ1&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ1.nomer_izdelia&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ1.nomer_detali&lt;br /&gt;
WHERE P.ves &amp;gt; 10&lt;br /&gt;
 AND P.cvet = &#039;красный&#039;&lt;br /&gt;
 AND NOT EXISTS (&lt;br /&gt;
                 SELECT SPJ2.nomer_postavshika&lt;br /&gt;
                 FROM spasoi_ekz.spj SPJ2         &lt;br /&gt;
                 WHERE SPJ2.nomer_detali = P.nomer_detali&lt;br /&gt;
	 	   AND SPJ2.nomer_postavshika != &#039;S1&#039;&lt;br /&gt;
                );                     &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     nazvanie&lt;br /&gt;
 -----------------&lt;br /&gt;
  кружевное бельё&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 29 ===&lt;br /&gt;
Написать запрос SELECT: выдать названия деталей, которые входят только и только в состав изделия с названием &#039;Штуцер 01-03&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie&lt;br /&gt;
FROM spasoi_ekz.p P, spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE P.nomer_detali = SPJ.nomer_detali &lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT SPJ.nomer_izdelia&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                            ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
                  WHERE (&lt;br /&gt;
                         J.nazvanie != LOWER(&#039;Штуцер 01-03&#039;)&lt;br /&gt;
                         AND&lt;br /&gt;
                         SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                        )&lt;br /&gt;
                     OR (&lt;br /&gt;
                         J.nazvanie = LOWER(&#039;Штуцер 01-03&#039;)&lt;br /&gt;
                         AND&lt;br /&gt;
                         SPJ.nomer_detali != P.nomer_detali&lt;br /&gt;
                        )&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
      nazvanie&lt;br /&gt;
 ------------------&lt;br /&gt;
  штуцерная деталь&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 30 ===&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют, по крайней мере, все те детали, которые поставляет поставщик с номером &#039;S2&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT imya&lt;br /&gt;
FROM spasoi_ekz.s S&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT nomer_detali&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJY&lt;br /&gt;
                  WHERE nomer_postavshika = &#039;S2&#039;&lt;br /&gt;
                    AND NOT EXISTS (&lt;br /&gt;
                                    SELECT *&lt;br /&gt;
                                    FROM spasoi_ekz.spj&lt;br /&gt;
                                    WHERE nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                                      AND nomer_detali = SPJY.nomer_detali&lt;br /&gt;
                                   )&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  imya&lt;br /&gt;
 ------------&lt;br /&gt;
  Оша&lt;br /&gt;
  Бран Старк&lt;br /&gt;
 (2 rows)&lt;br /&gt;
[[Категория:Структурное проектирование АСОИ (10 семестр)]]&lt;/div&gt;</summary>
		<author><name>81.9.52.28</name></author>
	</entry>
	<entry>
		<id>https://iu5bmstu.ru/index.php?title=SQL-%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D1%8B_%D0%BA_%D1%8D%D0%BA%D0%B7%D0%B0%D0%BC%D0%B5%D0%BD%D1%83_%D0%BF%D0%BE_%D0%A1%D0%9F%D0%90%D0%A1%D0%9E%D0%98_(10_%D1%81%D0%B5%D0%BC%D0%B5%D1%81%D1%82%D1%80)&amp;diff=3862</id>
		<title>SQL-запросы к экзамену по СПАСОИ (10 семестр)</title>
		<link rel="alternate" type="text/html" href="https://iu5bmstu.ru/index.php?title=SQL-%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D1%8B_%D0%BA_%D1%8D%D0%BA%D0%B7%D0%B0%D0%BC%D0%B5%D0%BD%D1%83_%D0%BF%D0%BE_%D0%A1%D0%9F%D0%90%D0%A1%D0%9E%D0%98_(10_%D1%81%D0%B5%D0%BC%D0%B5%D1%81%D1%82%D1%80)&amp;diff=3862"/>
		<updated>2013-06-16T09:51:26Z</updated>

		<summary type="html">&lt;p&gt;81.9.52.28: /* Билет 19 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right; clear:both; margin-right:1.0em;&amp;quot;&amp;gt;__TOC__&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Билет экзамена по [[:Категория:Структурное проектирование АСОИ (10 семестр) | СПАСОИ]] состоит из двух частей:&lt;br /&gt;
# теория;&lt;br /&gt;
# SQL-запрос.&lt;br /&gt;
&lt;br /&gt;
На этой странице собраны все сформированные запросы по билетам.&lt;br /&gt;
&lt;br /&gt;
Странно, что ни в одном билете нет запроса с сортировкой результатов. Возможно, они буду в дополнительных заданиях.&lt;br /&gt;
&lt;br /&gt;
== Схема БД ==&lt;br /&gt;
&lt;br /&gt;
Схема БД используется всё [[СПАСОИ_(10)_-_Лекция_№8_-_SQL#Некоторые возможности языка SQL | та же]], что была в прошлом семестре и на лекциях.&lt;br /&gt;
&lt;br /&gt;
Для написания запросов и проверки их выполнения создана БД в СУБД [http://www.postgresql.org/ PostgreSQL].&lt;br /&gt;
&lt;br /&gt;
Скрипт создания можно загрузить [http://yadi.sk/d/ArwqOGAy5pPfi отсюда].&lt;br /&gt;
&lt;br /&gt;
=== Таблицы БД ===&lt;br /&gt;
&lt;br /&gt;
==== Поставщики ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.s;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika |       imya       | sostoyanie |   gorod&lt;br /&gt;
 -------------------+------------------+------------+------------&lt;br /&gt;
  S5                | Мелисандра       |      65000 | Мадрид&lt;br /&gt;
  S2                | Бран Старк       |      60000 | Мурманск&lt;br /&gt;
  S1                | Якен Хгар        |    1500000 | Йокогама&lt;br /&gt;
  S7                | Сирио Форель     |    1500000 | Йокогама&lt;br /&gt;
  S4                | Джейме Ланнистер |     750000 | Лондон&lt;br /&gt;
  S3                | Серсея Ланнистер |    1200000 | Лондон&lt;br /&gt;
  S8                | Тирион Ланнистер |       2571 | Манчестер&lt;br /&gt;
  S9                | Иванов           |      35000 | Мытищи&lt;br /&gt;
  S10               | Русе Болтон      |      44444 | Баренцбург&lt;br /&gt;
  S11               | Петров Иван      |      35000 | Мытищи&lt;br /&gt;
  S14               | Рендилл Тарли    |    1111111 | Прага&lt;br /&gt;
  S13               | Сэмвелл Тарли    |     999999 | Прага&lt;br /&gt;
  S6                | Оша              |            | Москва&lt;br /&gt;
  S16               | Ходор            |            | Москва&lt;br /&gt;
  S15               | Мелисса Флорент  |     888888 | Стокгольм&lt;br /&gt;
  S12               | Петров Пётр      |      35001 | Мытищи&lt;br /&gt;
  S17               | Томми Версетти   |  123456789 | Майами&lt;br /&gt;
  S18               | Безликий         |          1 | Йокогама&lt;br /&gt;
 (18 rows)&lt;br /&gt;
&lt;br /&gt;
==== Детали ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.p;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_detali |       nazvanie       |     cvet      | ves  |      gorod&lt;br /&gt;
 --------------+----------------------+---------------+------+-----------------&lt;br /&gt;
  P9           | подставка            | синий         |  400 | Нижний Новгород&lt;br /&gt;
  P10          | стойка               | синий         | 2000 | Нижний Новгород&lt;br /&gt;
  P11          | абажур               | синий         |  400 | Нижний Новгород&lt;br /&gt;
  P1           | гайка                | чёрный        |   20 | Лондон&lt;br /&gt;
  P3           | ось                  | белый         | 5000 | Эдинбург&lt;br /&gt;
  P4           | зубчатое колесо      | чёрный        |   50 | Эдинбург&lt;br /&gt;
  P6           | транзистор           | коричневый    |    2 | Токио&lt;br /&gt;
  P7           | печатная плата       | зелёный       |  200 | Токио&lt;br /&gt;
  P8           | диод                 | коричневый    |    1 | Токио&lt;br /&gt;
  P12          | универсальная деталь | универсальный |    1 | Париж&lt;br /&gt;
  P13          | уникальная деталь    | уникальный    |    1 | Бостон&lt;br /&gt;
  P14          | болт                 | серый         |   20 | Ижевск&lt;br /&gt;
  P15          | рама                 | красный       | 3000 | Манчестер&lt;br /&gt;
  P16          | колесо               | белый         | 1500 | Манчестер&lt;br /&gt;
  P5           | втулка               | серый         |  350 | Манчестер&lt;br /&gt;
  P17          | бумага               | белый         |    1 | Астрахань&lt;br /&gt;
  P18          | плитка               | белый         |  300 | Флоренция&lt;br /&gt;
  P19          | орнамент             | серый         |  800 | Флоренция&lt;br /&gt;
  P20          | уголок               | серый         |  100 | Флоренция&lt;br /&gt;
  P21          | гайка 01-01          | серебристый   |   20 | Клин&lt;br /&gt;
  P22          | усиленная рама       | красный       | 3200 | Череповец&lt;br /&gt;
  P23          | винт                 | розовый       |    5 | Ижевск&lt;br /&gt;
  P24          | труселя              | красный       |   20 | Челябинск&lt;br /&gt;
  P25          | штуцерная деталь     | коричневый    |  450 | Череповец&lt;br /&gt;
  P2           | шуруп                | чёрный        |    5 | Лондон&lt;br /&gt;
  P26          | лезвие               | бесцветный    |  120 | Йокогама&lt;br /&gt;
 (26 rows)&lt;br /&gt;
&lt;br /&gt;
==== Изделия ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.j;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_izdelia |       nazvanie        |      gorod&lt;br /&gt;
 ---------------+-----------------------+-----------------&lt;br /&gt;
  J1            | автомобиль            | Магнитогорск&lt;br /&gt;
  J2            | процессор             | Зеленоград&lt;br /&gt;
  J3            | торшер                | Нижний Новгород&lt;br /&gt;
  J4            | универсальное изделие | Париж&lt;br /&gt;
  J5            | уникальное изделие    | Бостон&lt;br /&gt;
  J6            | велосипед 01/23       | Манчестер&lt;br /&gt;
  J7            | изделие из болтов     | Челябинск&lt;br /&gt;
  J8            | шкаф                  | Ярославль&lt;br /&gt;
  J9            | рама 02-01            | Череповец&lt;br /&gt;
  J10           | книга                 | Астрахань&lt;br /&gt;
  J11           | панно 01-03           | Флоренция&lt;br /&gt;
  J12           | велосипед 03-04       | Клин&lt;br /&gt;
  J13           | рама 02-03            | Череповец&lt;br /&gt;
  J14           | штуцер 01-02          | Череповец&lt;br /&gt;
  J15           | велосипед 01-04       | Клин&lt;br /&gt;
  J16           | кружевное бельё       | Челябинск&lt;br /&gt;
  J17           | штуцер 01-03          | Череповец&lt;br /&gt;
  J18           | кинжал                | Йокогама&lt;br /&gt;
 (18 rows)&lt;br /&gt;
&lt;br /&gt;
==== Сборки ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.spj;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika | nomer_detali | nomer_izdelia | kolichestvo&lt;br /&gt;
 -------------------+--------------+---------------+-------------&lt;br /&gt;
  S1                | P6           | J2            |          20&lt;br /&gt;
  S1                | P7           | J2            |           5&lt;br /&gt;
  S2                | P1           | J1            |           4&lt;br /&gt;
  S6                | P4           | J1            |           2&lt;br /&gt;
  S6                | P5           | J1            |           6&lt;br /&gt;
  S3                | P9           | J3            |           1&lt;br /&gt;
  S4                | P10          | J3            |           1&lt;br /&gt;
  S5                | P11          | J3            |           1&lt;br /&gt;
  S2                | P4           | J1            |           8&lt;br /&gt;
  S6                | P3           | J1            |          50&lt;br /&gt;
  S7                | P8           | J2            |          25&lt;br /&gt;
  S1                | P12          | J4            |           1&lt;br /&gt;
  S2                | P12          | J4            |           1&lt;br /&gt;
  S3                | P12          | J4            |           1&lt;br /&gt;
  S4                | P12          | J4            |           1&lt;br /&gt;
  S5                | P12          | J4            |           1&lt;br /&gt;
  S7                | P12          | J4            |           1&lt;br /&gt;
  S7                | P2           | J1            |           1&lt;br /&gt;
  S6                | P2           | J1            |           9&lt;br /&gt;
  S6                | P12          | J4            |           7&lt;br /&gt;
  S1                | P13          | J5            |          14&lt;br /&gt;
  S6                | P14          | J1            |        9000&lt;br /&gt;
  S2                | P14          | J1            |           3&lt;br /&gt;
  S6                | P1           | J1            |          12&lt;br /&gt;
  S8                | P15          | J6            |           1&lt;br /&gt;
  S8                | P16          | J6            |           2&lt;br /&gt;
  S3                | P5           | J6            |          10&lt;br /&gt;
  S10               | P2           | J8            |           4&lt;br /&gt;
  S8                | P1           | J7            |          16&lt;br /&gt;
  S9                | P14          | J7            |           3&lt;br /&gt;
  S11               | P10          | J3            |           2&lt;br /&gt;
  S12               | P15          | J1            |           3&lt;br /&gt;
  S11               | P11          | J3            |           4&lt;br /&gt;
  S10               | P14          | J9            |           5&lt;br /&gt;
  S13               | P17          | J10           |        1001&lt;br /&gt;
  S14               | P17          | J10           |        1111&lt;br /&gt;
  S15               | P17          | J10           |        1010&lt;br /&gt;
  S5                | P18          | J11           |           9&lt;br /&gt;
  S5                | P19          | J11           |           1&lt;br /&gt;
  S5                | P20          | J11           |           4&lt;br /&gt;
  S9                | P14          | J8            |          25&lt;br /&gt;
  S12               | P21          | J12           |          15&lt;br /&gt;
  S11               | P22          | J13           |           9&lt;br /&gt;
  S11               | P1           | J14           |          26&lt;br /&gt;
  S12               | P1           | J14           |          13&lt;br /&gt;
  S12               | P2           | J14           |          54&lt;br /&gt;
  S12               | P23          | J4            |         101&lt;br /&gt;
  S12               | P16          | J15           |          40&lt;br /&gt;
  S7                | P21          | J12           |           3&lt;br /&gt;
  S8                | P21          | J12           |           4&lt;br /&gt;
  S9                | P21          | J12           |           5&lt;br /&gt;
  S1                | P24          | J16           |           1&lt;br /&gt;
  S1                | P15          | J6            |           3&lt;br /&gt;
  S4                | P25          | J17           |           1&lt;br /&gt;
  S17               | P16          | J1            |           4&lt;br /&gt;
  S18               | P26          | J18           |           1&lt;br /&gt;
 (56 rows)&lt;br /&gt;
&lt;br /&gt;
== Готовые запросы ==&lt;br /&gt;
&lt;br /&gt;
Если видите, что тот или иной запрос можно составить короче и рациональней - смело вносите правку.&lt;br /&gt;
&lt;br /&gt;
В трёх билетах в задании на запрос встречается формулировка &amp;quot;&#039;&#039;только и только&#039;&#039;&amp;quot;. Как оказалось, это означает следующее: если холодильники поставляет &#039;&#039;только и только&#039;&#039; Уася, то:&lt;br /&gt;
# кроме Уаси никто не поставляет холодильники;&lt;br /&gt;
# Уася не поставляет ничего, кроме холодильников.&lt;br /&gt;
&lt;br /&gt;
Существующие запросы, естественно, оказались неправильными и их пришлось переписать. &amp;lt;s&amp;gt;Великий и могучий русский языка, ну что за экономия на бумаге.&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Билет 1 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера поставщиков, которые поставляют, по крайней мере, все те детали, которые поставляет поставщик с номером &#039;S2&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nomer_postavshika&lt;br /&gt;
FROM spasoi_ekz.spj SPJX&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT nomer_detali&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJY&lt;br /&gt;
                  WHERE nomer_postavshika = &#039;S2&#039;&lt;br /&gt;
                    AND NOT EXISTS (&lt;br /&gt;
                                    SELECT *&lt;br /&gt;
                                    FROM spasoi_ekz.spj&lt;br /&gt;
                                    WHERE nomer_postavshika = SPJX.nomer_postavshika&lt;br /&gt;
                                      AND nomer_detali = SPJY.nomer_detali&lt;br /&gt;
                                   )&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika&lt;br /&gt;
 -------------------&lt;br /&gt;
  S6&lt;br /&gt;
  S2&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 2 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера деталей и общее их количество для всех номеров деталей, поставляемых более чем одним поставщиком.&lt;br /&gt;
&lt;br /&gt;
Текст запроса, каким его дал Григорьев на лекции, впоследствии исправив его:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali AS &amp;quot;Номер детали&amp;quot;,&lt;br /&gt;
       SUM(kolichestvo) AS &amp;quot;Сколько штук поставляется&amp;quot;,&lt;br /&gt;
       COUNT(DISTINCT nomer_postavshika) AS &amp;quot;Сколько у неё поставщиков&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_postavshika) &amp;gt; 1;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali AS &amp;quot;Номер детали&amp;quot;,&lt;br /&gt;
       kol AS &amp;quot;Сколько штук поставляется&amp;quot;&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT nomer_detali,&lt;br /&gt;
             SUM(kolichestvo) AS kol,&lt;br /&gt;
             COUNT(DISTINCT nomer_postavshika)&lt;br /&gt;
      FROM spasoi_ekz.spj&lt;br /&gt;
      GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_postavshika) &amp;gt; 1&lt;br /&gt;
     ) A;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер детали | Сколько штук поставляется | Сколько у неё поставщиков&lt;br /&gt;
 --------------+---------------------------+---------------------------&lt;br /&gt;
  P1           |                        71 |                         5&lt;br /&gt;
  P10          |                         3 |                         2&lt;br /&gt;
  P11          |                         5 |                         2&lt;br /&gt;
  P12          |                        13 |                         7&lt;br /&gt;
  P14          |                      9036 |                         4&lt;br /&gt;
  P15          |                         7 |                         3&lt;br /&gt;
  P16          |                        46 |                         3&lt;br /&gt;
  P17          |                      3122 |                         3&lt;br /&gt;
  P2           |                        68 |                         4&lt;br /&gt;
  P21          |                        27 |                         4&lt;br /&gt;
  P4           |                        10 |                         2&lt;br /&gt;
  P5           |                        16 |                         2&lt;br /&gt;
 (12 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 3 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера поставщиков, поставляющих детали с номером &#039;P1&#039; для какого-либо изделия в количестве (в поставке) большим, чем средний объём поставок деталей с номером &#039;P2&#039; для этого изделия.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT X.nomer_postavshika &lt;br /&gt;
FROM spasoi_ekz.spj X&lt;br /&gt;
WHERE X.nomer_detali = &#039;P1&#039;&lt;br /&gt;
  AND X.kolichestvo &amp;gt; (&lt;br /&gt;
                       SELECT AVG(kolichestvo)&lt;br /&gt;
                       FROM spasoi_ekz.spj&lt;br /&gt;
                       WHERE nomer_izdelia = X.nomer_izdelia&lt;br /&gt;
                         AND nomer_detali = &#039;P2&#039;&lt;br /&gt;
                      );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но длиннее и нерациональней&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nomer_postavshika&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT *&lt;br /&gt;
      FROM spasoi_ekz.spj&lt;br /&gt;
      WHERE nomer_izdelia IN(&lt;br /&gt;
                             SELECT nomer_izdelia&lt;br /&gt;
                             FROM spasoi_ekz.spj&lt;br /&gt;
                             WHERE nomer_detali = &#039;P1&#039;&lt;br /&gt;
                            )&lt;br /&gt;
        AND nomer_izdelia IN(&lt;br /&gt;
	                     SELECT nomer_izdelia&lt;br /&gt;
	                     FROM spasoi_ekz.spj&lt;br /&gt;
	                     WHERE nomer_detali = &#039;P2&#039;&lt;br /&gt;
	                    )&lt;br /&gt;
     ) A&lt;br /&gt;
WHERE nomer_detali = &#039;P1&#039; AND kolichestvo &amp;gt;&lt;br /&gt;
(&lt;br /&gt;
 SELECT AVG(kolichestvo)&lt;br /&gt;
 FROM (&lt;br /&gt;
       SELECT *&lt;br /&gt;
       FROM spasoi_ekz.spj&lt;br /&gt;
       WHERE nomer_izdelia IN(&lt;br /&gt;
                              SELECT nomer_izdelia&lt;br /&gt;
                              FROM spasoi_ekz.spj&lt;br /&gt;
                              WHERE nomer_detali = &#039;P1&#039;&lt;br /&gt;
                             )&lt;br /&gt;
         AND nomer_izdelia IN(&lt;br /&gt;
                              SELECT nomer_izdelia&lt;br /&gt;
                              FROM spasoi_ekz.spj&lt;br /&gt;
                              WHERE nomer_detali = &#039;P2&#039;&lt;br /&gt;
                             )&lt;br /&gt;
      ) B&lt;br /&gt;
 WHERE nomer_detali = &#039;P2&#039;&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika&lt;br /&gt;
 -------------------&lt;br /&gt;
  S6&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 4 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера изделий, для которых детали поставляет только поставщик с номером ‘S1’.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_izdelia&lt;br /&gt;
FROM spasoi_ekz.spj X&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT *&lt;br /&gt;
                  FROM spasoi_ekz.spj&lt;br /&gt;
                  WHERE nomer_postavshika != &#039;S1&#039;&lt;br /&gt;
                    AND X.nomer_izdelia = nomer_izdelia&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но без EXISTS&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nomer_izdelia&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
WHERE nomer_izdelia IN(&lt;br /&gt;
                       SELECT nomer_izdelia&lt;br /&gt;
                       FROM spasoi_ekz.spj&lt;br /&gt;
                       WHERE nomer_postavshika = &#039;S1&#039;&lt;br /&gt;
                      )&lt;br /&gt;
  AND nomer_izdelia NOT IN(&lt;br /&gt;
                           SELECT nomer_izdelia&lt;br /&gt;
                           FROM spasoi_ekz.spj&lt;br /&gt;
                           WHERE nomer_postavshika != &#039;S1&#039;&lt;br /&gt;
                          );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_izdelia&lt;br /&gt;
 ---------------&lt;br /&gt;
  J5&lt;br /&gt;
  J16&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 5 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих детали с названием &amp;quot;Болт&amp;quot; в количестве (в поставке) большим, чем средний объём всех поставок деталей с номером &#039;P1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                           ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                        JOIN spasoi_ekz.p P&lt;br /&gt;
                           ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                              AND nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
WHERE kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT AVG(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj&lt;br /&gt;
                     WHERE SPJ.nomer_detali = &#039;P1&#039;&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но без JOIN&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s&lt;br /&gt;
WHERE nomer_postavshika IN (&lt;br /&gt;
                            SELECT nomer_postavshika&lt;br /&gt;
                            FROM spasoi_ekz.spj&lt;br /&gt;
                            WHERE nomer_detali = (&lt;br /&gt;
                                                  SELECT nomer_detali&lt;br /&gt;
                                                  FROM spasoi_ekz.p&lt;br /&gt;
                                                  WHERE LOWER(nazvanie) = LOWER(&#039;Болт&#039;)&lt;br /&gt;
                                                 )&lt;br /&gt;
                              AND kolichestvo &amp;gt; (&lt;br /&gt;
                                                 SELECT AVG(kolichestvo)&lt;br /&gt;
                                                 FROM spasoi_ekz.spj&lt;br /&gt;
                                                 WHERE nomer_detali = &#039;P1&#039;&lt;br /&gt;
                                                )&lt;br /&gt;
                           );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  imya&lt;br /&gt;
 ------&lt;br /&gt;
  Оша&lt;br /&gt;
  Иванов&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 6 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия деталей, поставляемых поставщиком, проживающим в том же городе, где изготавливаются эти детали, для изделия с названием ‘Велосипед 01/23’.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT P.nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                        JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                        JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
WHERE S.gorod = P.gorod&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Велосипед 01/23&#039;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос без JOIN&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nazvanie&lt;br /&gt;
FROM spasoi_ekz.S S, spasoi_ekz.p P, spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE S.gorod = P.gorod&lt;br /&gt;
  AND P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
  AND S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
  AND nomer_izdelia = (&lt;br /&gt;
                       SELECT nomer_izdelia&lt;br /&gt;
                       FROM spasoi_ekz.j&lt;br /&gt;
                       WHERE nazvanie = LOWER(&#039;Велосипед 01/23&#039;)&lt;br /&gt;
                      );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nazvanie&lt;br /&gt;
 ----------&lt;br /&gt;
  рама&lt;br /&gt;
  колесо&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 7 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия изделий, куда входят детали с названием &#039;Болт&#039;, поставляемых поставщиками с именем &#039;Иванов&#039;, в количестве (в поставке) большим, чем средний объём поставок для этого изделия.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT J.nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                        JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                        JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
WHERE imya LIKE &#039;%Иванов%&#039;&lt;br /&gt;
  AND P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
  AND kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT AVG(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj X&lt;br /&gt;
                     WHERE SPJ.nomer_izdelia = X.nomer_izdelia&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё один вариант запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie&lt;br /&gt;
FROM spasoi_ekz.j&lt;br /&gt;
WHERE nomer_izdelia IN (&lt;br /&gt;
                        SELECT nomer_izdelia&lt;br /&gt;
                        FROM (spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                                                   ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                                                      AND imya LIKE &#039;%Иванов%&#039;&lt;br /&gt;
                                                 JOIN spasoi_ekz.p P&lt;br /&gt;
                                                   ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                                      AND nazvanie = LOWER(&#039;Болт&#039;)) A&lt;br /&gt;
                        WHERE kolichestvo &amp;gt; (&lt;br /&gt;
                                             SELECT AVG(kolichestvo)&lt;br /&gt;
                                             FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                                                       ON SPJ.nomer_izdelia = A.nomer_izdelia&lt;br /&gt;
                                            )&lt;br /&gt;
                       );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;И ещё вариант этого же запроса, но длиннее и нерациональней&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT J.nazvanie, kolichestvo&lt;br /&gt;
      FROM spasoi_ekz.s S, spasoi_ekz.p P, spasoi_ekz.j J, spasoi_ekz.spj SPJ&lt;br /&gt;
      WHERE J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
        AND P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
        AND P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
        AND S.imya LIKE &#039;%Иванов%&#039;&lt;br /&gt;
        AND S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
     ) A&lt;br /&gt;
WHERE kolichestvo &amp;gt;&lt;br /&gt;
(&lt;br /&gt;
 SELECT AVG(kolichestvo)&lt;br /&gt;
 FROM spasoi_ekz.spj&lt;br /&gt;
 WHERE nomer_izdelia IN(&lt;br /&gt;
                        SELECT J.nomer_izdelia&lt;br /&gt;
                        FROM spasoi_ekz.s S, spasoi_ekz.p P, spasoi_ekz.j J, spasoi_ekz.spj SPJ&lt;br /&gt;
                        WHERE J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
                          AND P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                          AND P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
                          AND S.imya LIKE &#039;%Иванов%&#039;&lt;br /&gt;
                          AND S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
                       )&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
      nazvanie&lt;br /&gt;
 -------------------&lt;br /&gt;
  шкаф&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 8 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера изделий и общее количество деталей для них, поставляемых поставщиками с именем &#039;Петров&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_izdelia AS &amp;quot;Номер изделия&amp;quot;, SUM(kolichestvo) AS &amp;quot;Количество деталей&amp;quot; &lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                             -- так как &amp;quot;поставщикАМИ&amp;quot; и возможны&lt;br /&gt;
                             -- Иван Петров и Петров Иван, то LIKE %Петров%&lt;br /&gt;
                             AND imya LIKE &#039;%Петров%&#039;&lt;br /&gt;
GROUP BY nomer_izdelia;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер изделия | Количество деталей&lt;br /&gt;
 ---------------+--------------------&lt;br /&gt;
  J4            |                101&lt;br /&gt;
  J3            |                  6&lt;br /&gt;
  J13           |                  9&lt;br /&gt;
  J15           |                 40&lt;br /&gt;
  J1            |                  3&lt;br /&gt;
  J12           |                 15&lt;br /&gt;
  J14           |                 93&lt;br /&gt;
 (7 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 9 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера деталей и общее их количество для всех номеров деталей, которые входят только в одно изделие.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali, SUM(kolichestvo)&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_izdelia) = 1;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali, kol FROM (&lt;br /&gt;
       SELECT nomer_detali, SUM(kolichestvo) AS kol, COUNT(DISTINCT nomer_izdelia) = 1&lt;br /&gt;
       FROM spasoi_ekz.spj&lt;br /&gt;
       GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_izdelia) = 1&lt;br /&gt;
    ) A;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_detali | sum&lt;br /&gt;
 --------------+------&lt;br /&gt;
  P10          |    3&lt;br /&gt;
  P11          |    5&lt;br /&gt;
  P12          |   13&lt;br /&gt;
  P13          |   14&lt;br /&gt;
  P17          | 3122&lt;br /&gt;
  P18          |    9&lt;br /&gt;
  P19          |    1&lt;br /&gt;
  P20          |    4&lt;br /&gt;
  P21          |   27&lt;br /&gt;
  P22          |    9&lt;br /&gt;
  P23          |  101&lt;br /&gt;
  P24          |    1&lt;br /&gt;
  P25          |    1&lt;br /&gt;
  P26          |    1&lt;br /&gt;
  P3           |   50&lt;br /&gt;
  P4           |   10&lt;br /&gt;
  P6           |   20&lt;br /&gt;
  P7           |    5&lt;br /&gt;
  P8           |   25&lt;br /&gt;
  P9           |    1&lt;br /&gt;
 (20 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 10 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих детали с названием &#039;Болт&#039; для изделия с названием &#039;Рама 02-01&#039; в количестве (в поставке) большим, чем минимальное значение поставки детали с номером &#039;P1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
			   ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
			      AND J.nazvanie = LOWER(&#039;Рама 02-01&#039;)&lt;br /&gt;
			 JOIN spasoi_ekz.p P&lt;br /&gt;
			   ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
			      AND P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
			 JOIN spasoi_ekz.s S&lt;br /&gt;
			   ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE kolichestvo &amp;gt; (&lt;br /&gt;
		     SELECT MIN(kolichestvo)&lt;br /&gt;
		     FROM spasoi_ekz.spj &lt;br /&gt;
		     WHERE nomer_detali = &#039;P1&#039;&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Русе Болтон&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 11 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия городов и суммарное состояние проживающих в каждом городе поставщиков, у которых минимальный объём поставки деталей больше 1000.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT gorod, SUM(sostoyanie)&lt;br /&gt;
FROM spasoi_ekz.s S&lt;br /&gt;
WHERE (	&lt;br /&gt;
       SELECT MIN(kolichestvo)	&lt;br /&gt;
       FROM spasoi_ekz.spj X	&lt;br /&gt;
       WHERE X.nomer_postavshika = S.nomer_postavshika		&lt;br /&gt;
      ) &amp;gt; 1000&lt;br /&gt;
GROUP BY gorod;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Вариант подлиннее для тех, кто не ищет лёгких путей&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT gorod, SUM(sostoyanie)&lt;br /&gt;
FROM spasoi_ekz.s&lt;br /&gt;
WHERE nomer_postavshika IN (&lt;br /&gt;
                            SELECT nomer_postavshika&lt;br /&gt;
                            FROM spasoi_ekz.spj&lt;br /&gt;
                            GROUP BY nomer_postavshika HAVING MIN(kolichestvo) &amp;gt; 1000&lt;br /&gt;
                           )&lt;br /&gt;
GROUP BY gorod;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;!-- а этот запрос выполняет не совсем то и не правильно&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT gorod, sost&lt;br /&gt;
FROM (&lt;br /&gt;
SELECT gorod, SUM(sostoyanie) AS sost, SUM(SPJ.kolichestvo)&lt;br /&gt;
FROM spasoi_ekz.spj, spasoi_ekz.s&lt;br /&gt;
WHERE S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
GROUP BY S.gorod HAVING SUM(SPJ.kolichestvo) &amp;gt; 1000&lt;br /&gt;
) A;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; --&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
    gorod   |   sum&lt;br /&gt;
 -----------+---------&lt;br /&gt;
  Прага     | 2111110&lt;br /&gt;
  Стокгольм |  888888&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 12 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера деталей, поставляемых для какого-либо изделия поставщиком, проживающим в том же городе, где изготавливается это изделие.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali&lt;br /&gt;
FROM spasoi_ekz.spj SPJ, spasoi_ekz.s S, spasoi_ekz.j J&lt;br /&gt;
WHERE SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
  AND S.gorod = J.gorod&lt;br /&gt;
  AND J.nomer_izdelia = SPJ.nomer_izdelia;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_detali&lt;br /&gt;
 --------------&lt;br /&gt;
  P15&lt;br /&gt;
  P16&lt;br /&gt;
  P26&lt;br /&gt;
 (3 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 13 ===&lt;br /&gt;
&lt;br /&gt;
Написать &amp;lt;u&amp;gt;один&amp;lt;/u&amp;gt; запрос SELECT: выдать количества строк в таблице S (Поставщик) 1) с пустыми значениями и 2) непустыми значениями в столбце Состояние.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT COUNT(*) - COUNT(sostoyanie) AS &amp;quot;С пустым состоянием&amp;quot;, &lt;br /&gt;
       COUNT(sostoyanie) AS &amp;quot;С не пустым состоянием&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.s;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но длиннее и нерациональней&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SELECT COUNT(Snull.*) AS &amp;quot;С пустым состоянием&amp;quot;, COUNT(Snotnull.sostoyanie) AS &amp;quot;С не пустым состоянием&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.s Snull RIGHT OUTER JOIN spasoi_ekz.s Snotnull&lt;br /&gt;
                                      ON Snull.nomer_postavshika = Snotnull.nomer_postavshika&lt;br /&gt;
                                         AND Snull.sostoyanie IS NULL;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  С пустым состоянием | С не пустым состоянием&lt;br /&gt;
 ---------------------+-----------------------&lt;br /&gt;
                    2 |                    16&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 14 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют детали только и только для изделия с номером &#039;J1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj A JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON A.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE nomer_izdelia = &#039;J1&#039;&lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT nomer_postavshika&lt;br /&gt;
                  FROM spasoi_ekz.spj&lt;br /&gt;
                  WHERE nomer_izdelia != &#039;J1&#039;&lt;br /&gt;
                    AND nomer_postavshika = A.nomer_postavshika&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       imya&lt;br /&gt;
 ----------------&lt;br /&gt;
  Томми Версетти&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 15 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать наименования изделий, для которых детали поставляют только те поставщики, у которых состояние больше 1000000 у.е.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT j.nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
		  SELECT *&lt;br /&gt;
		  FROM spasoi_ekz.spj X JOIN spasoi_ekz.s S&lt;br /&gt;
		                          ON X.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
		  WHERE sostoyanie &amp;lt;= 1000000&lt;br /&gt;
		  AND X.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Вариант этого запроса без NOT EXISTS&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                        JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
WHERE sostoyanie &amp;gt; 1000000&lt;br /&gt;
  AND SPJ.nomer_izdelia NOT IN (&lt;br /&gt;
                                SELECT nomer_izdelia&lt;br /&gt;
                                FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                                                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                                WHERE sostoyanie &amp;lt; 1000000&lt;br /&gt;
                               );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       nazvanie&lt;br /&gt;
 --------------------&lt;br /&gt;
  кружевное бельё&lt;br /&gt;
  уникальное изделие&lt;br /&gt;
  процессор&lt;br /&gt;
 (3 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 16 ===&lt;br /&gt;
Написать запрос SELECT: выдать цвета и для каждого цвета общее количество деталей, входящих в изделие с названием &#039;Панно 01-03&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT cvet AS &amp;quot;Цвет&amp;quot;, SUM(kolichestvo) AS &amp;quot;Деталей&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
			     AND J.nazvanie = LOWER(&#039;Панно 01-03&#039;)&lt;br /&gt;
			JOIN spasoi_ekz.P P&lt;br /&gt;
			  ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
GROUP BY cvet;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Цвет  | Деталей&lt;br /&gt;
 -------+---------&lt;br /&gt;
  белый |       9&lt;br /&gt;
  серый |       5&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 17 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера поставщиков и количество сделанных ими поставок при условии, что среднее число деталей во всех этих поставках больше 1000.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_postavshika AS &amp;quot;Номер поставщика&amp;quot;, COUNT(*) AS &amp;quot;Количество поставок&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
WHERE nomer_postavshika IN (&lt;br /&gt;
                            SELECT nomer_postavshika&lt;br /&gt;
                            FROM spasoi_ekz.spj&lt;br /&gt;
                            GROUP BY nomer_postavshika HAVING AVG(kolichestvo) &amp;gt; 1000&lt;br /&gt;
                           )&lt;br /&gt;
GROUP BY nomer_postavshika;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_postavshika AS &amp;quot;Номер поставщика&amp;quot;, COUNT(*) AS &amp;quot;Количество поставок&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
WHERE (&lt;br /&gt;
       SELECT AVG(kolichestvo)&lt;br /&gt;
       FROM spasoi_ekz.spj X&lt;br /&gt;
       WHERE X.nomer_postavshika = spj.nomer_postavshika&lt;br /&gt;
       ) &amp;gt; 1000&lt;br /&gt;
GROUP BY nomer_postavshika;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;И ещё вариант запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nom AS &amp;quot;Номер поставщика&amp;quot;, cnt AS &amp;quot;Количество поставок&amp;quot;&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT S.nomer_postavshika AS nom,&lt;br /&gt;
             COUNT(SPJ.nomer_postavshika) AS cnt,&lt;br /&gt;
             AVG(SPJ.kolichestvo) AS kol&lt;br /&gt;
      FROM spasoi_ekz.s S, spasoi_ekz.spj SPJ&lt;br /&gt;
      WHERE S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
      GROUP BY S.nomer_postavshika&lt;br /&gt;
     ) A&lt;br /&gt;
WHERE kol &amp;gt; 1000;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер поставщика | Количество поставок&lt;br /&gt;
 ------------------+---------------------&lt;br /&gt;
  S13              |                   1&lt;br /&gt;
  S6               |                   7&lt;br /&gt;
  S14              |                   1&lt;br /&gt;
  S15              |                   1&lt;br /&gt;
 (4 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 18 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, имеющих состояние больше 1000 и поставляющих деталь с названием &#039;Гайка 01-01&#039; для изделия с названием &#039;Велосипед 03-04&#039; в количестве (в поставке) большим, чем средний объём поставки, выполненной поставщиками с именем &#039;Иванов&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:2nd dufficulty.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;5px&amp;quot;&amp;gt;&#039;&#039;&#039;Второй по сложности запрос экзамена!&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;4px&amp;quot;&amp;gt;&#039;&#039;&#039;Вот уж не свезло, так не свезло&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                    JOIN spasoi_ekz.j J&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
WHERE sostoyanie &amp;gt; 1000&lt;br /&gt;
  AND P.nazvanie = LOWER(&#039;Гайка 01-01&#039;)&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Велосипед 03-04&#039;)&lt;br /&gt;
  AND kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT AVG(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                       ON SPJ.nomer_postavshika = S.nomer_postavshika &lt;br /&gt;
                     WHERE S.imya = &#039;Иванов&#039;&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Пётр&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 19 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия красных деталей, которые входят только в изделие с названием &#039;Рама 02-03&#039; в количестве, меньшем 10 единиц в поставке.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT X.nazvanie&lt;br /&gt;
FROM spasoi_ekz.p X JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_detali = X.nomer_detali&lt;br /&gt;
WHERE X.cvet = &#039;красный&#039;&lt;br /&gt;
  AND kolichestvo &amp;lt; 10&lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT *&lt;br /&gt;
                  FROM spasoi_ekz.j J JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                                        ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                  WHERE J.nazvanie != LOWER(&#039;Рама 02-03&#039;)&lt;br /&gt;
                    AND X.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант этого же запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT P.nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND cvet = &#039;красный&#039;&lt;br /&gt;
                        JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                              AND J.nazvanie = LOWER(&#039;Рама 02-03&#039;)&lt;br /&gt;
WHERE kolichestvo &amp;lt; 10&lt;br /&gt;
  AND SPJ.nomer_detali NOT IN (&lt;br /&gt;
                               SELECT nomer_detali&lt;br /&gt;
                               FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                                         ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                                                            AND J.nazvanie != LOWER(&#039;Рама 02-03&#039;)&lt;br /&gt;
                              );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     nazvanie&lt;br /&gt;
 ----------------&lt;br /&gt;
  усиленная рама&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 20 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих только белые детали.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT *&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                                            ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                  WHERE nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    AND P.cvet != &#039;белый&#039;&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё один вариант этого же запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND cvet = &#039;белый&#039;&lt;br /&gt;
                        JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE S.nomer_postavshika NOT IN (&lt;br /&gt;
                                  SELECT nomer_postavshika&lt;br /&gt;
                                  FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                                                            ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                                               AND cvet != &#039;белый&#039;&lt;br /&gt;
                                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;И ещё один вариант этого же запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s&lt;br /&gt;
WHERE nomer_postavshika NOT IN  (&lt;br /&gt;
                                 SELECT spj.nomer_postavshika&lt;br /&gt;
                                 FROM spasoi_ekz.spj SPJ, spasoi_ekz.p P&lt;br /&gt;
                                 WHERE SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                   AND p.cvet != &#039;белый&#039;&lt;br /&gt;
                                )&lt;br /&gt;
  AND nomer_postavshika  IN (&lt;br /&gt;
                             SELECT spj.nomer_postavshika&lt;br /&gt;
                             FROM spasoi_ekz.spj SPJ, spasoi_ekz.p P&lt;br /&gt;
                             WHERE SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                               AND p.cvet = &#039;белый&#039;&lt;br /&gt;
                            );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       imya&lt;br /&gt;
 -----------------&lt;br /&gt;
  Рендилл Тарли&lt;br /&gt;
  Сэмвелл Тарли&lt;br /&gt;
  Мелисса Флорент&lt;br /&gt;
  Томми Версетти&lt;br /&gt;
 (4 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 21 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия изделий, для которых детали поставляет только и только поставщик с номером &#039;S1&#039;.&lt;br /&gt;
&lt;br /&gt;
Чтобы продемонстрировать выполнение запроса наглядно, возьмём поставщика не &#039;S1&#039;, а &#039;S18&#039;, который был создан специально для этого запроса. Если оставить &#039;S1&#039;, то наглядности не получится, так как по нашей схеме БД этот поставщик не попадает под условие &amp;quot;&#039;&#039;только и только&#039;&#039;&amp;quot;, и запрос вернёт пустой результат.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie&lt;br /&gt;
FROM spasoi_ekz.j J, spasoi_ekz.SPJ SPJ&lt;br /&gt;
WHERE J.nomer_izdelia = SPJ.nomer_izdelia &lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT *&lt;br /&gt;
                  FROM spasoi_ekz.spj&lt;br /&gt;
                  WHERE nomer_postavshika != &#039;S18&#039; AND nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                 )&lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT *&lt;br /&gt;
                  FROM spasoi_ekz.spj&lt;br /&gt;
                  WHERE nomer_postavshika = &#039;S18&#039; AND nomer_izdelia != J.nomer_izdelia&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       nazvanie&lt;br /&gt;
 --------------------&lt;br /&gt;
  кинжал&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 22 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют только детали с номером &#039;P1&#039; для изделия с именем &#039;Штуцер 01-02&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj JOIN spasoi_ekz.j&lt;br /&gt;
                          ON spj.nomer_izdelia = j.nomer_izdelia&lt;br /&gt;
                             AND j.nazvanie = LOWER(&#039;штуцер 01-02&#039;)&lt;br /&gt;
                        JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON spj.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                                    SELECT *&lt;br /&gt;
                                    FROM spasoi_ekz.spj X &lt;br /&gt;
                                    JOIN spasoi_ekz.j ON X.nomer_izdelia = j.nomer_izdelia&lt;br /&gt;
                                    WHERE X.nomer_detali != &#039;P1&#039; &lt;br /&gt;
                                    AND j.nazvanie = LOWER(&#039;штуцер 01-02&#039;)&lt;br /&gt;
                                    AND S.nomer_postavshika = X.nomer_postavshika&lt;br /&gt;
                              );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- неверный запрос - номер изделия, а не название&lt;br /&gt;
SELECT imya FROM S X&lt;br /&gt;
JOIN SPJ Y ON X.nomer_postavshika=Y.nomer_postavshika&lt;br /&gt;
WHERE X.nomer_postavshika NOT IN (&lt;br /&gt;
                  SELECT DISTINCT nomer_postavshika FROM SPJ Z&lt;br /&gt;
                  WHERE Z.nomer_izdelia != &#039;Штуцер 01-02&#039;&lt;br /&gt;
                  AND Z.nomer_detali!=&#039;P1&#039;);--&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                             AND J.nazvanie = LOWER(&#039;штуцер 01-02&#039;)&lt;br /&gt;
                        JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND SPJ.nomer_detali = &#039;P1&#039;&lt;br /&gt;
                        JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE SPJ.nomer_postavshika NOT IN (&lt;br /&gt;
                                    SELECT nomer_postavshika&lt;br /&gt;
                                    FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                                              ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                                                                 AND J.nazvanie = LOWER(&#039;штуцер 01-02&#039;)&lt;br /&gt;
                                                            JOIN spasoi_ekz.p P&lt;br /&gt;
                                                              ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                                                 AND SPJ.nomer_detali != &#039;P1&#039;&lt;br /&gt;
                              );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Иван&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 23 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют деталь с названием &#039;Винт&#039; в количестве большим 100 единиц в одной поставке и имеют состояние больше среднего по их родному городу.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT S.imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
WHERE P.nazvanie = LOWER(&#039;Винт&#039;)&lt;br /&gt;
  AND SPJ.kolichestvo &amp;gt; 100&lt;br /&gt;
  AND S.sostoyanie &amp;gt; (&lt;br /&gt;
                      SELECT AVG(SS.sostoyanie)&lt;br /&gt;
                      FROM spasoi_ekz.s SS&lt;br /&gt;
                      WHERE SS.gorod = S.gorod&lt;br /&gt;
                     );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Пётр&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 24 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать наименования деталей и общее их количество для всех наименований деталей, изготавливаемых в одном городе.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- С этим запросом возникла неожиданная проблема - задание то ли неполное, то ли неправильное, потому что нельзя однозначно сказать, что по нему требуется сделать.&lt;br /&gt;
&lt;br /&gt;
Так что тут несколько вариантов запросов (кто как понял).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Первый вариант запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie, kol&lt;br /&gt;
FROM spasoi_ekz.p A, (&lt;br /&gt;
                      SELECT X.gorod, SUM(kolichestvo) as kol&lt;br /&gt;
                      FROM spasoi_ekz.p X, spasoi_ekz.spj Y&lt;br /&gt;
                      WHERE Y.nomer_detali = X.nomer_detali&lt;br /&gt;
                      GROUP BY X.gorod&lt;br /&gt;
                     ) B&lt;br /&gt;
WHERE A.gorod = B.gorod;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
        nazvanie       | kol&lt;br /&gt;
 ----------------------+------&lt;br /&gt;
  подставка            |    9&lt;br /&gt;
  стойка               |    9&lt;br /&gt;
  абажур               |    9&lt;br /&gt;
  гайка                |  139&lt;br /&gt;
  ось                  |   60&lt;br /&gt;
  зубчатое колесо      |   60&lt;br /&gt;
  транзистор           |   50&lt;br /&gt;
  печатная плата       |   50&lt;br /&gt;
  диод                 |   50&lt;br /&gt;
  универсальная деталь |   13&lt;br /&gt;
  уникальная деталь    |   14&lt;br /&gt;
  болт                 | 9137&lt;br /&gt;
  рама                 |   69&lt;br /&gt;
  колесо               |   69&lt;br /&gt;
  втулка               |   69&lt;br /&gt;
  бумага               | 3122&lt;br /&gt;
  плитка               |   14&lt;br /&gt;
  орнамент             |   14&lt;br /&gt;
  уголок               |   14&lt;br /&gt;
  гайка 01-01          |   27&lt;br /&gt;
  усиленная рама       |   10&lt;br /&gt;
  винт                 | 9137&lt;br /&gt;
  труселя              |    1&lt;br /&gt;
  штуцерная деталь     |   10&lt;br /&gt;
  шуруп                |  139&lt;br /&gt;
 (25 rows)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
и --&amp;gt;&lt;br /&gt;
В уточнение задания Григорьев сказал следующее: &amp;quot;&#039;&#039;Следует учесть, что в качестве наименования города может выступать переменная, в которую в некоторой программе должно быть занесено конкретное значение перед выполнением запроса&#039;&#039;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
То есть, вообще говоря, задание на запрос неполное, и его можно трактовать так: выдать наименования деталей и общее их количество для всех наименований деталей, изготавливаемых в городе &amp;lt;code&amp;gt;%НАЗВАНИЕГОРОДА%&amp;lt;/code&amp;gt;. Вот эта переменная задаётся где-то в программе, а в БД идёт запрос с уже подставленным конкретным названием. &lt;br /&gt;
&lt;br /&gt;
Этот вариант запроса составлен, например, для Лондона. &lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie, SUM(kolichestvo)&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
WHERE gorod = &#039;Лондон&#039;&lt;br /&gt;
GROUP BY nazvanie;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nazvanie | sum&lt;br /&gt;
 ----------+-----&lt;br /&gt;
  гайка    |  71&lt;br /&gt;
  шуруп    |  68&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 25 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих хотя бы одну белую деталь для изделия с названием &#039;Велосипед 01-04&#039; с объёмом поставки большим, чем средний объём поставки этого поставщика.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                    JOIN spasoi_ekz.j J&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
WHERE cvet = &#039;белый&#039;&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Велосипед 01-04&#039;)&lt;br /&gt;
  AND kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT AVG(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj SPJ&lt;br /&gt;
                     WHERE SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Пётр&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 26 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера красных деталей и количество поставок этих деталей.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT P.nomer_detali AS &amp;quot;Номер детали&amp;quot;, COUNT(kolichestvo) AS &amp;quot;Количество поставок с ней&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.p P, spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
  AND cvet = &#039;красный&#039;&lt;br /&gt;
GROUP BY P.nomer_detali;   &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос через JOIN&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT SPJ.nomer_detali AS &amp;quot;Номер детали&amp;quot;, COUNT(kolichestvo) AS &amp;quot;Количество поставок с ней&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND cvet = &#039;красный&#039;&lt;br /&gt;
GROUP BY SPJ.nomer_detali;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер детали | Количество поставок с ней&lt;br /&gt;
 --------------+---------------------------&lt;br /&gt;
  P15          |                         3&lt;br /&gt;
  P22          |                         1&lt;br /&gt;
  P24          |                         1&lt;br /&gt;
 (3 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 27 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать наименования городов и среднее состояние поставщиков для каждого города, поставляющих детали с названием &#039;Гайка 01-01&#039; для изделия с названием &#039;Велосипед 03-04&#039; в количестве (в поставке) большим, чем минимальный объём поставки, выполненной поставщиком с номером &#039;S1&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:1st dufficulty.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;7px&amp;quot;&amp;gt;&#039;&#039;&#039;Сложнейший запрос экзамена!&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;5px&amp;quot;&amp;gt;&#039;&#039;&#039;Сохрани Джа, вытащить такое&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT S.gorod AS &amp;quot;Город&amp;quot;, AVG(S.sostoyanie) AS &amp;quot;Среднее состояние&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                    JOIN spasoi_ekz.j J&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
WHERE P.nazvanie = LOWER(&#039;Гайка 01-01&#039;)&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Велосипед 03-04&#039;)&lt;br /&gt;
  AND kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT MIN(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj&lt;br /&gt;
                     WHERE nomer_postavshika = &#039;S1&#039;&lt;br /&gt;
                    )&lt;br /&gt;
GROUP BY S.gorod;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
    Город   |   Среднее состояние&lt;br /&gt;
 -----------+-----------------------&lt;br /&gt;
  Мытищи    |    35000.500000000000&lt;br /&gt;
  Йокогама  |  1500000.000000000000&lt;br /&gt;
  Манчестер | 2571.0000000000000000&lt;br /&gt;
 (3 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 28 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия изделий, куда входит хотя бы одна красная деталь весом больше 10 граммов, поставляемая только поставщиком с номером &#039;S1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT J.nazvanie&lt;br /&gt;
FROM spasoi_ekz.j J JOIN spasoi_ekz.spj SPJ1&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ1.nomer_izdelia&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ1.nomer_detali&lt;br /&gt;
WHERE P.ves &amp;gt; 10&lt;br /&gt;
 AND P.cvet = &#039;красный&#039;&lt;br /&gt;
 AND NOT EXISTS (&lt;br /&gt;
                 SELECT SPJ2.nomer_postavshika&lt;br /&gt;
                 FROM spasoi_ekz.spj SPJ2         &lt;br /&gt;
                 WHERE SPJ2.nomer_detali = P.nomer_detali&lt;br /&gt;
	 	   AND SPJ2.nomer_postavshika != &#039;S1&#039;&lt;br /&gt;
                );                     &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     nazvanie&lt;br /&gt;
 -----------------&lt;br /&gt;
  кружевное бельё&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 29 ===&lt;br /&gt;
Написать запрос SELECT: выдать названия деталей, которые входят только и только в состав изделия с названием &#039;Штуцер 01-03&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie&lt;br /&gt;
FROM spasoi_ekz.p P, spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE P.nomer_detali = SPJ.nomer_detali &lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT SPJ.nomer_izdelia&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                            ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
                  WHERE (&lt;br /&gt;
                         J.nazvanie != LOWER(&#039;Штуцер 01-03&#039;)&lt;br /&gt;
                         AND&lt;br /&gt;
                         SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                        )&lt;br /&gt;
                     OR (&lt;br /&gt;
                         J.nazvanie = LOWER(&#039;Штуцер 01-03&#039;)&lt;br /&gt;
                         AND&lt;br /&gt;
                         SPJ.nomer_detali != P.nomer_detali&lt;br /&gt;
                        )&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
      nazvanie&lt;br /&gt;
 ------------------&lt;br /&gt;
  штуцерная деталь&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 30 ===&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют, по крайней мере, все те детали, которые поставляет поставщик с номером &#039;S2&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT imya&lt;br /&gt;
FROM spasoi_ekz.s S&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT nomer_detali&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJY&lt;br /&gt;
                  WHERE nomer_postavshika = &#039;S2&#039;&lt;br /&gt;
                    AND NOT EXISTS (&lt;br /&gt;
                                    SELECT *&lt;br /&gt;
                                    FROM spasoi_ekz.spj&lt;br /&gt;
                                    WHERE nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                                      AND nomer_detali = SPJY.nomer_detali&lt;br /&gt;
                                   )&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  imya&lt;br /&gt;
 ------------&lt;br /&gt;
  Оша&lt;br /&gt;
  Бран Старк&lt;br /&gt;
 (2 rows)&lt;br /&gt;
[[Категория:Структурное проектирование АСОИ (10 семестр)]]&lt;/div&gt;</summary>
		<author><name>81.9.52.28</name></author>
	</entry>
	<entry>
		<id>https://iu5bmstu.ru/index.php?title=SQL-%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D1%8B_%D0%BA_%D1%8D%D0%BA%D0%B7%D0%B0%D0%BC%D0%B5%D0%BD%D1%83_%D0%BF%D0%BE_%D0%A1%D0%9F%D0%90%D0%A1%D0%9E%D0%98_(10_%D1%81%D0%B5%D0%BC%D0%B5%D1%81%D1%82%D1%80)&amp;diff=3860</id>
		<title>SQL-запросы к экзамену по СПАСОИ (10 семестр)</title>
		<link rel="alternate" type="text/html" href="https://iu5bmstu.ru/index.php?title=SQL-%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D1%8B_%D0%BA_%D1%8D%D0%BA%D0%B7%D0%B0%D0%BC%D0%B5%D0%BD%D1%83_%D0%BF%D0%BE_%D0%A1%D0%9F%D0%90%D0%A1%D0%9E%D0%98_(10_%D1%81%D0%B5%D0%BC%D0%B5%D1%81%D1%82%D1%80)&amp;diff=3860"/>
		<updated>2013-06-16T09:34:47Z</updated>

		<summary type="html">&lt;p&gt;81.9.52.28: /* Билет 22 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right; clear:both; margin-right:1.0em;&amp;quot;&amp;gt;__TOC__&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Билет экзамена по [[:Категория:Структурное проектирование АСОИ (10 семестр) | СПАСОИ]] состоит из двух частей:&lt;br /&gt;
# теория;&lt;br /&gt;
# SQL-запрос.&lt;br /&gt;
&lt;br /&gt;
На этой странице собраны все сформированные запросы по билетам.&lt;br /&gt;
&lt;br /&gt;
Странно, что ни в одном билете нет запроса с сортировкой результатов. Возможно, они буду в дополнительных заданиях.&lt;br /&gt;
&lt;br /&gt;
== Схема БД ==&lt;br /&gt;
&lt;br /&gt;
Схема БД используется всё [[СПАСОИ_(10)_-_Лекция_№8_-_SQL#Некоторые возможности языка SQL | та же]], что была в прошлом семестре и на лекциях.&lt;br /&gt;
&lt;br /&gt;
Для написания запросов и проверки их выполнения создана БД в СУБД [http://www.postgresql.org/ PostgreSQL].&lt;br /&gt;
&lt;br /&gt;
Скрипт создания можно загрузить [http://yadi.sk/d/ArwqOGAy5pPfi отсюда].&lt;br /&gt;
&lt;br /&gt;
=== Таблицы БД ===&lt;br /&gt;
&lt;br /&gt;
==== Поставщики ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.s;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika |       imya       | sostoyanie |   gorod&lt;br /&gt;
 -------------------+------------------+------------+------------&lt;br /&gt;
  S5                | Мелисандра       |      65000 | Мадрид&lt;br /&gt;
  S2                | Бран Старк       |      60000 | Мурманск&lt;br /&gt;
  S1                | Якен Хгар        |    1500000 | Йокогама&lt;br /&gt;
  S7                | Сирио Форель     |    1500000 | Йокогама&lt;br /&gt;
  S4                | Джейме Ланнистер |     750000 | Лондон&lt;br /&gt;
  S3                | Серсея Ланнистер |    1200000 | Лондон&lt;br /&gt;
  S8                | Тирион Ланнистер |       2571 | Манчестер&lt;br /&gt;
  S9                | Иванов           |      35000 | Мытищи&lt;br /&gt;
  S10               | Русе Болтон      |      44444 | Баренцбург&lt;br /&gt;
  S11               | Петров Иван      |      35000 | Мытищи&lt;br /&gt;
  S14               | Рендилл Тарли    |    1111111 | Прага&lt;br /&gt;
  S13               | Сэмвелл Тарли    |     999999 | Прага&lt;br /&gt;
  S6                | Оша              |            | Москва&lt;br /&gt;
  S16               | Ходор            |            | Москва&lt;br /&gt;
  S15               | Мелисса Флорент  |     888888 | Стокгольм&lt;br /&gt;
  S12               | Петров Пётр      |      35001 | Мытищи&lt;br /&gt;
  S17               | Томми Версетти   |  123456789 | Майами&lt;br /&gt;
  S18               | Безликий         |          1 | Йокогама&lt;br /&gt;
 (18 rows)&lt;br /&gt;
&lt;br /&gt;
==== Детали ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.p;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_detali |       nazvanie       |     cvet      | ves  |      gorod&lt;br /&gt;
 --------------+----------------------+---------------+------+-----------------&lt;br /&gt;
  P9           | подставка            | синий         |  400 | Нижний Новгород&lt;br /&gt;
  P10          | стойка               | синий         | 2000 | Нижний Новгород&lt;br /&gt;
  P11          | абажур               | синий         |  400 | Нижний Новгород&lt;br /&gt;
  P1           | гайка                | чёрный        |   20 | Лондон&lt;br /&gt;
  P3           | ось                  | белый         | 5000 | Эдинбург&lt;br /&gt;
  P4           | зубчатое колесо      | чёрный        |   50 | Эдинбург&lt;br /&gt;
  P6           | транзистор           | коричневый    |    2 | Токио&lt;br /&gt;
  P7           | печатная плата       | зелёный       |  200 | Токио&lt;br /&gt;
  P8           | диод                 | коричневый    |    1 | Токио&lt;br /&gt;
  P12          | универсальная деталь | универсальный |    1 | Париж&lt;br /&gt;
  P13          | уникальная деталь    | уникальный    |    1 | Бостон&lt;br /&gt;
  P14          | болт                 | серый         |   20 | Ижевск&lt;br /&gt;
  P15          | рама                 | красный       | 3000 | Манчестер&lt;br /&gt;
  P16          | колесо               | белый         | 1500 | Манчестер&lt;br /&gt;
  P5           | втулка               | серый         |  350 | Манчестер&lt;br /&gt;
  P17          | бумага               | белый         |    1 | Астрахань&lt;br /&gt;
  P18          | плитка               | белый         |  300 | Флоренция&lt;br /&gt;
  P19          | орнамент             | серый         |  800 | Флоренция&lt;br /&gt;
  P20          | уголок               | серый         |  100 | Флоренция&lt;br /&gt;
  P21          | гайка 01-01          | серебристый   |   20 | Клин&lt;br /&gt;
  P22          | усиленная рама       | красный       | 3200 | Череповец&lt;br /&gt;
  P23          | винт                 | розовый       |    5 | Ижевск&lt;br /&gt;
  P24          | труселя              | красный       |   20 | Челябинск&lt;br /&gt;
  P25          | штуцерная деталь     | коричневый    |  450 | Череповец&lt;br /&gt;
  P2           | шуруп                | чёрный        |    5 | Лондон&lt;br /&gt;
  P26          | лезвие               | бесцветный    |  120 | Йокогама&lt;br /&gt;
 (26 rows)&lt;br /&gt;
&lt;br /&gt;
==== Изделия ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.j;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_izdelia |       nazvanie        |      gorod&lt;br /&gt;
 ---------------+-----------------------+-----------------&lt;br /&gt;
  J1            | автомобиль            | Магнитогорск&lt;br /&gt;
  J2            | процессор             | Зеленоград&lt;br /&gt;
  J3            | торшер                | Нижний Новгород&lt;br /&gt;
  J4            | универсальное изделие | Париж&lt;br /&gt;
  J5            | уникальное изделие    | Бостон&lt;br /&gt;
  J6            | велосипед 01/23       | Манчестер&lt;br /&gt;
  J7            | изделие из болтов     | Челябинск&lt;br /&gt;
  J8            | шкаф                  | Ярославль&lt;br /&gt;
  J9            | рама 02-01            | Череповец&lt;br /&gt;
  J10           | книга                 | Астрахань&lt;br /&gt;
  J11           | панно 01-03           | Флоренция&lt;br /&gt;
  J12           | велосипед 03-04       | Клин&lt;br /&gt;
  J13           | рама 02-03            | Череповец&lt;br /&gt;
  J14           | штуцер 01-02          | Череповец&lt;br /&gt;
  J15           | велосипед 01-04       | Клин&lt;br /&gt;
  J16           | кружевное бельё       | Челябинск&lt;br /&gt;
  J17           | штуцер 01-03          | Череповец&lt;br /&gt;
  J18           | кинжал                | Йокогама&lt;br /&gt;
 (18 rows)&lt;br /&gt;
&lt;br /&gt;
==== Сборки ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.spj;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika | nomer_detali | nomer_izdelia | kolichestvo&lt;br /&gt;
 -------------------+--------------+---------------+-------------&lt;br /&gt;
  S1                | P6           | J2            |          20&lt;br /&gt;
  S1                | P7           | J2            |           5&lt;br /&gt;
  S2                | P1           | J1            |           4&lt;br /&gt;
  S6                | P4           | J1            |           2&lt;br /&gt;
  S6                | P5           | J1            |           6&lt;br /&gt;
  S3                | P9           | J3            |           1&lt;br /&gt;
  S4                | P10          | J3            |           1&lt;br /&gt;
  S5                | P11          | J3            |           1&lt;br /&gt;
  S2                | P4           | J1            |           8&lt;br /&gt;
  S6                | P3           | J1            |          50&lt;br /&gt;
  S7                | P8           | J2            |          25&lt;br /&gt;
  S1                | P12          | J4            |           1&lt;br /&gt;
  S2                | P12          | J4            |           1&lt;br /&gt;
  S3                | P12          | J4            |           1&lt;br /&gt;
  S4                | P12          | J4            |           1&lt;br /&gt;
  S5                | P12          | J4            |           1&lt;br /&gt;
  S7                | P12          | J4            |           1&lt;br /&gt;
  S7                | P2           | J1            |           1&lt;br /&gt;
  S6                | P2           | J1            |           9&lt;br /&gt;
  S6                | P12          | J4            |           7&lt;br /&gt;
  S1                | P13          | J5            |          14&lt;br /&gt;
  S6                | P14          | J1            |        9000&lt;br /&gt;
  S2                | P14          | J1            |           3&lt;br /&gt;
  S6                | P1           | J1            |          12&lt;br /&gt;
  S8                | P15          | J6            |           1&lt;br /&gt;
  S8                | P16          | J6            |           2&lt;br /&gt;
  S3                | P5           | J6            |          10&lt;br /&gt;
  S10               | P2           | J8            |           4&lt;br /&gt;
  S8                | P1           | J7            |          16&lt;br /&gt;
  S9                | P14          | J7            |           3&lt;br /&gt;
  S11               | P10          | J3            |           2&lt;br /&gt;
  S12               | P15          | J1            |           3&lt;br /&gt;
  S11               | P11          | J3            |           4&lt;br /&gt;
  S10               | P14          | J9            |           5&lt;br /&gt;
  S13               | P17          | J10           |        1001&lt;br /&gt;
  S14               | P17          | J10           |        1111&lt;br /&gt;
  S15               | P17          | J10           |        1010&lt;br /&gt;
  S5                | P18          | J11           |           9&lt;br /&gt;
  S5                | P19          | J11           |           1&lt;br /&gt;
  S5                | P20          | J11           |           4&lt;br /&gt;
  S9                | P14          | J8            |          25&lt;br /&gt;
  S12               | P21          | J12           |          15&lt;br /&gt;
  S11               | P22          | J13           |           9&lt;br /&gt;
  S11               | P1           | J14           |          26&lt;br /&gt;
  S12               | P1           | J14           |          13&lt;br /&gt;
  S12               | P2           | J14           |          54&lt;br /&gt;
  S12               | P23          | J4            |         101&lt;br /&gt;
  S12               | P16          | J15           |          40&lt;br /&gt;
  S7                | P21          | J12           |           3&lt;br /&gt;
  S8                | P21          | J12           |           4&lt;br /&gt;
  S9                | P21          | J12           |           5&lt;br /&gt;
  S1                | P24          | J16           |           1&lt;br /&gt;
  S1                | P15          | J6            |           3&lt;br /&gt;
  S4                | P25          | J17           |           1&lt;br /&gt;
  S17               | P16          | J1            |           4&lt;br /&gt;
  S18               | P26          | J18           |           1&lt;br /&gt;
 (56 rows)&lt;br /&gt;
&lt;br /&gt;
== Готовые запросы ==&lt;br /&gt;
&lt;br /&gt;
Если видите, что тот или иной запрос можно составить короче и рациональней - смело вносите правку.&lt;br /&gt;
&lt;br /&gt;
В трёх билетах в задании на запрос встречается формулировка &amp;quot;&#039;&#039;только и только&#039;&#039;&amp;quot;. Как оказалось, это означает следующее: если холодильники поставляет &#039;&#039;только и только&#039;&#039; Уася, то:&lt;br /&gt;
# кроме Уаси никто не поставляет холодильники;&lt;br /&gt;
# Уася не поставляет ничего, кроме холодильников.&lt;br /&gt;
&lt;br /&gt;
Существующие запросы, естественно, оказались неправильными и их пришлось переписать. &amp;lt;s&amp;gt;Великий и могучий русский языка, ну что за экономия на бумаге.&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Билет 1 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера поставщиков, которые поставляют, по крайней мере, все те детали, которые поставляет поставщик с номером &#039;S2&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nomer_postavshika&lt;br /&gt;
FROM spasoi_ekz.spj SPJX&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT nomer_detali&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJY&lt;br /&gt;
                  WHERE nomer_postavshika = &#039;S2&#039;&lt;br /&gt;
                    AND NOT EXISTS (&lt;br /&gt;
                                    SELECT *&lt;br /&gt;
                                    FROM spasoi_ekz.spj&lt;br /&gt;
                                    WHERE nomer_postavshika = SPJX.nomer_postavshika&lt;br /&gt;
                                      AND nomer_detali = SPJY.nomer_detali&lt;br /&gt;
                                   )&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika&lt;br /&gt;
 -------------------&lt;br /&gt;
  S6&lt;br /&gt;
  S2&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 2 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера деталей и общее их количество для всех номеров деталей, поставляемых более чем одним поставщиком.&lt;br /&gt;
&lt;br /&gt;
Текст запроса, каким его дал Григорьев на лекции, впоследствии исправив его:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali AS &amp;quot;Номер детали&amp;quot;,&lt;br /&gt;
       SUM(kolichestvo) AS &amp;quot;Сколько штук поставляется&amp;quot;,&lt;br /&gt;
       COUNT(DISTINCT nomer_postavshika) AS &amp;quot;Сколько у неё поставщиков&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_postavshika) &amp;gt; 1;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali AS &amp;quot;Номер детали&amp;quot;,&lt;br /&gt;
       kol AS &amp;quot;Сколько штук поставляется&amp;quot;&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT nomer_detali,&lt;br /&gt;
             SUM(kolichestvo) AS kol,&lt;br /&gt;
             COUNT(DISTINCT nomer_postavshika)&lt;br /&gt;
      FROM spasoi_ekz.spj&lt;br /&gt;
      GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_postavshika) &amp;gt; 1&lt;br /&gt;
     ) A;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер детали | Сколько штук поставляется | Сколько у неё поставщиков&lt;br /&gt;
 --------------+---------------------------+---------------------------&lt;br /&gt;
  P1           |                        71 |                         5&lt;br /&gt;
  P10          |                         3 |                         2&lt;br /&gt;
  P11          |                         5 |                         2&lt;br /&gt;
  P12          |                        13 |                         7&lt;br /&gt;
  P14          |                      9036 |                         4&lt;br /&gt;
  P15          |                         7 |                         3&lt;br /&gt;
  P16          |                        46 |                         3&lt;br /&gt;
  P17          |                      3122 |                         3&lt;br /&gt;
  P2           |                        68 |                         4&lt;br /&gt;
  P21          |                        27 |                         4&lt;br /&gt;
  P4           |                        10 |                         2&lt;br /&gt;
  P5           |                        16 |                         2&lt;br /&gt;
 (12 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 3 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера поставщиков, поставляющих детали с номером &#039;P1&#039; для какого-либо изделия в количестве (в поставке) большим, чем средний объём поставок деталей с номером &#039;P2&#039; для этого изделия.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT X.nomer_postavshika &lt;br /&gt;
FROM spasoi_ekz.spj X&lt;br /&gt;
WHERE X.nomer_detali = &#039;P1&#039;&lt;br /&gt;
  AND X.kolichestvo &amp;gt; (&lt;br /&gt;
                       SELECT AVG(kolichestvo)&lt;br /&gt;
                       FROM spasoi_ekz.spj&lt;br /&gt;
                       WHERE nomer_izdelia = X.nomer_izdelia&lt;br /&gt;
                         AND nomer_detali = &#039;P2&#039;&lt;br /&gt;
                      );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но длиннее и нерациональней&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nomer_postavshika&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT *&lt;br /&gt;
      FROM spasoi_ekz.spj&lt;br /&gt;
      WHERE nomer_izdelia IN(&lt;br /&gt;
                             SELECT nomer_izdelia&lt;br /&gt;
                             FROM spasoi_ekz.spj&lt;br /&gt;
                             WHERE nomer_detali = &#039;P1&#039;&lt;br /&gt;
                            )&lt;br /&gt;
        AND nomer_izdelia IN(&lt;br /&gt;
	                     SELECT nomer_izdelia&lt;br /&gt;
	                     FROM spasoi_ekz.spj&lt;br /&gt;
	                     WHERE nomer_detali = &#039;P2&#039;&lt;br /&gt;
	                    )&lt;br /&gt;
     ) A&lt;br /&gt;
WHERE nomer_detali = &#039;P1&#039; AND kolichestvo &amp;gt;&lt;br /&gt;
(&lt;br /&gt;
 SELECT AVG(kolichestvo)&lt;br /&gt;
 FROM (&lt;br /&gt;
       SELECT *&lt;br /&gt;
       FROM spasoi_ekz.spj&lt;br /&gt;
       WHERE nomer_izdelia IN(&lt;br /&gt;
                              SELECT nomer_izdelia&lt;br /&gt;
                              FROM spasoi_ekz.spj&lt;br /&gt;
                              WHERE nomer_detali = &#039;P1&#039;&lt;br /&gt;
                             )&lt;br /&gt;
         AND nomer_izdelia IN(&lt;br /&gt;
                              SELECT nomer_izdelia&lt;br /&gt;
                              FROM spasoi_ekz.spj&lt;br /&gt;
                              WHERE nomer_detali = &#039;P2&#039;&lt;br /&gt;
                             )&lt;br /&gt;
      ) B&lt;br /&gt;
 WHERE nomer_detali = &#039;P2&#039;&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika&lt;br /&gt;
 -------------------&lt;br /&gt;
  S6&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 4 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера изделий, для которых детали поставляет только поставщик с номером ‘S1’.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_izdelia&lt;br /&gt;
FROM spasoi_ekz.spj X&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT *&lt;br /&gt;
                  FROM spasoi_ekz.spj&lt;br /&gt;
                  WHERE nomer_postavshika != &#039;S1&#039;&lt;br /&gt;
                    AND X.nomer_izdelia = nomer_izdelia&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но без EXISTS&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nomer_izdelia&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
WHERE nomer_izdelia IN(&lt;br /&gt;
                       SELECT nomer_izdelia&lt;br /&gt;
                       FROM spasoi_ekz.spj&lt;br /&gt;
                       WHERE nomer_postavshika = &#039;S1&#039;&lt;br /&gt;
                      )&lt;br /&gt;
  AND nomer_izdelia NOT IN(&lt;br /&gt;
                           SELECT nomer_izdelia&lt;br /&gt;
                           FROM spasoi_ekz.spj&lt;br /&gt;
                           WHERE nomer_postavshika != &#039;S1&#039;&lt;br /&gt;
                          );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_izdelia&lt;br /&gt;
 ---------------&lt;br /&gt;
  J5&lt;br /&gt;
  J16&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 5 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих детали с названием &amp;quot;Болт&amp;quot; в количестве (в поставке) большим, чем средний объём всех поставок деталей с номером &#039;P1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                           ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                        JOIN spasoi_ekz.p P&lt;br /&gt;
                           ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                              AND nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
WHERE kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT AVG(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj&lt;br /&gt;
                     WHERE SPJ.nomer_detali = &#039;P1&#039;&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но без JOIN&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s&lt;br /&gt;
WHERE nomer_postavshika IN (&lt;br /&gt;
                            SELECT nomer_postavshika&lt;br /&gt;
                            FROM spasoi_ekz.spj&lt;br /&gt;
                            WHERE nomer_detali = (&lt;br /&gt;
                                                  SELECT nomer_detali&lt;br /&gt;
                                                  FROM spasoi_ekz.p&lt;br /&gt;
                                                  WHERE LOWER(nazvanie) = LOWER(&#039;Болт&#039;)&lt;br /&gt;
                                                 )&lt;br /&gt;
                              AND kolichestvo &amp;gt; (&lt;br /&gt;
                                                 SELECT AVG(kolichestvo)&lt;br /&gt;
                                                 FROM spasoi_ekz.spj&lt;br /&gt;
                                                 WHERE nomer_detali = &#039;P1&#039;&lt;br /&gt;
                                                )&lt;br /&gt;
                           );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  imya&lt;br /&gt;
 ------&lt;br /&gt;
  Оша&lt;br /&gt;
  Иванов&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 6 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия деталей, поставляемых поставщиком, проживающим в том же городе, где изготавливаются эти детали, для изделия с названием ‘Велосипед 01/23’.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT P.nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                        JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                        JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
WHERE S.gorod = P.gorod&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Велосипед 01/23&#039;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос без JOIN&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nazvanie&lt;br /&gt;
FROM spasoi_ekz.S S, spasoi_ekz.p P, spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE S.gorod = P.gorod&lt;br /&gt;
  AND P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
  AND S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
  AND nomer_izdelia = (&lt;br /&gt;
                       SELECT nomer_izdelia&lt;br /&gt;
                       FROM spasoi_ekz.j&lt;br /&gt;
                       WHERE nazvanie = LOWER(&#039;Велосипед 01/23&#039;)&lt;br /&gt;
                      );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nazvanie&lt;br /&gt;
 ----------&lt;br /&gt;
  рама&lt;br /&gt;
  колесо&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 7 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия изделий, куда входят детали с названием &#039;Болт&#039;, поставляемых поставщиками с именем &#039;Иванов&#039;, в количестве (в поставке) большим, чем средний объём поставок для этого изделия.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT J.nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                        JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                        JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
WHERE imya LIKE &#039;%Иванов%&#039;&lt;br /&gt;
  AND P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
  AND kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT AVG(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj X&lt;br /&gt;
                     WHERE SPJ.nomer_izdelia = X.nomer_izdelia&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё один вариант запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie&lt;br /&gt;
FROM spasoi_ekz.j&lt;br /&gt;
WHERE nomer_izdelia IN (&lt;br /&gt;
                        SELECT nomer_izdelia&lt;br /&gt;
                        FROM (spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                                                   ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                                                      AND imya LIKE &#039;%Иванов%&#039;&lt;br /&gt;
                                                 JOIN spasoi_ekz.p P&lt;br /&gt;
                                                   ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                                      AND nazvanie = LOWER(&#039;Болт&#039;)) A&lt;br /&gt;
                        WHERE kolichestvo &amp;gt; (&lt;br /&gt;
                                             SELECT AVG(kolichestvo)&lt;br /&gt;
                                             FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                                                       ON SPJ.nomer_izdelia = A.nomer_izdelia&lt;br /&gt;
                                            )&lt;br /&gt;
                       );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;И ещё вариант этого же запроса, но длиннее и нерациональней&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT J.nazvanie, kolichestvo&lt;br /&gt;
      FROM spasoi_ekz.s S, spasoi_ekz.p P, spasoi_ekz.j J, spasoi_ekz.spj SPJ&lt;br /&gt;
      WHERE J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
        AND P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
        AND P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
        AND S.imya LIKE &#039;%Иванов%&#039;&lt;br /&gt;
        AND S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
     ) A&lt;br /&gt;
WHERE kolichestvo &amp;gt;&lt;br /&gt;
(&lt;br /&gt;
 SELECT AVG(kolichestvo)&lt;br /&gt;
 FROM spasoi_ekz.spj&lt;br /&gt;
 WHERE nomer_izdelia IN(&lt;br /&gt;
                        SELECT J.nomer_izdelia&lt;br /&gt;
                        FROM spasoi_ekz.s S, spasoi_ekz.p P, spasoi_ekz.j J, spasoi_ekz.spj SPJ&lt;br /&gt;
                        WHERE J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
                          AND P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                          AND P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
                          AND S.imya LIKE &#039;%Иванов%&#039;&lt;br /&gt;
                          AND S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
                       )&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
      nazvanie&lt;br /&gt;
 -------------------&lt;br /&gt;
  шкаф&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 8 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера изделий и общее количество деталей для них, поставляемых поставщиками с именем &#039;Петров&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_izdelia AS &amp;quot;Номер изделия&amp;quot;, SUM(kolichestvo) AS &amp;quot;Количество деталей&amp;quot; &lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                             -- так как &amp;quot;поставщикАМИ&amp;quot; и возможны&lt;br /&gt;
                             -- Иван Петров и Петров Иван, то LIKE %Петров%&lt;br /&gt;
                             AND imya LIKE &#039;%Петров%&#039;&lt;br /&gt;
GROUP BY nomer_izdelia;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер изделия | Количество деталей&lt;br /&gt;
 ---------------+--------------------&lt;br /&gt;
  J4            |                101&lt;br /&gt;
  J3            |                  6&lt;br /&gt;
  J13           |                  9&lt;br /&gt;
  J15           |                 40&lt;br /&gt;
  J1            |                  3&lt;br /&gt;
  J12           |                 15&lt;br /&gt;
  J14           |                 93&lt;br /&gt;
 (7 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 9 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера деталей и общее их количество для всех номеров деталей, которые входят только в одно изделие.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali, SUM(kolichestvo)&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_izdelia) = 1;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali, kol FROM (&lt;br /&gt;
       SELECT nomer_detali, SUM(kolichestvo) AS kol, COUNT(DISTINCT nomer_izdelia) = 1&lt;br /&gt;
       FROM spasoi_ekz.spj&lt;br /&gt;
       GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_izdelia) = 1&lt;br /&gt;
    ) A;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_detali | sum&lt;br /&gt;
 --------------+------&lt;br /&gt;
  P10          |    3&lt;br /&gt;
  P11          |    5&lt;br /&gt;
  P12          |   13&lt;br /&gt;
  P13          |   14&lt;br /&gt;
  P17          | 3122&lt;br /&gt;
  P18          |    9&lt;br /&gt;
  P19          |    1&lt;br /&gt;
  P20          |    4&lt;br /&gt;
  P21          |   27&lt;br /&gt;
  P22          |    9&lt;br /&gt;
  P23          |  101&lt;br /&gt;
  P24          |    1&lt;br /&gt;
  P25          |    1&lt;br /&gt;
  P26          |    1&lt;br /&gt;
  P3           |   50&lt;br /&gt;
  P4           |   10&lt;br /&gt;
  P6           |   20&lt;br /&gt;
  P7           |    5&lt;br /&gt;
  P8           |   25&lt;br /&gt;
  P9           |    1&lt;br /&gt;
 (20 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 10 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих детали с названием &#039;Болт&#039; для изделия с названием &#039;Рама 02-01&#039; в количестве (в поставке) большим, чем минимальное значение поставки детали с номером &#039;P1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
			   ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
			      AND J.nazvanie = LOWER(&#039;Рама 02-01&#039;)&lt;br /&gt;
			 JOIN spasoi_ekz.p P&lt;br /&gt;
			   ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
			      AND P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
			 JOIN spasoi_ekz.s S&lt;br /&gt;
			   ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE kolichestvo &amp;gt; (&lt;br /&gt;
		     SELECT MIN(kolichestvo)&lt;br /&gt;
		     FROM spasoi_ekz.spj &lt;br /&gt;
		     WHERE nomer_detali = &#039;P1&#039;&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Русе Болтон&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 11 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия городов и суммарное состояние проживающих в каждом городе поставщиков, у которых минимальный объём поставки деталей больше 1000.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT gorod, SUM(sostoyanie)&lt;br /&gt;
FROM spasoi_ekz.s S&lt;br /&gt;
WHERE (	&lt;br /&gt;
       SELECT MIN(kolichestvo)	&lt;br /&gt;
       FROM spasoi_ekz.spj X	&lt;br /&gt;
       WHERE X.nomer_postavshika = S.nomer_postavshika		&lt;br /&gt;
      ) &amp;gt; 1000&lt;br /&gt;
GROUP BY gorod;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Вариант подлиннее для тех, кто не ищет лёгких путей&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT gorod, SUM(sostoyanie)&lt;br /&gt;
FROM spasoi_ekz.s&lt;br /&gt;
WHERE nomer_postavshika IN (&lt;br /&gt;
                            SELECT nomer_postavshika&lt;br /&gt;
                            FROM spasoi_ekz.spj&lt;br /&gt;
                            GROUP BY nomer_postavshika HAVING MIN(kolichestvo) &amp;gt; 1000&lt;br /&gt;
                           )&lt;br /&gt;
GROUP BY gorod;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;!-- а этот запрос выполняет не совсем то и не правильно&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT gorod, sost&lt;br /&gt;
FROM (&lt;br /&gt;
SELECT gorod, SUM(sostoyanie) AS sost, SUM(SPJ.kolichestvo)&lt;br /&gt;
FROM spasoi_ekz.spj, spasoi_ekz.s&lt;br /&gt;
WHERE S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
GROUP BY S.gorod HAVING SUM(SPJ.kolichestvo) &amp;gt; 1000&lt;br /&gt;
) A;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; --&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
    gorod   |   sum&lt;br /&gt;
 -----------+---------&lt;br /&gt;
  Прага     | 2111110&lt;br /&gt;
  Стокгольм |  888888&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 12 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера деталей, поставляемых для какого-либо изделия поставщиком, проживающим в том же городе, где изготавливается это изделие.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali&lt;br /&gt;
FROM spasoi_ekz.spj SPJ, spasoi_ekz.s S, spasoi_ekz.j J&lt;br /&gt;
WHERE SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
  AND S.gorod = J.gorod&lt;br /&gt;
  AND J.nomer_izdelia = SPJ.nomer_izdelia;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_detali&lt;br /&gt;
 --------------&lt;br /&gt;
  P15&lt;br /&gt;
  P16&lt;br /&gt;
  P26&lt;br /&gt;
 (3 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 13 ===&lt;br /&gt;
&lt;br /&gt;
Написать &amp;lt;u&amp;gt;один&amp;lt;/u&amp;gt; запрос SELECT: выдать количества строк в таблице S (Поставщик) 1) с пустыми значениями и 2) непустыми значениями в столбце Состояние.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT COUNT(*) - COUNT(sostoyanie) AS &amp;quot;С пустым состоянием&amp;quot;, &lt;br /&gt;
       COUNT(sostoyanie) AS &amp;quot;С не пустым состоянием&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.s;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но длиннее и нерациональней&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SELECT COUNT(Snull.*) AS &amp;quot;С пустым состоянием&amp;quot;, COUNT(Snotnull.sostoyanie) AS &amp;quot;С не пустым состоянием&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.s Snull RIGHT OUTER JOIN spasoi_ekz.s Snotnull&lt;br /&gt;
                                      ON Snull.nomer_postavshika = Snotnull.nomer_postavshika&lt;br /&gt;
                                         AND Snull.sostoyanie IS NULL;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  С пустым состоянием | С не пустым состоянием&lt;br /&gt;
 ---------------------+-----------------------&lt;br /&gt;
                    2 |                    16&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 14 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют детали только и только для изделия с номером &#039;J1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj A JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON A.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE nomer_izdelia = &#039;J1&#039;&lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT nomer_postavshika&lt;br /&gt;
                  FROM spasoi_ekz.spj&lt;br /&gt;
                  WHERE nomer_izdelia != &#039;J1&#039;&lt;br /&gt;
                    AND nomer_postavshika = A.nomer_postavshika&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       imya&lt;br /&gt;
 ----------------&lt;br /&gt;
  Томми Версетти&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 15 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать наименования изделий, для которых детали поставляют только те поставщики, у которых состояние больше 1000000 у.е.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT j.nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
		  SELECT *&lt;br /&gt;
		  FROM spasoi_ekz.spj X JOIN spasoi_ekz.s S&lt;br /&gt;
		                          ON X.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
		  WHERE sostoyanie &amp;lt;= 1000000&lt;br /&gt;
		  AND X.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Вариант этого запроса без NOT EXISTS&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                        JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
WHERE sostoyanie &amp;gt; 1000000&lt;br /&gt;
  AND SPJ.nomer_izdelia NOT IN (&lt;br /&gt;
                                SELECT nomer_izdelia&lt;br /&gt;
                                FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                                                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                                WHERE sostoyanie &amp;lt; 1000000&lt;br /&gt;
                               );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       nazvanie&lt;br /&gt;
 --------------------&lt;br /&gt;
  кружевное бельё&lt;br /&gt;
  уникальное изделие&lt;br /&gt;
  процессор&lt;br /&gt;
 (3 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 16 ===&lt;br /&gt;
Написать запрос SELECT: выдать цвета и для каждого цвета общее количество деталей, входящих в изделие с названием &#039;Панно 01-03&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT cvet AS &amp;quot;Цвет&amp;quot;, SUM(kolichestvo) AS &amp;quot;Деталей&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
			     AND J.nazvanie = LOWER(&#039;Панно 01-03&#039;)&lt;br /&gt;
			JOIN spasoi_ekz.P P&lt;br /&gt;
			  ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
GROUP BY cvet;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Цвет  | Деталей&lt;br /&gt;
 -------+---------&lt;br /&gt;
  белый |       9&lt;br /&gt;
  серый |       5&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 17 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера поставщиков и количество сделанных ими поставок при условии, что среднее число деталей во всех этих поставках больше 1000.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_postavshika AS &amp;quot;Номер поставщика&amp;quot;, COUNT(*) AS &amp;quot;Количество поставок&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
WHERE nomer_postavshika IN (&lt;br /&gt;
                            SELECT nomer_postavshika&lt;br /&gt;
                            FROM spasoi_ekz.spj&lt;br /&gt;
                            GROUP BY nomer_postavshika HAVING AVG(kolichestvo) &amp;gt; 1000&lt;br /&gt;
                           )&lt;br /&gt;
GROUP BY nomer_postavshika;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_postavshika AS &amp;quot;Номер поставщика&amp;quot;, COUNT(*) AS &amp;quot;Количество поставок&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
WHERE (&lt;br /&gt;
       SELECT AVG(kolichestvo)&lt;br /&gt;
       FROM spasoi_ekz.spj X&lt;br /&gt;
       WHERE X.nomer_postavshika = spj.nomer_postavshika&lt;br /&gt;
       ) &amp;gt; 1000&lt;br /&gt;
GROUP BY nomer_postavshika;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;И ещё вариант запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nom AS &amp;quot;Номер поставщика&amp;quot;, cnt AS &amp;quot;Количество поставок&amp;quot;&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT S.nomer_postavshika AS nom,&lt;br /&gt;
             COUNT(SPJ.nomer_postavshika) AS cnt,&lt;br /&gt;
             AVG(SPJ.kolichestvo) AS kol&lt;br /&gt;
      FROM spasoi_ekz.s S, spasoi_ekz.spj SPJ&lt;br /&gt;
      WHERE S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
      GROUP BY S.nomer_postavshika&lt;br /&gt;
     ) A&lt;br /&gt;
WHERE kol &amp;gt; 1000;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер поставщика | Количество поставок&lt;br /&gt;
 ------------------+---------------------&lt;br /&gt;
  S13              |                   1&lt;br /&gt;
  S6               |                   7&lt;br /&gt;
  S14              |                   1&lt;br /&gt;
  S15              |                   1&lt;br /&gt;
 (4 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 18 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, имеющих состояние больше 1000 и поставляющих деталь с названием &#039;Гайка 01-01&#039; для изделия с названием &#039;Велосипед 03-04&#039; в количестве (в поставке) большим, чем средний объём поставки, выполненной поставщиками с именем &#039;Иванов&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:2nd dufficulty.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;5px&amp;quot;&amp;gt;&#039;&#039;&#039;Второй по сложности запрос экзамена!&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;4px&amp;quot;&amp;gt;&#039;&#039;&#039;Вот уж не свезло, так не свезло&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                    JOIN spasoi_ekz.j J&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
WHERE sostoyanie &amp;gt; 1000&lt;br /&gt;
  AND P.nazvanie = LOWER(&#039;Гайка 01-01&#039;)&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Велосипед 03-04&#039;)&lt;br /&gt;
  AND kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT AVG(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                       ON SPJ.nomer_postavshika = S.nomer_postavshika &lt;br /&gt;
                     WHERE S.imya = &#039;Иванов&#039;&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Пётр&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 19 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия красных деталей, которые входят только в изделие с названием &#039;Рама 02-03&#039; в количестве, меньшем 10 единиц в поставке.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT X.nazvanie&lt;br /&gt;
FROM spasoi_ekz.p X JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_detali = X.nomer_detali&lt;br /&gt;
WHERE X.cvet = &#039;красный&#039;&lt;br /&gt;
  AND kolichestvo &amp;lt; 10&lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT *&lt;br /&gt;
                  FROM spasoi_ekz.j J JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                                        ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                  WHERE J.nazvanie != LOWER(&#039;Рама 02-03&#039;)&lt;br /&gt;
                    AND X.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант этого же запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT P.nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND cvet = &#039;красный&#039;&lt;br /&gt;
                        JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                              AND J.nazvanie = LOWER(&#039;Рама 02-03&#039;)&lt;br /&gt;
WHERE kolichestvo &amp;lt; 10&lt;br /&gt;
  AND SPJ.nomer_detali NOT IN (&lt;br /&gt;
                               SELECT nomer_detali&lt;br /&gt;
                               FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                                         ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                                                            AND J.nazvanie != LOWER(&#039;Рама 02-03&#039;)&lt;br /&gt;
                              );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     nazvanie&lt;br /&gt;
 ----------------&lt;br /&gt;
  усиленная рама&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 20 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих только белые детали.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT *&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                                            ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                  WHERE nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    AND P.cvet != &#039;белый&#039;&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё один вариант этого же запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND cvet = &#039;белый&#039;&lt;br /&gt;
                        JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE S.nomer_postavshika NOT IN (&lt;br /&gt;
                                  SELECT nomer_postavshika&lt;br /&gt;
                                  FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                                                            ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                                               AND cvet != &#039;белый&#039;&lt;br /&gt;
                                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;И ещё один вариант этого же запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s&lt;br /&gt;
WHERE nomer_postavshika NOT IN  (&lt;br /&gt;
                                 SELECT spj.nomer_postavshika&lt;br /&gt;
                                 FROM spasoi_ekz.spj SPJ, spasoi_ekz.p P&lt;br /&gt;
                                 WHERE SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                   AND p.cvet != &#039;белый&#039;&lt;br /&gt;
                                )&lt;br /&gt;
  AND nomer_postavshika  IN (&lt;br /&gt;
                             SELECT spj.nomer_postavshika&lt;br /&gt;
                             FROM spasoi_ekz.spj SPJ, spasoi_ekz.p P&lt;br /&gt;
                             WHERE SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                               AND p.cvet = &#039;белый&#039;&lt;br /&gt;
                            );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       imya&lt;br /&gt;
 -----------------&lt;br /&gt;
  Рендилл Тарли&lt;br /&gt;
  Сэмвелл Тарли&lt;br /&gt;
  Мелисса Флорент&lt;br /&gt;
  Томми Версетти&lt;br /&gt;
 (4 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 21 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия изделий, для которых детали поставляет только и только поставщик с номером &#039;S1&#039;.&lt;br /&gt;
&lt;br /&gt;
Чтобы продемонстрировать выполнение запроса наглядно, возьмём поставщика не &#039;S1&#039;, а &#039;S18&#039;, который был создан специально для этого запроса. Если оставить &#039;S1&#039;, то наглядности не получится, так как по нашей схеме БД этот поставщик не попадает под условие &amp;quot;&#039;&#039;только и только&#039;&#039;&amp;quot;, и запрос вернёт пустой результат.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie&lt;br /&gt;
FROM spasoi_ekz.j J, spasoi_ekz.SPJ SPJ&lt;br /&gt;
WHERE J.nomer_izdelia = SPJ.nomer_izdelia &lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT *&lt;br /&gt;
                  FROM spasoi_ekz.spj&lt;br /&gt;
                  WHERE nomer_postavshika != &#039;S18&#039; AND nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                 )&lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT *&lt;br /&gt;
                  FROM spasoi_ekz.spj&lt;br /&gt;
                  WHERE nomer_postavshika = &#039;S18&#039; AND nomer_izdelia != J.nomer_izdelia&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       nazvanie&lt;br /&gt;
 --------------------&lt;br /&gt;
  кинжал&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 22 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют только детали с номером &#039;P1&#039; для изделия с именем &#039;Штуцер 01-02&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj JOIN spasoi_ekz.j&lt;br /&gt;
                          ON spj.nomer_izdelia = j.nomer_izdelia&lt;br /&gt;
                             AND j.nazvanie = LOWER(&#039;штуцер 01-02&#039;)&lt;br /&gt;
                        JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON spj.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                                    SELECT *&lt;br /&gt;
                                    FROM spasoi_ekz.spj X &lt;br /&gt;
                                    JOIN spasoi_ekz.j ON X.nomer_izdelia = j.nomer_izdelia&lt;br /&gt;
                                    WHERE X.nomer_detali != &#039;P1&#039; &lt;br /&gt;
                                    AND j.nazvanie = LOWER(&#039;штуцер 01-02&#039;)&lt;br /&gt;
                                    AND S.nomer_postavshika = X.nomer_postavshika&lt;br /&gt;
                              );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- неверный запрос - номер изделия, а не название&lt;br /&gt;
SELECT imya FROM S X&lt;br /&gt;
JOIN SPJ Y ON X.nomer_postavshika=Y.nomer_postavshika&lt;br /&gt;
WHERE X.nomer_postavshika NOT IN (&lt;br /&gt;
                  SELECT DISTINCT nomer_postavshika FROM SPJ Z&lt;br /&gt;
                  WHERE Z.nomer_izdelia != &#039;Штуцер 01-02&#039;&lt;br /&gt;
                  AND Z.nomer_detali!=&#039;P1&#039;);--&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                             AND J.nazvanie = LOWER(&#039;штуцер 01-02&#039;)&lt;br /&gt;
                        JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND SPJ.nomer_detali = &#039;P1&#039;&lt;br /&gt;
                        JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE SPJ.nomer_postavshika NOT IN (&lt;br /&gt;
                                    SELECT nomer_postavshika&lt;br /&gt;
                                    FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                                              ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                                                                 AND J.nazvanie = LOWER(&#039;штуцер 01-02&#039;)&lt;br /&gt;
                                                            JOIN spasoi_ekz.p P&lt;br /&gt;
                                                              ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                                                 AND SPJ.nomer_detali != &#039;P1&#039;&lt;br /&gt;
                              );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Иван&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 23 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют деталь с названием &#039;Винт&#039; в количестве большим 100 единиц в одной поставке и имеют состояние больше среднего по их родному городу.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT S.imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
WHERE P.nazvanie = LOWER(&#039;Винт&#039;)&lt;br /&gt;
  AND SPJ.kolichestvo &amp;gt; 100&lt;br /&gt;
  AND S.sostoyanie &amp;gt; (&lt;br /&gt;
                      SELECT AVG(SS.sostoyanie)&lt;br /&gt;
                      FROM spasoi_ekz.s SS&lt;br /&gt;
                      WHERE SS.gorod = S.gorod&lt;br /&gt;
                     );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Пётр&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 24 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать наименования деталей и общее их количество для всех наименований деталей, изготавливаемых в одном городе.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- С этим запросом возникла неожиданная проблема - задание то ли неполное, то ли неправильное, потому что нельзя однозначно сказать, что по нему требуется сделать.&lt;br /&gt;
&lt;br /&gt;
Так что тут несколько вариантов запросов (кто как понял).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Первый вариант запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie, kol&lt;br /&gt;
FROM spasoi_ekz.p A, (&lt;br /&gt;
                      SELECT X.gorod, SUM(kolichestvo) as kol&lt;br /&gt;
                      FROM spasoi_ekz.p X, spasoi_ekz.spj Y&lt;br /&gt;
                      WHERE Y.nomer_detali = X.nomer_detali&lt;br /&gt;
                      GROUP BY X.gorod&lt;br /&gt;
                     ) B&lt;br /&gt;
WHERE A.gorod = B.gorod;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
        nazvanie       | kol&lt;br /&gt;
 ----------------------+------&lt;br /&gt;
  подставка            |    9&lt;br /&gt;
  стойка               |    9&lt;br /&gt;
  абажур               |    9&lt;br /&gt;
  гайка                |  139&lt;br /&gt;
  ось                  |   60&lt;br /&gt;
  зубчатое колесо      |   60&lt;br /&gt;
  транзистор           |   50&lt;br /&gt;
  печатная плата       |   50&lt;br /&gt;
  диод                 |   50&lt;br /&gt;
  универсальная деталь |   13&lt;br /&gt;
  уникальная деталь    |   14&lt;br /&gt;
  болт                 | 9137&lt;br /&gt;
  рама                 |   69&lt;br /&gt;
  колесо               |   69&lt;br /&gt;
  втулка               |   69&lt;br /&gt;
  бумага               | 3122&lt;br /&gt;
  плитка               |   14&lt;br /&gt;
  орнамент             |   14&lt;br /&gt;
  уголок               |   14&lt;br /&gt;
  гайка 01-01          |   27&lt;br /&gt;
  усиленная рама       |   10&lt;br /&gt;
  винт                 | 9137&lt;br /&gt;
  труселя              |    1&lt;br /&gt;
  штуцерная деталь     |   10&lt;br /&gt;
  шуруп                |  139&lt;br /&gt;
 (25 rows)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
и --&amp;gt;&lt;br /&gt;
В уточнение задания Григорьев сказал следующее: &amp;quot;&#039;&#039;Следует учесть, что в качестве наименования города может выступать переменная, в которую в некоторой программе должно быть занесено конкретное значение перед выполнением запроса&#039;&#039;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
То есть, вообще говоря, задание на запрос неполное, и его можно трактовать так: выдать наименования деталей и общее их количество для всех наименований деталей, изготавливаемых в городе &amp;lt;code&amp;gt;%НАЗВАНИЕГОРОДА%&amp;lt;/code&amp;gt;. Вот эта переменная задаётся где-то в программе, а в БД идёт запрос с уже подставленным конкретным названием. &lt;br /&gt;
&lt;br /&gt;
Этот вариант запроса составлен, например, для Лондона. &lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie, SUM(kolichestvo)&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
WHERE gorod = &#039;Лондон&#039;&lt;br /&gt;
GROUP BY nazvanie;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nazvanie | sum&lt;br /&gt;
 ----------+-----&lt;br /&gt;
  гайка    |  71&lt;br /&gt;
  шуруп    |  68&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 25 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих хотя бы одну белую деталь для изделия с названием &#039;Велосипед 01-04&#039; с объёмом поставки большим, чем средний объём поставки этого поставщика.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                    JOIN spasoi_ekz.j J&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
WHERE cvet = &#039;белый&#039;&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Велосипед 01-04&#039;)&lt;br /&gt;
  AND kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT AVG(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj SPJ&lt;br /&gt;
                     WHERE SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Пётр&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 26 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера красных деталей и количество поставок этих деталей.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT P.nomer_detali AS &amp;quot;Номер детали&amp;quot;, COUNT(kolichestvo) AS &amp;quot;Количество поставок с ней&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.p P, spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
  AND cvet = &#039;красный&#039;&lt;br /&gt;
GROUP BY P.nomer_detali;   &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос через JOIN&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT SPJ.nomer_detali AS &amp;quot;Номер детали&amp;quot;, COUNT(kolichestvo) AS &amp;quot;Количество поставок с ней&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND cvet = &#039;красный&#039;&lt;br /&gt;
GROUP BY SPJ.nomer_detali;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер детали | Количество поставок с ней&lt;br /&gt;
 --------------+---------------------------&lt;br /&gt;
  P15          |                         3&lt;br /&gt;
  P22          |                         1&lt;br /&gt;
  P24          |                         1&lt;br /&gt;
 (3 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 27 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать наименования городов и среднее состояние поставщиков для каждого города, поставляющих детали с названием &#039;Гайка 01-01&#039; для изделия с названием &#039;Велосипед 03-04&#039; в количестве (в поставке) большим, чем минимальный объём поставки, выполненной поставщиком с номером &#039;S1&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:1st dufficulty.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;7px&amp;quot;&amp;gt;&#039;&#039;&#039;Сложнейший запрос экзамена!&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;5px&amp;quot;&amp;gt;&#039;&#039;&#039;Сохрани Джа, вытащить такое&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT S.gorod AS &amp;quot;Город&amp;quot;, AVG(S.sostoyanie) AS &amp;quot;Среднее состояние&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                    JOIN spasoi_ekz.j J&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
WHERE P.nazvanie = LOWER(&#039;Гайка 01-01&#039;)&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Велосипед 03-04&#039;)&lt;br /&gt;
  AND kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT MIN(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj&lt;br /&gt;
                     WHERE nomer_postavshika = &#039;S1&#039;&lt;br /&gt;
                    )&lt;br /&gt;
GROUP BY S.gorod;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
    Город   |   Среднее состояние&lt;br /&gt;
 -----------+-----------------------&lt;br /&gt;
  Мытищи    |    35000.500000000000&lt;br /&gt;
  Йокогама  |  1500000.000000000000&lt;br /&gt;
  Манчестер | 2571.0000000000000000&lt;br /&gt;
 (3 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 28 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия изделий, куда входит хотя бы одна красная деталь весом больше 10 граммов, поставляемая только поставщиком с номером &#039;S1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT J.nazvanie&lt;br /&gt;
FROM spasoi_ekz.j J JOIN spasoi_ekz.spj SPJ1&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ1.nomer_izdelia&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ1.nomer_detali&lt;br /&gt;
WHERE P.ves &amp;gt; 10&lt;br /&gt;
 AND P.cvet = &#039;красный&#039;&lt;br /&gt;
 AND NOT EXISTS (&lt;br /&gt;
                 SELECT SPJ2.nomer_postavshika&lt;br /&gt;
                 FROM spasoi_ekz.spj SPJ2         &lt;br /&gt;
                 WHERE SPJ2.nomer_detali = P.nomer_detali&lt;br /&gt;
	 	   AND SPJ2.nomer_postavshika != &#039;S1&#039;&lt;br /&gt;
                );                     &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     nazvanie&lt;br /&gt;
 -----------------&lt;br /&gt;
  кружевное бельё&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 29 ===&lt;br /&gt;
Написать запрос SELECT: выдать названия деталей, которые входят только и только в состав изделия с названием &#039;Штуцер 01-03&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie&lt;br /&gt;
FROM spasoi_ekz.p P, spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE P.nomer_detali = SPJ.nomer_detali &lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT SPJ.nomer_izdelia&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                            ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
                  WHERE (&lt;br /&gt;
                         J.nazvanie != LOWER(&#039;Штуцер 01-03&#039;)&lt;br /&gt;
                         AND&lt;br /&gt;
                         SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                        )&lt;br /&gt;
                     OR (&lt;br /&gt;
                         J.nazvanie = LOWER(&#039;Штуцер 01-03&#039;)&lt;br /&gt;
                         AND&lt;br /&gt;
                         SPJ.nomer_detali != P.nomer_detali&lt;br /&gt;
                        )&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
      nazvanie&lt;br /&gt;
 ------------------&lt;br /&gt;
  штуцерная деталь&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 30 ===&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют, по крайней мере, все те детали, которые поставляет поставщик с номером &#039;S2&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT imya&lt;br /&gt;
FROM spasoi_ekz.s S&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT nomer_detali&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJY&lt;br /&gt;
                  WHERE nomer_postavshika = &#039;S2&#039;&lt;br /&gt;
                    AND NOT EXISTS (&lt;br /&gt;
                                    SELECT *&lt;br /&gt;
                                    FROM spasoi_ekz.spj&lt;br /&gt;
                                    WHERE nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                                      AND nomer_detali = SPJY.nomer_detali&lt;br /&gt;
                                   )&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  imya&lt;br /&gt;
 ------------&lt;br /&gt;
  Оша&lt;br /&gt;
  Бран Старк&lt;br /&gt;
 (2 rows)&lt;br /&gt;
[[Категория:Структурное проектирование АСОИ (10 семестр)]]&lt;/div&gt;</summary>
		<author><name>81.9.52.28</name></author>
	</entry>
	<entry>
		<id>https://iu5bmstu.ru/index.php?title=SQL-%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D1%8B_%D0%BA_%D1%8D%D0%BA%D0%B7%D0%B0%D0%BC%D0%B5%D0%BD%D1%83_%D0%BF%D0%BE_%D0%A1%D0%9F%D0%90%D0%A1%D0%9E%D0%98_(10_%D1%81%D0%B5%D0%BC%D0%B5%D1%81%D1%82%D1%80)&amp;diff=3851</id>
		<title>SQL-запросы к экзамену по СПАСОИ (10 семестр)</title>
		<link rel="alternate" type="text/html" href="https://iu5bmstu.ru/index.php?title=SQL-%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D1%8B_%D0%BA_%D1%8D%D0%BA%D0%B7%D0%B0%D0%BC%D0%B5%D0%BD%D1%83_%D0%BF%D0%BE_%D0%A1%D0%9F%D0%90%D0%A1%D0%9E%D0%98_(10_%D1%81%D0%B5%D0%BC%D0%B5%D1%81%D1%82%D1%80)&amp;diff=3851"/>
		<updated>2013-06-16T07:33:28Z</updated>

		<summary type="html">&lt;p&gt;81.9.52.28: /* Билет 19 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right; clear:both; margin-right:1.0em;&amp;quot;&amp;gt;__TOC__&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Билет экзамена по [[:Категория:Структурное проектирование АСОИ (10 семестр) | СПАСОИ]] состоит из двух частей:&lt;br /&gt;
# теория;&lt;br /&gt;
# SQL-запрос.&lt;br /&gt;
&lt;br /&gt;
На этой странице собраны все сформированные запросы по билетам.&lt;br /&gt;
&lt;br /&gt;
Странно, что ни в одном билете нет запроса с сортировкой результатов. Возможно, они буду в дополнительных заданиях.&lt;br /&gt;
&lt;br /&gt;
== Схема БД ==&lt;br /&gt;
&lt;br /&gt;
Схема БД используется всё [[СПАСОИ_(10)_-_Лекция_№8_-_SQL#Некоторые возможности языка SQL | та же]], что была в прошлом семестре и на лекциях.&lt;br /&gt;
&lt;br /&gt;
Для написания запросов и проверки их выполнения создана БД в СУБД [http://www.postgresql.org/ PostgreSQL].&lt;br /&gt;
&lt;br /&gt;
Скрипт создания можно загрузить [http://yadi.sk/d/ArwqOGAy5pPfi отсюда].&lt;br /&gt;
&lt;br /&gt;
=== Таблицы БД ===&lt;br /&gt;
&lt;br /&gt;
==== Поставщики ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.s;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika |       imya       | sostoyanie |   gorod&lt;br /&gt;
 -------------------+------------------+------------+------------&lt;br /&gt;
  S5                | Мелисандра       |      65000 | Мадрид&lt;br /&gt;
  S2                | Бран Старк       |      60000 | Мурманск&lt;br /&gt;
  S1                | Якен Хгар        |    1500000 | Йокогама&lt;br /&gt;
  S7                | Сирио Форель     |    1500000 | Йокогама&lt;br /&gt;
  S4                | Джейме Ланнистер |     750000 | Лондон&lt;br /&gt;
  S3                | Серсея Ланнистер |    1200000 | Лондон&lt;br /&gt;
  S8                | Тирион Ланнистер |       2571 | Манчестер&lt;br /&gt;
  S9                | Иванов           |      35000 | Мытищи&lt;br /&gt;
  S10               | Русе Болтон      |      44444 | Баренцбург&lt;br /&gt;
  S11               | Петров Иван      |      35000 | Мытищи&lt;br /&gt;
  S14               | Рендилл Тарли    |    1111111 | Прага&lt;br /&gt;
  S13               | Сэмвелл Тарли    |     999999 | Прага&lt;br /&gt;
  S6                | Оша              |            | Москва&lt;br /&gt;
  S16               | Ходор            |            | Москва&lt;br /&gt;
  S15               | Мелисса Флорент  |     888888 | Стокгольм&lt;br /&gt;
  S12               | Петров Пётр      |      35001 | Мытищи&lt;br /&gt;
  S17               | Томми Версетти   |  123456789 | Майами&lt;br /&gt;
  S18               | Безликий         |          1 | Йокогама&lt;br /&gt;
 (18 rows)&lt;br /&gt;
&lt;br /&gt;
==== Детали ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.p;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_detali |       nazvanie       |     cvet      | ves  |      gorod&lt;br /&gt;
 --------------+----------------------+---------------+------+-----------------&lt;br /&gt;
  P9           | подставка            | синий         |  400 | Нижний Новгород&lt;br /&gt;
  P10          | стойка               | синий         | 2000 | Нижний Новгород&lt;br /&gt;
  P11          | абажур               | синий         |  400 | Нижний Новгород&lt;br /&gt;
  P1           | гайка                | чёрный        |   20 | Лондон&lt;br /&gt;
  P3           | ось                  | белый         | 5000 | Эдинбург&lt;br /&gt;
  P4           | зубчатое колесо      | чёрный        |   50 | Эдинбург&lt;br /&gt;
  P6           | транзистор           | коричневый    |    2 | Токио&lt;br /&gt;
  P7           | печатная плата       | зелёный       |  200 | Токио&lt;br /&gt;
  P8           | диод                 | коричневый    |    1 | Токио&lt;br /&gt;
  P12          | универсальная деталь | универсальный |    1 | Париж&lt;br /&gt;
  P13          | уникальная деталь    | уникальный    |    1 | Бостон&lt;br /&gt;
  P14          | болт                 | серый         |   20 | Ижевск&lt;br /&gt;
  P15          | рама                 | красный       | 3000 | Манчестер&lt;br /&gt;
  P16          | колесо               | белый         | 1500 | Манчестер&lt;br /&gt;
  P5           | втулка               | серый         |  350 | Манчестер&lt;br /&gt;
  P17          | бумага               | белый         |    1 | Астрахань&lt;br /&gt;
  P18          | плитка               | белый         |  300 | Флоренция&lt;br /&gt;
  P19          | орнамент             | серый         |  800 | Флоренция&lt;br /&gt;
  P20          | уголок               | серый         |  100 | Флоренция&lt;br /&gt;
  P21          | гайка 01-01          | серебристый   |   20 | Клин&lt;br /&gt;
  P22          | усиленная рама       | красный       | 3200 | Череповец&lt;br /&gt;
  P23          | винт                 | розовый       |    5 | Ижевск&lt;br /&gt;
  P24          | труселя              | красный       |   20 | Челябинск&lt;br /&gt;
  P25          | штуцерная деталь     | коричневый    |  450 | Череповец&lt;br /&gt;
  P2           | шуруп                | чёрный        |    5 | Лондон&lt;br /&gt;
  P26          | лезвие               | бесцветный    |  120 | Йокогама&lt;br /&gt;
 (26 rows)&lt;br /&gt;
&lt;br /&gt;
==== Изделия ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.j;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_izdelia |       nazvanie        |      gorod&lt;br /&gt;
 ---------------+-----------------------+-----------------&lt;br /&gt;
  J1            | автомобиль            | Магнитогорск&lt;br /&gt;
  J2            | процессор             | Зеленоград&lt;br /&gt;
  J3            | торшер                | Нижний Новгород&lt;br /&gt;
  J4            | универсальное изделие | Париж&lt;br /&gt;
  J5            | уникальное изделие    | Бостон&lt;br /&gt;
  J6            | велосипед 01/23       | Манчестер&lt;br /&gt;
  J7            | изделие из болтов     | Челябинск&lt;br /&gt;
  J8            | шкаф                  | Ярославль&lt;br /&gt;
  J9            | рама 02-01            | Череповец&lt;br /&gt;
  J10           | книга                 | Астрахань&lt;br /&gt;
  J11           | панно 01-03           | Флоренция&lt;br /&gt;
  J12           | велосипед 03-04       | Клин&lt;br /&gt;
  J13           | рама 02-03            | Череповец&lt;br /&gt;
  J14           | штуцер 01-02          | Череповец&lt;br /&gt;
  J15           | велосипед 01-04       | Клин&lt;br /&gt;
  J16           | кружевное бельё       | Челябинск&lt;br /&gt;
  J17           | штуцер 01-03          | Череповец&lt;br /&gt;
  J18           | кинжал                | Йокогама&lt;br /&gt;
 (18 rows)&lt;br /&gt;
&lt;br /&gt;
==== Сборки ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.spj;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika | nomer_detali | nomer_izdelia | kolichestvo&lt;br /&gt;
 -------------------+--------------+---------------+-------------&lt;br /&gt;
  S1                | P6           | J2            |          20&lt;br /&gt;
  S1                | P7           | J2            |           5&lt;br /&gt;
  S2                | P1           | J1            |           4&lt;br /&gt;
  S6                | P4           | J1            |           2&lt;br /&gt;
  S6                | P5           | J1            |           6&lt;br /&gt;
  S3                | P9           | J3            |           1&lt;br /&gt;
  S4                | P10          | J3            |           1&lt;br /&gt;
  S5                | P11          | J3            |           1&lt;br /&gt;
  S2                | P4           | J1            |           8&lt;br /&gt;
  S6                | P3           | J1            |          50&lt;br /&gt;
  S7                | P8           | J2            |          25&lt;br /&gt;
  S1                | P12          | J4            |           1&lt;br /&gt;
  S2                | P12          | J4            |           1&lt;br /&gt;
  S3                | P12          | J4            |           1&lt;br /&gt;
  S4                | P12          | J4            |           1&lt;br /&gt;
  S5                | P12          | J4            |           1&lt;br /&gt;
  S7                | P12          | J4            |           1&lt;br /&gt;
  S7                | P2           | J1            |           1&lt;br /&gt;
  S6                | P2           | J1            |           9&lt;br /&gt;
  S6                | P12          | J4            |           7&lt;br /&gt;
  S1                | P13          | J5            |          14&lt;br /&gt;
  S6                | P14          | J1            |        9000&lt;br /&gt;
  S2                | P14          | J1            |           3&lt;br /&gt;
  S6                | P1           | J1            |          12&lt;br /&gt;
  S8                | P15          | J6            |           1&lt;br /&gt;
  S8                | P16          | J6            |           2&lt;br /&gt;
  S3                | P5           | J6            |          10&lt;br /&gt;
  S10               | P2           | J8            |           4&lt;br /&gt;
  S8                | P1           | J7            |          16&lt;br /&gt;
  S9                | P14          | J7            |           3&lt;br /&gt;
  S11               | P10          | J3            |           2&lt;br /&gt;
  S12               | P15          | J1            |           3&lt;br /&gt;
  S11               | P11          | J3            |           4&lt;br /&gt;
  S10               | P14          | J9            |           5&lt;br /&gt;
  S13               | P17          | J10           |        1001&lt;br /&gt;
  S14               | P17          | J10           |        1111&lt;br /&gt;
  S15               | P17          | J10           |        1010&lt;br /&gt;
  S5                | P18          | J11           |           9&lt;br /&gt;
  S5                | P19          | J11           |           1&lt;br /&gt;
  S5                | P20          | J11           |           4&lt;br /&gt;
  S9                | P14          | J8            |          25&lt;br /&gt;
  S12               | P21          | J12           |          15&lt;br /&gt;
  S11               | P22          | J13           |           9&lt;br /&gt;
  S11               | P1           | J14           |          26&lt;br /&gt;
  S12               | P1           | J14           |          13&lt;br /&gt;
  S12               | P2           | J14           |          54&lt;br /&gt;
  S12               | P23          | J4            |         101&lt;br /&gt;
  S12               | P16          | J15           |          40&lt;br /&gt;
  S7                | P21          | J12           |           3&lt;br /&gt;
  S8                | P21          | J12           |           4&lt;br /&gt;
  S9                | P21          | J12           |           5&lt;br /&gt;
  S1                | P24          | J16           |           1&lt;br /&gt;
  S1                | P15          | J6            |           3&lt;br /&gt;
  S4                | P25          | J17           |           1&lt;br /&gt;
  S17               | P16          | J1            |           4&lt;br /&gt;
  S18               | P26          | J18           |           1&lt;br /&gt;
 (56 rows)&lt;br /&gt;
&lt;br /&gt;
== Готовые запросы ==&lt;br /&gt;
&lt;br /&gt;
Если видите, что тот или иной запрос можно составить короче и рациональней - смело вносите правку.&lt;br /&gt;
&lt;br /&gt;
В трёх билетах в задании на запрос встречается формулировка &amp;quot;&#039;&#039;только и только&#039;&#039;&amp;quot;. Как оказалось, это означает следующее: если холодильники поставляет &#039;&#039;только и только&#039;&#039; Уася, то:&lt;br /&gt;
# кроме Уаси никто не поставляет холодильники;&lt;br /&gt;
# Уася не поставляет ничего, кроме холодильников.&lt;br /&gt;
&lt;br /&gt;
Существующие запросы, естественно, оказались неправильными и их пришлось переписать. &amp;lt;s&amp;gt;Великий и могучий русский языка, ну что за экономия на бумаге.&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Билет 1 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера поставщиков, которые поставляют, по крайней мере, все те детали, которые поставляет поставщик с номером &#039;S2&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nomer_postavshika&lt;br /&gt;
FROM spasoi_ekz.spj SPJX&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT nomer_detali&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJY&lt;br /&gt;
                  WHERE nomer_postavshika = &#039;S2&#039;&lt;br /&gt;
                    AND NOT EXISTS (&lt;br /&gt;
                                    SELECT *&lt;br /&gt;
                                    FROM spasoi_ekz.spj&lt;br /&gt;
                                    WHERE nomer_postavshika = SPJX.nomer_postavshika&lt;br /&gt;
                                      AND nomer_detali = SPJY.nomer_detali&lt;br /&gt;
                                   )&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika&lt;br /&gt;
 -------------------&lt;br /&gt;
  S6&lt;br /&gt;
  S2&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 2 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера деталей и общее их количество для всех номеров деталей, поставляемых более чем одним поставщиком.&lt;br /&gt;
&lt;br /&gt;
Текст запроса, каким его дал Григорьев на лекции, впоследствии исправив его:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali AS &amp;quot;Номер детали&amp;quot;,&lt;br /&gt;
       SUM(kolichestvo) AS &amp;quot;Сколько штук поставляется&amp;quot;,&lt;br /&gt;
       COUNT(DISTINCT nomer_postavshika) AS &amp;quot;Сколько у неё поставщиков&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_postavshika) &amp;gt; 1;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali AS &amp;quot;Номер детали&amp;quot;,&lt;br /&gt;
       kol AS &amp;quot;Сколько штук поставляется&amp;quot;&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT nomer_detali,&lt;br /&gt;
             SUM(kolichestvo) AS kol,&lt;br /&gt;
             COUNT(DISTINCT nomer_postavshika)&lt;br /&gt;
      FROM spasoi_ekz.spj&lt;br /&gt;
      GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_postavshika) &amp;gt; 1&lt;br /&gt;
     ) A;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер детали | Сколько штук поставляется | Сколько у неё поставщиков&lt;br /&gt;
 --------------+---------------------------+---------------------------&lt;br /&gt;
  P1           |                        71 |                         5&lt;br /&gt;
  P10          |                         3 |                         2&lt;br /&gt;
  P11          |                         5 |                         2&lt;br /&gt;
  P12          |                        13 |                         7&lt;br /&gt;
  P14          |                      9036 |                         4&lt;br /&gt;
  P15          |                         7 |                         3&lt;br /&gt;
  P16          |                        46 |                         3&lt;br /&gt;
  P17          |                      3122 |                         3&lt;br /&gt;
  P2           |                        68 |                         4&lt;br /&gt;
  P21          |                        27 |                         4&lt;br /&gt;
  P4           |                        10 |                         2&lt;br /&gt;
  P5           |                        16 |                         2&lt;br /&gt;
 (12 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 3 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера поставщиков, поставляющих детали с номером &#039;P1&#039; для какого-либо изделия в количестве (в поставке) большим, чем средний объём поставок деталей с номером &#039;P2&#039; для этого изделия.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT X.nomer_postavshika &lt;br /&gt;
FROM spasoi_ekz.spj X&lt;br /&gt;
WHERE X.nomer_detali = &#039;P1&#039;&lt;br /&gt;
  AND X.kolichestvo &amp;gt; (&lt;br /&gt;
                       SELECT AVG(kolichestvo)&lt;br /&gt;
                       FROM spasoi_ekz.spj&lt;br /&gt;
                       WHERE nomer_izdelia = X.nomer_izdelia&lt;br /&gt;
                         AND nomer_detali = &#039;P2&#039;&lt;br /&gt;
                      );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но длиннее и нерациональней&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nomer_postavshika&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT *&lt;br /&gt;
      FROM spasoi_ekz.spj&lt;br /&gt;
      WHERE nomer_izdelia IN(&lt;br /&gt;
                             SELECT nomer_izdelia&lt;br /&gt;
                             FROM spasoi_ekz.spj&lt;br /&gt;
                             WHERE nomer_detali = &#039;P1&#039;&lt;br /&gt;
                            )&lt;br /&gt;
        AND nomer_izdelia IN(&lt;br /&gt;
	                     SELECT nomer_izdelia&lt;br /&gt;
	                     FROM spasoi_ekz.spj&lt;br /&gt;
	                     WHERE nomer_detali = &#039;P2&#039;&lt;br /&gt;
	                    )&lt;br /&gt;
     ) A&lt;br /&gt;
WHERE nomer_detali = &#039;P1&#039; AND kolichestvo &amp;gt;&lt;br /&gt;
(&lt;br /&gt;
 SELECT AVG(kolichestvo)&lt;br /&gt;
 FROM (&lt;br /&gt;
       SELECT *&lt;br /&gt;
       FROM spasoi_ekz.spj&lt;br /&gt;
       WHERE nomer_izdelia IN(&lt;br /&gt;
                              SELECT nomer_izdelia&lt;br /&gt;
                              FROM spasoi_ekz.spj&lt;br /&gt;
                              WHERE nomer_detali = &#039;P1&#039;&lt;br /&gt;
                             )&lt;br /&gt;
         AND nomer_izdelia IN(&lt;br /&gt;
                              SELECT nomer_izdelia&lt;br /&gt;
                              FROM spasoi_ekz.spj&lt;br /&gt;
                              WHERE nomer_detali = &#039;P2&#039;&lt;br /&gt;
                             )&lt;br /&gt;
      ) B&lt;br /&gt;
 WHERE nomer_detali = &#039;P2&#039;&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika&lt;br /&gt;
 -------------------&lt;br /&gt;
  S6&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 4 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера изделий, для которых детали поставляет только поставщик с номером ‘S1’.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_izdelia&lt;br /&gt;
FROM spasoi_ekz.spj X&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT *&lt;br /&gt;
                  FROM spasoi_ekz.spj&lt;br /&gt;
                  WHERE nomer_postavshika != &#039;S1&#039;&lt;br /&gt;
                    AND X.nomer_izdelia = nomer_izdelia&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но без EXISTS&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nomer_izdelia&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
WHERE nomer_izdelia IN(&lt;br /&gt;
                       SELECT nomer_izdelia&lt;br /&gt;
                       FROM spasoi_ekz.spj&lt;br /&gt;
                       WHERE nomer_postavshika = &#039;S1&#039;&lt;br /&gt;
                      )&lt;br /&gt;
  AND nomer_izdelia NOT IN(&lt;br /&gt;
                           SELECT nomer_izdelia&lt;br /&gt;
                           FROM spasoi_ekz.spj&lt;br /&gt;
                           WHERE nomer_postavshika != &#039;S1&#039;&lt;br /&gt;
                          );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_izdelia&lt;br /&gt;
 ---------------&lt;br /&gt;
  J5&lt;br /&gt;
  J16&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 5 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих детали с названием &amp;quot;Болт&amp;quot; в количестве (в поставке) большим, чем средний объём всех поставок деталей с номером &#039;P1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                           ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                        JOIN spasoi_ekz.p P&lt;br /&gt;
                           ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                              AND nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
WHERE kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT AVG(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj&lt;br /&gt;
                     WHERE SPJ.nomer_detali = &#039;P1&#039;&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но без JOIN&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s&lt;br /&gt;
WHERE nomer_postavshika IN (&lt;br /&gt;
                            SELECT nomer_postavshika&lt;br /&gt;
                            FROM spasoi_ekz.spj&lt;br /&gt;
                            WHERE nomer_detali = (&lt;br /&gt;
                                                  SELECT nomer_detali&lt;br /&gt;
                                                  FROM spasoi_ekz.p&lt;br /&gt;
                                                  WHERE LOWER(nazvanie) = LOWER(&#039;Болт&#039;)&lt;br /&gt;
                                                 )&lt;br /&gt;
                              AND kolichestvo &amp;gt; (&lt;br /&gt;
                                                 SELECT AVG(kolichestvo)&lt;br /&gt;
                                                 FROM spasoi_ekz.spj&lt;br /&gt;
                                                 WHERE nomer_detali = &#039;P1&#039;&lt;br /&gt;
                                                )&lt;br /&gt;
                           );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  imya&lt;br /&gt;
 ------&lt;br /&gt;
  Оша&lt;br /&gt;
  Иванов&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 6 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия деталей, поставляемых поставщиком, проживающим в том же городе, где изготавливаются эти детали, для изделия с названием ‘Велосипед 01/23’.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT P.nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                        JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                        JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
WHERE S.gorod = P.gorod&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Велосипед 01/23&#039;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос без JOIN&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nazvanie&lt;br /&gt;
FROM spasoi_ekz.S S, spasoi_ekz.p P, spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE S.gorod = P.gorod&lt;br /&gt;
  AND P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
  AND S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
  AND nomer_izdelia = (&lt;br /&gt;
                       SELECT nomer_izdelia&lt;br /&gt;
                       FROM spasoi_ekz.j&lt;br /&gt;
                       WHERE nazvanie = LOWER(&#039;Велосипед 01/23&#039;)&lt;br /&gt;
                      );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nazvanie&lt;br /&gt;
 ----------&lt;br /&gt;
  рама&lt;br /&gt;
  колесо&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 7 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия изделий, куда входят детали с названием &#039;Болт&#039;, поставляемых поставщиками с именем &#039;Иванов&#039;, в количестве (в поставке) большим, чем средний объём поставок для этого изделия.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT J.nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                        JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                        JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
WHERE imya LIKE &#039;%Иванов%&#039;&lt;br /&gt;
  AND P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
  AND kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT AVG(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj X&lt;br /&gt;
                     WHERE SPJ.nomer_izdelia = X.nomer_izdelia&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё один вариант запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie&lt;br /&gt;
FROM spasoi_ekz.j&lt;br /&gt;
WHERE nomer_izdelia IN (&lt;br /&gt;
                        SELECT nomer_izdelia&lt;br /&gt;
                        FROM (spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                                                   ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                                                      AND imya LIKE &#039;%Иванов%&#039;&lt;br /&gt;
                                                 JOIN spasoi_ekz.p P&lt;br /&gt;
                                                   ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                                      AND nazvanie = LOWER(&#039;Болт&#039;)) A&lt;br /&gt;
                        WHERE kolichestvo &amp;gt; (&lt;br /&gt;
                                             SELECT AVG(kolichestvo)&lt;br /&gt;
                                             FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                                                       ON SPJ.nomer_izdelia = A.nomer_izdelia&lt;br /&gt;
                                            )&lt;br /&gt;
                       );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;И ещё вариант этого же запроса, но длиннее и нерациональней&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT J.nazvanie, kolichestvo&lt;br /&gt;
      FROM spasoi_ekz.s S, spasoi_ekz.p P, spasoi_ekz.j J, spasoi_ekz.spj SPJ&lt;br /&gt;
      WHERE J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
        AND P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
        AND P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
        AND S.imya LIKE &#039;%Иванов%&#039;&lt;br /&gt;
        AND S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
     ) A&lt;br /&gt;
WHERE kolichestvo &amp;gt;&lt;br /&gt;
(&lt;br /&gt;
 SELECT AVG(kolichestvo)&lt;br /&gt;
 FROM spasoi_ekz.spj&lt;br /&gt;
 WHERE nomer_izdelia IN(&lt;br /&gt;
                        SELECT J.nomer_izdelia&lt;br /&gt;
                        FROM spasoi_ekz.s S, spasoi_ekz.p P, spasoi_ekz.j J, spasoi_ekz.spj SPJ&lt;br /&gt;
                        WHERE J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
                          AND P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                          AND P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
                          AND S.imya LIKE &#039;%Иванов%&#039;&lt;br /&gt;
                          AND S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
                       )&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
      nazvanie&lt;br /&gt;
 -------------------&lt;br /&gt;
  шкаф&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 8 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера изделий и общее количество деталей для них, поставляемых поставщиками с именем &#039;Петров&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_izdelia AS &amp;quot;Номер изделия&amp;quot;, SUM(kolichestvo) AS &amp;quot;Количество деталей&amp;quot; &lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                             -- так как &amp;quot;поставщикАМИ&amp;quot; и возможны&lt;br /&gt;
                             -- Иван Петров и Петров Иван, то LIKE %Петров%&lt;br /&gt;
                             AND imya LIKE &#039;%Петров%&#039;&lt;br /&gt;
GROUP BY nomer_izdelia;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер изделия | Количество деталей&lt;br /&gt;
 ---------------+--------------------&lt;br /&gt;
  J4            |                101&lt;br /&gt;
  J3            |                  6&lt;br /&gt;
  J13           |                  9&lt;br /&gt;
  J15           |                 40&lt;br /&gt;
  J1            |                  3&lt;br /&gt;
  J12           |                 15&lt;br /&gt;
  J14           |                 93&lt;br /&gt;
 (7 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 9 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера деталей и общее их количество для всех номеров деталей, которые входят только в одно изделие.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali, SUM(kolichestvo)&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_izdelia) = 1;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali, kol FROM (&lt;br /&gt;
       SELECT nomer_detali, SUM(kolichestvo) AS kol, COUNT(DISTINCT nomer_izdelia) = 1&lt;br /&gt;
       FROM spasoi_ekz.spj&lt;br /&gt;
       GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_izdelia) = 1&lt;br /&gt;
    ) A;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_detali | sum&lt;br /&gt;
 --------------+------&lt;br /&gt;
  P10          |    3&lt;br /&gt;
  P11          |    5&lt;br /&gt;
  P12          |   13&lt;br /&gt;
  P13          |   14&lt;br /&gt;
  P17          | 3122&lt;br /&gt;
  P18          |    9&lt;br /&gt;
  P19          |    1&lt;br /&gt;
  P20          |    4&lt;br /&gt;
  P21          |   27&lt;br /&gt;
  P22          |    9&lt;br /&gt;
  P23          |  101&lt;br /&gt;
  P24          |    1&lt;br /&gt;
  P25          |    1&lt;br /&gt;
  P26          |    1&lt;br /&gt;
  P3           |   50&lt;br /&gt;
  P4           |   10&lt;br /&gt;
  P6           |   20&lt;br /&gt;
  P7           |    5&lt;br /&gt;
  P8           |   25&lt;br /&gt;
  P9           |    1&lt;br /&gt;
 (20 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 10 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих детали с названием &#039;Болт&#039; для изделия с названием &#039;Рама 02-01&#039; в количестве (в поставке) большим, чем минимальное значение поставки детали с номером &#039;P1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
			   ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
			      AND J.nazvanie = LOWER(&#039;Рама 02-01&#039;)&lt;br /&gt;
			 JOIN spasoi_ekz.p P&lt;br /&gt;
			   ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
			      AND P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
			 JOIN spasoi_ekz.s S&lt;br /&gt;
			   ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE kolichestvo &amp;gt; (&lt;br /&gt;
		     SELECT MIN(kolichestvo)&lt;br /&gt;
		     FROM spasoi_ekz.spj &lt;br /&gt;
		     WHERE nomer_detali = &#039;P1&#039;&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Русе Болтон&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 11 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия городов и суммарное состояние проживающих в каждом городе поставщиков, у которых минимальный объём поставки деталей больше 1000.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT gorod, SUM(sostoyanie)&lt;br /&gt;
FROM spasoi_ekz.s S&lt;br /&gt;
WHERE (	&lt;br /&gt;
       SELECT MIN(kolichestvo)	&lt;br /&gt;
       FROM spasoi_ekz.spj X	&lt;br /&gt;
       WHERE X.nomer_postavshika = S.nomer_postavshika		&lt;br /&gt;
      ) &amp;gt; 1000&lt;br /&gt;
GROUP BY gorod;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Вариант подлиннее для тех, кто не ищет лёгких путей&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT gorod, SUM(sostoyanie)&lt;br /&gt;
FROM spasoi_ekz.s&lt;br /&gt;
WHERE nomer_postavshika IN (&lt;br /&gt;
                            SELECT nomer_postavshika&lt;br /&gt;
                            FROM spasoi_ekz.spj&lt;br /&gt;
                            GROUP BY nomer_postavshika HAVING MIN(kolichestvo) &amp;gt; 1000&lt;br /&gt;
                           )&lt;br /&gt;
GROUP BY gorod;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;!-- а этот запрос выполняет не совсем то и не правильно&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT gorod, sost&lt;br /&gt;
FROM (&lt;br /&gt;
SELECT gorod, SUM(sostoyanie) AS sost, SUM(SPJ.kolichestvo)&lt;br /&gt;
FROM spasoi_ekz.spj, spasoi_ekz.s&lt;br /&gt;
WHERE S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
GROUP BY S.gorod HAVING SUM(SPJ.kolichestvo) &amp;gt; 1000&lt;br /&gt;
) A;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; --&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
    gorod   |   sum&lt;br /&gt;
 -----------+---------&lt;br /&gt;
  Прага     | 2111110&lt;br /&gt;
  Стокгольм |  888888&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 12 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера деталей, поставляемых для какого-либо изделия поставщиком, проживающим в том же городе, где изготавливается это изделие.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali&lt;br /&gt;
FROM spasoi_ekz.spj SPJ, spasoi_ekz.s S, spasoi_ekz.j J&lt;br /&gt;
WHERE SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
  AND S.gorod = J.gorod&lt;br /&gt;
  AND J.nomer_izdelia = SPJ.nomer_izdelia;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_detali&lt;br /&gt;
 --------------&lt;br /&gt;
  P15&lt;br /&gt;
  P16&lt;br /&gt;
  P26&lt;br /&gt;
 (3 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 13 ===&lt;br /&gt;
&lt;br /&gt;
Написать &amp;lt;u&amp;gt;один&amp;lt;/u&amp;gt; запрос SELECT: выдать количества строк в таблице S (Поставщик) 1) с пустыми значениями и 2) непустыми значениями в столбце Состояние.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT COUNT(*) - COUNT(sostoyanie) AS &amp;quot;С пустым состоянием&amp;quot;, &lt;br /&gt;
       COUNT(sostoyanie) AS &amp;quot;С не пустым состоянием&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.s;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но длиннее и нерациональней&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SELECT COUNT(Snull.*) AS &amp;quot;С пустым состоянием&amp;quot;, COUNT(Snotnull.sostoyanie) AS &amp;quot;С не пустым состоянием&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.s Snull RIGHT OUTER JOIN spasoi_ekz.s Snotnull&lt;br /&gt;
                                      ON Snull.nomer_postavshika = Snotnull.nomer_postavshika&lt;br /&gt;
                                         AND Snull.sostoyanie IS NULL;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  С пустым состоянием | С не пустым состоянием&lt;br /&gt;
 ---------------------+-----------------------&lt;br /&gt;
                    2 |                    16&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 14 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют детали только и только для изделия с номером &#039;J1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj A JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON A.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE nomer_izdelia = &#039;J1&#039;&lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT nomer_postavshika&lt;br /&gt;
                  FROM spasoi_ekz.spj&lt;br /&gt;
                  WHERE nomer_izdelia != &#039;J1&#039;&lt;br /&gt;
                    AND nomer_postavshika = A.nomer_postavshika&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       imya&lt;br /&gt;
 ----------------&lt;br /&gt;
  Томми Версетти&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 15 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать наименования изделий, для которых детали поставляют только те поставщики, у которых состояние больше 1000000 у.е.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT j.nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
		  SELECT *&lt;br /&gt;
		  FROM spasoi_ekz.spj X JOIN spasoi_ekz.s S&lt;br /&gt;
		                          ON X.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
		  WHERE sostoyanie &amp;lt;= 1000000&lt;br /&gt;
		  AND X.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Вариант этого запроса без NOT EXISTS&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                        JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
WHERE sostoyanie &amp;gt; 1000000&lt;br /&gt;
  AND SPJ.nomer_izdelia NOT IN (&lt;br /&gt;
                                SELECT nomer_izdelia&lt;br /&gt;
                                FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                                                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                                WHERE sostoyanie &amp;lt; 1000000&lt;br /&gt;
                               );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       nazvanie&lt;br /&gt;
 --------------------&lt;br /&gt;
  кружевное бельё&lt;br /&gt;
  уникальное изделие&lt;br /&gt;
  процессор&lt;br /&gt;
 (3 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 16 ===&lt;br /&gt;
Написать запрос SELECT: выдать цвета и для каждого цвета общее количество деталей, входящих в изделие с названием &#039;Панно 01-03&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT cvet AS &amp;quot;Цвет&amp;quot;, SUM(kolichestvo) AS &amp;quot;Деталей&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
			     AND J.nazvanie = LOWER(&#039;Панно 01-03&#039;)&lt;br /&gt;
			JOIN spasoi_ekz.P P&lt;br /&gt;
			  ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
GROUP BY cvet;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Цвет  | Деталей&lt;br /&gt;
 -------+---------&lt;br /&gt;
  белый |       9&lt;br /&gt;
  серый |       5&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 17 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера поставщиков и количество сделанных ими поставок при условии, что среднее число деталей во всех этих поставках больше 1000.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_postavshika AS &amp;quot;Номер поставщика&amp;quot;, COUNT(*) AS &amp;quot;Количество поставок&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
WHERE (&lt;br /&gt;
       SELECT AVG(kolichestvo)&lt;br /&gt;
       FROM spasoi_ekz.spj X&lt;br /&gt;
       WHERE X.nomer_postavshika = spj.nomer_postavshika&lt;br /&gt;
       ) &amp;gt; 1000&lt;br /&gt;
GROUP BY nomer_postavshika;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nom AS &amp;quot;Номер поставщика&amp;quot;, cnt AS &amp;quot;Количество поставок&amp;quot;&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT S.nomer_postavshika AS nom,&lt;br /&gt;
             COUNT(SPJ.nomer_postavshika) AS cnt,&lt;br /&gt;
             AVG(SPJ.kolichestvo) AS kol&lt;br /&gt;
      FROM spasoi_ekz.s S, spasoi_ekz.spj SPJ&lt;br /&gt;
      WHERE S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
      GROUP BY S.nomer_postavshika&lt;br /&gt;
     ) A&lt;br /&gt;
WHERE kol &amp;gt; 1000;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос немного попроще&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_postavshika AS &amp;quot;Номер поставщика&amp;quot;, COUNT(*) AS &amp;quot;Количество поставок&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
WHERE nomer_postavshika IN (&lt;br /&gt;
                            SELECT nomer_postavshika&lt;br /&gt;
                            FROM spasoi_ekz.spj&lt;br /&gt;
                            GROUP BY nomer_postavshika HAVING AVG(kolichestvo) &amp;gt; 1000&lt;br /&gt;
                           )&lt;br /&gt;
GROUP BY nomer_postavshika;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер поставщика | Количество поставок&lt;br /&gt;
 ------------------+---------------------&lt;br /&gt;
  S13              |                   1&lt;br /&gt;
  S6               |                   7&lt;br /&gt;
  S14              |                   1&lt;br /&gt;
  S15              |                   1&lt;br /&gt;
 (4 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 18 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, имеющих состояние больше 1000 и поставляющих деталь с названием &#039;Гайка 01-01&#039; для изделия с названием &#039;Велосипед 03-04&#039; в количестве (в поставке) большим, чем средний объём поставки, выполненной поставщиками с именем &#039;Иванов&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:2nd dufficulty.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;5px&amp;quot;&amp;gt;&#039;&#039;&#039;Второй по сложности запрос экзамена!&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;4px&amp;quot;&amp;gt;&#039;&#039;&#039;Вот уж не свезло, так не свезло&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                    JOIN spasoi_ekz.j J&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
WHERE sostoyanie &amp;gt; 1000&lt;br /&gt;
  AND P.nazvanie = LOWER(&#039;Гайка 01-01&#039;)&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Велосипед 03-04&#039;)&lt;br /&gt;
  AND kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT AVG(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                       ON SPJ.nomer_postavshika = S.nomer_postavshika &lt;br /&gt;
                     WHERE S.imya = &#039;Иванов&#039;&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Пётр&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 19 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия красных деталей, которые входят только в изделие с названием &#039;Рама 02-03&#039; в количестве, меньшем 10 единиц в поставке.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT X.nazvanie&lt;br /&gt;
FROM spasoi_ekz.p X JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_detali = X.nomer_detali&lt;br /&gt;
WHERE X.cvet = &#039;красный&#039;&lt;br /&gt;
  AND kolichestvo &amp;lt; 10&lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT *&lt;br /&gt;
                  FROM spasoi_ekz.j J JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                                        ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                  WHERE J.nazvanie != LOWER(&#039;Рама 02-03&#039;)&lt;br /&gt;
                    AND X.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант этого же запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT P.nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND cvet = &#039;красный&#039;&lt;br /&gt;
                        JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                              AND J.nazvanie = LOWER(&#039;Рама 02-03&#039;)&lt;br /&gt;
WHERE kolichestvo &amp;lt; 10&lt;br /&gt;
  AND SPJ.nomer_detali NOT IN (&lt;br /&gt;
                               SELECT nomer_detali&lt;br /&gt;
                               FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                                         ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                                                            AND J.nazvanie != LOWER(&#039;Рама 02-03&#039;)&lt;br /&gt;
                              );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     nazvanie&lt;br /&gt;
 ----------------&lt;br /&gt;
  усиленная рама&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 20 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих только белые детали.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT *&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                                            ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                  WHERE nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    AND P.cvet != &#039;белый&#039;&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё один вариант этого же запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND cvet = &#039;белый&#039;&lt;br /&gt;
                        JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE S.nomer_postavshika NOT IN (&lt;br /&gt;
                                  SELECT nomer_postavshika&lt;br /&gt;
                                  FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                                                            ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                                               AND cvet != &#039;белый&#039;&lt;br /&gt;
                                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;И ещё один вариант этого же запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s&lt;br /&gt;
WHERE nomer_postavshika NOT IN  (&lt;br /&gt;
                                 SELECT spj.nomer_postavshika&lt;br /&gt;
                                 FROM spasoi_ekz.spj SPJ, spasoi_ekz.p P&lt;br /&gt;
                                 WHERE SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                   AND p.cvet != &#039;белый&#039;&lt;br /&gt;
                                )&lt;br /&gt;
  AND nomer_postavshika  IN (&lt;br /&gt;
                             SELECT spj.nomer_postavshika&lt;br /&gt;
                             FROM spasoi_ekz.spj SPJ, spasoi_ekz.p P&lt;br /&gt;
                             WHERE SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                               AND p.cvet = &#039;белый&#039;&lt;br /&gt;
                            );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       imya&lt;br /&gt;
 -----------------&lt;br /&gt;
  Рендилл Тарли&lt;br /&gt;
  Сэмвелл Тарли&lt;br /&gt;
  Мелисса Флорент&lt;br /&gt;
  Томми Версетти&lt;br /&gt;
 (4 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 21 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия изделий, для которых детали поставляет только и только поставщик с номером &#039;S1&#039;.&lt;br /&gt;
&lt;br /&gt;
Чтобы продемонстрировать выполнение запроса наглядно, возьмём поставщика не &#039;S1&#039;, а &#039;S18&#039;, который был создан специально для этого запроса. Если оставить &#039;S1&#039;, то наглядности не получится, так как по нашей схеме БД этот поставщик не попадает под условие &amp;quot;&#039;&#039;только и только&#039;&#039;&amp;quot;, и запрос вернёт пустой результат.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie&lt;br /&gt;
FROM spasoi_ekz.j J, spasoi_ekz.SPJ SPJ&lt;br /&gt;
WHERE J.nomer_izdelia = SPJ.nomer_izdelia &lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT *&lt;br /&gt;
                  FROM spasoi_ekz.spj&lt;br /&gt;
                  WHERE nomer_postavshika != &#039;S18&#039; AND nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                 )&lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT *&lt;br /&gt;
                  FROM spasoi_ekz.spj&lt;br /&gt;
                  WHERE nomer_postavshika = &#039;S18&#039; AND nomer_izdelia != J.nomer_izdelia&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       nazvanie&lt;br /&gt;
 --------------------&lt;br /&gt;
  кинжал&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 22 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют только детали с номером &#039;P1&#039; для изделия с именем &#039;Штуцер 01-02&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- неверный запрос - номер изделия, а не название&lt;br /&gt;
SELECT imya FROM S X&lt;br /&gt;
JOIN SPJ Y ON X.nomer_postavshika=Y.nomer_postavshika&lt;br /&gt;
WHERE X.nomer_postavshika NOT IN (&lt;br /&gt;
                  SELECT DISTINCT nomer_postavshika FROM SPJ Z&lt;br /&gt;
                  WHERE Z.nomer_izdelia != &#039;Штуцер 01-02&#039;&lt;br /&gt;
                  AND Z.nomer_detali!=&#039;P1&#039;);--&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                             AND J.nazvanie = LOWER(&#039;штуцер 01-02&#039;)&lt;br /&gt;
                        JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND SPJ.nomer_detali = &#039;P1&#039;&lt;br /&gt;
                        JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE SPJ.nomer_postavshika NOT IN (&lt;br /&gt;
                                    SELECT nomer_postavshika&lt;br /&gt;
                                    FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                                              ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                                                                 AND J.nazvanie = LOWER(&#039;штуцер 01-02&#039;)&lt;br /&gt;
                                                            JOIN spasoi_ekz.p P&lt;br /&gt;
                                                              ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                                                 AND SPJ.nomer_detali != &#039;P1&#039;&lt;br /&gt;
                              );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Иван&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 23 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют деталь с названием &#039;Винт&#039; в количестве большим 100 единиц в одной поставке и имеют состояние больше среднего по их родному городу.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT S.imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
WHERE P.nazvanie = LOWER(&#039;Винт&#039;)&lt;br /&gt;
  AND SPJ.kolichestvo &amp;gt; 100&lt;br /&gt;
  AND S.sostoyanie &amp;gt; (&lt;br /&gt;
                      SELECT AVG(SS.sostoyanie)&lt;br /&gt;
                      FROM spasoi_ekz.s SS&lt;br /&gt;
                      WHERE SS.gorod = S.gorod&lt;br /&gt;
                     );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Пётр&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 24 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать наименования деталей и общее их количество для всех наименований деталей, изготавливаемых в одном городе.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- С этим запросом возникла неожиданная проблема - задание то ли неполное, то ли неправильное, потому что нельзя однозначно сказать, что по нему требуется сделать.&lt;br /&gt;
&lt;br /&gt;
Так что тут несколько вариантов запросов (кто как понял).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Первый вариант запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie, kol&lt;br /&gt;
FROM spasoi_ekz.p A, (&lt;br /&gt;
                      SELECT X.gorod, SUM(kolichestvo) as kol&lt;br /&gt;
                      FROM spasoi_ekz.p X, spasoi_ekz.spj Y&lt;br /&gt;
                      WHERE Y.nomer_detali = X.nomer_detali&lt;br /&gt;
                      GROUP BY X.gorod&lt;br /&gt;
                     ) B&lt;br /&gt;
WHERE A.gorod = B.gorod;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
        nazvanie       | kol&lt;br /&gt;
 ----------------------+------&lt;br /&gt;
  подставка            |    9&lt;br /&gt;
  стойка               |    9&lt;br /&gt;
  абажур               |    9&lt;br /&gt;
  гайка                |  139&lt;br /&gt;
  ось                  |   60&lt;br /&gt;
  зубчатое колесо      |   60&lt;br /&gt;
  транзистор           |   50&lt;br /&gt;
  печатная плата       |   50&lt;br /&gt;
  диод                 |   50&lt;br /&gt;
  универсальная деталь |   13&lt;br /&gt;
  уникальная деталь    |   14&lt;br /&gt;
  болт                 | 9137&lt;br /&gt;
  рама                 |   69&lt;br /&gt;
  колесо               |   69&lt;br /&gt;
  втулка               |   69&lt;br /&gt;
  бумага               | 3122&lt;br /&gt;
  плитка               |   14&lt;br /&gt;
  орнамент             |   14&lt;br /&gt;
  уголок               |   14&lt;br /&gt;
  гайка 01-01          |   27&lt;br /&gt;
  усиленная рама       |   10&lt;br /&gt;
  винт                 | 9137&lt;br /&gt;
  труселя              |    1&lt;br /&gt;
  штуцерная деталь     |   10&lt;br /&gt;
  шуруп                |  139&lt;br /&gt;
 (25 rows)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
и --&amp;gt;&lt;br /&gt;
В уточнение задания Григорьев сказал следующее: &amp;quot;&#039;&#039;Следует учесть, что в качестве наименования города может выступать переменная, в которую в некоторой программе должно быть занесено конкретное значение перед выполнением запроса&#039;&#039;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
То есть, вообще говоря, задание на запрос неполное, и его можно трактовать так: выдать наименования деталей и общее их количество для всех наименований деталей, изготавливаемых в городе &amp;lt;code&amp;gt;%НАЗВАНИЕГОРОДА%&amp;lt;/code&amp;gt;. Вот эта переменная задаётся где-то в программе, а в БД идёт запрос с уже подставленным конкретным названием. &lt;br /&gt;
&lt;br /&gt;
Этот вариант запроса составлен, например, для Лондона. &lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie, SUM(kolichestvo)&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
WHERE gorod = &#039;Лондон&#039;&lt;br /&gt;
GROUP BY nazvanie;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nazvanie | sum&lt;br /&gt;
 ----------+-----&lt;br /&gt;
  гайка    |  71&lt;br /&gt;
  шуруп    |  68&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 25 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих хотя бы одну белую деталь для изделия с названием &#039;Велосипед 01-04&#039; с объёмом поставки большим, чем средний объём поставки этого поставщика.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                    JOIN spasoi_ekz.j J&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
WHERE cvet = &#039;белый&#039;&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Велосипед 01-04&#039;)&lt;br /&gt;
  AND kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT AVG(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj SPJ&lt;br /&gt;
                     WHERE SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Пётр&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 26 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера красных деталей и количество поставок этих деталей.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT P.nomer_detali AS &amp;quot;Номер детали&amp;quot;, COUNT(kolichestvo) AS &amp;quot;Количество поставок с ней&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.p P, spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
  AND cvet = &#039;красный&#039;&lt;br /&gt;
GROUP BY P.nomer_detali;   &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос через JOIN&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT SPJ.nomer_detali AS &amp;quot;Номер детали&amp;quot;, COUNT(kolichestvo) AS &amp;quot;Количество поставок с ней&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND cvet = &#039;красный&#039;&lt;br /&gt;
GROUP BY SPJ.nomer_detali;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер детали | Количество поставок с ней&lt;br /&gt;
 --------------+---------------------------&lt;br /&gt;
  P15          |                         3&lt;br /&gt;
  P22          |                         1&lt;br /&gt;
  P24          |                         1&lt;br /&gt;
 (3 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 27 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать наименования городов и среднее состояние поставщиков для каждого города, поставляющих детали с названием &#039;Гайка 01-01&#039; для изделия с названием &#039;Велосипед 03-04&#039; в количестве (в поставке) большим, чем минимальный объём поставки, выполненной поставщиком с номером &#039;S1&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:1st dufficulty.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;7px&amp;quot;&amp;gt;&#039;&#039;&#039;Сложнейший запрос экзамена!&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;5px&amp;quot;&amp;gt;&#039;&#039;&#039;Сохрани Джа, вытащить такое&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT S.gorod AS &amp;quot;Город&amp;quot;, AVG(S.sostoyanie) AS &amp;quot;Среднее состояние&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                    JOIN spasoi_ekz.j J&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
WHERE P.nazvanie = LOWER(&#039;Гайка 01-01&#039;)&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Велосипед 03-04&#039;)&lt;br /&gt;
  AND kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT MIN(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj&lt;br /&gt;
                     WHERE nomer_postavshika = &#039;S1&#039;&lt;br /&gt;
                    )&lt;br /&gt;
GROUP BY S.gorod;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
    Город   |   Среднее состояние&lt;br /&gt;
 -----------+-----------------------&lt;br /&gt;
  Мытищи    |    35000.500000000000&lt;br /&gt;
  Йокогама  |  1500000.000000000000&lt;br /&gt;
  Манчестер | 2571.0000000000000000&lt;br /&gt;
 (3 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 28 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия изделий, куда входит хотя бы одна красная деталь весом больше 10 граммов, поставляемая только поставщиком с номером &#039;S1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT J.nazvanie&lt;br /&gt;
FROM spasoi_ekz.j J JOIN spasoi_ekz.spj SPJ1&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ1.nomer_izdelia&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ1.nomer_detali&lt;br /&gt;
WHERE P.ves &amp;gt; 10&lt;br /&gt;
 AND P.cvet = &#039;красный&#039;&lt;br /&gt;
 AND NOT EXISTS (&lt;br /&gt;
                 SELECT SPJ2.nomer_postavshika&lt;br /&gt;
                 FROM spasoi_ekz.spj SPJ2         &lt;br /&gt;
                 WHERE SPJ2.nomer_detali = P.nomer_detali&lt;br /&gt;
	 	   AND SPJ2.nomer_postavshika != &#039;S1&#039;&lt;br /&gt;
                );                     &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     nazvanie&lt;br /&gt;
 -----------------&lt;br /&gt;
  кружевное бельё&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 29 ===&lt;br /&gt;
Написать запрос SELECT: выдать названия деталей, которые входят только и только в состав изделия с названием &#039;Штуцер 01-03&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie&lt;br /&gt;
FROM spasoi_ekz.p P, spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE P.nomer_detali = SPJ.nomer_detali &lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT SPJ.nomer_izdelia&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                            ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
                  WHERE (&lt;br /&gt;
                         J.nazvanie != LOWER(&#039;Штуцер 01-03&#039;)&lt;br /&gt;
                         AND&lt;br /&gt;
                         SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                        )&lt;br /&gt;
                     OR (&lt;br /&gt;
                         J.nazvanie = LOWER(&#039;Штуцер 01-03&#039;)&lt;br /&gt;
                         AND&lt;br /&gt;
                         SPJ.nomer_detali != P.nomer_detali&lt;br /&gt;
                        )&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
      nazvanie&lt;br /&gt;
 ------------------&lt;br /&gt;
  штуцерная деталь&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 30 ===&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют, по крайней мере, все те детали, которые поставляет поставщик с номером &#039;S2&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT imya&lt;br /&gt;
FROM spasoi_ekz.s S&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT nomer_detali&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJY&lt;br /&gt;
                  WHERE nomer_postavshika = &#039;S2&#039;&lt;br /&gt;
                    AND NOT EXISTS (&lt;br /&gt;
                                    SELECT *&lt;br /&gt;
                                    FROM spasoi_ekz.spj&lt;br /&gt;
                                    WHERE nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                                      AND nomer_detali = SPJY.nomer_detali&lt;br /&gt;
                                   )&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  imya&lt;br /&gt;
 ------------&lt;br /&gt;
  Оша&lt;br /&gt;
  Бран Старк&lt;br /&gt;
 (2 rows)&lt;br /&gt;
[[Категория:Структурное проектирование АСОИ (10 семестр)]]&lt;/div&gt;</summary>
		<author><name>81.9.52.28</name></author>
	</entry>
	<entry>
		<id>https://iu5bmstu.ru/index.php?title=SQL-%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D1%8B_%D0%BA_%D1%8D%D0%BA%D0%B7%D0%B0%D0%BC%D0%B5%D0%BD%D1%83_%D0%BF%D0%BE_%D0%A1%D0%9F%D0%90%D0%A1%D0%9E%D0%98_(10_%D1%81%D0%B5%D0%BC%D0%B5%D1%81%D1%82%D1%80)&amp;diff=3850</id>
		<title>SQL-запросы к экзамену по СПАСОИ (10 семестр)</title>
		<link rel="alternate" type="text/html" href="https://iu5bmstu.ru/index.php?title=SQL-%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D1%8B_%D0%BA_%D1%8D%D0%BA%D0%B7%D0%B0%D0%BC%D0%B5%D0%BD%D1%83_%D0%BF%D0%BE_%D0%A1%D0%9F%D0%90%D0%A1%D0%9E%D0%98_(10_%D1%81%D0%B5%D0%BC%D0%B5%D1%81%D1%82%D1%80)&amp;diff=3850"/>
		<updated>2013-06-15T21:43:09Z</updated>

		<summary type="html">&lt;p&gt;81.9.52.28: /* Билет 17 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right; clear:both; margin-right:1.0em;&amp;quot;&amp;gt;__TOC__&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Билет экзамена по [[:Категория:Структурное проектирование АСОИ (10 семестр) | СПАСОИ]] состоит из двух частей:&lt;br /&gt;
# теория;&lt;br /&gt;
# SQL-запрос.&lt;br /&gt;
&lt;br /&gt;
На этой странице собраны все сформированные запросы по билетам.&lt;br /&gt;
&lt;br /&gt;
Странно, что ни в одном билете нет запроса с сортировкой результатов. Возможно, они буду в дополнительных заданиях.&lt;br /&gt;
&lt;br /&gt;
== Схема БД ==&lt;br /&gt;
&lt;br /&gt;
Схема БД используется всё [[СПАСОИ_(10)_-_Лекция_№8_-_SQL#Некоторые возможности языка SQL | та же]], что была в прошлом семестре и на лекциях.&lt;br /&gt;
&lt;br /&gt;
Для написания запросов и проверки их выполнения создана БД в СУБД [http://www.postgresql.org/ PostgreSQL].&lt;br /&gt;
&lt;br /&gt;
Скрипт создания можно загрузить [http://yadi.sk/d/ArwqOGAy5pPfi отсюда].&lt;br /&gt;
&lt;br /&gt;
=== Таблицы БД ===&lt;br /&gt;
&lt;br /&gt;
==== Поставщики ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.s;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika |       imya       | sostoyanie |   gorod&lt;br /&gt;
 -------------------+------------------+------------+------------&lt;br /&gt;
  S5                | Мелисандра       |      65000 | Мадрид&lt;br /&gt;
  S2                | Бран Старк       |      60000 | Мурманск&lt;br /&gt;
  S1                | Якен Хгар        |    1500000 | Йокогама&lt;br /&gt;
  S7                | Сирио Форель     |    1500000 | Йокогама&lt;br /&gt;
  S4                | Джейме Ланнистер |     750000 | Лондон&lt;br /&gt;
  S3                | Серсея Ланнистер |    1200000 | Лондон&lt;br /&gt;
  S8                | Тирион Ланнистер |       2571 | Манчестер&lt;br /&gt;
  S9                | Иванов           |      35000 | Мытищи&lt;br /&gt;
  S10               | Русе Болтон      |      44444 | Баренцбург&lt;br /&gt;
  S11               | Петров Иван      |      35000 | Мытищи&lt;br /&gt;
  S14               | Рендилл Тарли    |    1111111 | Прага&lt;br /&gt;
  S13               | Сэмвелл Тарли    |     999999 | Прага&lt;br /&gt;
  S6                | Оша              |            | Москва&lt;br /&gt;
  S16               | Ходор            |            | Москва&lt;br /&gt;
  S15               | Мелисса Флорент  |     888888 | Стокгольм&lt;br /&gt;
  S12               | Петров Пётр      |      35001 | Мытищи&lt;br /&gt;
  S17               | Томми Версетти   |  123456789 | Майами&lt;br /&gt;
  S18               | Безликий         |          1 | Йокогама&lt;br /&gt;
 (18 rows)&lt;br /&gt;
&lt;br /&gt;
==== Детали ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.p;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_detali |       nazvanie       |     cvet      | ves  |      gorod&lt;br /&gt;
 --------------+----------------------+---------------+------+-----------------&lt;br /&gt;
  P9           | подставка            | синий         |  400 | Нижний Новгород&lt;br /&gt;
  P10          | стойка               | синий         | 2000 | Нижний Новгород&lt;br /&gt;
  P11          | абажур               | синий         |  400 | Нижний Новгород&lt;br /&gt;
  P1           | гайка                | чёрный        |   20 | Лондон&lt;br /&gt;
  P3           | ось                  | белый         | 5000 | Эдинбург&lt;br /&gt;
  P4           | зубчатое колесо      | чёрный        |   50 | Эдинбург&lt;br /&gt;
  P6           | транзистор           | коричневый    |    2 | Токио&lt;br /&gt;
  P7           | печатная плата       | зелёный       |  200 | Токио&lt;br /&gt;
  P8           | диод                 | коричневый    |    1 | Токио&lt;br /&gt;
  P12          | универсальная деталь | универсальный |    1 | Париж&lt;br /&gt;
  P13          | уникальная деталь    | уникальный    |    1 | Бостон&lt;br /&gt;
  P14          | болт                 | серый         |   20 | Ижевск&lt;br /&gt;
  P15          | рама                 | красный       | 3000 | Манчестер&lt;br /&gt;
  P16          | колесо               | белый         | 1500 | Манчестер&lt;br /&gt;
  P5           | втулка               | серый         |  350 | Манчестер&lt;br /&gt;
  P17          | бумага               | белый         |    1 | Астрахань&lt;br /&gt;
  P18          | плитка               | белый         |  300 | Флоренция&lt;br /&gt;
  P19          | орнамент             | серый         |  800 | Флоренция&lt;br /&gt;
  P20          | уголок               | серый         |  100 | Флоренция&lt;br /&gt;
  P21          | гайка 01-01          | серебристый   |   20 | Клин&lt;br /&gt;
  P22          | усиленная рама       | красный       | 3200 | Череповец&lt;br /&gt;
  P23          | винт                 | розовый       |    5 | Ижевск&lt;br /&gt;
  P24          | труселя              | красный       |   20 | Челябинск&lt;br /&gt;
  P25          | штуцерная деталь     | коричневый    |  450 | Череповец&lt;br /&gt;
  P2           | шуруп                | чёрный        |    5 | Лондон&lt;br /&gt;
  P26          | лезвие               | бесцветный    |  120 | Йокогама&lt;br /&gt;
 (26 rows)&lt;br /&gt;
&lt;br /&gt;
==== Изделия ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.j;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_izdelia |       nazvanie        |      gorod&lt;br /&gt;
 ---------------+-----------------------+-----------------&lt;br /&gt;
  J1            | автомобиль            | Магнитогорск&lt;br /&gt;
  J2            | процессор             | Зеленоград&lt;br /&gt;
  J3            | торшер                | Нижний Новгород&lt;br /&gt;
  J4            | универсальное изделие | Париж&lt;br /&gt;
  J5            | уникальное изделие    | Бостон&lt;br /&gt;
  J6            | велосипед 01/23       | Манчестер&lt;br /&gt;
  J7            | изделие из болтов     | Челябинск&lt;br /&gt;
  J8            | шкаф                  | Ярославль&lt;br /&gt;
  J9            | рама 02-01            | Череповец&lt;br /&gt;
  J10           | книга                 | Астрахань&lt;br /&gt;
  J11           | панно 01-03           | Флоренция&lt;br /&gt;
  J12           | велосипед 03-04       | Клин&lt;br /&gt;
  J13           | рама 02-03            | Череповец&lt;br /&gt;
  J14           | штуцер 01-02          | Череповец&lt;br /&gt;
  J15           | велосипед 01-04       | Клин&lt;br /&gt;
  J16           | кружевное бельё       | Челябинск&lt;br /&gt;
  J17           | штуцер 01-03          | Череповец&lt;br /&gt;
  J18           | кинжал                | Йокогама&lt;br /&gt;
 (18 rows)&lt;br /&gt;
&lt;br /&gt;
==== Сборки ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.spj;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika | nomer_detali | nomer_izdelia | kolichestvo&lt;br /&gt;
 -------------------+--------------+---------------+-------------&lt;br /&gt;
  S1                | P6           | J2            |          20&lt;br /&gt;
  S1                | P7           | J2            |           5&lt;br /&gt;
  S2                | P1           | J1            |           4&lt;br /&gt;
  S6                | P4           | J1            |           2&lt;br /&gt;
  S6                | P5           | J1            |           6&lt;br /&gt;
  S3                | P9           | J3            |           1&lt;br /&gt;
  S4                | P10          | J3            |           1&lt;br /&gt;
  S5                | P11          | J3            |           1&lt;br /&gt;
  S2                | P4           | J1            |           8&lt;br /&gt;
  S6                | P3           | J1            |          50&lt;br /&gt;
  S7                | P8           | J2            |          25&lt;br /&gt;
  S1                | P12          | J4            |           1&lt;br /&gt;
  S2                | P12          | J4            |           1&lt;br /&gt;
  S3                | P12          | J4            |           1&lt;br /&gt;
  S4                | P12          | J4            |           1&lt;br /&gt;
  S5                | P12          | J4            |           1&lt;br /&gt;
  S7                | P12          | J4            |           1&lt;br /&gt;
  S7                | P2           | J1            |           1&lt;br /&gt;
  S6                | P2           | J1            |           9&lt;br /&gt;
  S6                | P12          | J4            |           7&lt;br /&gt;
  S1                | P13          | J5            |          14&lt;br /&gt;
  S6                | P14          | J1            |        9000&lt;br /&gt;
  S2                | P14          | J1            |           3&lt;br /&gt;
  S6                | P1           | J1            |          12&lt;br /&gt;
  S8                | P15          | J6            |           1&lt;br /&gt;
  S8                | P16          | J6            |           2&lt;br /&gt;
  S3                | P5           | J6            |          10&lt;br /&gt;
  S10               | P2           | J8            |           4&lt;br /&gt;
  S8                | P1           | J7            |          16&lt;br /&gt;
  S9                | P14          | J7            |           3&lt;br /&gt;
  S11               | P10          | J3            |           2&lt;br /&gt;
  S12               | P15          | J1            |           3&lt;br /&gt;
  S11               | P11          | J3            |           4&lt;br /&gt;
  S10               | P14          | J9            |           5&lt;br /&gt;
  S13               | P17          | J10           |        1001&lt;br /&gt;
  S14               | P17          | J10           |        1111&lt;br /&gt;
  S15               | P17          | J10           |        1010&lt;br /&gt;
  S5                | P18          | J11           |           9&lt;br /&gt;
  S5                | P19          | J11           |           1&lt;br /&gt;
  S5                | P20          | J11           |           4&lt;br /&gt;
  S9                | P14          | J8            |          25&lt;br /&gt;
  S12               | P21          | J12           |          15&lt;br /&gt;
  S11               | P22          | J13           |           9&lt;br /&gt;
  S11               | P1           | J14           |          26&lt;br /&gt;
  S12               | P1           | J14           |          13&lt;br /&gt;
  S12               | P2           | J14           |          54&lt;br /&gt;
  S12               | P23          | J4            |         101&lt;br /&gt;
  S12               | P16          | J15           |          40&lt;br /&gt;
  S7                | P21          | J12           |           3&lt;br /&gt;
  S8                | P21          | J12           |           4&lt;br /&gt;
  S9                | P21          | J12           |           5&lt;br /&gt;
  S1                | P24          | J16           |           1&lt;br /&gt;
  S1                | P15          | J6            |           3&lt;br /&gt;
  S4                | P25          | J17           |           1&lt;br /&gt;
  S17               | P16          | J1            |           4&lt;br /&gt;
  S18               | P26          | J18           |           1&lt;br /&gt;
 (56 rows)&lt;br /&gt;
&lt;br /&gt;
== Готовые запросы ==&lt;br /&gt;
&lt;br /&gt;
Если видите, что тот или иной запрос можно составить короче и рациональней - смело вносите правку.&lt;br /&gt;
&lt;br /&gt;
В трёх билетах в задании на запрос встречается формулировка &amp;quot;&#039;&#039;только и только&#039;&#039;&amp;quot;. Как оказалось, это означает следующее: если холодильники поставляет &#039;&#039;только и только&#039;&#039; Уася, то:&lt;br /&gt;
# кроме Уаси никто не поставляет холодильники;&lt;br /&gt;
# Уася не поставляет ничего, кроме холодильников.&lt;br /&gt;
&lt;br /&gt;
Существующие запросы, естественно, оказались неправильными и их пришлось переписать. &amp;lt;s&amp;gt;Великий и могучий русский языка, ну что за экономия на бумаге.&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Билет 1 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера поставщиков, которые поставляют, по крайней мере, все те детали, которые поставляет поставщик с номером &#039;S2&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nomer_postavshika&lt;br /&gt;
FROM spasoi_ekz.spj SPJX&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT nomer_detali&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJY&lt;br /&gt;
                  WHERE nomer_postavshika = &#039;S2&#039;&lt;br /&gt;
                    AND NOT EXISTS (&lt;br /&gt;
                                    SELECT *&lt;br /&gt;
                                    FROM spasoi_ekz.spj&lt;br /&gt;
                                    WHERE nomer_postavshika = SPJX.nomer_postavshika&lt;br /&gt;
                                      AND nomer_detali = SPJY.nomer_detali&lt;br /&gt;
                                   )&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika&lt;br /&gt;
 -------------------&lt;br /&gt;
  S6&lt;br /&gt;
  S2&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 2 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера деталей и общее их количество для всех номеров деталей, поставляемых более чем одним поставщиком.&lt;br /&gt;
&lt;br /&gt;
Текст запроса, каким его дал Григорьев на лекции, впоследствии исправив его:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali AS &amp;quot;Номер детали&amp;quot;,&lt;br /&gt;
       SUM(kolichestvo) AS &amp;quot;Сколько штук поставляется&amp;quot;,&lt;br /&gt;
       COUNT(DISTINCT nomer_postavshika) AS &amp;quot;Сколько у неё поставщиков&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_postavshika) &amp;gt; 1;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali AS &amp;quot;Номер детали&amp;quot;,&lt;br /&gt;
       kol AS &amp;quot;Сколько штук поставляется&amp;quot;&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT nomer_detali,&lt;br /&gt;
             SUM(kolichestvo) AS kol,&lt;br /&gt;
             COUNT(DISTINCT nomer_postavshika)&lt;br /&gt;
      FROM spasoi_ekz.spj&lt;br /&gt;
      GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_postavshika) &amp;gt; 1&lt;br /&gt;
     ) A;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер детали | Сколько штук поставляется | Сколько у неё поставщиков&lt;br /&gt;
 --------------+---------------------------+---------------------------&lt;br /&gt;
  P1           |                        71 |                         5&lt;br /&gt;
  P10          |                         3 |                         2&lt;br /&gt;
  P11          |                         5 |                         2&lt;br /&gt;
  P12          |                        13 |                         7&lt;br /&gt;
  P14          |                      9036 |                         4&lt;br /&gt;
  P15          |                         7 |                         3&lt;br /&gt;
  P16          |                        46 |                         3&lt;br /&gt;
  P17          |                      3122 |                         3&lt;br /&gt;
  P2           |                        68 |                         4&lt;br /&gt;
  P21          |                        27 |                         4&lt;br /&gt;
  P4           |                        10 |                         2&lt;br /&gt;
  P5           |                        16 |                         2&lt;br /&gt;
 (12 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 3 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера поставщиков, поставляющих детали с номером &#039;P1&#039; для какого-либо изделия в количестве (в поставке) большим, чем средний объём поставок деталей с номером &#039;P2&#039; для этого изделия.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT X.nomer_postavshika &lt;br /&gt;
FROM spasoi_ekz.spj X&lt;br /&gt;
WHERE X.nomer_detali = &#039;P1&#039;&lt;br /&gt;
  AND X.kolichestvo &amp;gt; (&lt;br /&gt;
                       SELECT AVG(kolichestvo)&lt;br /&gt;
                       FROM spasoi_ekz.spj&lt;br /&gt;
                       WHERE nomer_izdelia = X.nomer_izdelia&lt;br /&gt;
                         AND nomer_detali = &#039;P2&#039;&lt;br /&gt;
                      );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но длиннее и нерациональней&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nomer_postavshika&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT *&lt;br /&gt;
      FROM spasoi_ekz.spj&lt;br /&gt;
      WHERE nomer_izdelia IN(&lt;br /&gt;
                             SELECT nomer_izdelia&lt;br /&gt;
                             FROM spasoi_ekz.spj&lt;br /&gt;
                             WHERE nomer_detali = &#039;P1&#039;&lt;br /&gt;
                            )&lt;br /&gt;
        AND nomer_izdelia IN(&lt;br /&gt;
	                     SELECT nomer_izdelia&lt;br /&gt;
	                     FROM spasoi_ekz.spj&lt;br /&gt;
	                     WHERE nomer_detali = &#039;P2&#039;&lt;br /&gt;
	                    )&lt;br /&gt;
     ) A&lt;br /&gt;
WHERE nomer_detali = &#039;P1&#039; AND kolichestvo &amp;gt;&lt;br /&gt;
(&lt;br /&gt;
 SELECT AVG(kolichestvo)&lt;br /&gt;
 FROM (&lt;br /&gt;
       SELECT *&lt;br /&gt;
       FROM spasoi_ekz.spj&lt;br /&gt;
       WHERE nomer_izdelia IN(&lt;br /&gt;
                              SELECT nomer_izdelia&lt;br /&gt;
                              FROM spasoi_ekz.spj&lt;br /&gt;
                              WHERE nomer_detali = &#039;P1&#039;&lt;br /&gt;
                             )&lt;br /&gt;
         AND nomer_izdelia IN(&lt;br /&gt;
                              SELECT nomer_izdelia&lt;br /&gt;
                              FROM spasoi_ekz.spj&lt;br /&gt;
                              WHERE nomer_detali = &#039;P2&#039;&lt;br /&gt;
                             )&lt;br /&gt;
      ) B&lt;br /&gt;
 WHERE nomer_detali = &#039;P2&#039;&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika&lt;br /&gt;
 -------------------&lt;br /&gt;
  S6&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 4 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера изделий, для которых детали поставляет только поставщик с номером ‘S1’.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_izdelia&lt;br /&gt;
FROM spasoi_ekz.spj X&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT *&lt;br /&gt;
                  FROM spasoi_ekz.spj&lt;br /&gt;
                  WHERE nomer_postavshika != &#039;S1&#039;&lt;br /&gt;
                    AND X.nomer_izdelia = nomer_izdelia&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но без EXISTS&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nomer_izdelia&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
WHERE nomer_izdelia IN(&lt;br /&gt;
                       SELECT nomer_izdelia&lt;br /&gt;
                       FROM spasoi_ekz.spj&lt;br /&gt;
                       WHERE nomer_postavshika = &#039;S1&#039;&lt;br /&gt;
                      )&lt;br /&gt;
  AND nomer_izdelia NOT IN(&lt;br /&gt;
                           SELECT nomer_izdelia&lt;br /&gt;
                           FROM spasoi_ekz.spj&lt;br /&gt;
                           WHERE nomer_postavshika != &#039;S1&#039;&lt;br /&gt;
                          );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_izdelia&lt;br /&gt;
 ---------------&lt;br /&gt;
  J5&lt;br /&gt;
  J16&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 5 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих детали с названием &amp;quot;Болт&amp;quot; в количестве (в поставке) большим, чем средний объём всех поставок деталей с номером &#039;P1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                           ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                        JOIN spasoi_ekz.p P&lt;br /&gt;
                           ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                              AND nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
WHERE kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT AVG(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj&lt;br /&gt;
                     WHERE SPJ.nomer_detali = &#039;P1&#039;&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но без JOIN&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s&lt;br /&gt;
WHERE nomer_postavshika IN (&lt;br /&gt;
                            SELECT nomer_postavshika&lt;br /&gt;
                            FROM spasoi_ekz.spj&lt;br /&gt;
                            WHERE nomer_detali = (&lt;br /&gt;
                                                  SELECT nomer_detali&lt;br /&gt;
                                                  FROM spasoi_ekz.p&lt;br /&gt;
                                                  WHERE LOWER(nazvanie) = LOWER(&#039;Болт&#039;)&lt;br /&gt;
                                                 )&lt;br /&gt;
                              AND kolichestvo &amp;gt; (&lt;br /&gt;
                                                 SELECT AVG(kolichestvo)&lt;br /&gt;
                                                 FROM spasoi_ekz.spj&lt;br /&gt;
                                                 WHERE nomer_detali = &#039;P1&#039;&lt;br /&gt;
                                                )&lt;br /&gt;
                           );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  imya&lt;br /&gt;
 ------&lt;br /&gt;
  Оша&lt;br /&gt;
  Иванов&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 6 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия деталей, поставляемых поставщиком, проживающим в том же городе, где изготавливаются эти детали, для изделия с названием ‘Велосипед 01/23’.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT P.nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                        JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                        JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
WHERE S.gorod = P.gorod&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Велосипед 01/23&#039;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос без JOIN&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nazvanie&lt;br /&gt;
FROM spasoi_ekz.S S, spasoi_ekz.p P, spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE S.gorod = P.gorod&lt;br /&gt;
  AND P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
  AND S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
  AND nomer_izdelia = (&lt;br /&gt;
                       SELECT nomer_izdelia&lt;br /&gt;
                       FROM spasoi_ekz.j&lt;br /&gt;
                       WHERE nazvanie = LOWER(&#039;Велосипед 01/23&#039;)&lt;br /&gt;
                      );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nazvanie&lt;br /&gt;
 ----------&lt;br /&gt;
  рама&lt;br /&gt;
  колесо&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 7 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия изделий, куда входят детали с названием &#039;Болт&#039;, поставляемых поставщиками с именем &#039;Иванов&#039;, в количестве (в поставке) большим, чем средний объём поставок для этого изделия.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT J.nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                        JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                        JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
WHERE imya LIKE &#039;%Иванов%&#039;&lt;br /&gt;
  AND P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
  AND kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT AVG(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj X&lt;br /&gt;
                     WHERE SPJ.nomer_izdelia = X.nomer_izdelia&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё один вариант запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie&lt;br /&gt;
FROM spasoi_ekz.j&lt;br /&gt;
WHERE nomer_izdelia IN (&lt;br /&gt;
                        SELECT nomer_izdelia&lt;br /&gt;
                        FROM (spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                                                   ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                                                      AND imya LIKE &#039;%Иванов%&#039;&lt;br /&gt;
                                                 JOIN spasoi_ekz.p P&lt;br /&gt;
                                                   ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                                      AND nazvanie = LOWER(&#039;Болт&#039;)) A&lt;br /&gt;
                        WHERE kolichestvo &amp;gt; (&lt;br /&gt;
                                             SELECT AVG(kolichestvo)&lt;br /&gt;
                                             FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                                                       ON SPJ.nomer_izdelia = A.nomer_izdelia&lt;br /&gt;
                                            )&lt;br /&gt;
                       );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;И ещё вариант этого же запроса, но длиннее и нерациональней&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT J.nazvanie, kolichestvo&lt;br /&gt;
      FROM spasoi_ekz.s S, spasoi_ekz.p P, spasoi_ekz.j J, spasoi_ekz.spj SPJ&lt;br /&gt;
      WHERE J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
        AND P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
        AND P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
        AND S.imya LIKE &#039;%Иванов%&#039;&lt;br /&gt;
        AND S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
     ) A&lt;br /&gt;
WHERE kolichestvo &amp;gt;&lt;br /&gt;
(&lt;br /&gt;
 SELECT AVG(kolichestvo)&lt;br /&gt;
 FROM spasoi_ekz.spj&lt;br /&gt;
 WHERE nomer_izdelia IN(&lt;br /&gt;
                        SELECT J.nomer_izdelia&lt;br /&gt;
                        FROM spasoi_ekz.s S, spasoi_ekz.p P, spasoi_ekz.j J, spasoi_ekz.spj SPJ&lt;br /&gt;
                        WHERE J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
                          AND P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                          AND P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
                          AND S.imya LIKE &#039;%Иванов%&#039;&lt;br /&gt;
                          AND S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
                       )&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
      nazvanie&lt;br /&gt;
 -------------------&lt;br /&gt;
  шкаф&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 8 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера изделий и общее количество деталей для них, поставляемых поставщиками с именем &#039;Петров&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_izdelia AS &amp;quot;Номер изделия&amp;quot;, SUM(kolichestvo) AS &amp;quot;Количество деталей&amp;quot; &lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                             -- так как &amp;quot;поставщикАМИ&amp;quot; и возможны&lt;br /&gt;
                             -- Иван Петров и Петров Иван, то LIKE %Петров%&lt;br /&gt;
                             AND imya LIKE &#039;%Петров%&#039;&lt;br /&gt;
GROUP BY nomer_izdelia;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер изделия | Количество деталей&lt;br /&gt;
 ---------------+--------------------&lt;br /&gt;
  J4            |                101&lt;br /&gt;
  J3            |                  6&lt;br /&gt;
  J13           |                  9&lt;br /&gt;
  J15           |                 40&lt;br /&gt;
  J1            |                  3&lt;br /&gt;
  J12           |                 15&lt;br /&gt;
  J14           |                 93&lt;br /&gt;
 (7 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 9 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера деталей и общее их количество для всех номеров деталей, которые входят только в одно изделие.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali, SUM(kolichestvo)&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_izdelia) = 1;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali, kol FROM (&lt;br /&gt;
       SELECT nomer_detali, SUM(kolichestvo) AS kol, COUNT(DISTINCT nomer_izdelia) = 1&lt;br /&gt;
       FROM spasoi_ekz.spj&lt;br /&gt;
       GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_izdelia) = 1&lt;br /&gt;
    ) A;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_detali | sum&lt;br /&gt;
 --------------+------&lt;br /&gt;
  P10          |    3&lt;br /&gt;
  P11          |    5&lt;br /&gt;
  P12          |   13&lt;br /&gt;
  P13          |   14&lt;br /&gt;
  P17          | 3122&lt;br /&gt;
  P18          |    9&lt;br /&gt;
  P19          |    1&lt;br /&gt;
  P20          |    4&lt;br /&gt;
  P21          |   27&lt;br /&gt;
  P22          |    9&lt;br /&gt;
  P23          |  101&lt;br /&gt;
  P24          |    1&lt;br /&gt;
  P25          |    1&lt;br /&gt;
  P26          |    1&lt;br /&gt;
  P3           |   50&lt;br /&gt;
  P4           |   10&lt;br /&gt;
  P6           |   20&lt;br /&gt;
  P7           |    5&lt;br /&gt;
  P8           |   25&lt;br /&gt;
  P9           |    1&lt;br /&gt;
 (20 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 10 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих детали с названием &#039;Болт&#039; для изделия с названием &#039;Рама 02-01&#039; в количестве (в поставке) большим, чем минимальное значение поставки детали с номером &#039;P1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
			   ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
			      AND J.nazvanie = LOWER(&#039;Рама 02-01&#039;)&lt;br /&gt;
			 JOIN spasoi_ekz.p P&lt;br /&gt;
			   ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
			      AND P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
			 JOIN spasoi_ekz.s S&lt;br /&gt;
			   ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE kolichestvo &amp;gt; (&lt;br /&gt;
		     SELECT MIN(kolichestvo)&lt;br /&gt;
		     FROM spasoi_ekz.spj &lt;br /&gt;
		     WHERE nomer_detali = &#039;P1&#039;&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Русе Болтон&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 11 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия городов и суммарное состояние проживающих в каждом городе поставщиков, у которых минимальный объём поставки деталей больше 1000.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT gorod, SUM(sostoyanie)&lt;br /&gt;
FROM spasoi_ekz.s S&lt;br /&gt;
WHERE (	&lt;br /&gt;
       SELECT MIN(kolichestvo)	&lt;br /&gt;
       FROM spasoi_ekz.spj X	&lt;br /&gt;
       WHERE X.nomer_postavshika = S.nomer_postavshika		&lt;br /&gt;
      ) &amp;gt; 1000&lt;br /&gt;
GROUP BY gorod;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Вариант подлиннее для тех, кто не ищет лёгких путей&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT gorod, SUM(sostoyanie)&lt;br /&gt;
FROM spasoi_ekz.s&lt;br /&gt;
WHERE nomer_postavshika IN (&lt;br /&gt;
                            SELECT nomer_postavshika&lt;br /&gt;
                            FROM spasoi_ekz.spj&lt;br /&gt;
                            GROUP BY nomer_postavshika HAVING MIN(kolichestvo) &amp;gt; 1000&lt;br /&gt;
                           )&lt;br /&gt;
GROUP BY gorod;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;!-- а этот запрос выполняет не совсем то и не правильно&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT gorod, sost&lt;br /&gt;
FROM (&lt;br /&gt;
SELECT gorod, SUM(sostoyanie) AS sost, SUM(SPJ.kolichestvo)&lt;br /&gt;
FROM spasoi_ekz.spj, spasoi_ekz.s&lt;br /&gt;
WHERE S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
GROUP BY S.gorod HAVING SUM(SPJ.kolichestvo) &amp;gt; 1000&lt;br /&gt;
) A;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; --&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
    gorod   |   sum&lt;br /&gt;
 -----------+---------&lt;br /&gt;
  Прага     | 2111110&lt;br /&gt;
  Стокгольм |  888888&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 12 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера деталей, поставляемых для какого-либо изделия поставщиком, проживающим в том же городе, где изготавливается это изделие.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali&lt;br /&gt;
FROM spasoi_ekz.spj SPJ, spasoi_ekz.s S, spasoi_ekz.j J&lt;br /&gt;
WHERE SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
  AND S.gorod = J.gorod&lt;br /&gt;
  AND J.nomer_izdelia = SPJ.nomer_izdelia;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_detali&lt;br /&gt;
 --------------&lt;br /&gt;
  P15&lt;br /&gt;
  P16&lt;br /&gt;
  P26&lt;br /&gt;
 (3 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 13 ===&lt;br /&gt;
&lt;br /&gt;
Написать &amp;lt;u&amp;gt;один&amp;lt;/u&amp;gt; запрос SELECT: выдать количества строк в таблице S (Поставщик) 1) с пустыми значениями и 2) непустыми значениями в столбце Состояние.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT COUNT(*) - COUNT(sostoyanie) AS &amp;quot;С пустым состоянием&amp;quot;, &lt;br /&gt;
       COUNT(sostoyanie) AS &amp;quot;С не пустым состоянием&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.s;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но длиннее и нерациональней&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SELECT COUNT(Snull.*) AS &amp;quot;С пустым состоянием&amp;quot;, COUNT(Snotnull.sostoyanie) AS &amp;quot;С не пустым состоянием&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.s Snull RIGHT OUTER JOIN spasoi_ekz.s Snotnull&lt;br /&gt;
                                      ON Snull.nomer_postavshika = Snotnull.nomer_postavshika&lt;br /&gt;
                                         AND Snull.sostoyanie IS NULL;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  С пустым состоянием | С не пустым состоянием&lt;br /&gt;
 ---------------------+-----------------------&lt;br /&gt;
                    2 |                    16&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 14 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют детали только и только для изделия с номером &#039;J1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj A JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON A.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE nomer_izdelia = &#039;J1&#039;&lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT nomer_postavshika&lt;br /&gt;
                  FROM spasoi_ekz.spj&lt;br /&gt;
                  WHERE nomer_izdelia != &#039;J1&#039;&lt;br /&gt;
                    AND nomer_postavshika = A.nomer_postavshika&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       imya&lt;br /&gt;
 ----------------&lt;br /&gt;
  Томми Версетти&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 15 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать наименования изделий, для которых детали поставляют только те поставщики, у которых состояние больше 1000000 у.е.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT j.nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
		  SELECT *&lt;br /&gt;
		  FROM spasoi_ekz.spj X JOIN spasoi_ekz.s S&lt;br /&gt;
		                          ON X.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
		  WHERE sostoyanie &amp;lt;= 1000000&lt;br /&gt;
		  AND X.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Вариант этого запроса без NOT EXISTS&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                        JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
WHERE sostoyanie &amp;gt; 1000000&lt;br /&gt;
  AND SPJ.nomer_izdelia NOT IN (&lt;br /&gt;
                                SELECT nomer_izdelia&lt;br /&gt;
                                FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                                                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                                WHERE sostoyanie &amp;lt; 1000000&lt;br /&gt;
                               );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       nazvanie&lt;br /&gt;
 --------------------&lt;br /&gt;
  кружевное бельё&lt;br /&gt;
  уникальное изделие&lt;br /&gt;
  процессор&lt;br /&gt;
 (3 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 16 ===&lt;br /&gt;
Написать запрос SELECT: выдать цвета и для каждого цвета общее количество деталей, входящих в изделие с названием &#039;Панно 01-03&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT cvet AS &amp;quot;Цвет&amp;quot;, SUM(kolichestvo) AS &amp;quot;Деталей&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
			     AND J.nazvanie = LOWER(&#039;Панно 01-03&#039;)&lt;br /&gt;
			JOIN spasoi_ekz.P P&lt;br /&gt;
			  ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
GROUP BY cvet;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Цвет  | Деталей&lt;br /&gt;
 -------+---------&lt;br /&gt;
  белый |       9&lt;br /&gt;
  серый |       5&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 17 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера поставщиков и количество сделанных ими поставок при условии, что среднее число деталей во всех этих поставках больше 1000.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_postavshika AS &amp;quot;Номер поставщика&amp;quot;, COUNT(*) AS &amp;quot;Количество поставок&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
WHERE (&lt;br /&gt;
       SELECT AVG(kolichestvo)&lt;br /&gt;
       FROM spasoi_ekz.spj X&lt;br /&gt;
       WHERE X.nomer_postavshika = spj.nomer_postavshika&lt;br /&gt;
       ) &amp;gt; 1000&lt;br /&gt;
GROUP BY nomer_postavshika;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nom AS &amp;quot;Номер поставщика&amp;quot;, cnt AS &amp;quot;Количество поставок&amp;quot;&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT S.nomer_postavshika AS nom,&lt;br /&gt;
             COUNT(SPJ.nomer_postavshika) AS cnt,&lt;br /&gt;
             AVG(SPJ.kolichestvo) AS kol&lt;br /&gt;
      FROM spasoi_ekz.s S, spasoi_ekz.spj SPJ&lt;br /&gt;
      WHERE S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
      GROUP BY S.nomer_postavshika&lt;br /&gt;
     ) A&lt;br /&gt;
WHERE kol &amp;gt; 1000;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос немного попроще&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_postavshika AS &amp;quot;Номер поставщика&amp;quot;, COUNT(*) AS &amp;quot;Количество поставок&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
WHERE nomer_postavshika IN (&lt;br /&gt;
                            SELECT nomer_postavshika&lt;br /&gt;
                            FROM spasoi_ekz.spj&lt;br /&gt;
                            GROUP BY nomer_postavshika HAVING AVG(kolichestvo) &amp;gt; 1000&lt;br /&gt;
                           )&lt;br /&gt;
GROUP BY nomer_postavshika;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер поставщика | Количество поставок&lt;br /&gt;
 ------------------+---------------------&lt;br /&gt;
  S13              |                   1&lt;br /&gt;
  S6               |                   7&lt;br /&gt;
  S14              |                   1&lt;br /&gt;
  S15              |                   1&lt;br /&gt;
 (4 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 18 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, имеющих состояние больше 1000 и поставляющих деталь с названием &#039;Гайка 01-01&#039; для изделия с названием &#039;Велосипед 03-04&#039; в количестве (в поставке) большим, чем средний объём поставки, выполненной поставщиками с именем &#039;Иванов&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:2nd dufficulty.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;5px&amp;quot;&amp;gt;&#039;&#039;&#039;Второй по сложности запрос экзамена!&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;4px&amp;quot;&amp;gt;&#039;&#039;&#039;Вот уж не свезло, так не свезло&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                    JOIN spasoi_ekz.j J&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
WHERE sostoyanie &amp;gt; 1000&lt;br /&gt;
  AND P.nazvanie = LOWER(&#039;Гайка 01-01&#039;)&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Велосипед 03-04&#039;)&lt;br /&gt;
  AND kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT AVG(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                       ON SPJ.nomer_postavshika = S.nomer_postavshika &lt;br /&gt;
                     WHERE S.imya = &#039;Иванов&#039;&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Пётр&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 19 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия красных деталей, которые входят только в изделие с названием &#039;Рама 02-03&#039; в количестве, меньшем 10 единиц в поставке.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT X.nazvanie&lt;br /&gt;
FROM spasoi_ekz.p X JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_detali = X.nomer_detali&lt;br /&gt;
                    JOIN spasoi_ekz.j J&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
WHERE X.cvet = &#039;красный&#039;&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Рама 02-03&#039;)&lt;br /&gt;
  AND kolichestvo &amp;lt; 10&lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT J.nomer_izdelia&lt;br /&gt;
                  FROM spasoi_ekz.j J JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                                        ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                  WHERE J.nazvanie != LOWER(&#039;Рама 02-03&#039;)&lt;br /&gt;
                    AND X.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант этого же запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT P.nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND cvet = &#039;красный&#039;&lt;br /&gt;
                        JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                              AND J.nazvanie = LOWER(&#039;Рама 02-03&#039;)&lt;br /&gt;
WHERE kolichestvo &amp;lt; 10&lt;br /&gt;
  AND SPJ.nomer_detali NOT IN (&lt;br /&gt;
                               SELECT nomer_detali&lt;br /&gt;
                               FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                                         ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                                                            AND J.nazvanie != LOWER(&#039;Рама 02-03&#039;)&lt;br /&gt;
                              );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     nazvanie&lt;br /&gt;
 ----------------&lt;br /&gt;
  усиленная рама&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 20 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих только белые детали.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT *&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                                            ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                  WHERE nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    AND P.cvet != &#039;белый&#039;&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё один вариант этого же запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND cvet = &#039;белый&#039;&lt;br /&gt;
                        JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE S.nomer_postavshika NOT IN (&lt;br /&gt;
                                  SELECT nomer_postavshika&lt;br /&gt;
                                  FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                                                            ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                                               AND cvet != &#039;белый&#039;&lt;br /&gt;
                                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;И ещё один вариант этого же запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s&lt;br /&gt;
WHERE nomer_postavshika NOT IN  (&lt;br /&gt;
                                 SELECT spj.nomer_postavshika&lt;br /&gt;
                                 FROM spasoi_ekz.spj SPJ, spasoi_ekz.p P&lt;br /&gt;
                                 WHERE SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                   AND p.cvet != &#039;белый&#039;&lt;br /&gt;
                                )&lt;br /&gt;
  AND nomer_postavshika  IN (&lt;br /&gt;
                             SELECT spj.nomer_postavshika&lt;br /&gt;
                             FROM spasoi_ekz.spj SPJ, spasoi_ekz.p P&lt;br /&gt;
                             WHERE SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                               AND p.cvet = &#039;белый&#039;&lt;br /&gt;
                            );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       imya&lt;br /&gt;
 -----------------&lt;br /&gt;
  Рендилл Тарли&lt;br /&gt;
  Сэмвелл Тарли&lt;br /&gt;
  Мелисса Флорент&lt;br /&gt;
  Томми Версетти&lt;br /&gt;
 (4 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 21 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия изделий, для которых детали поставляет только и только поставщик с номером &#039;S1&#039;.&lt;br /&gt;
&lt;br /&gt;
Чтобы продемонстрировать выполнение запроса наглядно, возьмём поставщика не &#039;S1&#039;, а &#039;S18&#039;, который был создан специально для этого запроса. Если оставить &#039;S1&#039;, то наглядности не получится, так как по нашей схеме БД этот поставщик не попадает под условие &amp;quot;&#039;&#039;только и только&#039;&#039;&amp;quot;, и запрос вернёт пустой результат.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie&lt;br /&gt;
FROM spasoi_ekz.j J, spasoi_ekz.SPJ SPJ&lt;br /&gt;
WHERE J.nomer_izdelia = SPJ.nomer_izdelia &lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT *&lt;br /&gt;
                  FROM spasoi_ekz.spj&lt;br /&gt;
                  WHERE nomer_postavshika != &#039;S18&#039; AND nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                 )&lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT *&lt;br /&gt;
                  FROM spasoi_ekz.spj&lt;br /&gt;
                  WHERE nomer_postavshika = &#039;S18&#039; AND nomer_izdelia != J.nomer_izdelia&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       nazvanie&lt;br /&gt;
 --------------------&lt;br /&gt;
  кинжал&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 22 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют только детали с номером &#039;P1&#039; для изделия с именем &#039;Штуцер 01-02&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- неверный запрос - номер изделия, а не название&lt;br /&gt;
SELECT imya FROM S X&lt;br /&gt;
JOIN SPJ Y ON X.nomer_postavshika=Y.nomer_postavshika&lt;br /&gt;
WHERE X.nomer_postavshika NOT IN (&lt;br /&gt;
                  SELECT DISTINCT nomer_postavshika FROM SPJ Z&lt;br /&gt;
                  WHERE Z.nomer_izdelia != &#039;Штуцер 01-02&#039;&lt;br /&gt;
                  AND Z.nomer_detali!=&#039;P1&#039;);--&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                             AND J.nazvanie = LOWER(&#039;штуцер 01-02&#039;)&lt;br /&gt;
                        JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND SPJ.nomer_detali = &#039;P1&#039;&lt;br /&gt;
                        JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE SPJ.nomer_postavshika NOT IN (&lt;br /&gt;
                                    SELECT nomer_postavshika&lt;br /&gt;
                                    FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                                              ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                                                                 AND J.nazvanie = LOWER(&#039;штуцер 01-02&#039;)&lt;br /&gt;
                                                            JOIN spasoi_ekz.p P&lt;br /&gt;
                                                              ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                                                 AND SPJ.nomer_detali != &#039;P1&#039;&lt;br /&gt;
                              );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Иван&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 23 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют деталь с названием &#039;Винт&#039; в количестве большим 100 единиц в одной поставке и имеют состояние больше среднего по их родному городу.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT S.imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
WHERE P.nazvanie = LOWER(&#039;Винт&#039;)&lt;br /&gt;
  AND SPJ.kolichestvo &amp;gt; 100&lt;br /&gt;
  AND S.sostoyanie &amp;gt; (&lt;br /&gt;
                      SELECT AVG(SS.sostoyanie)&lt;br /&gt;
                      FROM spasoi_ekz.s SS&lt;br /&gt;
                      WHERE SS.gorod = S.gorod&lt;br /&gt;
                     );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Пётр&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 24 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать наименования деталей и общее их количество для всех наименований деталей, изготавливаемых в одном городе.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- С этим запросом возникла неожиданная проблема - задание то ли неполное, то ли неправильное, потому что нельзя однозначно сказать, что по нему требуется сделать.&lt;br /&gt;
&lt;br /&gt;
Так что тут несколько вариантов запросов (кто как понял).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Первый вариант запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie, kol&lt;br /&gt;
FROM spasoi_ekz.p A, (&lt;br /&gt;
                      SELECT X.gorod, SUM(kolichestvo) as kol&lt;br /&gt;
                      FROM spasoi_ekz.p X, spasoi_ekz.spj Y&lt;br /&gt;
                      WHERE Y.nomer_detali = X.nomer_detali&lt;br /&gt;
                      GROUP BY X.gorod&lt;br /&gt;
                     ) B&lt;br /&gt;
WHERE A.gorod = B.gorod;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
        nazvanie       | kol&lt;br /&gt;
 ----------------------+------&lt;br /&gt;
  подставка            |    9&lt;br /&gt;
  стойка               |    9&lt;br /&gt;
  абажур               |    9&lt;br /&gt;
  гайка                |  139&lt;br /&gt;
  ось                  |   60&lt;br /&gt;
  зубчатое колесо      |   60&lt;br /&gt;
  транзистор           |   50&lt;br /&gt;
  печатная плата       |   50&lt;br /&gt;
  диод                 |   50&lt;br /&gt;
  универсальная деталь |   13&lt;br /&gt;
  уникальная деталь    |   14&lt;br /&gt;
  болт                 | 9137&lt;br /&gt;
  рама                 |   69&lt;br /&gt;
  колесо               |   69&lt;br /&gt;
  втулка               |   69&lt;br /&gt;
  бумага               | 3122&lt;br /&gt;
  плитка               |   14&lt;br /&gt;
  орнамент             |   14&lt;br /&gt;
  уголок               |   14&lt;br /&gt;
  гайка 01-01          |   27&lt;br /&gt;
  усиленная рама       |   10&lt;br /&gt;
  винт                 | 9137&lt;br /&gt;
  труселя              |    1&lt;br /&gt;
  штуцерная деталь     |   10&lt;br /&gt;
  шуруп                |  139&lt;br /&gt;
 (25 rows)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
и --&amp;gt;&lt;br /&gt;
В уточнение задания Григорьев сказал следующее: &amp;quot;&#039;&#039;Следует учесть, что в качестве наименования города может выступать переменная, в которую в некоторой программе должно быть занесено конкретное значение перед выполнением запроса&#039;&#039;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
То есть, вообще говоря, задание на запрос неполное, и его можно трактовать так: выдать наименования деталей и общее их количество для всех наименований деталей, изготавливаемых в городе &amp;lt;code&amp;gt;%НАЗВАНИЕГОРОДА%&amp;lt;/code&amp;gt;. Вот эта переменная задаётся где-то в программе, а в БД идёт запрос с уже подставленным конкретным названием. &lt;br /&gt;
&lt;br /&gt;
Этот вариант запроса составлен, например, для Лондона. &lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie, SUM(kolichestvo)&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
WHERE gorod = &#039;Лондон&#039;&lt;br /&gt;
GROUP BY nazvanie;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nazvanie | sum&lt;br /&gt;
 ----------+-----&lt;br /&gt;
  гайка    |  71&lt;br /&gt;
  шуруп    |  68&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 25 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих хотя бы одну белую деталь для изделия с названием &#039;Велосипед 01-04&#039; с объёмом поставки большим, чем средний объём поставки этого поставщика.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                    JOIN spasoi_ekz.j J&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
WHERE cvet = &#039;белый&#039;&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Велосипед 01-04&#039;)&lt;br /&gt;
  AND kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT AVG(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj SPJ&lt;br /&gt;
                     WHERE SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Пётр&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 26 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера красных деталей и количество поставок этих деталей.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT P.nomer_detali AS &amp;quot;Номер детали&amp;quot;, COUNT(kolichestvo) AS &amp;quot;Количество поставок с ней&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.p P, spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
  AND cvet = &#039;красный&#039;&lt;br /&gt;
GROUP BY P.nomer_detali;   &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос через JOIN&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT SPJ.nomer_detali AS &amp;quot;Номер детали&amp;quot;, COUNT(kolichestvo) AS &amp;quot;Количество поставок с ней&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND cvet = &#039;красный&#039;&lt;br /&gt;
GROUP BY SPJ.nomer_detali;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер детали | Количество поставок с ней&lt;br /&gt;
 --------------+---------------------------&lt;br /&gt;
  P15          |                         3&lt;br /&gt;
  P22          |                         1&lt;br /&gt;
  P24          |                         1&lt;br /&gt;
 (3 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 27 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать наименования городов и среднее состояние поставщиков для каждого города, поставляющих детали с названием &#039;Гайка 01-01&#039; для изделия с названием &#039;Велосипед 03-04&#039; в количестве (в поставке) большим, чем минимальный объём поставки, выполненной поставщиком с номером &#039;S1&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:1st dufficulty.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;7px&amp;quot;&amp;gt;&#039;&#039;&#039;Сложнейший запрос экзамена!&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;5px&amp;quot;&amp;gt;&#039;&#039;&#039;Сохрани Джа, вытащить такое&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT S.gorod AS &amp;quot;Город&amp;quot;, AVG(S.sostoyanie) AS &amp;quot;Среднее состояние&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                    JOIN spasoi_ekz.j J&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
WHERE P.nazvanie = LOWER(&#039;Гайка 01-01&#039;)&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Велосипед 03-04&#039;)&lt;br /&gt;
  AND kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT MIN(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj&lt;br /&gt;
                     WHERE nomer_postavshika = &#039;S1&#039;&lt;br /&gt;
                    )&lt;br /&gt;
GROUP BY S.gorod;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
    Город   |   Среднее состояние&lt;br /&gt;
 -----------+-----------------------&lt;br /&gt;
  Мытищи    |    35000.500000000000&lt;br /&gt;
  Йокогама  |  1500000.000000000000&lt;br /&gt;
  Манчестер | 2571.0000000000000000&lt;br /&gt;
 (3 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 28 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия изделий, куда входит хотя бы одна красная деталь весом больше 10 граммов, поставляемая только поставщиком с номером &#039;S1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT J.nazvanie&lt;br /&gt;
FROM spasoi_ekz.j J JOIN spasoi_ekz.spj SPJ1&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ1.nomer_izdelia&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ1.nomer_detali&lt;br /&gt;
WHERE P.ves &amp;gt; 10&lt;br /&gt;
 AND P.cvet = &#039;красный&#039;&lt;br /&gt;
 AND NOT EXISTS (&lt;br /&gt;
                 SELECT SPJ2.nomer_postavshika&lt;br /&gt;
                 FROM spasoi_ekz.spj SPJ2         &lt;br /&gt;
                 WHERE SPJ2.nomer_detali = P.nomer_detali&lt;br /&gt;
	 	   AND SPJ2.nomer_postavshika != &#039;S1&#039;&lt;br /&gt;
                );                     &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     nazvanie&lt;br /&gt;
 -----------------&lt;br /&gt;
  кружевное бельё&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 29 ===&lt;br /&gt;
Написать запрос SELECT: выдать названия деталей, которые входят только и только в состав изделия с названием &#039;Штуцер 01-03&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie&lt;br /&gt;
FROM spasoi_ekz.p P, spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE P.nomer_detali = SPJ.nomer_detali &lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT SPJ.nomer_izdelia&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                            ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
                  WHERE (&lt;br /&gt;
                         J.nazvanie != LOWER(&#039;Штуцер 01-03&#039;)&lt;br /&gt;
                         AND&lt;br /&gt;
                         SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                        )&lt;br /&gt;
                     OR (&lt;br /&gt;
                         J.nazvanie = LOWER(&#039;Штуцер 01-03&#039;)&lt;br /&gt;
                         AND&lt;br /&gt;
                         SPJ.nomer_detali != P.nomer_detali&lt;br /&gt;
                        )&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
      nazvanie&lt;br /&gt;
 ------------------&lt;br /&gt;
  штуцерная деталь&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 30 ===&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют, по крайней мере, все те детали, которые поставляет поставщик с номером &#039;S2&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT imya&lt;br /&gt;
FROM spasoi_ekz.s S&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT nomer_detali&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJY&lt;br /&gt;
                  WHERE nomer_postavshika = &#039;S2&#039;&lt;br /&gt;
                    AND NOT EXISTS (&lt;br /&gt;
                                    SELECT *&lt;br /&gt;
                                    FROM spasoi_ekz.spj&lt;br /&gt;
                                    WHERE nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                                      AND nomer_detali = SPJY.nomer_detali&lt;br /&gt;
                                   )&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  imya&lt;br /&gt;
 ------------&lt;br /&gt;
  Оша&lt;br /&gt;
  Бран Старк&lt;br /&gt;
 (2 rows)&lt;br /&gt;
[[Категория:Структурное проектирование АСОИ (10 семестр)]]&lt;/div&gt;</summary>
		<author><name>81.9.52.28</name></author>
	</entry>
	<entry>
		<id>https://iu5bmstu.ru/index.php?title=SQL-%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D1%8B_%D0%BA_%D1%8D%D0%BA%D0%B7%D0%B0%D0%BC%D0%B5%D0%BD%D1%83_%D0%BF%D0%BE_%D0%A1%D0%9F%D0%90%D0%A1%D0%9E%D0%98_(10_%D1%81%D0%B5%D0%BC%D0%B5%D1%81%D1%82%D1%80)&amp;diff=3849</id>
		<title>SQL-запросы к экзамену по СПАСОИ (10 семестр)</title>
		<link rel="alternate" type="text/html" href="https://iu5bmstu.ru/index.php?title=SQL-%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D1%8B_%D0%BA_%D1%8D%D0%BA%D0%B7%D0%B0%D0%BC%D0%B5%D0%BD%D1%83_%D0%BF%D0%BE_%D0%A1%D0%9F%D0%90%D0%A1%D0%9E%D0%98_(10_%D1%81%D0%B5%D0%BC%D0%B5%D1%81%D1%82%D1%80)&amp;diff=3849"/>
		<updated>2013-06-15T19:38:15Z</updated>

		<summary type="html">&lt;p&gt;81.9.52.28: /* Билет 20 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right; clear:both; margin-right:1.0em;&amp;quot;&amp;gt;__TOC__&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Билет экзамена по [[:Категория:Структурное проектирование АСОИ (10 семестр) | СПАСОИ]] состоит из двух частей:&lt;br /&gt;
# теория;&lt;br /&gt;
# SQL-запрос.&lt;br /&gt;
&lt;br /&gt;
На этой странице собраны все сформированные запросы по билетам.&lt;br /&gt;
&lt;br /&gt;
Странно, что ни в одном билете нет запроса с сортировкой результатов. Возможно, они буду в дополнительных заданиях.&lt;br /&gt;
&lt;br /&gt;
== Схема БД ==&lt;br /&gt;
&lt;br /&gt;
Схема БД используется всё [[СПАСОИ_(10)_-_Лекция_№8_-_SQL#Некоторые возможности языка SQL | та же]], что была в прошлом семестре и на лекциях.&lt;br /&gt;
&lt;br /&gt;
Для написания запросов и проверки их выполнения создана БД в СУБД [http://www.postgresql.org/ PostgreSQL].&lt;br /&gt;
&lt;br /&gt;
Скрипт создания можно загрузить [http://yadi.sk/d/ArwqOGAy5pPfi отсюда].&lt;br /&gt;
&lt;br /&gt;
=== Таблицы БД ===&lt;br /&gt;
&lt;br /&gt;
==== Поставщики ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.s;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika |       imya       | sostoyanie |   gorod&lt;br /&gt;
 -------------------+------------------+------------+------------&lt;br /&gt;
  S5                | Мелисандра       |      65000 | Мадрид&lt;br /&gt;
  S2                | Бран Старк       |      60000 | Мурманск&lt;br /&gt;
  S1                | Якен Хгар        |    1500000 | Йокогама&lt;br /&gt;
  S7                | Сирио Форель     |    1500000 | Йокогама&lt;br /&gt;
  S4                | Джейме Ланнистер |     750000 | Лондон&lt;br /&gt;
  S3                | Серсея Ланнистер |    1200000 | Лондон&lt;br /&gt;
  S8                | Тирион Ланнистер |       2571 | Манчестер&lt;br /&gt;
  S9                | Иванов           |      35000 | Мытищи&lt;br /&gt;
  S10               | Русе Болтон      |      44444 | Баренцбург&lt;br /&gt;
  S11               | Петров Иван      |      35000 | Мытищи&lt;br /&gt;
  S14               | Рендилл Тарли    |    1111111 | Прага&lt;br /&gt;
  S13               | Сэмвелл Тарли    |     999999 | Прага&lt;br /&gt;
  S6                | Оша              |            | Москва&lt;br /&gt;
  S16               | Ходор            |            | Москва&lt;br /&gt;
  S15               | Мелисса Флорент  |     888888 | Стокгольм&lt;br /&gt;
  S12               | Петров Пётр      |      35001 | Мытищи&lt;br /&gt;
  S17               | Томми Версетти   |  123456789 | Майами&lt;br /&gt;
  S18               | Безликий         |          1 | Йокогама&lt;br /&gt;
 (18 rows)&lt;br /&gt;
&lt;br /&gt;
==== Детали ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.p;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_detali |       nazvanie       |     cvet      | ves  |      gorod&lt;br /&gt;
 --------------+----------------------+---------------+------+-----------------&lt;br /&gt;
  P9           | подставка            | синий         |  400 | Нижний Новгород&lt;br /&gt;
  P10          | стойка               | синий         | 2000 | Нижний Новгород&lt;br /&gt;
  P11          | абажур               | синий         |  400 | Нижний Новгород&lt;br /&gt;
  P1           | гайка                | чёрный        |   20 | Лондон&lt;br /&gt;
  P3           | ось                  | белый         | 5000 | Эдинбург&lt;br /&gt;
  P4           | зубчатое колесо      | чёрный        |   50 | Эдинбург&lt;br /&gt;
  P6           | транзистор           | коричневый    |    2 | Токио&lt;br /&gt;
  P7           | печатная плата       | зелёный       |  200 | Токио&lt;br /&gt;
  P8           | диод                 | коричневый    |    1 | Токио&lt;br /&gt;
  P12          | универсальная деталь | универсальный |    1 | Париж&lt;br /&gt;
  P13          | уникальная деталь    | уникальный    |    1 | Бостон&lt;br /&gt;
  P14          | болт                 | серый         |   20 | Ижевск&lt;br /&gt;
  P15          | рама                 | красный       | 3000 | Манчестер&lt;br /&gt;
  P16          | колесо               | белый         | 1500 | Манчестер&lt;br /&gt;
  P5           | втулка               | серый         |  350 | Манчестер&lt;br /&gt;
  P17          | бумага               | белый         |    1 | Астрахань&lt;br /&gt;
  P18          | плитка               | белый         |  300 | Флоренция&lt;br /&gt;
  P19          | орнамент             | серый         |  800 | Флоренция&lt;br /&gt;
  P20          | уголок               | серый         |  100 | Флоренция&lt;br /&gt;
  P21          | гайка 01-01          | серебристый   |   20 | Клин&lt;br /&gt;
  P22          | усиленная рама       | красный       | 3200 | Череповец&lt;br /&gt;
  P23          | винт                 | розовый       |    5 | Ижевск&lt;br /&gt;
  P24          | труселя              | красный       |   20 | Челябинск&lt;br /&gt;
  P25          | штуцерная деталь     | коричневый    |  450 | Череповец&lt;br /&gt;
  P2           | шуруп                | чёрный        |    5 | Лондон&lt;br /&gt;
  P26          | лезвие               | бесцветный    |  120 | Йокогама&lt;br /&gt;
 (26 rows)&lt;br /&gt;
&lt;br /&gt;
==== Изделия ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.j;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_izdelia |       nazvanie        |      gorod&lt;br /&gt;
 ---------------+-----------------------+-----------------&lt;br /&gt;
  J1            | автомобиль            | Магнитогорск&lt;br /&gt;
  J2            | процессор             | Зеленоград&lt;br /&gt;
  J3            | торшер                | Нижний Новгород&lt;br /&gt;
  J4            | универсальное изделие | Париж&lt;br /&gt;
  J5            | уникальное изделие    | Бостон&lt;br /&gt;
  J6            | велосипед 01/23       | Манчестер&lt;br /&gt;
  J7            | изделие из болтов     | Челябинск&lt;br /&gt;
  J8            | шкаф                  | Ярославль&lt;br /&gt;
  J9            | рама 02-01            | Череповец&lt;br /&gt;
  J10           | книга                 | Астрахань&lt;br /&gt;
  J11           | панно 01-03           | Флоренция&lt;br /&gt;
  J12           | велосипед 03-04       | Клин&lt;br /&gt;
  J13           | рама 02-03            | Череповец&lt;br /&gt;
  J14           | штуцер 01-02          | Череповец&lt;br /&gt;
  J15           | велосипед 01-04       | Клин&lt;br /&gt;
  J16           | кружевное бельё       | Челябинск&lt;br /&gt;
  J17           | штуцер 01-03          | Череповец&lt;br /&gt;
  J18           | кинжал                | Йокогама&lt;br /&gt;
 (18 rows)&lt;br /&gt;
&lt;br /&gt;
==== Сборки ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.spj;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika | nomer_detali | nomer_izdelia | kolichestvo&lt;br /&gt;
 -------------------+--------------+---------------+-------------&lt;br /&gt;
  S1                | P6           | J2            |          20&lt;br /&gt;
  S1                | P7           | J2            |           5&lt;br /&gt;
  S2                | P1           | J1            |           4&lt;br /&gt;
  S6                | P4           | J1            |           2&lt;br /&gt;
  S6                | P5           | J1            |           6&lt;br /&gt;
  S3                | P9           | J3            |           1&lt;br /&gt;
  S4                | P10          | J3            |           1&lt;br /&gt;
  S5                | P11          | J3            |           1&lt;br /&gt;
  S2                | P4           | J1            |           8&lt;br /&gt;
  S6                | P3           | J1            |          50&lt;br /&gt;
  S7                | P8           | J2            |          25&lt;br /&gt;
  S1                | P12          | J4            |           1&lt;br /&gt;
  S2                | P12          | J4            |           1&lt;br /&gt;
  S3                | P12          | J4            |           1&lt;br /&gt;
  S4                | P12          | J4            |           1&lt;br /&gt;
  S5                | P12          | J4            |           1&lt;br /&gt;
  S7                | P12          | J4            |           1&lt;br /&gt;
  S7                | P2           | J1            |           1&lt;br /&gt;
  S6                | P2           | J1            |           9&lt;br /&gt;
  S6                | P12          | J4            |           7&lt;br /&gt;
  S1                | P13          | J5            |          14&lt;br /&gt;
  S6                | P14          | J1            |        9000&lt;br /&gt;
  S2                | P14          | J1            |           3&lt;br /&gt;
  S6                | P1           | J1            |          12&lt;br /&gt;
  S8                | P15          | J6            |           1&lt;br /&gt;
  S8                | P16          | J6            |           2&lt;br /&gt;
  S3                | P5           | J6            |          10&lt;br /&gt;
  S10               | P2           | J8            |           4&lt;br /&gt;
  S8                | P1           | J7            |          16&lt;br /&gt;
  S9                | P14          | J7            |           3&lt;br /&gt;
  S11               | P10          | J3            |           2&lt;br /&gt;
  S12               | P15          | J1            |           3&lt;br /&gt;
  S11               | P11          | J3            |           4&lt;br /&gt;
  S10               | P14          | J9            |           5&lt;br /&gt;
  S13               | P17          | J10           |        1001&lt;br /&gt;
  S14               | P17          | J10           |        1111&lt;br /&gt;
  S15               | P17          | J10           |        1010&lt;br /&gt;
  S5                | P18          | J11           |           9&lt;br /&gt;
  S5                | P19          | J11           |           1&lt;br /&gt;
  S5                | P20          | J11           |           4&lt;br /&gt;
  S9                | P14          | J8            |          25&lt;br /&gt;
  S12               | P21          | J12           |          15&lt;br /&gt;
  S11               | P22          | J13           |           9&lt;br /&gt;
  S11               | P1           | J14           |          26&lt;br /&gt;
  S12               | P1           | J14           |          13&lt;br /&gt;
  S12               | P2           | J14           |          54&lt;br /&gt;
  S12               | P23          | J4            |         101&lt;br /&gt;
  S12               | P16          | J15           |          40&lt;br /&gt;
  S7                | P21          | J12           |           3&lt;br /&gt;
  S8                | P21          | J12           |           4&lt;br /&gt;
  S9                | P21          | J12           |           5&lt;br /&gt;
  S1                | P24          | J16           |           1&lt;br /&gt;
  S1                | P15          | J6            |           3&lt;br /&gt;
  S4                | P25          | J17           |           1&lt;br /&gt;
  S17               | P16          | J1            |           4&lt;br /&gt;
  S18               | P26          | J18           |           1&lt;br /&gt;
 (56 rows)&lt;br /&gt;
&lt;br /&gt;
== Готовые запросы ==&lt;br /&gt;
&lt;br /&gt;
Если видите, что тот или иной запрос можно составить короче и рациональней - смело вносите правку.&lt;br /&gt;
&lt;br /&gt;
В трёх билетах в задании на запрос встречается формулировка &amp;quot;&#039;&#039;только и только&#039;&#039;&amp;quot;. Как оказалось, это означает следующее: если холодильники поставляет &#039;&#039;только и только&#039;&#039; Уася, то:&lt;br /&gt;
# кроме Уаси никто не поставляет холодильники;&lt;br /&gt;
# Уася не поставляет ничего, кроме холодильников.&lt;br /&gt;
&lt;br /&gt;
Существующие запросы, естественно, оказались неправильными и их пришлось переписать. &amp;lt;s&amp;gt;Великий и могучий русский языка, ну что за экономия на бумаге.&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Билет 1 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера поставщиков, которые поставляют, по крайней мере, все те детали, которые поставляет поставщик с номером &#039;S2&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nomer_postavshika&lt;br /&gt;
FROM spasoi_ekz.spj SPJX&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT nomer_detali&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJY&lt;br /&gt;
                  WHERE nomer_postavshika = &#039;S2&#039;&lt;br /&gt;
                    AND NOT EXISTS (&lt;br /&gt;
                                    SELECT *&lt;br /&gt;
                                    FROM spasoi_ekz.spj&lt;br /&gt;
                                    WHERE nomer_postavshika = SPJX.nomer_postavshika&lt;br /&gt;
                                      AND nomer_detali = SPJY.nomer_detali&lt;br /&gt;
                                   )&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika&lt;br /&gt;
 -------------------&lt;br /&gt;
  S6&lt;br /&gt;
  S2&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 2 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера деталей и общее их количество для всех номеров деталей, поставляемых более чем одним поставщиком.&lt;br /&gt;
&lt;br /&gt;
Текст запроса, каким его дал Григорьев на лекции, впоследствии исправив его:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali AS &amp;quot;Номер детали&amp;quot;,&lt;br /&gt;
       SUM(kolichestvo) AS &amp;quot;Сколько штук поставляется&amp;quot;,&lt;br /&gt;
       COUNT(DISTINCT nomer_postavshika) AS &amp;quot;Сколько у неё поставщиков&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_postavshika) &amp;gt; 1;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali AS &amp;quot;Номер детали&amp;quot;,&lt;br /&gt;
       kol AS &amp;quot;Сколько штук поставляется&amp;quot;&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT nomer_detali,&lt;br /&gt;
             SUM(kolichestvo) AS kol,&lt;br /&gt;
             COUNT(DISTINCT nomer_postavshika)&lt;br /&gt;
      FROM spasoi_ekz.spj&lt;br /&gt;
      GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_postavshika) &amp;gt; 1&lt;br /&gt;
     ) A;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер детали | Сколько штук поставляется | Сколько у неё поставщиков&lt;br /&gt;
 --------------+---------------------------+---------------------------&lt;br /&gt;
  P1           |                        71 |                         5&lt;br /&gt;
  P10          |                         3 |                         2&lt;br /&gt;
  P11          |                         5 |                         2&lt;br /&gt;
  P12          |                        13 |                         7&lt;br /&gt;
  P14          |                      9036 |                         4&lt;br /&gt;
  P15          |                         7 |                         3&lt;br /&gt;
  P16          |                        46 |                         3&lt;br /&gt;
  P17          |                      3122 |                         3&lt;br /&gt;
  P2           |                        68 |                         4&lt;br /&gt;
  P21          |                        27 |                         4&lt;br /&gt;
  P4           |                        10 |                         2&lt;br /&gt;
  P5           |                        16 |                         2&lt;br /&gt;
 (12 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 3 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера поставщиков, поставляющих детали с номером &#039;P1&#039; для какого-либо изделия в количестве (в поставке) большим, чем средний объём поставок деталей с номером &#039;P2&#039; для этого изделия.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT X.nomer_postavshika &lt;br /&gt;
FROM spasoi_ekz.spj X&lt;br /&gt;
WHERE X.nomer_detali = &#039;P1&#039;&lt;br /&gt;
  AND X.kolichestvo &amp;gt; (&lt;br /&gt;
                       SELECT AVG(kolichestvo)&lt;br /&gt;
                       FROM spasoi_ekz.spj&lt;br /&gt;
                       WHERE nomer_izdelia = X.nomer_izdelia&lt;br /&gt;
                         AND nomer_detali = &#039;P2&#039;&lt;br /&gt;
                      );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но длиннее и нерациональней&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nomer_postavshika&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT *&lt;br /&gt;
      FROM spasoi_ekz.spj&lt;br /&gt;
      WHERE nomer_izdelia IN(&lt;br /&gt;
                             SELECT nomer_izdelia&lt;br /&gt;
                             FROM spasoi_ekz.spj&lt;br /&gt;
                             WHERE nomer_detali = &#039;P1&#039;&lt;br /&gt;
                            )&lt;br /&gt;
        AND nomer_izdelia IN(&lt;br /&gt;
	                     SELECT nomer_izdelia&lt;br /&gt;
	                     FROM spasoi_ekz.spj&lt;br /&gt;
	                     WHERE nomer_detali = &#039;P2&#039;&lt;br /&gt;
	                    )&lt;br /&gt;
     ) A&lt;br /&gt;
WHERE nomer_detali = &#039;P1&#039; AND kolichestvo &amp;gt;&lt;br /&gt;
(&lt;br /&gt;
 SELECT AVG(kolichestvo)&lt;br /&gt;
 FROM (&lt;br /&gt;
       SELECT *&lt;br /&gt;
       FROM spasoi_ekz.spj&lt;br /&gt;
       WHERE nomer_izdelia IN(&lt;br /&gt;
                              SELECT nomer_izdelia&lt;br /&gt;
                              FROM spasoi_ekz.spj&lt;br /&gt;
                              WHERE nomer_detali = &#039;P1&#039;&lt;br /&gt;
                             )&lt;br /&gt;
         AND nomer_izdelia IN(&lt;br /&gt;
                              SELECT nomer_izdelia&lt;br /&gt;
                              FROM spasoi_ekz.spj&lt;br /&gt;
                              WHERE nomer_detali = &#039;P2&#039;&lt;br /&gt;
                             )&lt;br /&gt;
      ) B&lt;br /&gt;
 WHERE nomer_detali = &#039;P2&#039;&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika&lt;br /&gt;
 -------------------&lt;br /&gt;
  S6&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 4 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера изделий, для которых детали поставляет только поставщик с номером ‘S1’.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_izdelia&lt;br /&gt;
FROM spasoi_ekz.spj X&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT *&lt;br /&gt;
                  FROM spasoi_ekz.spj&lt;br /&gt;
                  WHERE nomer_postavshika != &#039;S1&#039;&lt;br /&gt;
                    AND X.nomer_izdelia = nomer_izdelia&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но без EXISTS&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nomer_izdelia&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
WHERE nomer_izdelia IN(&lt;br /&gt;
                       SELECT nomer_izdelia&lt;br /&gt;
                       FROM spasoi_ekz.spj&lt;br /&gt;
                       WHERE nomer_postavshika = &#039;S1&#039;&lt;br /&gt;
                      )&lt;br /&gt;
  AND nomer_izdelia NOT IN(&lt;br /&gt;
                           SELECT nomer_izdelia&lt;br /&gt;
                           FROM spasoi_ekz.spj&lt;br /&gt;
                           WHERE nomer_postavshika != &#039;S1&#039;&lt;br /&gt;
                          );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_izdelia&lt;br /&gt;
 ---------------&lt;br /&gt;
  J5&lt;br /&gt;
  J16&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 5 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих детали с названием &amp;quot;Болт&amp;quot; в количестве (в поставке) большим, чем средний объём всех поставок деталей с номером &#039;P1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                           ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                        JOIN spasoi_ekz.p P&lt;br /&gt;
                           ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                              AND nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
WHERE kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT AVG(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj&lt;br /&gt;
                     WHERE SPJ.nomer_detali = &#039;P1&#039;&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но без JOIN&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s&lt;br /&gt;
WHERE nomer_postavshika IN (&lt;br /&gt;
                            SELECT nomer_postavshika&lt;br /&gt;
                            FROM spasoi_ekz.spj&lt;br /&gt;
                            WHERE nomer_detali = (&lt;br /&gt;
                                                  SELECT nomer_detali&lt;br /&gt;
                                                  FROM spasoi_ekz.p&lt;br /&gt;
                                                  WHERE LOWER(nazvanie) = LOWER(&#039;Болт&#039;)&lt;br /&gt;
                                                 )&lt;br /&gt;
                              AND kolichestvo &amp;gt; (&lt;br /&gt;
                                                 SELECT AVG(kolichestvo)&lt;br /&gt;
                                                 FROM spasoi_ekz.spj&lt;br /&gt;
                                                 WHERE nomer_detali = &#039;P1&#039;&lt;br /&gt;
                                                )&lt;br /&gt;
                           );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  imya&lt;br /&gt;
 ------&lt;br /&gt;
  Оша&lt;br /&gt;
  Иванов&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 6 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия деталей, поставляемых поставщиком, проживающим в том же городе, где изготавливаются эти детали, для изделия с названием ‘Велосипед 01/23’.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT P.nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                        JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                        JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
WHERE S.gorod = P.gorod&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Велосипед 01/23&#039;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос без JOIN&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nazvanie&lt;br /&gt;
FROM spasoi_ekz.S S, spasoi_ekz.p P, spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE S.gorod = P.gorod&lt;br /&gt;
  AND P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
  AND S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
  AND nomer_izdelia = (&lt;br /&gt;
                       SELECT nomer_izdelia&lt;br /&gt;
                       FROM spasoi_ekz.j&lt;br /&gt;
                       WHERE nazvanie = LOWER(&#039;Велосипед 01/23&#039;)&lt;br /&gt;
                      );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nazvanie&lt;br /&gt;
 ----------&lt;br /&gt;
  рама&lt;br /&gt;
  колесо&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 7 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия изделий, куда входят детали с названием &#039;Болт&#039;, поставляемых поставщиками с именем &#039;Иванов&#039;, в количестве (в поставке) большим, чем средний объём поставок для этого изделия.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT J.nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                        JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                        JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
WHERE imya LIKE &#039;%Иванов%&#039;&lt;br /&gt;
  AND P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
  AND kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT AVG(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj X&lt;br /&gt;
                     WHERE SPJ.nomer_izdelia = X.nomer_izdelia&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё один вариант запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie&lt;br /&gt;
FROM spasoi_ekz.j&lt;br /&gt;
WHERE nomer_izdelia IN (&lt;br /&gt;
                        SELECT nomer_izdelia&lt;br /&gt;
                        FROM (spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                                                   ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                                                      AND imya LIKE &#039;%Иванов%&#039;&lt;br /&gt;
                                                 JOIN spasoi_ekz.p P&lt;br /&gt;
                                                   ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                                      AND nazvanie = LOWER(&#039;Болт&#039;)) A&lt;br /&gt;
                        WHERE kolichestvo &amp;gt; (&lt;br /&gt;
                                             SELECT AVG(kolichestvo)&lt;br /&gt;
                                             FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                                                       ON SPJ.nomer_izdelia = A.nomer_izdelia&lt;br /&gt;
                                            )&lt;br /&gt;
                       );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;И ещё вариант этого же запроса, но длиннее и нерациональней&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT J.nazvanie, kolichestvo&lt;br /&gt;
      FROM spasoi_ekz.s S, spasoi_ekz.p P, spasoi_ekz.j J, spasoi_ekz.spj SPJ&lt;br /&gt;
      WHERE J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
        AND P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
        AND P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
        AND S.imya LIKE &#039;%Иванов%&#039;&lt;br /&gt;
        AND S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
     ) A&lt;br /&gt;
WHERE kolichestvo &amp;gt;&lt;br /&gt;
(&lt;br /&gt;
 SELECT AVG(kolichestvo)&lt;br /&gt;
 FROM spasoi_ekz.spj&lt;br /&gt;
 WHERE nomer_izdelia IN(&lt;br /&gt;
                        SELECT J.nomer_izdelia&lt;br /&gt;
                        FROM spasoi_ekz.s S, spasoi_ekz.p P, spasoi_ekz.j J, spasoi_ekz.spj SPJ&lt;br /&gt;
                        WHERE J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
                          AND P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                          AND P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
                          AND S.imya LIKE &#039;%Иванов%&#039;&lt;br /&gt;
                          AND S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
                       )&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
      nazvanie&lt;br /&gt;
 -------------------&lt;br /&gt;
  шкаф&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 8 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера изделий и общее количество деталей для них, поставляемых поставщиками с именем &#039;Петров&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_izdelia AS &amp;quot;Номер изделия&amp;quot;, SUM(kolichestvo) AS &amp;quot;Количество деталей&amp;quot; &lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                             -- так как &amp;quot;поставщикАМИ&amp;quot; и возможны&lt;br /&gt;
                             -- Иван Петров и Петров Иван, то LIKE %Петров%&lt;br /&gt;
                             AND imya LIKE &#039;%Петров%&#039;&lt;br /&gt;
GROUP BY nomer_izdelia;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер изделия | Количество деталей&lt;br /&gt;
 ---------------+--------------------&lt;br /&gt;
  J4            |                101&lt;br /&gt;
  J3            |                  6&lt;br /&gt;
  J13           |                  9&lt;br /&gt;
  J15           |                 40&lt;br /&gt;
  J1            |                  3&lt;br /&gt;
  J12           |                 15&lt;br /&gt;
  J14           |                 93&lt;br /&gt;
 (7 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 9 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера деталей и общее их количество для всех номеров деталей, которые входят только в одно изделие.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali, SUM(kolichestvo)&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_izdelia) = 1;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali, kol FROM (&lt;br /&gt;
       SELECT nomer_detali, SUM(kolichestvo) AS kol, COUNT(DISTINCT nomer_izdelia) = 1&lt;br /&gt;
       FROM spasoi_ekz.spj&lt;br /&gt;
       GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_izdelia) = 1&lt;br /&gt;
    ) A;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_detali | sum&lt;br /&gt;
 --------------+------&lt;br /&gt;
  P10          |    3&lt;br /&gt;
  P11          |    5&lt;br /&gt;
  P12          |   13&lt;br /&gt;
  P13          |   14&lt;br /&gt;
  P17          | 3122&lt;br /&gt;
  P18          |    9&lt;br /&gt;
  P19          |    1&lt;br /&gt;
  P20          |    4&lt;br /&gt;
  P21          |   27&lt;br /&gt;
  P22          |    9&lt;br /&gt;
  P23          |  101&lt;br /&gt;
  P24          |    1&lt;br /&gt;
  P25          |    1&lt;br /&gt;
  P26          |    1&lt;br /&gt;
  P3           |   50&lt;br /&gt;
  P4           |   10&lt;br /&gt;
  P6           |   20&lt;br /&gt;
  P7           |    5&lt;br /&gt;
  P8           |   25&lt;br /&gt;
  P9           |    1&lt;br /&gt;
 (20 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 10 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих детали с названием &#039;Болт&#039; для изделия с названием &#039;Рама 02-01&#039; в количестве (в поставке) большим, чем минимальное значение поставки детали с номером &#039;P1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
			   ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
			      AND J.nazvanie = LOWER(&#039;Рама 02-01&#039;)&lt;br /&gt;
			 JOIN spasoi_ekz.p P&lt;br /&gt;
			   ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
			      AND P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
			 JOIN spasoi_ekz.s S&lt;br /&gt;
			   ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE kolichestvo &amp;gt; (&lt;br /&gt;
		     SELECT MIN(kolichestvo)&lt;br /&gt;
		     FROM spasoi_ekz.spj &lt;br /&gt;
		     WHERE nomer_detali = &#039;P1&#039;&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Русе Болтон&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 11 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия городов и суммарное состояние проживающих в каждом городе поставщиков, у которых минимальный объём поставки деталей больше 1000.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT gorod, SUM(sostoyanie)&lt;br /&gt;
FROM spasoi_ekz.s S&lt;br /&gt;
WHERE (	&lt;br /&gt;
       SELECT MIN(kolichestvo)	&lt;br /&gt;
       FROM spasoi_ekz.spj X	&lt;br /&gt;
       WHERE X.nomer_postavshika = S.nomer_postavshika		&lt;br /&gt;
      ) &amp;gt; 1000&lt;br /&gt;
GROUP BY gorod;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Вариант подлиннее для тех, кто не ищет лёгких путей&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT gorod, SUM(sostoyanie)&lt;br /&gt;
FROM spasoi_ekz.s&lt;br /&gt;
WHERE nomer_postavshika IN (&lt;br /&gt;
                            SELECT nomer_postavshika&lt;br /&gt;
                            FROM spasoi_ekz.spj&lt;br /&gt;
                            GROUP BY nomer_postavshika HAVING MIN(kolichestvo) &amp;gt; 1000&lt;br /&gt;
                           )&lt;br /&gt;
GROUP BY gorod;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;!-- а этот запрос выполняет не совсем то и не правильно&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT gorod, sost&lt;br /&gt;
FROM (&lt;br /&gt;
SELECT gorod, SUM(sostoyanie) AS sost, SUM(SPJ.kolichestvo)&lt;br /&gt;
FROM spasoi_ekz.spj, spasoi_ekz.s&lt;br /&gt;
WHERE S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
GROUP BY S.gorod HAVING SUM(SPJ.kolichestvo) &amp;gt; 1000&lt;br /&gt;
) A;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; --&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
    gorod   |   sum&lt;br /&gt;
 -----------+---------&lt;br /&gt;
  Прага     | 2111110&lt;br /&gt;
  Стокгольм |  888888&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 12 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера деталей, поставляемых для какого-либо изделия поставщиком, проживающим в том же городе, где изготавливается это изделие.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali&lt;br /&gt;
FROM spasoi_ekz.spj SPJ, spasoi_ekz.s S, spasoi_ekz.j J&lt;br /&gt;
WHERE SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
  AND S.gorod = J.gorod&lt;br /&gt;
  AND J.nomer_izdelia = SPJ.nomer_izdelia;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_detali&lt;br /&gt;
 --------------&lt;br /&gt;
  P15&lt;br /&gt;
  P16&lt;br /&gt;
  P26&lt;br /&gt;
 (3 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 13 ===&lt;br /&gt;
&lt;br /&gt;
Написать &amp;lt;u&amp;gt;один&amp;lt;/u&amp;gt; запрос SELECT: выдать количества строк в таблице S (Поставщик) 1) с пустыми значениями и 2) непустыми значениями в столбце Состояние.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT COUNT(*) - COUNT(sostoyanie) AS &amp;quot;С пустым состоянием&amp;quot;, &lt;br /&gt;
       COUNT(sostoyanie) AS &amp;quot;С не пустым состоянием&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.s;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но длиннее и нерациональней&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SELECT COUNT(Snull.*) AS &amp;quot;С пустым состоянием&amp;quot;, COUNT(Snotnull.sostoyanie) AS &amp;quot;С не пустым состоянием&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.s Snull RIGHT OUTER JOIN spasoi_ekz.s Snotnull&lt;br /&gt;
                                      ON Snull.nomer_postavshika = Snotnull.nomer_postavshika&lt;br /&gt;
                                         AND Snull.sostoyanie IS NULL;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  С пустым состоянием | С не пустым состоянием&lt;br /&gt;
 ---------------------+-----------------------&lt;br /&gt;
                    2 |                    16&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 14 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют детали только и только для изделия с номером &#039;J1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj A JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON A.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE nomer_izdelia = &#039;J1&#039;&lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT nomer_postavshika&lt;br /&gt;
                  FROM spasoi_ekz.spj&lt;br /&gt;
                  WHERE nomer_izdelia != &#039;J1&#039;&lt;br /&gt;
                    AND nomer_postavshika = A.nomer_postavshika&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       imya&lt;br /&gt;
 ----------------&lt;br /&gt;
  Томми Версетти&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 15 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать наименования изделий, для которых детали поставляют только те поставщики, у которых состояние больше 1000000 у.е.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT j.nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
		  SELECT *&lt;br /&gt;
		  FROM spasoi_ekz.spj X JOIN spasoi_ekz.s S&lt;br /&gt;
		                          ON X.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
		  WHERE sostoyanie &amp;lt;= 1000000&lt;br /&gt;
		  AND X.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Вариант этого запроса без NOT EXISTS&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                        JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
WHERE sostoyanie &amp;gt; 1000000&lt;br /&gt;
  AND SPJ.nomer_izdelia NOT IN (&lt;br /&gt;
                                SELECT nomer_izdelia&lt;br /&gt;
                                FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                                                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                                WHERE sostoyanie &amp;lt; 1000000&lt;br /&gt;
                               );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       nazvanie&lt;br /&gt;
 --------------------&lt;br /&gt;
  кружевное бельё&lt;br /&gt;
  уникальное изделие&lt;br /&gt;
  процессор&lt;br /&gt;
 (3 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 16 ===&lt;br /&gt;
Написать запрос SELECT: выдать цвета и для каждого цвета общее количество деталей, входящих в изделие с названием &#039;Панно 01-03&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT cvet AS &amp;quot;Цвет&amp;quot;, SUM(kolichestvo) AS &amp;quot;Деталей&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
			     AND J.nazvanie = LOWER(&#039;Панно 01-03&#039;)&lt;br /&gt;
			JOIN spasoi_ekz.P P&lt;br /&gt;
			  ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
GROUP BY cvet;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Цвет  | Деталей&lt;br /&gt;
 -------+---------&lt;br /&gt;
  белый |       9&lt;br /&gt;
  серый |       5&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 17 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера поставщиков и количество сделанных ими поставок при условии, что среднее число деталей во всех этих поставках больше 1000.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nom AS &amp;quot;Номер поставщика&amp;quot;, cnt AS &amp;quot;Количество поставок&amp;quot;&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT S.nomer_postavshika AS nom,&lt;br /&gt;
             COUNT(SPJ.nomer_postavshika) AS cnt,&lt;br /&gt;
             AVG(SPJ.kolichestvo) AS kol&lt;br /&gt;
      FROM spasoi_ekz.s S, spasoi_ekz.spj SPJ&lt;br /&gt;
      WHERE S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
      GROUP BY S.nomer_postavshika&lt;br /&gt;
     ) A&lt;br /&gt;
WHERE kol &amp;gt; 1000;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос немного попроще&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_postavshika AS &amp;quot;Номер поставщика&amp;quot;, COUNT(*) AS &amp;quot;Количество поставок&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
WHERE nomer_postavshika IN (&lt;br /&gt;
                            SELECT nomer_postavshika&lt;br /&gt;
                            FROM spasoi_ekz.spj&lt;br /&gt;
                            GROUP BY nomer_postavshika HAVING AVG(kolichestvo) &amp;gt; 1000&lt;br /&gt;
                           )&lt;br /&gt;
GROUP BY nomer_postavshika;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер поставщика | Количество поставок&lt;br /&gt;
 ------------------+---------------------&lt;br /&gt;
  S13              |                   1&lt;br /&gt;
  S6               |                   7&lt;br /&gt;
  S14              |                   1&lt;br /&gt;
  S15              |                   1&lt;br /&gt;
 (4 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 18 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, имеющих состояние больше 1000 и поставляющих деталь с названием &#039;Гайка 01-01&#039; для изделия с названием &#039;Велосипед 03-04&#039; в количестве (в поставке) большим, чем средний объём поставки, выполненной поставщиками с именем &#039;Иванов&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:2nd dufficulty.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;5px&amp;quot;&amp;gt;&#039;&#039;&#039;Второй по сложности запрос экзамена!&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;4px&amp;quot;&amp;gt;&#039;&#039;&#039;Вот уж не свезло, так не свезло&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                    JOIN spasoi_ekz.j J&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
WHERE sostoyanie &amp;gt; 1000&lt;br /&gt;
  AND P.nazvanie = LOWER(&#039;Гайка 01-01&#039;)&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Велосипед 03-04&#039;)&lt;br /&gt;
  AND kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT AVG(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                       ON SPJ.nomer_postavshika = S.nomer_postavshika &lt;br /&gt;
                     WHERE S.imya = &#039;Иванов&#039;&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Пётр&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 19 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия красных деталей, которые входят только в изделие с названием &#039;Рама 02-03&#039; в количестве, меньшем 10 единиц в поставке.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT X.nazvanie&lt;br /&gt;
FROM spasoi_ekz.p X JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_detali = X.nomer_detali&lt;br /&gt;
                    JOIN spasoi_ekz.j J&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
WHERE X.cvet = &#039;красный&#039;&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Рама 02-03&#039;)&lt;br /&gt;
  AND kolichestvo &amp;lt; 10&lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT J.nomer_izdelia&lt;br /&gt;
                  FROM spasoi_ekz.j J JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                                        ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                  WHERE J.nazvanie != LOWER(&#039;Рама 02-03&#039;)&lt;br /&gt;
                    AND X.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант этого же запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT P.nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND cvet = &#039;красный&#039;&lt;br /&gt;
                        JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                              AND J.nazvanie = LOWER(&#039;Рама 02-03&#039;)&lt;br /&gt;
WHERE kolichestvo &amp;lt; 10&lt;br /&gt;
  AND SPJ.nomer_detali NOT IN (&lt;br /&gt;
                               SELECT nomer_detali&lt;br /&gt;
                               FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                                         ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                                                            AND J.nazvanie != LOWER(&#039;Рама 02-03&#039;)&lt;br /&gt;
                              );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     nazvanie&lt;br /&gt;
 ----------------&lt;br /&gt;
  усиленная рама&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 20 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих только белые детали.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT *&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                                            ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                  WHERE nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    AND P.cvet != &#039;белый&#039;&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё один вариант этого же запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND cvet = &#039;белый&#039;&lt;br /&gt;
                        JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE S.nomer_postavshika NOT IN (&lt;br /&gt;
                                  SELECT nomer_postavshika&lt;br /&gt;
                                  FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                                                            ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                                               AND cvet != &#039;белый&#039;&lt;br /&gt;
                                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;И ещё один вариант этого же запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s&lt;br /&gt;
WHERE nomer_postavshika NOT IN  (&lt;br /&gt;
                                 SELECT spj.nomer_postavshika&lt;br /&gt;
                                 FROM spasoi_ekz.spj SPJ, spasoi_ekz.p P&lt;br /&gt;
                                 WHERE SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                   AND p.cvet != &#039;белый&#039;&lt;br /&gt;
                                )&lt;br /&gt;
  AND nomer_postavshika  IN (&lt;br /&gt;
                             SELECT spj.nomer_postavshika&lt;br /&gt;
                             FROM spasoi_ekz.spj SPJ, spasoi_ekz.p P&lt;br /&gt;
                             WHERE SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                               AND p.cvet = &#039;белый&#039;&lt;br /&gt;
                            );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       imya&lt;br /&gt;
 -----------------&lt;br /&gt;
  Рендилл Тарли&lt;br /&gt;
  Сэмвелл Тарли&lt;br /&gt;
  Мелисса Флорент&lt;br /&gt;
  Томми Версетти&lt;br /&gt;
 (4 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 21 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия изделий, для которых детали поставляет только и только поставщик с номером &#039;S1&#039;.&lt;br /&gt;
&lt;br /&gt;
Чтобы продемонстрировать выполнение запроса наглядно, возьмём поставщика не &#039;S1&#039;, а &#039;S18&#039;, который был создан специально для этого запроса. Если оставить &#039;S1&#039;, то наглядности не получится, так как по нашей схеме БД этот поставщик не попадает под условие &amp;quot;&#039;&#039;только и только&#039;&#039;&amp;quot;, и запрос вернёт пустой результат.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie&lt;br /&gt;
FROM spasoi_ekz.j J, spasoi_ekz.SPJ SPJ&lt;br /&gt;
WHERE J.nomer_izdelia = SPJ.nomer_izdelia &lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT *&lt;br /&gt;
                  FROM spasoi_ekz.spj&lt;br /&gt;
                  WHERE nomer_postavshika != &#039;S18&#039; AND nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                 )&lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT *&lt;br /&gt;
                  FROM spasoi_ekz.spj&lt;br /&gt;
                  WHERE nomer_postavshika = &#039;S18&#039; AND nomer_izdelia != J.nomer_izdelia&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       nazvanie&lt;br /&gt;
 --------------------&lt;br /&gt;
  кинжал&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 22 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют только детали с номером &#039;P1&#039; для изделия с именем &#039;Штуцер 01-02&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- неверный запрос - номер изделия, а не название&lt;br /&gt;
SELECT imya FROM S X&lt;br /&gt;
JOIN SPJ Y ON X.nomer_postavshika=Y.nomer_postavshika&lt;br /&gt;
WHERE X.nomer_postavshika NOT IN (&lt;br /&gt;
                  SELECT DISTINCT nomer_postavshika FROM SPJ Z&lt;br /&gt;
                  WHERE Z.nomer_izdelia != &#039;Штуцер 01-02&#039;&lt;br /&gt;
                  AND Z.nomer_detali!=&#039;P1&#039;);--&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                             AND J.nazvanie = LOWER(&#039;штуцер 01-02&#039;)&lt;br /&gt;
                        JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND SPJ.nomer_detali = &#039;P1&#039;&lt;br /&gt;
                        JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE SPJ.nomer_postavshika NOT IN (&lt;br /&gt;
                                    SELECT nomer_postavshika&lt;br /&gt;
                                    FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                                              ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                                                                 AND J.nazvanie = LOWER(&#039;штуцер 01-02&#039;)&lt;br /&gt;
                                                            JOIN spasoi_ekz.p P&lt;br /&gt;
                                                              ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                                                 AND SPJ.nomer_detali != &#039;P1&#039;&lt;br /&gt;
                              );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Иван&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 23 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют деталь с названием &#039;Винт&#039; в количестве большим 100 единиц в одной поставке и имеют состояние больше среднего по их родному городу.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT S.imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
WHERE P.nazvanie = LOWER(&#039;Винт&#039;)&lt;br /&gt;
  AND SPJ.kolichestvo &amp;gt; 100&lt;br /&gt;
  AND S.sostoyanie &amp;gt; (&lt;br /&gt;
                      SELECT AVG(SS.sostoyanie)&lt;br /&gt;
                      FROM spasoi_ekz.s SS&lt;br /&gt;
                      WHERE SS.gorod = S.gorod&lt;br /&gt;
                     );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Пётр&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 24 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать наименования деталей и общее их количество для всех наименований деталей, изготавливаемых в одном городе.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- С этим запросом возникла неожиданная проблема - задание то ли неполное, то ли неправильное, потому что нельзя однозначно сказать, что по нему требуется сделать.&lt;br /&gt;
&lt;br /&gt;
Так что тут несколько вариантов запросов (кто как понял).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Первый вариант запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie, kol&lt;br /&gt;
FROM spasoi_ekz.p A, (&lt;br /&gt;
                      SELECT X.gorod, SUM(kolichestvo) as kol&lt;br /&gt;
                      FROM spasoi_ekz.p X, spasoi_ekz.spj Y&lt;br /&gt;
                      WHERE Y.nomer_detali = X.nomer_detali&lt;br /&gt;
                      GROUP BY X.gorod&lt;br /&gt;
                     ) B&lt;br /&gt;
WHERE A.gorod = B.gorod;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
        nazvanie       | kol&lt;br /&gt;
 ----------------------+------&lt;br /&gt;
  подставка            |    9&lt;br /&gt;
  стойка               |    9&lt;br /&gt;
  абажур               |    9&lt;br /&gt;
  гайка                |  139&lt;br /&gt;
  ось                  |   60&lt;br /&gt;
  зубчатое колесо      |   60&lt;br /&gt;
  транзистор           |   50&lt;br /&gt;
  печатная плата       |   50&lt;br /&gt;
  диод                 |   50&lt;br /&gt;
  универсальная деталь |   13&lt;br /&gt;
  уникальная деталь    |   14&lt;br /&gt;
  болт                 | 9137&lt;br /&gt;
  рама                 |   69&lt;br /&gt;
  колесо               |   69&lt;br /&gt;
  втулка               |   69&lt;br /&gt;
  бумага               | 3122&lt;br /&gt;
  плитка               |   14&lt;br /&gt;
  орнамент             |   14&lt;br /&gt;
  уголок               |   14&lt;br /&gt;
  гайка 01-01          |   27&lt;br /&gt;
  усиленная рама       |   10&lt;br /&gt;
  винт                 | 9137&lt;br /&gt;
  труселя              |    1&lt;br /&gt;
  штуцерная деталь     |   10&lt;br /&gt;
  шуруп                |  139&lt;br /&gt;
 (25 rows)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
и --&amp;gt;&lt;br /&gt;
В уточнение задания Григорьев сказал следующее: &amp;quot;&#039;&#039;Следует учесть, что в качестве наименования города может выступать переменная, в которую в некоторой программе должно быть занесено конкретное значение перед выполнением запроса&#039;&#039;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
То есть, вообще говоря, задание на запрос неполное, и его можно трактовать так: выдать наименования деталей и общее их количество для всех наименований деталей, изготавливаемых в городе &amp;lt;code&amp;gt;%НАЗВАНИЕГОРОДА%&amp;lt;/code&amp;gt;. Вот эта переменная задаётся где-то в программе, а в БД идёт запрос с уже подставленным конкретным названием. &lt;br /&gt;
&lt;br /&gt;
Этот вариант запроса составлен, например, для Лондона. &lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie, SUM(kolichestvo)&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
WHERE gorod = &#039;Лондон&#039;&lt;br /&gt;
GROUP BY nazvanie;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nazvanie | sum&lt;br /&gt;
 ----------+-----&lt;br /&gt;
  гайка    |  71&lt;br /&gt;
  шуруп    |  68&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 25 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих хотя бы одну белую деталь для изделия с названием &#039;Велосипед 01-04&#039; с объёмом поставки большим, чем средний объём поставки этого поставщика.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                    JOIN spasoi_ekz.j J&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
WHERE cvet = &#039;белый&#039;&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Велосипед 01-04&#039;)&lt;br /&gt;
  AND kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT AVG(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj SPJ&lt;br /&gt;
                     WHERE SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Пётр&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 26 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера красных деталей и количество поставок этих деталей.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT P.nomer_detali AS &amp;quot;Номер детали&amp;quot;, COUNT(kolichestvo) AS &amp;quot;Количество поставок с ней&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.p P, spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
  AND cvet = &#039;красный&#039;&lt;br /&gt;
GROUP BY P.nomer_detali;   &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос через JOIN&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT SPJ.nomer_detali AS &amp;quot;Номер детали&amp;quot;, COUNT(kolichestvo) AS &amp;quot;Количество поставок с ней&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND cvet = &#039;красный&#039;&lt;br /&gt;
GROUP BY SPJ.nomer_detali;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер детали | Количество поставок с ней&lt;br /&gt;
 --------------+---------------------------&lt;br /&gt;
  P15          |                         3&lt;br /&gt;
  P22          |                         1&lt;br /&gt;
  P24          |                         1&lt;br /&gt;
 (3 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 27 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать наименования городов и среднее состояние поставщиков для каждого города, поставляющих детали с названием &#039;Гайка 01-01&#039; для изделия с названием &#039;Велосипед 03-04&#039; в количестве (в поставке) большим, чем минимальный объём поставки, выполненной поставщиком с номером &#039;S1&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:1st dufficulty.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;7px&amp;quot;&amp;gt;&#039;&#039;&#039;Сложнейший запрос экзамена!&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;5px&amp;quot;&amp;gt;&#039;&#039;&#039;Сохрани Джа, вытащить такое&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT S.gorod AS &amp;quot;Город&amp;quot;, AVG(S.sostoyanie) AS &amp;quot;Среднее состояние&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                    JOIN spasoi_ekz.j J&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
WHERE P.nazvanie = LOWER(&#039;Гайка 01-01&#039;)&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Велосипед 03-04&#039;)&lt;br /&gt;
  AND kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT MIN(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj&lt;br /&gt;
                     WHERE nomer_postavshika = &#039;S1&#039;&lt;br /&gt;
                    )&lt;br /&gt;
GROUP BY S.gorod;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
    Город   |   Среднее состояние&lt;br /&gt;
 -----------+-----------------------&lt;br /&gt;
  Мытищи    |    35000.500000000000&lt;br /&gt;
  Йокогама  |  1500000.000000000000&lt;br /&gt;
  Манчестер | 2571.0000000000000000&lt;br /&gt;
 (3 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 28 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия изделий, куда входит хотя бы одна красная деталь весом больше 10 граммов, поставляемая только поставщиком с номером &#039;S1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT J.nazvanie&lt;br /&gt;
FROM spasoi_ekz.j J JOIN spasoi_ekz.spj SPJ1&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ1.nomer_izdelia&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ1.nomer_detali&lt;br /&gt;
WHERE P.ves &amp;gt; 10&lt;br /&gt;
 AND P.cvet = &#039;красный&#039;&lt;br /&gt;
 AND NOT EXISTS (&lt;br /&gt;
                 SELECT SPJ2.nomer_postavshika&lt;br /&gt;
                 FROM spasoi_ekz.spj SPJ2         &lt;br /&gt;
                 WHERE SPJ2.nomer_detali = P.nomer_detali&lt;br /&gt;
	 	   AND SPJ2.nomer_postavshika != &#039;S1&#039;&lt;br /&gt;
                );                     &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     nazvanie&lt;br /&gt;
 -----------------&lt;br /&gt;
  кружевное бельё&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 29 ===&lt;br /&gt;
Написать запрос SELECT: выдать названия деталей, которые входят только и только в состав изделия с названием &#039;Штуцер 01-03&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie&lt;br /&gt;
FROM spasoi_ekz.p P, spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE P.nomer_detali = SPJ.nomer_detali &lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT SPJ.nomer_izdelia&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                            ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
                  WHERE (&lt;br /&gt;
                         J.nazvanie != LOWER(&#039;Штуцер 01-03&#039;)&lt;br /&gt;
                         AND&lt;br /&gt;
                         SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                        )&lt;br /&gt;
                     OR (&lt;br /&gt;
                         J.nazvanie = LOWER(&#039;Штуцер 01-03&#039;)&lt;br /&gt;
                         AND&lt;br /&gt;
                         SPJ.nomer_detali != P.nomer_detali&lt;br /&gt;
                        )&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
      nazvanie&lt;br /&gt;
 ------------------&lt;br /&gt;
  штуцерная деталь&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 30 ===&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют, по крайней мере, все те детали, которые поставляет поставщик с номером &#039;S2&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT imya&lt;br /&gt;
FROM spasoi_ekz.s S&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT nomer_detali&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJY&lt;br /&gt;
                  WHERE nomer_postavshika = &#039;S2&#039;&lt;br /&gt;
                    AND NOT EXISTS (&lt;br /&gt;
                                    SELECT *&lt;br /&gt;
                                    FROM spasoi_ekz.spj&lt;br /&gt;
                                    WHERE nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                                      AND nomer_detali = SPJY.nomer_detali&lt;br /&gt;
                                   )&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  imya&lt;br /&gt;
 ------------&lt;br /&gt;
  Оша&lt;br /&gt;
  Бран Старк&lt;br /&gt;
 (2 rows)&lt;br /&gt;
[[Категория:Структурное проектирование АСОИ (10 семестр)]]&lt;/div&gt;</summary>
		<author><name>81.9.52.28</name></author>
	</entry>
	<entry>
		<id>https://iu5bmstu.ru/index.php?title=SQL-%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D1%8B_%D0%BA_%D1%8D%D0%BA%D0%B7%D0%B0%D0%BC%D0%B5%D0%BD%D1%83_%D0%BF%D0%BE_%D0%A1%D0%9F%D0%90%D0%A1%D0%9E%D0%98_(10_%D1%81%D0%B5%D0%BC%D0%B5%D1%81%D1%82%D1%80)&amp;diff=3848</id>
		<title>SQL-запросы к экзамену по СПАСОИ (10 семестр)</title>
		<link rel="alternate" type="text/html" href="https://iu5bmstu.ru/index.php?title=SQL-%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D1%8B_%D0%BA_%D1%8D%D0%BA%D0%B7%D0%B0%D0%BC%D0%B5%D0%BD%D1%83_%D0%BF%D0%BE_%D0%A1%D0%9F%D0%90%D0%A1%D0%9E%D0%98_(10_%D1%81%D0%B5%D0%BC%D0%B5%D1%81%D1%82%D1%80)&amp;diff=3848"/>
		<updated>2013-06-15T19:36:45Z</updated>

		<summary type="html">&lt;p&gt;81.9.52.28: /* Билет 20 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right; clear:both; margin-right:1.0em;&amp;quot;&amp;gt;__TOC__&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Билет экзамена по [[:Категория:Структурное проектирование АСОИ (10 семестр) | СПАСОИ]] состоит из двух частей:&lt;br /&gt;
# теория;&lt;br /&gt;
# SQL-запрос.&lt;br /&gt;
&lt;br /&gt;
На этой странице собраны все сформированные запросы по билетам.&lt;br /&gt;
&lt;br /&gt;
Странно, что ни в одном билете нет запроса с сортировкой результатов. Возможно, они буду в дополнительных заданиях.&lt;br /&gt;
&lt;br /&gt;
== Схема БД ==&lt;br /&gt;
&lt;br /&gt;
Схема БД используется всё [[СПАСОИ_(10)_-_Лекция_№8_-_SQL#Некоторые возможности языка SQL | та же]], что была в прошлом семестре и на лекциях.&lt;br /&gt;
&lt;br /&gt;
Для написания запросов и проверки их выполнения создана БД в СУБД [http://www.postgresql.org/ PostgreSQL].&lt;br /&gt;
&lt;br /&gt;
Скрипт создания можно загрузить [http://yadi.sk/d/ArwqOGAy5pPfi отсюда].&lt;br /&gt;
&lt;br /&gt;
=== Таблицы БД ===&lt;br /&gt;
&lt;br /&gt;
==== Поставщики ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.s;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika |       imya       | sostoyanie |   gorod&lt;br /&gt;
 -------------------+------------------+------------+------------&lt;br /&gt;
  S5                | Мелисандра       |      65000 | Мадрид&lt;br /&gt;
  S2                | Бран Старк       |      60000 | Мурманск&lt;br /&gt;
  S1                | Якен Хгар        |    1500000 | Йокогама&lt;br /&gt;
  S7                | Сирио Форель     |    1500000 | Йокогама&lt;br /&gt;
  S4                | Джейме Ланнистер |     750000 | Лондон&lt;br /&gt;
  S3                | Серсея Ланнистер |    1200000 | Лондон&lt;br /&gt;
  S8                | Тирион Ланнистер |       2571 | Манчестер&lt;br /&gt;
  S9                | Иванов           |      35000 | Мытищи&lt;br /&gt;
  S10               | Русе Болтон      |      44444 | Баренцбург&lt;br /&gt;
  S11               | Петров Иван      |      35000 | Мытищи&lt;br /&gt;
  S14               | Рендилл Тарли    |    1111111 | Прага&lt;br /&gt;
  S13               | Сэмвелл Тарли    |     999999 | Прага&lt;br /&gt;
  S6                | Оша              |            | Москва&lt;br /&gt;
  S16               | Ходор            |            | Москва&lt;br /&gt;
  S15               | Мелисса Флорент  |     888888 | Стокгольм&lt;br /&gt;
  S12               | Петров Пётр      |      35001 | Мытищи&lt;br /&gt;
  S17               | Томми Версетти   |  123456789 | Майами&lt;br /&gt;
  S18               | Безликий         |          1 | Йокогама&lt;br /&gt;
 (18 rows)&lt;br /&gt;
&lt;br /&gt;
==== Детали ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.p;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_detali |       nazvanie       |     cvet      | ves  |      gorod&lt;br /&gt;
 --------------+----------------------+---------------+------+-----------------&lt;br /&gt;
  P9           | подставка            | синий         |  400 | Нижний Новгород&lt;br /&gt;
  P10          | стойка               | синий         | 2000 | Нижний Новгород&lt;br /&gt;
  P11          | абажур               | синий         |  400 | Нижний Новгород&lt;br /&gt;
  P1           | гайка                | чёрный        |   20 | Лондон&lt;br /&gt;
  P3           | ось                  | белый         | 5000 | Эдинбург&lt;br /&gt;
  P4           | зубчатое колесо      | чёрный        |   50 | Эдинбург&lt;br /&gt;
  P6           | транзистор           | коричневый    |    2 | Токио&lt;br /&gt;
  P7           | печатная плата       | зелёный       |  200 | Токио&lt;br /&gt;
  P8           | диод                 | коричневый    |    1 | Токио&lt;br /&gt;
  P12          | универсальная деталь | универсальный |    1 | Париж&lt;br /&gt;
  P13          | уникальная деталь    | уникальный    |    1 | Бостон&lt;br /&gt;
  P14          | болт                 | серый         |   20 | Ижевск&lt;br /&gt;
  P15          | рама                 | красный       | 3000 | Манчестер&lt;br /&gt;
  P16          | колесо               | белый         | 1500 | Манчестер&lt;br /&gt;
  P5           | втулка               | серый         |  350 | Манчестер&lt;br /&gt;
  P17          | бумага               | белый         |    1 | Астрахань&lt;br /&gt;
  P18          | плитка               | белый         |  300 | Флоренция&lt;br /&gt;
  P19          | орнамент             | серый         |  800 | Флоренция&lt;br /&gt;
  P20          | уголок               | серый         |  100 | Флоренция&lt;br /&gt;
  P21          | гайка 01-01          | серебристый   |   20 | Клин&lt;br /&gt;
  P22          | усиленная рама       | красный       | 3200 | Череповец&lt;br /&gt;
  P23          | винт                 | розовый       |    5 | Ижевск&lt;br /&gt;
  P24          | труселя              | красный       |   20 | Челябинск&lt;br /&gt;
  P25          | штуцерная деталь     | коричневый    |  450 | Череповец&lt;br /&gt;
  P2           | шуруп                | чёрный        |    5 | Лондон&lt;br /&gt;
  P26          | лезвие               | бесцветный    |  120 | Йокогама&lt;br /&gt;
 (26 rows)&lt;br /&gt;
&lt;br /&gt;
==== Изделия ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.j;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_izdelia |       nazvanie        |      gorod&lt;br /&gt;
 ---------------+-----------------------+-----------------&lt;br /&gt;
  J1            | автомобиль            | Магнитогорск&lt;br /&gt;
  J2            | процессор             | Зеленоград&lt;br /&gt;
  J3            | торшер                | Нижний Новгород&lt;br /&gt;
  J4            | универсальное изделие | Париж&lt;br /&gt;
  J5            | уникальное изделие    | Бостон&lt;br /&gt;
  J6            | велосипед 01/23       | Манчестер&lt;br /&gt;
  J7            | изделие из болтов     | Челябинск&lt;br /&gt;
  J8            | шкаф                  | Ярославль&lt;br /&gt;
  J9            | рама 02-01            | Череповец&lt;br /&gt;
  J10           | книга                 | Астрахань&lt;br /&gt;
  J11           | панно 01-03           | Флоренция&lt;br /&gt;
  J12           | велосипед 03-04       | Клин&lt;br /&gt;
  J13           | рама 02-03            | Череповец&lt;br /&gt;
  J14           | штуцер 01-02          | Череповец&lt;br /&gt;
  J15           | велосипед 01-04       | Клин&lt;br /&gt;
  J16           | кружевное бельё       | Челябинск&lt;br /&gt;
  J17           | штуцер 01-03          | Череповец&lt;br /&gt;
  J18           | кинжал                | Йокогама&lt;br /&gt;
 (18 rows)&lt;br /&gt;
&lt;br /&gt;
==== Сборки ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.spj;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika | nomer_detali | nomer_izdelia | kolichestvo&lt;br /&gt;
 -------------------+--------------+---------------+-------------&lt;br /&gt;
  S1                | P6           | J2            |          20&lt;br /&gt;
  S1                | P7           | J2            |           5&lt;br /&gt;
  S2                | P1           | J1            |           4&lt;br /&gt;
  S6                | P4           | J1            |           2&lt;br /&gt;
  S6                | P5           | J1            |           6&lt;br /&gt;
  S3                | P9           | J3            |           1&lt;br /&gt;
  S4                | P10          | J3            |           1&lt;br /&gt;
  S5                | P11          | J3            |           1&lt;br /&gt;
  S2                | P4           | J1            |           8&lt;br /&gt;
  S6                | P3           | J1            |          50&lt;br /&gt;
  S7                | P8           | J2            |          25&lt;br /&gt;
  S1                | P12          | J4            |           1&lt;br /&gt;
  S2                | P12          | J4            |           1&lt;br /&gt;
  S3                | P12          | J4            |           1&lt;br /&gt;
  S4                | P12          | J4            |           1&lt;br /&gt;
  S5                | P12          | J4            |           1&lt;br /&gt;
  S7                | P12          | J4            |           1&lt;br /&gt;
  S7                | P2           | J1            |           1&lt;br /&gt;
  S6                | P2           | J1            |           9&lt;br /&gt;
  S6                | P12          | J4            |           7&lt;br /&gt;
  S1                | P13          | J5            |          14&lt;br /&gt;
  S6                | P14          | J1            |        9000&lt;br /&gt;
  S2                | P14          | J1            |           3&lt;br /&gt;
  S6                | P1           | J1            |          12&lt;br /&gt;
  S8                | P15          | J6            |           1&lt;br /&gt;
  S8                | P16          | J6            |           2&lt;br /&gt;
  S3                | P5           | J6            |          10&lt;br /&gt;
  S10               | P2           | J8            |           4&lt;br /&gt;
  S8                | P1           | J7            |          16&lt;br /&gt;
  S9                | P14          | J7            |           3&lt;br /&gt;
  S11               | P10          | J3            |           2&lt;br /&gt;
  S12               | P15          | J1            |           3&lt;br /&gt;
  S11               | P11          | J3            |           4&lt;br /&gt;
  S10               | P14          | J9            |           5&lt;br /&gt;
  S13               | P17          | J10           |        1001&lt;br /&gt;
  S14               | P17          | J10           |        1111&lt;br /&gt;
  S15               | P17          | J10           |        1010&lt;br /&gt;
  S5                | P18          | J11           |           9&lt;br /&gt;
  S5                | P19          | J11           |           1&lt;br /&gt;
  S5                | P20          | J11           |           4&lt;br /&gt;
  S9                | P14          | J8            |          25&lt;br /&gt;
  S12               | P21          | J12           |          15&lt;br /&gt;
  S11               | P22          | J13           |           9&lt;br /&gt;
  S11               | P1           | J14           |          26&lt;br /&gt;
  S12               | P1           | J14           |          13&lt;br /&gt;
  S12               | P2           | J14           |          54&lt;br /&gt;
  S12               | P23          | J4            |         101&lt;br /&gt;
  S12               | P16          | J15           |          40&lt;br /&gt;
  S7                | P21          | J12           |           3&lt;br /&gt;
  S8                | P21          | J12           |           4&lt;br /&gt;
  S9                | P21          | J12           |           5&lt;br /&gt;
  S1                | P24          | J16           |           1&lt;br /&gt;
  S1                | P15          | J6            |           3&lt;br /&gt;
  S4                | P25          | J17           |           1&lt;br /&gt;
  S17               | P16          | J1            |           4&lt;br /&gt;
  S18               | P26          | J18           |           1&lt;br /&gt;
 (56 rows)&lt;br /&gt;
&lt;br /&gt;
== Готовые запросы ==&lt;br /&gt;
&lt;br /&gt;
Если видите, что тот или иной запрос можно составить короче и рациональней - смело вносите правку.&lt;br /&gt;
&lt;br /&gt;
В трёх билетах в задании на запрос встречается формулировка &amp;quot;&#039;&#039;только и только&#039;&#039;&amp;quot;. Как оказалось, это означает следующее: если холодильники поставляет &#039;&#039;только и только&#039;&#039; Уася, то:&lt;br /&gt;
# кроме Уаси никто не поставляет холодильники;&lt;br /&gt;
# Уася не поставляет ничего, кроме холодильников.&lt;br /&gt;
&lt;br /&gt;
Существующие запросы, естественно, оказались неправильными и их пришлось переписать. &amp;lt;s&amp;gt;Великий и могучий русский языка, ну что за экономия на бумаге.&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Билет 1 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера поставщиков, которые поставляют, по крайней мере, все те детали, которые поставляет поставщик с номером &#039;S2&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nomer_postavshika&lt;br /&gt;
FROM spasoi_ekz.spj SPJX&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT nomer_detali&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJY&lt;br /&gt;
                  WHERE nomer_postavshika = &#039;S2&#039;&lt;br /&gt;
                    AND NOT EXISTS (&lt;br /&gt;
                                    SELECT *&lt;br /&gt;
                                    FROM spasoi_ekz.spj&lt;br /&gt;
                                    WHERE nomer_postavshika = SPJX.nomer_postavshika&lt;br /&gt;
                                      AND nomer_detali = SPJY.nomer_detali&lt;br /&gt;
                                   )&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika&lt;br /&gt;
 -------------------&lt;br /&gt;
  S6&lt;br /&gt;
  S2&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 2 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера деталей и общее их количество для всех номеров деталей, поставляемых более чем одним поставщиком.&lt;br /&gt;
&lt;br /&gt;
Текст запроса, каким его дал Григорьев на лекции, впоследствии исправив его:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali AS &amp;quot;Номер детали&amp;quot;,&lt;br /&gt;
       SUM(kolichestvo) AS &amp;quot;Сколько штук поставляется&amp;quot;,&lt;br /&gt;
       COUNT(DISTINCT nomer_postavshika) AS &amp;quot;Сколько у неё поставщиков&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_postavshika) &amp;gt; 1;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali AS &amp;quot;Номер детали&amp;quot;,&lt;br /&gt;
       kol AS &amp;quot;Сколько штук поставляется&amp;quot;&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT nomer_detali,&lt;br /&gt;
             SUM(kolichestvo) AS kol,&lt;br /&gt;
             COUNT(DISTINCT nomer_postavshika)&lt;br /&gt;
      FROM spasoi_ekz.spj&lt;br /&gt;
      GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_postavshika) &amp;gt; 1&lt;br /&gt;
     ) A;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер детали | Сколько штук поставляется | Сколько у неё поставщиков&lt;br /&gt;
 --------------+---------------------------+---------------------------&lt;br /&gt;
  P1           |                        71 |                         5&lt;br /&gt;
  P10          |                         3 |                         2&lt;br /&gt;
  P11          |                         5 |                         2&lt;br /&gt;
  P12          |                        13 |                         7&lt;br /&gt;
  P14          |                      9036 |                         4&lt;br /&gt;
  P15          |                         7 |                         3&lt;br /&gt;
  P16          |                        46 |                         3&lt;br /&gt;
  P17          |                      3122 |                         3&lt;br /&gt;
  P2           |                        68 |                         4&lt;br /&gt;
  P21          |                        27 |                         4&lt;br /&gt;
  P4           |                        10 |                         2&lt;br /&gt;
  P5           |                        16 |                         2&lt;br /&gt;
 (12 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 3 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера поставщиков, поставляющих детали с номером &#039;P1&#039; для какого-либо изделия в количестве (в поставке) большим, чем средний объём поставок деталей с номером &#039;P2&#039; для этого изделия.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT X.nomer_postavshika &lt;br /&gt;
FROM spasoi_ekz.spj X&lt;br /&gt;
WHERE X.nomer_detali = &#039;P1&#039;&lt;br /&gt;
  AND X.kolichestvo &amp;gt; (&lt;br /&gt;
                       SELECT AVG(kolichestvo)&lt;br /&gt;
                       FROM spasoi_ekz.spj&lt;br /&gt;
                       WHERE nomer_izdelia = X.nomer_izdelia&lt;br /&gt;
                         AND nomer_detali = &#039;P2&#039;&lt;br /&gt;
                      );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но длиннее и нерациональней&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nomer_postavshika&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT *&lt;br /&gt;
      FROM spasoi_ekz.spj&lt;br /&gt;
      WHERE nomer_izdelia IN(&lt;br /&gt;
                             SELECT nomer_izdelia&lt;br /&gt;
                             FROM spasoi_ekz.spj&lt;br /&gt;
                             WHERE nomer_detali = &#039;P1&#039;&lt;br /&gt;
                            )&lt;br /&gt;
        AND nomer_izdelia IN(&lt;br /&gt;
	                     SELECT nomer_izdelia&lt;br /&gt;
	                     FROM spasoi_ekz.spj&lt;br /&gt;
	                     WHERE nomer_detali = &#039;P2&#039;&lt;br /&gt;
	                    )&lt;br /&gt;
     ) A&lt;br /&gt;
WHERE nomer_detali = &#039;P1&#039; AND kolichestvo &amp;gt;&lt;br /&gt;
(&lt;br /&gt;
 SELECT AVG(kolichestvo)&lt;br /&gt;
 FROM (&lt;br /&gt;
       SELECT *&lt;br /&gt;
       FROM spasoi_ekz.spj&lt;br /&gt;
       WHERE nomer_izdelia IN(&lt;br /&gt;
                              SELECT nomer_izdelia&lt;br /&gt;
                              FROM spasoi_ekz.spj&lt;br /&gt;
                              WHERE nomer_detali = &#039;P1&#039;&lt;br /&gt;
                             )&lt;br /&gt;
         AND nomer_izdelia IN(&lt;br /&gt;
                              SELECT nomer_izdelia&lt;br /&gt;
                              FROM spasoi_ekz.spj&lt;br /&gt;
                              WHERE nomer_detali = &#039;P2&#039;&lt;br /&gt;
                             )&lt;br /&gt;
      ) B&lt;br /&gt;
 WHERE nomer_detali = &#039;P2&#039;&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika&lt;br /&gt;
 -------------------&lt;br /&gt;
  S6&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 4 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера изделий, для которых детали поставляет только поставщик с номером ‘S1’.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_izdelia&lt;br /&gt;
FROM spasoi_ekz.spj X&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT *&lt;br /&gt;
                  FROM spasoi_ekz.spj&lt;br /&gt;
                  WHERE nomer_postavshika != &#039;S1&#039;&lt;br /&gt;
                    AND X.nomer_izdelia = nomer_izdelia&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но без EXISTS&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nomer_izdelia&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
WHERE nomer_izdelia IN(&lt;br /&gt;
                       SELECT nomer_izdelia&lt;br /&gt;
                       FROM spasoi_ekz.spj&lt;br /&gt;
                       WHERE nomer_postavshika = &#039;S1&#039;&lt;br /&gt;
                      )&lt;br /&gt;
  AND nomer_izdelia NOT IN(&lt;br /&gt;
                           SELECT nomer_izdelia&lt;br /&gt;
                           FROM spasoi_ekz.spj&lt;br /&gt;
                           WHERE nomer_postavshika != &#039;S1&#039;&lt;br /&gt;
                          );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_izdelia&lt;br /&gt;
 ---------------&lt;br /&gt;
  J5&lt;br /&gt;
  J16&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 5 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих детали с названием &amp;quot;Болт&amp;quot; в количестве (в поставке) большим, чем средний объём всех поставок деталей с номером &#039;P1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                           ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                        JOIN spasoi_ekz.p P&lt;br /&gt;
                           ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                              AND nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
WHERE kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT AVG(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj&lt;br /&gt;
                     WHERE SPJ.nomer_detali = &#039;P1&#039;&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но без JOIN&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s&lt;br /&gt;
WHERE nomer_postavshika IN (&lt;br /&gt;
                            SELECT nomer_postavshika&lt;br /&gt;
                            FROM spasoi_ekz.spj&lt;br /&gt;
                            WHERE nomer_detali = (&lt;br /&gt;
                                                  SELECT nomer_detali&lt;br /&gt;
                                                  FROM spasoi_ekz.p&lt;br /&gt;
                                                  WHERE LOWER(nazvanie) = LOWER(&#039;Болт&#039;)&lt;br /&gt;
                                                 )&lt;br /&gt;
                              AND kolichestvo &amp;gt; (&lt;br /&gt;
                                                 SELECT AVG(kolichestvo)&lt;br /&gt;
                                                 FROM spasoi_ekz.spj&lt;br /&gt;
                                                 WHERE nomer_detali = &#039;P1&#039;&lt;br /&gt;
                                                )&lt;br /&gt;
                           );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  imya&lt;br /&gt;
 ------&lt;br /&gt;
  Оша&lt;br /&gt;
  Иванов&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 6 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия деталей, поставляемых поставщиком, проживающим в том же городе, где изготавливаются эти детали, для изделия с названием ‘Велосипед 01/23’.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT P.nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                        JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                        JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
WHERE S.gorod = P.gorod&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Велосипед 01/23&#039;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос без JOIN&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nazvanie&lt;br /&gt;
FROM spasoi_ekz.S S, spasoi_ekz.p P, spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE S.gorod = P.gorod&lt;br /&gt;
  AND P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
  AND S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
  AND nomer_izdelia = (&lt;br /&gt;
                       SELECT nomer_izdelia&lt;br /&gt;
                       FROM spasoi_ekz.j&lt;br /&gt;
                       WHERE nazvanie = LOWER(&#039;Велосипед 01/23&#039;)&lt;br /&gt;
                      );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nazvanie&lt;br /&gt;
 ----------&lt;br /&gt;
  рама&lt;br /&gt;
  колесо&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 7 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия изделий, куда входят детали с названием &#039;Болт&#039;, поставляемых поставщиками с именем &#039;Иванов&#039;, в количестве (в поставке) большим, чем средний объём поставок для этого изделия.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT J.nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                        JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                        JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
WHERE imya LIKE &#039;%Иванов%&#039;&lt;br /&gt;
  AND P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
  AND kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT AVG(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj X&lt;br /&gt;
                     WHERE SPJ.nomer_izdelia = X.nomer_izdelia&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё один вариант запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie&lt;br /&gt;
FROM spasoi_ekz.j&lt;br /&gt;
WHERE nomer_izdelia IN (&lt;br /&gt;
                        SELECT nomer_izdelia&lt;br /&gt;
                        FROM (spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                                                   ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                                                      AND imya LIKE &#039;%Иванов%&#039;&lt;br /&gt;
                                                 JOIN spasoi_ekz.p P&lt;br /&gt;
                                                   ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                                      AND nazvanie = LOWER(&#039;Болт&#039;)) A&lt;br /&gt;
                        WHERE kolichestvo &amp;gt; (&lt;br /&gt;
                                             SELECT AVG(kolichestvo)&lt;br /&gt;
                                             FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                                                       ON SPJ.nomer_izdelia = A.nomer_izdelia&lt;br /&gt;
                                            )&lt;br /&gt;
                       );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;И ещё вариант этого же запроса, но длиннее и нерациональней&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT J.nazvanie, kolichestvo&lt;br /&gt;
      FROM spasoi_ekz.s S, spasoi_ekz.p P, spasoi_ekz.j J, spasoi_ekz.spj SPJ&lt;br /&gt;
      WHERE J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
        AND P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
        AND P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
        AND S.imya LIKE &#039;%Иванов%&#039;&lt;br /&gt;
        AND S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
     ) A&lt;br /&gt;
WHERE kolichestvo &amp;gt;&lt;br /&gt;
(&lt;br /&gt;
 SELECT AVG(kolichestvo)&lt;br /&gt;
 FROM spasoi_ekz.spj&lt;br /&gt;
 WHERE nomer_izdelia IN(&lt;br /&gt;
                        SELECT J.nomer_izdelia&lt;br /&gt;
                        FROM spasoi_ekz.s S, spasoi_ekz.p P, spasoi_ekz.j J, spasoi_ekz.spj SPJ&lt;br /&gt;
                        WHERE J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
                          AND P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                          AND P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
                          AND S.imya LIKE &#039;%Иванов%&#039;&lt;br /&gt;
                          AND S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
                       )&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
      nazvanie&lt;br /&gt;
 -------------------&lt;br /&gt;
  шкаф&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 8 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера изделий и общее количество деталей для них, поставляемых поставщиками с именем &#039;Петров&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_izdelia AS &amp;quot;Номер изделия&amp;quot;, SUM(kolichestvo) AS &amp;quot;Количество деталей&amp;quot; &lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                             -- так как &amp;quot;поставщикАМИ&amp;quot; и возможны&lt;br /&gt;
                             -- Иван Петров и Петров Иван, то LIKE %Петров%&lt;br /&gt;
                             AND imya LIKE &#039;%Петров%&#039;&lt;br /&gt;
GROUP BY nomer_izdelia;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер изделия | Количество деталей&lt;br /&gt;
 ---------------+--------------------&lt;br /&gt;
  J4            |                101&lt;br /&gt;
  J3            |                  6&lt;br /&gt;
  J13           |                  9&lt;br /&gt;
  J15           |                 40&lt;br /&gt;
  J1            |                  3&lt;br /&gt;
  J12           |                 15&lt;br /&gt;
  J14           |                 93&lt;br /&gt;
 (7 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 9 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера деталей и общее их количество для всех номеров деталей, которые входят только в одно изделие.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali, SUM(kolichestvo)&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_izdelia) = 1;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali, kol FROM (&lt;br /&gt;
       SELECT nomer_detali, SUM(kolichestvo) AS kol, COUNT(DISTINCT nomer_izdelia) = 1&lt;br /&gt;
       FROM spasoi_ekz.spj&lt;br /&gt;
       GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_izdelia) = 1&lt;br /&gt;
    ) A;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_detali | sum&lt;br /&gt;
 --------------+------&lt;br /&gt;
  P10          |    3&lt;br /&gt;
  P11          |    5&lt;br /&gt;
  P12          |   13&lt;br /&gt;
  P13          |   14&lt;br /&gt;
  P17          | 3122&lt;br /&gt;
  P18          |    9&lt;br /&gt;
  P19          |    1&lt;br /&gt;
  P20          |    4&lt;br /&gt;
  P21          |   27&lt;br /&gt;
  P22          |    9&lt;br /&gt;
  P23          |  101&lt;br /&gt;
  P24          |    1&lt;br /&gt;
  P25          |    1&lt;br /&gt;
  P26          |    1&lt;br /&gt;
  P3           |   50&lt;br /&gt;
  P4           |   10&lt;br /&gt;
  P6           |   20&lt;br /&gt;
  P7           |    5&lt;br /&gt;
  P8           |   25&lt;br /&gt;
  P9           |    1&lt;br /&gt;
 (20 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 10 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих детали с названием &#039;Болт&#039; для изделия с названием &#039;Рама 02-01&#039; в количестве (в поставке) большим, чем минимальное значение поставки детали с номером &#039;P1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
			   ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
			      AND J.nazvanie = LOWER(&#039;Рама 02-01&#039;)&lt;br /&gt;
			 JOIN spasoi_ekz.p P&lt;br /&gt;
			   ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
			      AND P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
			 JOIN spasoi_ekz.s S&lt;br /&gt;
			   ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE kolichestvo &amp;gt; (&lt;br /&gt;
		     SELECT MIN(kolichestvo)&lt;br /&gt;
		     FROM spasoi_ekz.spj &lt;br /&gt;
		     WHERE nomer_detali = &#039;P1&#039;&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Русе Болтон&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 11 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия городов и суммарное состояние проживающих в каждом городе поставщиков, у которых минимальный объём поставки деталей больше 1000.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT gorod, SUM(sostoyanie)&lt;br /&gt;
FROM spasoi_ekz.s S&lt;br /&gt;
WHERE (	&lt;br /&gt;
       SELECT MIN(kolichestvo)	&lt;br /&gt;
       FROM spasoi_ekz.spj X	&lt;br /&gt;
       WHERE X.nomer_postavshika = S.nomer_postavshika		&lt;br /&gt;
      ) &amp;gt; 1000&lt;br /&gt;
GROUP BY gorod;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Вариант подлиннее для тех, кто не ищет лёгких путей&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT gorod, SUM(sostoyanie)&lt;br /&gt;
FROM spasoi_ekz.s&lt;br /&gt;
WHERE nomer_postavshika IN (&lt;br /&gt;
                            SELECT nomer_postavshika&lt;br /&gt;
                            FROM spasoi_ekz.spj&lt;br /&gt;
                            GROUP BY nomer_postavshika HAVING MIN(kolichestvo) &amp;gt; 1000&lt;br /&gt;
                           )&lt;br /&gt;
GROUP BY gorod;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;!-- а этот запрос выполняет не совсем то и не правильно&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT gorod, sost&lt;br /&gt;
FROM (&lt;br /&gt;
SELECT gorod, SUM(sostoyanie) AS sost, SUM(SPJ.kolichestvo)&lt;br /&gt;
FROM spasoi_ekz.spj, spasoi_ekz.s&lt;br /&gt;
WHERE S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
GROUP BY S.gorod HAVING SUM(SPJ.kolichestvo) &amp;gt; 1000&lt;br /&gt;
) A;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; --&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
    gorod   |   sum&lt;br /&gt;
 -----------+---------&lt;br /&gt;
  Прага     | 2111110&lt;br /&gt;
  Стокгольм |  888888&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 12 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера деталей, поставляемых для какого-либо изделия поставщиком, проживающим в том же городе, где изготавливается это изделие.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali&lt;br /&gt;
FROM spasoi_ekz.spj SPJ, spasoi_ekz.s S, spasoi_ekz.j J&lt;br /&gt;
WHERE SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
  AND S.gorod = J.gorod&lt;br /&gt;
  AND J.nomer_izdelia = SPJ.nomer_izdelia;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_detali&lt;br /&gt;
 --------------&lt;br /&gt;
  P15&lt;br /&gt;
  P16&lt;br /&gt;
  P26&lt;br /&gt;
 (3 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 13 ===&lt;br /&gt;
&lt;br /&gt;
Написать &amp;lt;u&amp;gt;один&amp;lt;/u&amp;gt; запрос SELECT: выдать количества строк в таблице S (Поставщик) 1) с пустыми значениями и 2) непустыми значениями в столбце Состояние.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT COUNT(*) - COUNT(sostoyanie) AS &amp;quot;С пустым состоянием&amp;quot;, &lt;br /&gt;
       COUNT(sostoyanie) AS &amp;quot;С не пустым состоянием&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.s;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но длиннее и нерациональней&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SELECT COUNT(Snull.*) AS &amp;quot;С пустым состоянием&amp;quot;, COUNT(Snotnull.sostoyanie) AS &amp;quot;С не пустым состоянием&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.s Snull RIGHT OUTER JOIN spasoi_ekz.s Snotnull&lt;br /&gt;
                                      ON Snull.nomer_postavshika = Snotnull.nomer_postavshika&lt;br /&gt;
                                         AND Snull.sostoyanie IS NULL;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  С пустым состоянием | С не пустым состоянием&lt;br /&gt;
 ---------------------+-----------------------&lt;br /&gt;
                    2 |                    16&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 14 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют детали только и только для изделия с номером &#039;J1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj A JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON A.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE nomer_izdelia = &#039;J1&#039;&lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT nomer_postavshika&lt;br /&gt;
                  FROM spasoi_ekz.spj&lt;br /&gt;
                  WHERE nomer_izdelia != &#039;J1&#039;&lt;br /&gt;
                    AND nomer_postavshika = A.nomer_postavshika&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       imya&lt;br /&gt;
 ----------------&lt;br /&gt;
  Томми Версетти&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 15 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать наименования изделий, для которых детали поставляют только те поставщики, у которых состояние больше 1000000 у.е.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT j.nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
		  SELECT *&lt;br /&gt;
		  FROM spasoi_ekz.spj X JOIN spasoi_ekz.s S&lt;br /&gt;
		                          ON X.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
		  WHERE sostoyanie &amp;lt;= 1000000&lt;br /&gt;
		  AND X.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Вариант этого запроса без NOT EXISTS&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                        JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
WHERE sostoyanie &amp;gt; 1000000&lt;br /&gt;
  AND SPJ.nomer_izdelia NOT IN (&lt;br /&gt;
                                SELECT nomer_izdelia&lt;br /&gt;
                                FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                                                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                                WHERE sostoyanie &amp;lt; 1000000&lt;br /&gt;
                               );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       nazvanie&lt;br /&gt;
 --------------------&lt;br /&gt;
  кружевное бельё&lt;br /&gt;
  уникальное изделие&lt;br /&gt;
  процессор&lt;br /&gt;
 (3 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 16 ===&lt;br /&gt;
Написать запрос SELECT: выдать цвета и для каждого цвета общее количество деталей, входящих в изделие с названием &#039;Панно 01-03&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT cvet AS &amp;quot;Цвет&amp;quot;, SUM(kolichestvo) AS &amp;quot;Деталей&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
			     AND J.nazvanie = LOWER(&#039;Панно 01-03&#039;)&lt;br /&gt;
			JOIN spasoi_ekz.P P&lt;br /&gt;
			  ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
GROUP BY cvet;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Цвет  | Деталей&lt;br /&gt;
 -------+---------&lt;br /&gt;
  белый |       9&lt;br /&gt;
  серый |       5&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 17 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера поставщиков и количество сделанных ими поставок при условии, что среднее число деталей во всех этих поставках больше 1000.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nom AS &amp;quot;Номер поставщика&amp;quot;, cnt AS &amp;quot;Количество поставок&amp;quot;&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT S.nomer_postavshika AS nom,&lt;br /&gt;
             COUNT(SPJ.nomer_postavshika) AS cnt,&lt;br /&gt;
             AVG(SPJ.kolichestvo) AS kol&lt;br /&gt;
      FROM spasoi_ekz.s S, spasoi_ekz.spj SPJ&lt;br /&gt;
      WHERE S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
      GROUP BY S.nomer_postavshika&lt;br /&gt;
     ) A&lt;br /&gt;
WHERE kol &amp;gt; 1000;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос немного попроще&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_postavshika AS &amp;quot;Номер поставщика&amp;quot;, COUNT(*) AS &amp;quot;Количество поставок&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
WHERE nomer_postavshika IN (&lt;br /&gt;
                            SELECT nomer_postavshika&lt;br /&gt;
                            FROM spasoi_ekz.spj&lt;br /&gt;
                            GROUP BY nomer_postavshika HAVING AVG(kolichestvo) &amp;gt; 1000&lt;br /&gt;
                           )&lt;br /&gt;
GROUP BY nomer_postavshika;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер поставщика | Количество поставок&lt;br /&gt;
 ------------------+---------------------&lt;br /&gt;
  S13              |                   1&lt;br /&gt;
  S6               |                   7&lt;br /&gt;
  S14              |                   1&lt;br /&gt;
  S15              |                   1&lt;br /&gt;
 (4 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 18 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, имеющих состояние больше 1000 и поставляющих деталь с названием &#039;Гайка 01-01&#039; для изделия с названием &#039;Велосипед 03-04&#039; в количестве (в поставке) большим, чем средний объём поставки, выполненной поставщиками с именем &#039;Иванов&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:2nd dufficulty.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;5px&amp;quot;&amp;gt;&#039;&#039;&#039;Второй по сложности запрос экзамена!&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;4px&amp;quot;&amp;gt;&#039;&#039;&#039;Вот уж не свезло, так не свезло&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                    JOIN spasoi_ekz.j J&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
WHERE sostoyanie &amp;gt; 1000&lt;br /&gt;
  AND P.nazvanie = LOWER(&#039;Гайка 01-01&#039;)&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Велосипед 03-04&#039;)&lt;br /&gt;
  AND kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT AVG(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                       ON SPJ.nomer_postavshika = S.nomer_postavshika &lt;br /&gt;
                     WHERE S.imya = &#039;Иванов&#039;&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Пётр&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 19 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия красных деталей, которые входят только в изделие с названием &#039;Рама 02-03&#039; в количестве, меньшем 10 единиц в поставке.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT X.nazvanie&lt;br /&gt;
FROM spasoi_ekz.p X JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_detali = X.nomer_detali&lt;br /&gt;
                    JOIN spasoi_ekz.j J&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
WHERE X.cvet = &#039;красный&#039;&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Рама 02-03&#039;)&lt;br /&gt;
  AND kolichestvo &amp;lt; 10&lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT J.nomer_izdelia&lt;br /&gt;
                  FROM spasoi_ekz.j J JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                                        ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                  WHERE J.nazvanie != LOWER(&#039;Рама 02-03&#039;)&lt;br /&gt;
                    AND X.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант этого же запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT P.nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND cvet = &#039;красный&#039;&lt;br /&gt;
                        JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                              AND J.nazvanie = LOWER(&#039;Рама 02-03&#039;)&lt;br /&gt;
WHERE kolichestvo &amp;lt; 10&lt;br /&gt;
  AND SPJ.nomer_detali NOT IN (&lt;br /&gt;
                               SELECT nomer_detali&lt;br /&gt;
                               FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                                         ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                                                            AND J.nazvanie != LOWER(&#039;Рама 02-03&#039;)&lt;br /&gt;
                              );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     nazvanie&lt;br /&gt;
 ----------------&lt;br /&gt;
  усиленная рама&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 20 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих только белые детали.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT nomer_postavshika&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                                            ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                  WHERE nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    AND P.cvet != &#039;белый&#039;&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё один вариант этого же запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND cvet = &#039;белый&#039;&lt;br /&gt;
                        JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE S.nomer_postavshika NOT IN (&lt;br /&gt;
                                  SELECT nomer_postavshika&lt;br /&gt;
                                  FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                                                            ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                                               AND cvet != &#039;белый&#039;&lt;br /&gt;
                                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;И ещё один вариант этого же запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s&lt;br /&gt;
WHERE nomer_postavshika NOT IN  (&lt;br /&gt;
                                 SELECT spj.nomer_postavshika&lt;br /&gt;
                                 FROM spasoi_ekz.spj SPJ, spasoi_ekz.p P&lt;br /&gt;
                                 WHERE SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                   AND p.cvet != &#039;белый&#039;&lt;br /&gt;
                                )&lt;br /&gt;
  AND nomer_postavshika  IN (&lt;br /&gt;
                             SELECT spj.nomer_postavshika&lt;br /&gt;
                             FROM spasoi_ekz.spj SPJ, spasoi_ekz.p P&lt;br /&gt;
                             WHERE SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                               AND p.cvet = &#039;белый&#039;&lt;br /&gt;
                            );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       imya&lt;br /&gt;
 -----------------&lt;br /&gt;
  Рендилл Тарли&lt;br /&gt;
  Сэмвелл Тарли&lt;br /&gt;
  Мелисса Флорент&lt;br /&gt;
  Томми Версетти&lt;br /&gt;
 (4 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 21 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия изделий, для которых детали поставляет только и только поставщик с номером &#039;S1&#039;.&lt;br /&gt;
&lt;br /&gt;
Чтобы продемонстрировать выполнение запроса наглядно, возьмём поставщика не &#039;S1&#039;, а &#039;S18&#039;, который был создан специально для этого запроса. Если оставить &#039;S1&#039;, то наглядности не получится, так как по нашей схеме БД этот поставщик не попадает под условие &amp;quot;&#039;&#039;только и только&#039;&#039;&amp;quot;, и запрос вернёт пустой результат.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie&lt;br /&gt;
FROM spasoi_ekz.j J, spasoi_ekz.SPJ SPJ&lt;br /&gt;
WHERE J.nomer_izdelia = SPJ.nomer_izdelia &lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT *&lt;br /&gt;
                  FROM spasoi_ekz.spj&lt;br /&gt;
                  WHERE nomer_postavshika != &#039;S18&#039; AND nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                 )&lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT *&lt;br /&gt;
                  FROM spasoi_ekz.spj&lt;br /&gt;
                  WHERE nomer_postavshika = &#039;S18&#039; AND nomer_izdelia != J.nomer_izdelia&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       nazvanie&lt;br /&gt;
 --------------------&lt;br /&gt;
  кинжал&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 22 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют только детали с номером &#039;P1&#039; для изделия с именем &#039;Штуцер 01-02&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- неверный запрос - номер изделия, а не название&lt;br /&gt;
SELECT imya FROM S X&lt;br /&gt;
JOIN SPJ Y ON X.nomer_postavshika=Y.nomer_postavshika&lt;br /&gt;
WHERE X.nomer_postavshika NOT IN (&lt;br /&gt;
                  SELECT DISTINCT nomer_postavshika FROM SPJ Z&lt;br /&gt;
                  WHERE Z.nomer_izdelia != &#039;Штуцер 01-02&#039;&lt;br /&gt;
                  AND Z.nomer_detali!=&#039;P1&#039;);--&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                             AND J.nazvanie = LOWER(&#039;штуцер 01-02&#039;)&lt;br /&gt;
                        JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND SPJ.nomer_detali = &#039;P1&#039;&lt;br /&gt;
                        JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE SPJ.nomer_postavshika NOT IN (&lt;br /&gt;
                                    SELECT nomer_postavshika&lt;br /&gt;
                                    FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                                              ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                                                                 AND J.nazvanie = LOWER(&#039;штуцер 01-02&#039;)&lt;br /&gt;
                                                            JOIN spasoi_ekz.p P&lt;br /&gt;
                                                              ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                                                 AND SPJ.nomer_detali != &#039;P1&#039;&lt;br /&gt;
                              );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Иван&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 23 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют деталь с названием &#039;Винт&#039; в количестве большим 100 единиц в одной поставке и имеют состояние больше среднего по их родному городу.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT S.imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
WHERE P.nazvanie = LOWER(&#039;Винт&#039;)&lt;br /&gt;
  AND SPJ.kolichestvo &amp;gt; 100&lt;br /&gt;
  AND S.sostoyanie &amp;gt; (&lt;br /&gt;
                      SELECT AVG(SS.sostoyanie)&lt;br /&gt;
                      FROM spasoi_ekz.s SS&lt;br /&gt;
                      WHERE SS.gorod = S.gorod&lt;br /&gt;
                     );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Пётр&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 24 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать наименования деталей и общее их количество для всех наименований деталей, изготавливаемых в одном городе.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- С этим запросом возникла неожиданная проблема - задание то ли неполное, то ли неправильное, потому что нельзя однозначно сказать, что по нему требуется сделать.&lt;br /&gt;
&lt;br /&gt;
Так что тут несколько вариантов запросов (кто как понял).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Первый вариант запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie, kol&lt;br /&gt;
FROM spasoi_ekz.p A, (&lt;br /&gt;
                      SELECT X.gorod, SUM(kolichestvo) as kol&lt;br /&gt;
                      FROM spasoi_ekz.p X, spasoi_ekz.spj Y&lt;br /&gt;
                      WHERE Y.nomer_detali = X.nomer_detali&lt;br /&gt;
                      GROUP BY X.gorod&lt;br /&gt;
                     ) B&lt;br /&gt;
WHERE A.gorod = B.gorod;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
        nazvanie       | kol&lt;br /&gt;
 ----------------------+------&lt;br /&gt;
  подставка            |    9&lt;br /&gt;
  стойка               |    9&lt;br /&gt;
  абажур               |    9&lt;br /&gt;
  гайка                |  139&lt;br /&gt;
  ось                  |   60&lt;br /&gt;
  зубчатое колесо      |   60&lt;br /&gt;
  транзистор           |   50&lt;br /&gt;
  печатная плата       |   50&lt;br /&gt;
  диод                 |   50&lt;br /&gt;
  универсальная деталь |   13&lt;br /&gt;
  уникальная деталь    |   14&lt;br /&gt;
  болт                 | 9137&lt;br /&gt;
  рама                 |   69&lt;br /&gt;
  колесо               |   69&lt;br /&gt;
  втулка               |   69&lt;br /&gt;
  бумага               | 3122&lt;br /&gt;
  плитка               |   14&lt;br /&gt;
  орнамент             |   14&lt;br /&gt;
  уголок               |   14&lt;br /&gt;
  гайка 01-01          |   27&lt;br /&gt;
  усиленная рама       |   10&lt;br /&gt;
  винт                 | 9137&lt;br /&gt;
  труселя              |    1&lt;br /&gt;
  штуцерная деталь     |   10&lt;br /&gt;
  шуруп                |  139&lt;br /&gt;
 (25 rows)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
и --&amp;gt;&lt;br /&gt;
В уточнение задания Григорьев сказал следующее: &amp;quot;&#039;&#039;Следует учесть, что в качестве наименования города может выступать переменная, в которую в некоторой программе должно быть занесено конкретное значение перед выполнением запроса&#039;&#039;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
То есть, вообще говоря, задание на запрос неполное, и его можно трактовать так: выдать наименования деталей и общее их количество для всех наименований деталей, изготавливаемых в городе &amp;lt;code&amp;gt;%НАЗВАНИЕГОРОДА%&amp;lt;/code&amp;gt;. Вот эта переменная задаётся где-то в программе, а в БД идёт запрос с уже подставленным конкретным названием. &lt;br /&gt;
&lt;br /&gt;
Этот вариант запроса составлен, например, для Лондона. &lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie, SUM(kolichestvo)&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
WHERE gorod = &#039;Лондон&#039;&lt;br /&gt;
GROUP BY nazvanie;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nazvanie | sum&lt;br /&gt;
 ----------+-----&lt;br /&gt;
  гайка    |  71&lt;br /&gt;
  шуруп    |  68&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 25 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих хотя бы одну белую деталь для изделия с названием &#039;Велосипед 01-04&#039; с объёмом поставки большим, чем средний объём поставки этого поставщика.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                    JOIN spasoi_ekz.j J&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
WHERE cvet = &#039;белый&#039;&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Велосипед 01-04&#039;)&lt;br /&gt;
  AND kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT AVG(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj SPJ&lt;br /&gt;
                     WHERE SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Пётр&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 26 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера красных деталей и количество поставок этих деталей.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT P.nomer_detali AS &amp;quot;Номер детали&amp;quot;, COUNT(kolichestvo) AS &amp;quot;Количество поставок с ней&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.p P, spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
  AND cvet = &#039;красный&#039;&lt;br /&gt;
GROUP BY P.nomer_detali;   &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос через JOIN&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT SPJ.nomer_detali AS &amp;quot;Номер детали&amp;quot;, COUNT(kolichestvo) AS &amp;quot;Количество поставок с ней&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND cvet = &#039;красный&#039;&lt;br /&gt;
GROUP BY SPJ.nomer_detali;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер детали | Количество поставок с ней&lt;br /&gt;
 --------------+---------------------------&lt;br /&gt;
  P15          |                         3&lt;br /&gt;
  P22          |                         1&lt;br /&gt;
  P24          |                         1&lt;br /&gt;
 (3 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 27 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать наименования городов и среднее состояние поставщиков для каждого города, поставляющих детали с названием &#039;Гайка 01-01&#039; для изделия с названием &#039;Велосипед 03-04&#039; в количестве (в поставке) большим, чем минимальный объём поставки, выполненной поставщиком с номером &#039;S1&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:1st dufficulty.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;7px&amp;quot;&amp;gt;&#039;&#039;&#039;Сложнейший запрос экзамена!&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;5px&amp;quot;&amp;gt;&#039;&#039;&#039;Сохрани Джа, вытащить такое&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT S.gorod AS &amp;quot;Город&amp;quot;, AVG(S.sostoyanie) AS &amp;quot;Среднее состояние&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                    JOIN spasoi_ekz.j J&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
WHERE P.nazvanie = LOWER(&#039;Гайка 01-01&#039;)&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Велосипед 03-04&#039;)&lt;br /&gt;
  AND kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT MIN(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj&lt;br /&gt;
                     WHERE nomer_postavshika = &#039;S1&#039;&lt;br /&gt;
                    )&lt;br /&gt;
GROUP BY S.gorod;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
    Город   |   Среднее состояние&lt;br /&gt;
 -----------+-----------------------&lt;br /&gt;
  Мытищи    |    35000.500000000000&lt;br /&gt;
  Йокогама  |  1500000.000000000000&lt;br /&gt;
  Манчестер | 2571.0000000000000000&lt;br /&gt;
 (3 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 28 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия изделий, куда входит хотя бы одна красная деталь весом больше 10 граммов, поставляемая только поставщиком с номером &#039;S1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT J.nazvanie&lt;br /&gt;
FROM spasoi_ekz.j J JOIN spasoi_ekz.spj SPJ1&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ1.nomer_izdelia&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ1.nomer_detali&lt;br /&gt;
WHERE P.ves &amp;gt; 10&lt;br /&gt;
 AND P.cvet = &#039;красный&#039;&lt;br /&gt;
 AND NOT EXISTS (&lt;br /&gt;
                 SELECT SPJ2.nomer_postavshika&lt;br /&gt;
                 FROM spasoi_ekz.spj SPJ2         &lt;br /&gt;
                 WHERE SPJ2.nomer_detali = P.nomer_detali&lt;br /&gt;
	 	   AND SPJ2.nomer_postavshika != &#039;S1&#039;&lt;br /&gt;
                );                     &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     nazvanie&lt;br /&gt;
 -----------------&lt;br /&gt;
  кружевное бельё&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 29 ===&lt;br /&gt;
Написать запрос SELECT: выдать названия деталей, которые входят только и только в состав изделия с названием &#039;Штуцер 01-03&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie&lt;br /&gt;
FROM spasoi_ekz.p P, spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE P.nomer_detali = SPJ.nomer_detali &lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT SPJ.nomer_izdelia&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                            ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
                  WHERE (&lt;br /&gt;
                         J.nazvanie != LOWER(&#039;Штуцер 01-03&#039;)&lt;br /&gt;
                         AND&lt;br /&gt;
                         SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                        )&lt;br /&gt;
                     OR (&lt;br /&gt;
                         J.nazvanie = LOWER(&#039;Штуцер 01-03&#039;)&lt;br /&gt;
                         AND&lt;br /&gt;
                         SPJ.nomer_detali != P.nomer_detali&lt;br /&gt;
                        )&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
      nazvanie&lt;br /&gt;
 ------------------&lt;br /&gt;
  штуцерная деталь&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 30 ===&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют, по крайней мере, все те детали, которые поставляет поставщик с номером &#039;S2&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT imya&lt;br /&gt;
FROM spasoi_ekz.s S&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT nomer_detali&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJY&lt;br /&gt;
                  WHERE nomer_postavshika = &#039;S2&#039;&lt;br /&gt;
                    AND NOT EXISTS (&lt;br /&gt;
                                    SELECT *&lt;br /&gt;
                                    FROM spasoi_ekz.spj&lt;br /&gt;
                                    WHERE nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                                      AND nomer_detali = SPJY.nomer_detali&lt;br /&gt;
                                   )&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  imya&lt;br /&gt;
 ------------&lt;br /&gt;
  Оша&lt;br /&gt;
  Бран Старк&lt;br /&gt;
 (2 rows)&lt;br /&gt;
[[Категория:Структурное проектирование АСОИ (10 семестр)]]&lt;/div&gt;</summary>
		<author><name>81.9.52.28</name></author>
	</entry>
	<entry>
		<id>https://iu5bmstu.ru/index.php?title=SQL-%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D1%8B_%D0%BA_%D1%8D%D0%BA%D0%B7%D0%B0%D0%BC%D0%B5%D0%BD%D1%83_%D0%BF%D0%BE_%D0%A1%D0%9F%D0%90%D0%A1%D0%9E%D0%98_(10_%D1%81%D0%B5%D0%BC%D0%B5%D1%81%D1%82%D1%80)&amp;diff=3847</id>
		<title>SQL-запросы к экзамену по СПАСОИ (10 семестр)</title>
		<link rel="alternate" type="text/html" href="https://iu5bmstu.ru/index.php?title=SQL-%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D1%8B_%D0%BA_%D1%8D%D0%BA%D0%B7%D0%B0%D0%BC%D0%B5%D0%BD%D1%83_%D0%BF%D0%BE_%D0%A1%D0%9F%D0%90%D0%A1%D0%9E%D0%98_(10_%D1%81%D0%B5%D0%BC%D0%B5%D1%81%D1%82%D1%80)&amp;diff=3847"/>
		<updated>2013-06-15T19:35:03Z</updated>

		<summary type="html">&lt;p&gt;81.9.52.28: /* Билет 20 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right; clear:both; margin-right:1.0em;&amp;quot;&amp;gt;__TOC__&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Билет экзамена по [[:Категория:Структурное проектирование АСОИ (10 семестр) | СПАСОИ]] состоит из двух частей:&lt;br /&gt;
# теория;&lt;br /&gt;
# SQL-запрос.&lt;br /&gt;
&lt;br /&gt;
На этой странице собраны все сформированные запросы по билетам.&lt;br /&gt;
&lt;br /&gt;
Странно, что ни в одном билете нет запроса с сортировкой результатов. Возможно, они буду в дополнительных заданиях.&lt;br /&gt;
&lt;br /&gt;
== Схема БД ==&lt;br /&gt;
&lt;br /&gt;
Схема БД используется всё [[СПАСОИ_(10)_-_Лекция_№8_-_SQL#Некоторые возможности языка SQL | та же]], что была в прошлом семестре и на лекциях.&lt;br /&gt;
&lt;br /&gt;
Для написания запросов и проверки их выполнения создана БД в СУБД [http://www.postgresql.org/ PostgreSQL].&lt;br /&gt;
&lt;br /&gt;
Скрипт создания можно загрузить [http://yadi.sk/d/ArwqOGAy5pPfi отсюда].&lt;br /&gt;
&lt;br /&gt;
=== Таблицы БД ===&lt;br /&gt;
&lt;br /&gt;
==== Поставщики ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.s;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika |       imya       | sostoyanie |   gorod&lt;br /&gt;
 -------------------+------------------+------------+------------&lt;br /&gt;
  S5                | Мелисандра       |      65000 | Мадрид&lt;br /&gt;
  S2                | Бран Старк       |      60000 | Мурманск&lt;br /&gt;
  S1                | Якен Хгар        |    1500000 | Йокогама&lt;br /&gt;
  S7                | Сирио Форель     |    1500000 | Йокогама&lt;br /&gt;
  S4                | Джейме Ланнистер |     750000 | Лондон&lt;br /&gt;
  S3                | Серсея Ланнистер |    1200000 | Лондон&lt;br /&gt;
  S8                | Тирион Ланнистер |       2571 | Манчестер&lt;br /&gt;
  S9                | Иванов           |      35000 | Мытищи&lt;br /&gt;
  S10               | Русе Болтон      |      44444 | Баренцбург&lt;br /&gt;
  S11               | Петров Иван      |      35000 | Мытищи&lt;br /&gt;
  S14               | Рендилл Тарли    |    1111111 | Прага&lt;br /&gt;
  S13               | Сэмвелл Тарли    |     999999 | Прага&lt;br /&gt;
  S6                | Оша              |            | Москва&lt;br /&gt;
  S16               | Ходор            |            | Москва&lt;br /&gt;
  S15               | Мелисса Флорент  |     888888 | Стокгольм&lt;br /&gt;
  S12               | Петров Пётр      |      35001 | Мытищи&lt;br /&gt;
  S17               | Томми Версетти   |  123456789 | Майами&lt;br /&gt;
  S18               | Безликий         |          1 | Йокогама&lt;br /&gt;
 (18 rows)&lt;br /&gt;
&lt;br /&gt;
==== Детали ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.p;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_detali |       nazvanie       |     cvet      | ves  |      gorod&lt;br /&gt;
 --------------+----------------------+---------------+------+-----------------&lt;br /&gt;
  P9           | подставка            | синий         |  400 | Нижний Новгород&lt;br /&gt;
  P10          | стойка               | синий         | 2000 | Нижний Новгород&lt;br /&gt;
  P11          | абажур               | синий         |  400 | Нижний Новгород&lt;br /&gt;
  P1           | гайка                | чёрный        |   20 | Лондон&lt;br /&gt;
  P3           | ось                  | белый         | 5000 | Эдинбург&lt;br /&gt;
  P4           | зубчатое колесо      | чёрный        |   50 | Эдинбург&lt;br /&gt;
  P6           | транзистор           | коричневый    |    2 | Токио&lt;br /&gt;
  P7           | печатная плата       | зелёный       |  200 | Токио&lt;br /&gt;
  P8           | диод                 | коричневый    |    1 | Токио&lt;br /&gt;
  P12          | универсальная деталь | универсальный |    1 | Париж&lt;br /&gt;
  P13          | уникальная деталь    | уникальный    |    1 | Бостон&lt;br /&gt;
  P14          | болт                 | серый         |   20 | Ижевск&lt;br /&gt;
  P15          | рама                 | красный       | 3000 | Манчестер&lt;br /&gt;
  P16          | колесо               | белый         | 1500 | Манчестер&lt;br /&gt;
  P5           | втулка               | серый         |  350 | Манчестер&lt;br /&gt;
  P17          | бумага               | белый         |    1 | Астрахань&lt;br /&gt;
  P18          | плитка               | белый         |  300 | Флоренция&lt;br /&gt;
  P19          | орнамент             | серый         |  800 | Флоренция&lt;br /&gt;
  P20          | уголок               | серый         |  100 | Флоренция&lt;br /&gt;
  P21          | гайка 01-01          | серебристый   |   20 | Клин&lt;br /&gt;
  P22          | усиленная рама       | красный       | 3200 | Череповец&lt;br /&gt;
  P23          | винт                 | розовый       |    5 | Ижевск&lt;br /&gt;
  P24          | труселя              | красный       |   20 | Челябинск&lt;br /&gt;
  P25          | штуцерная деталь     | коричневый    |  450 | Череповец&lt;br /&gt;
  P2           | шуруп                | чёрный        |    5 | Лондон&lt;br /&gt;
  P26          | лезвие               | бесцветный    |  120 | Йокогама&lt;br /&gt;
 (26 rows)&lt;br /&gt;
&lt;br /&gt;
==== Изделия ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.j;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_izdelia |       nazvanie        |      gorod&lt;br /&gt;
 ---------------+-----------------------+-----------------&lt;br /&gt;
  J1            | автомобиль            | Магнитогорск&lt;br /&gt;
  J2            | процессор             | Зеленоград&lt;br /&gt;
  J3            | торшер                | Нижний Новгород&lt;br /&gt;
  J4            | универсальное изделие | Париж&lt;br /&gt;
  J5            | уникальное изделие    | Бостон&lt;br /&gt;
  J6            | велосипед 01/23       | Манчестер&lt;br /&gt;
  J7            | изделие из болтов     | Челябинск&lt;br /&gt;
  J8            | шкаф                  | Ярославль&lt;br /&gt;
  J9            | рама 02-01            | Череповец&lt;br /&gt;
  J10           | книга                 | Астрахань&lt;br /&gt;
  J11           | панно 01-03           | Флоренция&lt;br /&gt;
  J12           | велосипед 03-04       | Клин&lt;br /&gt;
  J13           | рама 02-03            | Череповец&lt;br /&gt;
  J14           | штуцер 01-02          | Череповец&lt;br /&gt;
  J15           | велосипед 01-04       | Клин&lt;br /&gt;
  J16           | кружевное бельё       | Челябинск&lt;br /&gt;
  J17           | штуцер 01-03          | Череповец&lt;br /&gt;
  J18           | кинжал                | Йокогама&lt;br /&gt;
 (18 rows)&lt;br /&gt;
&lt;br /&gt;
==== Сборки ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.spj;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika | nomer_detali | nomer_izdelia | kolichestvo&lt;br /&gt;
 -------------------+--------------+---------------+-------------&lt;br /&gt;
  S1                | P6           | J2            |          20&lt;br /&gt;
  S1                | P7           | J2            |           5&lt;br /&gt;
  S2                | P1           | J1            |           4&lt;br /&gt;
  S6                | P4           | J1            |           2&lt;br /&gt;
  S6                | P5           | J1            |           6&lt;br /&gt;
  S3                | P9           | J3            |           1&lt;br /&gt;
  S4                | P10          | J3            |           1&lt;br /&gt;
  S5                | P11          | J3            |           1&lt;br /&gt;
  S2                | P4           | J1            |           8&lt;br /&gt;
  S6                | P3           | J1            |          50&lt;br /&gt;
  S7                | P8           | J2            |          25&lt;br /&gt;
  S1                | P12          | J4            |           1&lt;br /&gt;
  S2                | P12          | J4            |           1&lt;br /&gt;
  S3                | P12          | J4            |           1&lt;br /&gt;
  S4                | P12          | J4            |           1&lt;br /&gt;
  S5                | P12          | J4            |           1&lt;br /&gt;
  S7                | P12          | J4            |           1&lt;br /&gt;
  S7                | P2           | J1            |           1&lt;br /&gt;
  S6                | P2           | J1            |           9&lt;br /&gt;
  S6                | P12          | J4            |           7&lt;br /&gt;
  S1                | P13          | J5            |          14&lt;br /&gt;
  S6                | P14          | J1            |        9000&lt;br /&gt;
  S2                | P14          | J1            |           3&lt;br /&gt;
  S6                | P1           | J1            |          12&lt;br /&gt;
  S8                | P15          | J6            |           1&lt;br /&gt;
  S8                | P16          | J6            |           2&lt;br /&gt;
  S3                | P5           | J6            |          10&lt;br /&gt;
  S10               | P2           | J8            |           4&lt;br /&gt;
  S8                | P1           | J7            |          16&lt;br /&gt;
  S9                | P14          | J7            |           3&lt;br /&gt;
  S11               | P10          | J3            |           2&lt;br /&gt;
  S12               | P15          | J1            |           3&lt;br /&gt;
  S11               | P11          | J3            |           4&lt;br /&gt;
  S10               | P14          | J9            |           5&lt;br /&gt;
  S13               | P17          | J10           |        1001&lt;br /&gt;
  S14               | P17          | J10           |        1111&lt;br /&gt;
  S15               | P17          | J10           |        1010&lt;br /&gt;
  S5                | P18          | J11           |           9&lt;br /&gt;
  S5                | P19          | J11           |           1&lt;br /&gt;
  S5                | P20          | J11           |           4&lt;br /&gt;
  S9                | P14          | J8            |          25&lt;br /&gt;
  S12               | P21          | J12           |          15&lt;br /&gt;
  S11               | P22          | J13           |           9&lt;br /&gt;
  S11               | P1           | J14           |          26&lt;br /&gt;
  S12               | P1           | J14           |          13&lt;br /&gt;
  S12               | P2           | J14           |          54&lt;br /&gt;
  S12               | P23          | J4            |         101&lt;br /&gt;
  S12               | P16          | J15           |          40&lt;br /&gt;
  S7                | P21          | J12           |           3&lt;br /&gt;
  S8                | P21          | J12           |           4&lt;br /&gt;
  S9                | P21          | J12           |           5&lt;br /&gt;
  S1                | P24          | J16           |           1&lt;br /&gt;
  S1                | P15          | J6            |           3&lt;br /&gt;
  S4                | P25          | J17           |           1&lt;br /&gt;
  S17               | P16          | J1            |           4&lt;br /&gt;
  S18               | P26          | J18           |           1&lt;br /&gt;
 (56 rows)&lt;br /&gt;
&lt;br /&gt;
== Готовые запросы ==&lt;br /&gt;
&lt;br /&gt;
Если видите, что тот или иной запрос можно составить короче и рациональней - смело вносите правку.&lt;br /&gt;
&lt;br /&gt;
В трёх билетах в задании на запрос встречается формулировка &amp;quot;&#039;&#039;только и только&#039;&#039;&amp;quot;. Как оказалось, это означает следующее: если холодильники поставляет &#039;&#039;только и только&#039;&#039; Уася, то:&lt;br /&gt;
# кроме Уаси никто не поставляет холодильники;&lt;br /&gt;
# Уася не поставляет ничего, кроме холодильников.&lt;br /&gt;
&lt;br /&gt;
Существующие запросы, естественно, оказались неправильными и их пришлось переписать. &amp;lt;s&amp;gt;Великий и могучий русский языка, ну что за экономия на бумаге.&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Билет 1 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера поставщиков, которые поставляют, по крайней мере, все те детали, которые поставляет поставщик с номером &#039;S2&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nomer_postavshika&lt;br /&gt;
FROM spasoi_ekz.spj SPJX&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT nomer_detali&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJY&lt;br /&gt;
                  WHERE nomer_postavshika = &#039;S2&#039;&lt;br /&gt;
                    AND NOT EXISTS (&lt;br /&gt;
                                    SELECT *&lt;br /&gt;
                                    FROM spasoi_ekz.spj&lt;br /&gt;
                                    WHERE nomer_postavshika = SPJX.nomer_postavshika&lt;br /&gt;
                                      AND nomer_detali = SPJY.nomer_detali&lt;br /&gt;
                                   )&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika&lt;br /&gt;
 -------------------&lt;br /&gt;
  S6&lt;br /&gt;
  S2&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 2 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера деталей и общее их количество для всех номеров деталей, поставляемых более чем одним поставщиком.&lt;br /&gt;
&lt;br /&gt;
Текст запроса, каким его дал Григорьев на лекции, впоследствии исправив его:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali AS &amp;quot;Номер детали&amp;quot;,&lt;br /&gt;
       SUM(kolichestvo) AS &amp;quot;Сколько штук поставляется&amp;quot;,&lt;br /&gt;
       COUNT(DISTINCT nomer_postavshika) AS &amp;quot;Сколько у неё поставщиков&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_postavshika) &amp;gt; 1;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali AS &amp;quot;Номер детали&amp;quot;,&lt;br /&gt;
       kol AS &amp;quot;Сколько штук поставляется&amp;quot;&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT nomer_detali,&lt;br /&gt;
             SUM(kolichestvo) AS kol,&lt;br /&gt;
             COUNT(DISTINCT nomer_postavshika)&lt;br /&gt;
      FROM spasoi_ekz.spj&lt;br /&gt;
      GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_postavshika) &amp;gt; 1&lt;br /&gt;
     ) A;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер детали | Сколько штук поставляется | Сколько у неё поставщиков&lt;br /&gt;
 --------------+---------------------------+---------------------------&lt;br /&gt;
  P1           |                        71 |                         5&lt;br /&gt;
  P10          |                         3 |                         2&lt;br /&gt;
  P11          |                         5 |                         2&lt;br /&gt;
  P12          |                        13 |                         7&lt;br /&gt;
  P14          |                      9036 |                         4&lt;br /&gt;
  P15          |                         7 |                         3&lt;br /&gt;
  P16          |                        46 |                         3&lt;br /&gt;
  P17          |                      3122 |                         3&lt;br /&gt;
  P2           |                        68 |                         4&lt;br /&gt;
  P21          |                        27 |                         4&lt;br /&gt;
  P4           |                        10 |                         2&lt;br /&gt;
  P5           |                        16 |                         2&lt;br /&gt;
 (12 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 3 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера поставщиков, поставляющих детали с номером &#039;P1&#039; для какого-либо изделия в количестве (в поставке) большим, чем средний объём поставок деталей с номером &#039;P2&#039; для этого изделия.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT X.nomer_postavshika &lt;br /&gt;
FROM spasoi_ekz.spj X&lt;br /&gt;
WHERE X.nomer_detali = &#039;P1&#039;&lt;br /&gt;
  AND X.kolichestvo &amp;gt; (&lt;br /&gt;
                       SELECT AVG(kolichestvo)&lt;br /&gt;
                       FROM spasoi_ekz.spj&lt;br /&gt;
                       WHERE nomer_izdelia = X.nomer_izdelia&lt;br /&gt;
                         AND nomer_detali = &#039;P2&#039;&lt;br /&gt;
                      );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но длиннее и нерациональней&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nomer_postavshika&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT *&lt;br /&gt;
      FROM spasoi_ekz.spj&lt;br /&gt;
      WHERE nomer_izdelia IN(&lt;br /&gt;
                             SELECT nomer_izdelia&lt;br /&gt;
                             FROM spasoi_ekz.spj&lt;br /&gt;
                             WHERE nomer_detali = &#039;P1&#039;&lt;br /&gt;
                            )&lt;br /&gt;
        AND nomer_izdelia IN(&lt;br /&gt;
	                     SELECT nomer_izdelia&lt;br /&gt;
	                     FROM spasoi_ekz.spj&lt;br /&gt;
	                     WHERE nomer_detali = &#039;P2&#039;&lt;br /&gt;
	                    )&lt;br /&gt;
     ) A&lt;br /&gt;
WHERE nomer_detali = &#039;P1&#039; AND kolichestvo &amp;gt;&lt;br /&gt;
(&lt;br /&gt;
 SELECT AVG(kolichestvo)&lt;br /&gt;
 FROM (&lt;br /&gt;
       SELECT *&lt;br /&gt;
       FROM spasoi_ekz.spj&lt;br /&gt;
       WHERE nomer_izdelia IN(&lt;br /&gt;
                              SELECT nomer_izdelia&lt;br /&gt;
                              FROM spasoi_ekz.spj&lt;br /&gt;
                              WHERE nomer_detali = &#039;P1&#039;&lt;br /&gt;
                             )&lt;br /&gt;
         AND nomer_izdelia IN(&lt;br /&gt;
                              SELECT nomer_izdelia&lt;br /&gt;
                              FROM spasoi_ekz.spj&lt;br /&gt;
                              WHERE nomer_detali = &#039;P2&#039;&lt;br /&gt;
                             )&lt;br /&gt;
      ) B&lt;br /&gt;
 WHERE nomer_detali = &#039;P2&#039;&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika&lt;br /&gt;
 -------------------&lt;br /&gt;
  S6&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 4 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера изделий, для которых детали поставляет только поставщик с номером ‘S1’.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_izdelia&lt;br /&gt;
FROM spasoi_ekz.spj X&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT *&lt;br /&gt;
                  FROM spasoi_ekz.spj&lt;br /&gt;
                  WHERE nomer_postavshika != &#039;S1&#039;&lt;br /&gt;
                    AND X.nomer_izdelia = nomer_izdelia&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но без EXISTS&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nomer_izdelia&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
WHERE nomer_izdelia IN(&lt;br /&gt;
                       SELECT nomer_izdelia&lt;br /&gt;
                       FROM spasoi_ekz.spj&lt;br /&gt;
                       WHERE nomer_postavshika = &#039;S1&#039;&lt;br /&gt;
                      )&lt;br /&gt;
  AND nomer_izdelia NOT IN(&lt;br /&gt;
                           SELECT nomer_izdelia&lt;br /&gt;
                           FROM spasoi_ekz.spj&lt;br /&gt;
                           WHERE nomer_postavshika != &#039;S1&#039;&lt;br /&gt;
                          );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_izdelia&lt;br /&gt;
 ---------------&lt;br /&gt;
  J5&lt;br /&gt;
  J16&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 5 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих детали с названием &amp;quot;Болт&amp;quot; в количестве (в поставке) большим, чем средний объём всех поставок деталей с номером &#039;P1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                           ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                        JOIN spasoi_ekz.p P&lt;br /&gt;
                           ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                              AND nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
WHERE kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT AVG(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj&lt;br /&gt;
                     WHERE SPJ.nomer_detali = &#039;P1&#039;&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но без JOIN&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s&lt;br /&gt;
WHERE nomer_postavshika IN (&lt;br /&gt;
                            SELECT nomer_postavshika&lt;br /&gt;
                            FROM spasoi_ekz.spj&lt;br /&gt;
                            WHERE nomer_detali = (&lt;br /&gt;
                                                  SELECT nomer_detali&lt;br /&gt;
                                                  FROM spasoi_ekz.p&lt;br /&gt;
                                                  WHERE LOWER(nazvanie) = LOWER(&#039;Болт&#039;)&lt;br /&gt;
                                                 )&lt;br /&gt;
                              AND kolichestvo &amp;gt; (&lt;br /&gt;
                                                 SELECT AVG(kolichestvo)&lt;br /&gt;
                                                 FROM spasoi_ekz.spj&lt;br /&gt;
                                                 WHERE nomer_detali = &#039;P1&#039;&lt;br /&gt;
                                                )&lt;br /&gt;
                           );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  imya&lt;br /&gt;
 ------&lt;br /&gt;
  Оша&lt;br /&gt;
  Иванов&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 6 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия деталей, поставляемых поставщиком, проживающим в том же городе, где изготавливаются эти детали, для изделия с названием ‘Велосипед 01/23’.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT P.nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                        JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                        JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
WHERE S.gorod = P.gorod&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Велосипед 01/23&#039;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос без JOIN&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nazvanie&lt;br /&gt;
FROM spasoi_ekz.S S, spasoi_ekz.p P, spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE S.gorod = P.gorod&lt;br /&gt;
  AND P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
  AND S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
  AND nomer_izdelia = (&lt;br /&gt;
                       SELECT nomer_izdelia&lt;br /&gt;
                       FROM spasoi_ekz.j&lt;br /&gt;
                       WHERE nazvanie = LOWER(&#039;Велосипед 01/23&#039;)&lt;br /&gt;
                      );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nazvanie&lt;br /&gt;
 ----------&lt;br /&gt;
  рама&lt;br /&gt;
  колесо&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 7 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия изделий, куда входят детали с названием &#039;Болт&#039;, поставляемых поставщиками с именем &#039;Иванов&#039;, в количестве (в поставке) большим, чем средний объём поставок для этого изделия.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT J.nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                        JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                        JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
WHERE imya LIKE &#039;%Иванов%&#039;&lt;br /&gt;
  AND P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
  AND kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT AVG(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj X&lt;br /&gt;
                     WHERE SPJ.nomer_izdelia = X.nomer_izdelia&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё один вариант запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie&lt;br /&gt;
FROM spasoi_ekz.j&lt;br /&gt;
WHERE nomer_izdelia IN (&lt;br /&gt;
                        SELECT nomer_izdelia&lt;br /&gt;
                        FROM (spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                                                   ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                                                      AND imya LIKE &#039;%Иванов%&#039;&lt;br /&gt;
                                                 JOIN spasoi_ekz.p P&lt;br /&gt;
                                                   ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                                      AND nazvanie = LOWER(&#039;Болт&#039;)) A&lt;br /&gt;
                        WHERE kolichestvo &amp;gt; (&lt;br /&gt;
                                             SELECT AVG(kolichestvo)&lt;br /&gt;
                                             FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                                                       ON SPJ.nomer_izdelia = A.nomer_izdelia&lt;br /&gt;
                                            )&lt;br /&gt;
                       );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;И ещё вариант этого же запроса, но длиннее и нерациональней&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT J.nazvanie, kolichestvo&lt;br /&gt;
      FROM spasoi_ekz.s S, spasoi_ekz.p P, spasoi_ekz.j J, spasoi_ekz.spj SPJ&lt;br /&gt;
      WHERE J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
        AND P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
        AND P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
        AND S.imya LIKE &#039;%Иванов%&#039;&lt;br /&gt;
        AND S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
     ) A&lt;br /&gt;
WHERE kolichestvo &amp;gt;&lt;br /&gt;
(&lt;br /&gt;
 SELECT AVG(kolichestvo)&lt;br /&gt;
 FROM spasoi_ekz.spj&lt;br /&gt;
 WHERE nomer_izdelia IN(&lt;br /&gt;
                        SELECT J.nomer_izdelia&lt;br /&gt;
                        FROM spasoi_ekz.s S, spasoi_ekz.p P, spasoi_ekz.j J, spasoi_ekz.spj SPJ&lt;br /&gt;
                        WHERE J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
                          AND P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                          AND P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
                          AND S.imya LIKE &#039;%Иванов%&#039;&lt;br /&gt;
                          AND S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
                       )&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
      nazvanie&lt;br /&gt;
 -------------------&lt;br /&gt;
  шкаф&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 8 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера изделий и общее количество деталей для них, поставляемых поставщиками с именем &#039;Петров&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_izdelia AS &amp;quot;Номер изделия&amp;quot;, SUM(kolichestvo) AS &amp;quot;Количество деталей&amp;quot; &lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                             -- так как &amp;quot;поставщикАМИ&amp;quot; и возможны&lt;br /&gt;
                             -- Иван Петров и Петров Иван, то LIKE %Петров%&lt;br /&gt;
                             AND imya LIKE &#039;%Петров%&#039;&lt;br /&gt;
GROUP BY nomer_izdelia;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер изделия | Количество деталей&lt;br /&gt;
 ---------------+--------------------&lt;br /&gt;
  J4            |                101&lt;br /&gt;
  J3            |                  6&lt;br /&gt;
  J13           |                  9&lt;br /&gt;
  J15           |                 40&lt;br /&gt;
  J1            |                  3&lt;br /&gt;
  J12           |                 15&lt;br /&gt;
  J14           |                 93&lt;br /&gt;
 (7 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 9 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера деталей и общее их количество для всех номеров деталей, которые входят только в одно изделие.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali, SUM(kolichestvo)&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_izdelia) = 1;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali, kol FROM (&lt;br /&gt;
       SELECT nomer_detali, SUM(kolichestvo) AS kol, COUNT(DISTINCT nomer_izdelia) = 1&lt;br /&gt;
       FROM spasoi_ekz.spj&lt;br /&gt;
       GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_izdelia) = 1&lt;br /&gt;
    ) A;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_detali | sum&lt;br /&gt;
 --------------+------&lt;br /&gt;
  P10          |    3&lt;br /&gt;
  P11          |    5&lt;br /&gt;
  P12          |   13&lt;br /&gt;
  P13          |   14&lt;br /&gt;
  P17          | 3122&lt;br /&gt;
  P18          |    9&lt;br /&gt;
  P19          |    1&lt;br /&gt;
  P20          |    4&lt;br /&gt;
  P21          |   27&lt;br /&gt;
  P22          |    9&lt;br /&gt;
  P23          |  101&lt;br /&gt;
  P24          |    1&lt;br /&gt;
  P25          |    1&lt;br /&gt;
  P26          |    1&lt;br /&gt;
  P3           |   50&lt;br /&gt;
  P4           |   10&lt;br /&gt;
  P6           |   20&lt;br /&gt;
  P7           |    5&lt;br /&gt;
  P8           |   25&lt;br /&gt;
  P9           |    1&lt;br /&gt;
 (20 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 10 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих детали с названием &#039;Болт&#039; для изделия с названием &#039;Рама 02-01&#039; в количестве (в поставке) большим, чем минимальное значение поставки детали с номером &#039;P1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
			   ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
			      AND J.nazvanie = LOWER(&#039;Рама 02-01&#039;)&lt;br /&gt;
			 JOIN spasoi_ekz.p P&lt;br /&gt;
			   ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
			      AND P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
			 JOIN spasoi_ekz.s S&lt;br /&gt;
			   ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE kolichestvo &amp;gt; (&lt;br /&gt;
		     SELECT MIN(kolichestvo)&lt;br /&gt;
		     FROM spasoi_ekz.spj &lt;br /&gt;
		     WHERE nomer_detali = &#039;P1&#039;&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Русе Болтон&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 11 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия городов и суммарное состояние проживающих в каждом городе поставщиков, у которых минимальный объём поставки деталей больше 1000.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT gorod, SUM(sostoyanie)&lt;br /&gt;
FROM spasoi_ekz.s S&lt;br /&gt;
WHERE (	&lt;br /&gt;
       SELECT MIN(kolichestvo)	&lt;br /&gt;
       FROM spasoi_ekz.spj X	&lt;br /&gt;
       WHERE X.nomer_postavshika = S.nomer_postavshika		&lt;br /&gt;
      ) &amp;gt; 1000&lt;br /&gt;
GROUP BY gorod;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Вариант подлиннее для тех, кто не ищет лёгких путей&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT gorod, SUM(sostoyanie)&lt;br /&gt;
FROM spasoi_ekz.s&lt;br /&gt;
WHERE nomer_postavshika IN (&lt;br /&gt;
                            SELECT nomer_postavshika&lt;br /&gt;
                            FROM spasoi_ekz.spj&lt;br /&gt;
                            GROUP BY nomer_postavshika HAVING MIN(kolichestvo) &amp;gt; 1000&lt;br /&gt;
                           )&lt;br /&gt;
GROUP BY gorod;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;!-- а этот запрос выполняет не совсем то и не правильно&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT gorod, sost&lt;br /&gt;
FROM (&lt;br /&gt;
SELECT gorod, SUM(sostoyanie) AS sost, SUM(SPJ.kolichestvo)&lt;br /&gt;
FROM spasoi_ekz.spj, spasoi_ekz.s&lt;br /&gt;
WHERE S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
GROUP BY S.gorod HAVING SUM(SPJ.kolichestvo) &amp;gt; 1000&lt;br /&gt;
) A;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; --&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
    gorod   |   sum&lt;br /&gt;
 -----------+---------&lt;br /&gt;
  Прага     | 2111110&lt;br /&gt;
  Стокгольм |  888888&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 12 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера деталей, поставляемых для какого-либо изделия поставщиком, проживающим в том же городе, где изготавливается это изделие.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali&lt;br /&gt;
FROM spasoi_ekz.spj SPJ, spasoi_ekz.s S, spasoi_ekz.j J&lt;br /&gt;
WHERE SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
  AND S.gorod = J.gorod&lt;br /&gt;
  AND J.nomer_izdelia = SPJ.nomer_izdelia;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_detali&lt;br /&gt;
 --------------&lt;br /&gt;
  P15&lt;br /&gt;
  P16&lt;br /&gt;
  P26&lt;br /&gt;
 (3 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 13 ===&lt;br /&gt;
&lt;br /&gt;
Написать &amp;lt;u&amp;gt;один&amp;lt;/u&amp;gt; запрос SELECT: выдать количества строк в таблице S (Поставщик) 1) с пустыми значениями и 2) непустыми значениями в столбце Состояние.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT COUNT(*) - COUNT(sostoyanie) AS &amp;quot;С пустым состоянием&amp;quot;, &lt;br /&gt;
       COUNT(sostoyanie) AS &amp;quot;С не пустым состоянием&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.s;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но длиннее и нерациональней&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SELECT COUNT(Snull.*) AS &amp;quot;С пустым состоянием&amp;quot;, COUNT(Snotnull.sostoyanie) AS &amp;quot;С не пустым состоянием&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.s Snull RIGHT OUTER JOIN spasoi_ekz.s Snotnull&lt;br /&gt;
                                      ON Snull.nomer_postavshika = Snotnull.nomer_postavshika&lt;br /&gt;
                                         AND Snull.sostoyanie IS NULL;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  С пустым состоянием | С не пустым состоянием&lt;br /&gt;
 ---------------------+-----------------------&lt;br /&gt;
                    2 |                    16&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 14 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют детали только и только для изделия с номером &#039;J1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj A JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON A.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE nomer_izdelia = &#039;J1&#039;&lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT nomer_postavshika&lt;br /&gt;
                  FROM spasoi_ekz.spj&lt;br /&gt;
                  WHERE nomer_izdelia != &#039;J1&#039;&lt;br /&gt;
                    AND nomer_postavshika = A.nomer_postavshika&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       imya&lt;br /&gt;
 ----------------&lt;br /&gt;
  Томми Версетти&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 15 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать наименования изделий, для которых детали поставляют только те поставщики, у которых состояние больше 1000000 у.е.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT j.nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
		  SELECT *&lt;br /&gt;
		  FROM spasoi_ekz.spj X JOIN spasoi_ekz.s S&lt;br /&gt;
		                          ON X.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
		  WHERE sostoyanie &amp;lt;= 1000000&lt;br /&gt;
		  AND X.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Вариант этого запроса без NOT EXISTS&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                        JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
WHERE sostoyanie &amp;gt; 1000000&lt;br /&gt;
  AND SPJ.nomer_izdelia NOT IN (&lt;br /&gt;
                                SELECT nomer_izdelia&lt;br /&gt;
                                FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                                                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                                WHERE sostoyanie &amp;lt; 1000000&lt;br /&gt;
                               );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       nazvanie&lt;br /&gt;
 --------------------&lt;br /&gt;
  кружевное бельё&lt;br /&gt;
  уникальное изделие&lt;br /&gt;
  процессор&lt;br /&gt;
 (3 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 16 ===&lt;br /&gt;
Написать запрос SELECT: выдать цвета и для каждого цвета общее количество деталей, входящих в изделие с названием &#039;Панно 01-03&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT cvet AS &amp;quot;Цвет&amp;quot;, SUM(kolichestvo) AS &amp;quot;Деталей&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
			     AND J.nazvanie = LOWER(&#039;Панно 01-03&#039;)&lt;br /&gt;
			JOIN spasoi_ekz.P P&lt;br /&gt;
			  ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
GROUP BY cvet;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Цвет  | Деталей&lt;br /&gt;
 -------+---------&lt;br /&gt;
  белый |       9&lt;br /&gt;
  серый |       5&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 17 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера поставщиков и количество сделанных ими поставок при условии, что среднее число деталей во всех этих поставках больше 1000.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nom AS &amp;quot;Номер поставщика&amp;quot;, cnt AS &amp;quot;Количество поставок&amp;quot;&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT S.nomer_postavshika AS nom,&lt;br /&gt;
             COUNT(SPJ.nomer_postavshika) AS cnt,&lt;br /&gt;
             AVG(SPJ.kolichestvo) AS kol&lt;br /&gt;
      FROM spasoi_ekz.s S, spasoi_ekz.spj SPJ&lt;br /&gt;
      WHERE S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
      GROUP BY S.nomer_postavshika&lt;br /&gt;
     ) A&lt;br /&gt;
WHERE kol &amp;gt; 1000;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос немного попроще&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_postavshika AS &amp;quot;Номер поставщика&amp;quot;, COUNT(*) AS &amp;quot;Количество поставок&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
WHERE nomer_postavshika IN (&lt;br /&gt;
                            SELECT nomer_postavshika&lt;br /&gt;
                            FROM spasoi_ekz.spj&lt;br /&gt;
                            GROUP BY nomer_postavshika HAVING AVG(kolichestvo) &amp;gt; 1000&lt;br /&gt;
                           )&lt;br /&gt;
GROUP BY nomer_postavshika;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер поставщика | Количество поставок&lt;br /&gt;
 ------------------+---------------------&lt;br /&gt;
  S13              |                   1&lt;br /&gt;
  S6               |                   7&lt;br /&gt;
  S14              |                   1&lt;br /&gt;
  S15              |                   1&lt;br /&gt;
 (4 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 18 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, имеющих состояние больше 1000 и поставляющих деталь с названием &#039;Гайка 01-01&#039; для изделия с названием &#039;Велосипед 03-04&#039; в количестве (в поставке) большим, чем средний объём поставки, выполненной поставщиками с именем &#039;Иванов&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:2nd dufficulty.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;5px&amp;quot;&amp;gt;&#039;&#039;&#039;Второй по сложности запрос экзамена!&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;4px&amp;quot;&amp;gt;&#039;&#039;&#039;Вот уж не свезло, так не свезло&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                    JOIN spasoi_ekz.j J&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
WHERE sostoyanie &amp;gt; 1000&lt;br /&gt;
  AND P.nazvanie = LOWER(&#039;Гайка 01-01&#039;)&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Велосипед 03-04&#039;)&lt;br /&gt;
  AND kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT AVG(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                       ON SPJ.nomer_postavshika = S.nomer_postavshika &lt;br /&gt;
                     WHERE S.imya = &#039;Иванов&#039;&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Пётр&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 19 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия красных деталей, которые входят только в изделие с названием &#039;Рама 02-03&#039; в количестве, меньшем 10 единиц в поставке.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT X.nazvanie&lt;br /&gt;
FROM spasoi_ekz.p X JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_detali = X.nomer_detali&lt;br /&gt;
                    JOIN spasoi_ekz.j J&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
WHERE X.cvet = &#039;красный&#039;&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Рама 02-03&#039;)&lt;br /&gt;
  AND kolichestvo &amp;lt; 10&lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT J.nomer_izdelia&lt;br /&gt;
                  FROM spasoi_ekz.j J JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                                        ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                  WHERE J.nazvanie != LOWER(&#039;Рама 02-03&#039;)&lt;br /&gt;
                    AND X.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант этого же запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT P.nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND cvet = &#039;красный&#039;&lt;br /&gt;
                        JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                              AND J.nazvanie = LOWER(&#039;Рама 02-03&#039;)&lt;br /&gt;
WHERE kolichestvo &amp;lt; 10&lt;br /&gt;
  AND SPJ.nomer_detali NOT IN (&lt;br /&gt;
                               SELECT nomer_detali&lt;br /&gt;
                               FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                                         ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                                                            AND J.nazvanie != LOWER(&#039;Рама 02-03&#039;)&lt;br /&gt;
                              );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     nazvanie&lt;br /&gt;
 ----------------&lt;br /&gt;
  усиленная рама&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 20 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих только белые детали.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT nomer_postavshika&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                                            ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                  WHERE nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    AND P.cvet != &#039;белый&#039;&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё один вариант этого же запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND cvet = &#039;белый&#039;&lt;br /&gt;
                        JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE S.nomer_postavshika NOT IN (&lt;br /&gt;
                                  SELECT nomer_postavshika&lt;br /&gt;
                                  FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                                                            ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                                               AND cvet != &#039;белый&#039;&lt;br /&gt;
                                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;И ещё один вариант этого же запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s&lt;br /&gt;
WHERE nomer_postavshika NOT IN  (&lt;br /&gt;
                                 SELECT spj.nomer_postavshika&lt;br /&gt;
                                 FROM spasoi_ekz.spj SPJ, spasoi_ekz.p P&lt;br /&gt;
                                 WHERE SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                   AND p.cvet != &#039;белый&#039;&lt;br /&gt;
                                )&lt;br /&gt;
  AND nomer_postavshika  IN (&lt;br /&gt;
                             SELECT spj.nomer_postavshika&lt;br /&gt;
                             FROM spasoi_ekz.spj SPJ, spasoi_ekz.p P&lt;br /&gt;
                             WHERE SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                               AND p.cvet = &#039;белый&#039;&lt;br /&gt;
                            );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       imya&lt;br /&gt;
 -----------------&lt;br /&gt;
  Рендилл Тарли&lt;br /&gt;
  Сэмвелл Тарли&lt;br /&gt;
  Мелисса Флорент&lt;br /&gt;
  Томми Версетти&lt;br /&gt;
 (4 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 21 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия изделий, для которых детали поставляет только и только поставщик с номером &#039;S1&#039;.&lt;br /&gt;
&lt;br /&gt;
Чтобы продемонстрировать выполнение запроса наглядно, возьмём поставщика не &#039;S1&#039;, а &#039;S18&#039;, который был создан специально для этого запроса. Если оставить &#039;S1&#039;, то наглядности не получится, так как по нашей схеме БД этот поставщик не попадает под условие &amp;quot;&#039;&#039;только и только&#039;&#039;&amp;quot;, и запрос вернёт пустой результат.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie&lt;br /&gt;
FROM spasoi_ekz.j J, spasoi_ekz.SPJ SPJ&lt;br /&gt;
WHERE J.nomer_izdelia = SPJ.nomer_izdelia &lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT *&lt;br /&gt;
                  FROM spasoi_ekz.spj&lt;br /&gt;
                  WHERE nomer_postavshika != &#039;S18&#039; AND nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                 )&lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT *&lt;br /&gt;
                  FROM spasoi_ekz.spj&lt;br /&gt;
                  WHERE nomer_postavshika = &#039;S18&#039; AND nomer_izdelia != J.nomer_izdelia&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       nazvanie&lt;br /&gt;
 --------------------&lt;br /&gt;
  кинжал&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 22 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют только детали с номером &#039;P1&#039; для изделия с именем &#039;Штуцер 01-02&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- неверный запрос - номер изделия, а не название&lt;br /&gt;
SELECT imya FROM S X&lt;br /&gt;
JOIN SPJ Y ON X.nomer_postavshika=Y.nomer_postavshika&lt;br /&gt;
WHERE X.nomer_postavshika NOT IN (&lt;br /&gt;
                  SELECT DISTINCT nomer_postavshika FROM SPJ Z&lt;br /&gt;
                  WHERE Z.nomer_izdelia != &#039;Штуцер 01-02&#039;&lt;br /&gt;
                  AND Z.nomer_detali!=&#039;P1&#039;);--&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                             AND J.nazvanie = LOWER(&#039;штуцер 01-02&#039;)&lt;br /&gt;
                        JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND SPJ.nomer_detali = &#039;P1&#039;&lt;br /&gt;
                        JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE SPJ.nomer_postavshika NOT IN (&lt;br /&gt;
                                    SELECT nomer_postavshika&lt;br /&gt;
                                    FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                                              ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                                                                 AND J.nazvanie = LOWER(&#039;штуцер 01-02&#039;)&lt;br /&gt;
                                                            JOIN spasoi_ekz.p P&lt;br /&gt;
                                                              ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                                                 AND SPJ.nomer_detali != &#039;P1&#039;&lt;br /&gt;
                              );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Иван&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 23 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют деталь с названием &#039;Винт&#039; в количестве большим 100 единиц в одной поставке и имеют состояние больше среднего по их родному городу.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT S.imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
WHERE P.nazvanie = LOWER(&#039;Винт&#039;)&lt;br /&gt;
  AND SPJ.kolichestvo &amp;gt; 100&lt;br /&gt;
  AND S.sostoyanie &amp;gt; (&lt;br /&gt;
                      SELECT AVG(SS.sostoyanie)&lt;br /&gt;
                      FROM spasoi_ekz.s SS&lt;br /&gt;
                      WHERE SS.gorod = S.gorod&lt;br /&gt;
                     );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Пётр&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 24 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать наименования деталей и общее их количество для всех наименований деталей, изготавливаемых в одном городе.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- С этим запросом возникла неожиданная проблема - задание то ли неполное, то ли неправильное, потому что нельзя однозначно сказать, что по нему требуется сделать.&lt;br /&gt;
&lt;br /&gt;
Так что тут несколько вариантов запросов (кто как понял).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Первый вариант запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie, kol&lt;br /&gt;
FROM spasoi_ekz.p A, (&lt;br /&gt;
                      SELECT X.gorod, SUM(kolichestvo) as kol&lt;br /&gt;
                      FROM spasoi_ekz.p X, spasoi_ekz.spj Y&lt;br /&gt;
                      WHERE Y.nomer_detali = X.nomer_detali&lt;br /&gt;
                      GROUP BY X.gorod&lt;br /&gt;
                     ) B&lt;br /&gt;
WHERE A.gorod = B.gorod;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
        nazvanie       | kol&lt;br /&gt;
 ----------------------+------&lt;br /&gt;
  подставка            |    9&lt;br /&gt;
  стойка               |    9&lt;br /&gt;
  абажур               |    9&lt;br /&gt;
  гайка                |  139&lt;br /&gt;
  ось                  |   60&lt;br /&gt;
  зубчатое колесо      |   60&lt;br /&gt;
  транзистор           |   50&lt;br /&gt;
  печатная плата       |   50&lt;br /&gt;
  диод                 |   50&lt;br /&gt;
  универсальная деталь |   13&lt;br /&gt;
  уникальная деталь    |   14&lt;br /&gt;
  болт                 | 9137&lt;br /&gt;
  рама                 |   69&lt;br /&gt;
  колесо               |   69&lt;br /&gt;
  втулка               |   69&lt;br /&gt;
  бумага               | 3122&lt;br /&gt;
  плитка               |   14&lt;br /&gt;
  орнамент             |   14&lt;br /&gt;
  уголок               |   14&lt;br /&gt;
  гайка 01-01          |   27&lt;br /&gt;
  усиленная рама       |   10&lt;br /&gt;
  винт                 | 9137&lt;br /&gt;
  труселя              |    1&lt;br /&gt;
  штуцерная деталь     |   10&lt;br /&gt;
  шуруп                |  139&lt;br /&gt;
 (25 rows)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
и --&amp;gt;&lt;br /&gt;
В уточнение задания Григорьев сказал следующее: &amp;quot;&#039;&#039;Следует учесть, что в качестве наименования города может выступать переменная, в которую в некоторой программе должно быть занесено конкретное значение перед выполнением запроса&#039;&#039;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
То есть, вообще говоря, задание на запрос неполное, и его можно трактовать так: выдать наименования деталей и общее их количество для всех наименований деталей, изготавливаемых в городе &amp;lt;code&amp;gt;%НАЗВАНИЕГОРОДА%&amp;lt;/code&amp;gt;. Вот эта переменная задаётся где-то в программе, а в БД идёт запрос с уже подставленным конкретным названием. &lt;br /&gt;
&lt;br /&gt;
Этот вариант запроса составлен, например, для Лондона. &lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie, SUM(kolichestvo)&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
WHERE gorod = &#039;Лондон&#039;&lt;br /&gt;
GROUP BY nazvanie;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nazvanie | sum&lt;br /&gt;
 ----------+-----&lt;br /&gt;
  гайка    |  71&lt;br /&gt;
  шуруп    |  68&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 25 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих хотя бы одну белую деталь для изделия с названием &#039;Велосипед 01-04&#039; с объёмом поставки большим, чем средний объём поставки этого поставщика.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                    JOIN spasoi_ekz.j J&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
WHERE cvet = &#039;белый&#039;&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Велосипед 01-04&#039;)&lt;br /&gt;
  AND kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT AVG(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj SPJ&lt;br /&gt;
                     WHERE SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Пётр&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 26 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера красных деталей и количество поставок этих деталей.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT P.nomer_detali AS &amp;quot;Номер детали&amp;quot;, COUNT(kolichestvo) AS &amp;quot;Количество поставок с ней&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.p P, spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
  AND cvet = &#039;красный&#039;&lt;br /&gt;
GROUP BY P.nomer_detali;   &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос через JOIN&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT SPJ.nomer_detali AS &amp;quot;Номер детали&amp;quot;, COUNT(kolichestvo) AS &amp;quot;Количество поставок с ней&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND cvet = &#039;красный&#039;&lt;br /&gt;
GROUP BY SPJ.nomer_detali;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер детали | Количество поставок с ней&lt;br /&gt;
 --------------+---------------------------&lt;br /&gt;
  P15          |                         3&lt;br /&gt;
  P22          |                         1&lt;br /&gt;
  P24          |                         1&lt;br /&gt;
 (3 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 27 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать наименования городов и среднее состояние поставщиков для каждого города, поставляющих детали с названием &#039;Гайка 01-01&#039; для изделия с названием &#039;Велосипед 03-04&#039; в количестве (в поставке) большим, чем минимальный объём поставки, выполненной поставщиком с номером &#039;S1&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:1st dufficulty.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;7px&amp;quot;&amp;gt;&#039;&#039;&#039;Сложнейший запрос экзамена!&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;5px&amp;quot;&amp;gt;&#039;&#039;&#039;Сохрани Джа, вытащить такое&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT S.gorod AS &amp;quot;Город&amp;quot;, AVG(S.sostoyanie) AS &amp;quot;Среднее состояние&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                    JOIN spasoi_ekz.j J&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
WHERE P.nazvanie = LOWER(&#039;Гайка 01-01&#039;)&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Велосипед 03-04&#039;)&lt;br /&gt;
  AND kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT MIN(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj&lt;br /&gt;
                     WHERE nomer_postavshika = &#039;S1&#039;&lt;br /&gt;
                    )&lt;br /&gt;
GROUP BY S.gorod;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
    Город   |   Среднее состояние&lt;br /&gt;
 -----------+-----------------------&lt;br /&gt;
  Мытищи    |    35000.500000000000&lt;br /&gt;
  Йокогама  |  1500000.000000000000&lt;br /&gt;
  Манчестер | 2571.0000000000000000&lt;br /&gt;
 (3 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 28 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия изделий, куда входит хотя бы одна красная деталь весом больше 10 граммов, поставляемая только поставщиком с номером &#039;S1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT J.nazvanie&lt;br /&gt;
FROM spasoi_ekz.j J JOIN spasoi_ekz.spj SPJ1&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ1.nomer_izdelia&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ1.nomer_detali&lt;br /&gt;
WHERE P.ves &amp;gt; 10&lt;br /&gt;
 AND P.cvet = &#039;красный&#039;&lt;br /&gt;
 AND NOT EXISTS (&lt;br /&gt;
                 SELECT SPJ2.nomer_postavshika&lt;br /&gt;
                 FROM spasoi_ekz.spj SPJ2         &lt;br /&gt;
                 WHERE SPJ2.nomer_detali = P.nomer_detali&lt;br /&gt;
	 	   AND SPJ2.nomer_postavshika != &#039;S1&#039;&lt;br /&gt;
                );                     &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     nazvanie&lt;br /&gt;
 -----------------&lt;br /&gt;
  кружевное бельё&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 29 ===&lt;br /&gt;
Написать запрос SELECT: выдать названия деталей, которые входят только и только в состав изделия с названием &#039;Штуцер 01-03&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie&lt;br /&gt;
FROM spasoi_ekz.p P, spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE P.nomer_detali = SPJ.nomer_detali &lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT SPJ.nomer_izdelia&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                            ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
                  WHERE (&lt;br /&gt;
                         J.nazvanie != LOWER(&#039;Штуцер 01-03&#039;)&lt;br /&gt;
                         AND&lt;br /&gt;
                         SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                        )&lt;br /&gt;
                     OR (&lt;br /&gt;
                         J.nazvanie = LOWER(&#039;Штуцер 01-03&#039;)&lt;br /&gt;
                         AND&lt;br /&gt;
                         SPJ.nomer_detali != P.nomer_detali&lt;br /&gt;
                        )&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
      nazvanie&lt;br /&gt;
 ------------------&lt;br /&gt;
  штуцерная деталь&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 30 ===&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют, по крайней мере, все те детали, которые поставляет поставщик с номером &#039;S2&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT imya&lt;br /&gt;
FROM spasoi_ekz.s S&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT nomer_detali&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJY&lt;br /&gt;
                  WHERE nomer_postavshika = &#039;S2&#039;&lt;br /&gt;
                    AND NOT EXISTS (&lt;br /&gt;
                                    SELECT *&lt;br /&gt;
                                    FROM spasoi_ekz.spj&lt;br /&gt;
                                    WHERE nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                                      AND nomer_detali = SPJY.nomer_detali&lt;br /&gt;
                                   )&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  imya&lt;br /&gt;
 ------------&lt;br /&gt;
  Оша&lt;br /&gt;
  Бран Старк&lt;br /&gt;
 (2 rows)&lt;br /&gt;
[[Категория:Структурное проектирование АСОИ (10 семестр)]]&lt;/div&gt;</summary>
		<author><name>81.9.52.28</name></author>
	</entry>
	<entry>
		<id>https://iu5bmstu.ru/index.php?title=SQL-%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D1%8B_%D0%BA_%D1%8D%D0%BA%D0%B7%D0%B0%D0%BC%D0%B5%D0%BD%D1%83_%D0%BF%D0%BE_%D0%A1%D0%9F%D0%90%D0%A1%D0%9E%D0%98_(10_%D1%81%D0%B5%D0%BC%D0%B5%D1%81%D1%82%D1%80)&amp;diff=3846</id>
		<title>SQL-запросы к экзамену по СПАСОИ (10 семестр)</title>
		<link rel="alternate" type="text/html" href="https://iu5bmstu.ru/index.php?title=SQL-%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D1%8B_%D0%BA_%D1%8D%D0%BA%D0%B7%D0%B0%D0%BC%D0%B5%D0%BD%D1%83_%D0%BF%D0%BE_%D0%A1%D0%9F%D0%90%D0%A1%D0%9E%D0%98_(10_%D1%81%D0%B5%D0%BC%D0%B5%D1%81%D1%82%D1%80)&amp;diff=3846"/>
		<updated>2013-06-15T18:25:36Z</updated>

		<summary type="html">&lt;p&gt;81.9.52.28: /* Билет 5 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right; clear:both; margin-right:1.0em;&amp;quot;&amp;gt;__TOC__&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Билет экзамена по [[:Категория:Структурное проектирование АСОИ (10 семестр) | СПАСОИ]] состоит из двух частей:&lt;br /&gt;
# теория;&lt;br /&gt;
# SQL-запрос.&lt;br /&gt;
&lt;br /&gt;
На этой странице собраны все сформированные запросы по билетам.&lt;br /&gt;
&lt;br /&gt;
Странно, что ни в одном билете нет запроса с сортировкой результатов. Возможно, они буду в дополнительных заданиях.&lt;br /&gt;
&lt;br /&gt;
== Схема БД ==&lt;br /&gt;
&lt;br /&gt;
Схема БД используется всё [[СПАСОИ_(10)_-_Лекция_№8_-_SQL#Некоторые возможности языка SQL | та же]], что была в прошлом семестре и на лекциях.&lt;br /&gt;
&lt;br /&gt;
Для написания запросов и проверки их выполнения создана БД в СУБД [http://www.postgresql.org/ PostgreSQL].&lt;br /&gt;
&lt;br /&gt;
Скрипт создания можно загрузить [http://yadi.sk/d/ArwqOGAy5pPfi отсюда].&lt;br /&gt;
&lt;br /&gt;
=== Таблицы БД ===&lt;br /&gt;
&lt;br /&gt;
==== Поставщики ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.s;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika |       imya       | sostoyanie |   gorod&lt;br /&gt;
 -------------------+------------------+------------+------------&lt;br /&gt;
  S5                | Мелисандра       |      65000 | Мадрид&lt;br /&gt;
  S2                | Бран Старк       |      60000 | Мурманск&lt;br /&gt;
  S1                | Якен Хгар        |    1500000 | Йокогама&lt;br /&gt;
  S7                | Сирио Форель     |    1500000 | Йокогама&lt;br /&gt;
  S4                | Джейме Ланнистер |     750000 | Лондон&lt;br /&gt;
  S3                | Серсея Ланнистер |    1200000 | Лондон&lt;br /&gt;
  S8                | Тирион Ланнистер |       2571 | Манчестер&lt;br /&gt;
  S9                | Иванов           |      35000 | Мытищи&lt;br /&gt;
  S10               | Русе Болтон      |      44444 | Баренцбург&lt;br /&gt;
  S11               | Петров Иван      |      35000 | Мытищи&lt;br /&gt;
  S14               | Рендилл Тарли    |    1111111 | Прага&lt;br /&gt;
  S13               | Сэмвелл Тарли    |     999999 | Прага&lt;br /&gt;
  S6                | Оша              |            | Москва&lt;br /&gt;
  S16               | Ходор            |            | Москва&lt;br /&gt;
  S15               | Мелисса Флорент  |     888888 | Стокгольм&lt;br /&gt;
  S12               | Петров Пётр      |      35001 | Мытищи&lt;br /&gt;
  S17               | Томми Версетти   |  123456789 | Майами&lt;br /&gt;
  S18               | Безликий         |          1 | Йокогама&lt;br /&gt;
 (18 rows)&lt;br /&gt;
&lt;br /&gt;
==== Детали ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.p;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_detali |       nazvanie       |     cvet      | ves  |      gorod&lt;br /&gt;
 --------------+----------------------+---------------+------+-----------------&lt;br /&gt;
  P9           | подставка            | синий         |  400 | Нижний Новгород&lt;br /&gt;
  P10          | стойка               | синий         | 2000 | Нижний Новгород&lt;br /&gt;
  P11          | абажур               | синий         |  400 | Нижний Новгород&lt;br /&gt;
  P1           | гайка                | чёрный        |   20 | Лондон&lt;br /&gt;
  P3           | ось                  | белый         | 5000 | Эдинбург&lt;br /&gt;
  P4           | зубчатое колесо      | чёрный        |   50 | Эдинбург&lt;br /&gt;
  P6           | транзистор           | коричневый    |    2 | Токио&lt;br /&gt;
  P7           | печатная плата       | зелёный       |  200 | Токио&lt;br /&gt;
  P8           | диод                 | коричневый    |    1 | Токио&lt;br /&gt;
  P12          | универсальная деталь | универсальный |    1 | Париж&lt;br /&gt;
  P13          | уникальная деталь    | уникальный    |    1 | Бостон&lt;br /&gt;
  P14          | болт                 | серый         |   20 | Ижевск&lt;br /&gt;
  P15          | рама                 | красный       | 3000 | Манчестер&lt;br /&gt;
  P16          | колесо               | белый         | 1500 | Манчестер&lt;br /&gt;
  P5           | втулка               | серый         |  350 | Манчестер&lt;br /&gt;
  P17          | бумага               | белый         |    1 | Астрахань&lt;br /&gt;
  P18          | плитка               | белый         |  300 | Флоренция&lt;br /&gt;
  P19          | орнамент             | серый         |  800 | Флоренция&lt;br /&gt;
  P20          | уголок               | серый         |  100 | Флоренция&lt;br /&gt;
  P21          | гайка 01-01          | серебристый   |   20 | Клин&lt;br /&gt;
  P22          | усиленная рама       | красный       | 3200 | Череповец&lt;br /&gt;
  P23          | винт                 | розовый       |    5 | Ижевск&lt;br /&gt;
  P24          | труселя              | красный       |   20 | Челябинск&lt;br /&gt;
  P25          | штуцерная деталь     | коричневый    |  450 | Череповец&lt;br /&gt;
  P2           | шуруп                | чёрный        |    5 | Лондон&lt;br /&gt;
  P26          | лезвие               | бесцветный    |  120 | Йокогама&lt;br /&gt;
 (26 rows)&lt;br /&gt;
&lt;br /&gt;
==== Изделия ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.j;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_izdelia |       nazvanie        |      gorod&lt;br /&gt;
 ---------------+-----------------------+-----------------&lt;br /&gt;
  J1            | автомобиль            | Магнитогорск&lt;br /&gt;
  J2            | процессор             | Зеленоград&lt;br /&gt;
  J3            | торшер                | Нижний Новгород&lt;br /&gt;
  J4            | универсальное изделие | Париж&lt;br /&gt;
  J5            | уникальное изделие    | Бостон&lt;br /&gt;
  J6            | велосипед 01/23       | Манчестер&lt;br /&gt;
  J7            | изделие из болтов     | Челябинск&lt;br /&gt;
  J8            | шкаф                  | Ярославль&lt;br /&gt;
  J9            | рама 02-01            | Череповец&lt;br /&gt;
  J10           | книга                 | Астрахань&lt;br /&gt;
  J11           | панно 01-03           | Флоренция&lt;br /&gt;
  J12           | велосипед 03-04       | Клин&lt;br /&gt;
  J13           | рама 02-03            | Череповец&lt;br /&gt;
  J14           | штуцер 01-02          | Череповец&lt;br /&gt;
  J15           | велосипед 01-04       | Клин&lt;br /&gt;
  J16           | кружевное бельё       | Челябинск&lt;br /&gt;
  J17           | штуцер 01-03          | Череповец&lt;br /&gt;
  J18           | кинжал                | Йокогама&lt;br /&gt;
 (18 rows)&lt;br /&gt;
&lt;br /&gt;
==== Сборки ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.spj;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika | nomer_detali | nomer_izdelia | kolichestvo&lt;br /&gt;
 -------------------+--------------+---------------+-------------&lt;br /&gt;
  S1                | P6           | J2            |          20&lt;br /&gt;
  S1                | P7           | J2            |           5&lt;br /&gt;
  S2                | P1           | J1            |           4&lt;br /&gt;
  S6                | P4           | J1            |           2&lt;br /&gt;
  S6                | P5           | J1            |           6&lt;br /&gt;
  S3                | P9           | J3            |           1&lt;br /&gt;
  S4                | P10          | J3            |           1&lt;br /&gt;
  S5                | P11          | J3            |           1&lt;br /&gt;
  S2                | P4           | J1            |           8&lt;br /&gt;
  S6                | P3           | J1            |          50&lt;br /&gt;
  S7                | P8           | J2            |          25&lt;br /&gt;
  S1                | P12          | J4            |           1&lt;br /&gt;
  S2                | P12          | J4            |           1&lt;br /&gt;
  S3                | P12          | J4            |           1&lt;br /&gt;
  S4                | P12          | J4            |           1&lt;br /&gt;
  S5                | P12          | J4            |           1&lt;br /&gt;
  S7                | P12          | J4            |           1&lt;br /&gt;
  S7                | P2           | J1            |           1&lt;br /&gt;
  S6                | P2           | J1            |           9&lt;br /&gt;
  S6                | P12          | J4            |           7&lt;br /&gt;
  S1                | P13          | J5            |          14&lt;br /&gt;
  S6                | P14          | J1            |        9000&lt;br /&gt;
  S2                | P14          | J1            |           3&lt;br /&gt;
  S6                | P1           | J1            |          12&lt;br /&gt;
  S8                | P15          | J6            |           1&lt;br /&gt;
  S8                | P16          | J6            |           2&lt;br /&gt;
  S3                | P5           | J6            |          10&lt;br /&gt;
  S10               | P2           | J8            |           4&lt;br /&gt;
  S8                | P1           | J7            |          16&lt;br /&gt;
  S9                | P14          | J7            |           3&lt;br /&gt;
  S11               | P10          | J3            |           2&lt;br /&gt;
  S12               | P15          | J1            |           3&lt;br /&gt;
  S11               | P11          | J3            |           4&lt;br /&gt;
  S10               | P14          | J9            |           5&lt;br /&gt;
  S13               | P17          | J10           |        1001&lt;br /&gt;
  S14               | P17          | J10           |        1111&lt;br /&gt;
  S15               | P17          | J10           |        1010&lt;br /&gt;
  S5                | P18          | J11           |           9&lt;br /&gt;
  S5                | P19          | J11           |           1&lt;br /&gt;
  S5                | P20          | J11           |           4&lt;br /&gt;
  S9                | P14          | J8            |          25&lt;br /&gt;
  S12               | P21          | J12           |          15&lt;br /&gt;
  S11               | P22          | J13           |           9&lt;br /&gt;
  S11               | P1           | J14           |          26&lt;br /&gt;
  S12               | P1           | J14           |          13&lt;br /&gt;
  S12               | P2           | J14           |          54&lt;br /&gt;
  S12               | P23          | J4            |         101&lt;br /&gt;
  S12               | P16          | J15           |          40&lt;br /&gt;
  S7                | P21          | J12           |           3&lt;br /&gt;
  S8                | P21          | J12           |           4&lt;br /&gt;
  S9                | P21          | J12           |           5&lt;br /&gt;
  S1                | P24          | J16           |           1&lt;br /&gt;
  S1                | P15          | J6            |           3&lt;br /&gt;
  S4                | P25          | J17           |           1&lt;br /&gt;
  S17               | P16          | J1            |           4&lt;br /&gt;
  S18               | P26          | J18           |           1&lt;br /&gt;
 (56 rows)&lt;br /&gt;
&lt;br /&gt;
== Готовые запросы ==&lt;br /&gt;
&lt;br /&gt;
Если видите, что тот или иной запрос можно составить короче и рациональней - смело вносите правку.&lt;br /&gt;
&lt;br /&gt;
В трёх билетах в задании на запрос встречается формулировка &amp;quot;&#039;&#039;только и только&#039;&#039;&amp;quot;. Как оказалось, это означает следующее: если холодильники поставляет &#039;&#039;только и только&#039;&#039; Уася, то:&lt;br /&gt;
# кроме Уаси никто не поставляет холодильники;&lt;br /&gt;
# Уася не поставляет ничего, кроме холодильников.&lt;br /&gt;
&lt;br /&gt;
Существующие запросы, естественно, оказались неправильными и их пришлось переписать. &amp;lt;s&amp;gt;Великий и могучий русский языка, ну что за экономия на бумаге.&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Билет 1 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера поставщиков, которые поставляют, по крайней мере, все те детали, которые поставляет поставщик с номером &#039;S2&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nomer_postavshika&lt;br /&gt;
FROM spasoi_ekz.spj SPJX&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT nomer_detali&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJY&lt;br /&gt;
                  WHERE nomer_postavshika = &#039;S2&#039;&lt;br /&gt;
                    AND NOT EXISTS (&lt;br /&gt;
                                    SELECT *&lt;br /&gt;
                                    FROM spasoi_ekz.spj&lt;br /&gt;
                                    WHERE nomer_postavshika = SPJX.nomer_postavshika&lt;br /&gt;
                                      AND nomer_detali = SPJY.nomer_detali&lt;br /&gt;
                                   )&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika&lt;br /&gt;
 -------------------&lt;br /&gt;
  S6&lt;br /&gt;
  S2&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 2 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера деталей и общее их количество для всех номеров деталей, поставляемых более чем одним поставщиком.&lt;br /&gt;
&lt;br /&gt;
Текст запроса, каким его дал Григорьев на лекции, впоследствии исправив его:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali AS &amp;quot;Номер детали&amp;quot;,&lt;br /&gt;
       SUM(kolichestvo) AS &amp;quot;Сколько штук поставляется&amp;quot;,&lt;br /&gt;
       COUNT(DISTINCT nomer_postavshika) AS &amp;quot;Сколько у неё поставщиков&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_postavshika) &amp;gt; 1;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali AS &amp;quot;Номер детали&amp;quot;,&lt;br /&gt;
       kol AS &amp;quot;Сколько штук поставляется&amp;quot;&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT nomer_detali,&lt;br /&gt;
             SUM(kolichestvo) AS kol,&lt;br /&gt;
             COUNT(DISTINCT nomer_postavshika)&lt;br /&gt;
      FROM spasoi_ekz.spj&lt;br /&gt;
      GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_postavshika) &amp;gt; 1&lt;br /&gt;
     ) A;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер детали | Сколько штук поставляется | Сколько у неё поставщиков&lt;br /&gt;
 --------------+---------------------------+---------------------------&lt;br /&gt;
  P1           |                        71 |                         5&lt;br /&gt;
  P10          |                         3 |                         2&lt;br /&gt;
  P11          |                         5 |                         2&lt;br /&gt;
  P12          |                        13 |                         7&lt;br /&gt;
  P14          |                      9036 |                         4&lt;br /&gt;
  P15          |                         7 |                         3&lt;br /&gt;
  P16          |                        46 |                         3&lt;br /&gt;
  P17          |                      3122 |                         3&lt;br /&gt;
  P2           |                        68 |                         4&lt;br /&gt;
  P21          |                        27 |                         4&lt;br /&gt;
  P4           |                        10 |                         2&lt;br /&gt;
  P5           |                        16 |                         2&lt;br /&gt;
 (12 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 3 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера поставщиков, поставляющих детали с номером &#039;P1&#039; для какого-либо изделия в количестве (в поставке) большим, чем средний объём поставок деталей с номером &#039;P2&#039; для этого изделия.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT X.nomer_postavshika &lt;br /&gt;
FROM spasoi_ekz.spj X&lt;br /&gt;
WHERE X.nomer_detali = &#039;P1&#039;&lt;br /&gt;
  AND X.kolichestvo &amp;gt; (&lt;br /&gt;
                       SELECT AVG(kolichestvo)&lt;br /&gt;
                       FROM spasoi_ekz.spj&lt;br /&gt;
                       WHERE nomer_izdelia = X.nomer_izdelia&lt;br /&gt;
                         AND nomer_detali = &#039;P2&#039;&lt;br /&gt;
                      );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но длиннее и нерациональней&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nomer_postavshika&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT *&lt;br /&gt;
      FROM spasoi_ekz.spj&lt;br /&gt;
      WHERE nomer_izdelia IN(&lt;br /&gt;
                             SELECT nomer_izdelia&lt;br /&gt;
                             FROM spasoi_ekz.spj&lt;br /&gt;
                             WHERE nomer_detali = &#039;P1&#039;&lt;br /&gt;
                            )&lt;br /&gt;
        AND nomer_izdelia IN(&lt;br /&gt;
	                     SELECT nomer_izdelia&lt;br /&gt;
	                     FROM spasoi_ekz.spj&lt;br /&gt;
	                     WHERE nomer_detali = &#039;P2&#039;&lt;br /&gt;
	                    )&lt;br /&gt;
     ) A&lt;br /&gt;
WHERE nomer_detali = &#039;P1&#039; AND kolichestvo &amp;gt;&lt;br /&gt;
(&lt;br /&gt;
 SELECT AVG(kolichestvo)&lt;br /&gt;
 FROM (&lt;br /&gt;
       SELECT *&lt;br /&gt;
       FROM spasoi_ekz.spj&lt;br /&gt;
       WHERE nomer_izdelia IN(&lt;br /&gt;
                              SELECT nomer_izdelia&lt;br /&gt;
                              FROM spasoi_ekz.spj&lt;br /&gt;
                              WHERE nomer_detali = &#039;P1&#039;&lt;br /&gt;
                             )&lt;br /&gt;
         AND nomer_izdelia IN(&lt;br /&gt;
                              SELECT nomer_izdelia&lt;br /&gt;
                              FROM spasoi_ekz.spj&lt;br /&gt;
                              WHERE nomer_detali = &#039;P2&#039;&lt;br /&gt;
                             )&lt;br /&gt;
      ) B&lt;br /&gt;
 WHERE nomer_detali = &#039;P2&#039;&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika&lt;br /&gt;
 -------------------&lt;br /&gt;
  S6&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 4 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера изделий, для которых детали поставляет только поставщик с номером ‘S1’.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_izdelia&lt;br /&gt;
FROM spasoi_ekz.spj X&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT *&lt;br /&gt;
                  FROM spasoi_ekz.spj&lt;br /&gt;
                  WHERE nomer_postavshika != &#039;S1&#039;&lt;br /&gt;
                    AND X.nomer_izdelia = nomer_izdelia&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но без EXISTS&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nomer_izdelia&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
WHERE nomer_izdelia IN(&lt;br /&gt;
                       SELECT nomer_izdelia&lt;br /&gt;
                       FROM spasoi_ekz.spj&lt;br /&gt;
                       WHERE nomer_postavshika = &#039;S1&#039;&lt;br /&gt;
                      )&lt;br /&gt;
  AND nomer_izdelia NOT IN(&lt;br /&gt;
                           SELECT nomer_izdelia&lt;br /&gt;
                           FROM spasoi_ekz.spj&lt;br /&gt;
                           WHERE nomer_postavshika != &#039;S1&#039;&lt;br /&gt;
                          );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_izdelia&lt;br /&gt;
 ---------------&lt;br /&gt;
  J5&lt;br /&gt;
  J16&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 5 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих детали с названием &amp;quot;Болт&amp;quot; в количестве (в поставке) большим, чем средний объём всех поставок деталей с номером &#039;P1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                           ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                        JOIN spasoi_ekz.p P&lt;br /&gt;
                           ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                              AND nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
WHERE kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT AVG(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj&lt;br /&gt;
                     WHERE SPJ.nomer_detali = &#039;P1&#039;&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но без JOIN&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s&lt;br /&gt;
WHERE nomer_postavshika IN (&lt;br /&gt;
                            SELECT nomer_postavshika&lt;br /&gt;
                            FROM spasoi_ekz.spj&lt;br /&gt;
                            WHERE nomer_detali = (&lt;br /&gt;
                                                  SELECT nomer_detali&lt;br /&gt;
                                                  FROM spasoi_ekz.p&lt;br /&gt;
                                                  WHERE LOWER(nazvanie) = LOWER(&#039;Болт&#039;)&lt;br /&gt;
                                                 )&lt;br /&gt;
                              AND kolichestvo &amp;gt; (&lt;br /&gt;
                                                 SELECT AVG(kolichestvo)&lt;br /&gt;
                                                 FROM spasoi_ekz.spj&lt;br /&gt;
                                                 WHERE nomer_detali = &#039;P1&#039;&lt;br /&gt;
                                                )&lt;br /&gt;
                           );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  imya&lt;br /&gt;
 ------&lt;br /&gt;
  Оша&lt;br /&gt;
  Иванов&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 6 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия деталей, поставляемых поставщиком, проживающим в том же городе, где изготавливаются эти детали, для изделия с названием ‘Велосипед 01/23’.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT P.nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                        JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                        JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
WHERE S.gorod = P.gorod&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Велосипед 01/23&#039;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос без JOIN&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nazvanie&lt;br /&gt;
FROM spasoi_ekz.S S, spasoi_ekz.p P, spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE S.gorod = P.gorod&lt;br /&gt;
  AND P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
  AND S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
  AND nomer_izdelia = (&lt;br /&gt;
                       SELECT nomer_izdelia&lt;br /&gt;
                       FROM spasoi_ekz.j&lt;br /&gt;
                       WHERE nazvanie = LOWER(&#039;Велосипед 01/23&#039;)&lt;br /&gt;
                      );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nazvanie&lt;br /&gt;
 ----------&lt;br /&gt;
  рама&lt;br /&gt;
  колесо&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 7 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия изделий, куда входят детали с названием &#039;Болт&#039;, поставляемых поставщиками с именем &#039;Иванов&#039;, в количестве (в поставке) большим, чем средний объём поставок для этого изделия.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT J.nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                        JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                        JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
WHERE imya LIKE &#039;%Иванов%&#039;&lt;br /&gt;
  AND P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
  AND kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT AVG(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj X&lt;br /&gt;
                     WHERE SPJ.nomer_izdelia = X.nomer_izdelia&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё один вариант запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie&lt;br /&gt;
FROM spasoi_ekz.j&lt;br /&gt;
WHERE nomer_izdelia IN (&lt;br /&gt;
                        SELECT nomer_izdelia&lt;br /&gt;
                        FROM (spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                                                   ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                                                      AND imya LIKE &#039;%Иванов%&#039;&lt;br /&gt;
                                                 JOIN spasoi_ekz.p P&lt;br /&gt;
                                                   ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                                      AND nazvanie = LOWER(&#039;Болт&#039;)) A&lt;br /&gt;
                        WHERE kolichestvo &amp;gt; (&lt;br /&gt;
                                             SELECT AVG(kolichestvo)&lt;br /&gt;
                                             FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                                                       ON SPJ.nomer_izdelia = A.nomer_izdelia&lt;br /&gt;
                                            )&lt;br /&gt;
                       );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;И ещё вариант этого же запроса, но длиннее и нерациональней&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT J.nazvanie, kolichestvo&lt;br /&gt;
      FROM spasoi_ekz.s S, spasoi_ekz.p P, spasoi_ekz.j J, spasoi_ekz.spj SPJ&lt;br /&gt;
      WHERE J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
        AND P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
        AND P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
        AND S.imya LIKE &#039;%Иванов%&#039;&lt;br /&gt;
        AND S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
     ) A&lt;br /&gt;
WHERE kolichestvo &amp;gt;&lt;br /&gt;
(&lt;br /&gt;
 SELECT AVG(kolichestvo)&lt;br /&gt;
 FROM spasoi_ekz.spj&lt;br /&gt;
 WHERE nomer_izdelia IN(&lt;br /&gt;
                        SELECT J.nomer_izdelia&lt;br /&gt;
                        FROM spasoi_ekz.s S, spasoi_ekz.p P, spasoi_ekz.j J, spasoi_ekz.spj SPJ&lt;br /&gt;
                        WHERE J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
                          AND P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                          AND P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
                          AND S.imya LIKE &#039;%Иванов%&#039;&lt;br /&gt;
                          AND S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
                       )&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
      nazvanie&lt;br /&gt;
 -------------------&lt;br /&gt;
  шкаф&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 8 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера изделий и общее количество деталей для них, поставляемых поставщиками с именем &#039;Петров&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_izdelia AS &amp;quot;Номер изделия&amp;quot;, SUM(kolichestvo) AS &amp;quot;Количество деталей&amp;quot; &lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                             -- так как &amp;quot;поставщикАМИ&amp;quot; и возможны&lt;br /&gt;
                             -- Иван Петров и Петров Иван, то LIKE %Петров%&lt;br /&gt;
                             AND imya LIKE &#039;%Петров%&#039;&lt;br /&gt;
GROUP BY nomer_izdelia;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер изделия | Количество деталей&lt;br /&gt;
 ---------------+--------------------&lt;br /&gt;
  J4            |                101&lt;br /&gt;
  J3            |                  6&lt;br /&gt;
  J13           |                  9&lt;br /&gt;
  J15           |                 40&lt;br /&gt;
  J1            |                  3&lt;br /&gt;
  J12           |                 15&lt;br /&gt;
  J14           |                 93&lt;br /&gt;
 (7 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 9 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера деталей и общее их количество для всех номеров деталей, которые входят только в одно изделие.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali, SUM(kolichestvo)&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_izdelia) = 1;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali, kol FROM (&lt;br /&gt;
       SELECT nomer_detali, SUM(kolichestvo) AS kol, COUNT(DISTINCT nomer_izdelia) = 1&lt;br /&gt;
       FROM spasoi_ekz.spj&lt;br /&gt;
       GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_izdelia) = 1&lt;br /&gt;
    ) A;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_detali | sum&lt;br /&gt;
 --------------+------&lt;br /&gt;
  P10          |    3&lt;br /&gt;
  P11          |    5&lt;br /&gt;
  P12          |   13&lt;br /&gt;
  P13          |   14&lt;br /&gt;
  P17          | 3122&lt;br /&gt;
  P18          |    9&lt;br /&gt;
  P19          |    1&lt;br /&gt;
  P20          |    4&lt;br /&gt;
  P21          |   27&lt;br /&gt;
  P22          |    9&lt;br /&gt;
  P23          |  101&lt;br /&gt;
  P24          |    1&lt;br /&gt;
  P25          |    1&lt;br /&gt;
  P26          |    1&lt;br /&gt;
  P3           |   50&lt;br /&gt;
  P4           |   10&lt;br /&gt;
  P6           |   20&lt;br /&gt;
  P7           |    5&lt;br /&gt;
  P8           |   25&lt;br /&gt;
  P9           |    1&lt;br /&gt;
 (20 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 10 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих детали с названием &#039;Болт&#039; для изделия с названием &#039;Рама 02-01&#039; в количестве (в поставке) большим, чем минимальное значение поставки детали с номером &#039;P1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
			   ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
			      AND J.nazvanie = LOWER(&#039;Рама 02-01&#039;)&lt;br /&gt;
			 JOIN spasoi_ekz.p P&lt;br /&gt;
			   ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
			      AND P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
			 JOIN spasoi_ekz.s S&lt;br /&gt;
			   ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE kolichestvo &amp;gt; (&lt;br /&gt;
		     SELECT MIN(kolichestvo)&lt;br /&gt;
		     FROM spasoi_ekz.spj &lt;br /&gt;
		     WHERE nomer_detali = &#039;P1&#039;&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Русе Болтон&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 11 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия городов и суммарное состояние проживающих в каждом городе поставщиков, у которых минимальный объём поставки деталей больше 1000.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT gorod, SUM(sostoyanie)&lt;br /&gt;
FROM spasoi_ekz.s S&lt;br /&gt;
WHERE (	&lt;br /&gt;
       SELECT MIN(kolichestvo)	&lt;br /&gt;
       FROM spasoi_ekz.spj X	&lt;br /&gt;
       WHERE X.nomer_postavshika = S.nomer_postavshika		&lt;br /&gt;
      ) &amp;gt; 1000&lt;br /&gt;
GROUP BY gorod;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Вариант подлиннее для тех, кто не ищет лёгких путей&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT gorod, SUM(sostoyanie)&lt;br /&gt;
FROM spasoi_ekz.s&lt;br /&gt;
WHERE nomer_postavshika IN (&lt;br /&gt;
                            SELECT nomer_postavshika&lt;br /&gt;
                            FROM spasoi_ekz.spj&lt;br /&gt;
                            GROUP BY nomer_postavshika HAVING MIN(kolichestvo) &amp;gt; 1000&lt;br /&gt;
                           )&lt;br /&gt;
GROUP BY gorod;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;!-- а этот запрос выполняет не совсем то и не правильно&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT gorod, sost&lt;br /&gt;
FROM (&lt;br /&gt;
SELECT gorod, SUM(sostoyanie) AS sost, SUM(SPJ.kolichestvo)&lt;br /&gt;
FROM spasoi_ekz.spj, spasoi_ekz.s&lt;br /&gt;
WHERE S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
GROUP BY S.gorod HAVING SUM(SPJ.kolichestvo) &amp;gt; 1000&lt;br /&gt;
) A;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; --&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
    gorod   |   sum&lt;br /&gt;
 -----------+---------&lt;br /&gt;
  Прага     | 2111110&lt;br /&gt;
  Стокгольм |  888888&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 12 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера деталей, поставляемых для какого-либо изделия поставщиком, проживающим в том же городе, где изготавливается это изделие.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali&lt;br /&gt;
FROM spasoi_ekz.spj SPJ, spasoi_ekz.s S, spasoi_ekz.j J&lt;br /&gt;
WHERE SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
  AND S.gorod = J.gorod&lt;br /&gt;
  AND J.nomer_izdelia = SPJ.nomer_izdelia;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_detali&lt;br /&gt;
 --------------&lt;br /&gt;
  P15&lt;br /&gt;
  P16&lt;br /&gt;
  P26&lt;br /&gt;
 (3 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 13 ===&lt;br /&gt;
&lt;br /&gt;
Написать &amp;lt;u&amp;gt;один&amp;lt;/u&amp;gt; запрос SELECT: выдать количества строк в таблице S (Поставщик) 1) с пустыми значениями и 2) непустыми значениями в столбце Состояние.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT COUNT(*) - COUNT(sostoyanie) AS &amp;quot;С пустым состоянием&amp;quot;, &lt;br /&gt;
       COUNT(sostoyanie) AS &amp;quot;С не пустым состоянием&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.s;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но длиннее и нерациональней&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SELECT COUNT(Snull.*) AS &amp;quot;С пустым состоянием&amp;quot;, COUNT(Snotnull.sostoyanie) AS &amp;quot;С не пустым состоянием&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.s Snull RIGHT OUTER JOIN spasoi_ekz.s Snotnull&lt;br /&gt;
                                      ON Snull.nomer_postavshika = Snotnull.nomer_postavshika&lt;br /&gt;
                                         AND Snull.sostoyanie IS NULL;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  С пустым состоянием | С не пустым состоянием&lt;br /&gt;
 ---------------------+-----------------------&lt;br /&gt;
                    2 |                    16&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 14 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют детали только и только для изделия с номером &#039;J1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj A JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON A.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE nomer_izdelia = &#039;J1&#039;&lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT nomer_postavshika&lt;br /&gt;
                  FROM spasoi_ekz.spj&lt;br /&gt;
                  WHERE nomer_izdelia != &#039;J1&#039;&lt;br /&gt;
                    AND nomer_postavshika = A.nomer_postavshika&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       imya&lt;br /&gt;
 ----------------&lt;br /&gt;
  Томми Версетти&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 15 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать наименования изделий, для которых детали поставляют только те поставщики, у которых состояние больше 1000000 у.е.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT j.nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
		  SELECT *&lt;br /&gt;
		  FROM spasoi_ekz.spj X JOIN spasoi_ekz.s S&lt;br /&gt;
		                          ON X.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
		  WHERE sostoyanie &amp;lt;= 1000000&lt;br /&gt;
		  AND X.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Вариант этого запроса без NOT EXISTS&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                        JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
WHERE sostoyanie &amp;gt; 1000000&lt;br /&gt;
  AND SPJ.nomer_izdelia NOT IN (&lt;br /&gt;
                                SELECT nomer_izdelia&lt;br /&gt;
                                FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                                                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                                WHERE sostoyanie &amp;lt; 1000000&lt;br /&gt;
                               );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       nazvanie&lt;br /&gt;
 --------------------&lt;br /&gt;
  кружевное бельё&lt;br /&gt;
  уникальное изделие&lt;br /&gt;
  процессор&lt;br /&gt;
 (3 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 16 ===&lt;br /&gt;
Написать запрос SELECT: выдать цвета и для каждого цвета общее количество деталей, входящих в изделие с названием &#039;Панно 01-03&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT cvet AS &amp;quot;Цвет&amp;quot;, SUM(kolichestvo) AS &amp;quot;Деталей&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
			     AND J.nazvanie = LOWER(&#039;Панно 01-03&#039;)&lt;br /&gt;
			JOIN spasoi_ekz.P P&lt;br /&gt;
			  ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
GROUP BY cvet;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Цвет  | Деталей&lt;br /&gt;
 -------+---------&lt;br /&gt;
  белый |       9&lt;br /&gt;
  серый |       5&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 17 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера поставщиков и количество сделанных ими поставок при условии, что среднее число деталей во всех этих поставках больше 1000.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nom AS &amp;quot;Номер поставщика&amp;quot;, cnt AS &amp;quot;Количество поставок&amp;quot;&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT S.nomer_postavshika AS nom,&lt;br /&gt;
             COUNT(SPJ.nomer_postavshika) AS cnt,&lt;br /&gt;
             AVG(SPJ.kolichestvo) AS kol&lt;br /&gt;
      FROM spasoi_ekz.s S, spasoi_ekz.spj SPJ&lt;br /&gt;
      WHERE S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
      GROUP BY S.nomer_postavshika&lt;br /&gt;
     ) A&lt;br /&gt;
WHERE kol &amp;gt; 1000;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос немного попроще&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_postavshika AS &amp;quot;Номер поставщика&amp;quot;, COUNT(*) AS &amp;quot;Количество поставок&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
WHERE nomer_postavshika IN (&lt;br /&gt;
                            SELECT nomer_postavshika&lt;br /&gt;
                            FROM spasoi_ekz.spj&lt;br /&gt;
                            GROUP BY nomer_postavshika HAVING AVG(kolichestvo) &amp;gt; 1000&lt;br /&gt;
                           )&lt;br /&gt;
GROUP BY nomer_postavshika;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер поставщика | Количество поставок&lt;br /&gt;
 ------------------+---------------------&lt;br /&gt;
  S13              |                   1&lt;br /&gt;
  S6               |                   7&lt;br /&gt;
  S14              |                   1&lt;br /&gt;
  S15              |                   1&lt;br /&gt;
 (4 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 18 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, имеющих состояние больше 1000 и поставляющих деталь с названием &#039;Гайка 01-01&#039; для изделия с названием &#039;Велосипед 03-04&#039; в количестве (в поставке) большим, чем средний объём поставки, выполненной поставщиками с именем &#039;Иванов&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:2nd dufficulty.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;5px&amp;quot;&amp;gt;&#039;&#039;&#039;Второй по сложности запрос экзамена!&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;4px&amp;quot;&amp;gt;&#039;&#039;&#039;Вот уж не свезло, так не свезло&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                    JOIN spasoi_ekz.j J&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
WHERE sostoyanie &amp;gt; 1000&lt;br /&gt;
  AND P.nazvanie = LOWER(&#039;Гайка 01-01&#039;)&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Велосипед 03-04&#039;)&lt;br /&gt;
  AND kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT AVG(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                       ON SPJ.nomer_postavshika = S.nomer_postavshika &lt;br /&gt;
                     WHERE S.imya = &#039;Иванов&#039;&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Пётр&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 19 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия красных деталей, которые входят только в изделие с названием &#039;Рама 02-03&#039; в количестве, меньшем 10 единиц в поставке.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT X.nazvanie&lt;br /&gt;
FROM spasoi_ekz.p X JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_detali = X.nomer_detali&lt;br /&gt;
                    JOIN spasoi_ekz.j J&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
WHERE X.cvet = &#039;красный&#039;&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Рама 02-03&#039;)&lt;br /&gt;
  AND kolichestvo &amp;lt; 10&lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT J.nomer_izdelia&lt;br /&gt;
                  FROM spasoi_ekz.j J JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                                        ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                  WHERE J.nazvanie != LOWER(&#039;Рама 02-03&#039;)&lt;br /&gt;
                    AND X.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант этого же запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT P.nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND cvet = &#039;красный&#039;&lt;br /&gt;
                        JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                              AND J.nazvanie = LOWER(&#039;Рама 02-03&#039;)&lt;br /&gt;
WHERE kolichestvo &amp;lt; 10&lt;br /&gt;
  AND SPJ.nomer_detali NOT IN (&lt;br /&gt;
                               SELECT nomer_detali&lt;br /&gt;
                               FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                                         ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                                                            AND J.nazvanie != LOWER(&#039;Рама 02-03&#039;)&lt;br /&gt;
                              );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     nazvanie&lt;br /&gt;
 ----------------&lt;br /&gt;
  усиленная рама&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 20 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих только белые детали.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
WHERE cvet = &#039;белый&#039;&lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT nomer_postavshika&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                                            ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                  WHERE nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    AND P.cvet != &#039;белый&#039;&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё один вариант этого же запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND cvet = &#039;белый&#039;&lt;br /&gt;
                        JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE S.nomer_postavshika NOT IN (&lt;br /&gt;
                                  SELECT nomer_postavshika&lt;br /&gt;
                                  FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                                                            ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                                               AND cvet != &#039;белый&#039;&lt;br /&gt;
                                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;И ещё один вариант этого же запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s&lt;br /&gt;
WHERE nomer_postavshika NOT IN  (&lt;br /&gt;
                                 SELECT spj.nomer_postavshika&lt;br /&gt;
                                 FROM spasoi_ekz.spj SPJ, spasoi_ekz.p P&lt;br /&gt;
                                 WHERE SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                   AND p.cvet != &#039;белый&#039;&lt;br /&gt;
                                )&lt;br /&gt;
  AND nomer_postavshika  IN (&lt;br /&gt;
                             SELECT spj.nomer_postavshika&lt;br /&gt;
                             FROM spasoi_ekz.spj SPJ, spasoi_ekz.p P&lt;br /&gt;
                             WHERE SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                               AND p.cvet = &#039;белый&#039;&lt;br /&gt;
                            );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       imya&lt;br /&gt;
 -----------------&lt;br /&gt;
  Рендилл Тарли&lt;br /&gt;
  Сэмвелл Тарли&lt;br /&gt;
  Мелисса Флорент&lt;br /&gt;
  Томми Версетти&lt;br /&gt;
 (4 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 21 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия изделий, для которых детали поставляет только и только поставщик с номером &#039;S1&#039;.&lt;br /&gt;
&lt;br /&gt;
Чтобы продемонстрировать выполнение запроса наглядно, возьмём поставщика не &#039;S1&#039;, а &#039;S18&#039;, который был создан специально для этого запроса. Если оставить &#039;S1&#039;, то наглядности не получится, так как по нашей схеме БД этот поставщик не попадает под условие &amp;quot;&#039;&#039;только и только&#039;&#039;&amp;quot;, и запрос вернёт пустой результат.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie&lt;br /&gt;
FROM spasoi_ekz.j J, spasoi_ekz.SPJ SPJ&lt;br /&gt;
WHERE J.nomer_izdelia = SPJ.nomer_izdelia &lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT *&lt;br /&gt;
                  FROM spasoi_ekz.spj&lt;br /&gt;
                  WHERE nomer_postavshika != &#039;S18&#039; AND nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                 )&lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT *&lt;br /&gt;
                  FROM spasoi_ekz.spj&lt;br /&gt;
                  WHERE nomer_postavshika = &#039;S18&#039; AND nomer_izdelia != J.nomer_izdelia&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       nazvanie&lt;br /&gt;
 --------------------&lt;br /&gt;
  кинжал&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 22 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют только детали с номером &#039;P1&#039; для изделия с именем &#039;Штуцер 01-02&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- неверный запрос - номер изделия, а не название&lt;br /&gt;
SELECT imya FROM S X&lt;br /&gt;
JOIN SPJ Y ON X.nomer_postavshika=Y.nomer_postavshika&lt;br /&gt;
WHERE X.nomer_postavshika NOT IN (&lt;br /&gt;
                  SELECT DISTINCT nomer_postavshika FROM SPJ Z&lt;br /&gt;
                  WHERE Z.nomer_izdelia != &#039;Штуцер 01-02&#039;&lt;br /&gt;
                  AND Z.nomer_detali!=&#039;P1&#039;);--&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                             AND J.nazvanie = LOWER(&#039;штуцер 01-02&#039;)&lt;br /&gt;
                        JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND SPJ.nomer_detali = &#039;P1&#039;&lt;br /&gt;
                        JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE SPJ.nomer_postavshika NOT IN (&lt;br /&gt;
                                    SELECT nomer_postavshika&lt;br /&gt;
                                    FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                                              ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                                                                 AND J.nazvanie = LOWER(&#039;штуцер 01-02&#039;)&lt;br /&gt;
                                                            JOIN spasoi_ekz.p P&lt;br /&gt;
                                                              ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                                                 AND SPJ.nomer_detali != &#039;P1&#039;&lt;br /&gt;
                              );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Иван&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 23 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют деталь с названием &#039;Винт&#039; в количестве большим 100 единиц в одной поставке и имеют состояние больше среднего по их родному городу.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT S.imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
WHERE P.nazvanie = LOWER(&#039;Винт&#039;)&lt;br /&gt;
  AND SPJ.kolichestvo &amp;gt; 100&lt;br /&gt;
  AND S.sostoyanie &amp;gt; (&lt;br /&gt;
                      SELECT AVG(SS.sostoyanie)&lt;br /&gt;
                      FROM spasoi_ekz.s SS&lt;br /&gt;
                      WHERE SS.gorod = S.gorod&lt;br /&gt;
                     );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Пётр&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 24 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать наименования деталей и общее их количество для всех наименований деталей, изготавливаемых в одном городе.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- С этим запросом возникла неожиданная проблема - задание то ли неполное, то ли неправильное, потому что нельзя однозначно сказать, что по нему требуется сделать.&lt;br /&gt;
&lt;br /&gt;
Так что тут несколько вариантов запросов (кто как понял).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Первый вариант запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie, kol&lt;br /&gt;
FROM spasoi_ekz.p A, (&lt;br /&gt;
                      SELECT X.gorod, SUM(kolichestvo) as kol&lt;br /&gt;
                      FROM spasoi_ekz.p X, spasoi_ekz.spj Y&lt;br /&gt;
                      WHERE Y.nomer_detali = X.nomer_detali&lt;br /&gt;
                      GROUP BY X.gorod&lt;br /&gt;
                     ) B&lt;br /&gt;
WHERE A.gorod = B.gorod;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
        nazvanie       | kol&lt;br /&gt;
 ----------------------+------&lt;br /&gt;
  подставка            |    9&lt;br /&gt;
  стойка               |    9&lt;br /&gt;
  абажур               |    9&lt;br /&gt;
  гайка                |  139&lt;br /&gt;
  ось                  |   60&lt;br /&gt;
  зубчатое колесо      |   60&lt;br /&gt;
  транзистор           |   50&lt;br /&gt;
  печатная плата       |   50&lt;br /&gt;
  диод                 |   50&lt;br /&gt;
  универсальная деталь |   13&lt;br /&gt;
  уникальная деталь    |   14&lt;br /&gt;
  болт                 | 9137&lt;br /&gt;
  рама                 |   69&lt;br /&gt;
  колесо               |   69&lt;br /&gt;
  втулка               |   69&lt;br /&gt;
  бумага               | 3122&lt;br /&gt;
  плитка               |   14&lt;br /&gt;
  орнамент             |   14&lt;br /&gt;
  уголок               |   14&lt;br /&gt;
  гайка 01-01          |   27&lt;br /&gt;
  усиленная рама       |   10&lt;br /&gt;
  винт                 | 9137&lt;br /&gt;
  труселя              |    1&lt;br /&gt;
  штуцерная деталь     |   10&lt;br /&gt;
  шуруп                |  139&lt;br /&gt;
 (25 rows)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
и --&amp;gt;&lt;br /&gt;
В уточнение задания Григорьев сказал следующее: &amp;quot;&#039;&#039;Следует учесть, что в качестве наименования города может выступать переменная, в которую в некоторой программе должно быть занесено конкретное значение перед выполнением запроса&#039;&#039;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
То есть, вообще говоря, задание на запрос неполное, и его можно трактовать так: выдать наименования деталей и общее их количество для всех наименований деталей, изготавливаемых в городе &amp;lt;code&amp;gt;%НАЗВАНИЕГОРОДА%&amp;lt;/code&amp;gt;. Вот эта переменная задаётся где-то в программе, а в БД идёт запрос с уже подставленным конкретным названием. &lt;br /&gt;
&lt;br /&gt;
Этот вариант запроса составлен, например, для Лондона. &lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie, SUM(kolichestvo)&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
WHERE gorod = &#039;Лондон&#039;&lt;br /&gt;
GROUP BY nazvanie;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nazvanie | sum&lt;br /&gt;
 ----------+-----&lt;br /&gt;
  гайка    |  71&lt;br /&gt;
  шуруп    |  68&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 25 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих хотя бы одну белую деталь для изделия с названием &#039;Велосипед 01-04&#039; с объёмом поставки большим, чем средний объём поставки этого поставщика.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                    JOIN spasoi_ekz.j J&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
WHERE cvet = &#039;белый&#039;&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Велосипед 01-04&#039;)&lt;br /&gt;
  AND kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT AVG(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj SPJ&lt;br /&gt;
                     WHERE SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Пётр&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 26 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера красных деталей и количество поставок этих деталей.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT P.nomer_detali AS &amp;quot;Номер детали&amp;quot;, COUNT(kolichestvo) AS &amp;quot;Количество поставок с ней&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.p P, spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
  AND cvet = &#039;красный&#039;&lt;br /&gt;
GROUP BY P.nomer_detali;   &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос через JOIN&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT SPJ.nomer_detali AS &amp;quot;Номер детали&amp;quot;, COUNT(kolichestvo) AS &amp;quot;Количество поставок с ней&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND cvet = &#039;красный&#039;&lt;br /&gt;
GROUP BY SPJ.nomer_detali;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер детали | Количество поставок с ней&lt;br /&gt;
 --------------+---------------------------&lt;br /&gt;
  P15          |                         3&lt;br /&gt;
  P22          |                         1&lt;br /&gt;
  P24          |                         1&lt;br /&gt;
 (3 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 27 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать наименования городов и среднее состояние поставщиков для каждого города, поставляющих детали с названием &#039;Гайка 01-01&#039; для изделия с названием &#039;Велосипед 03-04&#039; в количестве (в поставке) большим, чем минимальный объём поставки, выполненной поставщиком с номером &#039;S1&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:1st dufficulty.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;7px&amp;quot;&amp;gt;&#039;&#039;&#039;Сложнейший запрос экзамена!&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;5px&amp;quot;&amp;gt;&#039;&#039;&#039;Сохрани Джа, вытащить такое&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT S.gorod AS &amp;quot;Город&amp;quot;, AVG(S.sostoyanie) AS &amp;quot;Среднее состояние&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                    JOIN spasoi_ekz.j J&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
WHERE P.nazvanie = LOWER(&#039;Гайка 01-01&#039;)&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Велосипед 03-04&#039;)&lt;br /&gt;
  AND kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT MIN(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj&lt;br /&gt;
                     WHERE nomer_postavshika = &#039;S1&#039;&lt;br /&gt;
                    )&lt;br /&gt;
GROUP BY S.gorod;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
    Город   |   Среднее состояние&lt;br /&gt;
 -----------+-----------------------&lt;br /&gt;
  Мытищи    |    35000.500000000000&lt;br /&gt;
  Йокогама  |  1500000.000000000000&lt;br /&gt;
  Манчестер | 2571.0000000000000000&lt;br /&gt;
 (3 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 28 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия изделий, куда входит хотя бы одна красная деталь весом больше 10 граммов, поставляемая только поставщиком с номером &#039;S1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT J.nazvanie&lt;br /&gt;
FROM spasoi_ekz.j J JOIN spasoi_ekz.spj SPJ1&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ1.nomer_izdelia&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ1.nomer_detali&lt;br /&gt;
WHERE P.ves &amp;gt; 10&lt;br /&gt;
 AND P.cvet = &#039;красный&#039;&lt;br /&gt;
 AND NOT EXISTS (&lt;br /&gt;
                 SELECT SPJ2.nomer_postavshika&lt;br /&gt;
                 FROM spasoi_ekz.spj SPJ2         &lt;br /&gt;
                 WHERE SPJ2.nomer_detali = P.nomer_detali&lt;br /&gt;
	 	   AND SPJ2.nomer_postavshika != &#039;S1&#039;&lt;br /&gt;
                );                     &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     nazvanie&lt;br /&gt;
 -----------------&lt;br /&gt;
  кружевное бельё&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 29 ===&lt;br /&gt;
Написать запрос SELECT: выдать названия деталей, которые входят только и только в состав изделия с названием &#039;Штуцер 01-03&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie&lt;br /&gt;
FROM spasoi_ekz.p P, spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE P.nomer_detali = SPJ.nomer_detali &lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT SPJ.nomer_izdelia&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                            ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
                  WHERE (&lt;br /&gt;
                         J.nazvanie != LOWER(&#039;Штуцер 01-03&#039;)&lt;br /&gt;
                         AND&lt;br /&gt;
                         SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                        )&lt;br /&gt;
                     OR (&lt;br /&gt;
                         J.nazvanie = LOWER(&#039;Штуцер 01-03&#039;)&lt;br /&gt;
                         AND&lt;br /&gt;
                         SPJ.nomer_detali != P.nomer_detali&lt;br /&gt;
                        )&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
      nazvanie&lt;br /&gt;
 ------------------&lt;br /&gt;
  штуцерная деталь&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 30 ===&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют, по крайней мере, все те детали, которые поставляет поставщик с номером &#039;S2&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT imya&lt;br /&gt;
FROM spasoi_ekz.s S&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT nomer_detali&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJY&lt;br /&gt;
                  WHERE nomer_postavshika = &#039;S2&#039;&lt;br /&gt;
                    AND NOT EXISTS (&lt;br /&gt;
                                    SELECT *&lt;br /&gt;
                                    FROM spasoi_ekz.spj&lt;br /&gt;
                                    WHERE nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                                      AND nomer_detali = SPJY.nomer_detali&lt;br /&gt;
                                   )&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  imya&lt;br /&gt;
 ------------&lt;br /&gt;
  Оша&lt;br /&gt;
  Бран Старк&lt;br /&gt;
 (2 rows)&lt;br /&gt;
[[Категория:Структурное проектирование АСОИ (10 семестр)]]&lt;/div&gt;</summary>
		<author><name>81.9.52.28</name></author>
	</entry>
	<entry>
		<id>https://iu5bmstu.ru/index.php?title=SQL-%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D1%8B_%D0%BA_%D1%8D%D0%BA%D0%B7%D0%B0%D0%BC%D0%B5%D0%BD%D1%83_%D0%BF%D0%BE_%D0%A1%D0%9F%D0%90%D0%A1%D0%9E%D0%98_(10_%D1%81%D0%B5%D0%BC%D0%B5%D1%81%D1%82%D1%80)&amp;diff=3845</id>
		<title>SQL-запросы к экзамену по СПАСОИ (10 семестр)</title>
		<link rel="alternate" type="text/html" href="https://iu5bmstu.ru/index.php?title=SQL-%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D1%8B_%D0%BA_%D1%8D%D0%BA%D0%B7%D0%B0%D0%BC%D0%B5%D0%BD%D1%83_%D0%BF%D0%BE_%D0%A1%D0%9F%D0%90%D0%A1%D0%9E%D0%98_(10_%D1%81%D0%B5%D0%BC%D0%B5%D1%81%D1%82%D1%80)&amp;diff=3845"/>
		<updated>2013-06-15T17:42:31Z</updated>

		<summary type="html">&lt;p&gt;81.9.52.28: /* Билет 13 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right; clear:both; margin-right:1.0em;&amp;quot;&amp;gt;__TOC__&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Билет экзамена по [[:Категория:Структурное проектирование АСОИ (10 семестр) | СПАСОИ]] состоит из двух частей:&lt;br /&gt;
# теория;&lt;br /&gt;
# SQL-запрос.&lt;br /&gt;
&lt;br /&gt;
На этой странице собраны все сформированные запросы по билетам.&lt;br /&gt;
&lt;br /&gt;
Странно, что ни в одном билете нет запроса с сортировкой результатов. Возможно, они буду в дополнительных заданиях.&lt;br /&gt;
&lt;br /&gt;
== Схема БД ==&lt;br /&gt;
&lt;br /&gt;
Схема БД используется всё [[СПАСОИ_(10)_-_Лекция_№8_-_SQL#Некоторые возможности языка SQL | та же]], что была в прошлом семестре и на лекциях.&lt;br /&gt;
&lt;br /&gt;
Для написания запросов и проверки их выполнения создана БД в СУБД [http://www.postgresql.org/ PostgreSQL].&lt;br /&gt;
&lt;br /&gt;
Скрипт создания можно загрузить [http://yadi.sk/d/ArwqOGAy5pPfi отсюда].&lt;br /&gt;
&lt;br /&gt;
=== Таблицы БД ===&lt;br /&gt;
&lt;br /&gt;
==== Поставщики ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.s;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika |       imya       | sostoyanie |   gorod&lt;br /&gt;
 -------------------+------------------+------------+------------&lt;br /&gt;
  S5                | Мелисандра       |      65000 | Мадрид&lt;br /&gt;
  S2                | Бран Старк       |      60000 | Мурманск&lt;br /&gt;
  S1                | Якен Хгар        |    1500000 | Йокогама&lt;br /&gt;
  S7                | Сирио Форель     |    1500000 | Йокогама&lt;br /&gt;
  S4                | Джейме Ланнистер |     750000 | Лондон&lt;br /&gt;
  S3                | Серсея Ланнистер |    1200000 | Лондон&lt;br /&gt;
  S8                | Тирион Ланнистер |       2571 | Манчестер&lt;br /&gt;
  S9                | Иванов           |      35000 | Мытищи&lt;br /&gt;
  S10               | Русе Болтон      |      44444 | Баренцбург&lt;br /&gt;
  S11               | Петров Иван      |      35000 | Мытищи&lt;br /&gt;
  S14               | Рендилл Тарли    |    1111111 | Прага&lt;br /&gt;
  S13               | Сэмвелл Тарли    |     999999 | Прага&lt;br /&gt;
  S6                | Оша              |            | Москва&lt;br /&gt;
  S16               | Ходор            |            | Москва&lt;br /&gt;
  S15               | Мелисса Флорент  |     888888 | Стокгольм&lt;br /&gt;
  S12               | Петров Пётр      |      35001 | Мытищи&lt;br /&gt;
  S17               | Томми Версетти   |  123456789 | Майами&lt;br /&gt;
  S18               | Безликий         |          1 | Йокогама&lt;br /&gt;
 (18 rows)&lt;br /&gt;
&lt;br /&gt;
==== Детали ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.p;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_detali |       nazvanie       |     cvet      | ves  |      gorod&lt;br /&gt;
 --------------+----------------------+---------------+------+-----------------&lt;br /&gt;
  P9           | подставка            | синий         |  400 | Нижний Новгород&lt;br /&gt;
  P10          | стойка               | синий         | 2000 | Нижний Новгород&lt;br /&gt;
  P11          | абажур               | синий         |  400 | Нижний Новгород&lt;br /&gt;
  P1           | гайка                | чёрный        |   20 | Лондон&lt;br /&gt;
  P3           | ось                  | белый         | 5000 | Эдинбург&lt;br /&gt;
  P4           | зубчатое колесо      | чёрный        |   50 | Эдинбург&lt;br /&gt;
  P6           | транзистор           | коричневый    |    2 | Токио&lt;br /&gt;
  P7           | печатная плата       | зелёный       |  200 | Токио&lt;br /&gt;
  P8           | диод                 | коричневый    |    1 | Токио&lt;br /&gt;
  P12          | универсальная деталь | универсальный |    1 | Париж&lt;br /&gt;
  P13          | уникальная деталь    | уникальный    |    1 | Бостон&lt;br /&gt;
  P14          | болт                 | серый         |   20 | Ижевск&lt;br /&gt;
  P15          | рама                 | красный       | 3000 | Манчестер&lt;br /&gt;
  P16          | колесо               | белый         | 1500 | Манчестер&lt;br /&gt;
  P5           | втулка               | серый         |  350 | Манчестер&lt;br /&gt;
  P17          | бумага               | белый         |    1 | Астрахань&lt;br /&gt;
  P18          | плитка               | белый         |  300 | Флоренция&lt;br /&gt;
  P19          | орнамент             | серый         |  800 | Флоренция&lt;br /&gt;
  P20          | уголок               | серый         |  100 | Флоренция&lt;br /&gt;
  P21          | гайка 01-01          | серебристый   |   20 | Клин&lt;br /&gt;
  P22          | усиленная рама       | красный       | 3200 | Череповец&lt;br /&gt;
  P23          | винт                 | розовый       |    5 | Ижевск&lt;br /&gt;
  P24          | труселя              | красный       |   20 | Челябинск&lt;br /&gt;
  P25          | штуцерная деталь     | коричневый    |  450 | Череповец&lt;br /&gt;
  P2           | шуруп                | чёрный        |    5 | Лондон&lt;br /&gt;
  P26          | лезвие               | бесцветный    |  120 | Йокогама&lt;br /&gt;
 (26 rows)&lt;br /&gt;
&lt;br /&gt;
==== Изделия ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.j;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_izdelia |       nazvanie        |      gorod&lt;br /&gt;
 ---------------+-----------------------+-----------------&lt;br /&gt;
  J1            | автомобиль            | Магнитогорск&lt;br /&gt;
  J2            | процессор             | Зеленоград&lt;br /&gt;
  J3            | торшер                | Нижний Новгород&lt;br /&gt;
  J4            | универсальное изделие | Париж&lt;br /&gt;
  J5            | уникальное изделие    | Бостон&lt;br /&gt;
  J6            | велосипед 01/23       | Манчестер&lt;br /&gt;
  J7            | изделие из болтов     | Челябинск&lt;br /&gt;
  J8            | шкаф                  | Ярославль&lt;br /&gt;
  J9            | рама 02-01            | Череповец&lt;br /&gt;
  J10           | книга                 | Астрахань&lt;br /&gt;
  J11           | панно 01-03           | Флоренция&lt;br /&gt;
  J12           | велосипед 03-04       | Клин&lt;br /&gt;
  J13           | рама 02-03            | Череповец&lt;br /&gt;
  J14           | штуцер 01-02          | Череповец&lt;br /&gt;
  J15           | велосипед 01-04       | Клин&lt;br /&gt;
  J16           | кружевное бельё       | Челябинск&lt;br /&gt;
  J17           | штуцер 01-03          | Череповец&lt;br /&gt;
  J18           | кинжал                | Йокогама&lt;br /&gt;
 (18 rows)&lt;br /&gt;
&lt;br /&gt;
==== Сборки ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.spj;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika | nomer_detali | nomer_izdelia | kolichestvo&lt;br /&gt;
 -------------------+--------------+---------------+-------------&lt;br /&gt;
  S1                | P6           | J2            |          20&lt;br /&gt;
  S1                | P7           | J2            |           5&lt;br /&gt;
  S2                | P1           | J1            |           4&lt;br /&gt;
  S6                | P4           | J1            |           2&lt;br /&gt;
  S6                | P5           | J1            |           6&lt;br /&gt;
  S3                | P9           | J3            |           1&lt;br /&gt;
  S4                | P10          | J3            |           1&lt;br /&gt;
  S5                | P11          | J3            |           1&lt;br /&gt;
  S2                | P4           | J1            |           8&lt;br /&gt;
  S6                | P3           | J1            |          50&lt;br /&gt;
  S7                | P8           | J2            |          25&lt;br /&gt;
  S1                | P12          | J4            |           1&lt;br /&gt;
  S2                | P12          | J4            |           1&lt;br /&gt;
  S3                | P12          | J4            |           1&lt;br /&gt;
  S4                | P12          | J4            |           1&lt;br /&gt;
  S5                | P12          | J4            |           1&lt;br /&gt;
  S7                | P12          | J4            |           1&lt;br /&gt;
  S7                | P2           | J1            |           1&lt;br /&gt;
  S6                | P2           | J1            |           9&lt;br /&gt;
  S6                | P12          | J4            |           7&lt;br /&gt;
  S1                | P13          | J5            |          14&lt;br /&gt;
  S6                | P14          | J1            |        9000&lt;br /&gt;
  S2                | P14          | J1            |           3&lt;br /&gt;
  S6                | P1           | J1            |          12&lt;br /&gt;
  S8                | P15          | J6            |           1&lt;br /&gt;
  S8                | P16          | J6            |           2&lt;br /&gt;
  S3                | P5           | J6            |          10&lt;br /&gt;
  S10               | P2           | J8            |           4&lt;br /&gt;
  S8                | P1           | J7            |          16&lt;br /&gt;
  S9                | P14          | J7            |           3&lt;br /&gt;
  S11               | P10          | J3            |           2&lt;br /&gt;
  S12               | P15          | J1            |           3&lt;br /&gt;
  S11               | P11          | J3            |           4&lt;br /&gt;
  S10               | P14          | J9            |           5&lt;br /&gt;
  S13               | P17          | J10           |        1001&lt;br /&gt;
  S14               | P17          | J10           |        1111&lt;br /&gt;
  S15               | P17          | J10           |        1010&lt;br /&gt;
  S5                | P18          | J11           |           9&lt;br /&gt;
  S5                | P19          | J11           |           1&lt;br /&gt;
  S5                | P20          | J11           |           4&lt;br /&gt;
  S9                | P14          | J8            |          25&lt;br /&gt;
  S12               | P21          | J12           |          15&lt;br /&gt;
  S11               | P22          | J13           |           9&lt;br /&gt;
  S11               | P1           | J14           |          26&lt;br /&gt;
  S12               | P1           | J14           |          13&lt;br /&gt;
  S12               | P2           | J14           |          54&lt;br /&gt;
  S12               | P23          | J4            |         101&lt;br /&gt;
  S12               | P16          | J15           |          40&lt;br /&gt;
  S7                | P21          | J12           |           3&lt;br /&gt;
  S8                | P21          | J12           |           4&lt;br /&gt;
  S9                | P21          | J12           |           5&lt;br /&gt;
  S1                | P24          | J16           |           1&lt;br /&gt;
  S1                | P15          | J6            |           3&lt;br /&gt;
  S4                | P25          | J17           |           1&lt;br /&gt;
  S17               | P16          | J1            |           4&lt;br /&gt;
  S18               | P26          | J18           |           1&lt;br /&gt;
 (56 rows)&lt;br /&gt;
&lt;br /&gt;
== Готовые запросы ==&lt;br /&gt;
&lt;br /&gt;
Если видите, что тот или иной запрос можно составить короче и рациональней - смело вносите правку.&lt;br /&gt;
&lt;br /&gt;
В трёх билетах в задании на запрос встречается формулировка &amp;quot;&#039;&#039;только и только&#039;&#039;&amp;quot;. Как оказалось, это означает следующее: если холодильники поставляет &#039;&#039;только и только&#039;&#039; Уася, то:&lt;br /&gt;
# кроме Уаси никто не поставляет холодильники;&lt;br /&gt;
# Уася не поставляет ничего, кроме холодильников.&lt;br /&gt;
&lt;br /&gt;
Существующие запросы, естественно, оказались неправильными и их пришлось переписать. &amp;lt;s&amp;gt;Великий и могучий русский языка, ну что за экономия на бумаге.&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Билет 1 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера поставщиков, которые поставляют, по крайней мере, все те детали, которые поставляет поставщик с номером &#039;S2&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nomer_postavshika&lt;br /&gt;
FROM spasoi_ekz.spj SPJX&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT nomer_detali&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJY&lt;br /&gt;
                  WHERE nomer_postavshika = &#039;S2&#039;&lt;br /&gt;
                    AND NOT EXISTS (&lt;br /&gt;
                                    SELECT *&lt;br /&gt;
                                    FROM spasoi_ekz.spj&lt;br /&gt;
                                    WHERE nomer_postavshika = SPJX.nomer_postavshika&lt;br /&gt;
                                      AND nomer_detali = SPJY.nomer_detali&lt;br /&gt;
                                   )&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika&lt;br /&gt;
 -------------------&lt;br /&gt;
  S6&lt;br /&gt;
  S2&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 2 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера деталей и общее их количество для всех номеров деталей, поставляемых более чем одним поставщиком.&lt;br /&gt;
&lt;br /&gt;
Текст запроса, каким его дал Григорьев на лекции, впоследствии исправив его:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali AS &amp;quot;Номер детали&amp;quot;,&lt;br /&gt;
       SUM(kolichestvo) AS &amp;quot;Сколько штук поставляется&amp;quot;,&lt;br /&gt;
       COUNT(DISTINCT nomer_postavshika) AS &amp;quot;Сколько у неё поставщиков&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_postavshika) &amp;gt; 1;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali AS &amp;quot;Номер детали&amp;quot;,&lt;br /&gt;
       kol AS &amp;quot;Сколько штук поставляется&amp;quot;&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT nomer_detali,&lt;br /&gt;
             SUM(kolichestvo) AS kol,&lt;br /&gt;
             COUNT(DISTINCT nomer_postavshika)&lt;br /&gt;
      FROM spasoi_ekz.spj&lt;br /&gt;
      GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_postavshika) &amp;gt; 1&lt;br /&gt;
     ) A;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер детали | Сколько штук поставляется | Сколько у неё поставщиков&lt;br /&gt;
 --------------+---------------------------+---------------------------&lt;br /&gt;
  P1           |                        71 |                         5&lt;br /&gt;
  P10          |                         3 |                         2&lt;br /&gt;
  P11          |                         5 |                         2&lt;br /&gt;
  P12          |                        13 |                         7&lt;br /&gt;
  P14          |                      9036 |                         4&lt;br /&gt;
  P15          |                         7 |                         3&lt;br /&gt;
  P16          |                        46 |                         3&lt;br /&gt;
  P17          |                      3122 |                         3&lt;br /&gt;
  P2           |                        68 |                         4&lt;br /&gt;
  P21          |                        27 |                         4&lt;br /&gt;
  P4           |                        10 |                         2&lt;br /&gt;
  P5           |                        16 |                         2&lt;br /&gt;
 (12 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 3 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера поставщиков, поставляющих детали с номером &#039;P1&#039; для какого-либо изделия в количестве (в поставке) большим, чем средний объём поставок деталей с номером &#039;P2&#039; для этого изделия.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT X.nomer_postavshika &lt;br /&gt;
FROM spasoi_ekz.spj X&lt;br /&gt;
WHERE X.nomer_detali = &#039;P1&#039;&lt;br /&gt;
  AND X.kolichestvo &amp;gt; (&lt;br /&gt;
                       SELECT AVG(kolichestvo)&lt;br /&gt;
                       FROM spasoi_ekz.spj&lt;br /&gt;
                       WHERE nomer_izdelia = X.nomer_izdelia&lt;br /&gt;
                         AND nomer_detali = &#039;P2&#039;&lt;br /&gt;
                      );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но длиннее и нерациональней&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nomer_postavshika&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT *&lt;br /&gt;
      FROM spasoi_ekz.spj&lt;br /&gt;
      WHERE nomer_izdelia IN(&lt;br /&gt;
                             SELECT nomer_izdelia&lt;br /&gt;
                             FROM spasoi_ekz.spj&lt;br /&gt;
                             WHERE nomer_detali = &#039;P1&#039;&lt;br /&gt;
                            )&lt;br /&gt;
        AND nomer_izdelia IN(&lt;br /&gt;
	                     SELECT nomer_izdelia&lt;br /&gt;
	                     FROM spasoi_ekz.spj&lt;br /&gt;
	                     WHERE nomer_detali = &#039;P2&#039;&lt;br /&gt;
	                    )&lt;br /&gt;
     ) A&lt;br /&gt;
WHERE nomer_detali = &#039;P1&#039; AND kolichestvo &amp;gt;&lt;br /&gt;
(&lt;br /&gt;
 SELECT AVG(kolichestvo)&lt;br /&gt;
 FROM (&lt;br /&gt;
       SELECT *&lt;br /&gt;
       FROM spasoi_ekz.spj&lt;br /&gt;
       WHERE nomer_izdelia IN(&lt;br /&gt;
                              SELECT nomer_izdelia&lt;br /&gt;
                              FROM spasoi_ekz.spj&lt;br /&gt;
                              WHERE nomer_detali = &#039;P1&#039;&lt;br /&gt;
                             )&lt;br /&gt;
         AND nomer_izdelia IN(&lt;br /&gt;
                              SELECT nomer_izdelia&lt;br /&gt;
                              FROM spasoi_ekz.spj&lt;br /&gt;
                              WHERE nomer_detali = &#039;P2&#039;&lt;br /&gt;
                             )&lt;br /&gt;
      ) B&lt;br /&gt;
 WHERE nomer_detali = &#039;P2&#039;&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika&lt;br /&gt;
 -------------------&lt;br /&gt;
  S6&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 4 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера изделий, для которых детали поставляет только поставщик с номером ‘S1’.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_izdelia&lt;br /&gt;
FROM spasoi_ekz.spj X&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT *&lt;br /&gt;
                  FROM spasoi_ekz.spj&lt;br /&gt;
                  WHERE nomer_postavshika != &#039;S1&#039;&lt;br /&gt;
                    AND X.nomer_izdelia = nomer_izdelia&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но без EXISTS&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nomer_izdelia&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
WHERE nomer_izdelia IN(&lt;br /&gt;
                       SELECT nomer_izdelia&lt;br /&gt;
                       FROM spasoi_ekz.spj&lt;br /&gt;
                       WHERE nomer_postavshika = &#039;S1&#039;&lt;br /&gt;
                      )&lt;br /&gt;
  AND nomer_izdelia NOT IN(&lt;br /&gt;
                           SELECT nomer_izdelia&lt;br /&gt;
                           FROM spasoi_ekz.spj&lt;br /&gt;
                           WHERE nomer_postavshika != &#039;S1&#039;&lt;br /&gt;
                          );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_izdelia&lt;br /&gt;
 ---------------&lt;br /&gt;
  J5&lt;br /&gt;
  J16&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 5 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих детали с названием &amp;quot;Болт&amp;quot; в количестве (в поставке) большим, чем средний объём всех поставок деталей с номером &#039;P1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                           ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                        JOIN spasoi_ekz.p P&lt;br /&gt;
                           ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                              AND nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
WHERE kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT AVG(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                                               ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                                  AND SPJ.nomer_detali = &#039;P1&#039;&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но без JOIN&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s&lt;br /&gt;
WHERE nomer_postavshika IN (&lt;br /&gt;
                            SELECT nomer_postavshika&lt;br /&gt;
                            FROM spasoi_ekz.spj&lt;br /&gt;
                            WHERE nomer_detali = (&lt;br /&gt;
                                                  SELECT nomer_detali&lt;br /&gt;
                                                  FROM spasoi_ekz.p&lt;br /&gt;
                                                  WHERE LOWER(nazvanie) = LOWER(&#039;Болт&#039;)&lt;br /&gt;
                                                 )&lt;br /&gt;
                              AND kolichestvo &amp;gt; (&lt;br /&gt;
                                                 SELECT AVG(kolichestvo)&lt;br /&gt;
                                                 FROM spasoi_ekz.spj&lt;br /&gt;
                                                 WHERE nomer_detali = &#039;P1&#039;&lt;br /&gt;
                                                )&lt;br /&gt;
                           );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  imya&lt;br /&gt;
 ------&lt;br /&gt;
  Оша&lt;br /&gt;
  Иванов&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 6 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия деталей, поставляемых поставщиком, проживающим в том же городе, где изготавливаются эти детали, для изделия с названием ‘Велосипед 01/23’.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT P.nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                        JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                        JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
WHERE S.gorod = P.gorod&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Велосипед 01/23&#039;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос без JOIN&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nazvanie&lt;br /&gt;
FROM spasoi_ekz.S S, spasoi_ekz.p P, spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE S.gorod = P.gorod&lt;br /&gt;
  AND P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
  AND S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
  AND nomer_izdelia = (&lt;br /&gt;
                       SELECT nomer_izdelia&lt;br /&gt;
                       FROM spasoi_ekz.j&lt;br /&gt;
                       WHERE nazvanie = LOWER(&#039;Велосипед 01/23&#039;)&lt;br /&gt;
                      );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nazvanie&lt;br /&gt;
 ----------&lt;br /&gt;
  рама&lt;br /&gt;
  колесо&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 7 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия изделий, куда входят детали с названием &#039;Болт&#039;, поставляемых поставщиками с именем &#039;Иванов&#039;, в количестве (в поставке) большим, чем средний объём поставок для этого изделия.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT J.nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                        JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                        JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
WHERE imya LIKE &#039;%Иванов%&#039;&lt;br /&gt;
  AND P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
  AND kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT AVG(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj X&lt;br /&gt;
                     WHERE SPJ.nomer_izdelia = X.nomer_izdelia&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё один вариант запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie&lt;br /&gt;
FROM spasoi_ekz.j&lt;br /&gt;
WHERE nomer_izdelia IN (&lt;br /&gt;
                        SELECT nomer_izdelia&lt;br /&gt;
                        FROM (spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                                                   ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                                                      AND imya LIKE &#039;%Иванов%&#039;&lt;br /&gt;
                                                 JOIN spasoi_ekz.p P&lt;br /&gt;
                                                   ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                                      AND nazvanie = LOWER(&#039;Болт&#039;)) A&lt;br /&gt;
                        WHERE kolichestvo &amp;gt; (&lt;br /&gt;
                                             SELECT AVG(kolichestvo)&lt;br /&gt;
                                             FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                                                       ON SPJ.nomer_izdelia = A.nomer_izdelia&lt;br /&gt;
                                            )&lt;br /&gt;
                       );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;И ещё вариант этого же запроса, но длиннее и нерациональней&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT J.nazvanie, kolichestvo&lt;br /&gt;
      FROM spasoi_ekz.s S, spasoi_ekz.p P, spasoi_ekz.j J, spasoi_ekz.spj SPJ&lt;br /&gt;
      WHERE J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
        AND P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
        AND P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
        AND S.imya LIKE &#039;%Иванов%&#039;&lt;br /&gt;
        AND S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
     ) A&lt;br /&gt;
WHERE kolichestvo &amp;gt;&lt;br /&gt;
(&lt;br /&gt;
 SELECT AVG(kolichestvo)&lt;br /&gt;
 FROM spasoi_ekz.spj&lt;br /&gt;
 WHERE nomer_izdelia IN(&lt;br /&gt;
                        SELECT J.nomer_izdelia&lt;br /&gt;
                        FROM spasoi_ekz.s S, spasoi_ekz.p P, spasoi_ekz.j J, spasoi_ekz.spj SPJ&lt;br /&gt;
                        WHERE J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
                          AND P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                          AND P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
                          AND S.imya LIKE &#039;%Иванов%&#039;&lt;br /&gt;
                          AND S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
                       )&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
      nazvanie&lt;br /&gt;
 -------------------&lt;br /&gt;
  шкаф&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 8 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера изделий и общее количество деталей для них, поставляемых поставщиками с именем &#039;Петров&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_izdelia AS &amp;quot;Номер изделия&amp;quot;, SUM(kolichestvo) AS &amp;quot;Количество деталей&amp;quot; &lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                             -- так как &amp;quot;поставщикАМИ&amp;quot; и возможны&lt;br /&gt;
                             -- Иван Петров и Петров Иван, то LIKE %Петров%&lt;br /&gt;
                             AND imya LIKE &#039;%Петров%&#039;&lt;br /&gt;
GROUP BY nomer_izdelia;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер изделия | Количество деталей&lt;br /&gt;
 ---------------+--------------------&lt;br /&gt;
  J4            |                101&lt;br /&gt;
  J3            |                  6&lt;br /&gt;
  J13           |                  9&lt;br /&gt;
  J15           |                 40&lt;br /&gt;
  J1            |                  3&lt;br /&gt;
  J12           |                 15&lt;br /&gt;
  J14           |                 93&lt;br /&gt;
 (7 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 9 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера деталей и общее их количество для всех номеров деталей, которые входят только в одно изделие.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali, SUM(kolichestvo)&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_izdelia) = 1;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali, kol FROM (&lt;br /&gt;
       SELECT nomer_detali, SUM(kolichestvo) AS kol, COUNT(DISTINCT nomer_izdelia) = 1&lt;br /&gt;
       FROM spasoi_ekz.spj&lt;br /&gt;
       GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_izdelia) = 1&lt;br /&gt;
    ) A;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_detali | sum&lt;br /&gt;
 --------------+------&lt;br /&gt;
  P10          |    3&lt;br /&gt;
  P11          |    5&lt;br /&gt;
  P12          |   13&lt;br /&gt;
  P13          |   14&lt;br /&gt;
  P17          | 3122&lt;br /&gt;
  P18          |    9&lt;br /&gt;
  P19          |    1&lt;br /&gt;
  P20          |    4&lt;br /&gt;
  P21          |   27&lt;br /&gt;
  P22          |    9&lt;br /&gt;
  P23          |  101&lt;br /&gt;
  P24          |    1&lt;br /&gt;
  P25          |    1&lt;br /&gt;
  P26          |    1&lt;br /&gt;
  P3           |   50&lt;br /&gt;
  P4           |   10&lt;br /&gt;
  P6           |   20&lt;br /&gt;
  P7           |    5&lt;br /&gt;
  P8           |   25&lt;br /&gt;
  P9           |    1&lt;br /&gt;
 (20 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 10 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих детали с названием &#039;Болт&#039; для изделия с названием &#039;Рама 02-01&#039; в количестве (в поставке) большим, чем минимальное значение поставки детали с номером &#039;P1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
			   ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
			      AND J.nazvanie = LOWER(&#039;Рама 02-01&#039;)&lt;br /&gt;
			 JOIN spasoi_ekz.p P&lt;br /&gt;
			   ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
			      AND P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
			 JOIN spasoi_ekz.s S&lt;br /&gt;
			   ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE kolichestvo &amp;gt; (&lt;br /&gt;
		     SELECT MIN(kolichestvo)&lt;br /&gt;
		     FROM spasoi_ekz.spj &lt;br /&gt;
		     WHERE nomer_detali = &#039;P1&#039;&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Русе Болтон&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 11 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия городов и суммарное состояние проживающих в каждом городе поставщиков, у которых минимальный объём поставки деталей больше 1000.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT gorod, SUM(sostoyanie)&lt;br /&gt;
FROM spasoi_ekz.s S&lt;br /&gt;
WHERE (	&lt;br /&gt;
       SELECT MIN(kolichestvo)	&lt;br /&gt;
       FROM spasoi_ekz.spj X	&lt;br /&gt;
       WHERE X.nomer_postavshika = S.nomer_postavshika		&lt;br /&gt;
      ) &amp;gt; 1000&lt;br /&gt;
GROUP BY gorod;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Вариант подлиннее для тех, кто не ищет лёгких путей&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT gorod, SUM(sostoyanie)&lt;br /&gt;
FROM spasoi_ekz.s&lt;br /&gt;
WHERE nomer_postavshika IN (&lt;br /&gt;
                            SELECT nomer_postavshika&lt;br /&gt;
                            FROM spasoi_ekz.spj&lt;br /&gt;
                            GROUP BY nomer_postavshika HAVING MIN(kolichestvo) &amp;gt; 1000&lt;br /&gt;
                           )&lt;br /&gt;
GROUP BY gorod;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;!-- а этот запрос выполняет не совсем то и не правильно&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT gorod, sost&lt;br /&gt;
FROM (&lt;br /&gt;
SELECT gorod, SUM(sostoyanie) AS sost, SUM(SPJ.kolichestvo)&lt;br /&gt;
FROM spasoi_ekz.spj, spasoi_ekz.s&lt;br /&gt;
WHERE S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
GROUP BY S.gorod HAVING SUM(SPJ.kolichestvo) &amp;gt; 1000&lt;br /&gt;
) A;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; --&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
    gorod   |   sum&lt;br /&gt;
 -----------+---------&lt;br /&gt;
  Прага     | 2111110&lt;br /&gt;
  Стокгольм |  888888&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 12 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера деталей, поставляемых для какого-либо изделия поставщиком, проживающим в том же городе, где изготавливается это изделие.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali&lt;br /&gt;
FROM spasoi_ekz.spj SPJ, spasoi_ekz.s S, spasoi_ekz.j J&lt;br /&gt;
WHERE SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
  AND S.gorod = J.gorod&lt;br /&gt;
  AND J.nomer_izdelia = SPJ.nomer_izdelia;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_detali&lt;br /&gt;
 --------------&lt;br /&gt;
  P15&lt;br /&gt;
  P16&lt;br /&gt;
  P26&lt;br /&gt;
 (3 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 13 ===&lt;br /&gt;
&lt;br /&gt;
Написать &amp;lt;u&amp;gt;один&amp;lt;/u&amp;gt; запрос SELECT: выдать количества строк в таблице S (Поставщик) 1) с пустыми значениями и 2) непустыми значениями в столбце Состояние.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT COUNT(*) - COUNT(sostoyanie) AS &amp;quot;С пустым состоянием&amp;quot;, &lt;br /&gt;
       COUNT(sostoyanie) AS &amp;quot;С не пустым состоянием&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.s;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но длиннее и нерациональней&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SELECT COUNT(Snull.*) AS &amp;quot;С пустым состоянием&amp;quot;, COUNT(Snotnull.sostoyanie) AS &amp;quot;С не пустым состоянием&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.s Snull RIGHT OUTER JOIN spasoi_ekz.s Snotnull&lt;br /&gt;
                                      ON Snull.nomer_postavshika = Snotnull.nomer_postavshika&lt;br /&gt;
                                         AND Snull.sostoyanie IS NULL;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  С пустым состоянием | С не пустым состоянием&lt;br /&gt;
 ---------------------+-----------------------&lt;br /&gt;
                    2 |                    16&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 14 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют детали только и только для изделия с номером &#039;J1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj A JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON A.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE nomer_izdelia = &#039;J1&#039;&lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT nomer_postavshika&lt;br /&gt;
                  FROM spasoi_ekz.spj&lt;br /&gt;
                  WHERE nomer_izdelia != &#039;J1&#039;&lt;br /&gt;
                    AND nomer_postavshika = A.nomer_postavshika&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       imya&lt;br /&gt;
 ----------------&lt;br /&gt;
  Томми Версетти&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 15 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать наименования изделий, для которых детали поставляют только те поставщики, у которых состояние больше 1000000 у.е.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT j.nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
		  SELECT *&lt;br /&gt;
		  FROM spasoi_ekz.spj X JOIN spasoi_ekz.s S&lt;br /&gt;
		                          ON X.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
		  WHERE sostoyanie &amp;lt;= 1000000&lt;br /&gt;
		  AND X.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Вариант этого запроса без NOT EXISTS&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                        JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
WHERE sostoyanie &amp;gt; 1000000&lt;br /&gt;
  AND SPJ.nomer_izdelia NOT IN (&lt;br /&gt;
                                SELECT nomer_izdelia&lt;br /&gt;
                                FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                                                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                                WHERE sostoyanie &amp;lt; 1000000&lt;br /&gt;
                               );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       nazvanie&lt;br /&gt;
 --------------------&lt;br /&gt;
  кружевное бельё&lt;br /&gt;
  уникальное изделие&lt;br /&gt;
  процессор&lt;br /&gt;
 (3 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 16 ===&lt;br /&gt;
Написать запрос SELECT: выдать цвета и для каждого цвета общее количество деталей, входящих в изделие с названием &#039;Панно 01-03&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT cvet AS &amp;quot;Цвет&amp;quot;, SUM(kolichestvo) AS &amp;quot;Деталей&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
			     AND J.nazvanie = LOWER(&#039;Панно 01-03&#039;)&lt;br /&gt;
			JOIN spasoi_ekz.P P&lt;br /&gt;
			  ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
GROUP BY cvet;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Цвет  | Деталей&lt;br /&gt;
 -------+---------&lt;br /&gt;
  белый |       9&lt;br /&gt;
  серый |       5&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 17 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера поставщиков и количество сделанных ими поставок при условии, что среднее число деталей во всех этих поставках больше 1000.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nom AS &amp;quot;Номер поставщика&amp;quot;, cnt AS &amp;quot;Количество поставок&amp;quot;&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT S.nomer_postavshika AS nom,&lt;br /&gt;
             COUNT(SPJ.nomer_postavshika) AS cnt,&lt;br /&gt;
             AVG(SPJ.kolichestvo) AS kol&lt;br /&gt;
      FROM spasoi_ekz.s S, spasoi_ekz.spj SPJ&lt;br /&gt;
      WHERE S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
      GROUP BY S.nomer_postavshika&lt;br /&gt;
     ) A&lt;br /&gt;
WHERE kol &amp;gt; 1000;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос немного попроще&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_postavshika AS &amp;quot;Номер поставщика&amp;quot;, COUNT(*) AS &amp;quot;Количество поставок&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
WHERE nomer_postavshika IN (&lt;br /&gt;
                            SELECT nomer_postavshika&lt;br /&gt;
                            FROM spasoi_ekz.spj&lt;br /&gt;
                            GROUP BY nomer_postavshika HAVING AVG(kolichestvo) &amp;gt; 1000&lt;br /&gt;
                           )&lt;br /&gt;
GROUP BY nomer_postavshika;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер поставщика | Количество поставок&lt;br /&gt;
 ------------------+---------------------&lt;br /&gt;
  S13              |                   1&lt;br /&gt;
  S6               |                   7&lt;br /&gt;
  S14              |                   1&lt;br /&gt;
  S15              |                   1&lt;br /&gt;
 (4 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 18 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, имеющих состояние больше 1000 и поставляющих деталь с названием &#039;Гайка 01-01&#039; для изделия с названием &#039;Велосипед 03-04&#039; в количестве (в поставке) большим, чем средний объём поставки, выполненной поставщиками с именем &#039;Иванов&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:2nd dufficulty.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;5px&amp;quot;&amp;gt;&#039;&#039;&#039;Второй по сложности запрос экзамена!&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;4px&amp;quot;&amp;gt;&#039;&#039;&#039;Вот уж не свезло, так не свезло&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                    JOIN spasoi_ekz.j J&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
WHERE sostoyanie &amp;gt; 1000&lt;br /&gt;
  AND P.nazvanie = LOWER(&#039;Гайка 01-01&#039;)&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Велосипед 03-04&#039;)&lt;br /&gt;
  AND kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT AVG(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                       ON SPJ.nomer_postavshika = S.nomer_postavshika &lt;br /&gt;
                     WHERE S.imya = &#039;Иванов&#039;&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Пётр&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 19 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия красных деталей, которые входят только в изделие с названием &#039;Рама 02-03&#039; в количестве, меньшем 10 единиц в поставке.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT X.nazvanie&lt;br /&gt;
FROM spasoi_ekz.p X JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_detali = X.nomer_detali&lt;br /&gt;
                    JOIN spasoi_ekz.j J&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
WHERE X.cvet = &#039;красный&#039;&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Рама 02-03&#039;)&lt;br /&gt;
  AND kolichestvo &amp;lt; 10&lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT J.nomer_izdelia&lt;br /&gt;
                  FROM spasoi_ekz.j J JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                                        ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                  WHERE J.nazvanie != LOWER(&#039;Рама 02-03&#039;)&lt;br /&gt;
                    AND X.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант этого же запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT P.nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND cvet = &#039;красный&#039;&lt;br /&gt;
                        JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                              AND J.nazvanie = LOWER(&#039;Рама 02-03&#039;)&lt;br /&gt;
WHERE kolichestvo &amp;lt; 10&lt;br /&gt;
  AND SPJ.nomer_detali NOT IN (&lt;br /&gt;
                               SELECT nomer_detali&lt;br /&gt;
                               FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                                         ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                                                            AND J.nazvanie != LOWER(&#039;Рама 02-03&#039;)&lt;br /&gt;
                              );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     nazvanie&lt;br /&gt;
 ----------------&lt;br /&gt;
  усиленная рама&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 20 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих только белые детали.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
WHERE cvet = &#039;белый&#039;&lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT nomer_postavshika&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                                            ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                  WHERE nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    AND P.cvet != &#039;белый&#039;&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё один вариант этого же запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND cvet = &#039;белый&#039;&lt;br /&gt;
                        JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE S.nomer_postavshika NOT IN (&lt;br /&gt;
                                  SELECT nomer_postavshika&lt;br /&gt;
                                  FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                                                            ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                                               AND cvet != &#039;белый&#039;&lt;br /&gt;
                                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;И ещё один вариант этого же запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s&lt;br /&gt;
WHERE nomer_postavshika NOT IN  (&lt;br /&gt;
                                 SELECT spj.nomer_postavshika&lt;br /&gt;
                                 FROM spasoi_ekz.spj SPJ, spasoi_ekz.p P&lt;br /&gt;
                                 WHERE SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                   AND p.cvet != &#039;белый&#039;&lt;br /&gt;
                                )&lt;br /&gt;
  AND nomer_postavshika  IN (&lt;br /&gt;
                             SELECT spj.nomer_postavshika&lt;br /&gt;
                             FROM spasoi_ekz.spj SPJ, spasoi_ekz.p P&lt;br /&gt;
                             WHERE SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                               AND p.cvet = &#039;белый&#039;&lt;br /&gt;
                            );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       imya&lt;br /&gt;
 -----------------&lt;br /&gt;
  Рендилл Тарли&lt;br /&gt;
  Сэмвелл Тарли&lt;br /&gt;
  Мелисса Флорент&lt;br /&gt;
  Томми Версетти&lt;br /&gt;
 (4 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 21 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия изделий, для которых детали поставляет только и только поставщик с номером &#039;S1&#039;.&lt;br /&gt;
&lt;br /&gt;
Чтобы продемонстрировать выполнение запроса наглядно, возьмём поставщика не &#039;S1&#039;, а &#039;S18&#039;, который был создан специально для этого запроса. Если оставить &#039;S1&#039;, то наглядности не получится, так как по нашей схеме БД этот поставщик не попадает под условие &amp;quot;&#039;&#039;только и только&#039;&#039;&amp;quot;, и запрос вернёт пустой результат.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie&lt;br /&gt;
FROM spasoi_ekz.j J, spasoi_ekz.SPJ SPJ&lt;br /&gt;
WHERE J.nomer_izdelia = SPJ.nomer_izdelia &lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT *&lt;br /&gt;
                  FROM spasoi_ekz.spj&lt;br /&gt;
                  WHERE nomer_postavshika != &#039;S18&#039; AND nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                 )&lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT *&lt;br /&gt;
                  FROM spasoi_ekz.spj&lt;br /&gt;
                  WHERE nomer_postavshika = &#039;S18&#039; AND nomer_izdelia != J.nomer_izdelia&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       nazvanie&lt;br /&gt;
 --------------------&lt;br /&gt;
  кинжал&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 22 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют только детали с номером &#039;P1&#039; для изделия с именем &#039;Штуцер 01-02&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- неверный запрос - номер изделия, а не название&lt;br /&gt;
SELECT imya FROM S X&lt;br /&gt;
JOIN SPJ Y ON X.nomer_postavshika=Y.nomer_postavshika&lt;br /&gt;
WHERE X.nomer_postavshika NOT IN (&lt;br /&gt;
                  SELECT DISTINCT nomer_postavshika FROM SPJ Z&lt;br /&gt;
                  WHERE Z.nomer_izdelia != &#039;Штуцер 01-02&#039;&lt;br /&gt;
                  AND Z.nomer_detali!=&#039;P1&#039;);--&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                             AND J.nazvanie = LOWER(&#039;штуцер 01-02&#039;)&lt;br /&gt;
                        JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND SPJ.nomer_detali = &#039;P1&#039;&lt;br /&gt;
                        JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE SPJ.nomer_postavshika NOT IN (&lt;br /&gt;
                                    SELECT nomer_postavshika&lt;br /&gt;
                                    FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                                              ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                                                                 AND J.nazvanie = LOWER(&#039;штуцер 01-02&#039;)&lt;br /&gt;
                                                            JOIN spasoi_ekz.p P&lt;br /&gt;
                                                              ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                                                 AND SPJ.nomer_detali != &#039;P1&#039;&lt;br /&gt;
                              );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Иван&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 23 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют деталь с названием &#039;Винт&#039; в количестве большим 100 единиц в одной поставке и имеют состояние больше среднего по их родному городу.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT S.imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
WHERE P.nazvanie = LOWER(&#039;Винт&#039;)&lt;br /&gt;
  AND SPJ.kolichestvo &amp;gt; 100&lt;br /&gt;
  AND S.sostoyanie &amp;gt; (&lt;br /&gt;
                      SELECT AVG(SS.sostoyanie)&lt;br /&gt;
                      FROM spasoi_ekz.s SS&lt;br /&gt;
                      WHERE SS.gorod = S.gorod&lt;br /&gt;
                     );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Пётр&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 24 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать наименования деталей и общее их количество для всех наименований деталей, изготавливаемых в одном городе.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- С этим запросом возникла неожиданная проблема - задание то ли неполное, то ли неправильное, потому что нельзя однозначно сказать, что по нему требуется сделать.&lt;br /&gt;
&lt;br /&gt;
Так что тут несколько вариантов запросов (кто как понял).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Первый вариант запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie, kol&lt;br /&gt;
FROM spasoi_ekz.p A, (&lt;br /&gt;
                      SELECT X.gorod, SUM(kolichestvo) as kol&lt;br /&gt;
                      FROM spasoi_ekz.p X, spasoi_ekz.spj Y&lt;br /&gt;
                      WHERE Y.nomer_detali = X.nomer_detali&lt;br /&gt;
                      GROUP BY X.gorod&lt;br /&gt;
                     ) B&lt;br /&gt;
WHERE A.gorod = B.gorod;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
        nazvanie       | kol&lt;br /&gt;
 ----------------------+------&lt;br /&gt;
  подставка            |    9&lt;br /&gt;
  стойка               |    9&lt;br /&gt;
  абажур               |    9&lt;br /&gt;
  гайка                |  139&lt;br /&gt;
  ось                  |   60&lt;br /&gt;
  зубчатое колесо      |   60&lt;br /&gt;
  транзистор           |   50&lt;br /&gt;
  печатная плата       |   50&lt;br /&gt;
  диод                 |   50&lt;br /&gt;
  универсальная деталь |   13&lt;br /&gt;
  уникальная деталь    |   14&lt;br /&gt;
  болт                 | 9137&lt;br /&gt;
  рама                 |   69&lt;br /&gt;
  колесо               |   69&lt;br /&gt;
  втулка               |   69&lt;br /&gt;
  бумага               | 3122&lt;br /&gt;
  плитка               |   14&lt;br /&gt;
  орнамент             |   14&lt;br /&gt;
  уголок               |   14&lt;br /&gt;
  гайка 01-01          |   27&lt;br /&gt;
  усиленная рама       |   10&lt;br /&gt;
  винт                 | 9137&lt;br /&gt;
  труселя              |    1&lt;br /&gt;
  штуцерная деталь     |   10&lt;br /&gt;
  шуруп                |  139&lt;br /&gt;
 (25 rows)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
и --&amp;gt;&lt;br /&gt;
В уточнение задания Григорьев сказал следующее: &amp;quot;&#039;&#039;Следует учесть, что в качестве наименования города может выступать переменная, в которую в некоторой программе должно быть занесено конкретное значение перед выполнением запроса&#039;&#039;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
То есть, вообще говоря, задание на запрос неполное, и его можно трактовать так: выдать наименования деталей и общее их количество для всех наименований деталей, изготавливаемых в городе &amp;lt;code&amp;gt;%НАЗВАНИЕГОРОДА%&amp;lt;/code&amp;gt;. Вот эта переменная задаётся где-то в программе, а в БД идёт запрос с уже подставленным конкретным названием. &lt;br /&gt;
&lt;br /&gt;
Этот вариант запроса составлен, например, для Лондона. &lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie, SUM(kolichestvo)&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
WHERE gorod = &#039;Лондон&#039;&lt;br /&gt;
GROUP BY nazvanie;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nazvanie | sum&lt;br /&gt;
 ----------+-----&lt;br /&gt;
  гайка    |  71&lt;br /&gt;
  шуруп    |  68&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 25 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих хотя бы одну белую деталь для изделия с названием &#039;Велосипед 01-04&#039; с объёмом поставки большим, чем средний объём поставки этого поставщика.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                    JOIN spasoi_ekz.j J&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
WHERE cvet = &#039;белый&#039;&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Велосипед 01-04&#039;)&lt;br /&gt;
  AND kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT AVG(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj SPJ&lt;br /&gt;
                     WHERE SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Пётр&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 26 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера красных деталей и количество поставок этих деталей.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT P.nomer_detali AS &amp;quot;Номер детали&amp;quot;, COUNT(kolichestvo) AS &amp;quot;Количество поставок с ней&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.p P, spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
  AND cvet = &#039;красный&#039;&lt;br /&gt;
GROUP BY P.nomer_detali;   &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос через JOIN&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT SPJ.nomer_detali AS &amp;quot;Номер детали&amp;quot;, COUNT(kolichestvo) AS &amp;quot;Количество поставок с ней&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND cvet = &#039;красный&#039;&lt;br /&gt;
GROUP BY SPJ.nomer_detali;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер детали | Количество поставок с ней&lt;br /&gt;
 --------------+---------------------------&lt;br /&gt;
  P15          |                         3&lt;br /&gt;
  P22          |                         1&lt;br /&gt;
  P24          |                         1&lt;br /&gt;
 (3 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 27 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать наименования городов и среднее состояние поставщиков для каждого города, поставляющих детали с названием &#039;Гайка 01-01&#039; для изделия с названием &#039;Велосипед 03-04&#039; в количестве (в поставке) большим, чем минимальный объём поставки, выполненной поставщиком с номером &#039;S1&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:1st dufficulty.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;7px&amp;quot;&amp;gt;&#039;&#039;&#039;Сложнейший запрос экзамена!&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;5px&amp;quot;&amp;gt;&#039;&#039;&#039;Сохрани Джа, вытащить такое&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT S.gorod AS &amp;quot;Город&amp;quot;, AVG(S.sostoyanie) AS &amp;quot;Среднее состояние&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                    JOIN spasoi_ekz.j J&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
WHERE P.nazvanie = LOWER(&#039;Гайка 01-01&#039;)&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Велосипед 03-04&#039;)&lt;br /&gt;
  AND kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT MIN(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj&lt;br /&gt;
                     WHERE nomer_postavshika = &#039;S1&#039;&lt;br /&gt;
                    )&lt;br /&gt;
GROUP BY S.gorod;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
    Город   |   Среднее состояние&lt;br /&gt;
 -----------+-----------------------&lt;br /&gt;
  Мытищи    |    35000.500000000000&lt;br /&gt;
  Йокогама  |  1500000.000000000000&lt;br /&gt;
  Манчестер | 2571.0000000000000000&lt;br /&gt;
 (3 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 28 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия изделий, куда входит хотя бы одна красная деталь весом больше 10 граммов, поставляемая только поставщиком с номером &#039;S1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT J.nazvanie&lt;br /&gt;
FROM spasoi_ekz.j J JOIN spasoi_ekz.spj SPJ1&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ1.nomer_izdelia&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ1.nomer_detali&lt;br /&gt;
WHERE P.ves &amp;gt; 10&lt;br /&gt;
 AND P.cvet = &#039;красный&#039;&lt;br /&gt;
 AND NOT EXISTS (&lt;br /&gt;
                 SELECT SPJ2.nomer_postavshika&lt;br /&gt;
                 FROM spasoi_ekz.spj SPJ2         &lt;br /&gt;
                 WHERE SPJ2.nomer_detali = P.nomer_detali&lt;br /&gt;
	 	   AND SPJ2.nomer_postavshika != &#039;S1&#039;&lt;br /&gt;
                );                     &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     nazvanie&lt;br /&gt;
 -----------------&lt;br /&gt;
  кружевное бельё&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 29 ===&lt;br /&gt;
Написать запрос SELECT: выдать названия деталей, которые входят только и только в состав изделия с названием &#039;Штуцер 01-03&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie&lt;br /&gt;
FROM spasoi_ekz.p P, spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE P.nomer_detali = SPJ.nomer_detali &lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT SPJ.nomer_izdelia&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                            ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
                  WHERE (&lt;br /&gt;
                         J.nazvanie != LOWER(&#039;Штуцер 01-03&#039;)&lt;br /&gt;
                         AND&lt;br /&gt;
                         SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                        )&lt;br /&gt;
                     OR (&lt;br /&gt;
                         J.nazvanie = LOWER(&#039;Штуцер 01-03&#039;)&lt;br /&gt;
                         AND&lt;br /&gt;
                         SPJ.nomer_detali != P.nomer_detali&lt;br /&gt;
                        )&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
      nazvanie&lt;br /&gt;
 ------------------&lt;br /&gt;
  штуцерная деталь&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 30 ===&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют, по крайней мере, все те детали, которые поставляет поставщик с номером &#039;S2&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT imya&lt;br /&gt;
FROM spasoi_ekz.s S&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT nomer_detali&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJY&lt;br /&gt;
                  WHERE nomer_postavshika = &#039;S2&#039;&lt;br /&gt;
                    AND NOT EXISTS (&lt;br /&gt;
                                    SELECT *&lt;br /&gt;
                                    FROM spasoi_ekz.spj&lt;br /&gt;
                                    WHERE nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                                      AND nomer_detali = SPJY.nomer_detali&lt;br /&gt;
                                   )&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  imya&lt;br /&gt;
 ------------&lt;br /&gt;
  Оша&lt;br /&gt;
  Бран Старк&lt;br /&gt;
 (2 rows)&lt;br /&gt;
[[Категория:Структурное проектирование АСОИ (10 семестр)]]&lt;/div&gt;</summary>
		<author><name>81.9.52.28</name></author>
	</entry>
	<entry>
		<id>https://iu5bmstu.ru/index.php?title=SQL-%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D1%8B_%D0%BA_%D1%8D%D0%BA%D0%B7%D0%B0%D0%BC%D0%B5%D0%BD%D1%83_%D0%BF%D0%BE_%D0%A1%D0%9F%D0%90%D0%A1%D0%9E%D0%98_(10_%D1%81%D0%B5%D0%BC%D0%B5%D1%81%D1%82%D1%80)&amp;diff=3838</id>
		<title>SQL-запросы к экзамену по СПАСОИ (10 семестр)</title>
		<link rel="alternate" type="text/html" href="https://iu5bmstu.ru/index.php?title=SQL-%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D1%8B_%D0%BA_%D1%8D%D0%BA%D0%B7%D0%B0%D0%BC%D0%B5%D0%BD%D1%83_%D0%BF%D0%BE_%D0%A1%D0%9F%D0%90%D0%A1%D0%9E%D0%98_(10_%D1%81%D0%B5%D0%BC%D0%B5%D1%81%D1%82%D1%80)&amp;diff=3838"/>
		<updated>2013-06-14T22:46:19Z</updated>

		<summary type="html">&lt;p&gt;81.9.52.28: /* Билет 15 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right; clear:both; margin-right:1.0em;&amp;quot;&amp;gt;__TOC__&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Билет экзамена по [[:Категория:Структурное проектирование АСОИ (10 семестр) | СПАСОИ]] состоит из двух частей:&lt;br /&gt;
# теория;&lt;br /&gt;
# SQL-запрос.&lt;br /&gt;
&lt;br /&gt;
На этой странице собраны все сформированные запросы по билетам.&lt;br /&gt;
&lt;br /&gt;
Странно, что ни в одном билете нет запроса с сортировкой результатов. Возможно, они буду в дополнительных заданиях.&lt;br /&gt;
&lt;br /&gt;
== Схема БД ==&lt;br /&gt;
&lt;br /&gt;
Схема БД используется всё [[СПАСОИ_(10)_-_Лекция_№8_-_SQL#Некоторые возможности языка SQL | та же]], что была в прошлом семестре и на лекциях.&lt;br /&gt;
&lt;br /&gt;
Для написания запросов и проверки их выполнения создана БД в СУБД [http://www.postgresql.org/ PostgreSQL].&lt;br /&gt;
&lt;br /&gt;
Скрипт создания можно загрузить [http://yadi.sk/d/ArwqOGAy5pPfi отсюда].&lt;br /&gt;
&lt;br /&gt;
=== Таблицы БД ===&lt;br /&gt;
&lt;br /&gt;
==== Поставщики ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.s;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika |       imya       | sostoyanie |   gorod&lt;br /&gt;
 -------------------+------------------+------------+------------&lt;br /&gt;
  S5                | Мелисандра       |      65000 | Мадрид&lt;br /&gt;
  S2                | Бран Старк       |      60000 | Мурманск&lt;br /&gt;
  S1                | Якен Хгар        |    1500000 | Йокогама&lt;br /&gt;
  S7                | Сирио Форель     |    1500000 | Йокогама&lt;br /&gt;
  S4                | Джейме Ланнистер |     750000 | Лондон&lt;br /&gt;
  S3                | Серсея Ланнистер |    1200000 | Лондон&lt;br /&gt;
  S8                | Тирион Ланнистер |       2571 | Манчестер&lt;br /&gt;
  S9                | Иванов           |      35000 | Мытищи&lt;br /&gt;
  S10               | Русе Болтон      |      44444 | Баренцбург&lt;br /&gt;
  S11               | Петров Иван      |      35000 | Мытищи&lt;br /&gt;
  S14               | Рендилл Тарли    |    1111111 | Прага&lt;br /&gt;
  S13               | Сэмвелл Тарли    |     999999 | Прага&lt;br /&gt;
  S6                | Оша              |            | Москва&lt;br /&gt;
  S16               | Ходор            |            | Москва&lt;br /&gt;
  S15               | Мелисса Флорент  |     888888 | Стокгольм&lt;br /&gt;
  S12               | Петров Пётр      |      35001 | Мытищи&lt;br /&gt;
  S17               | Томми Версетти   |  123456789 | Майами&lt;br /&gt;
  S18               | Безликий         |          1 | Йокогама&lt;br /&gt;
 (18 rows)&lt;br /&gt;
&lt;br /&gt;
==== Детали ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.p;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_detali |       nazvanie       |     cvet      | ves  |      gorod&lt;br /&gt;
 --------------+----------------------+---------------+------+-----------------&lt;br /&gt;
  P9           | подставка            | синий         |  400 | Нижний Новгород&lt;br /&gt;
  P10          | стойка               | синий         | 2000 | Нижний Новгород&lt;br /&gt;
  P11          | абажур               | синий         |  400 | Нижний Новгород&lt;br /&gt;
  P1           | гайка                | чёрный        |   20 | Лондон&lt;br /&gt;
  P3           | ось                  | белый         | 5000 | Эдинбург&lt;br /&gt;
  P4           | зубчатое колесо      | чёрный        |   50 | Эдинбург&lt;br /&gt;
  P6           | транзистор           | коричневый    |    2 | Токио&lt;br /&gt;
  P7           | печатная плата       | зелёный       |  200 | Токио&lt;br /&gt;
  P8           | диод                 | коричневый    |    1 | Токио&lt;br /&gt;
  P12          | универсальная деталь | универсальный |    1 | Париж&lt;br /&gt;
  P13          | уникальная деталь    | уникальный    |    1 | Бостон&lt;br /&gt;
  P14          | болт                 | серый         |   20 | Ижевск&lt;br /&gt;
  P15          | рама                 | красный       | 3000 | Манчестер&lt;br /&gt;
  P16          | колесо               | белый         | 1500 | Манчестер&lt;br /&gt;
  P5           | втулка               | серый         |  350 | Манчестер&lt;br /&gt;
  P17          | бумага               | белый         |    1 | Астрахань&lt;br /&gt;
  P18          | плитка               | белый         |  300 | Флоренция&lt;br /&gt;
  P19          | орнамент             | серый         |  800 | Флоренция&lt;br /&gt;
  P20          | уголок               | серый         |  100 | Флоренция&lt;br /&gt;
  P21          | гайка 01-01          | серебристый   |   20 | Клин&lt;br /&gt;
  P22          | усиленная рама       | красный       | 3200 | Череповец&lt;br /&gt;
  P23          | винт                 | розовый       |    5 | Ижевск&lt;br /&gt;
  P24          | труселя              | красный       |   20 | Челябинск&lt;br /&gt;
  P25          | штуцерная деталь     | коричневый    |  450 | Череповец&lt;br /&gt;
  P2           | шуруп                | чёрный        |    5 | Лондон&lt;br /&gt;
  P26          | лезвие               | бесцветный    |  120 | Йокогама&lt;br /&gt;
 (26 rows)&lt;br /&gt;
&lt;br /&gt;
==== Изделия ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.j;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_izdelia |       nazvanie        |      gorod&lt;br /&gt;
 ---------------+-----------------------+-----------------&lt;br /&gt;
  J1            | автомобиль            | Магнитогорск&lt;br /&gt;
  J2            | процессор             | Зеленоград&lt;br /&gt;
  J3            | торшер                | Нижний Новгород&lt;br /&gt;
  J4            | универсальное изделие | Париж&lt;br /&gt;
  J5            | уникальное изделие    | Бостон&lt;br /&gt;
  J6            | велосипед 01/23       | Манчестер&lt;br /&gt;
  J7            | изделие из болтов     | Челябинск&lt;br /&gt;
  J8            | шкаф                  | Ярославль&lt;br /&gt;
  J9            | рама 02-01            | Череповец&lt;br /&gt;
  J10           | книга                 | Астрахань&lt;br /&gt;
  J11           | панно 01-03           | Флоренция&lt;br /&gt;
  J12           | велосипед 03-04       | Клин&lt;br /&gt;
  J13           | рама 02-03            | Череповец&lt;br /&gt;
  J14           | штуцер 01-02          | Череповец&lt;br /&gt;
  J15           | велосипед 01-04       | Клин&lt;br /&gt;
  J16           | кружевное бельё       | Челябинск&lt;br /&gt;
  J17           | штуцер 01-03          | Череповец&lt;br /&gt;
  J18           | кинжал                | Йокогама&lt;br /&gt;
 (18 rows)&lt;br /&gt;
&lt;br /&gt;
==== Сборки ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.spj;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika | nomer_detali | nomer_izdelia | kolichestvo&lt;br /&gt;
 -------------------+--------------+---------------+-------------&lt;br /&gt;
  S1                | P6           | J2            |          20&lt;br /&gt;
  S1                | P7           | J2            |           5&lt;br /&gt;
  S2                | P1           | J1            |           4&lt;br /&gt;
  S6                | P4           | J1            |           2&lt;br /&gt;
  S6                | P5           | J1            |           6&lt;br /&gt;
  S3                | P9           | J3            |           1&lt;br /&gt;
  S4                | P10          | J3            |           1&lt;br /&gt;
  S5                | P11          | J3            |           1&lt;br /&gt;
  S2                | P4           | J1            |           8&lt;br /&gt;
  S6                | P3           | J1            |          50&lt;br /&gt;
  S7                | P8           | J2            |          25&lt;br /&gt;
  S1                | P12          | J4            |           1&lt;br /&gt;
  S2                | P12          | J4            |           1&lt;br /&gt;
  S3                | P12          | J4            |           1&lt;br /&gt;
  S4                | P12          | J4            |           1&lt;br /&gt;
  S5                | P12          | J4            |           1&lt;br /&gt;
  S7                | P12          | J4            |           1&lt;br /&gt;
  S7                | P2           | J1            |           1&lt;br /&gt;
  S6                | P2           | J1            |           9&lt;br /&gt;
  S6                | P12          | J4            |           7&lt;br /&gt;
  S1                | P13          | J5            |          14&lt;br /&gt;
  S6                | P14          | J1            |        9000&lt;br /&gt;
  S2                | P14          | J1            |           3&lt;br /&gt;
  S6                | P1           | J1            |          12&lt;br /&gt;
  S8                | P15          | J6            |           1&lt;br /&gt;
  S8                | P16          | J6            |           2&lt;br /&gt;
  S3                | P5           | J6            |          10&lt;br /&gt;
  S10               | P2           | J8            |           4&lt;br /&gt;
  S8                | P1           | J7            |          16&lt;br /&gt;
  S9                | P14          | J7            |           3&lt;br /&gt;
  S11               | P10          | J3            |           2&lt;br /&gt;
  S12               | P15          | J1            |           3&lt;br /&gt;
  S11               | P11          | J3            |           4&lt;br /&gt;
  S10               | P14          | J9            |           5&lt;br /&gt;
  S13               | P17          | J10           |        1001&lt;br /&gt;
  S14               | P17          | J10           |        1111&lt;br /&gt;
  S15               | P17          | J10           |        1010&lt;br /&gt;
  S5                | P18          | J11           |           9&lt;br /&gt;
  S5                | P19          | J11           |           1&lt;br /&gt;
  S5                | P20          | J11           |           4&lt;br /&gt;
  S9                | P14          | J8            |          25&lt;br /&gt;
  S12               | P21          | J12           |          15&lt;br /&gt;
  S11               | P22          | J13           |           9&lt;br /&gt;
  S11               | P1           | J14           |          26&lt;br /&gt;
  S12               | P1           | J14           |          13&lt;br /&gt;
  S12               | P2           | J14           |          54&lt;br /&gt;
  S12               | P23          | J4            |         101&lt;br /&gt;
  S12               | P16          | J15           |          40&lt;br /&gt;
  S7                | P21          | J12           |           3&lt;br /&gt;
  S8                | P21          | J12           |           4&lt;br /&gt;
  S9                | P21          | J12           |           5&lt;br /&gt;
  S1                | P24          | J16           |           1&lt;br /&gt;
  S1                | P15          | J6            |           3&lt;br /&gt;
  S4                | P25          | J17           |           1&lt;br /&gt;
  S17               | P16          | J1            |           4&lt;br /&gt;
  S18               | P26          | J18           |           1&lt;br /&gt;
 (56 rows)&lt;br /&gt;
&lt;br /&gt;
== Готовые запросы ==&lt;br /&gt;
&lt;br /&gt;
Если видите, что тот или иной запрос можно составить короче и рациональней - смело вносите правку.&lt;br /&gt;
&lt;br /&gt;
В трёх билетах в задании на запрос встречается формулировка &amp;quot;&#039;&#039;только и только&#039;&#039;&amp;quot;. Как оказалось, это означает следующее: если холодильники поставляет &#039;&#039;только и только&#039;&#039; Уася, то:&lt;br /&gt;
# кроме Уаси никто не поставляет холодильники;&lt;br /&gt;
# Уася не поставляет ничего, кроме холодильников.&lt;br /&gt;
&lt;br /&gt;
Существующие запросы, естественно, оказались неправильными и их пришлось переписать. &amp;lt;s&amp;gt;Великий и могучий русский языка, ну что за экономия на бумаге.&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Билет 1 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера поставщиков, которые поставляют, по крайней мере, все те детали, которые поставляет поставщик с номером &#039;S2&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nomer_postavshika&lt;br /&gt;
FROM spasoi_ekz.spj SPJX&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT nomer_detali&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJY&lt;br /&gt;
                  WHERE nomer_postavshika = &#039;S2&#039;&lt;br /&gt;
                    AND NOT EXISTS (&lt;br /&gt;
                                    SELECT *&lt;br /&gt;
                                    FROM spasoi_ekz.spj&lt;br /&gt;
                                    WHERE nomer_postavshika = SPJX.nomer_postavshika&lt;br /&gt;
                                      AND nomer_detali = SPJY.nomer_detali&lt;br /&gt;
                                   )&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika&lt;br /&gt;
 -------------------&lt;br /&gt;
  S6&lt;br /&gt;
  S2&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 2 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера деталей и общее их количество для всех номеров деталей, поставляемых более чем одним поставщиком.&lt;br /&gt;
&lt;br /&gt;
Текст запроса, каким его дал Григорьев на лекции, впоследствии исправив его:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali AS &amp;quot;Номер детали&amp;quot;,&lt;br /&gt;
       SUM(kolichestvo) AS &amp;quot;Сколько штук поставляется&amp;quot;,&lt;br /&gt;
       COUNT(DISTINCT nomer_postavshika) AS &amp;quot;Сколько у неё поставщиков&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_postavshika) &amp;gt; 1;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali AS &amp;quot;Номер детали&amp;quot;,&lt;br /&gt;
       kol AS &amp;quot;Сколько штук поставляется&amp;quot;&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT nomer_detali,&lt;br /&gt;
             SUM(kolichestvo) AS kol,&lt;br /&gt;
             COUNT(DISTINCT nomer_postavshika)&lt;br /&gt;
      FROM spasoi_ekz.spj&lt;br /&gt;
      GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_postavshika) &amp;gt; 1&lt;br /&gt;
     ) A;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер детали | Сколько штук поставляется | Сколько у неё поставщиков&lt;br /&gt;
 --------------+---------------------------+---------------------------&lt;br /&gt;
  P1           |                        71 |                         5&lt;br /&gt;
  P10          |                         3 |                         2&lt;br /&gt;
  P11          |                         5 |                         2&lt;br /&gt;
  P12          |                        13 |                         7&lt;br /&gt;
  P14          |                      9036 |                         4&lt;br /&gt;
  P15          |                         7 |                         3&lt;br /&gt;
  P16          |                        46 |                         3&lt;br /&gt;
  P17          |                      3122 |                         3&lt;br /&gt;
  P2           |                        68 |                         4&lt;br /&gt;
  P21          |                        27 |                         4&lt;br /&gt;
  P4           |                        10 |                         2&lt;br /&gt;
  P5           |                        16 |                         2&lt;br /&gt;
 (12 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 3 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера поставщиков, поставляющих детали с номером &#039;P1&#039; для какого-либо изделия в количестве (в поставке) большим, чем средний объём поставок деталей с номером &#039;P2&#039; для этого изделия.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT X.nomer_postavshika &lt;br /&gt;
FROM spasoi_ekz.spj X&lt;br /&gt;
WHERE X.nomer_detali = &#039;P1&#039;&lt;br /&gt;
  AND X.kolichestvo &amp;gt; (&lt;br /&gt;
                       SELECT AVG(kolichestvo)&lt;br /&gt;
                       FROM spasoi_ekz.spj&lt;br /&gt;
                       WHERE nomer_izdelia = X.nomer_izdelia&lt;br /&gt;
                         AND nomer_detali = &#039;P2&#039;&lt;br /&gt;
                      );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но длиннее и нерациональней&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nomer_postavshika&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT *&lt;br /&gt;
      FROM spasoi_ekz.spj&lt;br /&gt;
      WHERE nomer_izdelia IN(&lt;br /&gt;
                             SELECT nomer_izdelia&lt;br /&gt;
                             FROM spasoi_ekz.spj&lt;br /&gt;
                             WHERE nomer_detali = &#039;P1&#039;&lt;br /&gt;
                            )&lt;br /&gt;
        AND nomer_izdelia IN(&lt;br /&gt;
	                     SELECT nomer_izdelia&lt;br /&gt;
	                     FROM spasoi_ekz.spj&lt;br /&gt;
	                     WHERE nomer_detali = &#039;P2&#039;&lt;br /&gt;
	                    )&lt;br /&gt;
     ) A&lt;br /&gt;
WHERE nomer_detali = &#039;P1&#039; AND kolichestvo &amp;gt;&lt;br /&gt;
(&lt;br /&gt;
 SELECT AVG(kolichestvo)&lt;br /&gt;
 FROM (&lt;br /&gt;
       SELECT *&lt;br /&gt;
       FROM spasoi_ekz.spj&lt;br /&gt;
       WHERE nomer_izdelia IN(&lt;br /&gt;
                              SELECT nomer_izdelia&lt;br /&gt;
                              FROM spasoi_ekz.spj&lt;br /&gt;
                              WHERE nomer_detali = &#039;P1&#039;&lt;br /&gt;
                             )&lt;br /&gt;
         AND nomer_izdelia IN(&lt;br /&gt;
                              SELECT nomer_izdelia&lt;br /&gt;
                              FROM spasoi_ekz.spj&lt;br /&gt;
                              WHERE nomer_detali = &#039;P2&#039;&lt;br /&gt;
                             )&lt;br /&gt;
      ) B&lt;br /&gt;
 WHERE nomer_detali = &#039;P2&#039;&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika&lt;br /&gt;
 -------------------&lt;br /&gt;
  S6&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 4 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера изделий, для которых детали поставляет только поставщик с номером ‘S1’.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_izdelia&lt;br /&gt;
FROM spasoi_ekz.spj X&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT *&lt;br /&gt;
                  FROM spasoi_ekz.spj&lt;br /&gt;
                  WHERE nomer_postavshika != &#039;S1&#039;&lt;br /&gt;
                    AND X.nomer_izdelia = nomer_izdelia&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но без EXISTS&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nomer_izdelia&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
WHERE nomer_izdelia IN(&lt;br /&gt;
                       SELECT nomer_izdelia&lt;br /&gt;
                       FROM spasoi_ekz.spj&lt;br /&gt;
                       WHERE nomer_postavshika = &#039;S1&#039;&lt;br /&gt;
                      )&lt;br /&gt;
  AND nomer_izdelia NOT IN(&lt;br /&gt;
                           SELECT nomer_izdelia&lt;br /&gt;
                           FROM spasoi_ekz.spj&lt;br /&gt;
                           WHERE nomer_postavshika != &#039;S1&#039;&lt;br /&gt;
                          );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_izdelia&lt;br /&gt;
 ---------------&lt;br /&gt;
  J5&lt;br /&gt;
  J16&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 5 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих детали с названием &amp;quot;Болт&amp;quot; в количестве (в поставке) большим, чем средний объём всех поставок деталей с номером &#039;P1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                           ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                        JOIN spasoi_ekz.p P&lt;br /&gt;
                           ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                              AND nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
WHERE kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT AVG(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                                               ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                                  AND SPJ.nomer_detali = &#039;P1&#039;&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но без JOIN&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s&lt;br /&gt;
WHERE nomer_postavshika IN (&lt;br /&gt;
                            SELECT nomer_postavshika&lt;br /&gt;
                            FROM spasoi_ekz.spj&lt;br /&gt;
                            WHERE nomer_detali = (&lt;br /&gt;
                                                  SELECT nomer_detali&lt;br /&gt;
                                                  FROM spasoi_ekz.p&lt;br /&gt;
                                                  WHERE LOWER(nazvanie) = LOWER(&#039;Болт&#039;)&lt;br /&gt;
                                                 )&lt;br /&gt;
                              AND kolichestvo &amp;gt; (&lt;br /&gt;
                                                 SELECT AVG(kolichestvo)&lt;br /&gt;
                                                 FROM spasoi_ekz.spj&lt;br /&gt;
                                                 WHERE nomer_detali = &#039;P1&#039;&lt;br /&gt;
                                                )&lt;br /&gt;
                           );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  imya&lt;br /&gt;
 ------&lt;br /&gt;
  Оша&lt;br /&gt;
  Иванов&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 6 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия деталей, поставляемых поставщиком, проживающим в том же городе, где изготавливаются эти детали, для изделия с названием ‘Велосипед 01/23’.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT P.nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                        JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                        JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
WHERE S.gorod = P.gorod&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Велосипед 01/23&#039;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос без JOIN&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nazvanie&lt;br /&gt;
FROM spasoi_ekz.S S, spasoi_ekz.p P, spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE S.gorod = P.gorod&lt;br /&gt;
  AND P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
  AND S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
  AND nomer_izdelia = (&lt;br /&gt;
                       SELECT nomer_izdelia&lt;br /&gt;
                       FROM spasoi_ekz.j&lt;br /&gt;
                       WHERE nazvanie = LOWER(&#039;Велосипед 01/23&#039;)&lt;br /&gt;
                      );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nazvanie&lt;br /&gt;
 ----------&lt;br /&gt;
  рама&lt;br /&gt;
  колесо&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 7 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия изделий, куда входят детали с названием &#039;Болт&#039;, поставляемых поставщиками с именем &#039;Иванов&#039;, в количестве (в поставке) большим, чем средний объём поставок для этого изделия.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT J.nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                        JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                        JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
WHERE imya LIKE &#039;%Иванов%&#039;&lt;br /&gt;
  AND P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
  AND kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT AVG(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj X&lt;br /&gt;
                     WHERE SPJ.nomer_izdelia = X.nomer_izdelia&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё один вариант запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie&lt;br /&gt;
FROM spasoi_ekz.j&lt;br /&gt;
WHERE nomer_izdelia IN (&lt;br /&gt;
                        SELECT nomer_izdelia&lt;br /&gt;
                        FROM (spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                                                   ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                                                      AND imya LIKE &#039;%Иванов%&#039;&lt;br /&gt;
                                                 JOIN spasoi_ekz.p P&lt;br /&gt;
                                                   ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                                      AND nazvanie = LOWER(&#039;Болт&#039;)) A&lt;br /&gt;
                        WHERE kolichestvo &amp;gt; (&lt;br /&gt;
                                             SELECT AVG(kolichestvo)&lt;br /&gt;
                                             FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                                                       ON SPJ.nomer_izdelia = A.nomer_izdelia&lt;br /&gt;
                                            )&lt;br /&gt;
                       );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;И ещё вариант этого же запроса, но длиннее и нерациональней&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT J.nazvanie, kolichestvo&lt;br /&gt;
      FROM spasoi_ekz.s S, spasoi_ekz.p P, spasoi_ekz.j J, spasoi_ekz.spj SPJ&lt;br /&gt;
      WHERE J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
        AND P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
        AND P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
        AND S.imya LIKE &#039;%Иванов%&#039;&lt;br /&gt;
        AND S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
     ) A&lt;br /&gt;
WHERE kolichestvo &amp;gt;&lt;br /&gt;
(&lt;br /&gt;
 SELECT AVG(kolichestvo)&lt;br /&gt;
 FROM spasoi_ekz.spj&lt;br /&gt;
 WHERE nomer_izdelia IN(&lt;br /&gt;
                        SELECT J.nomer_izdelia&lt;br /&gt;
                        FROM spasoi_ekz.s S, spasoi_ekz.p P, spasoi_ekz.j J, spasoi_ekz.spj SPJ&lt;br /&gt;
                        WHERE J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
                          AND P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                          AND P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
                          AND S.imya LIKE &#039;%Иванов%&#039;&lt;br /&gt;
                          AND S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
                       )&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
      nazvanie&lt;br /&gt;
 -------------------&lt;br /&gt;
  шкаф&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 8 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера изделий и общее количество деталей для них, поставляемых поставщиками с именем &#039;Петров&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_izdelia AS &amp;quot;Номер изделия&amp;quot;, SUM(kolichestvo) AS &amp;quot;Количество деталей&amp;quot; &lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                             -- так как &amp;quot;поставщикАМИ&amp;quot; и возможны&lt;br /&gt;
                             -- Иван Петров и Петров Иван, то LIKE %Петров%&lt;br /&gt;
                             AND imya LIKE &#039;%Петров%&#039;&lt;br /&gt;
GROUP BY nomer_izdelia;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер изделия | Количество деталей&lt;br /&gt;
 ---------------+--------------------&lt;br /&gt;
  J4            |                101&lt;br /&gt;
  J3            |                  6&lt;br /&gt;
  J13           |                  9&lt;br /&gt;
  J15           |                 40&lt;br /&gt;
  J1            |                  3&lt;br /&gt;
  J12           |                 15&lt;br /&gt;
  J14           |                 93&lt;br /&gt;
 (7 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 9 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера деталей и общее их количество для всех номеров деталей, которые входят только в одно изделие.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali, SUM(kolichestvo)&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_izdelia) = 1;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali, kol FROM (&lt;br /&gt;
       SELECT nomer_detali, SUM(kolichestvo) AS kol, COUNT(DISTINCT nomer_izdelia) = 1&lt;br /&gt;
       FROM spasoi_ekz.spj&lt;br /&gt;
       GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_izdelia) = 1&lt;br /&gt;
    ) A;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_detali | sum&lt;br /&gt;
 --------------+------&lt;br /&gt;
  P10          |    3&lt;br /&gt;
  P11          |    5&lt;br /&gt;
  P12          |   13&lt;br /&gt;
  P13          |   14&lt;br /&gt;
  P17          | 3122&lt;br /&gt;
  P18          |    9&lt;br /&gt;
  P19          |    1&lt;br /&gt;
  P20          |    4&lt;br /&gt;
  P21          |   27&lt;br /&gt;
  P22          |    9&lt;br /&gt;
  P23          |  101&lt;br /&gt;
  P24          |    1&lt;br /&gt;
  P25          |    1&lt;br /&gt;
  P26          |    1&lt;br /&gt;
  P3           |   50&lt;br /&gt;
  P4           |   10&lt;br /&gt;
  P6           |   20&lt;br /&gt;
  P7           |    5&lt;br /&gt;
  P8           |   25&lt;br /&gt;
  P9           |    1&lt;br /&gt;
 (20 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 10 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих детали с названием &#039;Болт&#039; для изделия с названием &#039;Рама 02-01&#039; в количестве (в поставке) большим, чем минимальное значение поставки детали с номером &#039;P1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
			   ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
			      AND J.nazvanie = LOWER(&#039;Рама 02-01&#039;)&lt;br /&gt;
			 JOIN spasoi_ekz.p P&lt;br /&gt;
			   ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
			      AND P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
			 JOIN spasoi_ekz.s S&lt;br /&gt;
			   ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE kolichestvo &amp;gt; (&lt;br /&gt;
		     SELECT MIN(kolichestvo)&lt;br /&gt;
		     FROM spasoi_ekz.spj &lt;br /&gt;
		     WHERE nomer_detali = &#039;P1&#039;&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Русе Болтон&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 11 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия городов и суммарное состояние проживающих в каждом городе поставщиков, у которых минимальный объём поставки деталей больше 1000.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT gorod, SUM(sostoyanie)&lt;br /&gt;
FROM spasoi_ekz.s S&lt;br /&gt;
WHERE (	&lt;br /&gt;
       SELECT MIN(kolichestvo)	&lt;br /&gt;
       FROM spasoi_ekz.spj X	&lt;br /&gt;
       WHERE X.nomer_postavshika = S.nomer_postavshika		&lt;br /&gt;
      ) &amp;gt; 1000&lt;br /&gt;
GROUP BY gorod;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Вариант подлиннее для тех, кто не ищет лёгких путей&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT gorod, SUM(sostoyanie)&lt;br /&gt;
FROM spasoi_ekz.s&lt;br /&gt;
WHERE nomer_postavshika IN (&lt;br /&gt;
                            SELECT nomer_postavshika&lt;br /&gt;
                            FROM spasoi_ekz.spj&lt;br /&gt;
                            GROUP BY nomer_postavshika HAVING MIN(kolichestvo) &amp;gt; 1000&lt;br /&gt;
                           )&lt;br /&gt;
GROUP BY gorod;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;!-- а этот запрос выполняет не совсем то и не правильно&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT gorod, sost&lt;br /&gt;
FROM (&lt;br /&gt;
SELECT gorod, SUM(sostoyanie) AS sost, SUM(SPJ.kolichestvo)&lt;br /&gt;
FROM spasoi_ekz.spj, spasoi_ekz.s&lt;br /&gt;
WHERE S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
GROUP BY S.gorod HAVING SUM(SPJ.kolichestvo) &amp;gt; 1000&lt;br /&gt;
) A;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; --&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
    gorod   |   sum&lt;br /&gt;
 -----------+---------&lt;br /&gt;
  Прага     | 2111110&lt;br /&gt;
  Стокгольм |  888888&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 12 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера деталей, поставляемых для какого-либо изделия поставщиком, проживающим в том же городе, где изготавливается это изделие.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali&lt;br /&gt;
FROM spasoi_ekz.spj SPJ, spasoi_ekz.s S, spasoi_ekz.j J&lt;br /&gt;
WHERE SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
  AND S.gorod = J.gorod&lt;br /&gt;
  AND J.nomer_izdelia = SPJ.nomer_izdelia;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_detali&lt;br /&gt;
 --------------&lt;br /&gt;
  P15&lt;br /&gt;
  P16&lt;br /&gt;
  P26&lt;br /&gt;
 (3 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 13 ===&lt;br /&gt;
&lt;br /&gt;
Написать &amp;lt;u&amp;gt;один&amp;lt;/u&amp;gt; запрос SELECT: выдать количества строк в таблице S (Поставщик) 1) с пустыми значениями и 2) непустыми значениями в столбце Состояние.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT COUNT(nomer_postavshika) - COUNT(sostoyanie) AS &amp;quot;С пустым состоянием&amp;quot;, &lt;br /&gt;
       COUNT(sostoyanie) AS &amp;quot;С не пустым состоянием&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.s;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но длиннее и нерациональней&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SELECT COUNT(Snull.*) AS &amp;quot;С пустым состоянием&amp;quot;, COUNT(Snotnull.sostoyanie) AS &amp;quot;С не пустым состоянием&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.s Snull RIGHT OUTER JOIN spasoi_ekz.s Snotnull&lt;br /&gt;
                                      ON Snull.nomer_postavshika = Snotnull.nomer_postavshika&lt;br /&gt;
                                         AND Snull.sostoyanie IS NULL;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  С пустым состоянием | С не пустым состоянием&lt;br /&gt;
 ---------------------+-----------------------&lt;br /&gt;
                    2 |                    16&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 14 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют детали только и только для изделия с номером &#039;J1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj A JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON A.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE nomer_izdelia = &#039;J1&#039;&lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT nomer_postavshika&lt;br /&gt;
                  FROM spasoi_ekz.spj&lt;br /&gt;
                  WHERE nomer_izdelia != &#039;J1&#039;&lt;br /&gt;
                    AND nomer_postavshika = A.nomer_postavshika&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       imya&lt;br /&gt;
 ----------------&lt;br /&gt;
  Томми Версетти&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 15 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать наименования изделий, для которых детали поставляют только те поставщики, у которых состояние больше 1000000 у.е.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
C использованием NOT EXISTS:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT j.nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
	JOIN spasoi_ekz.j ON spj.nomer_izdelia = j.nomer_izdelia&lt;br /&gt;
WHERE NOT EXISTS  (&lt;br /&gt;
		SELECT *&lt;br /&gt;
		FROM spasoi_ekz.spj X&lt;br /&gt;
			JOIN spasoi_ekz.s ON X.nomer_postavshika = s.nomer_postavshika&lt;br /&gt;
		WHERE s.sostoyanie &amp;lt;= 1000000 AND&lt;br /&gt;
		X.nomer_izdelia = spj.nomer_izdelia&lt;br /&gt;
               );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                        JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
WHERE sostoyanie &amp;gt; 1000000&lt;br /&gt;
  AND SPJ.nomer_izdelia NOT IN (&lt;br /&gt;
                                SELECT nomer_izdelia&lt;br /&gt;
                                FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                                                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                                WHERE sostoyanie &amp;lt; 1000000&lt;br /&gt;
                               );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       nazvanie&lt;br /&gt;
 --------------------&lt;br /&gt;
  кружевное бельё&lt;br /&gt;
  уникальное изделие&lt;br /&gt;
  процессор&lt;br /&gt;
 (3 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 16 ===&lt;br /&gt;
Написать запрос SELECT: выдать цвета и для каждого цвета общее количество деталей, входящих в изделие с названием &#039;Панно 01-03&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT cvet AS &amp;quot;Цвет&amp;quot;, SUM(kolichestvo) AS &amp;quot;Деталей&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
			     AND J.nazvanie = LOWER(&#039;Панно 01-03&#039;)&lt;br /&gt;
			JOIN spasoi_ekz.P P&lt;br /&gt;
			  ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
GROUP BY cvet;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Цвет  | Деталей&lt;br /&gt;
 -------+---------&lt;br /&gt;
  белый |       9&lt;br /&gt;
  серый |       5&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 17 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера поставщиков и количество сделанных ими поставок при условии, что среднее число деталей во всех этих поставках больше 1000.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nom AS &amp;quot;Номер поставщика&amp;quot;, cnt AS &amp;quot;Количество поставок&amp;quot;&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT S.nomer_postavshika AS nom,&lt;br /&gt;
             COUNT(SPJ.nomer_postavshika) AS cnt,&lt;br /&gt;
             AVG(SPJ.kolichestvo) AS kol&lt;br /&gt;
      FROM spasoi_ekz.s S, spasoi_ekz.spj SPJ&lt;br /&gt;
      WHERE S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
      GROUP BY S.nomer_postavshika&lt;br /&gt;
     ) A&lt;br /&gt;
WHERE kol &amp;gt; 1000;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос немного попроще&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_postavshika AS &amp;quot;Номер поставщика&amp;quot;, COUNT(*) AS &amp;quot;Количество поставок&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
WHERE nomer_postavshika IN (&lt;br /&gt;
                            SELECT nomer_postavshika&lt;br /&gt;
                            FROM spasoi_ekz.spj&lt;br /&gt;
                            GROUP BY nomer_postavshika HAVING AVG(kolichestvo) &amp;gt; 1000&lt;br /&gt;
                           )&lt;br /&gt;
GROUP BY nomer_postavshika;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер поставщика | Количество поставок&lt;br /&gt;
 ------------------+---------------------&lt;br /&gt;
  S13              |                   1&lt;br /&gt;
  S6               |                   7&lt;br /&gt;
  S14              |                   1&lt;br /&gt;
  S15              |                   1&lt;br /&gt;
 (4 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 18 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, имеющих состояние больше 1000 и поставляющих деталь с названием &#039;Гайка 01-01&#039; для изделия с названием &#039;Велосипед 03-04&#039; в количестве (в поставке) большим, чем средний объём поставки, выполненной поставщиками с именем &#039;Иванов&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:2nd dufficulty.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;5px&amp;quot;&amp;gt;&#039;&#039;&#039;Второй по сложности запрос экзамена!&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;4px&amp;quot;&amp;gt;&#039;&#039;&#039;Вот уж не свезло, так не свезло&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                    JOIN spasoi_ekz.j J&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
WHERE sostoyanie &amp;gt; 1000&lt;br /&gt;
  AND P.nazvanie = LOWER(&#039;Гайка 01-01&#039;)&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Велосипед 03-04&#039;)&lt;br /&gt;
  AND kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT AVG(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                       ON SPJ.nomer_postavshika = S.nomer_postavshika &lt;br /&gt;
                     WHERE S.imya = &#039;Иванов&#039;&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Пётр&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 19 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия красных деталей, которые входят только в изделие с названием &#039;Рама 02-03&#039; в количестве, меньшем 10 единиц в поставке.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT X.nazvanie&lt;br /&gt;
FROM spasoi_ekz.p X JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_detali = X.nomer_detali&lt;br /&gt;
                    JOIN spasoi_ekz.j J&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
WHERE X.cvet = &#039;красный&#039;&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Рама 02-03&#039;)&lt;br /&gt;
  AND kolichestvo &amp;lt; 10&lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT J.nomer_izdelia&lt;br /&gt;
                  FROM spasoi_ekz.j J JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                                        ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                  WHERE J.nazvanie != LOWER(&#039;Рама 02-03&#039;)&lt;br /&gt;
                    AND X.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант этого же запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT P.nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND cvet = &#039;красный&#039;&lt;br /&gt;
                        JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                              AND J.nazvanie = LOWER(&#039;Рама 02-03&#039;)&lt;br /&gt;
WHERE kolichestvo &amp;lt; 10&lt;br /&gt;
  AND SPJ.nomer_detali NOT IN (&lt;br /&gt;
                               SELECT nomer_detali&lt;br /&gt;
                               FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                                         ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                                                            AND J.nazvanie != LOWER(&#039;Рама 02-03&#039;)&lt;br /&gt;
                              );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     nazvanie&lt;br /&gt;
 ----------------&lt;br /&gt;
  усиленная рама&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 20 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих только белые детали.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
WHERE cvet = &#039;белый&#039;&lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT nomer_postavshika&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                                            ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                  WHERE nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    AND P.cvet != &#039;белый&#039;&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё один вариант этого же запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND cvet = &#039;белый&#039;&lt;br /&gt;
                        JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE S.nomer_postavshika NOT IN (&lt;br /&gt;
                                  SELECT nomer_postavshika&lt;br /&gt;
                                  FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                                                            ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                                               AND cvet != &#039;белый&#039;&lt;br /&gt;
                                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;И ещё один вариант этого же запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s&lt;br /&gt;
WHERE nomer_postavshika NOT IN  (&lt;br /&gt;
                                 SELECT spj.nomer_postavshika&lt;br /&gt;
                                 FROM spasoi_ekz.spj SPJ, spasoi_ekz.p P&lt;br /&gt;
                                 WHERE SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                   AND p.cvet != &#039;белый&#039;&lt;br /&gt;
                                )&lt;br /&gt;
  AND nomer_postavshika  IN (&lt;br /&gt;
                             SELECT spj.nomer_postavshika&lt;br /&gt;
                             FROM spasoi_ekz.spj SPJ, spasoi_ekz.p P&lt;br /&gt;
                             WHERE SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                               AND p.cvet = &#039;белый&#039;&lt;br /&gt;
                            );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       imya&lt;br /&gt;
 -----------------&lt;br /&gt;
  Рендилл Тарли&lt;br /&gt;
  Сэмвелл Тарли&lt;br /&gt;
  Мелисса Флорент&lt;br /&gt;
  Томми Версетти&lt;br /&gt;
 (4 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 21 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия изделий, для которых детали поставляет только и только поставщик с номером &#039;S1&#039;.&lt;br /&gt;
&lt;br /&gt;
Чтобы продемонстрировать выполнение запроса наглядно, возьмём поставщика не &#039;S1&#039;, а &#039;S18&#039;, который был создан специально для этого запроса. Если оставить &#039;S1&#039;, то наглядности не получится, так как по нашей схеме БД этот поставщик не попадает под условие &amp;quot;&#039;&#039;только и только&#039;&#039;&amp;quot;, и запрос вернёт пустой результат.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie&lt;br /&gt;
FROM spasoi_ekz.j J, spasoi_ekz.SPJ SPJ&lt;br /&gt;
WHERE J.nomer_izdelia = SPJ.nomer_izdelia &lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT *&lt;br /&gt;
                  FROM spasoi_ekz.spj&lt;br /&gt;
                  WHERE nomer_postavshika != &#039;S18&#039; AND nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                 )&lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT *&lt;br /&gt;
                  FROM spasoi_ekz.spj&lt;br /&gt;
                  WHERE nomer_postavshika = &#039;S18&#039; AND nomer_izdelia != J.nomer_izdelia&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       nazvanie&lt;br /&gt;
 --------------------&lt;br /&gt;
  кинжал&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 22 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют только детали с номером &#039;P1&#039; для изделия с именем &#039;Штуцер 01-02&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- неверный запрос - номер изделия, а не название&lt;br /&gt;
SELECT imya FROM S X&lt;br /&gt;
JOIN SPJ Y ON X.nomer_postavshika=Y.nomer_postavshika&lt;br /&gt;
WHERE X.nomer_postavshika NOT IN (&lt;br /&gt;
                  SELECT DISTINCT nomer_postavshika FROM SPJ Z&lt;br /&gt;
                  WHERE Z.nomer_izdelia != &#039;Штуцер 01-02&#039;&lt;br /&gt;
                  AND Z.nomer_detali!=&#039;P1&#039;);--&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                             AND J.nazvanie = LOWER(&#039;штуцер 01-02&#039;)&lt;br /&gt;
                        JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND SPJ.nomer_detali = &#039;P1&#039;&lt;br /&gt;
                        JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE SPJ.nomer_postavshika NOT IN (&lt;br /&gt;
                                    SELECT nomer_postavshika&lt;br /&gt;
                                    FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                                              ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                                                                 AND J.nazvanie = LOWER(&#039;штуцер 01-02&#039;)&lt;br /&gt;
                                                            JOIN spasoi_ekz.p P&lt;br /&gt;
                                                              ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                                                 AND SPJ.nomer_detali != &#039;P1&#039;&lt;br /&gt;
                              );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Иван&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 23 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют деталь с названием &#039;Винт&#039; в количестве большим 100 единиц в одной поставке и имеют состояние больше среднего по их родному городу.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT S.imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
WHERE P.nazvanie = LOWER(&#039;Винт&#039;)&lt;br /&gt;
  AND SPJ.kolichestvo &amp;gt; 100&lt;br /&gt;
  AND S.sostoyanie &amp;gt; (&lt;br /&gt;
                      SELECT AVG(SS.sostoyanie)&lt;br /&gt;
                      FROM spasoi_ekz.s SS&lt;br /&gt;
                      WHERE SS.gorod = S.gorod&lt;br /&gt;
                     );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Пётр&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 24 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать наименования деталей и общее их количество для всех наименований деталей, изготавливаемых в одном городе.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- С этим запросом возникла неожиданная проблема - задание то ли неполное, то ли неправильное, потому что нельзя однозначно сказать, что по нему требуется сделать.&lt;br /&gt;
&lt;br /&gt;
Так что тут несколько вариантов запросов (кто как понял).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Первый вариант запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie, kol&lt;br /&gt;
FROM spasoi_ekz.p A, (&lt;br /&gt;
                      SELECT X.gorod, SUM(kolichestvo) as kol&lt;br /&gt;
                      FROM spasoi_ekz.p X, spasoi_ekz.spj Y&lt;br /&gt;
                      WHERE Y.nomer_detali = X.nomer_detali&lt;br /&gt;
                      GROUP BY X.gorod&lt;br /&gt;
                     ) B&lt;br /&gt;
WHERE A.gorod = B.gorod;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
        nazvanie       | kol&lt;br /&gt;
 ----------------------+------&lt;br /&gt;
  подставка            |    9&lt;br /&gt;
  стойка               |    9&lt;br /&gt;
  абажур               |    9&lt;br /&gt;
  гайка                |  139&lt;br /&gt;
  ось                  |   60&lt;br /&gt;
  зубчатое колесо      |   60&lt;br /&gt;
  транзистор           |   50&lt;br /&gt;
  печатная плата       |   50&lt;br /&gt;
  диод                 |   50&lt;br /&gt;
  универсальная деталь |   13&lt;br /&gt;
  уникальная деталь    |   14&lt;br /&gt;
  болт                 | 9137&lt;br /&gt;
  рама                 |   69&lt;br /&gt;
  колесо               |   69&lt;br /&gt;
  втулка               |   69&lt;br /&gt;
  бумага               | 3122&lt;br /&gt;
  плитка               |   14&lt;br /&gt;
  орнамент             |   14&lt;br /&gt;
  уголок               |   14&lt;br /&gt;
  гайка 01-01          |   27&lt;br /&gt;
  усиленная рама       |   10&lt;br /&gt;
  винт                 | 9137&lt;br /&gt;
  труселя              |    1&lt;br /&gt;
  штуцерная деталь     |   10&lt;br /&gt;
  шуруп                |  139&lt;br /&gt;
 (25 rows)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
и --&amp;gt;&lt;br /&gt;
В уточнение задания Григорьев сказал следующее: &amp;quot;&#039;&#039;Следует учесть, что в качестве наименования города может выступать переменная, в которую в некоторой программе должно быть занесено конкретное значение перед выполнением запроса&#039;&#039;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
То есть, вообще говоря, задание на запрос неполное, и его можно трактовать так: выдать наименования деталей и общее их количество для всех наименований деталей, изготавливаемых в городе &amp;lt;code&amp;gt;%НАЗВАНИЕГОРОДА%&amp;lt;/code&amp;gt;. Вот эта переменная задаётся где-то в программе, а в БД идёт запрос с уже подставленным конкретным названием. &lt;br /&gt;
&lt;br /&gt;
Этот вариант запроса составлен, например, для Лондона. &lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie, SUM(kolichestvo)&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
WHERE gorod = &#039;Лондон&#039;&lt;br /&gt;
GROUP BY nazvanie;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nazvanie | sum&lt;br /&gt;
 ----------+-----&lt;br /&gt;
  гайка    |  71&lt;br /&gt;
  шуруп    |  68&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 25 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих хотя бы одну белую деталь для изделия с названием &#039;Велосипед 01-04&#039; с объёмом поставки большим, чем средний объём поставки этого поставщика.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                    JOIN spasoi_ekz.j J&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
WHERE cvet = &#039;белый&#039;&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Велосипед 01-04&#039;)&lt;br /&gt;
  AND kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT AVG(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj SPJ&lt;br /&gt;
                     WHERE SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Пётр&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 26 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера красных деталей и количество поставок этих деталей.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT P.nomer_detali AS &amp;quot;Номер детали&amp;quot;, COUNT(kolichestvo) AS &amp;quot;Количество поставок с ней&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.p P, spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
  AND cvet = &#039;красный&#039;&lt;br /&gt;
GROUP BY P.nomer_detali;   &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос через JOIN&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT SPJ.nomer_detali AS &amp;quot;Номер детали&amp;quot;, COUNT(kolichestvo) AS &amp;quot;Количество поставок с ней&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND cvet = &#039;красный&#039;&lt;br /&gt;
GROUP BY SPJ.nomer_detali;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер детали | Количество поставок с ней&lt;br /&gt;
 --------------+---------------------------&lt;br /&gt;
  P15          |                         3&lt;br /&gt;
  P22          |                         1&lt;br /&gt;
  P24          |                         1&lt;br /&gt;
 (3 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 27 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать наименования городов и среднее состояние поставщиков для каждого города, поставляющих детали с названием &#039;Гайка 01-01&#039; для изделия с названием &#039;Велосипед 03-04&#039; в количестве (в поставке) большим, чем минимальный объём поставки, выполненной поставщиком с номером &#039;S1&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:1st dufficulty.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;7px&amp;quot;&amp;gt;&#039;&#039;&#039;Сложнейший запрос экзамена!&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;5px&amp;quot;&amp;gt;&#039;&#039;&#039;Сохрани Джа, вытащить такое&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT S.gorod AS &amp;quot;Город&amp;quot;, AVG(S.sostoyanie) AS &amp;quot;Среднее состояние&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                    JOIN spasoi_ekz.j J&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
WHERE P.nazvanie = LOWER(&#039;Гайка 01-01&#039;)&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Велосипед 03-04&#039;)&lt;br /&gt;
  AND kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT MIN(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj&lt;br /&gt;
                     WHERE nomer_postavshika = &#039;S1&#039;&lt;br /&gt;
                    )&lt;br /&gt;
GROUP BY S.gorod;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
    Город   |   Среднее состояние&lt;br /&gt;
 -----------+-----------------------&lt;br /&gt;
  Мытищи    |    35000.500000000000&lt;br /&gt;
  Йокогама  |  1500000.000000000000&lt;br /&gt;
  Манчестер | 2571.0000000000000000&lt;br /&gt;
 (3 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 28 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия изделий, куда входит хотя бы одна красная деталь весом больше 10 граммов, поставляемая только поставщиком с номером &#039;S1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT J.nazvanie&lt;br /&gt;
FROM spasoi_ekz.j J JOIN spasoi_ekz.spj SPJ1&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ1.nomer_izdelia&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ1.nomer_detali&lt;br /&gt;
WHERE P.ves &amp;gt; 10&lt;br /&gt;
 AND P.cvet = &#039;красный&#039;&lt;br /&gt;
 AND NOT EXISTS (&lt;br /&gt;
                 SELECT SPJ2.nomer_postavshika&lt;br /&gt;
                 FROM spasoi_ekz.spj SPJ2         &lt;br /&gt;
                 WHERE SPJ2.nomer_detali = P.nomer_detali&lt;br /&gt;
	 	   AND SPJ2.nomer_postavshika != &#039;S1&#039;&lt;br /&gt;
                );                     &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     nazvanie&lt;br /&gt;
 -----------------&lt;br /&gt;
  кружевное бельё&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 29 ===&lt;br /&gt;
Написать запрос SELECT: выдать названия деталей, которые входят только и только в состав изделия с названием &#039;Штуцер 01-03&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie&lt;br /&gt;
FROM spasoi_ekz.p P, spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE P.nomer_detali = SPJ.nomer_detali &lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT SPJ.nomer_izdelia&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                            ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
                  WHERE (&lt;br /&gt;
                         J.nazvanie != LOWER(&#039;Штуцер 01-03&#039;)&lt;br /&gt;
                         AND&lt;br /&gt;
                         SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                        )&lt;br /&gt;
                     OR (&lt;br /&gt;
                         J.nazvanie = LOWER(&#039;Штуцер 01-03&#039;)&lt;br /&gt;
                         AND&lt;br /&gt;
                         SPJ.nomer_detali != P.nomer_detali&lt;br /&gt;
                        )&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
      nazvanie&lt;br /&gt;
 ------------------&lt;br /&gt;
  штуцерная деталь&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 30 ===&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют, по крайней мере, все те детали, которые поставляет поставщик с номером &#039;S2&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT imya&lt;br /&gt;
FROM spasoi_ekz.s S&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT nomer_detali&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJY&lt;br /&gt;
                  WHERE nomer_postavshika = &#039;S2&#039;&lt;br /&gt;
                    AND NOT EXISTS (&lt;br /&gt;
                                    SELECT *&lt;br /&gt;
                                    FROM spasoi_ekz.spj&lt;br /&gt;
                                    WHERE nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                                      AND nomer_detali = SPJY.nomer_detali&lt;br /&gt;
                                   )&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  imya&lt;br /&gt;
 ------------&lt;br /&gt;
  Оша&lt;br /&gt;
  Бран Старк&lt;br /&gt;
 (2 rows)&lt;br /&gt;
[[Категория:Структурное проектирование АСОИ (10 семестр)]]&lt;/div&gt;</summary>
		<author><name>81.9.52.28</name></author>
	</entry>
	<entry>
		<id>https://iu5bmstu.ru/index.php?title=SQL-%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D1%8B_%D0%BA_%D1%8D%D0%BA%D0%B7%D0%B0%D0%BC%D0%B5%D0%BD%D1%83_%D0%BF%D0%BE_%D0%A1%D0%9F%D0%90%D0%A1%D0%9E%D0%98_(10_%D1%81%D0%B5%D0%BC%D0%B5%D1%81%D1%82%D1%80)&amp;diff=3837</id>
		<title>SQL-запросы к экзамену по СПАСОИ (10 семестр)</title>
		<link rel="alternate" type="text/html" href="https://iu5bmstu.ru/index.php?title=SQL-%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D1%8B_%D0%BA_%D1%8D%D0%BA%D0%B7%D0%B0%D0%BC%D0%B5%D0%BD%D1%83_%D0%BF%D0%BE_%D0%A1%D0%9F%D0%90%D0%A1%D0%9E%D0%98_(10_%D1%81%D0%B5%D0%BC%D0%B5%D1%81%D1%82%D1%80)&amp;diff=3837"/>
		<updated>2013-06-14T22:45:42Z</updated>

		<summary type="html">&lt;p&gt;81.9.52.28: /* Билет 15 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right; clear:both; margin-right:1.0em;&amp;quot;&amp;gt;__TOC__&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Билет экзамена по [[:Категория:Структурное проектирование АСОИ (10 семестр) | СПАСОИ]] состоит из двух частей:&lt;br /&gt;
# теория;&lt;br /&gt;
# SQL-запрос.&lt;br /&gt;
&lt;br /&gt;
На этой странице собраны все сформированные запросы по билетам.&lt;br /&gt;
&lt;br /&gt;
Странно, что ни в одном билете нет запроса с сортировкой результатов. Возможно, они буду в дополнительных заданиях.&lt;br /&gt;
&lt;br /&gt;
== Схема БД ==&lt;br /&gt;
&lt;br /&gt;
Схема БД используется всё [[СПАСОИ_(10)_-_Лекция_№8_-_SQL#Некоторые возможности языка SQL | та же]], что была в прошлом семестре и на лекциях.&lt;br /&gt;
&lt;br /&gt;
Для написания запросов и проверки их выполнения создана БД в СУБД [http://www.postgresql.org/ PostgreSQL].&lt;br /&gt;
&lt;br /&gt;
Скрипт создания можно загрузить [http://yadi.sk/d/ArwqOGAy5pPfi отсюда].&lt;br /&gt;
&lt;br /&gt;
=== Таблицы БД ===&lt;br /&gt;
&lt;br /&gt;
==== Поставщики ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.s;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika |       imya       | sostoyanie |   gorod&lt;br /&gt;
 -------------------+------------------+------------+------------&lt;br /&gt;
  S5                | Мелисандра       |      65000 | Мадрид&lt;br /&gt;
  S2                | Бран Старк       |      60000 | Мурманск&lt;br /&gt;
  S1                | Якен Хгар        |    1500000 | Йокогама&lt;br /&gt;
  S7                | Сирио Форель     |    1500000 | Йокогама&lt;br /&gt;
  S4                | Джейме Ланнистер |     750000 | Лондон&lt;br /&gt;
  S3                | Серсея Ланнистер |    1200000 | Лондон&lt;br /&gt;
  S8                | Тирион Ланнистер |       2571 | Манчестер&lt;br /&gt;
  S9                | Иванов           |      35000 | Мытищи&lt;br /&gt;
  S10               | Русе Болтон      |      44444 | Баренцбург&lt;br /&gt;
  S11               | Петров Иван      |      35000 | Мытищи&lt;br /&gt;
  S14               | Рендилл Тарли    |    1111111 | Прага&lt;br /&gt;
  S13               | Сэмвелл Тарли    |     999999 | Прага&lt;br /&gt;
  S6                | Оша              |            | Москва&lt;br /&gt;
  S16               | Ходор            |            | Москва&lt;br /&gt;
  S15               | Мелисса Флорент  |     888888 | Стокгольм&lt;br /&gt;
  S12               | Петров Пётр      |      35001 | Мытищи&lt;br /&gt;
  S17               | Томми Версетти   |  123456789 | Майами&lt;br /&gt;
  S18               | Безликий         |          1 | Йокогама&lt;br /&gt;
 (18 rows)&lt;br /&gt;
&lt;br /&gt;
==== Детали ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.p;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_detali |       nazvanie       |     cvet      | ves  |      gorod&lt;br /&gt;
 --------------+----------------------+---------------+------+-----------------&lt;br /&gt;
  P9           | подставка            | синий         |  400 | Нижний Новгород&lt;br /&gt;
  P10          | стойка               | синий         | 2000 | Нижний Новгород&lt;br /&gt;
  P11          | абажур               | синий         |  400 | Нижний Новгород&lt;br /&gt;
  P1           | гайка                | чёрный        |   20 | Лондон&lt;br /&gt;
  P3           | ось                  | белый         | 5000 | Эдинбург&lt;br /&gt;
  P4           | зубчатое колесо      | чёрный        |   50 | Эдинбург&lt;br /&gt;
  P6           | транзистор           | коричневый    |    2 | Токио&lt;br /&gt;
  P7           | печатная плата       | зелёный       |  200 | Токио&lt;br /&gt;
  P8           | диод                 | коричневый    |    1 | Токио&lt;br /&gt;
  P12          | универсальная деталь | универсальный |    1 | Париж&lt;br /&gt;
  P13          | уникальная деталь    | уникальный    |    1 | Бостон&lt;br /&gt;
  P14          | болт                 | серый         |   20 | Ижевск&lt;br /&gt;
  P15          | рама                 | красный       | 3000 | Манчестер&lt;br /&gt;
  P16          | колесо               | белый         | 1500 | Манчестер&lt;br /&gt;
  P5           | втулка               | серый         |  350 | Манчестер&lt;br /&gt;
  P17          | бумага               | белый         |    1 | Астрахань&lt;br /&gt;
  P18          | плитка               | белый         |  300 | Флоренция&lt;br /&gt;
  P19          | орнамент             | серый         |  800 | Флоренция&lt;br /&gt;
  P20          | уголок               | серый         |  100 | Флоренция&lt;br /&gt;
  P21          | гайка 01-01          | серебристый   |   20 | Клин&lt;br /&gt;
  P22          | усиленная рама       | красный       | 3200 | Череповец&lt;br /&gt;
  P23          | винт                 | розовый       |    5 | Ижевск&lt;br /&gt;
  P24          | труселя              | красный       |   20 | Челябинск&lt;br /&gt;
  P25          | штуцерная деталь     | коричневый    |  450 | Череповец&lt;br /&gt;
  P2           | шуруп                | чёрный        |    5 | Лондон&lt;br /&gt;
  P26          | лезвие               | бесцветный    |  120 | Йокогама&lt;br /&gt;
 (26 rows)&lt;br /&gt;
&lt;br /&gt;
==== Изделия ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.j;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_izdelia |       nazvanie        |      gorod&lt;br /&gt;
 ---------------+-----------------------+-----------------&lt;br /&gt;
  J1            | автомобиль            | Магнитогорск&lt;br /&gt;
  J2            | процессор             | Зеленоград&lt;br /&gt;
  J3            | торшер                | Нижний Новгород&lt;br /&gt;
  J4            | универсальное изделие | Париж&lt;br /&gt;
  J5            | уникальное изделие    | Бостон&lt;br /&gt;
  J6            | велосипед 01/23       | Манчестер&lt;br /&gt;
  J7            | изделие из болтов     | Челябинск&lt;br /&gt;
  J8            | шкаф                  | Ярославль&lt;br /&gt;
  J9            | рама 02-01            | Череповец&lt;br /&gt;
  J10           | книга                 | Астрахань&lt;br /&gt;
  J11           | панно 01-03           | Флоренция&lt;br /&gt;
  J12           | велосипед 03-04       | Клин&lt;br /&gt;
  J13           | рама 02-03            | Череповец&lt;br /&gt;
  J14           | штуцер 01-02          | Череповец&lt;br /&gt;
  J15           | велосипед 01-04       | Клин&lt;br /&gt;
  J16           | кружевное бельё       | Челябинск&lt;br /&gt;
  J17           | штуцер 01-03          | Череповец&lt;br /&gt;
  J18           | кинжал                | Йокогама&lt;br /&gt;
 (18 rows)&lt;br /&gt;
&lt;br /&gt;
==== Сборки ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.spj;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika | nomer_detali | nomer_izdelia | kolichestvo&lt;br /&gt;
 -------------------+--------------+---------------+-------------&lt;br /&gt;
  S1                | P6           | J2            |          20&lt;br /&gt;
  S1                | P7           | J2            |           5&lt;br /&gt;
  S2                | P1           | J1            |           4&lt;br /&gt;
  S6                | P4           | J1            |           2&lt;br /&gt;
  S6                | P5           | J1            |           6&lt;br /&gt;
  S3                | P9           | J3            |           1&lt;br /&gt;
  S4                | P10          | J3            |           1&lt;br /&gt;
  S5                | P11          | J3            |           1&lt;br /&gt;
  S2                | P4           | J1            |           8&lt;br /&gt;
  S6                | P3           | J1            |          50&lt;br /&gt;
  S7                | P8           | J2            |          25&lt;br /&gt;
  S1                | P12          | J4            |           1&lt;br /&gt;
  S2                | P12          | J4            |           1&lt;br /&gt;
  S3                | P12          | J4            |           1&lt;br /&gt;
  S4                | P12          | J4            |           1&lt;br /&gt;
  S5                | P12          | J4            |           1&lt;br /&gt;
  S7                | P12          | J4            |           1&lt;br /&gt;
  S7                | P2           | J1            |           1&lt;br /&gt;
  S6                | P2           | J1            |           9&lt;br /&gt;
  S6                | P12          | J4            |           7&lt;br /&gt;
  S1                | P13          | J5            |          14&lt;br /&gt;
  S6                | P14          | J1            |        9000&lt;br /&gt;
  S2                | P14          | J1            |           3&lt;br /&gt;
  S6                | P1           | J1            |          12&lt;br /&gt;
  S8                | P15          | J6            |           1&lt;br /&gt;
  S8                | P16          | J6            |           2&lt;br /&gt;
  S3                | P5           | J6            |          10&lt;br /&gt;
  S10               | P2           | J8            |           4&lt;br /&gt;
  S8                | P1           | J7            |          16&lt;br /&gt;
  S9                | P14          | J7            |           3&lt;br /&gt;
  S11               | P10          | J3            |           2&lt;br /&gt;
  S12               | P15          | J1            |           3&lt;br /&gt;
  S11               | P11          | J3            |           4&lt;br /&gt;
  S10               | P14          | J9            |           5&lt;br /&gt;
  S13               | P17          | J10           |        1001&lt;br /&gt;
  S14               | P17          | J10           |        1111&lt;br /&gt;
  S15               | P17          | J10           |        1010&lt;br /&gt;
  S5                | P18          | J11           |           9&lt;br /&gt;
  S5                | P19          | J11           |           1&lt;br /&gt;
  S5                | P20          | J11           |           4&lt;br /&gt;
  S9                | P14          | J8            |          25&lt;br /&gt;
  S12               | P21          | J12           |          15&lt;br /&gt;
  S11               | P22          | J13           |           9&lt;br /&gt;
  S11               | P1           | J14           |          26&lt;br /&gt;
  S12               | P1           | J14           |          13&lt;br /&gt;
  S12               | P2           | J14           |          54&lt;br /&gt;
  S12               | P23          | J4            |         101&lt;br /&gt;
  S12               | P16          | J15           |          40&lt;br /&gt;
  S7                | P21          | J12           |           3&lt;br /&gt;
  S8                | P21          | J12           |           4&lt;br /&gt;
  S9                | P21          | J12           |           5&lt;br /&gt;
  S1                | P24          | J16           |           1&lt;br /&gt;
  S1                | P15          | J6            |           3&lt;br /&gt;
  S4                | P25          | J17           |           1&lt;br /&gt;
  S17               | P16          | J1            |           4&lt;br /&gt;
  S18               | P26          | J18           |           1&lt;br /&gt;
 (56 rows)&lt;br /&gt;
&lt;br /&gt;
== Готовые запросы ==&lt;br /&gt;
&lt;br /&gt;
Если видите, что тот или иной запрос можно составить короче и рациональней - смело вносите правку.&lt;br /&gt;
&lt;br /&gt;
В трёх билетах в задании на запрос встречается формулировка &amp;quot;&#039;&#039;только и только&#039;&#039;&amp;quot;. Как оказалось, это означает следующее: если холодильники поставляет &#039;&#039;только и только&#039;&#039; Уася, то:&lt;br /&gt;
# кроме Уаси никто не поставляет холодильники;&lt;br /&gt;
# Уася не поставляет ничего, кроме холодильников.&lt;br /&gt;
&lt;br /&gt;
Существующие запросы, естественно, оказались неправильными и их пришлось переписать. &amp;lt;s&amp;gt;Великий и могучий русский языка, ну что за экономия на бумаге.&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Билет 1 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера поставщиков, которые поставляют, по крайней мере, все те детали, которые поставляет поставщик с номером &#039;S2&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nomer_postavshika&lt;br /&gt;
FROM spasoi_ekz.spj SPJX&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT nomer_detali&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJY&lt;br /&gt;
                  WHERE nomer_postavshika = &#039;S2&#039;&lt;br /&gt;
                    AND NOT EXISTS (&lt;br /&gt;
                                    SELECT *&lt;br /&gt;
                                    FROM spasoi_ekz.spj&lt;br /&gt;
                                    WHERE nomer_postavshika = SPJX.nomer_postavshika&lt;br /&gt;
                                      AND nomer_detali = SPJY.nomer_detali&lt;br /&gt;
                                   )&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika&lt;br /&gt;
 -------------------&lt;br /&gt;
  S6&lt;br /&gt;
  S2&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 2 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера деталей и общее их количество для всех номеров деталей, поставляемых более чем одним поставщиком.&lt;br /&gt;
&lt;br /&gt;
Текст запроса, каким его дал Григорьев на лекции, впоследствии исправив его:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali AS &amp;quot;Номер детали&amp;quot;,&lt;br /&gt;
       SUM(kolichestvo) AS &amp;quot;Сколько штук поставляется&amp;quot;,&lt;br /&gt;
       COUNT(DISTINCT nomer_postavshika) AS &amp;quot;Сколько у неё поставщиков&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_postavshika) &amp;gt; 1;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali AS &amp;quot;Номер детали&amp;quot;,&lt;br /&gt;
       kol AS &amp;quot;Сколько штук поставляется&amp;quot;&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT nomer_detali,&lt;br /&gt;
             SUM(kolichestvo) AS kol,&lt;br /&gt;
             COUNT(DISTINCT nomer_postavshika)&lt;br /&gt;
      FROM spasoi_ekz.spj&lt;br /&gt;
      GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_postavshika) &amp;gt; 1&lt;br /&gt;
     ) A;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер детали | Сколько штук поставляется | Сколько у неё поставщиков&lt;br /&gt;
 --------------+---------------------------+---------------------------&lt;br /&gt;
  P1           |                        71 |                         5&lt;br /&gt;
  P10          |                         3 |                         2&lt;br /&gt;
  P11          |                         5 |                         2&lt;br /&gt;
  P12          |                        13 |                         7&lt;br /&gt;
  P14          |                      9036 |                         4&lt;br /&gt;
  P15          |                         7 |                         3&lt;br /&gt;
  P16          |                        46 |                         3&lt;br /&gt;
  P17          |                      3122 |                         3&lt;br /&gt;
  P2           |                        68 |                         4&lt;br /&gt;
  P21          |                        27 |                         4&lt;br /&gt;
  P4           |                        10 |                         2&lt;br /&gt;
  P5           |                        16 |                         2&lt;br /&gt;
 (12 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 3 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера поставщиков, поставляющих детали с номером &#039;P1&#039; для какого-либо изделия в количестве (в поставке) большим, чем средний объём поставок деталей с номером &#039;P2&#039; для этого изделия.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT X.nomer_postavshika &lt;br /&gt;
FROM spasoi_ekz.spj X&lt;br /&gt;
WHERE X.nomer_detali = &#039;P1&#039;&lt;br /&gt;
  AND X.kolichestvo &amp;gt; (&lt;br /&gt;
                       SELECT AVG(kolichestvo)&lt;br /&gt;
                       FROM spasoi_ekz.spj&lt;br /&gt;
                       WHERE nomer_izdelia = X.nomer_izdelia&lt;br /&gt;
                         AND nomer_detali = &#039;P2&#039;&lt;br /&gt;
                      );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но длиннее и нерациональней&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nomer_postavshika&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT *&lt;br /&gt;
      FROM spasoi_ekz.spj&lt;br /&gt;
      WHERE nomer_izdelia IN(&lt;br /&gt;
                             SELECT nomer_izdelia&lt;br /&gt;
                             FROM spasoi_ekz.spj&lt;br /&gt;
                             WHERE nomer_detali = &#039;P1&#039;&lt;br /&gt;
                            )&lt;br /&gt;
        AND nomer_izdelia IN(&lt;br /&gt;
	                     SELECT nomer_izdelia&lt;br /&gt;
	                     FROM spasoi_ekz.spj&lt;br /&gt;
	                     WHERE nomer_detali = &#039;P2&#039;&lt;br /&gt;
	                    )&lt;br /&gt;
     ) A&lt;br /&gt;
WHERE nomer_detali = &#039;P1&#039; AND kolichestvo &amp;gt;&lt;br /&gt;
(&lt;br /&gt;
 SELECT AVG(kolichestvo)&lt;br /&gt;
 FROM (&lt;br /&gt;
       SELECT *&lt;br /&gt;
       FROM spasoi_ekz.spj&lt;br /&gt;
       WHERE nomer_izdelia IN(&lt;br /&gt;
                              SELECT nomer_izdelia&lt;br /&gt;
                              FROM spasoi_ekz.spj&lt;br /&gt;
                              WHERE nomer_detali = &#039;P1&#039;&lt;br /&gt;
                             )&lt;br /&gt;
         AND nomer_izdelia IN(&lt;br /&gt;
                              SELECT nomer_izdelia&lt;br /&gt;
                              FROM spasoi_ekz.spj&lt;br /&gt;
                              WHERE nomer_detali = &#039;P2&#039;&lt;br /&gt;
                             )&lt;br /&gt;
      ) B&lt;br /&gt;
 WHERE nomer_detali = &#039;P2&#039;&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika&lt;br /&gt;
 -------------------&lt;br /&gt;
  S6&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 4 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера изделий, для которых детали поставляет только поставщик с номером ‘S1’.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_izdelia&lt;br /&gt;
FROM spasoi_ekz.spj X&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT *&lt;br /&gt;
                  FROM spasoi_ekz.spj&lt;br /&gt;
                  WHERE nomer_postavshika != &#039;S1&#039;&lt;br /&gt;
                    AND X.nomer_izdelia = nomer_izdelia&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но без EXISTS&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nomer_izdelia&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
WHERE nomer_izdelia IN(&lt;br /&gt;
                       SELECT nomer_izdelia&lt;br /&gt;
                       FROM spasoi_ekz.spj&lt;br /&gt;
                       WHERE nomer_postavshika = &#039;S1&#039;&lt;br /&gt;
                      )&lt;br /&gt;
  AND nomer_izdelia NOT IN(&lt;br /&gt;
                           SELECT nomer_izdelia&lt;br /&gt;
                           FROM spasoi_ekz.spj&lt;br /&gt;
                           WHERE nomer_postavshika != &#039;S1&#039;&lt;br /&gt;
                          );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_izdelia&lt;br /&gt;
 ---------------&lt;br /&gt;
  J5&lt;br /&gt;
  J16&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 5 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих детали с названием &amp;quot;Болт&amp;quot; в количестве (в поставке) большим, чем средний объём всех поставок деталей с номером &#039;P1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                           ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                        JOIN spasoi_ekz.p P&lt;br /&gt;
                           ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                              AND nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
WHERE kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT AVG(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                                               ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                                  AND SPJ.nomer_detali = &#039;P1&#039;&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но без JOIN&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s&lt;br /&gt;
WHERE nomer_postavshika IN (&lt;br /&gt;
                            SELECT nomer_postavshika&lt;br /&gt;
                            FROM spasoi_ekz.spj&lt;br /&gt;
                            WHERE nomer_detali = (&lt;br /&gt;
                                                  SELECT nomer_detali&lt;br /&gt;
                                                  FROM spasoi_ekz.p&lt;br /&gt;
                                                  WHERE LOWER(nazvanie) = LOWER(&#039;Болт&#039;)&lt;br /&gt;
                                                 )&lt;br /&gt;
                              AND kolichestvo &amp;gt; (&lt;br /&gt;
                                                 SELECT AVG(kolichestvo)&lt;br /&gt;
                                                 FROM spasoi_ekz.spj&lt;br /&gt;
                                                 WHERE nomer_detali = &#039;P1&#039;&lt;br /&gt;
                                                )&lt;br /&gt;
                           );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  imya&lt;br /&gt;
 ------&lt;br /&gt;
  Оша&lt;br /&gt;
  Иванов&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 6 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия деталей, поставляемых поставщиком, проживающим в том же городе, где изготавливаются эти детали, для изделия с названием ‘Велосипед 01/23’.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT P.nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                        JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                        JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
WHERE S.gorod = P.gorod&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Велосипед 01/23&#039;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос без JOIN&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nazvanie&lt;br /&gt;
FROM spasoi_ekz.S S, spasoi_ekz.p P, spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE S.gorod = P.gorod&lt;br /&gt;
  AND P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
  AND S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
  AND nomer_izdelia = (&lt;br /&gt;
                       SELECT nomer_izdelia&lt;br /&gt;
                       FROM spasoi_ekz.j&lt;br /&gt;
                       WHERE nazvanie = LOWER(&#039;Велосипед 01/23&#039;)&lt;br /&gt;
                      );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nazvanie&lt;br /&gt;
 ----------&lt;br /&gt;
  рама&lt;br /&gt;
  колесо&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 7 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия изделий, куда входят детали с названием &#039;Болт&#039;, поставляемых поставщиками с именем &#039;Иванов&#039;, в количестве (в поставке) большим, чем средний объём поставок для этого изделия.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT J.nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                        JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                        JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
WHERE imya LIKE &#039;%Иванов%&#039;&lt;br /&gt;
  AND P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
  AND kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT AVG(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj X&lt;br /&gt;
                     WHERE SPJ.nomer_izdelia = X.nomer_izdelia&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё один вариант запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie&lt;br /&gt;
FROM spasoi_ekz.j&lt;br /&gt;
WHERE nomer_izdelia IN (&lt;br /&gt;
                        SELECT nomer_izdelia&lt;br /&gt;
                        FROM (spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                                                   ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                                                      AND imya LIKE &#039;%Иванов%&#039;&lt;br /&gt;
                                                 JOIN spasoi_ekz.p P&lt;br /&gt;
                                                   ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                                      AND nazvanie = LOWER(&#039;Болт&#039;)) A&lt;br /&gt;
                        WHERE kolichestvo &amp;gt; (&lt;br /&gt;
                                             SELECT AVG(kolichestvo)&lt;br /&gt;
                                             FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                                                       ON SPJ.nomer_izdelia = A.nomer_izdelia&lt;br /&gt;
                                            )&lt;br /&gt;
                       );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;И ещё вариант этого же запроса, но длиннее и нерациональней&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT J.nazvanie, kolichestvo&lt;br /&gt;
      FROM spasoi_ekz.s S, spasoi_ekz.p P, spasoi_ekz.j J, spasoi_ekz.spj SPJ&lt;br /&gt;
      WHERE J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
        AND P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
        AND P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
        AND S.imya LIKE &#039;%Иванов%&#039;&lt;br /&gt;
        AND S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
     ) A&lt;br /&gt;
WHERE kolichestvo &amp;gt;&lt;br /&gt;
(&lt;br /&gt;
 SELECT AVG(kolichestvo)&lt;br /&gt;
 FROM spasoi_ekz.spj&lt;br /&gt;
 WHERE nomer_izdelia IN(&lt;br /&gt;
                        SELECT J.nomer_izdelia&lt;br /&gt;
                        FROM spasoi_ekz.s S, spasoi_ekz.p P, spasoi_ekz.j J, spasoi_ekz.spj SPJ&lt;br /&gt;
                        WHERE J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
                          AND P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                          AND P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
                          AND S.imya LIKE &#039;%Иванов%&#039;&lt;br /&gt;
                          AND S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
                       )&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
      nazvanie&lt;br /&gt;
 -------------------&lt;br /&gt;
  шкаф&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 8 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера изделий и общее количество деталей для них, поставляемых поставщиками с именем &#039;Петров&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_izdelia AS &amp;quot;Номер изделия&amp;quot;, SUM(kolichestvo) AS &amp;quot;Количество деталей&amp;quot; &lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                             -- так как &amp;quot;поставщикАМИ&amp;quot; и возможны&lt;br /&gt;
                             -- Иван Петров и Петров Иван, то LIKE %Петров%&lt;br /&gt;
                             AND imya LIKE &#039;%Петров%&#039;&lt;br /&gt;
GROUP BY nomer_izdelia;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер изделия | Количество деталей&lt;br /&gt;
 ---------------+--------------------&lt;br /&gt;
  J4            |                101&lt;br /&gt;
  J3            |                  6&lt;br /&gt;
  J13           |                  9&lt;br /&gt;
  J15           |                 40&lt;br /&gt;
  J1            |                  3&lt;br /&gt;
  J12           |                 15&lt;br /&gt;
  J14           |                 93&lt;br /&gt;
 (7 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 9 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера деталей и общее их количество для всех номеров деталей, которые входят только в одно изделие.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali, SUM(kolichestvo)&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_izdelia) = 1;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali, kol FROM (&lt;br /&gt;
       SELECT nomer_detali, SUM(kolichestvo) AS kol, COUNT(DISTINCT nomer_izdelia) = 1&lt;br /&gt;
       FROM spasoi_ekz.spj&lt;br /&gt;
       GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_izdelia) = 1&lt;br /&gt;
    ) A;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_detali | sum&lt;br /&gt;
 --------------+------&lt;br /&gt;
  P10          |    3&lt;br /&gt;
  P11          |    5&lt;br /&gt;
  P12          |   13&lt;br /&gt;
  P13          |   14&lt;br /&gt;
  P17          | 3122&lt;br /&gt;
  P18          |    9&lt;br /&gt;
  P19          |    1&lt;br /&gt;
  P20          |    4&lt;br /&gt;
  P21          |   27&lt;br /&gt;
  P22          |    9&lt;br /&gt;
  P23          |  101&lt;br /&gt;
  P24          |    1&lt;br /&gt;
  P25          |    1&lt;br /&gt;
  P26          |    1&lt;br /&gt;
  P3           |   50&lt;br /&gt;
  P4           |   10&lt;br /&gt;
  P6           |   20&lt;br /&gt;
  P7           |    5&lt;br /&gt;
  P8           |   25&lt;br /&gt;
  P9           |    1&lt;br /&gt;
 (20 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 10 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих детали с названием &#039;Болт&#039; для изделия с названием &#039;Рама 02-01&#039; в количестве (в поставке) большим, чем минимальное значение поставки детали с номером &#039;P1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
			   ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
			      AND J.nazvanie = LOWER(&#039;Рама 02-01&#039;)&lt;br /&gt;
			 JOIN spasoi_ekz.p P&lt;br /&gt;
			   ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
			      AND P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
			 JOIN spasoi_ekz.s S&lt;br /&gt;
			   ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE kolichestvo &amp;gt; (&lt;br /&gt;
		     SELECT MIN(kolichestvo)&lt;br /&gt;
		     FROM spasoi_ekz.spj &lt;br /&gt;
		     WHERE nomer_detali = &#039;P1&#039;&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Русе Болтон&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 11 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия городов и суммарное состояние проживающих в каждом городе поставщиков, у которых минимальный объём поставки деталей больше 1000.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT gorod, SUM(sostoyanie)&lt;br /&gt;
FROM spasoi_ekz.s S&lt;br /&gt;
WHERE (	&lt;br /&gt;
       SELECT MIN(kolichestvo)	&lt;br /&gt;
       FROM spasoi_ekz.spj X	&lt;br /&gt;
       WHERE X.nomer_postavshika = S.nomer_postavshika		&lt;br /&gt;
      ) &amp;gt; 1000&lt;br /&gt;
GROUP BY gorod;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Вариант подлиннее для тех, кто не ищет лёгких путей&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT gorod, SUM(sostoyanie)&lt;br /&gt;
FROM spasoi_ekz.s&lt;br /&gt;
WHERE nomer_postavshika IN (&lt;br /&gt;
                            SELECT nomer_postavshika&lt;br /&gt;
                            FROM spasoi_ekz.spj&lt;br /&gt;
                            GROUP BY nomer_postavshika HAVING MIN(kolichestvo) &amp;gt; 1000&lt;br /&gt;
                           )&lt;br /&gt;
GROUP BY gorod;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;!-- а этот запрос выполняет не совсем то и не правильно&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT gorod, sost&lt;br /&gt;
FROM (&lt;br /&gt;
SELECT gorod, SUM(sostoyanie) AS sost, SUM(SPJ.kolichestvo)&lt;br /&gt;
FROM spasoi_ekz.spj, spasoi_ekz.s&lt;br /&gt;
WHERE S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
GROUP BY S.gorod HAVING SUM(SPJ.kolichestvo) &amp;gt; 1000&lt;br /&gt;
) A;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; --&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
    gorod   |   sum&lt;br /&gt;
 -----------+---------&lt;br /&gt;
  Прага     | 2111110&lt;br /&gt;
  Стокгольм |  888888&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 12 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера деталей, поставляемых для какого-либо изделия поставщиком, проживающим в том же городе, где изготавливается это изделие.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali&lt;br /&gt;
FROM spasoi_ekz.spj SPJ, spasoi_ekz.s S, spasoi_ekz.j J&lt;br /&gt;
WHERE SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
  AND S.gorod = J.gorod&lt;br /&gt;
  AND J.nomer_izdelia = SPJ.nomer_izdelia;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_detali&lt;br /&gt;
 --------------&lt;br /&gt;
  P15&lt;br /&gt;
  P16&lt;br /&gt;
  P26&lt;br /&gt;
 (3 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 13 ===&lt;br /&gt;
&lt;br /&gt;
Написать &amp;lt;u&amp;gt;один&amp;lt;/u&amp;gt; запрос SELECT: выдать количества строк в таблице S (Поставщик) 1) с пустыми значениями и 2) непустыми значениями в столбце Состояние.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT COUNT(nomer_postavshika) - COUNT(sostoyanie) AS &amp;quot;С пустым состоянием&amp;quot;, &lt;br /&gt;
       COUNT(sostoyanie) AS &amp;quot;С не пустым состоянием&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.s;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но длиннее и нерациональней&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SELECT COUNT(Snull.*) AS &amp;quot;С пустым состоянием&amp;quot;, COUNT(Snotnull.sostoyanie) AS &amp;quot;С не пустым состоянием&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.s Snull RIGHT OUTER JOIN spasoi_ekz.s Snotnull&lt;br /&gt;
                                      ON Snull.nomer_postavshika = Snotnull.nomer_postavshika&lt;br /&gt;
                                         AND Snull.sostoyanie IS NULL;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  С пустым состоянием | С не пустым состоянием&lt;br /&gt;
 ---------------------+-----------------------&lt;br /&gt;
                    2 |                    16&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 14 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют детали только и только для изделия с номером &#039;J1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj A JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON A.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE nomer_izdelia = &#039;J1&#039;&lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT nomer_postavshika&lt;br /&gt;
                  FROM spasoi_ekz.spj&lt;br /&gt;
                  WHERE nomer_izdelia != &#039;J1&#039;&lt;br /&gt;
                    AND nomer_postavshika = A.nomer_postavshika&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       imya&lt;br /&gt;
 ----------------&lt;br /&gt;
  Томми Версетти&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 15 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать наименования изделий, для которых детали поставляют только те поставщики, у которых состояние больше 1000000 у.е.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
C использованием NOT EXISTS:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT j.nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
	JOIN spasoi_ekz.j ON spj.nomer_izdelia = j.nomer_izdelia&lt;br /&gt;
WHERE NOT EXISTS  (&lt;br /&gt;
		SELECT *&lt;br /&gt;
		FROM spasoi_ekz.spj X&lt;br /&gt;
			JOIN spasoi_ekz.s ON X.nomer_postavshika = s.nomer_postavshika&lt;br /&gt;
			JOIN spasoi_ekz.j ON X.nomer_izdelia = j.nomer_izdelia&lt;br /&gt;
		WHERE s.sostoyanie &amp;lt;= 1000000 AND&lt;br /&gt;
		X.nomer_izdelia = spj.nomer_izdelia&lt;br /&gt;
               );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                        JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
WHERE sostoyanie &amp;gt; 1000000&lt;br /&gt;
  AND SPJ.nomer_izdelia NOT IN (&lt;br /&gt;
                                SELECT nomer_izdelia&lt;br /&gt;
                                FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                                                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                                WHERE sostoyanie &amp;lt; 1000000&lt;br /&gt;
                               );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       nazvanie&lt;br /&gt;
 --------------------&lt;br /&gt;
  кружевное бельё&lt;br /&gt;
  уникальное изделие&lt;br /&gt;
  процессор&lt;br /&gt;
 (3 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 16 ===&lt;br /&gt;
Написать запрос SELECT: выдать цвета и для каждого цвета общее количество деталей, входящих в изделие с названием &#039;Панно 01-03&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT cvet AS &amp;quot;Цвет&amp;quot;, SUM(kolichestvo) AS &amp;quot;Деталей&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
			     AND J.nazvanie = LOWER(&#039;Панно 01-03&#039;)&lt;br /&gt;
			JOIN spasoi_ekz.P P&lt;br /&gt;
			  ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
GROUP BY cvet;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Цвет  | Деталей&lt;br /&gt;
 -------+---------&lt;br /&gt;
  белый |       9&lt;br /&gt;
  серый |       5&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 17 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера поставщиков и количество сделанных ими поставок при условии, что среднее число деталей во всех этих поставках больше 1000.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nom AS &amp;quot;Номер поставщика&amp;quot;, cnt AS &amp;quot;Количество поставок&amp;quot;&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT S.nomer_postavshika AS nom,&lt;br /&gt;
             COUNT(SPJ.nomer_postavshika) AS cnt,&lt;br /&gt;
             AVG(SPJ.kolichestvo) AS kol&lt;br /&gt;
      FROM spasoi_ekz.s S, spasoi_ekz.spj SPJ&lt;br /&gt;
      WHERE S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
      GROUP BY S.nomer_postavshika&lt;br /&gt;
     ) A&lt;br /&gt;
WHERE kol &amp;gt; 1000;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос немного попроще&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_postavshika AS &amp;quot;Номер поставщика&amp;quot;, COUNT(*) AS &amp;quot;Количество поставок&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
WHERE nomer_postavshika IN (&lt;br /&gt;
                            SELECT nomer_postavshika&lt;br /&gt;
                            FROM spasoi_ekz.spj&lt;br /&gt;
                            GROUP BY nomer_postavshika HAVING AVG(kolichestvo) &amp;gt; 1000&lt;br /&gt;
                           )&lt;br /&gt;
GROUP BY nomer_postavshika;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер поставщика | Количество поставок&lt;br /&gt;
 ------------------+---------------------&lt;br /&gt;
  S13              |                   1&lt;br /&gt;
  S6               |                   7&lt;br /&gt;
  S14              |                   1&lt;br /&gt;
  S15              |                   1&lt;br /&gt;
 (4 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 18 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, имеющих состояние больше 1000 и поставляющих деталь с названием &#039;Гайка 01-01&#039; для изделия с названием &#039;Велосипед 03-04&#039; в количестве (в поставке) большим, чем средний объём поставки, выполненной поставщиками с именем &#039;Иванов&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:2nd dufficulty.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;5px&amp;quot;&amp;gt;&#039;&#039;&#039;Второй по сложности запрос экзамена!&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;4px&amp;quot;&amp;gt;&#039;&#039;&#039;Вот уж не свезло, так не свезло&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                    JOIN spasoi_ekz.j J&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
WHERE sostoyanie &amp;gt; 1000&lt;br /&gt;
  AND P.nazvanie = LOWER(&#039;Гайка 01-01&#039;)&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Велосипед 03-04&#039;)&lt;br /&gt;
  AND kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT AVG(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                       ON SPJ.nomer_postavshika = S.nomer_postavshika &lt;br /&gt;
                     WHERE S.imya = &#039;Иванов&#039;&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Пётр&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 19 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия красных деталей, которые входят только в изделие с названием &#039;Рама 02-03&#039; в количестве, меньшем 10 единиц в поставке.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT X.nazvanie&lt;br /&gt;
FROM spasoi_ekz.p X JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_detali = X.nomer_detali&lt;br /&gt;
                    JOIN spasoi_ekz.j J&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
WHERE X.cvet = &#039;красный&#039;&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Рама 02-03&#039;)&lt;br /&gt;
  AND kolichestvo &amp;lt; 10&lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT J.nomer_izdelia&lt;br /&gt;
                  FROM spasoi_ekz.j J JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                                        ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                  WHERE J.nazvanie != LOWER(&#039;Рама 02-03&#039;)&lt;br /&gt;
                    AND X.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант этого же запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT P.nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND cvet = &#039;красный&#039;&lt;br /&gt;
                        JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                              AND J.nazvanie = LOWER(&#039;Рама 02-03&#039;)&lt;br /&gt;
WHERE kolichestvo &amp;lt; 10&lt;br /&gt;
  AND SPJ.nomer_detali NOT IN (&lt;br /&gt;
                               SELECT nomer_detali&lt;br /&gt;
                               FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                                         ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                                                            AND J.nazvanie != LOWER(&#039;Рама 02-03&#039;)&lt;br /&gt;
                              );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     nazvanie&lt;br /&gt;
 ----------------&lt;br /&gt;
  усиленная рама&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 20 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих только белые детали.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
WHERE cvet = &#039;белый&#039;&lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT nomer_postavshika&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                                            ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                  WHERE nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    AND P.cvet != &#039;белый&#039;&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё один вариант этого же запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND cvet = &#039;белый&#039;&lt;br /&gt;
                        JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE S.nomer_postavshika NOT IN (&lt;br /&gt;
                                  SELECT nomer_postavshika&lt;br /&gt;
                                  FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                                                            ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                                               AND cvet != &#039;белый&#039;&lt;br /&gt;
                                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;И ещё один вариант этого же запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s&lt;br /&gt;
WHERE nomer_postavshika NOT IN  (&lt;br /&gt;
                                 SELECT spj.nomer_postavshika&lt;br /&gt;
                                 FROM spasoi_ekz.spj SPJ, spasoi_ekz.p P&lt;br /&gt;
                                 WHERE SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                   AND p.cvet != &#039;белый&#039;&lt;br /&gt;
                                )&lt;br /&gt;
  AND nomer_postavshika  IN (&lt;br /&gt;
                             SELECT spj.nomer_postavshika&lt;br /&gt;
                             FROM spasoi_ekz.spj SPJ, spasoi_ekz.p P&lt;br /&gt;
                             WHERE SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                               AND p.cvet = &#039;белый&#039;&lt;br /&gt;
                            );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       imya&lt;br /&gt;
 -----------------&lt;br /&gt;
  Рендилл Тарли&lt;br /&gt;
  Сэмвелл Тарли&lt;br /&gt;
  Мелисса Флорент&lt;br /&gt;
  Томми Версетти&lt;br /&gt;
 (4 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 21 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия изделий, для которых детали поставляет только и только поставщик с номером &#039;S1&#039;.&lt;br /&gt;
&lt;br /&gt;
Чтобы продемонстрировать выполнение запроса наглядно, возьмём поставщика не &#039;S1&#039;, а &#039;S18&#039;, который был создан специально для этого запроса. Если оставить &#039;S1&#039;, то наглядности не получится, так как по нашей схеме БД этот поставщик не попадает под условие &amp;quot;&#039;&#039;только и только&#039;&#039;&amp;quot;, и запрос вернёт пустой результат.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie&lt;br /&gt;
FROM spasoi_ekz.j J, spasoi_ekz.SPJ SPJ&lt;br /&gt;
WHERE J.nomer_izdelia = SPJ.nomer_izdelia &lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT *&lt;br /&gt;
                  FROM spasoi_ekz.spj&lt;br /&gt;
                  WHERE nomer_postavshika != &#039;S18&#039; AND nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                 )&lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT *&lt;br /&gt;
                  FROM spasoi_ekz.spj&lt;br /&gt;
                  WHERE nomer_postavshika = &#039;S18&#039; AND nomer_izdelia != J.nomer_izdelia&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       nazvanie&lt;br /&gt;
 --------------------&lt;br /&gt;
  кинжал&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 22 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют только детали с номером &#039;P1&#039; для изделия с именем &#039;Штуцер 01-02&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- неверный запрос - номер изделия, а не название&lt;br /&gt;
SELECT imya FROM S X&lt;br /&gt;
JOIN SPJ Y ON X.nomer_postavshika=Y.nomer_postavshika&lt;br /&gt;
WHERE X.nomer_postavshika NOT IN (&lt;br /&gt;
                  SELECT DISTINCT nomer_postavshika FROM SPJ Z&lt;br /&gt;
                  WHERE Z.nomer_izdelia != &#039;Штуцер 01-02&#039;&lt;br /&gt;
                  AND Z.nomer_detali!=&#039;P1&#039;);--&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                             AND J.nazvanie = LOWER(&#039;штуцер 01-02&#039;)&lt;br /&gt;
                        JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND SPJ.nomer_detali = &#039;P1&#039;&lt;br /&gt;
                        JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE SPJ.nomer_postavshika NOT IN (&lt;br /&gt;
                                    SELECT nomer_postavshika&lt;br /&gt;
                                    FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                                              ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                                                                 AND J.nazvanie = LOWER(&#039;штуцер 01-02&#039;)&lt;br /&gt;
                                                            JOIN spasoi_ekz.p P&lt;br /&gt;
                                                              ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                                                 AND SPJ.nomer_detali != &#039;P1&#039;&lt;br /&gt;
                              );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Иван&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 23 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют деталь с названием &#039;Винт&#039; в количестве большим 100 единиц в одной поставке и имеют состояние больше среднего по их родному городу.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT S.imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
WHERE P.nazvanie = LOWER(&#039;Винт&#039;)&lt;br /&gt;
  AND SPJ.kolichestvo &amp;gt; 100&lt;br /&gt;
  AND S.sostoyanie &amp;gt; (&lt;br /&gt;
                      SELECT AVG(SS.sostoyanie)&lt;br /&gt;
                      FROM spasoi_ekz.s SS&lt;br /&gt;
                      WHERE SS.gorod = S.gorod&lt;br /&gt;
                     );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Пётр&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 24 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать наименования деталей и общее их количество для всех наименований деталей, изготавливаемых в одном городе.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- С этим запросом возникла неожиданная проблема - задание то ли неполное, то ли неправильное, потому что нельзя однозначно сказать, что по нему требуется сделать.&lt;br /&gt;
&lt;br /&gt;
Так что тут несколько вариантов запросов (кто как понял).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Первый вариант запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie, kol&lt;br /&gt;
FROM spasoi_ekz.p A, (&lt;br /&gt;
                      SELECT X.gorod, SUM(kolichestvo) as kol&lt;br /&gt;
                      FROM spasoi_ekz.p X, spasoi_ekz.spj Y&lt;br /&gt;
                      WHERE Y.nomer_detali = X.nomer_detali&lt;br /&gt;
                      GROUP BY X.gorod&lt;br /&gt;
                     ) B&lt;br /&gt;
WHERE A.gorod = B.gorod;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
        nazvanie       | kol&lt;br /&gt;
 ----------------------+------&lt;br /&gt;
  подставка            |    9&lt;br /&gt;
  стойка               |    9&lt;br /&gt;
  абажур               |    9&lt;br /&gt;
  гайка                |  139&lt;br /&gt;
  ось                  |   60&lt;br /&gt;
  зубчатое колесо      |   60&lt;br /&gt;
  транзистор           |   50&lt;br /&gt;
  печатная плата       |   50&lt;br /&gt;
  диод                 |   50&lt;br /&gt;
  универсальная деталь |   13&lt;br /&gt;
  уникальная деталь    |   14&lt;br /&gt;
  болт                 | 9137&lt;br /&gt;
  рама                 |   69&lt;br /&gt;
  колесо               |   69&lt;br /&gt;
  втулка               |   69&lt;br /&gt;
  бумага               | 3122&lt;br /&gt;
  плитка               |   14&lt;br /&gt;
  орнамент             |   14&lt;br /&gt;
  уголок               |   14&lt;br /&gt;
  гайка 01-01          |   27&lt;br /&gt;
  усиленная рама       |   10&lt;br /&gt;
  винт                 | 9137&lt;br /&gt;
  труселя              |    1&lt;br /&gt;
  штуцерная деталь     |   10&lt;br /&gt;
  шуруп                |  139&lt;br /&gt;
 (25 rows)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
и --&amp;gt;&lt;br /&gt;
В уточнение задания Григорьев сказал следующее: &amp;quot;&#039;&#039;Следует учесть, что в качестве наименования города может выступать переменная, в которую в некоторой программе должно быть занесено конкретное значение перед выполнением запроса&#039;&#039;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
То есть, вообще говоря, задание на запрос неполное, и его можно трактовать так: выдать наименования деталей и общее их количество для всех наименований деталей, изготавливаемых в городе &amp;lt;code&amp;gt;%НАЗВАНИЕГОРОДА%&amp;lt;/code&amp;gt;. Вот эта переменная задаётся где-то в программе, а в БД идёт запрос с уже подставленным конкретным названием. &lt;br /&gt;
&lt;br /&gt;
Этот вариант запроса составлен, например, для Лондона. &lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie, SUM(kolichestvo)&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
WHERE gorod = &#039;Лондон&#039;&lt;br /&gt;
GROUP BY nazvanie;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nazvanie | sum&lt;br /&gt;
 ----------+-----&lt;br /&gt;
  гайка    |  71&lt;br /&gt;
  шуруп    |  68&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 25 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих хотя бы одну белую деталь для изделия с названием &#039;Велосипед 01-04&#039; с объёмом поставки большим, чем средний объём поставки этого поставщика.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                    JOIN spasoi_ekz.j J&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
WHERE cvet = &#039;белый&#039;&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Велосипед 01-04&#039;)&lt;br /&gt;
  AND kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT AVG(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj SPJ&lt;br /&gt;
                     WHERE SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Пётр&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 26 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера красных деталей и количество поставок этих деталей.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT P.nomer_detali AS &amp;quot;Номер детали&amp;quot;, COUNT(kolichestvo) AS &amp;quot;Количество поставок с ней&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.p P, spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
  AND cvet = &#039;красный&#039;&lt;br /&gt;
GROUP BY P.nomer_detali;   &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос через JOIN&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT SPJ.nomer_detali AS &amp;quot;Номер детали&amp;quot;, COUNT(kolichestvo) AS &amp;quot;Количество поставок с ней&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND cvet = &#039;красный&#039;&lt;br /&gt;
GROUP BY SPJ.nomer_detali;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер детали | Количество поставок с ней&lt;br /&gt;
 --------------+---------------------------&lt;br /&gt;
  P15          |                         3&lt;br /&gt;
  P22          |                         1&lt;br /&gt;
  P24          |                         1&lt;br /&gt;
 (3 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 27 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать наименования городов и среднее состояние поставщиков для каждого города, поставляющих детали с названием &#039;Гайка 01-01&#039; для изделия с названием &#039;Велосипед 03-04&#039; в количестве (в поставке) большим, чем минимальный объём поставки, выполненной поставщиком с номером &#039;S1&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:1st dufficulty.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;7px&amp;quot;&amp;gt;&#039;&#039;&#039;Сложнейший запрос экзамена!&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;5px&amp;quot;&amp;gt;&#039;&#039;&#039;Сохрани Джа, вытащить такое&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT S.gorod AS &amp;quot;Город&amp;quot;, AVG(S.sostoyanie) AS &amp;quot;Среднее состояние&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                    JOIN spasoi_ekz.j J&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
WHERE P.nazvanie = LOWER(&#039;Гайка 01-01&#039;)&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Велосипед 03-04&#039;)&lt;br /&gt;
  AND kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT MIN(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj&lt;br /&gt;
                     WHERE nomer_postavshika = &#039;S1&#039;&lt;br /&gt;
                    )&lt;br /&gt;
GROUP BY S.gorod;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
    Город   |   Среднее состояние&lt;br /&gt;
 -----------+-----------------------&lt;br /&gt;
  Мытищи    |    35000.500000000000&lt;br /&gt;
  Йокогама  |  1500000.000000000000&lt;br /&gt;
  Манчестер | 2571.0000000000000000&lt;br /&gt;
 (3 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 28 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия изделий, куда входит хотя бы одна красная деталь весом больше 10 граммов, поставляемая только поставщиком с номером &#039;S1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT J.nazvanie&lt;br /&gt;
FROM spasoi_ekz.j J JOIN spasoi_ekz.spj SPJ1&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ1.nomer_izdelia&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ1.nomer_detali&lt;br /&gt;
WHERE P.ves &amp;gt; 10&lt;br /&gt;
 AND P.cvet = &#039;красный&#039;&lt;br /&gt;
 AND NOT EXISTS (&lt;br /&gt;
                 SELECT SPJ2.nomer_postavshika&lt;br /&gt;
                 FROM spasoi_ekz.spj SPJ2         &lt;br /&gt;
                 WHERE SPJ2.nomer_detali = P.nomer_detali&lt;br /&gt;
	 	   AND SPJ2.nomer_postavshika != &#039;S1&#039;&lt;br /&gt;
                );                     &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     nazvanie&lt;br /&gt;
 -----------------&lt;br /&gt;
  кружевное бельё&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 29 ===&lt;br /&gt;
Написать запрос SELECT: выдать названия деталей, которые входят только и только в состав изделия с названием &#039;Штуцер 01-03&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie&lt;br /&gt;
FROM spasoi_ekz.p P, spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE P.nomer_detali = SPJ.nomer_detali &lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT SPJ.nomer_izdelia&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                            ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
                  WHERE (&lt;br /&gt;
                         J.nazvanie != LOWER(&#039;Штуцер 01-03&#039;)&lt;br /&gt;
                         AND&lt;br /&gt;
                         SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                        )&lt;br /&gt;
                     OR (&lt;br /&gt;
                         J.nazvanie = LOWER(&#039;Штуцер 01-03&#039;)&lt;br /&gt;
                         AND&lt;br /&gt;
                         SPJ.nomer_detali != P.nomer_detali&lt;br /&gt;
                        )&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
      nazvanie&lt;br /&gt;
 ------------------&lt;br /&gt;
  штуцерная деталь&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 30 ===&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют, по крайней мере, все те детали, которые поставляет поставщик с номером &#039;S2&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT imya&lt;br /&gt;
FROM spasoi_ekz.s S&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT nomer_detali&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJY&lt;br /&gt;
                  WHERE nomer_postavshika = &#039;S2&#039;&lt;br /&gt;
                    AND NOT EXISTS (&lt;br /&gt;
                                    SELECT *&lt;br /&gt;
                                    FROM spasoi_ekz.spj&lt;br /&gt;
                                    WHERE nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                                      AND nomer_detali = SPJY.nomer_detali&lt;br /&gt;
                                   )&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  imya&lt;br /&gt;
 ------------&lt;br /&gt;
  Оша&lt;br /&gt;
  Бран Старк&lt;br /&gt;
 (2 rows)&lt;br /&gt;
[[Категория:Структурное проектирование АСОИ (10 семестр)]]&lt;/div&gt;</summary>
		<author><name>81.9.52.28</name></author>
	</entry>
	<entry>
		<id>https://iu5bmstu.ru/index.php?title=SQL-%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D1%8B_%D0%BA_%D1%8D%D0%BA%D0%B7%D0%B0%D0%BC%D0%B5%D0%BD%D1%83_%D0%BF%D0%BE_%D0%A1%D0%9F%D0%90%D0%A1%D0%9E%D0%98_(10_%D1%81%D0%B5%D0%BC%D0%B5%D1%81%D1%82%D1%80)&amp;diff=3834</id>
		<title>SQL-запросы к экзамену по СПАСОИ (10 семестр)</title>
		<link rel="alternate" type="text/html" href="https://iu5bmstu.ru/index.php?title=SQL-%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D1%8B_%D0%BA_%D1%8D%D0%BA%D0%B7%D0%B0%D0%BC%D0%B5%D0%BD%D1%83_%D0%BF%D0%BE_%D0%A1%D0%9F%D0%90%D0%A1%D0%9E%D0%98_(10_%D1%81%D0%B5%D0%BC%D0%B5%D1%81%D1%82%D1%80)&amp;diff=3834"/>
		<updated>2013-06-14T21:19:01Z</updated>

		<summary type="html">&lt;p&gt;81.9.52.28: /* Билет 11 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right; clear:both; margin-right:1.0em;&amp;quot;&amp;gt;__TOC__&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Билет экзамена по [[:Категория:Структурное проектирование АСОИ (10 семестр) | СПАСОИ]] состоит из двух частей:&lt;br /&gt;
# теория;&lt;br /&gt;
# SQL-запрос.&lt;br /&gt;
&lt;br /&gt;
На этой странице собраны все сформированные запросы по билетам.&lt;br /&gt;
&lt;br /&gt;
Странно, что ни в одном билете нет запроса с сортировкой результатов. Возможно, они буду в дополнительных заданиях.&lt;br /&gt;
&lt;br /&gt;
== Схема БД ==&lt;br /&gt;
&lt;br /&gt;
Схема БД используется всё [[СПАСОИ_(10)_-_Лекция_№8_-_SQL#Некоторые возможности языка SQL | та же]], что была в прошлом семестре и на лекциях.&lt;br /&gt;
&lt;br /&gt;
Для написания запросов и проверки их выполнения создана БД в СУБД [http://www.postgresql.org/ PostgreSQL].&lt;br /&gt;
&lt;br /&gt;
Скрипт создания можно загрузить [http://yadi.sk/d/ArwqOGAy5pPfi отсюда].&lt;br /&gt;
&lt;br /&gt;
=== Таблицы БД ===&lt;br /&gt;
&lt;br /&gt;
==== Поставщики ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.s;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika |       imya       | sostoyanie |   gorod&lt;br /&gt;
 -------------------+------------------+------------+------------&lt;br /&gt;
  S5                | Мелисандра       |      65000 | Мадрид&lt;br /&gt;
  S2                | Бран Старк       |      60000 | Мурманск&lt;br /&gt;
  S1                | Якен Хгар        |    1500000 | Йокогама&lt;br /&gt;
  S7                | Сирио Форель     |    1500000 | Йокогама&lt;br /&gt;
  S4                | Джейме Ланнистер |     750000 | Лондон&lt;br /&gt;
  S3                | Серсея Ланнистер |    1200000 | Лондон&lt;br /&gt;
  S8                | Тирион Ланнистер |       2571 | Манчестер&lt;br /&gt;
  S9                | Иванов           |      35000 | Мытищи&lt;br /&gt;
  S10               | Русе Болтон      |      44444 | Баренцбург&lt;br /&gt;
  S11               | Петров Иван      |      35000 | Мытищи&lt;br /&gt;
  S14               | Рендилл Тарли    |    1111111 | Прага&lt;br /&gt;
  S13               | Сэмвелл Тарли    |     999999 | Прага&lt;br /&gt;
  S6                | Оша              |            | Москва&lt;br /&gt;
  S16               | Ходор            |            | Москва&lt;br /&gt;
  S15               | Мелисса Флорент  |     888888 | Стокгольм&lt;br /&gt;
  S12               | Петров Пётр      |      35001 | Мытищи&lt;br /&gt;
  S17               | Томми Версетти   |  123456789 | Майами&lt;br /&gt;
  S18               | Безликий         |          1 | Йокогама&lt;br /&gt;
 (18 rows)&lt;br /&gt;
&lt;br /&gt;
==== Детали ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.p;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_detali |       nazvanie       |     cvet      | ves  |      gorod&lt;br /&gt;
 --------------+----------------------+---------------+------+-----------------&lt;br /&gt;
  P9           | подставка            | синий         |  400 | Нижний Новгород&lt;br /&gt;
  P10          | стойка               | синий         | 2000 | Нижний Новгород&lt;br /&gt;
  P11          | абажур               | синий         |  400 | Нижний Новгород&lt;br /&gt;
  P1           | гайка                | чёрный        |   20 | Лондон&lt;br /&gt;
  P3           | ось                  | белый         | 5000 | Эдинбург&lt;br /&gt;
  P4           | зубчатое колесо      | чёрный        |   50 | Эдинбург&lt;br /&gt;
  P6           | транзистор           | коричневый    |    2 | Токио&lt;br /&gt;
  P7           | печатная плата       | зелёный       |  200 | Токио&lt;br /&gt;
  P8           | диод                 | коричневый    |    1 | Токио&lt;br /&gt;
  P12          | универсальная деталь | универсальный |    1 | Париж&lt;br /&gt;
  P13          | уникальная деталь    | уникальный    |    1 | Бостон&lt;br /&gt;
  P14          | болт                 | серый         |   20 | Ижевск&lt;br /&gt;
  P15          | рама                 | красный       | 3000 | Манчестер&lt;br /&gt;
  P16          | колесо               | белый         | 1500 | Манчестер&lt;br /&gt;
  P5           | втулка               | серый         |  350 | Манчестер&lt;br /&gt;
  P17          | бумага               | белый         |    1 | Астрахань&lt;br /&gt;
  P18          | плитка               | белый         |  300 | Флоренция&lt;br /&gt;
  P19          | орнамент             | серый         |  800 | Флоренция&lt;br /&gt;
  P20          | уголок               | серый         |  100 | Флоренция&lt;br /&gt;
  P21          | гайка 01-01          | серебристый   |   20 | Клин&lt;br /&gt;
  P22          | усиленная рама       | красный       | 3200 | Череповец&lt;br /&gt;
  P23          | винт                 | розовый       |    5 | Ижевск&lt;br /&gt;
  P24          | труселя              | красный       |   20 | Челябинск&lt;br /&gt;
  P25          | штуцерная деталь     | коричневый    |  450 | Череповец&lt;br /&gt;
  P2           | шуруп                | чёрный        |    5 | Лондон&lt;br /&gt;
  P26          | лезвие               | бесцветный    |  120 | Йокогама&lt;br /&gt;
 (26 rows)&lt;br /&gt;
&lt;br /&gt;
==== Изделия ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.j;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_izdelia |       nazvanie        |      gorod&lt;br /&gt;
 ---------------+-----------------------+-----------------&lt;br /&gt;
  J1            | автомобиль            | Магнитогорск&lt;br /&gt;
  J2            | процессор             | Зеленоград&lt;br /&gt;
  J3            | торшер                | Нижний Новгород&lt;br /&gt;
  J4            | универсальное изделие | Париж&lt;br /&gt;
  J5            | уникальное изделие    | Бостон&lt;br /&gt;
  J6            | велосипед 01/23       | Манчестер&lt;br /&gt;
  J7            | изделие из болтов     | Челябинск&lt;br /&gt;
  J8            | шкаф                  | Ярославль&lt;br /&gt;
  J9            | рама 02-01            | Череповец&lt;br /&gt;
  J10           | книга                 | Астрахань&lt;br /&gt;
  J11           | панно 01-03           | Флоренция&lt;br /&gt;
  J12           | велосипед 03-04       | Клин&lt;br /&gt;
  J13           | рама 02-03            | Череповец&lt;br /&gt;
  J14           | штуцер 01-02          | Череповец&lt;br /&gt;
  J15           | велосипед 01-04       | Клин&lt;br /&gt;
  J16           | кружевное бельё       | Челябинск&lt;br /&gt;
  J17           | штуцер 01-03          | Череповец&lt;br /&gt;
  J18           | кинжал                | Йокогама&lt;br /&gt;
 (18 rows)&lt;br /&gt;
&lt;br /&gt;
==== Сборки ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.spj;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika | nomer_detali | nomer_izdelia | kolichestvo&lt;br /&gt;
 -------------------+--------------+---------------+-------------&lt;br /&gt;
  S1                | P6           | J2            |          20&lt;br /&gt;
  S1                | P7           | J2            |           5&lt;br /&gt;
  S2                | P1           | J1            |           4&lt;br /&gt;
  S6                | P4           | J1            |           2&lt;br /&gt;
  S6                | P5           | J1            |           6&lt;br /&gt;
  S3                | P9           | J3            |           1&lt;br /&gt;
  S4                | P10          | J3            |           1&lt;br /&gt;
  S5                | P11          | J3            |           1&lt;br /&gt;
  S2                | P4           | J1            |           8&lt;br /&gt;
  S6                | P3           | J1            |          50&lt;br /&gt;
  S7                | P8           | J2            |          25&lt;br /&gt;
  S1                | P12          | J4            |           1&lt;br /&gt;
  S2                | P12          | J4            |           1&lt;br /&gt;
  S3                | P12          | J4            |           1&lt;br /&gt;
  S4                | P12          | J4            |           1&lt;br /&gt;
  S5                | P12          | J4            |           1&lt;br /&gt;
  S7                | P12          | J4            |           1&lt;br /&gt;
  S7                | P2           | J1            |           1&lt;br /&gt;
  S6                | P2           | J1            |           9&lt;br /&gt;
  S6                | P12          | J4            |           7&lt;br /&gt;
  S1                | P13          | J5            |          14&lt;br /&gt;
  S6                | P14          | J1            |        9000&lt;br /&gt;
  S2                | P14          | J1            |           3&lt;br /&gt;
  S6                | P1           | J1            |          12&lt;br /&gt;
  S8                | P15          | J6            |           1&lt;br /&gt;
  S8                | P16          | J6            |           2&lt;br /&gt;
  S3                | P5           | J6            |          10&lt;br /&gt;
  S10               | P2           | J8            |           4&lt;br /&gt;
  S8                | P1           | J7            |          16&lt;br /&gt;
  S9                | P14          | J7            |           3&lt;br /&gt;
  S11               | P10          | J3            |           2&lt;br /&gt;
  S12               | P15          | J1            |           3&lt;br /&gt;
  S11               | P11          | J3            |           4&lt;br /&gt;
  S10               | P14          | J9            |           5&lt;br /&gt;
  S13               | P17          | J10           |        1001&lt;br /&gt;
  S14               | P17          | J10           |        1111&lt;br /&gt;
  S15               | P17          | J10           |        1010&lt;br /&gt;
  S5                | P18          | J11           |           9&lt;br /&gt;
  S5                | P19          | J11           |           1&lt;br /&gt;
  S5                | P20          | J11           |           4&lt;br /&gt;
  S9                | P14          | J8            |          25&lt;br /&gt;
  S12               | P21          | J12           |          15&lt;br /&gt;
  S11               | P22          | J13           |           9&lt;br /&gt;
  S11               | P1           | J14           |          26&lt;br /&gt;
  S12               | P1           | J14           |          13&lt;br /&gt;
  S12               | P2           | J14           |          54&lt;br /&gt;
  S12               | P23          | J4            |         101&lt;br /&gt;
  S12               | P16          | J15           |          40&lt;br /&gt;
  S7                | P21          | J12           |           3&lt;br /&gt;
  S8                | P21          | J12           |           4&lt;br /&gt;
  S9                | P21          | J12           |           5&lt;br /&gt;
  S1                | P24          | J16           |           1&lt;br /&gt;
  S1                | P15          | J6            |           3&lt;br /&gt;
  S4                | P25          | J17           |           1&lt;br /&gt;
  S17               | P16          | J1            |           4&lt;br /&gt;
  S18               | P26          | J18           |           1&lt;br /&gt;
 (56 rows)&lt;br /&gt;
&lt;br /&gt;
== Готовые запросы ==&lt;br /&gt;
&lt;br /&gt;
Если видите, что тот или иной запрос можно составить короче и рациональней - смело вносите правку.&lt;br /&gt;
&lt;br /&gt;
В трёх билетах в задании на запрос встречается формулировка &amp;quot;&#039;&#039;только и только&#039;&#039;&amp;quot;. Как оказалось, это означает следующее: если холодильники поставляет &#039;&#039;только и только&#039;&#039; Уася, то:&lt;br /&gt;
# кроме Уаси никто не поставляет холодильники;&lt;br /&gt;
# Уася не поставляет ничего, кроме холодильников.&lt;br /&gt;
&lt;br /&gt;
Существующие запросы, естественно, оказались неправильными и их пришлось переписать. &amp;lt;s&amp;gt;Великий и могучий русский языка, ну что за экономия на бумаге.&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Билет 1 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера поставщиков, которые поставляют, по крайней мере, все те детали, которые поставляет поставщик с номером &#039;S2&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nomer_postavshika&lt;br /&gt;
FROM spasoi_ekz.spj SPJX&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT nomer_detali&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJY&lt;br /&gt;
                  WHERE nomer_postavshika = &#039;S2&#039;&lt;br /&gt;
                    AND NOT EXISTS (&lt;br /&gt;
                                    SELECT *&lt;br /&gt;
                                    FROM spasoi_ekz.spj&lt;br /&gt;
                                    WHERE nomer_postavshika = SPJX.nomer_postavshika&lt;br /&gt;
                                      AND nomer_detali = SPJY.nomer_detali&lt;br /&gt;
                                   )&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika&lt;br /&gt;
 -------------------&lt;br /&gt;
  S6&lt;br /&gt;
  S2&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 2 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера деталей и общее их количество для всех номеров деталей, поставляемых более чем одним поставщиком.&lt;br /&gt;
&lt;br /&gt;
Текст запроса, каким его дал Григорьев на лекции, впоследствии исправив его:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali AS &amp;quot;Номер детали&amp;quot;,&lt;br /&gt;
       SUM(kolichestvo) AS &amp;quot;Сколько штук поставляется&amp;quot;,&lt;br /&gt;
       COUNT(DISTINCT nomer_postavshika) AS &amp;quot;Сколько у неё поставщиков&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_postavshika) &amp;gt; 1;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali AS &amp;quot;Номер детали&amp;quot;,&lt;br /&gt;
       kol AS &amp;quot;Сколько штук поставляется&amp;quot;&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT nomer_detali,&lt;br /&gt;
             SUM(kolichestvo) AS kol,&lt;br /&gt;
             COUNT(DISTINCT nomer_postavshika)&lt;br /&gt;
      FROM spasoi_ekz.spj&lt;br /&gt;
      GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_postavshika) &amp;gt; 1&lt;br /&gt;
     ) A;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер детали | Сколько штук поставляется | Сколько у неё поставщиков&lt;br /&gt;
 --------------+---------------------------+---------------------------&lt;br /&gt;
  P1           |                        71 |                         5&lt;br /&gt;
  P10          |                         3 |                         2&lt;br /&gt;
  P11          |                         5 |                         2&lt;br /&gt;
  P12          |                        13 |                         7&lt;br /&gt;
  P14          |                      9036 |                         4&lt;br /&gt;
  P15          |                         7 |                         3&lt;br /&gt;
  P16          |                        46 |                         3&lt;br /&gt;
  P17          |                      3122 |                         3&lt;br /&gt;
  P2           |                        68 |                         4&lt;br /&gt;
  P21          |                        27 |                         4&lt;br /&gt;
  P4           |                        10 |                         2&lt;br /&gt;
  P5           |                        16 |                         2&lt;br /&gt;
 (12 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 3 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера поставщиков, поставляющих детали с номером &#039;P1&#039; для какого-либо изделия в количестве (в поставке) большим, чем средний объём поставок деталей с номером &#039;P2&#039; для этого изделия.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT X.nomer_postavshika &lt;br /&gt;
FROM spasoi_ekz.spj X&lt;br /&gt;
WHERE X.nomer_detali = &#039;P1&#039;&lt;br /&gt;
  AND X.kolichestvo &amp;gt; (&lt;br /&gt;
                       SELECT AVG(kolichestvo)&lt;br /&gt;
                       FROM spasoi_ekz.spj&lt;br /&gt;
                       WHERE nomer_izdelia = X.nomer_izdelia&lt;br /&gt;
                         AND nomer_detali = &#039;P2&#039;&lt;br /&gt;
                      );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но длиннее и нерациональней&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nomer_postavshika&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT *&lt;br /&gt;
      FROM spasoi_ekz.spj&lt;br /&gt;
      WHERE nomer_izdelia IN(&lt;br /&gt;
                             SELECT nomer_izdelia&lt;br /&gt;
                             FROM spasoi_ekz.spj&lt;br /&gt;
                             WHERE nomer_detali = &#039;P1&#039;&lt;br /&gt;
                            )&lt;br /&gt;
        AND nomer_izdelia IN(&lt;br /&gt;
	                     SELECT nomer_izdelia&lt;br /&gt;
	                     FROM spasoi_ekz.spj&lt;br /&gt;
	                     WHERE nomer_detali = &#039;P2&#039;&lt;br /&gt;
	                    )&lt;br /&gt;
     ) A&lt;br /&gt;
WHERE nomer_detali = &#039;P1&#039; AND kolichestvo &amp;gt;&lt;br /&gt;
(&lt;br /&gt;
 SELECT AVG(kolichestvo)&lt;br /&gt;
 FROM (&lt;br /&gt;
       SELECT *&lt;br /&gt;
       FROM spasoi_ekz.spj&lt;br /&gt;
       WHERE nomer_izdelia IN(&lt;br /&gt;
                              SELECT nomer_izdelia&lt;br /&gt;
                              FROM spasoi_ekz.spj&lt;br /&gt;
                              WHERE nomer_detali = &#039;P1&#039;&lt;br /&gt;
                             )&lt;br /&gt;
         AND nomer_izdelia IN(&lt;br /&gt;
                              SELECT nomer_izdelia&lt;br /&gt;
                              FROM spasoi_ekz.spj&lt;br /&gt;
                              WHERE nomer_detali = &#039;P2&#039;&lt;br /&gt;
                             )&lt;br /&gt;
      ) B&lt;br /&gt;
 WHERE nomer_detali = &#039;P2&#039;&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika&lt;br /&gt;
 -------------------&lt;br /&gt;
  S6&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 4 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера изделий, для которых детали поставляет только поставщик с номером ‘S1’.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_izdelia&lt;br /&gt;
FROM spasoi_ekz.spj X&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT *&lt;br /&gt;
                  FROM spasoi_ekz.spj&lt;br /&gt;
                  WHERE nomer_postavshika != &#039;S1&#039;&lt;br /&gt;
                    AND X.nomer_izdelia = nomer_izdelia&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но без EXISTS&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nomer_izdelia&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
WHERE nomer_izdelia IN(&lt;br /&gt;
                       SELECT nomer_izdelia&lt;br /&gt;
                       FROM spasoi_ekz.spj&lt;br /&gt;
                       WHERE nomer_postavshika = &#039;S1&#039;&lt;br /&gt;
                      )&lt;br /&gt;
  AND nomer_izdelia NOT IN(&lt;br /&gt;
                           SELECT nomer_izdelia&lt;br /&gt;
                           FROM spasoi_ekz.spj&lt;br /&gt;
                           WHERE nomer_postavshika != &#039;S1&#039;&lt;br /&gt;
                          );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_izdelia&lt;br /&gt;
 ---------------&lt;br /&gt;
  J5&lt;br /&gt;
  J16&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 5 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих детали с названием &amp;quot;Болт&amp;quot; в количестве (в поставке) большим, чем средний объём всех поставок деталей с номером &#039;P1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                           ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                        JOIN spasoi_ekz.p P&lt;br /&gt;
                           ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                              AND nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
WHERE kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT AVG(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                                               ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                                  AND SPJ.nomer_detali = &#039;P1&#039;&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но без JOIN&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s&lt;br /&gt;
WHERE nomer_postavshika IN (&lt;br /&gt;
                            SELECT nomer_postavshika&lt;br /&gt;
                            FROM spasoi_ekz.spj&lt;br /&gt;
                            WHERE nomer_detali = (&lt;br /&gt;
                                                  SELECT nomer_detali&lt;br /&gt;
                                                  FROM spasoi_ekz.p&lt;br /&gt;
                                                  WHERE LOWER(nazvanie) = LOWER(&#039;Болт&#039;)&lt;br /&gt;
                                                 )&lt;br /&gt;
                              AND kolichestvo &amp;gt; (&lt;br /&gt;
                                                 SELECT AVG(kolichestvo)&lt;br /&gt;
                                                 FROM spasoi_ekz.spj&lt;br /&gt;
                                                 WHERE nomer_detali = &#039;P1&#039;&lt;br /&gt;
                                                )&lt;br /&gt;
                           );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  imya&lt;br /&gt;
 ------&lt;br /&gt;
  Оша&lt;br /&gt;
  Иванов&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 6 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия деталей, поставляемых поставщиком, проживающим в том же городе, где изготавливаются эти детали, для изделия с названием ‘Велосипед 01/23’.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT P.nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                        JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                        JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
WHERE S.gorod = P.gorod&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Велосипед 01/23&#039;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос без JOIN&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nazvanie&lt;br /&gt;
FROM spasoi_ekz.S S, spasoi_ekz.p P, spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE S.gorod = P.gorod&lt;br /&gt;
  AND P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
  AND S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
  AND nomer_izdelia = (&lt;br /&gt;
                       SELECT nomer_izdelia&lt;br /&gt;
                       FROM spasoi_ekz.j&lt;br /&gt;
                       WHERE nazvanie = LOWER(&#039;Велосипед 01/23&#039;)&lt;br /&gt;
                      );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nazvanie&lt;br /&gt;
 ----------&lt;br /&gt;
  рама&lt;br /&gt;
  колесо&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 7 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия изделий, куда входят детали с названием &#039;Болт&#039;, поставляемых поставщиками с именем &#039;Иванов&#039;, в количестве (в поставке) большим, чем средний объём поставок для этого изделия.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT J.nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                        JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                        JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
WHERE imya LIKE &#039;%Иванов%&#039;&lt;br /&gt;
  AND P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
  AND kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT AVG(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj X&lt;br /&gt;
                     WHERE SPJ.nomer_izdelia = X.nomer_izdelia&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё один вариант запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie&lt;br /&gt;
FROM spasoi_ekz.j&lt;br /&gt;
WHERE nomer_izdelia IN (&lt;br /&gt;
                        SELECT nomer_izdelia&lt;br /&gt;
                        FROM (spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                                                   ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                                                      AND imya LIKE &#039;%Иванов%&#039;&lt;br /&gt;
                                                 JOIN spasoi_ekz.p P&lt;br /&gt;
                                                   ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                                      AND nazvanie = LOWER(&#039;Болт&#039;)) A&lt;br /&gt;
                        WHERE kolichestvo &amp;gt; (&lt;br /&gt;
                                             SELECT AVG(kolichestvo)&lt;br /&gt;
                                             FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                                                       ON SPJ.nomer_izdelia = A.nomer_izdelia&lt;br /&gt;
                                            )&lt;br /&gt;
                       );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;И ещё вариант этого же запроса, но длиннее и нерациональней&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT J.nazvanie, kolichestvo&lt;br /&gt;
      FROM spasoi_ekz.s S, spasoi_ekz.p P, spasoi_ekz.j J, spasoi_ekz.spj SPJ&lt;br /&gt;
      WHERE J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
        AND P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
        AND P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
        AND S.imya LIKE &#039;%Иванов%&#039;&lt;br /&gt;
        AND S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
     ) A&lt;br /&gt;
WHERE kolichestvo &amp;gt;&lt;br /&gt;
(&lt;br /&gt;
 SELECT AVG(kolichestvo)&lt;br /&gt;
 FROM spasoi_ekz.spj&lt;br /&gt;
 WHERE nomer_izdelia IN(&lt;br /&gt;
                        SELECT J.nomer_izdelia&lt;br /&gt;
                        FROM spasoi_ekz.s S, spasoi_ekz.p P, spasoi_ekz.j J, spasoi_ekz.spj SPJ&lt;br /&gt;
                        WHERE J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
                          AND P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                          AND P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
                          AND S.imya LIKE &#039;%Иванов%&#039;&lt;br /&gt;
                          AND S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
                       )&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
      nazvanie&lt;br /&gt;
 -------------------&lt;br /&gt;
  шкаф&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 8 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера изделий и общее количество деталей для них, поставляемых поставщиками с именем &#039;Петров&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_izdelia AS &amp;quot;Номер изделия&amp;quot;, SUM(kolichestvo) AS &amp;quot;Количество деталей&amp;quot; &lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                             -- так как &amp;quot;поставщикАМИ&amp;quot; и возможны&lt;br /&gt;
                             -- Иван Петров и Петров Иван, то LIKE %Петров%&lt;br /&gt;
                             AND imya LIKE &#039;%Петров%&#039;&lt;br /&gt;
GROUP BY nomer_izdelia;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер изделия | Количество деталей&lt;br /&gt;
 ---------------+--------------------&lt;br /&gt;
  J4            |                101&lt;br /&gt;
  J3            |                  6&lt;br /&gt;
  J13           |                  9&lt;br /&gt;
  J15           |                 40&lt;br /&gt;
  J1            |                  3&lt;br /&gt;
  J12           |                 15&lt;br /&gt;
  J14           |                 93&lt;br /&gt;
 (7 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 9 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера деталей и общее их количество для всех номеров деталей, которые входят только в одно изделие.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali, SUM(kolichestvo)&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_izdelia) = 1;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali, kol FROM (&lt;br /&gt;
       SELECT nomer_detali, SUM(kolichestvo) AS kol, COUNT(DISTINCT nomer_izdelia) = 1&lt;br /&gt;
       FROM spasoi_ekz.spj&lt;br /&gt;
       GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_izdelia) = 1&lt;br /&gt;
    ) A;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_detali | sum&lt;br /&gt;
 --------------+------&lt;br /&gt;
  P10          |    3&lt;br /&gt;
  P11          |    5&lt;br /&gt;
  P12          |   13&lt;br /&gt;
  P13          |   14&lt;br /&gt;
  P17          | 3122&lt;br /&gt;
  P18          |    9&lt;br /&gt;
  P19          |    1&lt;br /&gt;
  P20          |    4&lt;br /&gt;
  P21          |   27&lt;br /&gt;
  P22          |    9&lt;br /&gt;
  P23          |  101&lt;br /&gt;
  P24          |    1&lt;br /&gt;
  P25          |    1&lt;br /&gt;
  P26          |    1&lt;br /&gt;
  P3           |   50&lt;br /&gt;
  P4           |   10&lt;br /&gt;
  P6           |   20&lt;br /&gt;
  P7           |    5&lt;br /&gt;
  P8           |   25&lt;br /&gt;
  P9           |    1&lt;br /&gt;
 (20 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 10 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих детали с названием &#039;Болт&#039; для изделия с названием &#039;Рама 02-01&#039; в количестве (в поставке) большим, чем минимальное значение поставки детали с номером &#039;P1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
			   ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
			      AND J.nazvanie = LOWER(&#039;Рама 02-01&#039;)&lt;br /&gt;
			 JOIN spasoi_ekz.p P&lt;br /&gt;
			   ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
			      AND P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
			 JOIN spasoi_ekz.s S&lt;br /&gt;
			   ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE kolichestvo &amp;gt; (&lt;br /&gt;
		     SELECT MIN(kolichestvo)&lt;br /&gt;
		     FROM spasoi_ekz.spj &lt;br /&gt;
		     spj.nomer_detali = &#039;P1&#039;&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Русе Болтон&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 11 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия городов и суммарное состояние проживающих в каждом городе поставщиков, у которых минимальный объём поставки деталей больше 1000.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT s.gorod, SUM(s.sostoyanie)&lt;br /&gt;
FROM spasoi_ekz.s&lt;br /&gt;
WHERE (	&lt;br /&gt;
       SELECT MIN(kolichestvo)	&lt;br /&gt;
       FROM spasoi_ekz.spj X	&lt;br /&gt;
       WHERE X.nomer_postavshika = s.nomer_postavshika		&lt;br /&gt;
       ) &amp;gt; 1000&lt;br /&gt;
GROUP BY s.gorod;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT gorod, SUM(sostoyanie)&lt;br /&gt;
FROM spasoi_ekz.s&lt;br /&gt;
WHERE nomer_postavshika IN (&lt;br /&gt;
                            SELECT nomer_postavshika&lt;br /&gt;
                            FROM spasoi_ekz.spj&lt;br /&gt;
                            GROUP BY nomer_postavshika HAVING MIN(kolichestvo) &amp;gt; 1000&lt;br /&gt;
                           )&lt;br /&gt;
GROUP BY gorod;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;!-- этот запрос выполняет не совсем то и не правильно&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT gorod, sost&lt;br /&gt;
FROM (&lt;br /&gt;
SELECT gorod, SUM(sostoyanie) AS sost, SUM(SPJ.kolichestvo)&lt;br /&gt;
FROM spasoi_ekz.spj, spasoi_ekz.s&lt;br /&gt;
WHERE S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
GROUP BY S.gorod HAVING SUM(SPJ.kolichestvo) &amp;gt; 1000&lt;br /&gt;
) A;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; --&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
    gorod   |   sum&lt;br /&gt;
 -----------+---------&lt;br /&gt;
  Прага     | 2111110&lt;br /&gt;
  Стокгольм |  888888&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 12 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера деталей, поставляемых для какого-либо изделия поставщиком, проживающим в том же городе, где изготавливается это изделие.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali&lt;br /&gt;
FROM spasoi_ekz.spj SPJ, spasoi_ekz.s S, spasoi_ekz.j J&lt;br /&gt;
WHERE SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
  AND S.gorod = J.gorod&lt;br /&gt;
  AND J.nomer_izdelia = SPJ.nomer_izdelia;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_detali&lt;br /&gt;
 --------------&lt;br /&gt;
  P15&lt;br /&gt;
  P16&lt;br /&gt;
  P26&lt;br /&gt;
 (3 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 13 ===&lt;br /&gt;
&lt;br /&gt;
Написать &amp;lt;u&amp;gt;один&amp;lt;/u&amp;gt; запрос SELECT: выдать количества строк в таблице S (Поставщик) 1) с пустыми значениями и 2) непустыми значениями в столбце Состояние.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT COUNT(nomer_postavshika) - COUNT(sostoyanie) AS &amp;quot;С пустым состоянием&amp;quot;, &lt;br /&gt;
       COUNT(sostoyanie) AS &amp;quot;С не пустым состоянием&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.s;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но длиннее и нерациональней&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SELECT COUNT(Snull.*) AS &amp;quot;С пустым состоянием&amp;quot;, COUNT(Snotnull.sostoyanie) AS &amp;quot;С не пустым состоянием&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.s Snull RIGHT OUTER JOIN spasoi_ekz.s Snotnull&lt;br /&gt;
                                      ON Snull.nomer_postavshika = Snotnull.nomer_postavshika&lt;br /&gt;
                                         AND Snull.sostoyanie IS NULL;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  С пустым состоянием | С не пустым состоянием&lt;br /&gt;
 ---------------------+-----------------------&lt;br /&gt;
                    2 |                    16&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 14 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют детали только и только для изделия с номером &#039;J1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj A JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON A.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE nomer_izdelia = &#039;J1&#039;&lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT nomer_postavshika&lt;br /&gt;
                  FROM spasoi_ekz.spj&lt;br /&gt;
                  WHERE nomer_izdelia != &#039;J1&#039;&lt;br /&gt;
                    AND nomer_postavshika = A.nomer_postavshika&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       imya&lt;br /&gt;
 ----------------&lt;br /&gt;
  Томми Версетти&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 15 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать наименования изделий, для которых детали поставляют только те поставщики, у которых состояние больше 1000000 у.е.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                        JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
WHERE sostoyanie &amp;gt; 1000000&lt;br /&gt;
  AND SPJ.nomer_izdelia NOT IN (&lt;br /&gt;
                                SELECT nomer_izdelia&lt;br /&gt;
                                FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                                                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                                WHERE sostoyanie &amp;lt; 1000000&lt;br /&gt;
                               );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       nazvanie&lt;br /&gt;
 --------------------&lt;br /&gt;
  кружевное бельё&lt;br /&gt;
  уникальное изделие&lt;br /&gt;
  процессор&lt;br /&gt;
 (3 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 16 ===&lt;br /&gt;
Написать запрос SELECT: выдать цвета и для каждого цвета общее количество деталей, входящих в изделие с названием &#039;Панно 01-03&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT cvet AS &amp;quot;Цвет&amp;quot;, SUM(kolichestvo) AS &amp;quot;Деталей&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
			     AND J.nazvanie = LOWER(&#039;Панно 01-03&#039;)&lt;br /&gt;
			JOIN spasoi_ekz.P P&lt;br /&gt;
			  ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
GROUP BY cvet;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Цвет  | Деталей&lt;br /&gt;
 -------+---------&lt;br /&gt;
  белый |       9&lt;br /&gt;
  серый |       5&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 17 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера поставщиков и количество сделанных ими поставок при условии, что среднее число деталей во всех этих поставках больше 1000.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nom AS &amp;quot;Номер поставщика&amp;quot;, cnt AS &amp;quot;Количество поставок&amp;quot;&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT S.nomer_postavshika AS nom,&lt;br /&gt;
             COUNT(SPJ.nomer_postavshika) AS cnt,&lt;br /&gt;
             AVG(SPJ.kolichestvo) AS kol&lt;br /&gt;
      FROM spasoi_ekz.s S, spasoi_ekz.spj SPJ&lt;br /&gt;
      WHERE S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
      GROUP BY S.nomer_postavshika&lt;br /&gt;
     ) A&lt;br /&gt;
WHERE kol &amp;gt; 1000;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос немного попроще&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_postavshika AS &amp;quot;Номер поставщика&amp;quot;, COUNT(*) AS &amp;quot;Количество поставок&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
WHERE nomer_postavshika IN (&lt;br /&gt;
                            SELECT nomer_postavshika&lt;br /&gt;
                            FROM spasoi_ekz.spj&lt;br /&gt;
                            GROUP BY nomer_postavshika HAVING AVG(kolichestvo) &amp;gt; 1000&lt;br /&gt;
                           )&lt;br /&gt;
GROUP BY nomer_postavshika;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер поставщика | Количество поставок&lt;br /&gt;
 ------------------+---------------------&lt;br /&gt;
  S13              |                   1&lt;br /&gt;
  S6               |                   7&lt;br /&gt;
  S14              |                   1&lt;br /&gt;
  S15              |                   1&lt;br /&gt;
 (4 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 18 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, имеющих состояние больше 1000 и поставляющих деталь с названием &#039;Гайка 01-01&#039; для изделия с названием &#039;Велосипед 03-04&#039; в количестве (в поставке) большим, чем средний объём поставки, выполненной поставщиками с именем &#039;Иванов&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:2nd dufficulty.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;5px&amp;quot;&amp;gt;&#039;&#039;&#039;Второй по сложности запрос экзамена!&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;4px&amp;quot;&amp;gt;&#039;&#039;&#039;Вот уж не свезло, так не свезло&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                    JOIN spasoi_ekz.j J&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
WHERE sostoyanie &amp;gt; 1000&lt;br /&gt;
  AND P.nazvanie = LOWER(&#039;Гайка 01-01&#039;)&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Велосипед 03-04&#039;)&lt;br /&gt;
  AND kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT AVG(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                       ON SPJ.nomer_postavshika = S.nomer_postavshika &lt;br /&gt;
                     WHERE S.imya = &#039;Иванов&#039;&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Пётр&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 19 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия красных деталей, которые входят только в изделие с названием &#039;Рама 02-03&#039; в количестве, меньшем 10 единиц в поставке.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT X.nazvanie&lt;br /&gt;
FROM spasoi_ekz.p X JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_detali = X.nomer_detali&lt;br /&gt;
                    JOIN spasoi_ekz.j J&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
WHERE X.cvet = &#039;красный&#039;&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Рама 02-03&#039;)&lt;br /&gt;
  AND kolichestvo &amp;lt; 10&lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT J.nomer_izdelia&lt;br /&gt;
                  FROM spasoi_ekz.j J JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                                        ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                  WHERE J.nazvanie != LOWER(&#039;Рама 02-03&#039;)&lt;br /&gt;
                    AND X.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант этого же запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT P.nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND cvet = &#039;красный&#039;&lt;br /&gt;
                        JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                              AND J.nazvanie = LOWER(&#039;Рама 02-03&#039;)&lt;br /&gt;
WHERE kolichestvo &amp;lt; 10&lt;br /&gt;
  AND SPJ.nomer_detali NOT IN (&lt;br /&gt;
                               SELECT nomer_detali&lt;br /&gt;
                               FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                                         ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                                                            AND J.nazvanie != LOWER(&#039;Рама 02-03&#039;)&lt;br /&gt;
                              );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     nazvanie&lt;br /&gt;
 ----------------&lt;br /&gt;
  усиленная рама&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 20 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих только белые детали.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
WHERE cvet = &#039;белый&#039;&lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT nomer_postavshika&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                                            ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                  WHERE nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    AND P.cvet != &#039;белый&#039;&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё один вариант этого же запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND cvet = &#039;белый&#039;&lt;br /&gt;
                        JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE S.nomer_postavshika NOT IN (&lt;br /&gt;
                                  SELECT nomer_postavshika&lt;br /&gt;
                                  FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                                                            ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                                               AND cvet != &#039;белый&#039;&lt;br /&gt;
                                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;И ещё один вариант этого же запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s&lt;br /&gt;
WHERE nomer_postavshika NOT IN  (&lt;br /&gt;
                                 SELECT spj.nomer_postavshika&lt;br /&gt;
                                 FROM spasoi_ekz.spj SPJ, spasoi_ekz.p P&lt;br /&gt;
                                 WHERE SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                   AND p.cvet != &#039;белый&#039;&lt;br /&gt;
                                )&lt;br /&gt;
  AND nomer_postavshika  IN (&lt;br /&gt;
                             SELECT spj.nomer_postavshika&lt;br /&gt;
                             FROM spasoi_ekz.spj SPJ, spasoi_ekz.p P&lt;br /&gt;
                             WHERE SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                               AND p.cvet = &#039;белый&#039;&lt;br /&gt;
                            );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       imya&lt;br /&gt;
 -----------------&lt;br /&gt;
  Рендилл Тарли&lt;br /&gt;
  Сэмвелл Тарли&lt;br /&gt;
  Мелисса Флорент&lt;br /&gt;
  Томми Версетти&lt;br /&gt;
 (4 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 21 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия изделий, для которых детали поставляет только и только поставщик с номером &#039;S1&#039;.&lt;br /&gt;
&lt;br /&gt;
Чтобы продемонстрировать выполнение запроса наглядно, возьмём поставщика не &#039;S1&#039;, а &#039;S18&#039;, который был создан специально для этого запроса. Если оставить &#039;S1&#039;, то наглядности не получится, так как по нашей схеме БД этот поставщик не попадает под условие &amp;quot;&#039;&#039;только и только&#039;&#039;&amp;quot;, и запрос вернёт пустой результат.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie&lt;br /&gt;
FROM spasoi_ekz.j J, spasoi_ekz.SPJ SPJ&lt;br /&gt;
WHERE J.nomer_izdelia = SPJ.nomer_izdelia &lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT *&lt;br /&gt;
                  FROM spasoi_ekz.spj&lt;br /&gt;
                  WHERE nomer_postavshika != &#039;S18&#039; AND nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                 )&lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT *&lt;br /&gt;
                  FROM spasoi_ekz.spj&lt;br /&gt;
                  WHERE nomer_postavshika = &#039;S18&#039; AND nomer_izdelia != J.nomer_izdelia&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       nazvanie&lt;br /&gt;
 --------------------&lt;br /&gt;
  кинжал&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 22 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют только детали с номером &#039;P1&#039; для изделия с именем &#039;Штуцер 01-02&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- неверный запрос - номер изделия, а не название&lt;br /&gt;
SELECT imya FROM S X&lt;br /&gt;
JOIN SPJ Y ON X.nomer_postavshika=Y.nomer_postavshika&lt;br /&gt;
WHERE X.nomer_postavshika NOT IN (&lt;br /&gt;
                  SELECT DISTINCT nomer_postavshika FROM SPJ Z&lt;br /&gt;
                  WHERE Z.nomer_izdelia != &#039;Штуцер 01-02&#039;&lt;br /&gt;
                  AND Z.nomer_detali!=&#039;P1&#039;);--&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                             AND J.nazvanie = LOWER(&#039;штуцер 01-02&#039;)&lt;br /&gt;
                        JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND SPJ.nomer_detali = &#039;P1&#039;&lt;br /&gt;
                        JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE SPJ.nomer_postavshika NOT IN (&lt;br /&gt;
                                    SELECT nomer_postavshika&lt;br /&gt;
                                    FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                                              ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                                                                 AND J.nazvanie = LOWER(&#039;штуцер 01-02&#039;)&lt;br /&gt;
                                                            JOIN spasoi_ekz.p P&lt;br /&gt;
                                                              ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                                                 AND SPJ.nomer_detali != &#039;P1&#039;&lt;br /&gt;
                              );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Иван&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 23 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют деталь с названием &#039;Винт&#039; в количестве большим 100 единиц в одной поставке и имеют состояние больше среднего по их родному городу.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT S.imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
WHERE P.nazvanie = LOWER(&#039;Винт&#039;)&lt;br /&gt;
  AND SPJ.kolichestvo &amp;gt; 100&lt;br /&gt;
  AND S.sostoyanie &amp;gt; (&lt;br /&gt;
                      SELECT AVG(SS.sostoyanie)&lt;br /&gt;
                      FROM spasoi_ekz.s SS&lt;br /&gt;
                      WHERE SS.gorod = S.gorod&lt;br /&gt;
                     );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Пётр&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 24 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать наименования деталей и общее их количество для всех наименований деталей, изготавливаемых в одном городе.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- С этим запросом возникла неожиданная проблема - задание то ли неполное, то ли неправильное, потому что нельзя однозначно сказать, что по нему требуется сделать.&lt;br /&gt;
&lt;br /&gt;
Так что тут несколько вариантов запросов (кто как понял).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Первый вариант запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie, kol&lt;br /&gt;
FROM spasoi_ekz.p A, (&lt;br /&gt;
                      SELECT X.gorod, SUM(kolichestvo) as kol&lt;br /&gt;
                      FROM spasoi_ekz.p X, spasoi_ekz.spj Y&lt;br /&gt;
                      WHERE Y.nomer_detali = X.nomer_detali&lt;br /&gt;
                      GROUP BY X.gorod&lt;br /&gt;
                     ) B&lt;br /&gt;
WHERE A.gorod = B.gorod;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
        nazvanie       | kol&lt;br /&gt;
 ----------------------+------&lt;br /&gt;
  подставка            |    9&lt;br /&gt;
  стойка               |    9&lt;br /&gt;
  абажур               |    9&lt;br /&gt;
  гайка                |  139&lt;br /&gt;
  ось                  |   60&lt;br /&gt;
  зубчатое колесо      |   60&lt;br /&gt;
  транзистор           |   50&lt;br /&gt;
  печатная плата       |   50&lt;br /&gt;
  диод                 |   50&lt;br /&gt;
  универсальная деталь |   13&lt;br /&gt;
  уникальная деталь    |   14&lt;br /&gt;
  болт                 | 9137&lt;br /&gt;
  рама                 |   69&lt;br /&gt;
  колесо               |   69&lt;br /&gt;
  втулка               |   69&lt;br /&gt;
  бумага               | 3122&lt;br /&gt;
  плитка               |   14&lt;br /&gt;
  орнамент             |   14&lt;br /&gt;
  уголок               |   14&lt;br /&gt;
  гайка 01-01          |   27&lt;br /&gt;
  усиленная рама       |   10&lt;br /&gt;
  винт                 | 9137&lt;br /&gt;
  труселя              |    1&lt;br /&gt;
  штуцерная деталь     |   10&lt;br /&gt;
  шуруп                |  139&lt;br /&gt;
 (25 rows)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
и --&amp;gt;&lt;br /&gt;
В уточнение задания Григорьев сказал следующее: &amp;quot;&#039;&#039;Следует учесть, что в качестве наименования города может выступать переменная, в которую в некоторой программе должно быть занесено конкретное значение перед выполнением запроса&#039;&#039;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
То есть, вообще говоря, задание на запрос неполное, и его можно трактовать так: выдать наименования деталей и общее их количество для всех наименований деталей, изготавливаемых в городе &amp;lt;code&amp;gt;%НАЗВАНИЕГОРОДА%&amp;lt;/code&amp;gt;. Вот эта переменная задаётся где-то в программе, а в БД идёт запрос с уже подставленным конкретным названием. &lt;br /&gt;
&lt;br /&gt;
Этот вариант запроса составлен, например, для Лондона. &lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie, SUM(kolichestvo)&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
WHERE gorod = &#039;Лондон&#039;&lt;br /&gt;
GROUP BY nazvanie;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nazvanie | sum&lt;br /&gt;
 ----------+-----&lt;br /&gt;
  гайка    |  71&lt;br /&gt;
  шуруп    |  68&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 25 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих хотя бы одну белую деталь для изделия с названием &#039;Велосипед 01-04&#039; с объёмом поставки большим, чем средний объём поставки этого поставщика.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                    JOIN spasoi_ekz.j J&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
WHERE cvet = &#039;белый&#039;&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Велосипед 01-04&#039;)&lt;br /&gt;
  AND kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT AVG(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj SPJ&lt;br /&gt;
                     WHERE SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Пётр&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 26 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера красных деталей и количество поставок этих деталей.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT P.nomer_detali AS &amp;quot;Номер детали&amp;quot;, COUNT(kolichestvo) AS &amp;quot;Количество поставок с ней&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.p P, spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
  AND cvet = &#039;красный&#039;&lt;br /&gt;
GROUP BY P.nomer_detali;   &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос через JOIN&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT SPJ.nomer_detali AS &amp;quot;Номер детали&amp;quot;, COUNT(kolichestvo) AS &amp;quot;Количество поставок с ней&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND cvet = &#039;красный&#039;&lt;br /&gt;
GROUP BY SPJ.nomer_detali;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер детали | Количество поставок с ней&lt;br /&gt;
 --------------+---------------------------&lt;br /&gt;
  P15          |                         3&lt;br /&gt;
  P22          |                         1&lt;br /&gt;
  P24          |                         1&lt;br /&gt;
 (3 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 27 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать наименования городов и среднее состояние поставщиков для каждого города, поставляющих детали с названием &#039;Гайка 01-01&#039; для изделия с названием &#039;Велосипед 03-04&#039; в количестве (в поставке) большим, чем минимальный объём поставки, выполненной поставщиком с номером &#039;S1&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:1st dufficulty.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;7px&amp;quot;&amp;gt;&#039;&#039;&#039;Сложнейший запрос экзамена!&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;5px&amp;quot;&amp;gt;&#039;&#039;&#039;Сохрани Джа, вытащить такое&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT S.gorod AS &amp;quot;Город&amp;quot;, AVG(S.sostoyanie) AS &amp;quot;Среднее состояние&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                    JOIN spasoi_ekz.j J&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
WHERE P.nazvanie = LOWER(&#039;Гайка 01-01&#039;)&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Велосипед 03-04&#039;)&lt;br /&gt;
  AND kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT MIN(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj&lt;br /&gt;
                     WHERE nomer_postavshika = &#039;S1&#039;&lt;br /&gt;
                    )&lt;br /&gt;
GROUP BY S.gorod;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
    Город   |   Среднее состояние&lt;br /&gt;
 -----------+-----------------------&lt;br /&gt;
  Мытищи    |    35000.500000000000&lt;br /&gt;
  Йокогама  |  1500000.000000000000&lt;br /&gt;
  Манчестер | 2571.0000000000000000&lt;br /&gt;
 (3 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 28 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия изделий, куда входит хотя бы одна красная деталь весом больше 10 граммов, поставляемая только поставщиком с номером &#039;S1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT J.nazvanie&lt;br /&gt;
FROM spasoi_ekz.j J JOIN spasoi_ekz.spj SPJ1&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ1.nomer_izdelia&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ1.nomer_detali&lt;br /&gt;
WHERE P.ves &amp;gt; 10&lt;br /&gt;
 AND P.cvet = &#039;красный&#039;&lt;br /&gt;
 AND NOT EXISTS (&lt;br /&gt;
                 SELECT SPJ2.nomer_postavshika&lt;br /&gt;
                 FROM spasoi_ekz.spj SPJ2         &lt;br /&gt;
                 WHERE SPJ2.nomer_detali = P.nomer_detali&lt;br /&gt;
	 	   AND SPJ2.nomer_postavshika != &#039;S1&#039;&lt;br /&gt;
                );                     &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     nazvanie&lt;br /&gt;
 -----------------&lt;br /&gt;
  кружевное бельё&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 29 ===&lt;br /&gt;
Написать запрос SELECT: выдать названия деталей, которые входят только и только в состав изделия с названием &#039;Штуцер 01-03&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie&lt;br /&gt;
FROM spasoi_ekz.p P, spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE P.nomer_detali = SPJ.nomer_detali &lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT SPJ.nomer_izdelia&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                            ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
                  WHERE (&lt;br /&gt;
                         J.nazvanie != LOWER(&#039;Штуцер 01-03&#039;)&lt;br /&gt;
                         AND&lt;br /&gt;
                         SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                        )&lt;br /&gt;
                     OR (&lt;br /&gt;
                         J.nazvanie = LOWER(&#039;Штуцер 01-03&#039;)&lt;br /&gt;
                         AND&lt;br /&gt;
                         SPJ.nomer_detali != P.nomer_detali&lt;br /&gt;
                        )&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
      nazvanie&lt;br /&gt;
 ------------------&lt;br /&gt;
  штуцерная деталь&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 30 ===&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют, по крайней мере, все те детали, которые поставляет поставщик с номером &#039;S2&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT imya&lt;br /&gt;
FROM spasoi_ekz.s S&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT nomer_detali&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJY&lt;br /&gt;
                  WHERE nomer_postavshika = &#039;S2&#039;&lt;br /&gt;
                    AND NOT EXISTS (&lt;br /&gt;
                                    SELECT *&lt;br /&gt;
                                    FROM spasoi_ekz.spj&lt;br /&gt;
                                    WHERE nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                                      AND nomer_detali = SPJY.nomer_detali&lt;br /&gt;
                                   )&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  imya&lt;br /&gt;
 ------------&lt;br /&gt;
  Оша&lt;br /&gt;
  Бран Старк&lt;br /&gt;
 (2 rows)&lt;br /&gt;
[[Категория:Структурное проектирование АСОИ (10 семестр)]]&lt;/div&gt;</summary>
		<author><name>81.9.52.28</name></author>
	</entry>
	<entry>
		<id>https://iu5bmstu.ru/index.php?title=SQL-%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D1%8B_%D0%BA_%D1%8D%D0%BA%D0%B7%D0%B0%D0%BC%D0%B5%D0%BD%D1%83_%D0%BF%D0%BE_%D0%A1%D0%9F%D0%90%D0%A1%D0%9E%D0%98_(10_%D1%81%D0%B5%D0%BC%D0%B5%D1%81%D1%82%D1%80)&amp;diff=3833</id>
		<title>SQL-запросы к экзамену по СПАСОИ (10 семестр)</title>
		<link rel="alternate" type="text/html" href="https://iu5bmstu.ru/index.php?title=SQL-%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D1%8B_%D0%BA_%D1%8D%D0%BA%D0%B7%D0%B0%D0%BC%D0%B5%D0%BD%D1%83_%D0%BF%D0%BE_%D0%A1%D0%9F%D0%90%D0%A1%D0%9E%D0%98_(10_%D1%81%D0%B5%D0%BC%D0%B5%D1%81%D1%82%D1%80)&amp;diff=3833"/>
		<updated>2013-06-14T21:18:29Z</updated>

		<summary type="html">&lt;p&gt;81.9.52.28: /* Билет 11 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right; clear:both; margin-right:1.0em;&amp;quot;&amp;gt;__TOC__&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Билет экзамена по [[:Категория:Структурное проектирование АСОИ (10 семестр) | СПАСОИ]] состоит из двух частей:&lt;br /&gt;
# теория;&lt;br /&gt;
# SQL-запрос.&lt;br /&gt;
&lt;br /&gt;
На этой странице собраны все сформированные запросы по билетам.&lt;br /&gt;
&lt;br /&gt;
Странно, что ни в одном билете нет запроса с сортировкой результатов. Возможно, они буду в дополнительных заданиях.&lt;br /&gt;
&lt;br /&gt;
== Схема БД ==&lt;br /&gt;
&lt;br /&gt;
Схема БД используется всё [[СПАСОИ_(10)_-_Лекция_№8_-_SQL#Некоторые возможности языка SQL | та же]], что была в прошлом семестре и на лекциях.&lt;br /&gt;
&lt;br /&gt;
Для написания запросов и проверки их выполнения создана БД в СУБД [http://www.postgresql.org/ PostgreSQL].&lt;br /&gt;
&lt;br /&gt;
Скрипт создания можно загрузить [http://yadi.sk/d/ArwqOGAy5pPfi отсюда].&lt;br /&gt;
&lt;br /&gt;
=== Таблицы БД ===&lt;br /&gt;
&lt;br /&gt;
==== Поставщики ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.s;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika |       imya       | sostoyanie |   gorod&lt;br /&gt;
 -------------------+------------------+------------+------------&lt;br /&gt;
  S5                | Мелисандра       |      65000 | Мадрид&lt;br /&gt;
  S2                | Бран Старк       |      60000 | Мурманск&lt;br /&gt;
  S1                | Якен Хгар        |    1500000 | Йокогама&lt;br /&gt;
  S7                | Сирио Форель     |    1500000 | Йокогама&lt;br /&gt;
  S4                | Джейме Ланнистер |     750000 | Лондон&lt;br /&gt;
  S3                | Серсея Ланнистер |    1200000 | Лондон&lt;br /&gt;
  S8                | Тирион Ланнистер |       2571 | Манчестер&lt;br /&gt;
  S9                | Иванов           |      35000 | Мытищи&lt;br /&gt;
  S10               | Русе Болтон      |      44444 | Баренцбург&lt;br /&gt;
  S11               | Петров Иван      |      35000 | Мытищи&lt;br /&gt;
  S14               | Рендилл Тарли    |    1111111 | Прага&lt;br /&gt;
  S13               | Сэмвелл Тарли    |     999999 | Прага&lt;br /&gt;
  S6                | Оша              |            | Москва&lt;br /&gt;
  S16               | Ходор            |            | Москва&lt;br /&gt;
  S15               | Мелисса Флорент  |     888888 | Стокгольм&lt;br /&gt;
  S12               | Петров Пётр      |      35001 | Мытищи&lt;br /&gt;
  S17               | Томми Версетти   |  123456789 | Майами&lt;br /&gt;
  S18               | Безликий         |          1 | Йокогама&lt;br /&gt;
 (18 rows)&lt;br /&gt;
&lt;br /&gt;
==== Детали ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.p;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_detali |       nazvanie       |     cvet      | ves  |      gorod&lt;br /&gt;
 --------------+----------------------+---------------+------+-----------------&lt;br /&gt;
  P9           | подставка            | синий         |  400 | Нижний Новгород&lt;br /&gt;
  P10          | стойка               | синий         | 2000 | Нижний Новгород&lt;br /&gt;
  P11          | абажур               | синий         |  400 | Нижний Новгород&lt;br /&gt;
  P1           | гайка                | чёрный        |   20 | Лондон&lt;br /&gt;
  P3           | ось                  | белый         | 5000 | Эдинбург&lt;br /&gt;
  P4           | зубчатое колесо      | чёрный        |   50 | Эдинбург&lt;br /&gt;
  P6           | транзистор           | коричневый    |    2 | Токио&lt;br /&gt;
  P7           | печатная плата       | зелёный       |  200 | Токио&lt;br /&gt;
  P8           | диод                 | коричневый    |    1 | Токио&lt;br /&gt;
  P12          | универсальная деталь | универсальный |    1 | Париж&lt;br /&gt;
  P13          | уникальная деталь    | уникальный    |    1 | Бостон&lt;br /&gt;
  P14          | болт                 | серый         |   20 | Ижевск&lt;br /&gt;
  P15          | рама                 | красный       | 3000 | Манчестер&lt;br /&gt;
  P16          | колесо               | белый         | 1500 | Манчестер&lt;br /&gt;
  P5           | втулка               | серый         |  350 | Манчестер&lt;br /&gt;
  P17          | бумага               | белый         |    1 | Астрахань&lt;br /&gt;
  P18          | плитка               | белый         |  300 | Флоренция&lt;br /&gt;
  P19          | орнамент             | серый         |  800 | Флоренция&lt;br /&gt;
  P20          | уголок               | серый         |  100 | Флоренция&lt;br /&gt;
  P21          | гайка 01-01          | серебристый   |   20 | Клин&lt;br /&gt;
  P22          | усиленная рама       | красный       | 3200 | Череповец&lt;br /&gt;
  P23          | винт                 | розовый       |    5 | Ижевск&lt;br /&gt;
  P24          | труселя              | красный       |   20 | Челябинск&lt;br /&gt;
  P25          | штуцерная деталь     | коричневый    |  450 | Череповец&lt;br /&gt;
  P2           | шуруп                | чёрный        |    5 | Лондон&lt;br /&gt;
  P26          | лезвие               | бесцветный    |  120 | Йокогама&lt;br /&gt;
 (26 rows)&lt;br /&gt;
&lt;br /&gt;
==== Изделия ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.j;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_izdelia |       nazvanie        |      gorod&lt;br /&gt;
 ---------------+-----------------------+-----------------&lt;br /&gt;
  J1            | автомобиль            | Магнитогорск&lt;br /&gt;
  J2            | процессор             | Зеленоград&lt;br /&gt;
  J3            | торшер                | Нижний Новгород&lt;br /&gt;
  J4            | универсальное изделие | Париж&lt;br /&gt;
  J5            | уникальное изделие    | Бостон&lt;br /&gt;
  J6            | велосипед 01/23       | Манчестер&lt;br /&gt;
  J7            | изделие из болтов     | Челябинск&lt;br /&gt;
  J8            | шкаф                  | Ярославль&lt;br /&gt;
  J9            | рама 02-01            | Череповец&lt;br /&gt;
  J10           | книга                 | Астрахань&lt;br /&gt;
  J11           | панно 01-03           | Флоренция&lt;br /&gt;
  J12           | велосипед 03-04       | Клин&lt;br /&gt;
  J13           | рама 02-03            | Череповец&lt;br /&gt;
  J14           | штуцер 01-02          | Череповец&lt;br /&gt;
  J15           | велосипед 01-04       | Клин&lt;br /&gt;
  J16           | кружевное бельё       | Челябинск&lt;br /&gt;
  J17           | штуцер 01-03          | Череповец&lt;br /&gt;
  J18           | кинжал                | Йокогама&lt;br /&gt;
 (18 rows)&lt;br /&gt;
&lt;br /&gt;
==== Сборки ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.spj;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika | nomer_detali | nomer_izdelia | kolichestvo&lt;br /&gt;
 -------------------+--------------+---------------+-------------&lt;br /&gt;
  S1                | P6           | J2            |          20&lt;br /&gt;
  S1                | P7           | J2            |           5&lt;br /&gt;
  S2                | P1           | J1            |           4&lt;br /&gt;
  S6                | P4           | J1            |           2&lt;br /&gt;
  S6                | P5           | J1            |           6&lt;br /&gt;
  S3                | P9           | J3            |           1&lt;br /&gt;
  S4                | P10          | J3            |           1&lt;br /&gt;
  S5                | P11          | J3            |           1&lt;br /&gt;
  S2                | P4           | J1            |           8&lt;br /&gt;
  S6                | P3           | J1            |          50&lt;br /&gt;
  S7                | P8           | J2            |          25&lt;br /&gt;
  S1                | P12          | J4            |           1&lt;br /&gt;
  S2                | P12          | J4            |           1&lt;br /&gt;
  S3                | P12          | J4            |           1&lt;br /&gt;
  S4                | P12          | J4            |           1&lt;br /&gt;
  S5                | P12          | J4            |           1&lt;br /&gt;
  S7                | P12          | J4            |           1&lt;br /&gt;
  S7                | P2           | J1            |           1&lt;br /&gt;
  S6                | P2           | J1            |           9&lt;br /&gt;
  S6                | P12          | J4            |           7&lt;br /&gt;
  S1                | P13          | J5            |          14&lt;br /&gt;
  S6                | P14          | J1            |        9000&lt;br /&gt;
  S2                | P14          | J1            |           3&lt;br /&gt;
  S6                | P1           | J1            |          12&lt;br /&gt;
  S8                | P15          | J6            |           1&lt;br /&gt;
  S8                | P16          | J6            |           2&lt;br /&gt;
  S3                | P5           | J6            |          10&lt;br /&gt;
  S10               | P2           | J8            |           4&lt;br /&gt;
  S8                | P1           | J7            |          16&lt;br /&gt;
  S9                | P14          | J7            |           3&lt;br /&gt;
  S11               | P10          | J3            |           2&lt;br /&gt;
  S12               | P15          | J1            |           3&lt;br /&gt;
  S11               | P11          | J3            |           4&lt;br /&gt;
  S10               | P14          | J9            |           5&lt;br /&gt;
  S13               | P17          | J10           |        1001&lt;br /&gt;
  S14               | P17          | J10           |        1111&lt;br /&gt;
  S15               | P17          | J10           |        1010&lt;br /&gt;
  S5                | P18          | J11           |           9&lt;br /&gt;
  S5                | P19          | J11           |           1&lt;br /&gt;
  S5                | P20          | J11           |           4&lt;br /&gt;
  S9                | P14          | J8            |          25&lt;br /&gt;
  S12               | P21          | J12           |          15&lt;br /&gt;
  S11               | P22          | J13           |           9&lt;br /&gt;
  S11               | P1           | J14           |          26&lt;br /&gt;
  S12               | P1           | J14           |          13&lt;br /&gt;
  S12               | P2           | J14           |          54&lt;br /&gt;
  S12               | P23          | J4            |         101&lt;br /&gt;
  S12               | P16          | J15           |          40&lt;br /&gt;
  S7                | P21          | J12           |           3&lt;br /&gt;
  S8                | P21          | J12           |           4&lt;br /&gt;
  S9                | P21          | J12           |           5&lt;br /&gt;
  S1                | P24          | J16           |           1&lt;br /&gt;
  S1                | P15          | J6            |           3&lt;br /&gt;
  S4                | P25          | J17           |           1&lt;br /&gt;
  S17               | P16          | J1            |           4&lt;br /&gt;
  S18               | P26          | J18           |           1&lt;br /&gt;
 (56 rows)&lt;br /&gt;
&lt;br /&gt;
== Готовые запросы ==&lt;br /&gt;
&lt;br /&gt;
Если видите, что тот или иной запрос можно составить короче и рациональней - смело вносите правку.&lt;br /&gt;
&lt;br /&gt;
В трёх билетах в задании на запрос встречается формулировка &amp;quot;&#039;&#039;только и только&#039;&#039;&amp;quot;. Как оказалось, это означает следующее: если холодильники поставляет &#039;&#039;только и только&#039;&#039; Уася, то:&lt;br /&gt;
# кроме Уаси никто не поставляет холодильники;&lt;br /&gt;
# Уася не поставляет ничего, кроме холодильников.&lt;br /&gt;
&lt;br /&gt;
Существующие запросы, естественно, оказались неправильными и их пришлось переписать. &amp;lt;s&amp;gt;Великий и могучий русский языка, ну что за экономия на бумаге.&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Билет 1 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера поставщиков, которые поставляют, по крайней мере, все те детали, которые поставляет поставщик с номером &#039;S2&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nomer_postavshika&lt;br /&gt;
FROM spasoi_ekz.spj SPJX&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT nomer_detali&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJY&lt;br /&gt;
                  WHERE nomer_postavshika = &#039;S2&#039;&lt;br /&gt;
                    AND NOT EXISTS (&lt;br /&gt;
                                    SELECT *&lt;br /&gt;
                                    FROM spasoi_ekz.spj&lt;br /&gt;
                                    WHERE nomer_postavshika = SPJX.nomer_postavshika&lt;br /&gt;
                                      AND nomer_detali = SPJY.nomer_detali&lt;br /&gt;
                                   )&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika&lt;br /&gt;
 -------------------&lt;br /&gt;
  S6&lt;br /&gt;
  S2&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 2 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера деталей и общее их количество для всех номеров деталей, поставляемых более чем одним поставщиком.&lt;br /&gt;
&lt;br /&gt;
Текст запроса, каким его дал Григорьев на лекции, впоследствии исправив его:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali AS &amp;quot;Номер детали&amp;quot;,&lt;br /&gt;
       SUM(kolichestvo) AS &amp;quot;Сколько штук поставляется&amp;quot;,&lt;br /&gt;
       COUNT(DISTINCT nomer_postavshika) AS &amp;quot;Сколько у неё поставщиков&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_postavshika) &amp;gt; 1;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali AS &amp;quot;Номер детали&amp;quot;,&lt;br /&gt;
       kol AS &amp;quot;Сколько штук поставляется&amp;quot;&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT nomer_detali,&lt;br /&gt;
             SUM(kolichestvo) AS kol,&lt;br /&gt;
             COUNT(DISTINCT nomer_postavshika)&lt;br /&gt;
      FROM spasoi_ekz.spj&lt;br /&gt;
      GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_postavshika) &amp;gt; 1&lt;br /&gt;
     ) A;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер детали | Сколько штук поставляется | Сколько у неё поставщиков&lt;br /&gt;
 --------------+---------------------------+---------------------------&lt;br /&gt;
  P1           |                        71 |                         5&lt;br /&gt;
  P10          |                         3 |                         2&lt;br /&gt;
  P11          |                         5 |                         2&lt;br /&gt;
  P12          |                        13 |                         7&lt;br /&gt;
  P14          |                      9036 |                         4&lt;br /&gt;
  P15          |                         7 |                         3&lt;br /&gt;
  P16          |                        46 |                         3&lt;br /&gt;
  P17          |                      3122 |                         3&lt;br /&gt;
  P2           |                        68 |                         4&lt;br /&gt;
  P21          |                        27 |                         4&lt;br /&gt;
  P4           |                        10 |                         2&lt;br /&gt;
  P5           |                        16 |                         2&lt;br /&gt;
 (12 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 3 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера поставщиков, поставляющих детали с номером &#039;P1&#039; для какого-либо изделия в количестве (в поставке) большим, чем средний объём поставок деталей с номером &#039;P2&#039; для этого изделия.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT X.nomer_postavshika &lt;br /&gt;
FROM spasoi_ekz.spj X&lt;br /&gt;
WHERE X.nomer_detali = &#039;P1&#039;&lt;br /&gt;
  AND X.kolichestvo &amp;gt; (&lt;br /&gt;
                       SELECT AVG(kolichestvo)&lt;br /&gt;
                       FROM spasoi_ekz.spj&lt;br /&gt;
                       WHERE nomer_izdelia = X.nomer_izdelia&lt;br /&gt;
                         AND nomer_detali = &#039;P2&#039;&lt;br /&gt;
                      );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но длиннее и нерациональней&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nomer_postavshika&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT *&lt;br /&gt;
      FROM spasoi_ekz.spj&lt;br /&gt;
      WHERE nomer_izdelia IN(&lt;br /&gt;
                             SELECT nomer_izdelia&lt;br /&gt;
                             FROM spasoi_ekz.spj&lt;br /&gt;
                             WHERE nomer_detali = &#039;P1&#039;&lt;br /&gt;
                            )&lt;br /&gt;
        AND nomer_izdelia IN(&lt;br /&gt;
	                     SELECT nomer_izdelia&lt;br /&gt;
	                     FROM spasoi_ekz.spj&lt;br /&gt;
	                     WHERE nomer_detali = &#039;P2&#039;&lt;br /&gt;
	                    )&lt;br /&gt;
     ) A&lt;br /&gt;
WHERE nomer_detali = &#039;P1&#039; AND kolichestvo &amp;gt;&lt;br /&gt;
(&lt;br /&gt;
 SELECT AVG(kolichestvo)&lt;br /&gt;
 FROM (&lt;br /&gt;
       SELECT *&lt;br /&gt;
       FROM spasoi_ekz.spj&lt;br /&gt;
       WHERE nomer_izdelia IN(&lt;br /&gt;
                              SELECT nomer_izdelia&lt;br /&gt;
                              FROM spasoi_ekz.spj&lt;br /&gt;
                              WHERE nomer_detali = &#039;P1&#039;&lt;br /&gt;
                             )&lt;br /&gt;
         AND nomer_izdelia IN(&lt;br /&gt;
                              SELECT nomer_izdelia&lt;br /&gt;
                              FROM spasoi_ekz.spj&lt;br /&gt;
                              WHERE nomer_detali = &#039;P2&#039;&lt;br /&gt;
                             )&lt;br /&gt;
      ) B&lt;br /&gt;
 WHERE nomer_detali = &#039;P2&#039;&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika&lt;br /&gt;
 -------------------&lt;br /&gt;
  S6&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 4 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера изделий, для которых детали поставляет только поставщик с номером ‘S1’.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_izdelia&lt;br /&gt;
FROM spasoi_ekz.spj X&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT *&lt;br /&gt;
                  FROM spasoi_ekz.spj&lt;br /&gt;
                  WHERE nomer_postavshika != &#039;S1&#039;&lt;br /&gt;
                    AND X.nomer_izdelia = nomer_izdelia&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но без EXISTS&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nomer_izdelia&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
WHERE nomer_izdelia IN(&lt;br /&gt;
                       SELECT nomer_izdelia&lt;br /&gt;
                       FROM spasoi_ekz.spj&lt;br /&gt;
                       WHERE nomer_postavshika = &#039;S1&#039;&lt;br /&gt;
                      )&lt;br /&gt;
  AND nomer_izdelia NOT IN(&lt;br /&gt;
                           SELECT nomer_izdelia&lt;br /&gt;
                           FROM spasoi_ekz.spj&lt;br /&gt;
                           WHERE nomer_postavshika != &#039;S1&#039;&lt;br /&gt;
                          );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_izdelia&lt;br /&gt;
 ---------------&lt;br /&gt;
  J5&lt;br /&gt;
  J16&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 5 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих детали с названием &amp;quot;Болт&amp;quot; в количестве (в поставке) большим, чем средний объём всех поставок деталей с номером &#039;P1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                           ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                        JOIN spasoi_ekz.p P&lt;br /&gt;
                           ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                              AND nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
WHERE kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT AVG(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                                               ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                                  AND SPJ.nomer_detali = &#039;P1&#039;&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но без JOIN&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s&lt;br /&gt;
WHERE nomer_postavshika IN (&lt;br /&gt;
                            SELECT nomer_postavshika&lt;br /&gt;
                            FROM spasoi_ekz.spj&lt;br /&gt;
                            WHERE nomer_detali = (&lt;br /&gt;
                                                  SELECT nomer_detali&lt;br /&gt;
                                                  FROM spasoi_ekz.p&lt;br /&gt;
                                                  WHERE LOWER(nazvanie) = LOWER(&#039;Болт&#039;)&lt;br /&gt;
                                                 )&lt;br /&gt;
                              AND kolichestvo &amp;gt; (&lt;br /&gt;
                                                 SELECT AVG(kolichestvo)&lt;br /&gt;
                                                 FROM spasoi_ekz.spj&lt;br /&gt;
                                                 WHERE nomer_detali = &#039;P1&#039;&lt;br /&gt;
                                                )&lt;br /&gt;
                           );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  imya&lt;br /&gt;
 ------&lt;br /&gt;
  Оша&lt;br /&gt;
  Иванов&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 6 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия деталей, поставляемых поставщиком, проживающим в том же городе, где изготавливаются эти детали, для изделия с названием ‘Велосипед 01/23’.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT P.nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                        JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                        JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
WHERE S.gorod = P.gorod&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Велосипед 01/23&#039;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос без JOIN&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nazvanie&lt;br /&gt;
FROM spasoi_ekz.S S, spasoi_ekz.p P, spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE S.gorod = P.gorod&lt;br /&gt;
  AND P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
  AND S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
  AND nomer_izdelia = (&lt;br /&gt;
                       SELECT nomer_izdelia&lt;br /&gt;
                       FROM spasoi_ekz.j&lt;br /&gt;
                       WHERE nazvanie = LOWER(&#039;Велосипед 01/23&#039;)&lt;br /&gt;
                      );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nazvanie&lt;br /&gt;
 ----------&lt;br /&gt;
  рама&lt;br /&gt;
  колесо&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 7 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия изделий, куда входят детали с названием &#039;Болт&#039;, поставляемых поставщиками с именем &#039;Иванов&#039;, в количестве (в поставке) большим, чем средний объём поставок для этого изделия.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT J.nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                        JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                        JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
WHERE imya LIKE &#039;%Иванов%&#039;&lt;br /&gt;
  AND P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
  AND kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT AVG(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj X&lt;br /&gt;
                     WHERE SPJ.nomer_izdelia = X.nomer_izdelia&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё один вариант запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie&lt;br /&gt;
FROM spasoi_ekz.j&lt;br /&gt;
WHERE nomer_izdelia IN (&lt;br /&gt;
                        SELECT nomer_izdelia&lt;br /&gt;
                        FROM (spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                                                   ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                                                      AND imya LIKE &#039;%Иванов%&#039;&lt;br /&gt;
                                                 JOIN spasoi_ekz.p P&lt;br /&gt;
                                                   ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                                      AND nazvanie = LOWER(&#039;Болт&#039;)) A&lt;br /&gt;
                        WHERE kolichestvo &amp;gt; (&lt;br /&gt;
                                             SELECT AVG(kolichestvo)&lt;br /&gt;
                                             FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                                                       ON SPJ.nomer_izdelia = A.nomer_izdelia&lt;br /&gt;
                                            )&lt;br /&gt;
                       );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;И ещё вариант этого же запроса, но длиннее и нерациональней&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT J.nazvanie, kolichestvo&lt;br /&gt;
      FROM spasoi_ekz.s S, spasoi_ekz.p P, spasoi_ekz.j J, spasoi_ekz.spj SPJ&lt;br /&gt;
      WHERE J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
        AND P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
        AND P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
        AND S.imya LIKE &#039;%Иванов%&#039;&lt;br /&gt;
        AND S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
     ) A&lt;br /&gt;
WHERE kolichestvo &amp;gt;&lt;br /&gt;
(&lt;br /&gt;
 SELECT AVG(kolichestvo)&lt;br /&gt;
 FROM spasoi_ekz.spj&lt;br /&gt;
 WHERE nomer_izdelia IN(&lt;br /&gt;
                        SELECT J.nomer_izdelia&lt;br /&gt;
                        FROM spasoi_ekz.s S, spasoi_ekz.p P, spasoi_ekz.j J, spasoi_ekz.spj SPJ&lt;br /&gt;
                        WHERE J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
                          AND P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                          AND P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
                          AND S.imya LIKE &#039;%Иванов%&#039;&lt;br /&gt;
                          AND S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
                       )&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
      nazvanie&lt;br /&gt;
 -------------------&lt;br /&gt;
  шкаф&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 8 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера изделий и общее количество деталей для них, поставляемых поставщиками с именем &#039;Петров&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_izdelia AS &amp;quot;Номер изделия&amp;quot;, SUM(kolichestvo) AS &amp;quot;Количество деталей&amp;quot; &lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                             -- так как &amp;quot;поставщикАМИ&amp;quot; и возможны&lt;br /&gt;
                             -- Иван Петров и Петров Иван, то LIKE %Петров%&lt;br /&gt;
                             AND imya LIKE &#039;%Петров%&#039;&lt;br /&gt;
GROUP BY nomer_izdelia;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер изделия | Количество деталей&lt;br /&gt;
 ---------------+--------------------&lt;br /&gt;
  J4            |                101&lt;br /&gt;
  J3            |                  6&lt;br /&gt;
  J13           |                  9&lt;br /&gt;
  J15           |                 40&lt;br /&gt;
  J1            |                  3&lt;br /&gt;
  J12           |                 15&lt;br /&gt;
  J14           |                 93&lt;br /&gt;
 (7 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 9 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера деталей и общее их количество для всех номеров деталей, которые входят только в одно изделие.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali, SUM(kolichestvo)&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_izdelia) = 1;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali, kol FROM (&lt;br /&gt;
       SELECT nomer_detali, SUM(kolichestvo) AS kol, COUNT(DISTINCT nomer_izdelia) = 1&lt;br /&gt;
       FROM spasoi_ekz.spj&lt;br /&gt;
       GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_izdelia) = 1&lt;br /&gt;
    ) A;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_detali | sum&lt;br /&gt;
 --------------+------&lt;br /&gt;
  P10          |    3&lt;br /&gt;
  P11          |    5&lt;br /&gt;
  P12          |   13&lt;br /&gt;
  P13          |   14&lt;br /&gt;
  P17          | 3122&lt;br /&gt;
  P18          |    9&lt;br /&gt;
  P19          |    1&lt;br /&gt;
  P20          |    4&lt;br /&gt;
  P21          |   27&lt;br /&gt;
  P22          |    9&lt;br /&gt;
  P23          |  101&lt;br /&gt;
  P24          |    1&lt;br /&gt;
  P25          |    1&lt;br /&gt;
  P26          |    1&lt;br /&gt;
  P3           |   50&lt;br /&gt;
  P4           |   10&lt;br /&gt;
  P6           |   20&lt;br /&gt;
  P7           |    5&lt;br /&gt;
  P8           |   25&lt;br /&gt;
  P9           |    1&lt;br /&gt;
 (20 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 10 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих детали с названием &#039;Болт&#039; для изделия с названием &#039;Рама 02-01&#039; в количестве (в поставке) большим, чем минимальное значение поставки детали с номером &#039;P1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
			   ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
			      AND J.nazvanie = LOWER(&#039;Рама 02-01&#039;)&lt;br /&gt;
			 JOIN spasoi_ekz.p P&lt;br /&gt;
			   ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
			      AND P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
			 JOIN spasoi_ekz.s S&lt;br /&gt;
			   ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE kolichestvo &amp;gt; (&lt;br /&gt;
		     SELECT MIN(kolichestvo)&lt;br /&gt;
		     FROM spasoi_ekz.spj &lt;br /&gt;
		     spj.nomer_detali = &#039;P1&#039;&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Русе Болтон&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 11 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия городов и суммарное состояние проживающих в каждом городе поставщиков, у которых минимальный объём поставки деталей больше 1000.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT s.gorod, SUM(s.sostoyanie)&lt;br /&gt;
FROM spasoi_ekz.sWHERE (	SELECT MIN(kolichestvo)	FROM spasoi_ekz.spj X	WHERE X.nomer_postavshika = s.nomer_postavshika		) &amp;gt; 1000GROUP BY s.gorod;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT gorod, SUM(sostoyanie)&lt;br /&gt;
FROM spasoi_ekz.s&lt;br /&gt;
WHERE nomer_postavshika IN (&lt;br /&gt;
                            SELECT nomer_postavshika&lt;br /&gt;
                            FROM spasoi_ekz.spj&lt;br /&gt;
                            GROUP BY nomer_postavshika HAVING MIN(kolichestvo) &amp;gt; 1000&lt;br /&gt;
                           )&lt;br /&gt;
GROUP BY gorod;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;!-- этот запрос выполняет не совсем то и не правильно&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT gorod, sost&lt;br /&gt;
FROM (&lt;br /&gt;
SELECT gorod, SUM(sostoyanie) AS sost, SUM(SPJ.kolichestvo)&lt;br /&gt;
FROM spasoi_ekz.spj, spasoi_ekz.s&lt;br /&gt;
WHERE S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
GROUP BY S.gorod HAVING SUM(SPJ.kolichestvo) &amp;gt; 1000&lt;br /&gt;
) A;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; --&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
    gorod   |   sum&lt;br /&gt;
 -----------+---------&lt;br /&gt;
  Прага     | 2111110&lt;br /&gt;
  Стокгольм |  888888&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 12 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера деталей, поставляемых для какого-либо изделия поставщиком, проживающим в том же городе, где изготавливается это изделие.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali&lt;br /&gt;
FROM spasoi_ekz.spj SPJ, spasoi_ekz.s S, spasoi_ekz.j J&lt;br /&gt;
WHERE SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
  AND S.gorod = J.gorod&lt;br /&gt;
  AND J.nomer_izdelia = SPJ.nomer_izdelia;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_detali&lt;br /&gt;
 --------------&lt;br /&gt;
  P15&lt;br /&gt;
  P16&lt;br /&gt;
  P26&lt;br /&gt;
 (3 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 13 ===&lt;br /&gt;
&lt;br /&gt;
Написать &amp;lt;u&amp;gt;один&amp;lt;/u&amp;gt; запрос SELECT: выдать количества строк в таблице S (Поставщик) 1) с пустыми значениями и 2) непустыми значениями в столбце Состояние.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT COUNT(nomer_postavshika) - COUNT(sostoyanie) AS &amp;quot;С пустым состоянием&amp;quot;, &lt;br /&gt;
       COUNT(sostoyanie) AS &amp;quot;С не пустым состоянием&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.s;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но длиннее и нерациональней&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SELECT COUNT(Snull.*) AS &amp;quot;С пустым состоянием&amp;quot;, COUNT(Snotnull.sostoyanie) AS &amp;quot;С не пустым состоянием&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.s Snull RIGHT OUTER JOIN spasoi_ekz.s Snotnull&lt;br /&gt;
                                      ON Snull.nomer_postavshika = Snotnull.nomer_postavshika&lt;br /&gt;
                                         AND Snull.sostoyanie IS NULL;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  С пустым состоянием | С не пустым состоянием&lt;br /&gt;
 ---------------------+-----------------------&lt;br /&gt;
                    2 |                    16&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 14 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют детали только и только для изделия с номером &#039;J1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj A JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON A.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE nomer_izdelia = &#039;J1&#039;&lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT nomer_postavshika&lt;br /&gt;
                  FROM spasoi_ekz.spj&lt;br /&gt;
                  WHERE nomer_izdelia != &#039;J1&#039;&lt;br /&gt;
                    AND nomer_postavshika = A.nomer_postavshika&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       imya&lt;br /&gt;
 ----------------&lt;br /&gt;
  Томми Версетти&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 15 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать наименования изделий, для которых детали поставляют только те поставщики, у которых состояние больше 1000000 у.е.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                        JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
WHERE sostoyanie &amp;gt; 1000000&lt;br /&gt;
  AND SPJ.nomer_izdelia NOT IN (&lt;br /&gt;
                                SELECT nomer_izdelia&lt;br /&gt;
                                FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                                                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                                WHERE sostoyanie &amp;lt; 1000000&lt;br /&gt;
                               );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       nazvanie&lt;br /&gt;
 --------------------&lt;br /&gt;
  кружевное бельё&lt;br /&gt;
  уникальное изделие&lt;br /&gt;
  процессор&lt;br /&gt;
 (3 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 16 ===&lt;br /&gt;
Написать запрос SELECT: выдать цвета и для каждого цвета общее количество деталей, входящих в изделие с названием &#039;Панно 01-03&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT cvet AS &amp;quot;Цвет&amp;quot;, SUM(kolichestvo) AS &amp;quot;Деталей&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
			     AND J.nazvanie = LOWER(&#039;Панно 01-03&#039;)&lt;br /&gt;
			JOIN spasoi_ekz.P P&lt;br /&gt;
			  ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
GROUP BY cvet;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Цвет  | Деталей&lt;br /&gt;
 -------+---------&lt;br /&gt;
  белый |       9&lt;br /&gt;
  серый |       5&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 17 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера поставщиков и количество сделанных ими поставок при условии, что среднее число деталей во всех этих поставках больше 1000.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nom AS &amp;quot;Номер поставщика&amp;quot;, cnt AS &amp;quot;Количество поставок&amp;quot;&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT S.nomer_postavshika AS nom,&lt;br /&gt;
             COUNT(SPJ.nomer_postavshika) AS cnt,&lt;br /&gt;
             AVG(SPJ.kolichestvo) AS kol&lt;br /&gt;
      FROM spasoi_ekz.s S, spasoi_ekz.spj SPJ&lt;br /&gt;
      WHERE S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
      GROUP BY S.nomer_postavshika&lt;br /&gt;
     ) A&lt;br /&gt;
WHERE kol &amp;gt; 1000;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос немного попроще&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_postavshika AS &amp;quot;Номер поставщика&amp;quot;, COUNT(*) AS &amp;quot;Количество поставок&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
WHERE nomer_postavshika IN (&lt;br /&gt;
                            SELECT nomer_postavshika&lt;br /&gt;
                            FROM spasoi_ekz.spj&lt;br /&gt;
                            GROUP BY nomer_postavshika HAVING AVG(kolichestvo) &amp;gt; 1000&lt;br /&gt;
                           )&lt;br /&gt;
GROUP BY nomer_postavshika;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер поставщика | Количество поставок&lt;br /&gt;
 ------------------+---------------------&lt;br /&gt;
  S13              |                   1&lt;br /&gt;
  S6               |                   7&lt;br /&gt;
  S14              |                   1&lt;br /&gt;
  S15              |                   1&lt;br /&gt;
 (4 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 18 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, имеющих состояние больше 1000 и поставляющих деталь с названием &#039;Гайка 01-01&#039; для изделия с названием &#039;Велосипед 03-04&#039; в количестве (в поставке) большим, чем средний объём поставки, выполненной поставщиками с именем &#039;Иванов&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:2nd dufficulty.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;5px&amp;quot;&amp;gt;&#039;&#039;&#039;Второй по сложности запрос экзамена!&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;4px&amp;quot;&amp;gt;&#039;&#039;&#039;Вот уж не свезло, так не свезло&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                    JOIN spasoi_ekz.j J&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
WHERE sostoyanie &amp;gt; 1000&lt;br /&gt;
  AND P.nazvanie = LOWER(&#039;Гайка 01-01&#039;)&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Велосипед 03-04&#039;)&lt;br /&gt;
  AND kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT AVG(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                       ON SPJ.nomer_postavshika = S.nomer_postavshika &lt;br /&gt;
                     WHERE S.imya = &#039;Иванов&#039;&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Пётр&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 19 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия красных деталей, которые входят только в изделие с названием &#039;Рама 02-03&#039; в количестве, меньшем 10 единиц в поставке.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT X.nazvanie&lt;br /&gt;
FROM spasoi_ekz.p X JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_detali = X.nomer_detali&lt;br /&gt;
                    JOIN spasoi_ekz.j J&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
WHERE X.cvet = &#039;красный&#039;&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Рама 02-03&#039;)&lt;br /&gt;
  AND kolichestvo &amp;lt; 10&lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT J.nomer_izdelia&lt;br /&gt;
                  FROM spasoi_ekz.j J JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                                        ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                  WHERE J.nazvanie != LOWER(&#039;Рама 02-03&#039;)&lt;br /&gt;
                    AND X.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант этого же запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT P.nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND cvet = &#039;красный&#039;&lt;br /&gt;
                        JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                              AND J.nazvanie = LOWER(&#039;Рама 02-03&#039;)&lt;br /&gt;
WHERE kolichestvo &amp;lt; 10&lt;br /&gt;
  AND SPJ.nomer_detali NOT IN (&lt;br /&gt;
                               SELECT nomer_detali&lt;br /&gt;
                               FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                                         ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                                                            AND J.nazvanie != LOWER(&#039;Рама 02-03&#039;)&lt;br /&gt;
                              );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     nazvanie&lt;br /&gt;
 ----------------&lt;br /&gt;
  усиленная рама&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 20 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих только белые детали.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
WHERE cvet = &#039;белый&#039;&lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT nomer_postavshika&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                                            ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                  WHERE nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    AND P.cvet != &#039;белый&#039;&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё один вариант этого же запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND cvet = &#039;белый&#039;&lt;br /&gt;
                        JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE S.nomer_postavshika NOT IN (&lt;br /&gt;
                                  SELECT nomer_postavshika&lt;br /&gt;
                                  FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                                                            ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                                               AND cvet != &#039;белый&#039;&lt;br /&gt;
                                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;И ещё один вариант этого же запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s&lt;br /&gt;
WHERE nomer_postavshika NOT IN  (&lt;br /&gt;
                                 SELECT spj.nomer_postavshika&lt;br /&gt;
                                 FROM spasoi_ekz.spj SPJ, spasoi_ekz.p P&lt;br /&gt;
                                 WHERE SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                   AND p.cvet != &#039;белый&#039;&lt;br /&gt;
                                )&lt;br /&gt;
  AND nomer_postavshika  IN (&lt;br /&gt;
                             SELECT spj.nomer_postavshika&lt;br /&gt;
                             FROM spasoi_ekz.spj SPJ, spasoi_ekz.p P&lt;br /&gt;
                             WHERE SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                               AND p.cvet = &#039;белый&#039;&lt;br /&gt;
                            );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       imya&lt;br /&gt;
 -----------------&lt;br /&gt;
  Рендилл Тарли&lt;br /&gt;
  Сэмвелл Тарли&lt;br /&gt;
  Мелисса Флорент&lt;br /&gt;
  Томми Версетти&lt;br /&gt;
 (4 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 21 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия изделий, для которых детали поставляет только и только поставщик с номером &#039;S1&#039;.&lt;br /&gt;
&lt;br /&gt;
Чтобы продемонстрировать выполнение запроса наглядно, возьмём поставщика не &#039;S1&#039;, а &#039;S18&#039;, который был создан специально для этого запроса. Если оставить &#039;S1&#039;, то наглядности не получится, так как по нашей схеме БД этот поставщик не попадает под условие &amp;quot;&#039;&#039;только и только&#039;&#039;&amp;quot;, и запрос вернёт пустой результат.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie&lt;br /&gt;
FROM spasoi_ekz.j J, spasoi_ekz.SPJ SPJ&lt;br /&gt;
WHERE J.nomer_izdelia = SPJ.nomer_izdelia &lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT *&lt;br /&gt;
                  FROM spasoi_ekz.spj&lt;br /&gt;
                  WHERE nomer_postavshika != &#039;S18&#039; AND nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                 )&lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT *&lt;br /&gt;
                  FROM spasoi_ekz.spj&lt;br /&gt;
                  WHERE nomer_postavshika = &#039;S18&#039; AND nomer_izdelia != J.nomer_izdelia&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       nazvanie&lt;br /&gt;
 --------------------&lt;br /&gt;
  кинжал&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 22 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют только детали с номером &#039;P1&#039; для изделия с именем &#039;Штуцер 01-02&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- неверный запрос - номер изделия, а не название&lt;br /&gt;
SELECT imya FROM S X&lt;br /&gt;
JOIN SPJ Y ON X.nomer_postavshika=Y.nomer_postavshika&lt;br /&gt;
WHERE X.nomer_postavshika NOT IN (&lt;br /&gt;
                  SELECT DISTINCT nomer_postavshika FROM SPJ Z&lt;br /&gt;
                  WHERE Z.nomer_izdelia != &#039;Штуцер 01-02&#039;&lt;br /&gt;
                  AND Z.nomer_detali!=&#039;P1&#039;);--&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                             AND J.nazvanie = LOWER(&#039;штуцер 01-02&#039;)&lt;br /&gt;
                        JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND SPJ.nomer_detali = &#039;P1&#039;&lt;br /&gt;
                        JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE SPJ.nomer_postavshika NOT IN (&lt;br /&gt;
                                    SELECT nomer_postavshika&lt;br /&gt;
                                    FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                                              ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                                                                 AND J.nazvanie = LOWER(&#039;штуцер 01-02&#039;)&lt;br /&gt;
                                                            JOIN spasoi_ekz.p P&lt;br /&gt;
                                                              ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                                                 AND SPJ.nomer_detali != &#039;P1&#039;&lt;br /&gt;
                              );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Иван&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 23 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют деталь с названием &#039;Винт&#039; в количестве большим 100 единиц в одной поставке и имеют состояние больше среднего по их родному городу.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT S.imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
WHERE P.nazvanie = LOWER(&#039;Винт&#039;)&lt;br /&gt;
  AND SPJ.kolichestvo &amp;gt; 100&lt;br /&gt;
  AND S.sostoyanie &amp;gt; (&lt;br /&gt;
                      SELECT AVG(SS.sostoyanie)&lt;br /&gt;
                      FROM spasoi_ekz.s SS&lt;br /&gt;
                      WHERE SS.gorod = S.gorod&lt;br /&gt;
                     );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Пётр&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 24 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать наименования деталей и общее их количество для всех наименований деталей, изготавливаемых в одном городе.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- С этим запросом возникла неожиданная проблема - задание то ли неполное, то ли неправильное, потому что нельзя однозначно сказать, что по нему требуется сделать.&lt;br /&gt;
&lt;br /&gt;
Так что тут несколько вариантов запросов (кто как понял).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Первый вариант запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie, kol&lt;br /&gt;
FROM spasoi_ekz.p A, (&lt;br /&gt;
                      SELECT X.gorod, SUM(kolichestvo) as kol&lt;br /&gt;
                      FROM spasoi_ekz.p X, spasoi_ekz.spj Y&lt;br /&gt;
                      WHERE Y.nomer_detali = X.nomer_detali&lt;br /&gt;
                      GROUP BY X.gorod&lt;br /&gt;
                     ) B&lt;br /&gt;
WHERE A.gorod = B.gorod;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
        nazvanie       | kol&lt;br /&gt;
 ----------------------+------&lt;br /&gt;
  подставка            |    9&lt;br /&gt;
  стойка               |    9&lt;br /&gt;
  абажур               |    9&lt;br /&gt;
  гайка                |  139&lt;br /&gt;
  ось                  |   60&lt;br /&gt;
  зубчатое колесо      |   60&lt;br /&gt;
  транзистор           |   50&lt;br /&gt;
  печатная плата       |   50&lt;br /&gt;
  диод                 |   50&lt;br /&gt;
  универсальная деталь |   13&lt;br /&gt;
  уникальная деталь    |   14&lt;br /&gt;
  болт                 | 9137&lt;br /&gt;
  рама                 |   69&lt;br /&gt;
  колесо               |   69&lt;br /&gt;
  втулка               |   69&lt;br /&gt;
  бумага               | 3122&lt;br /&gt;
  плитка               |   14&lt;br /&gt;
  орнамент             |   14&lt;br /&gt;
  уголок               |   14&lt;br /&gt;
  гайка 01-01          |   27&lt;br /&gt;
  усиленная рама       |   10&lt;br /&gt;
  винт                 | 9137&lt;br /&gt;
  труселя              |    1&lt;br /&gt;
  штуцерная деталь     |   10&lt;br /&gt;
  шуруп                |  139&lt;br /&gt;
 (25 rows)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
и --&amp;gt;&lt;br /&gt;
В уточнение задания Григорьев сказал следующее: &amp;quot;&#039;&#039;Следует учесть, что в качестве наименования города может выступать переменная, в которую в некоторой программе должно быть занесено конкретное значение перед выполнением запроса&#039;&#039;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
То есть, вообще говоря, задание на запрос неполное, и его можно трактовать так: выдать наименования деталей и общее их количество для всех наименований деталей, изготавливаемых в городе &amp;lt;code&amp;gt;%НАЗВАНИЕГОРОДА%&amp;lt;/code&amp;gt;. Вот эта переменная задаётся где-то в программе, а в БД идёт запрос с уже подставленным конкретным названием. &lt;br /&gt;
&lt;br /&gt;
Этот вариант запроса составлен, например, для Лондона. &lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie, SUM(kolichestvo)&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
WHERE gorod = &#039;Лондон&#039;&lt;br /&gt;
GROUP BY nazvanie;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nazvanie | sum&lt;br /&gt;
 ----------+-----&lt;br /&gt;
  гайка    |  71&lt;br /&gt;
  шуруп    |  68&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 25 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих хотя бы одну белую деталь для изделия с названием &#039;Велосипед 01-04&#039; с объёмом поставки большим, чем средний объём поставки этого поставщика.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                    JOIN spasoi_ekz.j J&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
WHERE cvet = &#039;белый&#039;&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Велосипед 01-04&#039;)&lt;br /&gt;
  AND kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT AVG(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj SPJ&lt;br /&gt;
                     WHERE SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Пётр&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 26 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера красных деталей и количество поставок этих деталей.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT P.nomer_detali AS &amp;quot;Номер детали&amp;quot;, COUNT(kolichestvo) AS &amp;quot;Количество поставок с ней&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.p P, spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
  AND cvet = &#039;красный&#039;&lt;br /&gt;
GROUP BY P.nomer_detali;   &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос через JOIN&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT SPJ.nomer_detali AS &amp;quot;Номер детали&amp;quot;, COUNT(kolichestvo) AS &amp;quot;Количество поставок с ней&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND cvet = &#039;красный&#039;&lt;br /&gt;
GROUP BY SPJ.nomer_detali;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер детали | Количество поставок с ней&lt;br /&gt;
 --------------+---------------------------&lt;br /&gt;
  P15          |                         3&lt;br /&gt;
  P22          |                         1&lt;br /&gt;
  P24          |                         1&lt;br /&gt;
 (3 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 27 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать наименования городов и среднее состояние поставщиков для каждого города, поставляющих детали с названием &#039;Гайка 01-01&#039; для изделия с названием &#039;Велосипед 03-04&#039; в количестве (в поставке) большим, чем минимальный объём поставки, выполненной поставщиком с номером &#039;S1&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:1st dufficulty.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;7px&amp;quot;&amp;gt;&#039;&#039;&#039;Сложнейший запрос экзамена!&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;5px&amp;quot;&amp;gt;&#039;&#039;&#039;Сохрани Джа, вытащить такое&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT S.gorod AS &amp;quot;Город&amp;quot;, AVG(S.sostoyanie) AS &amp;quot;Среднее состояние&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                    JOIN spasoi_ekz.j J&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
WHERE P.nazvanie = LOWER(&#039;Гайка 01-01&#039;)&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Велосипед 03-04&#039;)&lt;br /&gt;
  AND kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT MIN(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj&lt;br /&gt;
                     WHERE nomer_postavshika = &#039;S1&#039;&lt;br /&gt;
                    )&lt;br /&gt;
GROUP BY S.gorod;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
    Город   |   Среднее состояние&lt;br /&gt;
 -----------+-----------------------&lt;br /&gt;
  Мытищи    |    35000.500000000000&lt;br /&gt;
  Йокогама  |  1500000.000000000000&lt;br /&gt;
  Манчестер | 2571.0000000000000000&lt;br /&gt;
 (3 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 28 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия изделий, куда входит хотя бы одна красная деталь весом больше 10 граммов, поставляемая только поставщиком с номером &#039;S1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT J.nazvanie&lt;br /&gt;
FROM spasoi_ekz.j J JOIN spasoi_ekz.spj SPJ1&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ1.nomer_izdelia&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ1.nomer_detali&lt;br /&gt;
WHERE P.ves &amp;gt; 10&lt;br /&gt;
 AND P.cvet = &#039;красный&#039;&lt;br /&gt;
 AND NOT EXISTS (&lt;br /&gt;
                 SELECT SPJ2.nomer_postavshika&lt;br /&gt;
                 FROM spasoi_ekz.spj SPJ2         &lt;br /&gt;
                 WHERE SPJ2.nomer_detali = P.nomer_detali&lt;br /&gt;
	 	   AND SPJ2.nomer_postavshika != &#039;S1&#039;&lt;br /&gt;
                );                     &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     nazvanie&lt;br /&gt;
 -----------------&lt;br /&gt;
  кружевное бельё&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 29 ===&lt;br /&gt;
Написать запрос SELECT: выдать названия деталей, которые входят только и только в состав изделия с названием &#039;Штуцер 01-03&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie&lt;br /&gt;
FROM spasoi_ekz.p P, spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE P.nomer_detali = SPJ.nomer_detali &lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT SPJ.nomer_izdelia&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                            ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
                  WHERE (&lt;br /&gt;
                         J.nazvanie != LOWER(&#039;Штуцер 01-03&#039;)&lt;br /&gt;
                         AND&lt;br /&gt;
                         SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                        )&lt;br /&gt;
                     OR (&lt;br /&gt;
                         J.nazvanie = LOWER(&#039;Штуцер 01-03&#039;)&lt;br /&gt;
                         AND&lt;br /&gt;
                         SPJ.nomer_detali != P.nomer_detali&lt;br /&gt;
                        )&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
      nazvanie&lt;br /&gt;
 ------------------&lt;br /&gt;
  штуцерная деталь&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 30 ===&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют, по крайней мере, все те детали, которые поставляет поставщик с номером &#039;S2&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT imya&lt;br /&gt;
FROM spasoi_ekz.s S&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT nomer_detali&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJY&lt;br /&gt;
                  WHERE nomer_postavshika = &#039;S2&#039;&lt;br /&gt;
                    AND NOT EXISTS (&lt;br /&gt;
                                    SELECT *&lt;br /&gt;
                                    FROM spasoi_ekz.spj&lt;br /&gt;
                                    WHERE nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                                      AND nomer_detali = SPJY.nomer_detali&lt;br /&gt;
                                   )&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  imya&lt;br /&gt;
 ------------&lt;br /&gt;
  Оша&lt;br /&gt;
  Бран Старк&lt;br /&gt;
 (2 rows)&lt;br /&gt;
[[Категория:Структурное проектирование АСОИ (10 семестр)]]&lt;/div&gt;</summary>
		<author><name>81.9.52.28</name></author>
	</entry>
	<entry>
		<id>https://iu5bmstu.ru/index.php?title=SQL-%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D1%8B_%D0%BA_%D1%8D%D0%BA%D0%B7%D0%B0%D0%BC%D0%B5%D0%BD%D1%83_%D0%BF%D0%BE_%D0%A1%D0%9F%D0%90%D0%A1%D0%9E%D0%98_(10_%D1%81%D0%B5%D0%BC%D0%B5%D1%81%D1%82%D1%80)&amp;diff=3832</id>
		<title>SQL-запросы к экзамену по СПАСОИ (10 семестр)</title>
		<link rel="alternate" type="text/html" href="https://iu5bmstu.ru/index.php?title=SQL-%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D1%8B_%D0%BA_%D1%8D%D0%BA%D0%B7%D0%B0%D0%BC%D0%B5%D0%BD%D1%83_%D0%BF%D0%BE_%D0%A1%D0%9F%D0%90%D0%A1%D0%9E%D0%98_(10_%D1%81%D0%B5%D0%BC%D0%B5%D1%81%D1%82%D1%80)&amp;diff=3832"/>
		<updated>2013-06-14T20:54:12Z</updated>

		<summary type="html">&lt;p&gt;81.9.52.28: /* Билет 10 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right; clear:both; margin-right:1.0em;&amp;quot;&amp;gt;__TOC__&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Билет экзамена по [[:Категория:Структурное проектирование АСОИ (10 семестр) | СПАСОИ]] состоит из двух частей:&lt;br /&gt;
# теория;&lt;br /&gt;
# SQL-запрос.&lt;br /&gt;
&lt;br /&gt;
На этой странице собраны все сформированные запросы по билетам.&lt;br /&gt;
&lt;br /&gt;
Странно, что ни в одном билете нет запроса с сортировкой результатов. Возможно, они буду в дополнительных заданиях.&lt;br /&gt;
&lt;br /&gt;
== Схема БД ==&lt;br /&gt;
&lt;br /&gt;
Схема БД используется всё [[СПАСОИ_(10)_-_Лекция_№8_-_SQL#Некоторые возможности языка SQL | та же]], что была в прошлом семестре и на лекциях.&lt;br /&gt;
&lt;br /&gt;
Для написания запросов и проверки их выполнения создана БД в СУБД [http://www.postgresql.org/ PostgreSQL].&lt;br /&gt;
&lt;br /&gt;
Скрипт создания можно загрузить [http://yadi.sk/d/ArwqOGAy5pPfi отсюда].&lt;br /&gt;
&lt;br /&gt;
=== Таблицы БД ===&lt;br /&gt;
&lt;br /&gt;
==== Поставщики ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.s;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika |       imya       | sostoyanie |   gorod&lt;br /&gt;
 -------------------+------------------+------------+------------&lt;br /&gt;
  S5                | Мелисандра       |      65000 | Мадрид&lt;br /&gt;
  S2                | Бран Старк       |      60000 | Мурманск&lt;br /&gt;
  S1                | Якен Хгар        |    1500000 | Йокогама&lt;br /&gt;
  S7                | Сирио Форель     |    1500000 | Йокогама&lt;br /&gt;
  S4                | Джейме Ланнистер |     750000 | Лондон&lt;br /&gt;
  S3                | Серсея Ланнистер |    1200000 | Лондон&lt;br /&gt;
  S8                | Тирион Ланнистер |       2571 | Манчестер&lt;br /&gt;
  S9                | Иванов           |      35000 | Мытищи&lt;br /&gt;
  S10               | Русе Болтон      |      44444 | Баренцбург&lt;br /&gt;
  S11               | Петров Иван      |      35000 | Мытищи&lt;br /&gt;
  S14               | Рендилл Тарли    |    1111111 | Прага&lt;br /&gt;
  S13               | Сэмвелл Тарли    |     999999 | Прага&lt;br /&gt;
  S6                | Оша              |            | Москва&lt;br /&gt;
  S16               | Ходор            |            | Москва&lt;br /&gt;
  S15               | Мелисса Флорент  |     888888 | Стокгольм&lt;br /&gt;
  S12               | Петров Пётр      |      35001 | Мытищи&lt;br /&gt;
  S17               | Томми Версетти   |  123456789 | Майами&lt;br /&gt;
  S18               | Безликий         |          1 | Йокогама&lt;br /&gt;
 (18 rows)&lt;br /&gt;
&lt;br /&gt;
==== Детали ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.p;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_detali |       nazvanie       |     cvet      | ves  |      gorod&lt;br /&gt;
 --------------+----------------------+---------------+------+-----------------&lt;br /&gt;
  P9           | подставка            | синий         |  400 | Нижний Новгород&lt;br /&gt;
  P10          | стойка               | синий         | 2000 | Нижний Новгород&lt;br /&gt;
  P11          | абажур               | синий         |  400 | Нижний Новгород&lt;br /&gt;
  P1           | гайка                | чёрный        |   20 | Лондон&lt;br /&gt;
  P3           | ось                  | белый         | 5000 | Эдинбург&lt;br /&gt;
  P4           | зубчатое колесо      | чёрный        |   50 | Эдинбург&lt;br /&gt;
  P6           | транзистор           | коричневый    |    2 | Токио&lt;br /&gt;
  P7           | печатная плата       | зелёный       |  200 | Токио&lt;br /&gt;
  P8           | диод                 | коричневый    |    1 | Токио&lt;br /&gt;
  P12          | универсальная деталь | универсальный |    1 | Париж&lt;br /&gt;
  P13          | уникальная деталь    | уникальный    |    1 | Бостон&lt;br /&gt;
  P14          | болт                 | серый         |   20 | Ижевск&lt;br /&gt;
  P15          | рама                 | красный       | 3000 | Манчестер&lt;br /&gt;
  P16          | колесо               | белый         | 1500 | Манчестер&lt;br /&gt;
  P5           | втулка               | серый         |  350 | Манчестер&lt;br /&gt;
  P17          | бумага               | белый         |    1 | Астрахань&lt;br /&gt;
  P18          | плитка               | белый         |  300 | Флоренция&lt;br /&gt;
  P19          | орнамент             | серый         |  800 | Флоренция&lt;br /&gt;
  P20          | уголок               | серый         |  100 | Флоренция&lt;br /&gt;
  P21          | гайка 01-01          | серебристый   |   20 | Клин&lt;br /&gt;
  P22          | усиленная рама       | красный       | 3200 | Череповец&lt;br /&gt;
  P23          | винт                 | розовый       |    5 | Ижевск&lt;br /&gt;
  P24          | труселя              | красный       |   20 | Челябинск&lt;br /&gt;
  P25          | штуцерная деталь     | коричневый    |  450 | Череповец&lt;br /&gt;
  P2           | шуруп                | чёрный        |    5 | Лондон&lt;br /&gt;
  P26          | лезвие               | бесцветный    |  120 | Йокогама&lt;br /&gt;
 (26 rows)&lt;br /&gt;
&lt;br /&gt;
==== Изделия ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.j;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_izdelia |       nazvanie        |      gorod&lt;br /&gt;
 ---------------+-----------------------+-----------------&lt;br /&gt;
  J1            | автомобиль            | Магнитогорск&lt;br /&gt;
  J2            | процессор             | Зеленоград&lt;br /&gt;
  J3            | торшер                | Нижний Новгород&lt;br /&gt;
  J4            | универсальное изделие | Париж&lt;br /&gt;
  J5            | уникальное изделие    | Бостон&lt;br /&gt;
  J6            | велосипед 01/23       | Манчестер&lt;br /&gt;
  J7            | изделие из болтов     | Челябинск&lt;br /&gt;
  J8            | шкаф                  | Ярославль&lt;br /&gt;
  J9            | рама 02-01            | Череповец&lt;br /&gt;
  J10           | книга                 | Астрахань&lt;br /&gt;
  J11           | панно 01-03           | Флоренция&lt;br /&gt;
  J12           | велосипед 03-04       | Клин&lt;br /&gt;
  J13           | рама 02-03            | Череповец&lt;br /&gt;
  J14           | штуцер 01-02          | Череповец&lt;br /&gt;
  J15           | велосипед 01-04       | Клин&lt;br /&gt;
  J16           | кружевное бельё       | Челябинск&lt;br /&gt;
  J17           | штуцер 01-03          | Череповец&lt;br /&gt;
  J18           | кинжал                | Йокогама&lt;br /&gt;
 (18 rows)&lt;br /&gt;
&lt;br /&gt;
==== Сборки ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.spj;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika | nomer_detali | nomer_izdelia | kolichestvo&lt;br /&gt;
 -------------------+--------------+---------------+-------------&lt;br /&gt;
  S1                | P6           | J2            |          20&lt;br /&gt;
  S1                | P7           | J2            |           5&lt;br /&gt;
  S2                | P1           | J1            |           4&lt;br /&gt;
  S6                | P4           | J1            |           2&lt;br /&gt;
  S6                | P5           | J1            |           6&lt;br /&gt;
  S3                | P9           | J3            |           1&lt;br /&gt;
  S4                | P10          | J3            |           1&lt;br /&gt;
  S5                | P11          | J3            |           1&lt;br /&gt;
  S2                | P4           | J1            |           8&lt;br /&gt;
  S6                | P3           | J1            |          50&lt;br /&gt;
  S7                | P8           | J2            |          25&lt;br /&gt;
  S1                | P12          | J4            |           1&lt;br /&gt;
  S2                | P12          | J4            |           1&lt;br /&gt;
  S3                | P12          | J4            |           1&lt;br /&gt;
  S4                | P12          | J4            |           1&lt;br /&gt;
  S5                | P12          | J4            |           1&lt;br /&gt;
  S7                | P12          | J4            |           1&lt;br /&gt;
  S7                | P2           | J1            |           1&lt;br /&gt;
  S6                | P2           | J1            |           9&lt;br /&gt;
  S6                | P12          | J4            |           7&lt;br /&gt;
  S1                | P13          | J5            |          14&lt;br /&gt;
  S6                | P14          | J1            |        9000&lt;br /&gt;
  S2                | P14          | J1            |           3&lt;br /&gt;
  S6                | P1           | J1            |          12&lt;br /&gt;
  S8                | P15          | J6            |           1&lt;br /&gt;
  S8                | P16          | J6            |           2&lt;br /&gt;
  S3                | P5           | J6            |          10&lt;br /&gt;
  S10               | P2           | J8            |           4&lt;br /&gt;
  S8                | P1           | J7            |          16&lt;br /&gt;
  S9                | P14          | J7            |           3&lt;br /&gt;
  S11               | P10          | J3            |           2&lt;br /&gt;
  S12               | P15          | J1            |           3&lt;br /&gt;
  S11               | P11          | J3            |           4&lt;br /&gt;
  S10               | P14          | J9            |           5&lt;br /&gt;
  S13               | P17          | J10           |        1001&lt;br /&gt;
  S14               | P17          | J10           |        1111&lt;br /&gt;
  S15               | P17          | J10           |        1010&lt;br /&gt;
  S5                | P18          | J11           |           9&lt;br /&gt;
  S5                | P19          | J11           |           1&lt;br /&gt;
  S5                | P20          | J11           |           4&lt;br /&gt;
  S9                | P14          | J8            |          25&lt;br /&gt;
  S12               | P21          | J12           |          15&lt;br /&gt;
  S11               | P22          | J13           |           9&lt;br /&gt;
  S11               | P1           | J14           |          26&lt;br /&gt;
  S12               | P1           | J14           |          13&lt;br /&gt;
  S12               | P2           | J14           |          54&lt;br /&gt;
  S12               | P23          | J4            |         101&lt;br /&gt;
  S12               | P16          | J15           |          40&lt;br /&gt;
  S7                | P21          | J12           |           3&lt;br /&gt;
  S8                | P21          | J12           |           4&lt;br /&gt;
  S9                | P21          | J12           |           5&lt;br /&gt;
  S1                | P24          | J16           |           1&lt;br /&gt;
  S1                | P15          | J6            |           3&lt;br /&gt;
  S4                | P25          | J17           |           1&lt;br /&gt;
  S17               | P16          | J1            |           4&lt;br /&gt;
  S18               | P26          | J18           |           1&lt;br /&gt;
 (56 rows)&lt;br /&gt;
&lt;br /&gt;
== Готовые запросы ==&lt;br /&gt;
&lt;br /&gt;
Если видите, что тот или иной запрос можно составить короче и рациональней - смело вносите правку.&lt;br /&gt;
&lt;br /&gt;
В трёх билетах в задании на запрос встречается формулировка &amp;quot;&#039;&#039;только и только&#039;&#039;&amp;quot;. Как оказалось, это означает следующее: если холодильники поставляет &#039;&#039;только и только&#039;&#039; Уася, то:&lt;br /&gt;
# кроме Уаси никто не поставляет холодильники;&lt;br /&gt;
# Уася не поставляет ничего, кроме холодильников.&lt;br /&gt;
&lt;br /&gt;
Существующие запросы, естественно, оказались неправильными и их пришлось переписать. &amp;lt;s&amp;gt;Великий и могучий русский языка, ну что за экономия на бумаге.&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Билет 1 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера поставщиков, которые поставляют, по крайней мере, все те детали, которые поставляет поставщик с номером &#039;S2&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nomer_postavshika&lt;br /&gt;
FROM spasoi_ekz.spj SPJX&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT nomer_detali&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJY&lt;br /&gt;
                  WHERE nomer_postavshika = &#039;S2&#039;&lt;br /&gt;
                    AND NOT EXISTS (&lt;br /&gt;
                                    SELECT *&lt;br /&gt;
                                    FROM spasoi_ekz.spj&lt;br /&gt;
                                    WHERE nomer_postavshika = SPJX.nomer_postavshika&lt;br /&gt;
                                      AND nomer_detali = SPJY.nomer_detali&lt;br /&gt;
                                   )&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika&lt;br /&gt;
 -------------------&lt;br /&gt;
  S6&lt;br /&gt;
  S2&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 2 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера деталей и общее их количество для всех номеров деталей, поставляемых более чем одним поставщиком.&lt;br /&gt;
&lt;br /&gt;
Текст запроса, каким его дал Григорьев на лекции, впоследствии исправив его:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali AS &amp;quot;Номер детали&amp;quot;,&lt;br /&gt;
       SUM(kolichestvo) AS &amp;quot;Сколько штук поставляется&amp;quot;,&lt;br /&gt;
       COUNT(DISTINCT nomer_postavshika) AS &amp;quot;Сколько у неё поставщиков&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_postavshika) &amp;gt; 1;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali AS &amp;quot;Номер детали&amp;quot;,&lt;br /&gt;
       kol AS &amp;quot;Сколько штук поставляется&amp;quot;&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT nomer_detali,&lt;br /&gt;
             SUM(kolichestvo) AS kol,&lt;br /&gt;
             COUNT(DISTINCT nomer_postavshika)&lt;br /&gt;
      FROM spasoi_ekz.spj&lt;br /&gt;
      GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_postavshika) &amp;gt; 1&lt;br /&gt;
     ) A;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер детали | Сколько штук поставляется | Сколько у неё поставщиков&lt;br /&gt;
 --------------+---------------------------+---------------------------&lt;br /&gt;
  P1           |                        71 |                         5&lt;br /&gt;
  P10          |                         3 |                         2&lt;br /&gt;
  P11          |                         5 |                         2&lt;br /&gt;
  P12          |                        13 |                         7&lt;br /&gt;
  P14          |                      9036 |                         4&lt;br /&gt;
  P15          |                         7 |                         3&lt;br /&gt;
  P16          |                        46 |                         3&lt;br /&gt;
  P17          |                      3122 |                         3&lt;br /&gt;
  P2           |                        68 |                         4&lt;br /&gt;
  P21          |                        27 |                         4&lt;br /&gt;
  P4           |                        10 |                         2&lt;br /&gt;
  P5           |                        16 |                         2&lt;br /&gt;
 (12 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 3 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера поставщиков, поставляющих детали с номером &#039;P1&#039; для какого-либо изделия в количестве (в поставке) большим, чем средний объём поставок деталей с номером &#039;P2&#039; для этого изделия.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT X.nomer_postavshika &lt;br /&gt;
FROM spasoi_ekz.spj X&lt;br /&gt;
WHERE X.nomer_detali = &#039;P1&#039;&lt;br /&gt;
  AND X.kolichestvo &amp;gt; (&lt;br /&gt;
                       SELECT AVG(kolichestvo)&lt;br /&gt;
                       FROM spasoi_ekz.spj&lt;br /&gt;
                       WHERE nomer_izdelia = X.nomer_izdelia&lt;br /&gt;
                         AND nomer_detali = &#039;P2&#039;&lt;br /&gt;
                      );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но длиннее и нерациональней&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nomer_postavshika&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT *&lt;br /&gt;
      FROM spasoi_ekz.spj&lt;br /&gt;
      WHERE nomer_izdelia IN(&lt;br /&gt;
                             SELECT nomer_izdelia&lt;br /&gt;
                             FROM spasoi_ekz.spj&lt;br /&gt;
                             WHERE nomer_detali = &#039;P1&#039;&lt;br /&gt;
                            )&lt;br /&gt;
        AND nomer_izdelia IN(&lt;br /&gt;
	                     SELECT nomer_izdelia&lt;br /&gt;
	                     FROM spasoi_ekz.spj&lt;br /&gt;
	                     WHERE nomer_detali = &#039;P2&#039;&lt;br /&gt;
	                    )&lt;br /&gt;
     ) A&lt;br /&gt;
WHERE nomer_detali = &#039;P1&#039; AND kolichestvo &amp;gt;&lt;br /&gt;
(&lt;br /&gt;
 SELECT AVG(kolichestvo)&lt;br /&gt;
 FROM (&lt;br /&gt;
       SELECT *&lt;br /&gt;
       FROM spasoi_ekz.spj&lt;br /&gt;
       WHERE nomer_izdelia IN(&lt;br /&gt;
                              SELECT nomer_izdelia&lt;br /&gt;
                              FROM spasoi_ekz.spj&lt;br /&gt;
                              WHERE nomer_detali = &#039;P1&#039;&lt;br /&gt;
                             )&lt;br /&gt;
         AND nomer_izdelia IN(&lt;br /&gt;
                              SELECT nomer_izdelia&lt;br /&gt;
                              FROM spasoi_ekz.spj&lt;br /&gt;
                              WHERE nomer_detali = &#039;P2&#039;&lt;br /&gt;
                             )&lt;br /&gt;
      ) B&lt;br /&gt;
 WHERE nomer_detali = &#039;P2&#039;&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika&lt;br /&gt;
 -------------------&lt;br /&gt;
  S6&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 4 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера изделий, для которых детали поставляет только поставщик с номером ‘S1’.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_izdelia&lt;br /&gt;
FROM spasoi_ekz.spj X&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT *&lt;br /&gt;
                  FROM spasoi_ekz.spj&lt;br /&gt;
                  WHERE nomer_postavshika != &#039;S1&#039;&lt;br /&gt;
                    AND X.nomer_izdelia = nomer_izdelia&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но без EXISTS&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nomer_izdelia&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
WHERE nomer_izdelia IN(&lt;br /&gt;
                       SELECT nomer_izdelia&lt;br /&gt;
                       FROM spasoi_ekz.spj&lt;br /&gt;
                       WHERE nomer_postavshika = &#039;S1&#039;&lt;br /&gt;
                      )&lt;br /&gt;
  AND nomer_izdelia NOT IN(&lt;br /&gt;
                           SELECT nomer_izdelia&lt;br /&gt;
                           FROM spasoi_ekz.spj&lt;br /&gt;
                           WHERE nomer_postavshika != &#039;S1&#039;&lt;br /&gt;
                          );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_izdelia&lt;br /&gt;
 ---------------&lt;br /&gt;
  J5&lt;br /&gt;
  J16&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 5 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих детали с названием &amp;quot;Болт&amp;quot; в количестве (в поставке) большим, чем средний объём всех поставок деталей с номером &#039;P1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                           ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                        JOIN spasoi_ekz.p P&lt;br /&gt;
                           ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                              AND nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
WHERE kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT AVG(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                                               ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                                  AND SPJ.nomer_detali = &#039;P1&#039;&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но без JOIN&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s&lt;br /&gt;
WHERE nomer_postavshika IN (&lt;br /&gt;
                            SELECT nomer_postavshika&lt;br /&gt;
                            FROM spasoi_ekz.spj&lt;br /&gt;
                            WHERE nomer_detali = (&lt;br /&gt;
                                                  SELECT nomer_detali&lt;br /&gt;
                                                  FROM spasoi_ekz.p&lt;br /&gt;
                                                  WHERE LOWER(nazvanie) = LOWER(&#039;Болт&#039;)&lt;br /&gt;
                                                 )&lt;br /&gt;
                              AND kolichestvo &amp;gt; (&lt;br /&gt;
                                                 SELECT AVG(kolichestvo)&lt;br /&gt;
                                                 FROM spasoi_ekz.spj&lt;br /&gt;
                                                 WHERE nomer_detali = &#039;P1&#039;&lt;br /&gt;
                                                )&lt;br /&gt;
                           );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  imya&lt;br /&gt;
 ------&lt;br /&gt;
  Оша&lt;br /&gt;
  Иванов&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 6 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия деталей, поставляемых поставщиком, проживающим в том же городе, где изготавливаются эти детали, для изделия с названием ‘Велосипед 01/23’.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT P.nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                        JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                        JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
WHERE S.gorod = P.gorod&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Велосипед 01/23&#039;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос без JOIN&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nazvanie&lt;br /&gt;
FROM spasoi_ekz.S S, spasoi_ekz.p P, spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE S.gorod = P.gorod&lt;br /&gt;
  AND P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
  AND S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
  AND nomer_izdelia = (&lt;br /&gt;
                       SELECT nomer_izdelia&lt;br /&gt;
                       FROM spasoi_ekz.j&lt;br /&gt;
                       WHERE nazvanie = LOWER(&#039;Велосипед 01/23&#039;)&lt;br /&gt;
                      );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nazvanie&lt;br /&gt;
 ----------&lt;br /&gt;
  рама&lt;br /&gt;
  колесо&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 7 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия изделий, куда входят детали с названием &#039;Болт&#039;, поставляемых поставщиками с именем &#039;Иванов&#039;, в количестве (в поставке) большим, чем средний объём поставок для этого изделия.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT J.nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                        JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                        JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
WHERE imya LIKE &#039;%Иванов%&#039;&lt;br /&gt;
  AND P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
  AND kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT AVG(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj X&lt;br /&gt;
                     WHERE SPJ.nomer_izdelia = X.nomer_izdelia&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё один вариант запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie&lt;br /&gt;
FROM spasoi_ekz.j&lt;br /&gt;
WHERE nomer_izdelia IN (&lt;br /&gt;
                        SELECT nomer_izdelia&lt;br /&gt;
                        FROM (spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                                                   ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                                                      AND imya LIKE &#039;%Иванов%&#039;&lt;br /&gt;
                                                 JOIN spasoi_ekz.p P&lt;br /&gt;
                                                   ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                                      AND nazvanie = LOWER(&#039;Болт&#039;)) A&lt;br /&gt;
                        WHERE kolichestvo &amp;gt; (&lt;br /&gt;
                                             SELECT AVG(kolichestvo)&lt;br /&gt;
                                             FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                                                       ON SPJ.nomer_izdelia = A.nomer_izdelia&lt;br /&gt;
                                            )&lt;br /&gt;
                       );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;И ещё вариант этого же запроса, но длиннее и нерациональней&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT J.nazvanie, kolichestvo&lt;br /&gt;
      FROM spasoi_ekz.s S, spasoi_ekz.p P, spasoi_ekz.j J, spasoi_ekz.spj SPJ&lt;br /&gt;
      WHERE J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
        AND P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
        AND P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
        AND S.imya LIKE &#039;%Иванов%&#039;&lt;br /&gt;
        AND S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
     ) A&lt;br /&gt;
WHERE kolichestvo &amp;gt;&lt;br /&gt;
(&lt;br /&gt;
 SELECT AVG(kolichestvo)&lt;br /&gt;
 FROM spasoi_ekz.spj&lt;br /&gt;
 WHERE nomer_izdelia IN(&lt;br /&gt;
                        SELECT J.nomer_izdelia&lt;br /&gt;
                        FROM spasoi_ekz.s S, spasoi_ekz.p P, spasoi_ekz.j J, spasoi_ekz.spj SPJ&lt;br /&gt;
                        WHERE J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
                          AND P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                          AND P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
                          AND S.imya LIKE &#039;%Иванов%&#039;&lt;br /&gt;
                          AND S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
                       )&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
      nazvanie&lt;br /&gt;
 -------------------&lt;br /&gt;
  шкаф&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 8 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера изделий и общее количество деталей для них, поставляемых поставщиками с именем &#039;Петров&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_izdelia AS &amp;quot;Номер изделия&amp;quot;, SUM(kolichestvo) AS &amp;quot;Количество деталей&amp;quot; &lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                             -- так как &amp;quot;поставщикАМИ&amp;quot; и возможны&lt;br /&gt;
                             -- Иван Петров и Петров Иван, то LIKE %Петров%&lt;br /&gt;
                             AND imya LIKE &#039;%Петров%&#039;&lt;br /&gt;
GROUP BY nomer_izdelia;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер изделия | Количество деталей&lt;br /&gt;
 ---------------+--------------------&lt;br /&gt;
  J4            |                101&lt;br /&gt;
  J3            |                  6&lt;br /&gt;
  J13           |                  9&lt;br /&gt;
  J15           |                 40&lt;br /&gt;
  J1            |                  3&lt;br /&gt;
  J12           |                 15&lt;br /&gt;
  J14           |                 93&lt;br /&gt;
 (7 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 9 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера деталей и общее их количество для всех номеров деталей, которые входят только в одно изделие.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali, SUM(kolichestvo)&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_izdelia) = 1;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali, kol FROM (&lt;br /&gt;
       SELECT nomer_detali, SUM(kolichestvo) AS kol, COUNT(DISTINCT nomer_izdelia) = 1&lt;br /&gt;
       FROM spasoi_ekz.spj&lt;br /&gt;
       GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_izdelia) = 1&lt;br /&gt;
    ) A;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_detali | sum&lt;br /&gt;
 --------------+------&lt;br /&gt;
  P10          |    3&lt;br /&gt;
  P11          |    5&lt;br /&gt;
  P12          |   13&lt;br /&gt;
  P13          |   14&lt;br /&gt;
  P17          | 3122&lt;br /&gt;
  P18          |    9&lt;br /&gt;
  P19          |    1&lt;br /&gt;
  P20          |    4&lt;br /&gt;
  P21          |   27&lt;br /&gt;
  P22          |    9&lt;br /&gt;
  P23          |  101&lt;br /&gt;
  P24          |    1&lt;br /&gt;
  P25          |    1&lt;br /&gt;
  P26          |    1&lt;br /&gt;
  P3           |   50&lt;br /&gt;
  P4           |   10&lt;br /&gt;
  P6           |   20&lt;br /&gt;
  P7           |    5&lt;br /&gt;
  P8           |   25&lt;br /&gt;
  P9           |    1&lt;br /&gt;
 (20 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 10 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих детали с названием &#039;Болт&#039; для изделия с названием &#039;Рама 02-01&#039; в количестве (в поставке) большим, чем минимальное значение поставки детали с номером &#039;P1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
			   ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
			      AND J.nazvanie = LOWER(&#039;Рама 02-01&#039;)&lt;br /&gt;
			 JOIN spasoi_ekz.p P&lt;br /&gt;
			   ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
			      AND P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
			 JOIN spasoi_ekz.s S&lt;br /&gt;
			   ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE kolichestvo &amp;gt; (&lt;br /&gt;
		     SELECT MIN(kolichestvo)&lt;br /&gt;
		     FROM spasoi_ekz.spj &lt;br /&gt;
		     spj.nomer_detali = &#039;P1&#039;&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Русе Болтон&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 11 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия городов и суммарное состояние проживающих в каждом городе поставщиков, у которых минимальный объём поставки деталей больше 1000.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT gorod, SUM(sostoyanie)&lt;br /&gt;
FROM spasoi_ekz.s&lt;br /&gt;
WHERE nomer_postavshika IN (&lt;br /&gt;
                            SELECT nomer_postavshika&lt;br /&gt;
                            FROM spasoi_ekz.spj&lt;br /&gt;
                            GROUP BY nomer_postavshika HAVING MIN(kolichestvo) &amp;gt; 1000&lt;br /&gt;
                           )&lt;br /&gt;
GROUP BY gorod;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;!-- этот запрос выполняет не совсем то и не правильно&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT gorod, sost&lt;br /&gt;
FROM (&lt;br /&gt;
SELECT gorod, SUM(sostoyanie) AS sost, SUM(SPJ.kolichestvo)&lt;br /&gt;
FROM spasoi_ekz.spj, spasoi_ekz.s&lt;br /&gt;
WHERE S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
GROUP BY S.gorod HAVING SUM(SPJ.kolichestvo) &amp;gt; 1000&lt;br /&gt;
) A;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; --&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
    gorod   |   sum&lt;br /&gt;
 -----------+---------&lt;br /&gt;
  Прага     | 2111110&lt;br /&gt;
  Стокгольм |  888888&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 12 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера деталей, поставляемых для какого-либо изделия поставщиком, проживающим в том же городе, где изготавливается это изделие.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali&lt;br /&gt;
FROM spasoi_ekz.spj SPJ, spasoi_ekz.s S, spasoi_ekz.j J&lt;br /&gt;
WHERE SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
  AND S.gorod = J.gorod&lt;br /&gt;
  AND J.nomer_izdelia = SPJ.nomer_izdelia;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_detali&lt;br /&gt;
 --------------&lt;br /&gt;
  P15&lt;br /&gt;
  P16&lt;br /&gt;
  P26&lt;br /&gt;
 (3 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 13 ===&lt;br /&gt;
&lt;br /&gt;
Написать &amp;lt;u&amp;gt;один&amp;lt;/u&amp;gt; запрос SELECT: выдать количества строк в таблице S (Поставщик) 1) с пустыми значениями и 2) непустыми значениями в столбце Состояние.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT COUNT(nomer_postavshika) - COUNT(sostoyanie) AS &amp;quot;С пустым состоянием&amp;quot;, &lt;br /&gt;
       COUNT(sostoyanie) AS &amp;quot;С не пустым состоянием&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.s;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но длиннее и нерациональней&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SELECT COUNT(Snull.*) AS &amp;quot;С пустым состоянием&amp;quot;, COUNT(Snotnull.sostoyanie) AS &amp;quot;С не пустым состоянием&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.s Snull RIGHT OUTER JOIN spasoi_ekz.s Snotnull&lt;br /&gt;
                                      ON Snull.nomer_postavshika = Snotnull.nomer_postavshika&lt;br /&gt;
                                         AND Snull.sostoyanie IS NULL;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  С пустым состоянием | С не пустым состоянием&lt;br /&gt;
 ---------------------+-----------------------&lt;br /&gt;
                    2 |                    16&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 14 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют детали только и только для изделия с номером &#039;J1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj A JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON A.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE nomer_izdelia = &#039;J1&#039;&lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT nomer_postavshika&lt;br /&gt;
                  FROM spasoi_ekz.spj&lt;br /&gt;
                  WHERE nomer_izdelia != &#039;J1&#039;&lt;br /&gt;
                    AND nomer_postavshika = A.nomer_postavshika&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       imya&lt;br /&gt;
 ----------------&lt;br /&gt;
  Томми Версетти&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 15 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать наименования изделий, для которых детали поставляют только те поставщики, у которых состояние больше 1000000 у.е.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                        JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
WHERE sostoyanie &amp;gt; 1000000&lt;br /&gt;
  AND SPJ.nomer_izdelia NOT IN (&lt;br /&gt;
                                SELECT nomer_izdelia&lt;br /&gt;
                                FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                                                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                                WHERE sostoyanie &amp;lt; 1000000&lt;br /&gt;
                               );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       nazvanie&lt;br /&gt;
 --------------------&lt;br /&gt;
  кружевное бельё&lt;br /&gt;
  уникальное изделие&lt;br /&gt;
  процессор&lt;br /&gt;
 (3 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 16 ===&lt;br /&gt;
Написать запрос SELECT: выдать цвета и для каждого цвета общее количество деталей, входящих в изделие с названием &#039;Панно 01-03&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT cvet AS &amp;quot;Цвет&amp;quot;, SUM(kolichestvo) AS &amp;quot;Деталей&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
			     AND J.nazvanie = LOWER(&#039;Панно 01-03&#039;)&lt;br /&gt;
			JOIN spasoi_ekz.P P&lt;br /&gt;
			  ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
GROUP BY cvet;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Цвет  | Деталей&lt;br /&gt;
 -------+---------&lt;br /&gt;
  белый |       9&lt;br /&gt;
  серый |       5&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 17 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера поставщиков и количество сделанных ими поставок при условии, что среднее число деталей во всех этих поставках больше 1000.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nom AS &amp;quot;Номер поставщика&amp;quot;, cnt AS &amp;quot;Количество поставок&amp;quot;&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT S.nomer_postavshika AS nom,&lt;br /&gt;
             COUNT(SPJ.nomer_postavshika) AS cnt,&lt;br /&gt;
             AVG(SPJ.kolichestvo) AS kol&lt;br /&gt;
      FROM spasoi_ekz.s S, spasoi_ekz.spj SPJ&lt;br /&gt;
      WHERE S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
      GROUP BY S.nomer_postavshika&lt;br /&gt;
     ) A&lt;br /&gt;
WHERE kol &amp;gt; 1000;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос немного попроще&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_postavshika AS &amp;quot;Номер поставщика&amp;quot;, COUNT(*) AS &amp;quot;Количество поставок&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
WHERE nomer_postavshika IN (&lt;br /&gt;
                            SELECT nomer_postavshika&lt;br /&gt;
                            FROM spasoi_ekz.spj&lt;br /&gt;
                            GROUP BY nomer_postavshika HAVING AVG(kolichestvo) &amp;gt; 1000&lt;br /&gt;
                           )&lt;br /&gt;
GROUP BY nomer_postavshika;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер поставщика | Количество поставок&lt;br /&gt;
 ------------------+---------------------&lt;br /&gt;
  S13              |                   1&lt;br /&gt;
  S6               |                   7&lt;br /&gt;
  S14              |                   1&lt;br /&gt;
  S15              |                   1&lt;br /&gt;
 (4 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 18 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, имеющих состояние больше 1000 и поставляющих деталь с названием &#039;Гайка 01-01&#039; для изделия с названием &#039;Велосипед 03-04&#039; в количестве (в поставке) большим, чем средний объём поставки, выполненной поставщиками с именем &#039;Иванов&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:2nd dufficulty.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;5px&amp;quot;&amp;gt;&#039;&#039;&#039;Второй по сложности запрос экзамена!&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;4px&amp;quot;&amp;gt;&#039;&#039;&#039;Вот уж не свезло, так не свезло&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                    JOIN spasoi_ekz.j J&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
WHERE sostoyanie &amp;gt; 1000&lt;br /&gt;
  AND P.nazvanie = LOWER(&#039;Гайка 01-01&#039;)&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Велосипед 03-04&#039;)&lt;br /&gt;
  AND kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT AVG(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                       ON SPJ.nomer_postavshika = S.nomer_postavshika &lt;br /&gt;
                     WHERE S.imya = &#039;Иванов&#039;&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Пётр&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 19 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия красных деталей, которые входят только в изделие с названием &#039;Рама 02-03&#039; в количестве, меньшем 10 единиц в поставке.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT X.nazvanie&lt;br /&gt;
FROM spasoi_ekz.p X JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_detali = X.nomer_detali&lt;br /&gt;
                    JOIN spasoi_ekz.j J&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
WHERE X.cvet = &#039;красный&#039;&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Рама 02-03&#039;)&lt;br /&gt;
  AND kolichestvo &amp;lt; 10&lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT J.nomer_izdelia&lt;br /&gt;
                  FROM spasoi_ekz.j J JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                                        ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                  WHERE J.nazvanie != LOWER(&#039;Рама 02-03&#039;)&lt;br /&gt;
                    AND X.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант этого же запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT P.nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND cvet = &#039;красный&#039;&lt;br /&gt;
                        JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                              AND J.nazvanie = LOWER(&#039;Рама 02-03&#039;)&lt;br /&gt;
WHERE kolichestvo &amp;lt; 10&lt;br /&gt;
  AND SPJ.nomer_detali NOT IN (&lt;br /&gt;
                               SELECT nomer_detali&lt;br /&gt;
                               FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                                         ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                                                            AND J.nazvanie != LOWER(&#039;Рама 02-03&#039;)&lt;br /&gt;
                              );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     nazvanie&lt;br /&gt;
 ----------------&lt;br /&gt;
  усиленная рама&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 20 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих только белые детали.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
WHERE cvet = &#039;белый&#039;&lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT nomer_postavshika&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                                            ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                  WHERE nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    AND P.cvet != &#039;белый&#039;&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё один вариант этого же запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND cvet = &#039;белый&#039;&lt;br /&gt;
                        JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE S.nomer_postavshika NOT IN (&lt;br /&gt;
                                  SELECT nomer_postavshika&lt;br /&gt;
                                  FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                                                            ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                                               AND cvet != &#039;белый&#039;&lt;br /&gt;
                                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;И ещё один вариант этого же запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s&lt;br /&gt;
WHERE nomer_postavshika NOT IN  (&lt;br /&gt;
                                 SELECT spj.nomer_postavshika&lt;br /&gt;
                                 FROM spasoi_ekz.spj SPJ, spasoi_ekz.p P&lt;br /&gt;
                                 WHERE SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                   AND p.cvet != &#039;белый&#039;&lt;br /&gt;
                                )&lt;br /&gt;
  AND nomer_postavshika  IN (&lt;br /&gt;
                             SELECT spj.nomer_postavshika&lt;br /&gt;
                             FROM spasoi_ekz.spj SPJ, spasoi_ekz.p P&lt;br /&gt;
                             WHERE SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                               AND p.cvet = &#039;белый&#039;&lt;br /&gt;
                            );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       imya&lt;br /&gt;
 -----------------&lt;br /&gt;
  Рендилл Тарли&lt;br /&gt;
  Сэмвелл Тарли&lt;br /&gt;
  Мелисса Флорент&lt;br /&gt;
  Томми Версетти&lt;br /&gt;
 (4 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 21 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия изделий, для которых детали поставляет только и только поставщик с номером &#039;S1&#039;.&lt;br /&gt;
&lt;br /&gt;
Чтобы продемонстрировать выполнение запроса наглядно, возьмём поставщика не &#039;S1&#039;, а &#039;S18&#039;, который был создан специально для этого запроса. Если оставить &#039;S1&#039;, то наглядности не получится, так как по нашей схеме БД этот поставщик не попадает под условие &amp;quot;&#039;&#039;только и только&#039;&#039;&amp;quot;, и запрос вернёт пустой результат.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie&lt;br /&gt;
FROM spasoi_ekz.j J, spasoi_ekz.SPJ SPJ&lt;br /&gt;
WHERE J.nomer_izdelia = SPJ.nomer_izdelia &lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT *&lt;br /&gt;
                  FROM spasoi_ekz.spj&lt;br /&gt;
                  WHERE nomer_postavshika != &#039;S18&#039; AND nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                 )&lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT *&lt;br /&gt;
                  FROM spasoi_ekz.spj&lt;br /&gt;
                  WHERE nomer_postavshika = &#039;S18&#039; AND nomer_izdelia != J.nomer_izdelia&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       nazvanie&lt;br /&gt;
 --------------------&lt;br /&gt;
  кинжал&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 22 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют только детали с номером &#039;P1&#039; для изделия с именем &#039;Штуцер 01-02&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- неверный запрос - номер изделия, а не название&lt;br /&gt;
SELECT imya FROM S X&lt;br /&gt;
JOIN SPJ Y ON X.nomer_postavshika=Y.nomer_postavshika&lt;br /&gt;
WHERE X.nomer_postavshika NOT IN (&lt;br /&gt;
                  SELECT DISTINCT nomer_postavshika FROM SPJ Z&lt;br /&gt;
                  WHERE Z.nomer_izdelia != &#039;Штуцер 01-02&#039;&lt;br /&gt;
                  AND Z.nomer_detali!=&#039;P1&#039;);--&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                             AND J.nazvanie = LOWER(&#039;штуцер 01-02&#039;)&lt;br /&gt;
                        JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND SPJ.nomer_detali = &#039;P1&#039;&lt;br /&gt;
                        JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE SPJ.nomer_postavshika NOT IN (&lt;br /&gt;
                                    SELECT nomer_postavshika&lt;br /&gt;
                                    FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                                              ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                                                                 AND J.nazvanie = LOWER(&#039;штуцер 01-02&#039;)&lt;br /&gt;
                                                            JOIN spasoi_ekz.p P&lt;br /&gt;
                                                              ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                                                 AND SPJ.nomer_detali != &#039;P1&#039;&lt;br /&gt;
                              );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Иван&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 23 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют деталь с названием &#039;Винт&#039; в количестве большим 100 единиц в одной поставке и имеют состояние больше среднего по их родному городу.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT S.imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
WHERE P.nazvanie = LOWER(&#039;Винт&#039;)&lt;br /&gt;
  AND SPJ.kolichestvo &amp;gt; 100&lt;br /&gt;
  AND S.sostoyanie &amp;gt; (&lt;br /&gt;
                      SELECT AVG(SS.sostoyanie)&lt;br /&gt;
                      FROM spasoi_ekz.s SS&lt;br /&gt;
                      WHERE SS.gorod = S.gorod&lt;br /&gt;
                     );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Пётр&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 24 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать наименования деталей и общее их количество для всех наименований деталей, изготавливаемых в одном городе.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- С этим запросом возникла неожиданная проблема - задание то ли неполное, то ли неправильное, потому что нельзя однозначно сказать, что по нему требуется сделать.&lt;br /&gt;
&lt;br /&gt;
Так что тут несколько вариантов запросов (кто как понял).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Первый вариант запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie, kol&lt;br /&gt;
FROM spasoi_ekz.p A, (&lt;br /&gt;
                      SELECT X.gorod, SUM(kolichestvo) as kol&lt;br /&gt;
                      FROM spasoi_ekz.p X, spasoi_ekz.spj Y&lt;br /&gt;
                      WHERE Y.nomer_detali = X.nomer_detali&lt;br /&gt;
                      GROUP BY X.gorod&lt;br /&gt;
                     ) B&lt;br /&gt;
WHERE A.gorod = B.gorod;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
        nazvanie       | kol&lt;br /&gt;
 ----------------------+------&lt;br /&gt;
  подставка            |    9&lt;br /&gt;
  стойка               |    9&lt;br /&gt;
  абажур               |    9&lt;br /&gt;
  гайка                |  139&lt;br /&gt;
  ось                  |   60&lt;br /&gt;
  зубчатое колесо      |   60&lt;br /&gt;
  транзистор           |   50&lt;br /&gt;
  печатная плата       |   50&lt;br /&gt;
  диод                 |   50&lt;br /&gt;
  универсальная деталь |   13&lt;br /&gt;
  уникальная деталь    |   14&lt;br /&gt;
  болт                 | 9137&lt;br /&gt;
  рама                 |   69&lt;br /&gt;
  колесо               |   69&lt;br /&gt;
  втулка               |   69&lt;br /&gt;
  бумага               | 3122&lt;br /&gt;
  плитка               |   14&lt;br /&gt;
  орнамент             |   14&lt;br /&gt;
  уголок               |   14&lt;br /&gt;
  гайка 01-01          |   27&lt;br /&gt;
  усиленная рама       |   10&lt;br /&gt;
  винт                 | 9137&lt;br /&gt;
  труселя              |    1&lt;br /&gt;
  штуцерная деталь     |   10&lt;br /&gt;
  шуруп                |  139&lt;br /&gt;
 (25 rows)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
и --&amp;gt;&lt;br /&gt;
В уточнение задания Григорьев сказал следующее: &amp;quot;&#039;&#039;Следует учесть, что в качестве наименования города может выступать переменная, в которую в некоторой программе должно быть занесено конкретное значение перед выполнением запроса&#039;&#039;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
То есть, вообще говоря, задание на запрос неполное, и его можно трактовать так: выдать наименования деталей и общее их количество для всех наименований деталей, изготавливаемых в городе &amp;lt;code&amp;gt;%НАЗВАНИЕГОРОДА%&amp;lt;/code&amp;gt;. Вот эта переменная задаётся где-то в программе, а в БД идёт запрос с уже подставленным конкретным названием. &lt;br /&gt;
&lt;br /&gt;
Этот вариант запроса составлен, например, для Лондона. &lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie, SUM(kolichestvo)&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
WHERE gorod = &#039;Лондон&#039;&lt;br /&gt;
GROUP BY nazvanie;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nazvanie | sum&lt;br /&gt;
 ----------+-----&lt;br /&gt;
  гайка    |  71&lt;br /&gt;
  шуруп    |  68&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 25 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих хотя бы одну белую деталь для изделия с названием &#039;Велосипед 01-04&#039; с объёмом поставки большим, чем средний объём поставки этого поставщика.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                    JOIN spasoi_ekz.j J&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
WHERE cvet = &#039;белый&#039;&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Велосипед 01-04&#039;)&lt;br /&gt;
  AND kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT AVG(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj SPJ&lt;br /&gt;
                     WHERE SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Пётр&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 26 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера красных деталей и количество поставок этих деталей.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT P.nomer_detali AS &amp;quot;Номер детали&amp;quot;, COUNT(kolichestvo) AS &amp;quot;Количество поставок с ней&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.p P, spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
  AND cvet = &#039;красный&#039;&lt;br /&gt;
GROUP BY P.nomer_detali;   &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос через JOIN&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT SPJ.nomer_detali AS &amp;quot;Номер детали&amp;quot;, COUNT(kolichestvo) AS &amp;quot;Количество поставок с ней&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND cvet = &#039;красный&#039;&lt;br /&gt;
GROUP BY SPJ.nomer_detali;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер детали | Количество поставок с ней&lt;br /&gt;
 --------------+---------------------------&lt;br /&gt;
  P15          |                         3&lt;br /&gt;
  P22          |                         1&lt;br /&gt;
  P24          |                         1&lt;br /&gt;
 (3 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 27 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать наименования городов и среднее состояние поставщиков для каждого города, поставляющих детали с названием &#039;Гайка 01-01&#039; для изделия с названием &#039;Велосипед 03-04&#039; в количестве (в поставке) большим, чем минимальный объём поставки, выполненной поставщиком с номером &#039;S1&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:1st dufficulty.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;7px&amp;quot;&amp;gt;&#039;&#039;&#039;Сложнейший запрос экзамена!&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;5px&amp;quot;&amp;gt;&#039;&#039;&#039;Сохрани Джа, вытащить такое&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT S.gorod AS &amp;quot;Город&amp;quot;, AVG(S.sostoyanie) AS &amp;quot;Среднее состояние&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                    JOIN spasoi_ekz.j J&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
WHERE P.nazvanie = LOWER(&#039;Гайка 01-01&#039;)&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Велосипед 03-04&#039;)&lt;br /&gt;
  AND kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT MIN(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj&lt;br /&gt;
                     WHERE nomer_postavshika = &#039;S1&#039;&lt;br /&gt;
                    )&lt;br /&gt;
GROUP BY S.gorod;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
    Город   |   Среднее состояние&lt;br /&gt;
 -----------+-----------------------&lt;br /&gt;
  Мытищи    |    35000.500000000000&lt;br /&gt;
  Йокогама  |  1500000.000000000000&lt;br /&gt;
  Манчестер | 2571.0000000000000000&lt;br /&gt;
 (3 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 28 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия изделий, куда входит хотя бы одна красная деталь весом больше 10 граммов, поставляемая только поставщиком с номером &#039;S1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT J.nazvanie&lt;br /&gt;
FROM spasoi_ekz.j J JOIN spasoi_ekz.spj SPJ1&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ1.nomer_izdelia&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ1.nomer_detali&lt;br /&gt;
WHERE P.ves &amp;gt; 10&lt;br /&gt;
 AND P.cvet = &#039;красный&#039;&lt;br /&gt;
 AND NOT EXISTS (&lt;br /&gt;
                 SELECT SPJ2.nomer_postavshika&lt;br /&gt;
                 FROM spasoi_ekz.spj SPJ2         &lt;br /&gt;
                 WHERE SPJ2.nomer_detali = P.nomer_detali&lt;br /&gt;
	 	   AND SPJ2.nomer_postavshika != &#039;S1&#039;&lt;br /&gt;
                );                     &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     nazvanie&lt;br /&gt;
 -----------------&lt;br /&gt;
  кружевное бельё&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 29 ===&lt;br /&gt;
Написать запрос SELECT: выдать названия деталей, которые входят только и только в состав изделия с названием &#039;Штуцер 01-03&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie&lt;br /&gt;
FROM spasoi_ekz.p P, spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE P.nomer_detali = SPJ.nomer_detali &lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT SPJ.nomer_izdelia&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                            ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
                  WHERE (&lt;br /&gt;
                         J.nazvanie != LOWER(&#039;Штуцер 01-03&#039;)&lt;br /&gt;
                         AND&lt;br /&gt;
                         SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                        )&lt;br /&gt;
                     OR (&lt;br /&gt;
                         J.nazvanie = LOWER(&#039;Штуцер 01-03&#039;)&lt;br /&gt;
                         AND&lt;br /&gt;
                         SPJ.nomer_detali != P.nomer_detali&lt;br /&gt;
                        )&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
      nazvanie&lt;br /&gt;
 ------------------&lt;br /&gt;
  штуцерная деталь&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 30 ===&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют, по крайней мере, все те детали, которые поставляет поставщик с номером &#039;S2&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT imya&lt;br /&gt;
FROM spasoi_ekz.s S&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT nomer_detali&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJY&lt;br /&gt;
                  WHERE nomer_postavshika = &#039;S2&#039;&lt;br /&gt;
                    AND NOT EXISTS (&lt;br /&gt;
                                    SELECT *&lt;br /&gt;
                                    FROM spasoi_ekz.spj&lt;br /&gt;
                                    WHERE nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                                      AND nomer_detali = SPJY.nomer_detali&lt;br /&gt;
                                   )&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  imya&lt;br /&gt;
 ------------&lt;br /&gt;
  Оша&lt;br /&gt;
  Бран Старк&lt;br /&gt;
 (2 rows)&lt;br /&gt;
[[Категория:Структурное проектирование АСОИ (10 семестр)]]&lt;/div&gt;</summary>
		<author><name>81.9.52.28</name></author>
	</entry>
	<entry>
		<id>https://iu5bmstu.ru/index.php?title=SQL-%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D1%8B_%D0%BA_%D1%8D%D0%BA%D0%B7%D0%B0%D0%BC%D0%B5%D0%BD%D1%83_%D0%BF%D0%BE_%D0%A1%D0%9F%D0%90%D0%A1%D0%9E%D0%98_(10_%D1%81%D0%B5%D0%BC%D0%B5%D1%81%D1%82%D1%80)&amp;diff=3822</id>
		<title>SQL-запросы к экзамену по СПАСОИ (10 семестр)</title>
		<link rel="alternate" type="text/html" href="https://iu5bmstu.ru/index.php?title=SQL-%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D1%8B_%D0%BA_%D1%8D%D0%BA%D0%B7%D0%B0%D0%BC%D0%B5%D0%BD%D1%83_%D0%BF%D0%BE_%D0%A1%D0%9F%D0%90%D0%A1%D0%9E%D0%98_(10_%D1%81%D0%B5%D0%BC%D0%B5%D1%81%D1%82%D1%80)&amp;diff=3822"/>
		<updated>2013-06-14T20:22:16Z</updated>

		<summary type="html">&lt;p&gt;81.9.52.28: /* Билет 7 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right; clear:both; margin-right:1.0em;&amp;quot;&amp;gt;__TOC__&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Билет экзамена по [[:Категория:Структурное проектирование АСОИ (10 семестр) | СПАСОИ]] состоит из двух частей:&lt;br /&gt;
# теория;&lt;br /&gt;
# SQL-запрос.&lt;br /&gt;
&lt;br /&gt;
На этой странице собраны все сформированные запросы по билетам.&lt;br /&gt;
&lt;br /&gt;
Странно, что ни в одном билете нет запроса с сортировкой результатов. Возможно, они буду в дополнительных заданиях.&lt;br /&gt;
&lt;br /&gt;
== Схема БД ==&lt;br /&gt;
&lt;br /&gt;
Схема БД используется всё [[СПАСОИ_(10)_-_Лекция_№8_-_SQL#Некоторые возможности языка SQL | та же]], что была в прошлом семестре и на лекциях.&lt;br /&gt;
&lt;br /&gt;
Для написания запросов и проверки их выполнения создана БД в СУБД [http://www.postgresql.org/ PostgreSQL].&lt;br /&gt;
&lt;br /&gt;
Скрипт создания можно загрузить [http://yadi.sk/d/MmOgbWnr5cATO отсюда].&lt;br /&gt;
&lt;br /&gt;
=== Таблицы БД ===&lt;br /&gt;
&lt;br /&gt;
==== Поставщики ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.s;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika |       imya       | sostoyanie |   gorod&lt;br /&gt;
 -------------------+------------------+------------+------------&lt;br /&gt;
  S5                | Мелисандра       |      65000 | Мадрид&lt;br /&gt;
  S2                | Бран Старк       |      60000 | Мурманск&lt;br /&gt;
  S1                | Якен Хгар        |    1500000 | Йокогама&lt;br /&gt;
  S7                | Сирио Форель     |    1500000 | Йокогама&lt;br /&gt;
  S4                | Джейме Ланнистер |     750000 | Лондон&lt;br /&gt;
  S3                | Серсея Ланнистер |    1200000 | Лондон&lt;br /&gt;
  S8                | Тирион Ланнистер |       2571 | Манчестер&lt;br /&gt;
  S9                | Иванов           |      35000 | Мытищи&lt;br /&gt;
  S10               | Русе Болтон      |      44444 | Баренцбург&lt;br /&gt;
  S11               | Петров Иван      |      35000 | Мытищи&lt;br /&gt;
  S14               | Рендилл Тарли    |    1111111 | Прага&lt;br /&gt;
  S13               | Сэмвелл Тарли    |     999999 | Прага&lt;br /&gt;
  S6                | Оша              |            | Москва&lt;br /&gt;
  S16               | Ходор            |            | Москва&lt;br /&gt;
  S15               | Мелисса Флорент  |     888888 | Стокгольм&lt;br /&gt;
  S12               | Петров Пётр      |      35001 | Мытищи&lt;br /&gt;
  S17               | Томми Версетти   |  123456789 | Майами&lt;br /&gt;
 (17 rows)&lt;br /&gt;
&lt;br /&gt;
==== Детали ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.p;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_detali |       nazvanie       |     cvet      | ves  |      gorod&lt;br /&gt;
 --------------+----------------------+---------------+------+-----------------&lt;br /&gt;
  P9           | подставка            | синий         |  400 | Нижний Новгород&lt;br /&gt;
  P10          | стойка               | синий         | 2000 | Нижний Новгород&lt;br /&gt;
  P11          | абажур               | синий         |  400 | Нижний Новгород&lt;br /&gt;
  P1           | гайка                | чёрный        |   20 | Лондон&lt;br /&gt;
  P3           | ось                  | белый         | 5000 | Эдинбург&lt;br /&gt;
  P4           | зубчатое колесо      | чёрный        |   50 | Эдинбург&lt;br /&gt;
  P6           | транзистор           | коричневый    |    2 | Токио&lt;br /&gt;
  P7           | печатная плата       | зелёный       |  200 | Токио&lt;br /&gt;
  P8           | диод                 | коричневый    |    1 | Токио&lt;br /&gt;
  P12          | универсальная деталь | универсальный |    1 | Париж&lt;br /&gt;
  P13          | уникальная деталь    | уникальный    |    1 | Бостон&lt;br /&gt;
  P14          | болт                 | серый         |   20 | Ижевск&lt;br /&gt;
  P15          | рама                 | красный       | 3000 | Манчестер&lt;br /&gt;
  P16          | колесо               | белый         | 1500 | Манчестер&lt;br /&gt;
  P5           | втулка               | серый         |  350 | Манчестер&lt;br /&gt;
  P17          | бумага               | белый         |    1 | Астрахань&lt;br /&gt;
  P18          | плитка               | белый         |  300 | Флоренция&lt;br /&gt;
  P19          | орнамент             | серый         |  800 | Флоренция&lt;br /&gt;
  P20          | уголок               | серый         |  100 | Флоренция&lt;br /&gt;
  P21          | гайка 01-01          | серебристый   |   20 | Клин&lt;br /&gt;
  P22          | усиленная рама       | красный       | 3200 | Череповец&lt;br /&gt;
  P23          | винт                 | розовый       |    5 | Ижевск&lt;br /&gt;
  P24          | труселя              | красный       |   20 | Челябинск&lt;br /&gt;
  P25          | штуцерная деталь     | коричневый    |  450 | Череповец&lt;br /&gt;
  P2           | шуруп                | чёрный        |    5 | Лондон&lt;br /&gt;
 (25 rows)&lt;br /&gt;
&lt;br /&gt;
==== Изделия ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.j;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_izdelia |       nazvanie        |      gorod&lt;br /&gt;
 ---------------+-----------------------+-----------------&lt;br /&gt;
  J1            | автомобиль            | Магнитогорск&lt;br /&gt;
  J2            | процессор             | Зеленоград&lt;br /&gt;
  J3            | торшер                | Нижний Новгород&lt;br /&gt;
  J4            | универсальное изделие | Париж&lt;br /&gt;
  J5            | уникальное изделие    | Бостон&lt;br /&gt;
  J6            | велосипед 01/23       | Манчестер&lt;br /&gt;
  J7            | изделие из болтов     | Челябинск&lt;br /&gt;
  J8            | шкаф                  | Ярославль&lt;br /&gt;
  J9            | рама 02-01            | Череповец&lt;br /&gt;
  J10           | книга                 | Астрахань&lt;br /&gt;
  J11           | панно 01-03           | Флоренция&lt;br /&gt;
  J12           | велосипед 03-04       | Клин&lt;br /&gt;
  J13           | рама 02-03            | Череповец&lt;br /&gt;
  J14           | штуцер 01-02          | Череповец&lt;br /&gt;
  J15           | велосипед 01-04       | Клин&lt;br /&gt;
  J16           | кружевное бельё       | Челябинск&lt;br /&gt;
  J17           | штуцер 01-03          | Череповец&lt;br /&gt;
 (17 rows)&lt;br /&gt;
&lt;br /&gt;
==== Сборки ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.spj;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika | nomer_detali | nomer_izdelia | kolichestvo&lt;br /&gt;
 -------------------+--------------+---------------+-------------&lt;br /&gt;
  S1                | P6           | J2            |          20&lt;br /&gt;
  S1                | P7           | J2            |           5&lt;br /&gt;
  S2                | P1           | J1            |           4&lt;br /&gt;
  S6                | P4           | J1            |           2&lt;br /&gt;
  S6                | P5           | J1            |           6&lt;br /&gt;
  S3                | P9           | J3            |           1&lt;br /&gt;
  S4                | P10          | J3            |           1&lt;br /&gt;
  S5                | P11          | J3            |           1&lt;br /&gt;
  S2                | P4           | J1            |           8&lt;br /&gt;
  S6                | P3           | J1            |          50&lt;br /&gt;
  S7                | P8           | J2            |          25&lt;br /&gt;
  S1                | P12          | J4            |           1&lt;br /&gt;
  S2                | P12          | J4            |           1&lt;br /&gt;
  S3                | P12          | J4            |           1&lt;br /&gt;
  S4                | P12          | J4            |           1&lt;br /&gt;
  S5                | P12          | J4            |           1&lt;br /&gt;
  S7                | P12          | J4            |           1&lt;br /&gt;
  S7                | P2           | J1            |           1&lt;br /&gt;
  S6                | P2           | J1            |           9&lt;br /&gt;
  S6                | P12          | J4            |           7&lt;br /&gt;
  S1                | P13          | J5            |          14&lt;br /&gt;
  S6                | P14          | J1            |        9000&lt;br /&gt;
  S2                | P14          | J1            |           3&lt;br /&gt;
  S6                | P1           | J1            |          12&lt;br /&gt;
  S8                | P15          | J6            |           1&lt;br /&gt;
  S8                | P16          | J6            |           2&lt;br /&gt;
  S3                | P5           | J6            |          10&lt;br /&gt;
  S10               | P2           | J8            |           4&lt;br /&gt;
  S8                | P1           | J7            |          16&lt;br /&gt;
  S9                | P14          | J7            |           3&lt;br /&gt;
  S11               | P10          | J3            |           2&lt;br /&gt;
  S12               | P15          | J1            |           3&lt;br /&gt;
  S11               | P11          | J3            |           4&lt;br /&gt;
  S10               | P14          | J9            |           5&lt;br /&gt;
  S13               | P17          | J10           |        1001&lt;br /&gt;
  S14               | P17          | J10           |        1111&lt;br /&gt;
  S15               | P17          | J10           |        1010&lt;br /&gt;
  S5                | P18          | J11           |           9&lt;br /&gt;
  S5                | P19          | J11           |           1&lt;br /&gt;
  S5                | P20          | J11           |           4&lt;br /&gt;
  S9                | P14          | J8            |          25&lt;br /&gt;
  S12               | P21          | J12           |          15&lt;br /&gt;
  S11               | P22          | J13           |           9&lt;br /&gt;
  S11               | P1           | J14           |          26&lt;br /&gt;
  S12               | P1           | J14           |          13&lt;br /&gt;
  S12               | P2           | J14           |          54&lt;br /&gt;
  S12               | P23          | J4            |         101&lt;br /&gt;
  S12               | P16          | J15           |          40&lt;br /&gt;
  S7                | P21          | J12           |           3&lt;br /&gt;
  S8                | P21          | J12           |           4&lt;br /&gt;
  S9                | P21          | J12           |           5&lt;br /&gt;
  S1                | P24          | J16           |           1&lt;br /&gt;
  S1                | P15          | J6            |           3&lt;br /&gt;
  S4                | P25          | J17           |           1&lt;br /&gt;
  S17               | P16          | J1            |           4&lt;br /&gt;
 (55 rows)&lt;br /&gt;
&lt;br /&gt;
== Готовые запросы ==&lt;br /&gt;
&lt;br /&gt;
Если видите, что тот или иной запрос можно составить короче и рациональней - смело вносите правку.&lt;br /&gt;
&lt;br /&gt;
В трёх билетах в задании на запрос встречается формулировка &amp;quot;&#039;&#039;только и только&#039;&#039;&amp;quot;. Как оказалось, это означает следующее: если холодильники поставляет &#039;&#039;только и только&#039;&#039; Уася, то:&lt;br /&gt;
# кроме Уаси никто не поставляет холодильники;&lt;br /&gt;
# Уася не поставляет ничего, кроме холодильников.&lt;br /&gt;
&lt;br /&gt;
Существующие запросы, естественно, оказались неправильными и их пришлось переписать. &amp;lt;s&amp;gt;Великий и могучий русский языка, ну что за экономия на бумаге.&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Билет 1 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера поставщиков, которые поставляют, по крайней мере, все те детали, которые поставляет поставщик с номером &#039;S2&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nomer_postavshika&lt;br /&gt;
FROM spasoi_ekz.spj SPJX&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT nomer_detali&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJY&lt;br /&gt;
                  WHERE nomer_postavshika = &#039;S2&#039;&lt;br /&gt;
                    AND NOT EXISTS (&lt;br /&gt;
                                    SELECT *&lt;br /&gt;
                                    FROM spasoi_ekz.spj&lt;br /&gt;
                                    WHERE nomer_postavshika = SPJX.nomer_postavshika&lt;br /&gt;
                                      AND nomer_detali = SPJY.nomer_detali&lt;br /&gt;
                                   )&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika&lt;br /&gt;
 -------------------&lt;br /&gt;
  S6&lt;br /&gt;
  S2&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 2 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера деталей и общее их количество для всех номеров деталей, поставляемых более чем одним поставщиком.&lt;br /&gt;
&lt;br /&gt;
Текст запроса, каким его дал Григорьев на лекции, впоследствии исправив его:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali AS &amp;quot;Номер детали&amp;quot;,&lt;br /&gt;
       SUM(kolichestvo) AS &amp;quot;Сколько штук поставляется&amp;quot;,&lt;br /&gt;
       COUNT(DISTINCT nomer_postavshika) AS &amp;quot;Сколько у неё поставщиков&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_postavshika) &amp;gt; 1;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali AS &amp;quot;Номер детали&amp;quot;,&lt;br /&gt;
       kol AS &amp;quot;Сколько штук поставляется&amp;quot;&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT nomer_detali,&lt;br /&gt;
             SUM(kolichestvo) AS kol,&lt;br /&gt;
             COUNT(DISTINCT nomer_postavshika)&lt;br /&gt;
      FROM spasoi_ekz.spj&lt;br /&gt;
      GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_postavshika) &amp;gt; 1&lt;br /&gt;
     ) A;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер детали | Сколько штук поставляется | Сколько у неё поставщиков&lt;br /&gt;
 --------------+---------------------------+---------------------------&lt;br /&gt;
  P1           |                        71 |                         5&lt;br /&gt;
  P10          |                         3 |                         2&lt;br /&gt;
  P11          |                         5 |                         2&lt;br /&gt;
  P12          |                        13 |                         7&lt;br /&gt;
  P14          |                      9036 |                         4&lt;br /&gt;
  P15          |                         7 |                         3&lt;br /&gt;
  P16          |                        46 |                         3&lt;br /&gt;
  P17          |                      3122 |                         3&lt;br /&gt;
  P2           |                        68 |                         4&lt;br /&gt;
  P21          |                        27 |                         4&lt;br /&gt;
  P4           |                        10 |                         2&lt;br /&gt;
  P5           |                        16 |                         2&lt;br /&gt;
 (12 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 3 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера поставщиков, поставляющих детали с номером &#039;P1&#039; для какого-либо изделия в количестве (в поставке) большим, чем средний объём поставок деталей с номером &#039;P2&#039; для этого изделия.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT X.nomer_postavshika &lt;br /&gt;
FROM spasoi_ekz.spj X&lt;br /&gt;
WHERE X.nomer_detali = &#039;P1&#039;&lt;br /&gt;
  AND X.kolichestvo &amp;gt; (&lt;br /&gt;
                       SELECT AVG(kolichestvo)&lt;br /&gt;
                       FROM spasoi_ekz.spj&lt;br /&gt;
                       WHERE nomer_izdelia = X.nomer_izdelia&lt;br /&gt;
                         AND nomer_detali = &#039;P2&#039;&lt;br /&gt;
                      );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но длиннее и нерациональней&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nomer_postavshika&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT *&lt;br /&gt;
      FROM spasoi_ekz.spj&lt;br /&gt;
      WHERE nomer_izdelia IN(&lt;br /&gt;
                             SELECT nomer_izdelia&lt;br /&gt;
                             FROM spasoi_ekz.spj&lt;br /&gt;
                             WHERE nomer_detali = &#039;P1&#039;&lt;br /&gt;
                            )&lt;br /&gt;
        AND nomer_izdelia IN(&lt;br /&gt;
	                     SELECT nomer_izdelia&lt;br /&gt;
	                     FROM spasoi_ekz.spj&lt;br /&gt;
	                     WHERE nomer_detali = &#039;P2&#039;&lt;br /&gt;
	                    )&lt;br /&gt;
     ) A&lt;br /&gt;
WHERE nomer_detali = &#039;P1&#039; AND kolichestvo &amp;gt;&lt;br /&gt;
(&lt;br /&gt;
 SELECT AVG(kolichestvo)&lt;br /&gt;
 FROM (&lt;br /&gt;
       SELECT *&lt;br /&gt;
       FROM spasoi_ekz.spj&lt;br /&gt;
       WHERE nomer_izdelia IN(&lt;br /&gt;
                              SELECT nomer_izdelia&lt;br /&gt;
                              FROM spasoi_ekz.spj&lt;br /&gt;
                              WHERE nomer_detali = &#039;P1&#039;&lt;br /&gt;
                             )&lt;br /&gt;
         AND nomer_izdelia IN(&lt;br /&gt;
                              SELECT nomer_izdelia&lt;br /&gt;
                              FROM spasoi_ekz.spj&lt;br /&gt;
                              WHERE nomer_detali = &#039;P2&#039;&lt;br /&gt;
                             )&lt;br /&gt;
      ) B&lt;br /&gt;
 WHERE nomer_detali = &#039;P2&#039;&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika&lt;br /&gt;
 -------------------&lt;br /&gt;
  S6&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 4 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера изделий, для которых детали поставляет только поставщик с номером ‘S1’.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_izdelia&lt;br /&gt;
FROM spasoi_ekz.spj X&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT *&lt;br /&gt;
                  FROM spasoi_ekz.spj&lt;br /&gt;
                  WHERE nomer_postavshika != &#039;S1&#039;&lt;br /&gt;
                    AND X.nomer_izdelia = nomer_izdelia&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но без EXISTS&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nomer_izdelia&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
WHERE nomer_izdelia IN(&lt;br /&gt;
                       SELECT nomer_izdelia&lt;br /&gt;
                       FROM spasoi_ekz.spj&lt;br /&gt;
                       WHERE nomer_postavshika = &#039;S1&#039;&lt;br /&gt;
                      )&lt;br /&gt;
  AND nomer_izdelia NOT IN(&lt;br /&gt;
                           SELECT nomer_izdelia&lt;br /&gt;
                           FROM spasoi_ekz.spj&lt;br /&gt;
                           WHERE nomer_postavshika != &#039;S1&#039;&lt;br /&gt;
                          );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_izdelia&lt;br /&gt;
 ---------------&lt;br /&gt;
  J5&lt;br /&gt;
  J16&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 5 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих детали с названием &amp;quot;Болт&amp;quot; в количестве (в поставке) большим, чем средний объём всех поставок деталей с номером &#039;P1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                           ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                        JOIN spasoi_ekz.p P&lt;br /&gt;
                           ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                              AND nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
WHERE kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT AVG(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                                               ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                                  AND SPJ.nomer_detali = &#039;P1&#039;&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но без JOIN&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s&lt;br /&gt;
WHERE nomer_postavshika IN (&lt;br /&gt;
                            SELECT nomer_postavshika&lt;br /&gt;
                            FROM spasoi_ekz.spj&lt;br /&gt;
                            WHERE nomer_detali = (&lt;br /&gt;
                                                  SELECT nomer_detali&lt;br /&gt;
                                                  FROM spasoi_ekz.p&lt;br /&gt;
                                                  WHERE LOWER(nazvanie) = LOWER(&#039;Болт&#039;)&lt;br /&gt;
                                                 )&lt;br /&gt;
                              AND kolichestvo &amp;gt; (&lt;br /&gt;
                                                 SELECT AVG(kolichestvo)&lt;br /&gt;
                                                 FROM spasoi_ekz.spj&lt;br /&gt;
                                                 WHERE nomer_detali = &#039;P1&#039;&lt;br /&gt;
                                                )&lt;br /&gt;
                           );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  imya&lt;br /&gt;
 ------&lt;br /&gt;
  Оша&lt;br /&gt;
  Иванов&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 6 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия деталей, поставляемых поставщиком, проживающим в том же городе, где изготавливаются эти детали, для изделия с названием ‘Велосипед 01/23’.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT P.nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                        JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                        JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
WHERE S.gorod = P.gorod&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Велосипед 01/23&#039;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос без JOIN&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nazvanie&lt;br /&gt;
FROM spasoi_ekz.S S, spasoi_ekz.p P, spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE S.gorod = P.gorod&lt;br /&gt;
  AND P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
  AND S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
  AND nomer_izdelia = (&lt;br /&gt;
                       SELECT nomer_izdelia&lt;br /&gt;
                       FROM spasoi_ekz.j&lt;br /&gt;
                       WHERE nazvanie = LOWER(&#039;Велосипед 01/23&#039;)&lt;br /&gt;
                      );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nazvanie&lt;br /&gt;
 ----------&lt;br /&gt;
  рама&lt;br /&gt;
  колесо&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 7 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия изделий, куда входят детали с названием &#039;Болт&#039;, поставляемых поставщиками с именем &#039;Иванов&#039;, в количестве (в поставке) большим, чем средний объём поставок для этого изделия.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT j.nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj	&lt;br /&gt;
                JOIN spasoi_ekz.s ON spj.nomer_postavshika = s.nomer_postavshika	&lt;br /&gt;
                JOIN spasoi_ekz.p ON spj.nomer_detali = p.nomer_detali	&lt;br /&gt;
                JOIN spasoi_ekz.j ON spj.nomer_izdelia = j.nomer_izdelia&lt;br /&gt;
WHERE imya LIKE &#039;Иванов&#039; AND&lt;br /&gt;
p.nazvanie LIKE LOWER(&#039;Болт&#039;) AND&lt;br /&gt;
kolichestvo &amp;gt; (		&lt;br /&gt;
               SELECT AVG(kolichestvo)		&lt;br /&gt;
               FROM spasoi_ekz.spj X		&lt;br /&gt;
               WHERE spj.nomer_izdelia = X.nomer_izdelia               &lt;br /&gt;
              );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie&lt;br /&gt;
FROM spasoi_ekz.j&lt;br /&gt;
WHERE nomer_izdelia IN (&lt;br /&gt;
                        SELECT nomer_izdelia&lt;br /&gt;
                        FROM (spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                                                   ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                                                      AND imya = &#039;Иванов&#039;&lt;br /&gt;
                                                 JOIN spasoi_ekz.p P&lt;br /&gt;
                                                   ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                                      AND nazvanie = LOWER(&#039;Болт&#039;)) A&lt;br /&gt;
                        WHERE kolichestvo &amp;gt; (&lt;br /&gt;
                                             SELECT AVG(kolichestvo)&lt;br /&gt;
                                             FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                                                       ON SPJ.nomer_izdelia = A.nomer_izdelia&lt;br /&gt;
                                            )&lt;br /&gt;
                       );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но длиннее и нерациональней&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT J.nazvanie, kolichestvo&lt;br /&gt;
      FROM spasoi_ekz.s S, spasoi_ekz.p P, spasoi_ekz.j J, spasoi_ekz.spj SPJ&lt;br /&gt;
      WHERE J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
        AND P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
        AND P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
        AND S.imya = &#039;Иванов&#039;&lt;br /&gt;
        AND S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
     ) A&lt;br /&gt;
WHERE kolichestvo &amp;gt;&lt;br /&gt;
(&lt;br /&gt;
 SELECT AVG(kolichestvo)&lt;br /&gt;
 FROM spasoi_ekz.spj&lt;br /&gt;
 WHERE nomer_izdelia IN(&lt;br /&gt;
                        SELECT J.nomer_izdelia&lt;br /&gt;
                        FROM spasoi_ekz.s S, spasoi_ekz.p P, spasoi_ekz.j J, spasoi_ekz.spj SPJ&lt;br /&gt;
                        WHERE J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
                          AND P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                          AND P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
                          AND S.imya = &#039;Иванов&#039;&lt;br /&gt;
                          AND S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
                       )&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
      nazvanie&lt;br /&gt;
 -------------------&lt;br /&gt;
  шкаф&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 8 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера изделий и общее количество деталей для них, поставляемых поставщиками с именем &#039;Петров&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_izdelia AS &amp;quot;Номер изделия&amp;quot;, SUM(kolichestvo) AS &amp;quot;Количество деталей&amp;quot; &lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                             -- так как &amp;quot;поставщикАМИ&amp;quot; и возможны&lt;br /&gt;
                             -- Иван Петров и Петров Иван, то LIKE %Петров%&lt;br /&gt;
                             AND imya LIKE &#039;%Петров%&#039;&lt;br /&gt;
GROUP BY nomer_izdelia;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер изделия | Количество деталей&lt;br /&gt;
 ---------------+--------------------&lt;br /&gt;
  J4            |                101&lt;br /&gt;
  J3            |                  6&lt;br /&gt;
  J13           |                  9&lt;br /&gt;
  J15           |                 40&lt;br /&gt;
  J1            |                  3&lt;br /&gt;
  J12           |                 15&lt;br /&gt;
  J14           |                 93&lt;br /&gt;
 (7 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 9 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера деталей и общее их количество для всех номеров деталей, которые входят только в одно изделие.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali, SUM(kolichestvo)&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_izdelia) = 1;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali, kol FROM (&lt;br /&gt;
       SELECT nomer_detali, SUM(kolichestvo) AS kol, COUNT(DISTINCT nomer_izdelia) = 1&lt;br /&gt;
       FROM spasoi_ekz.spj&lt;br /&gt;
       GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_izdelia) = 1&lt;br /&gt;
    ) A;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_detali | sum&lt;br /&gt;
 --------------+------&lt;br /&gt;
  P10          |    3&lt;br /&gt;
  P11          |    5&lt;br /&gt;
  P12          |   13&lt;br /&gt;
  P13          |   14&lt;br /&gt;
  P17          | 3122&lt;br /&gt;
  P18          |    9&lt;br /&gt;
  P19          |    1&lt;br /&gt;
  P20          |    4&lt;br /&gt;
  P21          |   27&lt;br /&gt;
  P22          |    9&lt;br /&gt;
  P23          |  101&lt;br /&gt;
  P24          |    1&lt;br /&gt;
  P25          |    1&lt;br /&gt;
  P3           |   50&lt;br /&gt;
  P4           |   10&lt;br /&gt;
  P6           |   20&lt;br /&gt;
  P7           |    5&lt;br /&gt;
  P8           |   25&lt;br /&gt;
  P9           |    1&lt;br /&gt;
 (19 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 10 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих детали с названием &#039;Болт&#039; для изделия с названием &#039;Рама 02-01&#039; в количестве (в поставке) большим, чем минимальное значение поставки детали с номером &#039;P1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
			   ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
			      AND J.nazvanie = LOWER(&#039;Рама 02-01&#039;)&lt;br /&gt;
			 JOIN spasoi_ekz.p P&lt;br /&gt;
			   ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
			      AND P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
			 JOIN spasoi_ekz.s S&lt;br /&gt;
			   ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE kolichestvo &amp;gt; (&lt;br /&gt;
		     SELECT MIN(kolichestvo)&lt;br /&gt;
		     FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
					       ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
					          AND P.nomer_detali = &#039;P1&#039;&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Русе Болтон&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 11 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия городов и суммарное состояние проживающих в каждом городе поставщиков, у которых минимальный объём поставки деталей больше 1000.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT gorod, SUM(sostoyanie)&lt;br /&gt;
FROM spasoi_ekz.s&lt;br /&gt;
WHERE nomer_postavshika IN (&lt;br /&gt;
                            SELECT nomer_postavshika&lt;br /&gt;
                            FROM spasoi_ekz.spj&lt;br /&gt;
                            GROUP BY nomer_postavshika HAVING MIN(kolichestvo) &amp;gt; 1000&lt;br /&gt;
                           )&lt;br /&gt;
GROUP BY gorod;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;!-- этот запрос выполняет не совсем то и не правильно&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT gorod, sost&lt;br /&gt;
FROM (&lt;br /&gt;
SELECT gorod, SUM(sostoyanie) AS sost, SUM(SPJ.kolichestvo)&lt;br /&gt;
FROM spasoi_ekz.spj, spasoi_ekz.s&lt;br /&gt;
WHERE S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
GROUP BY S.gorod HAVING SUM(SPJ.kolichestvo) &amp;gt; 1000&lt;br /&gt;
) A;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; --&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
    gorod   |   sum&lt;br /&gt;
 -----------+---------&lt;br /&gt;
  Прага     | 2111110&lt;br /&gt;
  Стокгольм |  888888&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 12 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера деталей, поставляемых для какого-либо изделия поставщиком, проживающим в том же городе, где изготавливается это изделие.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali&lt;br /&gt;
FROM spasoi_ekz.spj SPJ, spasoi_ekz.s S, spasoi_ekz.j J&lt;br /&gt;
WHERE SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
  AND S.gorod = J.gorod&lt;br /&gt;
  AND J.nomer_izdelia = SPJ.nomer_izdelia;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_detali&lt;br /&gt;
 --------------&lt;br /&gt;
  P15&lt;br /&gt;
  P16&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 13 ===&lt;br /&gt;
&lt;br /&gt;
Написать &amp;lt;u&amp;gt;один&amp;lt;/u&amp;gt; запрос SELECT: выдать количества строк в таблице S (Поставщик) 1) с пустыми значениями и 2) непустыми значениями в столбце Состояние.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT COUNT(nomer_postavshika) - COUNT(sostoyanie) AS &amp;quot;С пустым состоянием&amp;quot;, &lt;br /&gt;
       COUNT(sostoyanie) AS &amp;quot;С не пустым состоянием&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.s;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но длиннее и нерациональней&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SELECT COUNT(Snull.*) AS &amp;quot;С пустым состоянием&amp;quot;, COUNT(Snotnull.sostoyanie) AS &amp;quot;С не пустым состоянием&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.s Snull RIGHT OUTER JOIN spasoi_ekz.s Snotnull&lt;br /&gt;
                                      ON Snull.nomer_postavshika = Snotnull.nomer_postavshika&lt;br /&gt;
                                         AND Snull.sostoyanie IS NULL;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  С пустым состоянием | С не пустым состоянием&lt;br /&gt;
 ---------------------+-----------------------&lt;br /&gt;
                    2 |                    15&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 14 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют детали только и только для изделия с номером &#039;J1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj A JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON A.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE nomer_izdelia = &#039;J1&#039;&lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT nomer_postavshika&lt;br /&gt;
                  FROM spasoi_ekz.spj&lt;br /&gt;
                  WHERE nomer_izdelia != &#039;J1&#039;&lt;br /&gt;
                    AND nomer_postavshika = A.nomer_postavshika&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       imya&lt;br /&gt;
 ----------------&lt;br /&gt;
  Томми Версетти&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 15 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать наименования изделий, для которых детали поставляют только те поставщики, у которых состояние больше 1000000 у.е.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                        JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
WHERE sostoyanie &amp;gt; 1000000&lt;br /&gt;
  AND SPJ.nomer_izdelia NOT IN (&lt;br /&gt;
                                SELECT nomer_izdelia&lt;br /&gt;
                                FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                                                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                                WHERE sostoyanie &amp;lt; 1000000&lt;br /&gt;
                               );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       nazvanie&lt;br /&gt;
 --------------------&lt;br /&gt;
  кружевное бельё&lt;br /&gt;
  уникальное изделие&lt;br /&gt;
  процессор&lt;br /&gt;
 (3 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 16 ===&lt;br /&gt;
Написать запрос SELECT: выдать цвета и для каждого цвета общее количество деталей, входящих в изделие с названием &#039;Панно 01-03&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT cvet AS &amp;quot;Цвет&amp;quot;, SUM(kolichestvo) AS &amp;quot;Деталей&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
			     AND J.nazvanie = LOWER(&#039;Панно 01-03&#039;)&lt;br /&gt;
			JOIN spasoi_ekz.P P&lt;br /&gt;
			  ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
GROUP BY cvet;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Цвет  | Деталей&lt;br /&gt;
 -------+---------&lt;br /&gt;
  белый |       9&lt;br /&gt;
  серый |       5&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 17 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера поставщиков и количество сделанных ими поставок при условии, что среднее число деталей во всех этих поставках больше 1000.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nom AS &amp;quot;Номер поставщика&amp;quot;, cnt AS &amp;quot;Количество поставок&amp;quot;&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT S.nomer_postavshika AS nom,&lt;br /&gt;
             COUNT(SPJ.nomer_postavshika) AS cnt,&lt;br /&gt;
             AVG(SPJ.kolichestvo) AS kol&lt;br /&gt;
      FROM spasoi_ekz.s S, spasoi_ekz.spj SPJ&lt;br /&gt;
      WHERE S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
      GROUP BY S.nomer_postavshika&lt;br /&gt;
     ) A&lt;br /&gt;
WHERE kol &amp;gt; 1000;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос немного попроще&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_postavshika AS &amp;quot;Номер поставщика&amp;quot;, COUNT(*) AS &amp;quot;Количество поставок&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
WHERE nomer_postavshika IN (&lt;br /&gt;
                            SELECT nomer_postavshika&lt;br /&gt;
                            FROM spasoi_ekz.spj&lt;br /&gt;
                            GROUP BY nomer_postavshika HAVING AVG(kolichestvo) &amp;gt; 1000&lt;br /&gt;
                           )&lt;br /&gt;
GROUP BY nomer_postavshika;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер поставщика | Количество поставок&lt;br /&gt;
 ------------------+---------------------&lt;br /&gt;
  S13              |                   1&lt;br /&gt;
  S6               |                   7&lt;br /&gt;
  S14              |                   1&lt;br /&gt;
  S15              |                   1&lt;br /&gt;
 (4 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 18 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, имеющих состояние больше 1000 и поставляющих деталь с названием &#039;Гайка 01-01&#039; для изделия с названием &#039;Велосипед 03-04&#039; в количестве (в поставке) большим, чем средний объём поставки, выполненной поставщиками с именем &#039;Иванов&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:2nd dufficulty.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;5px&amp;quot;&amp;gt;&#039;&#039;&#039;Второй по сложности запрос экзамена!&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;4px&amp;quot;&amp;gt;&#039;&#039;&#039;Вот уж не свезло, так не свезло&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                    JOIN spasoi_ekz.j J&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
WHERE sostoyanie &amp;gt; 1000&lt;br /&gt;
  AND P.nazvanie = LOWER(&#039;Гайка 01-01&#039;)&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Велосипед 03-04&#039;)&lt;br /&gt;
  AND kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT AVG(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                       ON SPJ.nomer_postavshika = S.nomer_postavshika &lt;br /&gt;
                     WHERE S.imya = &#039;Иванов&#039;&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Пётр&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 19 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия красных деталей, которые входят только в изделие с названием &#039;Рама 02-03&#039; в количестве, меньшем 10 единиц в поставке.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT X.nazvanie&lt;br /&gt;
FROM spasoi_ekz.p X JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_detali = X.nomer_detali&lt;br /&gt;
                    JOIN spasoi_ekz.j J&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
WHERE X.cvet = &#039;красный&#039;&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Рама 02-03&#039;)&lt;br /&gt;
  AND kolichestvo &amp;lt; 10&lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT J.nomer_izdelia&lt;br /&gt;
                  FROM spasoi_ekz.j J JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                                        ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                  WHERE J.nazvanie != LOWER(&#039;Рама 02-03&#039;)&lt;br /&gt;
                    AND X.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант этого же запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT P.nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND cvet = &#039;красный&#039;&lt;br /&gt;
                        JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                              AND J.nazvanie = LOWER(&#039;Рама 02-03&#039;)&lt;br /&gt;
WHERE kolichestvo &amp;lt; 10&lt;br /&gt;
  AND SPJ.nomer_detali NOT IN (&lt;br /&gt;
                               SELECT nomer_detali&lt;br /&gt;
                               FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                                         ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                                                            AND J.nazvanie != LOWER(&#039;Рама 02-03&#039;)&lt;br /&gt;
                              );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     nazvanie&lt;br /&gt;
 ----------------&lt;br /&gt;
  усиленная рама&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 20 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих только белые детали.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
WHERE cvet = &#039;белый&#039;&lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT nomer_postavshika&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                                            ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                  WHERE nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    AND P.cvet != &#039;белый&#039;&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё один вариант этого же запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND cvet = &#039;белый&#039;&lt;br /&gt;
                        JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE S.nomer_postavshika NOT IN (&lt;br /&gt;
                                  SELECT nomer_postavshika&lt;br /&gt;
                                  FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                                                            ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                                               AND cvet != &#039;белый&#039;&lt;br /&gt;
                                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;И ещё один вариант этого же запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s&lt;br /&gt;
WHERE nomer_postavshika NOT IN  (&lt;br /&gt;
                                 SELECT spj.nomer_postavshika&lt;br /&gt;
                                 FROM spasoi_ekz.spj SPJ, spasoi_ekz.p P&lt;br /&gt;
                                 WHERE SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                   AND p.cvet != &#039;белый&#039;&lt;br /&gt;
                                )&lt;br /&gt;
  AND nomer_postavshika  IN (&lt;br /&gt;
                             SELECT spj.nomer_postavshika&lt;br /&gt;
                             FROM spasoi_ekz.spj SPJ, spasoi_ekz.p P&lt;br /&gt;
                             WHERE SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                               AND p.cvet = &#039;белый&#039;&lt;br /&gt;
                            );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       imya&lt;br /&gt;
 -----------------&lt;br /&gt;
  Рендилл Тарли&lt;br /&gt;
  Сэмвелл Тарли&lt;br /&gt;
  Мелисса Флорент&lt;br /&gt;
  Томми Версетти&lt;br /&gt;
 (4 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 21 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия изделий, для которых детали поставляет только и только поставщик с номером &#039;S1&#039;.&lt;br /&gt;
&lt;br /&gt;
Чтобы продемонстрировать выполнение запроса наглядно, возьмём поставщика не &#039;S1&#039;, а &#039;S18&#039;, который был создан специально для этого запроса. Если оставить &#039;S1&#039;, то наглядности не получится, так как по нашей схеме БД этот поставщик не попадает под условие &amp;quot;&#039;&#039;только и только&#039;&#039;&amp;quot;, и запрос вернёт пустой результат.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie&lt;br /&gt;
FROM spasoi_ekz.j J, spasoi_ekz.SPJ SPJ&lt;br /&gt;
WHERE J.nomer_izdelia = SPJ.nomer_izdelia &lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT *&lt;br /&gt;
                  FROM spasoi_ekz.spj&lt;br /&gt;
                  WHERE nomer_postavshika != &#039;S18&#039; AND nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                 )&lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT *&lt;br /&gt;
                  FROM spasoi_ekz.spj&lt;br /&gt;
                  WHERE nomer_postavshika = &#039;S18&#039; AND nomer_izdelia != J.nomer_izdelia&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       nazvanie&lt;br /&gt;
 --------------------&lt;br /&gt;
  кинжал&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 22 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют только детали с номером &#039;P1&#039; для изделия с именем &#039;Штуцер 01-02&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- неверный запрос - номер изделия, а не название&lt;br /&gt;
SELECT imya FROM S X&lt;br /&gt;
JOIN SPJ Y ON X.nomer_postavshika=Y.nomer_postavshika&lt;br /&gt;
WHERE X.nomer_postavshika NOT IN (&lt;br /&gt;
                  SELECT DISTINCT nomer_postavshika FROM SPJ Z&lt;br /&gt;
                  WHERE Z.nomer_izdelia != &#039;Штуцер 01-02&#039;&lt;br /&gt;
                  AND Z.nomer_detali!=&#039;P1&#039;);--&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                             AND J.nazvanie = LOWER(&#039;штуцер 01-02&#039;)&lt;br /&gt;
                        JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND SPJ.nomer_detali = &#039;P1&#039;&lt;br /&gt;
                        JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE SPJ.nomer_postavshika NOT IN (&lt;br /&gt;
                                    SELECT nomer_postavshika&lt;br /&gt;
                                    FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                                              ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                                                                 AND J.nazvanie = LOWER(&#039;штуцер 01-02&#039;)&lt;br /&gt;
                                                            JOIN spasoi_ekz.p P&lt;br /&gt;
                                                              ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                                                 AND SPJ.nomer_detali != &#039;P1&#039;&lt;br /&gt;
                              );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Иван&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 23 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют деталь с названием &#039;Винт&#039; в количестве большим 100 единиц в одной поставке и имеют состояние больше среднего по их родному городу.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT S.imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
WHERE P.nazvanie = LOWER(&#039;Винт&#039;)&lt;br /&gt;
  AND SPJ.kolichestvo &amp;gt; 100&lt;br /&gt;
  AND S.sostoyanie &amp;gt; (&lt;br /&gt;
                      SELECT AVG(SS.sostoyanie)&lt;br /&gt;
                      FROM spasoi_ekz.s SS&lt;br /&gt;
                      WHERE SS.gorod = S.gorod&lt;br /&gt;
                     );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Пётр&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 24 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать наименования деталей и общее их количество для всех наименований деталей, изготавливаемых в одном городе.&lt;br /&gt;
&lt;br /&gt;
С этим запросом возникла неожиданная проблема - задание то ли неполное, то ли неправильное, потому что нельзя однозначно сказать, что по нему требуется сделать.&lt;br /&gt;
&lt;br /&gt;
Так что тут несколько вариантов запросов (кто как понял).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Первый вариант запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie, kol&lt;br /&gt;
FROM spasoi_ekz.p A, (&lt;br /&gt;
                      SELECT X.gorod, SUM(kolichestvo) as kol&lt;br /&gt;
                      FROM spasoi_ekz.p X, spasoi_ekz.spj Y&lt;br /&gt;
                      WHERE Y.nomer_detali = X.nomer_detali&lt;br /&gt;
                      GROUP BY X.gorod&lt;br /&gt;
                     ) B&lt;br /&gt;
WHERE A.gorod = B.gorod;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
        nazvanie       | kol&lt;br /&gt;
 ----------------------+------&lt;br /&gt;
  подставка            |    9&lt;br /&gt;
  стойка               |    9&lt;br /&gt;
  абажур               |    9&lt;br /&gt;
  гайка                |  139&lt;br /&gt;
  ось                  |   60&lt;br /&gt;
  зубчатое колесо      |   60&lt;br /&gt;
  транзистор           |   50&lt;br /&gt;
  печатная плата       |   50&lt;br /&gt;
  диод                 |   50&lt;br /&gt;
  универсальная деталь |   13&lt;br /&gt;
  уникальная деталь    |   14&lt;br /&gt;
  болт                 | 9137&lt;br /&gt;
  рама                 |   69&lt;br /&gt;
  колесо               |   69&lt;br /&gt;
  втулка               |   69&lt;br /&gt;
  бумага               | 3122&lt;br /&gt;
  плитка               |   14&lt;br /&gt;
  орнамент             |   14&lt;br /&gt;
  уголок               |   14&lt;br /&gt;
  гайка 01-01          |   27&lt;br /&gt;
  усиленная рама       |   10&lt;br /&gt;
  винт                 | 9137&lt;br /&gt;
  труселя              |    1&lt;br /&gt;
  штуцерная деталь     |   10&lt;br /&gt;
  шуруп                |  139&lt;br /&gt;
 (25 rows)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
и&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Второй вариант запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
В уточнение задания Григорьев сказал следующее: &amp;quot;&#039;&#039;Следует учесть, что в качестве наименования города может выступать переменная, в которую в некоторой программе должно быть занесено конкретное значение перед выполнением запроса&#039;&#039;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
То есть, вообще говоря, задание на запрос неполное, и его можно трактовать так: выдать наименования деталей и общее их количество для всех наименований деталей, изготавливаемых в городе &amp;lt;code&amp;gt;%НАЗВАНИЕГОРОДА%&amp;lt;/code&amp;gt;. Вот эта переменная задаётся где-то в программе, а в БД идёт запрос с уже подставленным конкретным названием. &lt;br /&gt;
&lt;br /&gt;
Этот вариант запроса составлен, например, для Лондона. &lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie, SUM(kolichestvo)&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
WHERE gorod = &#039;Лондон&#039;&lt;br /&gt;
GROUP BY nazvanie;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nazvanie | sum&lt;br /&gt;
 ----------+-----&lt;br /&gt;
  гайка    |  71&lt;br /&gt;
  шуруп    |  68&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Билет 25 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих хотя бы одну белую деталь для изделия с названием &#039;Велосипед 01-04&#039; с объёмом поставки большим, чем средний объём поставки этого поставщика.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                    JOIN spasoi_ekz.j J&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
WHERE cvet = &#039;белый&#039;&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Велосипед 01-04&#039;)&lt;br /&gt;
  AND kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT AVG(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj SPJ&lt;br /&gt;
                     WHERE SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Пётр&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 26 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера красных деталей и количество поставок этих деталей.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT P.nomer_detali AS &amp;quot;Номер детали&amp;quot;, COUNT(kolichestvo) AS &amp;quot;Количество поставок с ней&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.p P, spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
  AND cvet = &#039;красный&#039;&lt;br /&gt;
GROUP BY P.nomer_detali;   &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос через JOIN&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT SPJ.nomer_detali AS &amp;quot;Номер детали&amp;quot;, COUNT(kolichestvo) AS &amp;quot;Количество поставок с ней&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND cvet = &#039;красный&#039;&lt;br /&gt;
GROUP BY SPJ.nomer_detali;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер детали | Количество поставок с ней&lt;br /&gt;
 --------------+---------------------------&lt;br /&gt;
  P15          |                         3&lt;br /&gt;
  P22          |                         1&lt;br /&gt;
  P24          |                         1&lt;br /&gt;
 (3 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 27 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать наименования городов и среднее состояние поставщиков для каждого города, поставляющих детали с названием &#039;Гайка 01-01&#039; для изделия с названием &#039;Велосипед 03-04&#039; в количестве (в поставке) большим, чем минимальный объём поставки, выполненной поставщиком с номером &#039;S1&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:1st dufficulty.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;7px&amp;quot;&amp;gt;&#039;&#039;&#039;Сложнейший запрос экзамена!&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;5px&amp;quot;&amp;gt;&#039;&#039;&#039;Сохрани Джа, вытащить такое&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT S.gorod AS &amp;quot;Город&amp;quot;, AVG(S.sostoyanie) AS &amp;quot;Среднее состояние&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                    JOIN spasoi_ekz.j J&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
WHERE P.nazvanie = LOWER(&#039;Гайка 01-01&#039;)&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Велосипед 03-04&#039;)&lt;br /&gt;
  AND kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT MIN(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj&lt;br /&gt;
                     WHERE nomer_postavshika = &#039;S1&#039;&lt;br /&gt;
                    )&lt;br /&gt;
GROUP BY S.gorod;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
    Город   |   Среднее состояние&lt;br /&gt;
 -----------+-----------------------&lt;br /&gt;
  Мытищи    |    35000.500000000000&lt;br /&gt;
  Йокогама  |  1500000.000000000000&lt;br /&gt;
  Манчестер | 2571.0000000000000000&lt;br /&gt;
 (3 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 28 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия изделий, куда входит хотя бы одна красная деталь весом больше 10 граммов, поставляемая только поставщиком с номером &#039;S1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT J.nazvanie&lt;br /&gt;
FROM spasoi_ekz.j J JOIN spasoi_ekz.spj SPJ1&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ1.nomer_izdelia&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ1.nomer_detali&lt;br /&gt;
WHERE P.ves &amp;gt; 10&lt;br /&gt;
 AND P.cvet = &#039;красный&#039;&lt;br /&gt;
 AND NOT EXISTS (&lt;br /&gt;
                 SELECT SPJ2.nomer_postavshika&lt;br /&gt;
                 FROM spasoi_ekz.spj SPJ2         &lt;br /&gt;
                 WHERE SPJ2.nomer_detali = P.nomer_detali&lt;br /&gt;
	 	   AND SPJ2.nomer_postavshika != &#039;S1&#039;&lt;br /&gt;
                );                     &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     nazvanie&lt;br /&gt;
 -----------------&lt;br /&gt;
  кружевное бельё&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 29 ===&lt;br /&gt;
Написать запрос SELECT: выдать названия деталей, которые входят только и только в состав изделия с названием &#039;Штуцер 01-03&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie, nomer_izdelia&lt;br /&gt;
FROM spasoi_ekz.p P, spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE P.nomer_detali = SPJ.nomer_detali &lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT SPJ.nomer_izdelia&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                            ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
                  WHERE (&lt;br /&gt;
                         J.nazvanie != LOWER(&#039;Штуцер 01-03&#039;)&lt;br /&gt;
                         AND&lt;br /&gt;
                         SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                        )&lt;br /&gt;
                     OR (&lt;br /&gt;
                         J.nazvanie = LOWER(&#039;Штуцер 01-03&#039;)&lt;br /&gt;
                         AND&lt;br /&gt;
                         SPJ.nomer_detali != P.nomer_detali&lt;br /&gt;
                        )&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
      nazvanie&lt;br /&gt;
 ------------------&lt;br /&gt;
  штуцерная деталь&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 30 ===&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют, по крайней мере, все те детали, которые поставляет поставщик с номером &#039;S2&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT imya&lt;br /&gt;
FROM spasoi_ekz.s S&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT nomer_detali&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJY&lt;br /&gt;
                  WHERE nomer_postavshika = &#039;S2&#039;&lt;br /&gt;
                    AND NOT EXISTS (&lt;br /&gt;
                                    SELECT *&lt;br /&gt;
                                    FROM spasoi_ekz.spj&lt;br /&gt;
                                    WHERE nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                                      AND nomer_detali = SPJY.nomer_detali&lt;br /&gt;
                                   )&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  imya&lt;br /&gt;
 ------------&lt;br /&gt;
  Оша&lt;br /&gt;
  Бран Старк&lt;br /&gt;
 (2 rows)&lt;br /&gt;
[[Категория:Структурное проектирование АСОИ (10 семестр)]]&lt;/div&gt;</summary>
		<author><name>81.9.52.28</name></author>
	</entry>
	<entry>
		<id>https://iu5bmstu.ru/index.php?title=SQL-%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D1%8B_%D0%BA_%D1%8D%D0%BA%D0%B7%D0%B0%D0%BC%D0%B5%D0%BD%D1%83_%D0%BF%D0%BE_%D0%A1%D0%9F%D0%90%D0%A1%D0%9E%D0%98_(10_%D1%81%D0%B5%D0%BC%D0%B5%D1%81%D1%82%D1%80)&amp;diff=3819</id>
		<title>SQL-запросы к экзамену по СПАСОИ (10 семестр)</title>
		<link rel="alternate" type="text/html" href="https://iu5bmstu.ru/index.php?title=SQL-%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D1%8B_%D0%BA_%D1%8D%D0%BA%D0%B7%D0%B0%D0%BC%D0%B5%D0%BD%D1%83_%D0%BF%D0%BE_%D0%A1%D0%9F%D0%90%D0%A1%D0%9E%D0%98_(10_%D1%81%D0%B5%D0%BC%D0%B5%D1%81%D1%82%D1%80)&amp;diff=3819"/>
		<updated>2013-06-14T20:07:31Z</updated>

		<summary type="html">&lt;p&gt;81.9.52.28: /* Билет 6 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right; clear:both; margin-right:1.0em;&amp;quot;&amp;gt;__TOC__&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Билет экзамена по [[:Категория:Структурное проектирование АСОИ (10 семестр) | СПАСОИ]] состоит из двух частей:&lt;br /&gt;
# теория;&lt;br /&gt;
# SQL-запрос.&lt;br /&gt;
&lt;br /&gt;
На этой странице собраны все сформированные запросы по билетам.&lt;br /&gt;
&lt;br /&gt;
Странно, что ни в одном билете нет запроса с сортировкой результатов. Возможно, они буду в дополнительных заданиях.&lt;br /&gt;
&lt;br /&gt;
== Схема БД ==&lt;br /&gt;
&lt;br /&gt;
Схема БД используется всё [[СПАСОИ_(10)_-_Лекция_№8_-_SQL#Некоторые возможности языка SQL | та же]], что была в прошлом семестре и на лекциях.&lt;br /&gt;
&lt;br /&gt;
Для написания запросов и проверки их выполнения создана БД в СУБД [http://www.postgresql.org/ PostgreSQL].&lt;br /&gt;
&lt;br /&gt;
Скрипт создания можно загрузить [http://yadi.sk/d/MmOgbWnr5cATO отсюда].&lt;br /&gt;
&lt;br /&gt;
=== Таблицы БД ===&lt;br /&gt;
&lt;br /&gt;
==== Поставщики ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.s;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika |       imya       | sostoyanie |   gorod&lt;br /&gt;
 -------------------+------------------+------------+------------&lt;br /&gt;
  S5                | Мелисандра       |      65000 | Мадрид&lt;br /&gt;
  S2                | Бран Старк       |      60000 | Мурманск&lt;br /&gt;
  S1                | Якен Хгар        |    1500000 | Йокогама&lt;br /&gt;
  S7                | Сирио Форель     |    1500000 | Йокогама&lt;br /&gt;
  S4                | Джейме Ланнистер |     750000 | Лондон&lt;br /&gt;
  S3                | Серсея Ланнистер |    1200000 | Лондон&lt;br /&gt;
  S8                | Тирион Ланнистер |       2571 | Манчестер&lt;br /&gt;
  S9                | Иванов           |      35000 | Мытищи&lt;br /&gt;
  S10               | Русе Болтон      |      44444 | Баренцбург&lt;br /&gt;
  S11               | Петров Иван      |      35000 | Мытищи&lt;br /&gt;
  S14               | Рендилл Тарли    |    1111111 | Прага&lt;br /&gt;
  S13               | Сэмвелл Тарли    |     999999 | Прага&lt;br /&gt;
  S6                | Оша              |            | Москва&lt;br /&gt;
  S16               | Ходор            |            | Москва&lt;br /&gt;
  S15               | Мелисса Флорент  |     888888 | Стокгольм&lt;br /&gt;
  S12               | Петров Пётр      |      35001 | Мытищи&lt;br /&gt;
  S17               | Томми Версетти   |  123456789 | Майами&lt;br /&gt;
 (17 rows)&lt;br /&gt;
&lt;br /&gt;
==== Детали ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.p;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_detali |       nazvanie       |     cvet      | ves  |      gorod&lt;br /&gt;
 --------------+----------------------+---------------+------+-----------------&lt;br /&gt;
  P9           | подставка            | синий         |  400 | Нижний Новгород&lt;br /&gt;
  P10          | стойка               | синий         | 2000 | Нижний Новгород&lt;br /&gt;
  P11          | абажур               | синий         |  400 | Нижний Новгород&lt;br /&gt;
  P1           | гайка                | чёрный        |   20 | Лондон&lt;br /&gt;
  P3           | ось                  | белый         | 5000 | Эдинбург&lt;br /&gt;
  P4           | зубчатое колесо      | чёрный        |   50 | Эдинбург&lt;br /&gt;
  P6           | транзистор           | коричневый    |    2 | Токио&lt;br /&gt;
  P7           | печатная плата       | зелёный       |  200 | Токио&lt;br /&gt;
  P8           | диод                 | коричневый    |    1 | Токио&lt;br /&gt;
  P12          | универсальная деталь | универсальный |    1 | Париж&lt;br /&gt;
  P13          | уникальная деталь    | уникальный    |    1 | Бостон&lt;br /&gt;
  P14          | болт                 | серый         |   20 | Ижевск&lt;br /&gt;
  P15          | рама                 | красный       | 3000 | Манчестер&lt;br /&gt;
  P16          | колесо               | белый         | 1500 | Манчестер&lt;br /&gt;
  P5           | втулка               | серый         |  350 | Манчестер&lt;br /&gt;
  P17          | бумага               | белый         |    1 | Астрахань&lt;br /&gt;
  P18          | плитка               | белый         |  300 | Флоренция&lt;br /&gt;
  P19          | орнамент             | серый         |  800 | Флоренция&lt;br /&gt;
  P20          | уголок               | серый         |  100 | Флоренция&lt;br /&gt;
  P21          | гайка 01-01          | серебристый   |   20 | Клин&lt;br /&gt;
  P22          | усиленная рама       | красный       | 3200 | Череповец&lt;br /&gt;
  P23          | винт                 | розовый       |    5 | Ижевск&lt;br /&gt;
  P24          | труселя              | красный       |   20 | Челябинск&lt;br /&gt;
  P25          | штуцерная деталь     | коричневый    |  450 | Череповец&lt;br /&gt;
  P2           | шуруп                | чёрный        |    5 | Лондон&lt;br /&gt;
 (25 rows)&lt;br /&gt;
&lt;br /&gt;
==== Изделия ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.j;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_izdelia |       nazvanie        |      gorod&lt;br /&gt;
 ---------------+-----------------------+-----------------&lt;br /&gt;
  J1            | автомобиль            | Магнитогорск&lt;br /&gt;
  J2            | процессор             | Зеленоград&lt;br /&gt;
  J3            | торшер                | Нижний Новгород&lt;br /&gt;
  J4            | универсальное изделие | Париж&lt;br /&gt;
  J5            | уникальное изделие    | Бостон&lt;br /&gt;
  J6            | велосипед 01/23       | Манчестер&lt;br /&gt;
  J7            | изделие из болтов     | Челябинск&lt;br /&gt;
  J8            | шкаф                  | Ярославль&lt;br /&gt;
  J9            | рама 02-01            | Череповец&lt;br /&gt;
  J10           | книга                 | Астрахань&lt;br /&gt;
  J11           | панно 01-03           | Флоренция&lt;br /&gt;
  J12           | велосипед 03-04       | Клин&lt;br /&gt;
  J13           | рама 02-03            | Череповец&lt;br /&gt;
  J14           | штуцер 01-02          | Череповец&lt;br /&gt;
  J15           | велосипед 01-04       | Клин&lt;br /&gt;
  J16           | кружевное бельё       | Челябинск&lt;br /&gt;
  J17           | штуцер 01-03          | Череповец&lt;br /&gt;
 (17 rows)&lt;br /&gt;
&lt;br /&gt;
==== Сборки ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.spj;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika | nomer_detali | nomer_izdelia | kolichestvo&lt;br /&gt;
 -------------------+--------------+---------------+-------------&lt;br /&gt;
  S1                | P6           | J2            |          20&lt;br /&gt;
  S1                | P7           | J2            |           5&lt;br /&gt;
  S2                | P1           | J1            |           4&lt;br /&gt;
  S6                | P4           | J1            |           2&lt;br /&gt;
  S6                | P5           | J1            |           6&lt;br /&gt;
  S3                | P9           | J3            |           1&lt;br /&gt;
  S4                | P10          | J3            |           1&lt;br /&gt;
  S5                | P11          | J3            |           1&lt;br /&gt;
  S2                | P4           | J1            |           8&lt;br /&gt;
  S6                | P3           | J1            |          50&lt;br /&gt;
  S7                | P8           | J2            |          25&lt;br /&gt;
  S1                | P12          | J4            |           1&lt;br /&gt;
  S2                | P12          | J4            |           1&lt;br /&gt;
  S3                | P12          | J4            |           1&lt;br /&gt;
  S4                | P12          | J4            |           1&lt;br /&gt;
  S5                | P12          | J4            |           1&lt;br /&gt;
  S7                | P12          | J4            |           1&lt;br /&gt;
  S7                | P2           | J1            |           1&lt;br /&gt;
  S6                | P2           | J1            |           9&lt;br /&gt;
  S6                | P12          | J4            |           7&lt;br /&gt;
  S1                | P13          | J5            |          14&lt;br /&gt;
  S6                | P14          | J1            |        9000&lt;br /&gt;
  S2                | P14          | J1            |           3&lt;br /&gt;
  S6                | P1           | J1            |          12&lt;br /&gt;
  S8                | P15          | J6            |           1&lt;br /&gt;
  S8                | P16          | J6            |           2&lt;br /&gt;
  S3                | P5           | J6            |          10&lt;br /&gt;
  S10               | P2           | J8            |           4&lt;br /&gt;
  S8                | P1           | J7            |          16&lt;br /&gt;
  S9                | P14          | J7            |           3&lt;br /&gt;
  S11               | P10          | J3            |           2&lt;br /&gt;
  S12               | P15          | J1            |           3&lt;br /&gt;
  S11               | P11          | J3            |           4&lt;br /&gt;
  S10               | P14          | J9            |           5&lt;br /&gt;
  S13               | P17          | J10           |        1001&lt;br /&gt;
  S14               | P17          | J10           |        1111&lt;br /&gt;
  S15               | P17          | J10           |        1010&lt;br /&gt;
  S5                | P18          | J11           |           9&lt;br /&gt;
  S5                | P19          | J11           |           1&lt;br /&gt;
  S5                | P20          | J11           |           4&lt;br /&gt;
  S9                | P14          | J8            |          25&lt;br /&gt;
  S12               | P21          | J12           |          15&lt;br /&gt;
  S11               | P22          | J13           |           9&lt;br /&gt;
  S11               | P1           | J14           |          26&lt;br /&gt;
  S12               | P1           | J14           |          13&lt;br /&gt;
  S12               | P2           | J14           |          54&lt;br /&gt;
  S12               | P23          | J4            |         101&lt;br /&gt;
  S12               | P16          | J15           |          40&lt;br /&gt;
  S7                | P21          | J12           |           3&lt;br /&gt;
  S8                | P21          | J12           |           4&lt;br /&gt;
  S9                | P21          | J12           |           5&lt;br /&gt;
  S1                | P24          | J16           |           1&lt;br /&gt;
  S1                | P15          | J6            |           3&lt;br /&gt;
  S4                | P25          | J17           |           1&lt;br /&gt;
  S17               | P16          | J1            |           4&lt;br /&gt;
 (55 rows)&lt;br /&gt;
&lt;br /&gt;
== Готовые запросы ==&lt;br /&gt;
&lt;br /&gt;
Если видите, что тот или иной запрос можно составить короче и рациональней - смело вносите правку.&lt;br /&gt;
&lt;br /&gt;
В трёх билетах в задании на запрос встречается формулировка &amp;quot;&#039;&#039;только и только&#039;&#039;&amp;quot;. Как оказалось, это означает следующее: если холодильники поставляет &#039;&#039;только и только&#039;&#039; Уася, то:&lt;br /&gt;
# кроме Уаси никто не поставляет холодильники;&lt;br /&gt;
# Уася не поставляет ничего, кроме холодильников.&lt;br /&gt;
&lt;br /&gt;
Существующие запросы, естественно, оказались неправильными и их пришлось переписать. &amp;lt;s&amp;gt;Великий и могучий русский языка, ну что за экономия на бумаге.&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Билет 1 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера поставщиков, которые поставляют, по крайней мере, все те детали, которые поставляет поставщик с номером &#039;S2&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nomer_postavshika&lt;br /&gt;
FROM spasoi_ekz.spj SPJX&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT nomer_detali&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJY&lt;br /&gt;
                  WHERE nomer_postavshika = &#039;S2&#039;&lt;br /&gt;
                    AND NOT EXISTS (&lt;br /&gt;
                                    SELECT *&lt;br /&gt;
                                    FROM spasoi_ekz.spj&lt;br /&gt;
                                    WHERE nomer_postavshika = SPJX.nomer_postavshika&lt;br /&gt;
                                      AND nomer_detali = SPJY.nomer_detali&lt;br /&gt;
                                   )&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika&lt;br /&gt;
 -------------------&lt;br /&gt;
  S6&lt;br /&gt;
  S2&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 2 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера деталей и общее их количество для всех номеров деталей, поставляемых более чем одним поставщиком.&lt;br /&gt;
&lt;br /&gt;
Текст запроса, каким его дал Григорьев на лекции, впоследствии исправив его:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali AS &amp;quot;Номер детали&amp;quot;,&lt;br /&gt;
       SUM(kolichestvo) AS &amp;quot;Сколько штук поставляется&amp;quot;,&lt;br /&gt;
       COUNT(DISTINCT nomer_postavshika) AS &amp;quot;Сколько у неё поставщиков&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_postavshika) &amp;gt; 1;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali AS &amp;quot;Номер детали&amp;quot;,&lt;br /&gt;
       kol AS &amp;quot;Сколько штук поставляется&amp;quot;&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT nomer_detali,&lt;br /&gt;
             SUM(kolichestvo) AS kol,&lt;br /&gt;
             COUNT(DISTINCT nomer_postavshika)&lt;br /&gt;
      FROM spasoi_ekz.spj&lt;br /&gt;
      GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_postavshika) &amp;gt; 1&lt;br /&gt;
     ) A;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер детали | Сколько штук поставляется | Сколько у неё поставщиков&lt;br /&gt;
 --------------+---------------------------+---------------------------&lt;br /&gt;
  P1           |                        71 |                         5&lt;br /&gt;
  P10          |                         3 |                         2&lt;br /&gt;
  P11          |                         5 |                         2&lt;br /&gt;
  P12          |                        13 |                         7&lt;br /&gt;
  P14          |                      9036 |                         4&lt;br /&gt;
  P15          |                         7 |                         3&lt;br /&gt;
  P16          |                        46 |                         3&lt;br /&gt;
  P17          |                      3122 |                         3&lt;br /&gt;
  P2           |                        68 |                         4&lt;br /&gt;
  P21          |                        27 |                         4&lt;br /&gt;
  P4           |                        10 |                         2&lt;br /&gt;
  P5           |                        16 |                         2&lt;br /&gt;
 (12 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 3 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера поставщиков, поставляющих детали с номером &#039;P1&#039; для какого-либо изделия в количестве (в поставке) большим, чем средний объём поставок деталей с номером &#039;P2&#039; для этого изделия.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT X.nomer_postavshika &lt;br /&gt;
FROM spasoi_ekz.spj X&lt;br /&gt;
WHERE X.nomer_detali = &#039;P1&#039;&lt;br /&gt;
  AND X.kolichestvo &amp;gt; (&lt;br /&gt;
                       SELECT AVG(kolichestvo)&lt;br /&gt;
                       FROM spasoi_ekz.spj&lt;br /&gt;
                       WHERE nomer_izdelia = X.nomer_izdelia&lt;br /&gt;
                         AND nomer_detali = &#039;P2&#039;&lt;br /&gt;
                      );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но длиннее и нерациональней&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nomer_postavshika&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT *&lt;br /&gt;
      FROM spasoi_ekz.spj&lt;br /&gt;
      WHERE nomer_izdelia IN(&lt;br /&gt;
                             SELECT nomer_izdelia&lt;br /&gt;
                             FROM spasoi_ekz.spj&lt;br /&gt;
                             WHERE nomer_detali = &#039;P1&#039;&lt;br /&gt;
                            )&lt;br /&gt;
        AND nomer_izdelia IN(&lt;br /&gt;
	                     SELECT nomer_izdelia&lt;br /&gt;
	                     FROM spasoi_ekz.spj&lt;br /&gt;
	                     WHERE nomer_detali = &#039;P2&#039;&lt;br /&gt;
	                    )&lt;br /&gt;
     ) A&lt;br /&gt;
WHERE nomer_detali = &#039;P1&#039; AND kolichestvo &amp;gt;&lt;br /&gt;
(&lt;br /&gt;
 SELECT AVG(kolichestvo)&lt;br /&gt;
 FROM (&lt;br /&gt;
       SELECT *&lt;br /&gt;
       FROM spasoi_ekz.spj&lt;br /&gt;
       WHERE nomer_izdelia IN(&lt;br /&gt;
                              SELECT nomer_izdelia&lt;br /&gt;
                              FROM spasoi_ekz.spj&lt;br /&gt;
                              WHERE nomer_detali = &#039;P1&#039;&lt;br /&gt;
                             )&lt;br /&gt;
         AND nomer_izdelia IN(&lt;br /&gt;
                              SELECT nomer_izdelia&lt;br /&gt;
                              FROM spasoi_ekz.spj&lt;br /&gt;
                              WHERE nomer_detali = &#039;P2&#039;&lt;br /&gt;
                             )&lt;br /&gt;
      ) B&lt;br /&gt;
 WHERE nomer_detali = &#039;P2&#039;&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika&lt;br /&gt;
 -------------------&lt;br /&gt;
  S6&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 4 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера изделий, для которых детали поставляет только поставщик с номером ‘S1’.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT X.nomer_izdelia&lt;br /&gt;
FROM spasoi_ekz.spj X&lt;br /&gt;
WHERE NOT EXISTS	&lt;br /&gt;
                (		&lt;br /&gt;
                           SELECT *		&lt;br /&gt;
                           FROM spasoi_ekz.spj 		&lt;br /&gt;
                           WHERE nomer_postavshika != &#039;S1&#039; AND		&lt;br /&gt;
                           X.nomer_izdelia = nomer_izdelia	&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nomer_izdelia&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
WHERE nomer_izdelia IN(&lt;br /&gt;
                       SELECT nomer_izdelia&lt;br /&gt;
                       FROM spasoi_ekz.spj&lt;br /&gt;
                       WHERE nomer_postavshika = &#039;S1&#039;&lt;br /&gt;
                      )&lt;br /&gt;
  AND nomer_izdelia NOT IN(&lt;br /&gt;
                           SELECT nomer_izdelia&lt;br /&gt;
                           FROM spasoi_ekz.spj&lt;br /&gt;
                           WHERE nomer_postavshika != &#039;S1&#039;&lt;br /&gt;
                          );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_izdelia&lt;br /&gt;
 ---------------&lt;br /&gt;
  J5&lt;br /&gt;
  J16&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 5 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих детали с названием &amp;quot;Болт&amp;quot; в количестве (в поставке) большим, чем средний объём всех поставок деталей с номером &#039;P1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                           ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                        JOIN spasoi_ekz.p P&lt;br /&gt;
                           ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                              AND nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
WHERE kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT AVG(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                                               ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                                  AND SPJ.nomer_detali = &#039;P1&#039;&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но без JOIN&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s&lt;br /&gt;
WHERE nomer_postavshika IN (&lt;br /&gt;
                            SELECT nomer_postavshika&lt;br /&gt;
                            FROM spasoi_ekz.spj&lt;br /&gt;
                            WHERE nomer_detali = (&lt;br /&gt;
                                                  SELECT nomer_detali&lt;br /&gt;
                                                  FROM spasoi_ekz.p&lt;br /&gt;
                                                  WHERE LOWER(nazvanie) = LOWER(&#039;Болт&#039;)&lt;br /&gt;
                                                 )&lt;br /&gt;
                              AND kolichestvo &amp;gt; (&lt;br /&gt;
                                                 SELECT AVG(kolichestvo)&lt;br /&gt;
                                                 FROM spasoi_ekz.spj&lt;br /&gt;
                                                 WHERE nomer_detali = &#039;P1&#039;&lt;br /&gt;
                                                )&lt;br /&gt;
                           );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  imya&lt;br /&gt;
 ------&lt;br /&gt;
  Оша&lt;br /&gt;
  Иванов&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 6 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия деталей, поставляемых поставщиком, проживающим в том же городе, где изготавливаются эти детали, для изделия с названием ‘Велосипед 01/23’.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nazvanie&lt;br /&gt;
FROM spasoi_ekz.S S, spasoi_ekz.p P, spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE S.gorod = P.gorod&lt;br /&gt;
  AND P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
  AND S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
  AND nomer_izdelia = (&lt;br /&gt;
                       SELECT nomer_izdelia&lt;br /&gt;
                       FROM spasoi_ekz.j&lt;br /&gt;
                       WHERE nazvanie = LOWER(&#039;Велосипед 01/23&#039;)&lt;br /&gt;
                      );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, с JOIN&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT p.nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj	&lt;br /&gt;
       JOIN spasoi_ekz.s ON spj.nomer_postavshika = s.nomer_postavshika	&lt;br /&gt;
       JOIN spasoi_ekz.p ON spj.nomer_detali = p.nomer_detali	&lt;br /&gt;
       JOIN spasoi_ekz.j ON spj.nomer_izdelia = j.nomer_izdelia&lt;br /&gt;
WHERE s.gorod = p.gorod AND&lt;br /&gt;
j.nazvanie LIKE LOWER(&#039;Велосипед 01/23&#039;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nazvanie&lt;br /&gt;
 ----------&lt;br /&gt;
  рама&lt;br /&gt;
  колесо&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 7 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия изделий, куда входят детали с названием &#039;Болт&#039;, поставляемых поставщиками с именем &#039;Иванов&#039;, в количестве (в поставке) большим, чем средний объём поставок для этого изделия.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie&lt;br /&gt;
FROM spasoi_ekz.j&lt;br /&gt;
WHERE nomer_izdelia IN (&lt;br /&gt;
                        SELECT nomer_izdelia&lt;br /&gt;
                        FROM (spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                                                   ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                                                      AND imya = &#039;Иванов&#039;&lt;br /&gt;
                                                 JOIN spasoi_ekz.p P&lt;br /&gt;
                                                   ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                                      AND nazvanie = LOWER(&#039;Болт&#039;)) A&lt;br /&gt;
                        WHERE kolichestvo &amp;gt; (&lt;br /&gt;
                                             SELECT AVG(kolichestvo)&lt;br /&gt;
                                             FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                                                       ON SPJ.nomer_izdelia = A.nomer_izdelia&lt;br /&gt;
                                            )&lt;br /&gt;
                       );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но длиннее и нерациональней&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT J.nazvanie, kolichestvo&lt;br /&gt;
      FROM spasoi_ekz.s S, spasoi_ekz.p P, spasoi_ekz.j J, spasoi_ekz.spj SPJ&lt;br /&gt;
      WHERE J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
        AND P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
        AND P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
        AND S.imya = &#039;Иванов&#039;&lt;br /&gt;
        AND S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
     ) A&lt;br /&gt;
WHERE kolichestvo &amp;gt;&lt;br /&gt;
(&lt;br /&gt;
 SELECT AVG(kolichestvo)&lt;br /&gt;
 FROM spasoi_ekz.spj&lt;br /&gt;
 WHERE nomer_izdelia IN(&lt;br /&gt;
                        SELECT J.nomer_izdelia&lt;br /&gt;
                        FROM spasoi_ekz.s S, spasoi_ekz.p P, spasoi_ekz.j J, spasoi_ekz.spj SPJ&lt;br /&gt;
                        WHERE J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
                          AND P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                          AND P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
                          AND S.imya = &#039;Иванов&#039;&lt;br /&gt;
                          AND S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
                       )&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
      nazvanie&lt;br /&gt;
 -------------------&lt;br /&gt;
  шкаф&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 8 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера изделий и общее количество деталей для них, поставляемых поставщиками с именем &#039;Петров&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_izdelia AS &amp;quot;Номер изделия&amp;quot;, SUM(kolichestvo) AS &amp;quot;Количество деталей&amp;quot; &lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                             -- так как &amp;quot;поставщикАМИ&amp;quot; и возможны&lt;br /&gt;
                             -- Иван Петров и Петров Иван, то LIKE %Петров%&lt;br /&gt;
                             AND imya LIKE &#039;%Петров%&#039;&lt;br /&gt;
GROUP BY nomer_izdelia;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер изделия | Количество деталей&lt;br /&gt;
 ---------------+--------------------&lt;br /&gt;
  J4            |                101&lt;br /&gt;
  J3            |                  6&lt;br /&gt;
  J13           |                  9&lt;br /&gt;
  J15           |                 40&lt;br /&gt;
  J1            |                  3&lt;br /&gt;
  J12           |                 15&lt;br /&gt;
  J14           |                 93&lt;br /&gt;
 (7 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 9 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера деталей и общее их количество для всех номеров деталей, которые входят только в одно изделие.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali, SUM(kolichestvo)&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_izdelia) = 1;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali, kol FROM (&lt;br /&gt;
       SELECT nomer_detali, SUM(kolichestvo) AS kol, COUNT(DISTINCT nomer_izdelia) = 1&lt;br /&gt;
       FROM spasoi_ekz.spj&lt;br /&gt;
       GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_izdelia) = 1&lt;br /&gt;
    ) A;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_detali | sum&lt;br /&gt;
 --------------+------&lt;br /&gt;
  P10          |    3&lt;br /&gt;
  P11          |    5&lt;br /&gt;
  P12          |   13&lt;br /&gt;
  P13          |   14&lt;br /&gt;
  P17          | 3122&lt;br /&gt;
  P18          |    9&lt;br /&gt;
  P19          |    1&lt;br /&gt;
  P20          |    4&lt;br /&gt;
  P21          |   27&lt;br /&gt;
  P22          |    9&lt;br /&gt;
  P23          |  101&lt;br /&gt;
  P24          |    1&lt;br /&gt;
  P25          |    1&lt;br /&gt;
  P3           |   50&lt;br /&gt;
  P4           |   10&lt;br /&gt;
  P6           |   20&lt;br /&gt;
  P7           |    5&lt;br /&gt;
  P8           |   25&lt;br /&gt;
  P9           |    1&lt;br /&gt;
 (19 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 10 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих детали с названием &#039;Болт&#039; для изделия с названием &#039;Рама 02-01&#039; в количестве (в поставке) большим, чем минимальное значение поставки детали с номером &#039;P1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
			   ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
			      AND J.nazvanie = LOWER(&#039;Рама 02-01&#039;)&lt;br /&gt;
			 JOIN spasoi_ekz.p P&lt;br /&gt;
			   ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
			      AND P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
			 JOIN spasoi_ekz.s S&lt;br /&gt;
			   ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE kolichestvo &amp;gt; (&lt;br /&gt;
		     SELECT MIN(kolichestvo)&lt;br /&gt;
		     FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
					       ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
					          AND P.nomer_detali = &#039;P1&#039;&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Русе Болтон&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 11 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия городов и суммарное состояние проживающих в каждом городе поставщиков, у которых минимальный объём поставки деталей больше 1000.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT gorod, SUM(sostoyanie)&lt;br /&gt;
FROM spasoi_ekz.s&lt;br /&gt;
WHERE nomer_postavshika IN (&lt;br /&gt;
                            SELECT nomer_postavshika&lt;br /&gt;
                            FROM spasoi_ekz.spj&lt;br /&gt;
                            GROUP BY nomer_postavshika HAVING MIN(kolichestvo) &amp;gt; 1000&lt;br /&gt;
                           )&lt;br /&gt;
GROUP BY gorod;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;!-- этот запрос выполняет не совсем то и не правильно&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT gorod, sost&lt;br /&gt;
FROM (&lt;br /&gt;
SELECT gorod, SUM(sostoyanie) AS sost, SUM(SPJ.kolichestvo)&lt;br /&gt;
FROM spasoi_ekz.spj, spasoi_ekz.s&lt;br /&gt;
WHERE S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
GROUP BY S.gorod HAVING SUM(SPJ.kolichestvo) &amp;gt; 1000&lt;br /&gt;
) A;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; --&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
    gorod   |   sum&lt;br /&gt;
 -----------+---------&lt;br /&gt;
  Прага     | 2111110&lt;br /&gt;
  Стокгольм |  888888&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 12 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера деталей, поставляемых для какого-либо изделия поставщиком, проживающим в том же городе, где изготавливается это изделие.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali&lt;br /&gt;
FROM spasoi_ekz.spj SPJ, spasoi_ekz.s S, spasoi_ekz.j J&lt;br /&gt;
WHERE SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
  AND S.gorod = J.gorod&lt;br /&gt;
  AND J.nomer_izdelia = SPJ.nomer_izdelia;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_detali&lt;br /&gt;
 --------------&lt;br /&gt;
  P15&lt;br /&gt;
  P16&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 13 ===&lt;br /&gt;
&lt;br /&gt;
Написать &amp;lt;u&amp;gt;один&amp;lt;/u&amp;gt; запрос SELECT: выдать количества строк в таблице S (Поставщик) 1) с пустыми значениями и 2) непустыми значениями в столбце Состояние.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT COUNT(nomer_postavshika) - COUNT(sostoyanie) AS &amp;quot;С пустым состоянием&amp;quot;, &lt;br /&gt;
       COUNT(sostoyanie) AS &amp;quot;С не пустым состоянием&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.s;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но длиннее и нерациональней&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SELECT COUNT(Snull.*) AS &amp;quot;С пустым состоянием&amp;quot;, COUNT(Snotnull.sostoyanie) AS &amp;quot;С не пустым состоянием&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.s Snull RIGHT OUTER JOIN spasoi_ekz.s Snotnull&lt;br /&gt;
                                      ON Snull.nomer_postavshika = Snotnull.nomer_postavshika&lt;br /&gt;
                                         AND Snull.sostoyanie IS NULL;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  С пустым состоянием | С не пустым состоянием&lt;br /&gt;
 ---------------------+-----------------------&lt;br /&gt;
                    2 |                    15&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 14 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют детали только и только для изделия с номером &#039;J1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj A JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON A.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE nomer_izdelia = &#039;J1&#039;&lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT nomer_postavshika&lt;br /&gt;
                  FROM spasoi_ekz.spj&lt;br /&gt;
                  WHERE nomer_izdelia != &#039;J1&#039;&lt;br /&gt;
                    AND nomer_postavshika = A.nomer_postavshika&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       imya&lt;br /&gt;
 ----------------&lt;br /&gt;
  Томми Версетти&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 15 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать наименования изделий, для которых детали поставляют только те поставщики, у которых состояние больше 1000000 у.е.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                        JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
WHERE sostoyanie &amp;gt; 1000000&lt;br /&gt;
  AND SPJ.nomer_izdelia NOT IN (&lt;br /&gt;
                                SELECT nomer_izdelia&lt;br /&gt;
                                FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                                                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                                WHERE sostoyanie &amp;lt; 1000000&lt;br /&gt;
                               );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       nazvanie&lt;br /&gt;
 --------------------&lt;br /&gt;
  кружевное бельё&lt;br /&gt;
  уникальное изделие&lt;br /&gt;
  процессор&lt;br /&gt;
 (3 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 16 ===&lt;br /&gt;
Написать запрос SELECT: выдать цвета и для каждого цвета общее количество деталей, входящих в изделие с названием &#039;Панно 01-03&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT cvet AS &amp;quot;Цвет&amp;quot;, SUM(kolichestvo) AS &amp;quot;Деталей&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
			     AND J.nazvanie = LOWER(&#039;Панно 01-03&#039;)&lt;br /&gt;
			JOIN spasoi_ekz.P P&lt;br /&gt;
			  ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
GROUP BY cvet;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Цвет  | Деталей&lt;br /&gt;
 -------+---------&lt;br /&gt;
  белый |       9&lt;br /&gt;
  серый |       5&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 17 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера поставщиков и количество сделанных ими поставок при условии, что среднее число деталей во всех этих поставках больше 1000.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nom AS &amp;quot;Номер поставщика&amp;quot;, cnt AS &amp;quot;Количество поставок&amp;quot;&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT S.nomer_postavshika AS nom,&lt;br /&gt;
             COUNT(SPJ.nomer_postavshika) AS cnt,&lt;br /&gt;
             AVG(SPJ.kolichestvo) AS kol&lt;br /&gt;
      FROM spasoi_ekz.s S, spasoi_ekz.spj SPJ&lt;br /&gt;
      WHERE S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
      GROUP BY S.nomer_postavshika&lt;br /&gt;
     ) A&lt;br /&gt;
WHERE kol &amp;gt; 1000;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос немного попроще&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_postavshika AS &amp;quot;Номер поставщика&amp;quot;, COUNT(*) AS &amp;quot;Количество поставок&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
WHERE nomer_postavshika IN (&lt;br /&gt;
                            SELECT nomer_postavshika&lt;br /&gt;
                            FROM spasoi_ekz.spj&lt;br /&gt;
                            GROUP BY nomer_postavshika HAVING AVG(kolichestvo) &amp;gt; 1000&lt;br /&gt;
                           )&lt;br /&gt;
GROUP BY nomer_postavshika;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер поставщика | Количество поставок&lt;br /&gt;
 ------------------+---------------------&lt;br /&gt;
  S13              |                   1&lt;br /&gt;
  S6               |                   7&lt;br /&gt;
  S14              |                   1&lt;br /&gt;
  S15              |                   1&lt;br /&gt;
 (4 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 18 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, имеющих состояние больше 1000 и поставляющих деталь с названием &#039;Гайка 01-01&#039; для изделия с названием &#039;Велосипед 03-04&#039; в количестве (в поставке) большим, чем средний объём поставки, выполненной поставщиками с именем &#039;Иванов&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:2nd dufficulty.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;5px&amp;quot;&amp;gt;&#039;&#039;&#039;Второй по сложности запрос экзамена!&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;4px&amp;quot;&amp;gt;&#039;&#039;&#039;Вот уж не свезло, так не свезло&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                    JOIN spasoi_ekz.j J&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
WHERE sostoyanie &amp;gt; 1000&lt;br /&gt;
  AND P.nazvanie = LOWER(&#039;Гайка 01-01&#039;)&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Велосипед 03-04&#039;)&lt;br /&gt;
  AND kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT AVG(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                       ON SPJ.nomer_postavshika = S.nomer_postavshika &lt;br /&gt;
                     WHERE S.imya = &#039;Иванов&#039;&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Пётр&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 19 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия красных деталей, которые входят только в изделие с названием &#039;Рама 02-03&#039; в количестве, меньшем 10 единиц в поставке.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT X.nazvanie&lt;br /&gt;
FROM spasoi_ekz.p X JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_detali = X.nomer_detali&lt;br /&gt;
                    JOIN spasoi_ekz.j J&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
WHERE X.cvet = &#039;красный&#039;&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Рама 02-03&#039;)&lt;br /&gt;
  AND kolichestvo &amp;lt; 10&lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT J.nomer_izdelia&lt;br /&gt;
                  FROM spasoi_ekz.j J JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                                        ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                  WHERE J.nazvanie != LOWER(&#039;Рама 02-03&#039;)&lt;br /&gt;
                    AND X.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант этого же запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT P.nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND cvet = &#039;красный&#039;&lt;br /&gt;
                        JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                              AND J.nazvanie = LOWER(&#039;Рама 02-03&#039;)&lt;br /&gt;
WHERE kolichestvo &amp;lt; 10&lt;br /&gt;
  AND SPJ.nomer_detali NOT IN (&lt;br /&gt;
                               SELECT nomer_detali&lt;br /&gt;
                               FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                                         ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                                                            AND J.nazvanie != LOWER(&#039;Рама 02-03&#039;)&lt;br /&gt;
                              );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     nazvanie&lt;br /&gt;
 ----------------&lt;br /&gt;
  усиленная рама&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 20 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих только белые детали.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
WHERE cvet = &#039;белый&#039;&lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT nomer_postavshika&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                                            ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                  WHERE nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    AND P.cvet != &#039;белый&#039;&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё один вариант этого же запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND cvet = &#039;белый&#039;&lt;br /&gt;
                        JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE S.nomer_postavshika NOT IN (&lt;br /&gt;
                                  SELECT nomer_postavshika&lt;br /&gt;
                                  FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                                                            ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                                               AND cvet != &#039;белый&#039;&lt;br /&gt;
                                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;И ещё один вариант этого же запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s&lt;br /&gt;
WHERE nomer_postavshika NOT IN  (&lt;br /&gt;
                                 SELECT spj.nomer_postavshika&lt;br /&gt;
                                 FROM spasoi_ekz.spj SPJ, spasoi_ekz.p P&lt;br /&gt;
                                 WHERE SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                   AND p.cvet != &#039;белый&#039;&lt;br /&gt;
                                )&lt;br /&gt;
  AND nomer_postavshika  IN (&lt;br /&gt;
                             SELECT spj.nomer_postavshika&lt;br /&gt;
                             FROM spasoi_ekz.spj SPJ, spasoi_ekz.p P&lt;br /&gt;
                             WHERE SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                               AND p.cvet = &#039;белый&#039;&lt;br /&gt;
                            );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       imya&lt;br /&gt;
 -----------------&lt;br /&gt;
  Рендилл Тарли&lt;br /&gt;
  Сэмвелл Тарли&lt;br /&gt;
  Мелисса Флорент&lt;br /&gt;
  Томми Версетти&lt;br /&gt;
 (4 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 21 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия изделий, для которых детали поставляет только и только поставщик с номером &#039;S1&#039;.&lt;br /&gt;
&lt;br /&gt;
Чтобы продемонстрировать выполнение запроса наглядно, возьмём поставщика не &#039;S1&#039;, а &#039;S18&#039;, который был создан специально для этого запроса. Если оставить &#039;S1&#039;, то наглядности не получится, так как по нашей схеме БД этот поставщик не попадает под условие &amp;quot;&#039;&#039;только и только&#039;&#039;&amp;quot;, и запрос вернёт пустой результат.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie&lt;br /&gt;
FROM spasoi_ekz.j J, spasoi_ekz.SPJ SPJ&lt;br /&gt;
WHERE J.nomer_izdelia = SPJ.nomer_izdelia &lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT *&lt;br /&gt;
                  FROM spasoi_ekz.spj&lt;br /&gt;
                  WHERE nomer_postavshika != &#039;S18&#039; AND nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                 )&lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT *&lt;br /&gt;
                  FROM spasoi_ekz.spj&lt;br /&gt;
                  WHERE nomer_postavshika = &#039;S18&#039; AND nomer_izdelia != J.nomer_izdelia&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       nazvanie&lt;br /&gt;
 --------------------&lt;br /&gt;
  кинжал&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 22 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют только детали с номером &#039;P1&#039; для изделия с именем &#039;Штуцер 01-02&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- неверный запрос - номер изделия, а не название&lt;br /&gt;
SELECT imya FROM S X&lt;br /&gt;
JOIN SPJ Y ON X.nomer_postavshika=Y.nomer_postavshika&lt;br /&gt;
WHERE X.nomer_postavshika NOT IN (&lt;br /&gt;
                  SELECT DISTINCT nomer_postavshika FROM SPJ Z&lt;br /&gt;
                  WHERE Z.nomer_izdelia != &#039;Штуцер 01-02&#039;&lt;br /&gt;
                  AND Z.nomer_detali!=&#039;P1&#039;);--&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                             AND J.nazvanie = LOWER(&#039;штуцер 01-02&#039;)&lt;br /&gt;
                        JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND SPJ.nomer_detali = &#039;P1&#039;&lt;br /&gt;
                        JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE SPJ.nomer_postavshika NOT IN (&lt;br /&gt;
                                    SELECT nomer_postavshika&lt;br /&gt;
                                    FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                                              ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                                                                 AND J.nazvanie = LOWER(&#039;штуцер 01-02&#039;)&lt;br /&gt;
                                                            JOIN spasoi_ekz.p P&lt;br /&gt;
                                                              ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                                                 AND SPJ.nomer_detali != &#039;P1&#039;&lt;br /&gt;
                              );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Иван&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 23 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют деталь с названием &#039;Винт&#039; в количестве большим 100 единиц в одной поставке и имеют состояние больше среднего по их родному городу.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT S.imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
WHERE P.nazvanie = LOWER(&#039;Винт&#039;)&lt;br /&gt;
  AND SPJ.kolichestvo &amp;gt; 100&lt;br /&gt;
  AND S.sostoyanie &amp;gt; (&lt;br /&gt;
                      SELECT AVG(SS.sostoyanie)&lt;br /&gt;
                      FROM spasoi_ekz.s SS&lt;br /&gt;
                      WHERE SS.gorod = S.gorod&lt;br /&gt;
                     );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Пётр&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 24 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать наименования деталей и общее их количество для всех наименований деталей, изготавливаемых в одном городе.&lt;br /&gt;
&lt;br /&gt;
С этим запросом возникла неожиданная проблема - задание то ли неполное, то ли неправильное, потому что нельзя однозначно сказать, что по нему требуется сделать.&lt;br /&gt;
&lt;br /&gt;
Так что тут несколько вариантов запросов (кто как понял).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Первый вариант запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie, kol&lt;br /&gt;
FROM spasoi_ekz.p A, (&lt;br /&gt;
                      SELECT X.gorod, SUM(kolichestvo) as kol&lt;br /&gt;
                      FROM spasoi_ekz.p X, spasoi_ekz.spj Y&lt;br /&gt;
                      WHERE Y.nomer_detali = X.nomer_detali&lt;br /&gt;
                      GROUP BY X.gorod&lt;br /&gt;
                     ) B&lt;br /&gt;
WHERE A.gorod = B.gorod;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
        nazvanie       | kol&lt;br /&gt;
 ----------------------+------&lt;br /&gt;
  подставка            |    9&lt;br /&gt;
  стойка               |    9&lt;br /&gt;
  абажур               |    9&lt;br /&gt;
  гайка                |  139&lt;br /&gt;
  ось                  |   60&lt;br /&gt;
  зубчатое колесо      |   60&lt;br /&gt;
  транзистор           |   50&lt;br /&gt;
  печатная плата       |   50&lt;br /&gt;
  диод                 |   50&lt;br /&gt;
  универсальная деталь |   13&lt;br /&gt;
  уникальная деталь    |   14&lt;br /&gt;
  болт                 | 9137&lt;br /&gt;
  рама                 |   69&lt;br /&gt;
  колесо               |   69&lt;br /&gt;
  втулка               |   69&lt;br /&gt;
  бумага               | 3122&lt;br /&gt;
  плитка               |   14&lt;br /&gt;
  орнамент             |   14&lt;br /&gt;
  уголок               |   14&lt;br /&gt;
  гайка 01-01          |   27&lt;br /&gt;
  усиленная рама       |   10&lt;br /&gt;
  винт                 | 9137&lt;br /&gt;
  труселя              |    1&lt;br /&gt;
  штуцерная деталь     |   10&lt;br /&gt;
  шуруп                |  139&lt;br /&gt;
 (25 rows)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
и&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Второй вариант запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
В уточнение задания Григорьев сказал следующее: &amp;quot;&#039;&#039;Следует учесть, что в качестве наименования города может выступать переменная, в которую в некоторой программе должно быть занесено конкретное значение перед выполнением запроса&#039;&#039;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
То есть, вообще говоря, задание на запрос неполное, и его можно трактовать так: выдать наименования деталей и общее их количество для всех наименований деталей, изготавливаемых в городе &amp;lt;code&amp;gt;%НАЗВАНИЕГОРОДА%&amp;lt;/code&amp;gt;. Вот эта переменная задаётся где-то в программе, а в БД идёт запрос с уже подставленным конкретным названием. &lt;br /&gt;
&lt;br /&gt;
Этот вариант запроса составлен, например, для Лондона. &lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie, SUM(kolichestvo)&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
WHERE gorod = &#039;Лондон&#039;&lt;br /&gt;
GROUP BY nazvanie;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nazvanie | sum&lt;br /&gt;
 ----------+-----&lt;br /&gt;
  гайка    |  71&lt;br /&gt;
  шуруп    |  68&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Билет 25 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих хотя бы одну белую деталь для изделия с названием &#039;Велосипед 01-04&#039; с объёмом поставки большим, чем средний объём поставки этого поставщика.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                    JOIN spasoi_ekz.j J&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
WHERE cvet = &#039;белый&#039;&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Велосипед 01-04&#039;)&lt;br /&gt;
  AND kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT AVG(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj SPJ&lt;br /&gt;
                     WHERE SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Пётр&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 26 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера красных деталей и количество поставок этих деталей.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT P.nomer_detali AS &amp;quot;Номер детали&amp;quot;, COUNT(kolichestvo) AS &amp;quot;Количество поставок с ней&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.p P, spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
  AND cvet = &#039;красный&#039;&lt;br /&gt;
GROUP BY P.nomer_detali;   &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос через JOIN&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT SPJ.nomer_detali AS &amp;quot;Номер детали&amp;quot;, COUNT(kolichestvo) AS &amp;quot;Количество поставок с ней&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND cvet = &#039;красный&#039;&lt;br /&gt;
GROUP BY SPJ.nomer_detali;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер детали | Количество поставок с ней&lt;br /&gt;
 --------------+---------------------------&lt;br /&gt;
  P15          |                         3&lt;br /&gt;
  P22          |                         1&lt;br /&gt;
  P24          |                         1&lt;br /&gt;
 (3 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 27 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать наименования городов и среднее состояние поставщиков для каждого города, поставляющих детали с названием &#039;Гайка 01-01&#039; для изделия с названием &#039;Велосипед 03-04&#039; в количестве (в поставке) большим, чем минимальный объём поставки, выполненной поставщиком с номером &#039;S1&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:1st dufficulty.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;7px&amp;quot;&amp;gt;&#039;&#039;&#039;Сложнейший запрос экзамена!&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;5px&amp;quot;&amp;gt;&#039;&#039;&#039;Сохрани Джа, вытащить такое&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT S.gorod AS &amp;quot;Город&amp;quot;, AVG(S.sostoyanie) AS &amp;quot;Среднее состояние&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                    JOIN spasoi_ekz.j J&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
WHERE P.nazvanie = LOWER(&#039;Гайка 01-01&#039;)&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Велосипед 03-04&#039;)&lt;br /&gt;
  AND kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT MIN(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj&lt;br /&gt;
                     WHERE nomer_postavshika = &#039;S1&#039;&lt;br /&gt;
                    )&lt;br /&gt;
GROUP BY S.gorod;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
    Город   |   Среднее состояние&lt;br /&gt;
 -----------+-----------------------&lt;br /&gt;
  Мытищи    |    35000.500000000000&lt;br /&gt;
  Йокогама  |  1500000.000000000000&lt;br /&gt;
  Манчестер | 2571.0000000000000000&lt;br /&gt;
 (3 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 28 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия изделий, куда входит хотя бы одна красная деталь весом больше 10 граммов, поставляемая только поставщиком с номером &#039;S1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT J.nazvanie&lt;br /&gt;
FROM spasoi_ekz.j J JOIN spasoi_ekz.spj SPJ1&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ1.nomer_izdelia&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ1.nomer_detali&lt;br /&gt;
WHERE P.ves &amp;gt; 10&lt;br /&gt;
 AND P.cvet = &#039;красный&#039;&lt;br /&gt;
 AND NOT EXISTS (&lt;br /&gt;
                 SELECT SPJ2.nomer_postavshika&lt;br /&gt;
                 FROM spasoi_ekz.spj SPJ2         &lt;br /&gt;
                 WHERE SPJ2.nomer_detali = P.nomer_detali&lt;br /&gt;
	 	   AND SPJ2.nomer_postavshika != &#039;S1&#039;&lt;br /&gt;
                );                     &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     nazvanie&lt;br /&gt;
 -----------------&lt;br /&gt;
  кружевное бельё&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 29 ===&lt;br /&gt;
Написать запрос SELECT: выдать названия деталей, которые входят только и только в состав изделия с названием &#039;Штуцер 01-03&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie, nomer_izdelia&lt;br /&gt;
FROM spasoi_ekz.p P, spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE P.nomer_detali = SPJ.nomer_detali &lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT SPJ.nomer_izdelia&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                            ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
                  WHERE (&lt;br /&gt;
                         J.nazvanie != LOWER(&#039;Штуцер 01-03&#039;)&lt;br /&gt;
                         AND&lt;br /&gt;
                         SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                        )&lt;br /&gt;
                     OR (&lt;br /&gt;
                         J.nazvanie = LOWER(&#039;Штуцер 01-03&#039;)&lt;br /&gt;
                         AND&lt;br /&gt;
                         SPJ.nomer_detali != P.nomer_detali&lt;br /&gt;
                        )&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
      nazvanie&lt;br /&gt;
 ------------------&lt;br /&gt;
  штуцерная деталь&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 30 ===&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют, по крайней мере, все те детали, которые поставляет поставщик с номером &#039;S2&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT imya&lt;br /&gt;
FROM spasoi_ekz.s S&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT nomer_detali&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJY&lt;br /&gt;
                  WHERE nomer_postavshika = &#039;S2&#039;&lt;br /&gt;
                    AND NOT EXISTS (&lt;br /&gt;
                                    SELECT *&lt;br /&gt;
                                    FROM spasoi_ekz.spj&lt;br /&gt;
                                    WHERE nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                                      AND nomer_detali = SPJY.nomer_detali&lt;br /&gt;
                                   )&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  imya&lt;br /&gt;
 ------------&lt;br /&gt;
  Оша&lt;br /&gt;
  Бран Старк&lt;br /&gt;
 (2 rows)&lt;br /&gt;
[[Категория:Структурное проектирование АСОИ (10 семестр)]]&lt;/div&gt;</summary>
		<author><name>81.9.52.28</name></author>
	</entry>
	<entry>
		<id>https://iu5bmstu.ru/index.php?title=SQL-%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D1%8B_%D0%BA_%D1%8D%D0%BA%D0%B7%D0%B0%D0%BC%D0%B5%D0%BD%D1%83_%D0%BF%D0%BE_%D0%A1%D0%9F%D0%90%D0%A1%D0%9E%D0%98_(10_%D1%81%D0%B5%D0%BC%D0%B5%D1%81%D1%82%D1%80)&amp;diff=3817</id>
		<title>SQL-запросы к экзамену по СПАСОИ (10 семестр)</title>
		<link rel="alternate" type="text/html" href="https://iu5bmstu.ru/index.php?title=SQL-%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D1%8B_%D0%BA_%D1%8D%D0%BA%D0%B7%D0%B0%D0%BC%D0%B5%D0%BD%D1%83_%D0%BF%D0%BE_%D0%A1%D0%9F%D0%90%D0%A1%D0%9E%D0%98_(10_%D1%81%D0%B5%D0%BC%D0%B5%D1%81%D1%82%D1%80)&amp;diff=3817"/>
		<updated>2013-06-14T20:05:11Z</updated>

		<summary type="html">&lt;p&gt;81.9.52.28: /* Билет 6 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right; clear:both; margin-right:1.0em;&amp;quot;&amp;gt;__TOC__&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Билет экзамена по [[:Категория:Структурное проектирование АСОИ (10 семестр) | СПАСОИ]] состоит из двух частей:&lt;br /&gt;
# теория;&lt;br /&gt;
# SQL-запрос.&lt;br /&gt;
&lt;br /&gt;
На этой странице собраны все сформированные запросы по билетам.&lt;br /&gt;
&lt;br /&gt;
Странно, что ни в одном билете нет запроса с сортировкой результатов. Возможно, они буду в дополнительных заданиях.&lt;br /&gt;
&lt;br /&gt;
== Схема БД ==&lt;br /&gt;
&lt;br /&gt;
Схема БД используется всё [[СПАСОИ_(10)_-_Лекция_№8_-_SQL#Некоторые возможности языка SQL | та же]], что была в прошлом семестре и на лекциях.&lt;br /&gt;
&lt;br /&gt;
Для написания запросов и проверки их выполнения создана БД в СУБД [http://www.postgresql.org/ PostgreSQL].&lt;br /&gt;
&lt;br /&gt;
Скрипт создания можно загрузить [http://yadi.sk/d/MmOgbWnr5cATO отсюда].&lt;br /&gt;
&lt;br /&gt;
=== Таблицы БД ===&lt;br /&gt;
&lt;br /&gt;
==== Поставщики ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.s;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika |       imya       | sostoyanie |   gorod&lt;br /&gt;
 -------------------+------------------+------------+------------&lt;br /&gt;
  S5                | Мелисандра       |      65000 | Мадрид&lt;br /&gt;
  S2                | Бран Старк       |      60000 | Мурманск&lt;br /&gt;
  S1                | Якен Хгар        |    1500000 | Йокогама&lt;br /&gt;
  S7                | Сирио Форель     |    1500000 | Йокогама&lt;br /&gt;
  S4                | Джейме Ланнистер |     750000 | Лондон&lt;br /&gt;
  S3                | Серсея Ланнистер |    1200000 | Лондон&lt;br /&gt;
  S8                | Тирион Ланнистер |       2571 | Манчестер&lt;br /&gt;
  S9                | Иванов           |      35000 | Мытищи&lt;br /&gt;
  S10               | Русе Болтон      |      44444 | Баренцбург&lt;br /&gt;
  S11               | Петров Иван      |      35000 | Мытищи&lt;br /&gt;
  S14               | Рендилл Тарли    |    1111111 | Прага&lt;br /&gt;
  S13               | Сэмвелл Тарли    |     999999 | Прага&lt;br /&gt;
  S6                | Оша              |            | Москва&lt;br /&gt;
  S16               | Ходор            |            | Москва&lt;br /&gt;
  S15               | Мелисса Флорент  |     888888 | Стокгольм&lt;br /&gt;
  S12               | Петров Пётр      |      35001 | Мытищи&lt;br /&gt;
  S17               | Томми Версетти   |  123456789 | Майами&lt;br /&gt;
 (17 rows)&lt;br /&gt;
&lt;br /&gt;
==== Детали ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.p;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_detali |       nazvanie       |     cvet      | ves  |      gorod&lt;br /&gt;
 --------------+----------------------+---------------+------+-----------------&lt;br /&gt;
  P9           | подставка            | синий         |  400 | Нижний Новгород&lt;br /&gt;
  P10          | стойка               | синий         | 2000 | Нижний Новгород&lt;br /&gt;
  P11          | абажур               | синий         |  400 | Нижний Новгород&lt;br /&gt;
  P1           | гайка                | чёрный        |   20 | Лондон&lt;br /&gt;
  P3           | ось                  | белый         | 5000 | Эдинбург&lt;br /&gt;
  P4           | зубчатое колесо      | чёрный        |   50 | Эдинбург&lt;br /&gt;
  P6           | транзистор           | коричневый    |    2 | Токио&lt;br /&gt;
  P7           | печатная плата       | зелёный       |  200 | Токио&lt;br /&gt;
  P8           | диод                 | коричневый    |    1 | Токио&lt;br /&gt;
  P12          | универсальная деталь | универсальный |    1 | Париж&lt;br /&gt;
  P13          | уникальная деталь    | уникальный    |    1 | Бостон&lt;br /&gt;
  P14          | болт                 | серый         |   20 | Ижевск&lt;br /&gt;
  P15          | рама                 | красный       | 3000 | Манчестер&lt;br /&gt;
  P16          | колесо               | белый         | 1500 | Манчестер&lt;br /&gt;
  P5           | втулка               | серый         |  350 | Манчестер&lt;br /&gt;
  P17          | бумага               | белый         |    1 | Астрахань&lt;br /&gt;
  P18          | плитка               | белый         |  300 | Флоренция&lt;br /&gt;
  P19          | орнамент             | серый         |  800 | Флоренция&lt;br /&gt;
  P20          | уголок               | серый         |  100 | Флоренция&lt;br /&gt;
  P21          | гайка 01-01          | серебристый   |   20 | Клин&lt;br /&gt;
  P22          | усиленная рама       | красный       | 3200 | Череповец&lt;br /&gt;
  P23          | винт                 | розовый       |    5 | Ижевск&lt;br /&gt;
  P24          | труселя              | красный       |   20 | Челябинск&lt;br /&gt;
  P25          | штуцерная деталь     | коричневый    |  450 | Череповец&lt;br /&gt;
  P2           | шуруп                | чёрный        |    5 | Лондон&lt;br /&gt;
 (25 rows)&lt;br /&gt;
&lt;br /&gt;
==== Изделия ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.j;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_izdelia |       nazvanie        |      gorod&lt;br /&gt;
 ---------------+-----------------------+-----------------&lt;br /&gt;
  J1            | автомобиль            | Магнитогорск&lt;br /&gt;
  J2            | процессор             | Зеленоград&lt;br /&gt;
  J3            | торшер                | Нижний Новгород&lt;br /&gt;
  J4            | универсальное изделие | Париж&lt;br /&gt;
  J5            | уникальное изделие    | Бостон&lt;br /&gt;
  J6            | велосипед 01/23       | Манчестер&lt;br /&gt;
  J7            | изделие из болтов     | Челябинск&lt;br /&gt;
  J8            | шкаф                  | Ярославль&lt;br /&gt;
  J9            | рама 02-01            | Череповец&lt;br /&gt;
  J10           | книга                 | Астрахань&lt;br /&gt;
  J11           | панно 01-03           | Флоренция&lt;br /&gt;
  J12           | велосипед 03-04       | Клин&lt;br /&gt;
  J13           | рама 02-03            | Череповец&lt;br /&gt;
  J14           | штуцер 01-02          | Череповец&lt;br /&gt;
  J15           | велосипед 01-04       | Клин&lt;br /&gt;
  J16           | кружевное бельё       | Челябинск&lt;br /&gt;
  J17           | штуцер 01-03          | Череповец&lt;br /&gt;
 (17 rows)&lt;br /&gt;
&lt;br /&gt;
==== Сборки ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.spj;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika | nomer_detali | nomer_izdelia | kolichestvo&lt;br /&gt;
 -------------------+--------------+---------------+-------------&lt;br /&gt;
  S1                | P6           | J2            |          20&lt;br /&gt;
  S1                | P7           | J2            |           5&lt;br /&gt;
  S2                | P1           | J1            |           4&lt;br /&gt;
  S6                | P4           | J1            |           2&lt;br /&gt;
  S6                | P5           | J1            |           6&lt;br /&gt;
  S3                | P9           | J3            |           1&lt;br /&gt;
  S4                | P10          | J3            |           1&lt;br /&gt;
  S5                | P11          | J3            |           1&lt;br /&gt;
  S2                | P4           | J1            |           8&lt;br /&gt;
  S6                | P3           | J1            |          50&lt;br /&gt;
  S7                | P8           | J2            |          25&lt;br /&gt;
  S1                | P12          | J4            |           1&lt;br /&gt;
  S2                | P12          | J4            |           1&lt;br /&gt;
  S3                | P12          | J4            |           1&lt;br /&gt;
  S4                | P12          | J4            |           1&lt;br /&gt;
  S5                | P12          | J4            |           1&lt;br /&gt;
  S7                | P12          | J4            |           1&lt;br /&gt;
  S7                | P2           | J1            |           1&lt;br /&gt;
  S6                | P2           | J1            |           9&lt;br /&gt;
  S6                | P12          | J4            |           7&lt;br /&gt;
  S1                | P13          | J5            |          14&lt;br /&gt;
  S6                | P14          | J1            |        9000&lt;br /&gt;
  S2                | P14          | J1            |           3&lt;br /&gt;
  S6                | P1           | J1            |          12&lt;br /&gt;
  S8                | P15          | J6            |           1&lt;br /&gt;
  S8                | P16          | J6            |           2&lt;br /&gt;
  S3                | P5           | J6            |          10&lt;br /&gt;
  S10               | P2           | J8            |           4&lt;br /&gt;
  S8                | P1           | J7            |          16&lt;br /&gt;
  S9                | P14          | J7            |           3&lt;br /&gt;
  S11               | P10          | J3            |           2&lt;br /&gt;
  S12               | P15          | J1            |           3&lt;br /&gt;
  S11               | P11          | J3            |           4&lt;br /&gt;
  S10               | P14          | J9            |           5&lt;br /&gt;
  S13               | P17          | J10           |        1001&lt;br /&gt;
  S14               | P17          | J10           |        1111&lt;br /&gt;
  S15               | P17          | J10           |        1010&lt;br /&gt;
  S5                | P18          | J11           |           9&lt;br /&gt;
  S5                | P19          | J11           |           1&lt;br /&gt;
  S5                | P20          | J11           |           4&lt;br /&gt;
  S9                | P14          | J8            |          25&lt;br /&gt;
  S12               | P21          | J12           |          15&lt;br /&gt;
  S11               | P22          | J13           |           9&lt;br /&gt;
  S11               | P1           | J14           |          26&lt;br /&gt;
  S12               | P1           | J14           |          13&lt;br /&gt;
  S12               | P2           | J14           |          54&lt;br /&gt;
  S12               | P23          | J4            |         101&lt;br /&gt;
  S12               | P16          | J15           |          40&lt;br /&gt;
  S7                | P21          | J12           |           3&lt;br /&gt;
  S8                | P21          | J12           |           4&lt;br /&gt;
  S9                | P21          | J12           |           5&lt;br /&gt;
  S1                | P24          | J16           |           1&lt;br /&gt;
  S1                | P15          | J6            |           3&lt;br /&gt;
  S4                | P25          | J17           |           1&lt;br /&gt;
  S17               | P16          | J1            |           4&lt;br /&gt;
 (55 rows)&lt;br /&gt;
&lt;br /&gt;
== Готовые запросы ==&lt;br /&gt;
&lt;br /&gt;
Если видите, что тот или иной запрос можно составить короче и рациональней - смело вносите правку.&lt;br /&gt;
&lt;br /&gt;
В трёх билетах в задании на запрос встречается формулировка &amp;quot;&#039;&#039;только и только&#039;&#039;&amp;quot;. Как оказалось, это означает следующее: если холодильники поставляет &#039;&#039;только и только&#039;&#039; Уася, то:&lt;br /&gt;
# кроме Уаси никто не поставляет холодильники;&lt;br /&gt;
# Уася не поставляет ничего, кроме холодильников.&lt;br /&gt;
&lt;br /&gt;
Существующие запросы, естественно, оказались неправильными и их пришлось переписать. &amp;lt;s&amp;gt;Великий и могучий русский языка, ну что за экономия на бумаге.&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Билет 1 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера поставщиков, которые поставляют, по крайней мере, все те детали, которые поставляет поставщик с номером &#039;S2&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nomer_postavshika&lt;br /&gt;
FROM spasoi_ekz.spj SPJX&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT nomer_detali&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJY&lt;br /&gt;
                  WHERE nomer_postavshika = &#039;S2&#039;&lt;br /&gt;
                    AND NOT EXISTS (&lt;br /&gt;
                                    SELECT *&lt;br /&gt;
                                    FROM spasoi_ekz.spj&lt;br /&gt;
                                    WHERE nomer_postavshika = SPJX.nomer_postavshika&lt;br /&gt;
                                      AND nomer_detali = SPJY.nomer_detali&lt;br /&gt;
                                   )&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika&lt;br /&gt;
 -------------------&lt;br /&gt;
  S6&lt;br /&gt;
  S2&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 2 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера деталей и общее их количество для всех номеров деталей, поставляемых более чем одним поставщиком.&lt;br /&gt;
&lt;br /&gt;
Текст запроса, каким его дал Григорьев на лекции, впоследствии исправив его:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali AS &amp;quot;Номер детали&amp;quot;,&lt;br /&gt;
       SUM(kolichestvo) AS &amp;quot;Сколько штук поставляется&amp;quot;,&lt;br /&gt;
       COUNT(DISTINCT nomer_postavshika) AS &amp;quot;Сколько у неё поставщиков&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_postavshika) &amp;gt; 1;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali AS &amp;quot;Номер детали&amp;quot;,&lt;br /&gt;
       kol AS &amp;quot;Сколько штук поставляется&amp;quot;&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT nomer_detali,&lt;br /&gt;
             SUM(kolichestvo) AS kol,&lt;br /&gt;
             COUNT(DISTINCT nomer_postavshika)&lt;br /&gt;
      FROM spasoi_ekz.spj&lt;br /&gt;
      GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_postavshika) &amp;gt; 1&lt;br /&gt;
     ) A;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер детали | Сколько штук поставляется | Сколько у неё поставщиков&lt;br /&gt;
 --------------+---------------------------+---------------------------&lt;br /&gt;
  P1           |                        71 |                         5&lt;br /&gt;
  P10          |                         3 |                         2&lt;br /&gt;
  P11          |                         5 |                         2&lt;br /&gt;
  P12          |                        13 |                         7&lt;br /&gt;
  P14          |                      9036 |                         4&lt;br /&gt;
  P15          |                         7 |                         3&lt;br /&gt;
  P16          |                        46 |                         3&lt;br /&gt;
  P17          |                      3122 |                         3&lt;br /&gt;
  P2           |                        68 |                         4&lt;br /&gt;
  P21          |                        27 |                         4&lt;br /&gt;
  P4           |                        10 |                         2&lt;br /&gt;
  P5           |                        16 |                         2&lt;br /&gt;
 (12 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 3 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера поставщиков, поставляющих детали с номером &#039;P1&#039; для какого-либо изделия в количестве (в поставке) большим, чем средний объём поставок деталей с номером &#039;P2&#039; для этого изделия.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT X.nomer_postavshika &lt;br /&gt;
FROM spasoi_ekz.spj X&lt;br /&gt;
WHERE X.nomer_detali = &#039;P1&#039;&lt;br /&gt;
  AND X.kolichestvo &amp;gt; (&lt;br /&gt;
                       SELECT AVG(kolichestvo)&lt;br /&gt;
                       FROM spasoi_ekz.spj&lt;br /&gt;
                       WHERE nomer_izdelia = X.nomer_izdelia&lt;br /&gt;
                         AND nomer_detali = &#039;P2&#039;&lt;br /&gt;
                      );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но длиннее и нерациональней&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nomer_postavshika&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT *&lt;br /&gt;
      FROM spasoi_ekz.spj&lt;br /&gt;
      WHERE nomer_izdelia IN(&lt;br /&gt;
                             SELECT nomer_izdelia&lt;br /&gt;
                             FROM spasoi_ekz.spj&lt;br /&gt;
                             WHERE nomer_detali = &#039;P1&#039;&lt;br /&gt;
                            )&lt;br /&gt;
        AND nomer_izdelia IN(&lt;br /&gt;
	                     SELECT nomer_izdelia&lt;br /&gt;
	                     FROM spasoi_ekz.spj&lt;br /&gt;
	                     WHERE nomer_detali = &#039;P2&#039;&lt;br /&gt;
	                    )&lt;br /&gt;
     ) A&lt;br /&gt;
WHERE nomer_detali = &#039;P1&#039; AND kolichestvo &amp;gt;&lt;br /&gt;
(&lt;br /&gt;
 SELECT AVG(kolichestvo)&lt;br /&gt;
 FROM (&lt;br /&gt;
       SELECT *&lt;br /&gt;
       FROM spasoi_ekz.spj&lt;br /&gt;
       WHERE nomer_izdelia IN(&lt;br /&gt;
                              SELECT nomer_izdelia&lt;br /&gt;
                              FROM spasoi_ekz.spj&lt;br /&gt;
                              WHERE nomer_detali = &#039;P1&#039;&lt;br /&gt;
                             )&lt;br /&gt;
         AND nomer_izdelia IN(&lt;br /&gt;
                              SELECT nomer_izdelia&lt;br /&gt;
                              FROM spasoi_ekz.spj&lt;br /&gt;
                              WHERE nomer_detali = &#039;P2&#039;&lt;br /&gt;
                             )&lt;br /&gt;
      ) B&lt;br /&gt;
 WHERE nomer_detali = &#039;P2&#039;&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika&lt;br /&gt;
 -------------------&lt;br /&gt;
  S6&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 4 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера изделий, для которых детали поставляет только поставщик с номером ‘S1’.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT X.nomer_izdelia&lt;br /&gt;
FROM spasoi_ekz.spj X&lt;br /&gt;
WHERE NOT EXISTS	&lt;br /&gt;
                (		&lt;br /&gt;
                           SELECT *		&lt;br /&gt;
                           FROM spasoi_ekz.spj 		&lt;br /&gt;
                           WHERE nomer_postavshika != &#039;S1&#039; AND		&lt;br /&gt;
                           X.nomer_izdelia = nomer_izdelia	&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nomer_izdelia&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
WHERE nomer_izdelia IN(&lt;br /&gt;
                       SELECT nomer_izdelia&lt;br /&gt;
                       FROM spasoi_ekz.spj&lt;br /&gt;
                       WHERE nomer_postavshika = &#039;S1&#039;&lt;br /&gt;
                      )&lt;br /&gt;
  AND nomer_izdelia NOT IN(&lt;br /&gt;
                           SELECT nomer_izdelia&lt;br /&gt;
                           FROM spasoi_ekz.spj&lt;br /&gt;
                           WHERE nomer_postavshika != &#039;S1&#039;&lt;br /&gt;
                          );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_izdelia&lt;br /&gt;
 ---------------&lt;br /&gt;
  J5&lt;br /&gt;
  J16&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 5 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих детали с названием &amp;quot;Болт&amp;quot; в количестве (в поставке) большим, чем средний объём всех поставок деталей с номером &#039;P1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                           ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                        JOIN spasoi_ekz.p P&lt;br /&gt;
                           ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                              AND nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
WHERE kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT AVG(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                                               ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                                  AND SPJ.nomer_detali = &#039;P1&#039;&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но без JOIN&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s&lt;br /&gt;
WHERE nomer_postavshika IN (&lt;br /&gt;
                            SELECT nomer_postavshika&lt;br /&gt;
                            FROM spasoi_ekz.spj&lt;br /&gt;
                            WHERE nomer_detali = (&lt;br /&gt;
                                                  SELECT nomer_detali&lt;br /&gt;
                                                  FROM spasoi_ekz.p&lt;br /&gt;
                                                  WHERE LOWER(nazvanie) = LOWER(&#039;Болт&#039;)&lt;br /&gt;
                                                 )&lt;br /&gt;
                              AND kolichestvo &amp;gt; (&lt;br /&gt;
                                                 SELECT AVG(kolichestvo)&lt;br /&gt;
                                                 FROM spasoi_ekz.spj&lt;br /&gt;
                                                 WHERE nomer_detali = &#039;P1&#039;&lt;br /&gt;
                                                )&lt;br /&gt;
                           );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  imya&lt;br /&gt;
 ------&lt;br /&gt;
  Оша&lt;br /&gt;
  Иванов&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 6 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия деталей, поставляемых поставщиком, проживающим в том же городе, где изготавливаются эти детали, для изделия с названием ‘Велосипед 01/23’.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nazvanie&lt;br /&gt;
FROM spasoi_ekz.S S, spasoi_ekz.p P, spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE S.gorod = P.gorod&lt;br /&gt;
  AND P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
  AND S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
  AND nomer_izdelia = (&lt;br /&gt;
                       SELECT nomer_izdelia&lt;br /&gt;
                       FROM spasoi_ekz.j&lt;br /&gt;
                       WHERE nazvanie = LOWER(&#039;Велосипед 01/23&#039;)&lt;br /&gt;
                      );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, с JOIN&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT p.nazvanieFROM spasoi_ekz.spj	JOIN spasoi_ekz.s ON spj.nomer_postavshika = s.nomer_postavshika	JOIN spasoi_ekz.p ON spj.nomer_detali = p.nomer_detali	JOIN spasoi_ekz.j ON spj.nomer_izdelia = j.nomer_izdeliaWHERE s.gorod = p.gorod ANDj.nazvanie LIKE LOWER(&#039;Велосипед 01/23&#039;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nazvanie&lt;br /&gt;
 ----------&lt;br /&gt;
  рама&lt;br /&gt;
  колесо&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 7 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия изделий, куда входят детали с названием &#039;Болт&#039;, поставляемых поставщиками с именем &#039;Иванов&#039;, в количестве (в поставке) большим, чем средний объём поставок для этого изделия.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie&lt;br /&gt;
FROM spasoi_ekz.j&lt;br /&gt;
WHERE nomer_izdelia IN (&lt;br /&gt;
                        SELECT nomer_izdelia&lt;br /&gt;
                        FROM (spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                                                   ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                                                      AND imya = &#039;Иванов&#039;&lt;br /&gt;
                                                 JOIN spasoi_ekz.p P&lt;br /&gt;
                                                   ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                                      AND nazvanie = LOWER(&#039;Болт&#039;)) A&lt;br /&gt;
                        WHERE kolichestvo &amp;gt; (&lt;br /&gt;
                                             SELECT AVG(kolichestvo)&lt;br /&gt;
                                             FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                                                       ON SPJ.nomer_izdelia = A.nomer_izdelia&lt;br /&gt;
                                            )&lt;br /&gt;
                       );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но длиннее и нерациональней&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT J.nazvanie, kolichestvo&lt;br /&gt;
      FROM spasoi_ekz.s S, spasoi_ekz.p P, spasoi_ekz.j J, spasoi_ekz.spj SPJ&lt;br /&gt;
      WHERE J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
        AND P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
        AND P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
        AND S.imya = &#039;Иванов&#039;&lt;br /&gt;
        AND S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
     ) A&lt;br /&gt;
WHERE kolichestvo &amp;gt;&lt;br /&gt;
(&lt;br /&gt;
 SELECT AVG(kolichestvo)&lt;br /&gt;
 FROM spasoi_ekz.spj&lt;br /&gt;
 WHERE nomer_izdelia IN(&lt;br /&gt;
                        SELECT J.nomer_izdelia&lt;br /&gt;
                        FROM spasoi_ekz.s S, spasoi_ekz.p P, spasoi_ekz.j J, spasoi_ekz.spj SPJ&lt;br /&gt;
                        WHERE J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
                          AND P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                          AND P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
                          AND S.imya = &#039;Иванов&#039;&lt;br /&gt;
                          AND S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
                       )&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
      nazvanie&lt;br /&gt;
 -------------------&lt;br /&gt;
  шкаф&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 8 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера изделий и общее количество деталей для них, поставляемых поставщиками с именем &#039;Петров&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_izdelia AS &amp;quot;Номер изделия&amp;quot;, SUM(kolichestvo) AS &amp;quot;Количество деталей&amp;quot; &lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                             -- так как &amp;quot;поставщикАМИ&amp;quot; и возможны&lt;br /&gt;
                             -- Иван Петров и Петров Иван, то LIKE %Петров%&lt;br /&gt;
                             AND imya LIKE &#039;%Петров%&#039;&lt;br /&gt;
GROUP BY nomer_izdelia;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер изделия | Количество деталей&lt;br /&gt;
 ---------------+--------------------&lt;br /&gt;
  J4            |                101&lt;br /&gt;
  J3            |                  6&lt;br /&gt;
  J13           |                  9&lt;br /&gt;
  J15           |                 40&lt;br /&gt;
  J1            |                  3&lt;br /&gt;
  J12           |                 15&lt;br /&gt;
  J14           |                 93&lt;br /&gt;
 (7 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 9 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера деталей и общее их количество для всех номеров деталей, которые входят только в одно изделие.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali, SUM(kolichestvo)&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_izdelia) = 1;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali, kol FROM (&lt;br /&gt;
       SELECT nomer_detali, SUM(kolichestvo) AS kol, COUNT(DISTINCT nomer_izdelia) = 1&lt;br /&gt;
       FROM spasoi_ekz.spj&lt;br /&gt;
       GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_izdelia) = 1&lt;br /&gt;
    ) A;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_detali | sum&lt;br /&gt;
 --------------+------&lt;br /&gt;
  P10          |    3&lt;br /&gt;
  P11          |    5&lt;br /&gt;
  P12          |   13&lt;br /&gt;
  P13          |   14&lt;br /&gt;
  P17          | 3122&lt;br /&gt;
  P18          |    9&lt;br /&gt;
  P19          |    1&lt;br /&gt;
  P20          |    4&lt;br /&gt;
  P21          |   27&lt;br /&gt;
  P22          |    9&lt;br /&gt;
  P23          |  101&lt;br /&gt;
  P24          |    1&lt;br /&gt;
  P25          |    1&lt;br /&gt;
  P3           |   50&lt;br /&gt;
  P4           |   10&lt;br /&gt;
  P6           |   20&lt;br /&gt;
  P7           |    5&lt;br /&gt;
  P8           |   25&lt;br /&gt;
  P9           |    1&lt;br /&gt;
 (19 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 10 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих детали с названием &#039;Болт&#039; для изделия с названием &#039;Рама 02-01&#039; в количестве (в поставке) большим, чем минимальное значение поставки детали с номером &#039;P1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
			   ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
			      AND J.nazvanie = LOWER(&#039;Рама 02-01&#039;)&lt;br /&gt;
			 JOIN spasoi_ekz.p P&lt;br /&gt;
			   ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
			      AND P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
			 JOIN spasoi_ekz.s S&lt;br /&gt;
			   ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE kolichestvo &amp;gt; (&lt;br /&gt;
		     SELECT MIN(kolichestvo)&lt;br /&gt;
		     FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
					       ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
					          AND P.nomer_detali = &#039;P1&#039;&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Русе Болтон&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 11 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия городов и суммарное состояние проживающих в каждом городе поставщиков, у которых минимальный объём поставки деталей больше 1000.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT gorod, SUM(sostoyanie)&lt;br /&gt;
FROM spasoi_ekz.s&lt;br /&gt;
WHERE nomer_postavshika IN (&lt;br /&gt;
                            SELECT nomer_postavshika&lt;br /&gt;
                            FROM spasoi_ekz.spj&lt;br /&gt;
                            GROUP BY nomer_postavshika HAVING MIN(kolichestvo) &amp;gt; 1000&lt;br /&gt;
                           )&lt;br /&gt;
GROUP BY gorod;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;!-- этот запрос выполняет не совсем то и не правильно&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT gorod, sost&lt;br /&gt;
FROM (&lt;br /&gt;
SELECT gorod, SUM(sostoyanie) AS sost, SUM(SPJ.kolichestvo)&lt;br /&gt;
FROM spasoi_ekz.spj, spasoi_ekz.s&lt;br /&gt;
WHERE S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
GROUP BY S.gorod HAVING SUM(SPJ.kolichestvo) &amp;gt; 1000&lt;br /&gt;
) A;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; --&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
    gorod   |   sum&lt;br /&gt;
 -----------+---------&lt;br /&gt;
  Прага     | 2111110&lt;br /&gt;
  Стокгольм |  888888&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 12 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера деталей, поставляемых для какого-либо изделия поставщиком, проживающим в том же городе, где изготавливается это изделие.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali&lt;br /&gt;
FROM spasoi_ekz.spj SPJ, spasoi_ekz.s S, spasoi_ekz.j J&lt;br /&gt;
WHERE SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
  AND S.gorod = J.gorod&lt;br /&gt;
  AND J.nomer_izdelia = SPJ.nomer_izdelia;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_detali&lt;br /&gt;
 --------------&lt;br /&gt;
  P15&lt;br /&gt;
  P16&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 13 ===&lt;br /&gt;
&lt;br /&gt;
Написать &amp;lt;u&amp;gt;один&amp;lt;/u&amp;gt; запрос SELECT: выдать количества строк в таблице S (Поставщик) 1) с пустыми значениями и 2) непустыми значениями в столбце Состояние.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT COUNT(nomer_postavshika) - COUNT(sostoyanie) AS &amp;quot;С пустым состоянием&amp;quot;, &lt;br /&gt;
       COUNT(sostoyanie) AS &amp;quot;С не пустым состоянием&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.s;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но длиннее и нерациональней&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SELECT COUNT(Snull.*) AS &amp;quot;С пустым состоянием&amp;quot;, COUNT(Snotnull.sostoyanie) AS &amp;quot;С не пустым состоянием&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.s Snull RIGHT OUTER JOIN spasoi_ekz.s Snotnull&lt;br /&gt;
                                      ON Snull.nomer_postavshika = Snotnull.nomer_postavshika&lt;br /&gt;
                                         AND Snull.sostoyanie IS NULL;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  С пустым состоянием | С не пустым состоянием&lt;br /&gt;
 ---------------------+-----------------------&lt;br /&gt;
                    2 |                    15&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 14 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют детали только и только для изделия с номером &#039;J1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj A JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON A.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE nomer_izdelia = &#039;J1&#039;&lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT nomer_postavshika&lt;br /&gt;
                  FROM spasoi_ekz.spj&lt;br /&gt;
                  WHERE nomer_izdelia != &#039;J1&#039;&lt;br /&gt;
                    AND nomer_postavshika = A.nomer_postavshika&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       imya&lt;br /&gt;
 ----------------&lt;br /&gt;
  Томми Версетти&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 15 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать наименования изделий, для которых детали поставляют только те поставщики, у которых состояние больше 1000000 у.е.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                        JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
WHERE sostoyanie &amp;gt; 1000000&lt;br /&gt;
  AND SPJ.nomer_izdelia NOT IN (&lt;br /&gt;
                                SELECT nomer_izdelia&lt;br /&gt;
                                FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                                                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                                WHERE sostoyanie &amp;lt; 1000000&lt;br /&gt;
                               );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       nazvanie&lt;br /&gt;
 --------------------&lt;br /&gt;
  кружевное бельё&lt;br /&gt;
  уникальное изделие&lt;br /&gt;
  процессор&lt;br /&gt;
 (3 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 16 ===&lt;br /&gt;
Написать запрос SELECT: выдать цвета и для каждого цвета общее количество деталей, входящих в изделие с названием &#039;Панно 01-03&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT cvet AS &amp;quot;Цвет&amp;quot;, SUM(kolichestvo) AS &amp;quot;Деталей&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
			     AND J.nazvanie = LOWER(&#039;Панно 01-03&#039;)&lt;br /&gt;
			JOIN spasoi_ekz.P P&lt;br /&gt;
			  ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
GROUP BY cvet;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Цвет  | Деталей&lt;br /&gt;
 -------+---------&lt;br /&gt;
  белый |       9&lt;br /&gt;
  серый |       5&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 17 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера поставщиков и количество сделанных ими поставок при условии, что среднее число деталей во всех этих поставках больше 1000.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nom AS &amp;quot;Номер поставщика&amp;quot;, cnt AS &amp;quot;Количество поставок&amp;quot;&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT S.nomer_postavshika AS nom,&lt;br /&gt;
             COUNT(SPJ.nomer_postavshika) AS cnt,&lt;br /&gt;
             AVG(SPJ.kolichestvo) AS kol&lt;br /&gt;
      FROM spasoi_ekz.s S, spasoi_ekz.spj SPJ&lt;br /&gt;
      WHERE S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
      GROUP BY S.nomer_postavshika&lt;br /&gt;
     ) A&lt;br /&gt;
WHERE kol &amp;gt; 1000;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос немного попроще&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_postavshika AS &amp;quot;Номер поставщика&amp;quot;, COUNT(*) AS &amp;quot;Количество поставок&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
WHERE nomer_postavshika IN (&lt;br /&gt;
                            SELECT nomer_postavshika&lt;br /&gt;
                            FROM spasoi_ekz.spj&lt;br /&gt;
                            GROUP BY nomer_postavshika HAVING AVG(kolichestvo) &amp;gt; 1000&lt;br /&gt;
                           )&lt;br /&gt;
GROUP BY nomer_postavshika;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер поставщика | Количество поставок&lt;br /&gt;
 ------------------+---------------------&lt;br /&gt;
  S13              |                   1&lt;br /&gt;
  S6               |                   7&lt;br /&gt;
  S14              |                   1&lt;br /&gt;
  S15              |                   1&lt;br /&gt;
 (4 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 18 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, имеющих состояние больше 1000 и поставляющих деталь с названием &#039;Гайка 01-01&#039; для изделия с названием &#039;Велосипед 03-04&#039; в количестве (в поставке) большим, чем средний объём поставки, выполненной поставщиками с именем &#039;Иванов&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:2nd dufficulty.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;5px&amp;quot;&amp;gt;&#039;&#039;&#039;Второй по сложности запрос экзамена!&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;4px&amp;quot;&amp;gt;&#039;&#039;&#039;Вот уж не свезло, так не свезло&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                    JOIN spasoi_ekz.j J&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
WHERE sostoyanie &amp;gt; 1000&lt;br /&gt;
  AND P.nazvanie = LOWER(&#039;Гайка 01-01&#039;)&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Велосипед 03-04&#039;)&lt;br /&gt;
  AND kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT AVG(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                       ON SPJ.nomer_postavshika = S.nomer_postavshika &lt;br /&gt;
                     WHERE S.imya = &#039;Иванов&#039;&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Пётр&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 19 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия красных деталей, которые входят только в изделие с названием &#039;Рама 02-03&#039; в количестве, меньшем 10 единиц в поставке.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT X.nazvanie&lt;br /&gt;
FROM spasoi_ekz.p X JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_detali = X.nomer_detali&lt;br /&gt;
                    JOIN spasoi_ekz.j J&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
WHERE X.cvet = &#039;красный&#039;&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Рама 02-03&#039;)&lt;br /&gt;
  AND kolichestvo &amp;lt; 10&lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT J.nomer_izdelia&lt;br /&gt;
                  FROM spasoi_ekz.j J JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                                        ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                  WHERE J.nazvanie != LOWER(&#039;Рама 02-03&#039;)&lt;br /&gt;
                    AND X.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант этого же запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT P.nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND cvet = &#039;красный&#039;&lt;br /&gt;
                        JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                              AND J.nazvanie = LOWER(&#039;Рама 02-03&#039;)&lt;br /&gt;
WHERE kolichestvo &amp;lt; 10&lt;br /&gt;
  AND SPJ.nomer_detali NOT IN (&lt;br /&gt;
                               SELECT nomer_detali&lt;br /&gt;
                               FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                                         ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                                                            AND J.nazvanie != LOWER(&#039;Рама 02-03&#039;)&lt;br /&gt;
                              );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     nazvanie&lt;br /&gt;
 ----------------&lt;br /&gt;
  усиленная рама&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 20 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих только белые детали.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
WHERE cvet = &#039;белый&#039;&lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT nomer_postavshika&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                                            ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                  WHERE nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    AND P.cvet != &#039;белый&#039;&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё один вариант этого же запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND cvet = &#039;белый&#039;&lt;br /&gt;
                        JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE S.nomer_postavshika NOT IN (&lt;br /&gt;
                                  SELECT nomer_postavshika&lt;br /&gt;
                                  FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                                                            ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                                               AND cvet != &#039;белый&#039;&lt;br /&gt;
                                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;И ещё один вариант этого же запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s&lt;br /&gt;
WHERE nomer_postavshika NOT IN  (&lt;br /&gt;
                                 SELECT spj.nomer_postavshika&lt;br /&gt;
                                 FROM spasoi_ekz.spj SPJ, spasoi_ekz.p P&lt;br /&gt;
                                 WHERE SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                   AND p.cvet != &#039;белый&#039;&lt;br /&gt;
                                )&lt;br /&gt;
  AND nomer_postavshika  IN (&lt;br /&gt;
                             SELECT spj.nomer_postavshika&lt;br /&gt;
                             FROM spasoi_ekz.spj SPJ, spasoi_ekz.p P&lt;br /&gt;
                             WHERE SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                               AND p.cvet = &#039;белый&#039;&lt;br /&gt;
                            );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       imya&lt;br /&gt;
 -----------------&lt;br /&gt;
  Рендилл Тарли&lt;br /&gt;
  Сэмвелл Тарли&lt;br /&gt;
  Мелисса Флорент&lt;br /&gt;
  Томми Версетти&lt;br /&gt;
 (4 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 21 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия изделий, для которых детали поставляет только и только поставщик с номером &#039;S1&#039;.&lt;br /&gt;
&lt;br /&gt;
Чтобы продемонстрировать выполнение запроса наглядно, возьмём поставщика не &#039;S1&#039;, а &#039;S18&#039;, который был создан специально для этого запроса. Если оставить &#039;S1&#039;, то наглядности не получится, так как по нашей схеме БД этот поставщик не попадает под условие &amp;quot;&#039;&#039;только и только&#039;&#039;&amp;quot;, и запрос вернёт пустой результат.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie&lt;br /&gt;
FROM spasoi_ekz.j J, spasoi_ekz.SPJ SPJ&lt;br /&gt;
WHERE J.nomer_izdelia = SPJ.nomer_izdelia &lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT *&lt;br /&gt;
                  FROM spasoi_ekz.spj&lt;br /&gt;
                  WHERE nomer_postavshika != &#039;S18&#039; AND nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                 )&lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT *&lt;br /&gt;
                  FROM spasoi_ekz.spj&lt;br /&gt;
                  WHERE nomer_postavshika = &#039;S18&#039; AND nomer_izdelia != J.nomer_izdelia&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       nazvanie&lt;br /&gt;
 --------------------&lt;br /&gt;
  кинжал&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 22 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют только детали с номером &#039;P1&#039; для изделия с именем &#039;Штуцер 01-02&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- неверный запрос - номер изделия, а не название&lt;br /&gt;
SELECT imya FROM S X&lt;br /&gt;
JOIN SPJ Y ON X.nomer_postavshika=Y.nomer_postavshika&lt;br /&gt;
WHERE X.nomer_postavshika NOT IN (&lt;br /&gt;
                  SELECT DISTINCT nomer_postavshika FROM SPJ Z&lt;br /&gt;
                  WHERE Z.nomer_izdelia != &#039;Штуцер 01-02&#039;&lt;br /&gt;
                  AND Z.nomer_detali!=&#039;P1&#039;);--&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                             AND J.nazvanie = LOWER(&#039;штуцер 01-02&#039;)&lt;br /&gt;
                        JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND SPJ.nomer_detali = &#039;P1&#039;&lt;br /&gt;
                        JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE SPJ.nomer_postavshika NOT IN (&lt;br /&gt;
                                    SELECT nomer_postavshika&lt;br /&gt;
                                    FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                                              ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                                                                 AND J.nazvanie = LOWER(&#039;штуцер 01-02&#039;)&lt;br /&gt;
                                                            JOIN spasoi_ekz.p P&lt;br /&gt;
                                                              ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                                                 AND SPJ.nomer_detali != &#039;P1&#039;&lt;br /&gt;
                              );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Иван&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 23 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют деталь с названием &#039;Винт&#039; в количестве большим 100 единиц в одной поставке и имеют состояние больше среднего по их родному городу.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT S.imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
WHERE P.nazvanie = LOWER(&#039;Винт&#039;)&lt;br /&gt;
  AND SPJ.kolichestvo &amp;gt; 100&lt;br /&gt;
  AND S.sostoyanie &amp;gt; (&lt;br /&gt;
                      SELECT AVG(SS.sostoyanie)&lt;br /&gt;
                      FROM spasoi_ekz.s SS&lt;br /&gt;
                      WHERE SS.gorod = S.gorod&lt;br /&gt;
                     );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Пётр&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 24 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать наименования деталей и общее их количество для всех наименований деталей, изготавливаемых в одном городе.&lt;br /&gt;
&lt;br /&gt;
С этим запросом возникла неожиданная проблема - задание то ли неполное, то ли неправильное, потому что нельзя однозначно сказать, что по нему требуется сделать.&lt;br /&gt;
&lt;br /&gt;
Так что тут несколько вариантов запросов (кто как понял).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Первый вариант запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie, kol&lt;br /&gt;
FROM spasoi_ekz.p A, (&lt;br /&gt;
                      SELECT X.gorod, SUM(kolichestvo) as kol&lt;br /&gt;
                      FROM spasoi_ekz.p X, spasoi_ekz.spj Y&lt;br /&gt;
                      WHERE Y.nomer_detali = X.nomer_detali&lt;br /&gt;
                      GROUP BY X.gorod&lt;br /&gt;
                     ) B&lt;br /&gt;
WHERE A.gorod = B.gorod;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
        nazvanie       | kol&lt;br /&gt;
 ----------------------+------&lt;br /&gt;
  подставка            |    9&lt;br /&gt;
  стойка               |    9&lt;br /&gt;
  абажур               |    9&lt;br /&gt;
  гайка                |  139&lt;br /&gt;
  ось                  |   60&lt;br /&gt;
  зубчатое колесо      |   60&lt;br /&gt;
  транзистор           |   50&lt;br /&gt;
  печатная плата       |   50&lt;br /&gt;
  диод                 |   50&lt;br /&gt;
  универсальная деталь |   13&lt;br /&gt;
  уникальная деталь    |   14&lt;br /&gt;
  болт                 | 9137&lt;br /&gt;
  рама                 |   69&lt;br /&gt;
  колесо               |   69&lt;br /&gt;
  втулка               |   69&lt;br /&gt;
  бумага               | 3122&lt;br /&gt;
  плитка               |   14&lt;br /&gt;
  орнамент             |   14&lt;br /&gt;
  уголок               |   14&lt;br /&gt;
  гайка 01-01          |   27&lt;br /&gt;
  усиленная рама       |   10&lt;br /&gt;
  винт                 | 9137&lt;br /&gt;
  труселя              |    1&lt;br /&gt;
  штуцерная деталь     |   10&lt;br /&gt;
  шуруп                |  139&lt;br /&gt;
 (25 rows)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
и&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Второй вариант запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
В уточнение задания Григорьев сказал следующее: &amp;quot;&#039;&#039;Следует учесть, что в качестве наименования города может выступать переменная, в которую в некоторой программе должно быть занесено конкретное значение перед выполнением запроса&#039;&#039;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
То есть, вообще говоря, задание на запрос неполное, и его можно трактовать так: выдать наименования деталей и общее их количество для всех наименований деталей, изготавливаемых в городе &amp;lt;code&amp;gt;%НАЗВАНИЕГОРОДА%&amp;lt;/code&amp;gt;. Вот эта переменная задаётся где-то в программе, а в БД идёт запрос с уже подставленным конкретным названием. &lt;br /&gt;
&lt;br /&gt;
Этот вариант запроса составлен, например, для Лондона. &lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie, SUM(kolichestvo)&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
WHERE gorod = &#039;Лондон&#039;&lt;br /&gt;
GROUP BY nazvanie;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nazvanie | sum&lt;br /&gt;
 ----------+-----&lt;br /&gt;
  гайка    |  71&lt;br /&gt;
  шуруп    |  68&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Билет 25 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих хотя бы одну белую деталь для изделия с названием &#039;Велосипед 01-04&#039; с объёмом поставки большим, чем средний объём поставки этого поставщика.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                    JOIN spasoi_ekz.j J&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
WHERE cvet = &#039;белый&#039;&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Велосипед 01-04&#039;)&lt;br /&gt;
  AND kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT AVG(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj SPJ&lt;br /&gt;
                     WHERE SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Пётр&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 26 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера красных деталей и количество поставок этих деталей.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT P.nomer_detali AS &amp;quot;Номер детали&amp;quot;, COUNT(kolichestvo) AS &amp;quot;Количество поставок с ней&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.p P, spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
  AND cvet = &#039;красный&#039;&lt;br /&gt;
GROUP BY P.nomer_detali;   &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос через JOIN&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT SPJ.nomer_detali AS &amp;quot;Номер детали&amp;quot;, COUNT(kolichestvo) AS &amp;quot;Количество поставок с ней&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND cvet = &#039;красный&#039;&lt;br /&gt;
GROUP BY SPJ.nomer_detali;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер детали | Количество поставок с ней&lt;br /&gt;
 --------------+---------------------------&lt;br /&gt;
  P15          |                         3&lt;br /&gt;
  P22          |                         1&lt;br /&gt;
  P24          |                         1&lt;br /&gt;
 (3 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 27 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать наименования городов и среднее состояние поставщиков для каждого города, поставляющих детали с названием &#039;Гайка 01-01&#039; для изделия с названием &#039;Велосипед 03-04&#039; в количестве (в поставке) большим, чем минимальный объём поставки, выполненной поставщиком с номером &#039;S1&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:1st dufficulty.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;7px&amp;quot;&amp;gt;&#039;&#039;&#039;Сложнейший запрос экзамена!&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;5px&amp;quot;&amp;gt;&#039;&#039;&#039;Сохрани Джа, вытащить такое&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT S.gorod AS &amp;quot;Город&amp;quot;, AVG(S.sostoyanie) AS &amp;quot;Среднее состояние&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                    JOIN spasoi_ekz.j J&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
WHERE P.nazvanie = LOWER(&#039;Гайка 01-01&#039;)&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Велосипед 03-04&#039;)&lt;br /&gt;
  AND kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT MIN(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj&lt;br /&gt;
                     WHERE nomer_postavshika = &#039;S1&#039;&lt;br /&gt;
                    )&lt;br /&gt;
GROUP BY S.gorod;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
    Город   |   Среднее состояние&lt;br /&gt;
 -----------+-----------------------&lt;br /&gt;
  Мытищи    |    35000.500000000000&lt;br /&gt;
  Йокогама  |  1500000.000000000000&lt;br /&gt;
  Манчестер | 2571.0000000000000000&lt;br /&gt;
 (3 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 28 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия изделий, куда входит хотя бы одна красная деталь весом больше 10 граммов, поставляемая только поставщиком с номером &#039;S1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT J.nazvanie&lt;br /&gt;
FROM spasoi_ekz.j J JOIN spasoi_ekz.spj SPJ1&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ1.nomer_izdelia&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ1.nomer_detali&lt;br /&gt;
WHERE P.ves &amp;gt; 10&lt;br /&gt;
 AND P.cvet = &#039;красный&#039;&lt;br /&gt;
 AND NOT EXISTS (&lt;br /&gt;
                 SELECT SPJ2.nomer_postavshika&lt;br /&gt;
                 FROM spasoi_ekz.spj SPJ2         &lt;br /&gt;
                 WHERE SPJ2.nomer_detali = P.nomer_detali&lt;br /&gt;
	 	   AND SPJ2.nomer_postavshika != &#039;S1&#039;&lt;br /&gt;
                );                     &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     nazvanie&lt;br /&gt;
 -----------------&lt;br /&gt;
  кружевное бельё&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 29 ===&lt;br /&gt;
Написать запрос SELECT: выдать названия деталей, которые входят только и только в состав изделия с названием &#039;Штуцер 01-03&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie&lt;br /&gt;
FROM spasoi_ekz.p P, spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE P.nomer_detali = SPJ.nomer_detali &lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT SPJ.nomer_izdelia&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                            ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
                  WHERE J.nazvanie != LOWER(&#039;Штуцер 01-03&#039;)&lt;br /&gt;
                    AND SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
      nazvanie&lt;br /&gt;
 ------------------&lt;br /&gt;
  штуцерная деталь&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 30 ===&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют, по крайней мере, все те детали, которые поставляет поставщик с номером &#039;S2&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT imya&lt;br /&gt;
FROM spasoi_ekz.s S&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT nomer_detali&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJY&lt;br /&gt;
                  WHERE nomer_postavshika = &#039;S2&#039;&lt;br /&gt;
                    AND NOT EXISTS (&lt;br /&gt;
                                    SELECT *&lt;br /&gt;
                                    FROM spasoi_ekz.spj&lt;br /&gt;
                                    WHERE nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                                      AND nomer_detali = SPJY.nomer_detali&lt;br /&gt;
                                   )&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  imya&lt;br /&gt;
 ------------&lt;br /&gt;
  Оша&lt;br /&gt;
  Бран Старк&lt;br /&gt;
 (2 rows)&lt;br /&gt;
[[Категория:Структурное проектирование АСОИ (10 семестр)]]&lt;/div&gt;</summary>
		<author><name>81.9.52.28</name></author>
	</entry>
	<entry>
		<id>https://iu5bmstu.ru/index.php?title=SQL-%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D1%8B_%D0%BA_%D1%8D%D0%BA%D0%B7%D0%B0%D0%BC%D0%B5%D0%BD%D1%83_%D0%BF%D0%BE_%D0%A1%D0%9F%D0%90%D0%A1%D0%9E%D0%98_(10_%D1%81%D0%B5%D0%BC%D0%B5%D1%81%D1%82%D1%80)&amp;diff=3814</id>
		<title>SQL-запросы к экзамену по СПАСОИ (10 семестр)</title>
		<link rel="alternate" type="text/html" href="https://iu5bmstu.ru/index.php?title=SQL-%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D1%8B_%D0%BA_%D1%8D%D0%BA%D0%B7%D0%B0%D0%BC%D0%B5%D0%BD%D1%83_%D0%BF%D0%BE_%D0%A1%D0%9F%D0%90%D0%A1%D0%9E%D0%98_(10_%D1%81%D0%B5%D0%BC%D0%B5%D1%81%D1%82%D1%80)&amp;diff=3814"/>
		<updated>2013-06-14T19:27:44Z</updated>

		<summary type="html">&lt;p&gt;81.9.52.28: /* Билет 4 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right; clear:both; margin-right:1.0em;&amp;quot;&amp;gt;__TOC__&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Билет экзамена по [[:Категория:Структурное проектирование АСОИ (10 семестр) | СПАСОИ]] состоит из двух частей:&lt;br /&gt;
# теория;&lt;br /&gt;
# SQL-запрос.&lt;br /&gt;
&lt;br /&gt;
На этой странице собраны все сформированные запросы по билетам.&lt;br /&gt;
&lt;br /&gt;
Странно, что ни в одном билете нет запроса с сортировкой результатов. Возможно, они буду в дополнительных заданиях.&lt;br /&gt;
&lt;br /&gt;
== Схема БД ==&lt;br /&gt;
&lt;br /&gt;
Схема БД используется всё [[СПАСОИ_(10)_-_Лекция_№8_-_SQL#Некоторые возможности языка SQL | та же]], что была в прошлом семестре и на лекциях.&lt;br /&gt;
&lt;br /&gt;
Для написания запросов и проверки их выполнения создана БД в СУБД [http://www.postgresql.org/ PostgreSQL].&lt;br /&gt;
&lt;br /&gt;
Скрипт создания можно загрузить [http://yadi.sk/d/MmOgbWnr5cATO отсюда].&lt;br /&gt;
&lt;br /&gt;
=== Таблицы БД ===&lt;br /&gt;
&lt;br /&gt;
==== Поставщики ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.s;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika |       imya       | sostoyanie |   gorod&lt;br /&gt;
 -------------------+------------------+------------+------------&lt;br /&gt;
  S5                | Мелисандра       |      65000 | Мадрид&lt;br /&gt;
  S2                | Бран Старк       |      60000 | Мурманск&lt;br /&gt;
  S1                | Якен Хгар        |    1500000 | Йокогама&lt;br /&gt;
  S7                | Сирио Форель     |    1500000 | Йокогама&lt;br /&gt;
  S4                | Джейме Ланнистер |     750000 | Лондон&lt;br /&gt;
  S3                | Серсея Ланнистер |    1200000 | Лондон&lt;br /&gt;
  S8                | Тирион Ланнистер |       2571 | Манчестер&lt;br /&gt;
  S9                | Иванов           |      35000 | Мытищи&lt;br /&gt;
  S10               | Русе Болтон      |      44444 | Баренцбург&lt;br /&gt;
  S11               | Петров Иван      |      35000 | Мытищи&lt;br /&gt;
  S14               | Рендилл Тарли    |    1111111 | Прага&lt;br /&gt;
  S13               | Сэмвелл Тарли    |     999999 | Прага&lt;br /&gt;
  S6                | Оша              |            | Москва&lt;br /&gt;
  S16               | Ходор            |            | Москва&lt;br /&gt;
  S15               | Мелисса Флорент  |     888888 | Стокгольм&lt;br /&gt;
  S12               | Петров Пётр      |      35001 | Мытищи&lt;br /&gt;
  S17               | Томми Версетти   |  123456789 | Майами&lt;br /&gt;
 (17 rows)&lt;br /&gt;
&lt;br /&gt;
==== Детали ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.p;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_detali |       nazvanie       |     cvet      | ves  |      gorod&lt;br /&gt;
 --------------+----------------------+---------------+------+-----------------&lt;br /&gt;
  P9           | подставка            | синий         |  400 | Нижний Новгород&lt;br /&gt;
  P10          | стойка               | синий         | 2000 | Нижний Новгород&lt;br /&gt;
  P11          | абажур               | синий         |  400 | Нижний Новгород&lt;br /&gt;
  P1           | гайка                | чёрный        |   20 | Лондон&lt;br /&gt;
  P3           | ось                  | белый         | 5000 | Эдинбург&lt;br /&gt;
  P4           | зубчатое колесо      | чёрный        |   50 | Эдинбург&lt;br /&gt;
  P6           | транзистор           | коричневый    |    2 | Токио&lt;br /&gt;
  P7           | печатная плата       | зелёный       |  200 | Токио&lt;br /&gt;
  P8           | диод                 | коричневый    |    1 | Токио&lt;br /&gt;
  P12          | универсальная деталь | универсальный |    1 | Париж&lt;br /&gt;
  P13          | уникальная деталь    | уникальный    |    1 | Бостон&lt;br /&gt;
  P14          | болт                 | серый         |   20 | Ижевск&lt;br /&gt;
  P15          | рама                 | красный       | 3000 | Манчестер&lt;br /&gt;
  P16          | колесо               | белый         | 1500 | Манчестер&lt;br /&gt;
  P5           | втулка               | серый         |  350 | Манчестер&lt;br /&gt;
  P17          | бумага               | белый         |    1 | Астрахань&lt;br /&gt;
  P18          | плитка               | белый         |  300 | Флоренция&lt;br /&gt;
  P19          | орнамент             | серый         |  800 | Флоренция&lt;br /&gt;
  P20          | уголок               | серый         |  100 | Флоренция&lt;br /&gt;
  P21          | гайка 01-01          | серебристый   |   20 | Клин&lt;br /&gt;
  P22          | усиленная рама       | красный       | 3200 | Череповец&lt;br /&gt;
  P23          | винт                 | розовый       |    5 | Ижевск&lt;br /&gt;
  P24          | труселя              | красный       |   20 | Челябинск&lt;br /&gt;
  P25          | штуцерная деталь     | коричневый    |  450 | Череповец&lt;br /&gt;
  P2           | шуруп                | чёрный        |    5 | Лондон&lt;br /&gt;
 (25 rows)&lt;br /&gt;
&lt;br /&gt;
==== Изделия ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.j;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_izdelia |       nazvanie        |      gorod&lt;br /&gt;
 ---------------+-----------------------+-----------------&lt;br /&gt;
  J1            | автомобиль            | Магнитогорск&lt;br /&gt;
  J2            | процессор             | Зеленоград&lt;br /&gt;
  J3            | торшер                | Нижний Новгород&lt;br /&gt;
  J4            | универсальное изделие | Париж&lt;br /&gt;
  J5            | уникальное изделие    | Бостон&lt;br /&gt;
  J6            | велосипед 01/23       | Манчестер&lt;br /&gt;
  J7            | изделие из болтов     | Челябинск&lt;br /&gt;
  J8            | шкаф                  | Ярославль&lt;br /&gt;
  J9            | рама 02-01            | Череповец&lt;br /&gt;
  J10           | книга                 | Астрахань&lt;br /&gt;
  J11           | панно 01-03           | Флоренция&lt;br /&gt;
  J12           | велосипед 03-04       | Клин&lt;br /&gt;
  J13           | рама 02-03            | Череповец&lt;br /&gt;
  J14           | штуцер 01-02          | Череповец&lt;br /&gt;
  J15           | велосипед 01-04       | Клин&lt;br /&gt;
  J16           | кружевное бельё       | Челябинск&lt;br /&gt;
  J17           | штуцер 01-03          | Череповец&lt;br /&gt;
 (17 rows)&lt;br /&gt;
&lt;br /&gt;
==== Сборки ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.spj;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika | nomer_detali | nomer_izdelia | kolichestvo&lt;br /&gt;
 -------------------+--------------+---------------+-------------&lt;br /&gt;
  S1                | P6           | J2            |          20&lt;br /&gt;
  S1                | P7           | J2            |           5&lt;br /&gt;
  S2                | P1           | J1            |           4&lt;br /&gt;
  S6                | P4           | J1            |           2&lt;br /&gt;
  S6                | P5           | J1            |           6&lt;br /&gt;
  S3                | P9           | J3            |           1&lt;br /&gt;
  S4                | P10          | J3            |           1&lt;br /&gt;
  S5                | P11          | J3            |           1&lt;br /&gt;
  S2                | P4           | J1            |           8&lt;br /&gt;
  S6                | P3           | J1            |          50&lt;br /&gt;
  S7                | P8           | J2            |          25&lt;br /&gt;
  S1                | P12          | J4            |           1&lt;br /&gt;
  S2                | P12          | J4            |           1&lt;br /&gt;
  S3                | P12          | J4            |           1&lt;br /&gt;
  S4                | P12          | J4            |           1&lt;br /&gt;
  S5                | P12          | J4            |           1&lt;br /&gt;
  S7                | P12          | J4            |           1&lt;br /&gt;
  S7                | P2           | J1            |           1&lt;br /&gt;
  S6                | P2           | J1            |           9&lt;br /&gt;
  S6                | P12          | J4            |           7&lt;br /&gt;
  S1                | P13          | J5            |          14&lt;br /&gt;
  S6                | P14          | J1            |        9000&lt;br /&gt;
  S2                | P14          | J1            |           3&lt;br /&gt;
  S6                | P1           | J1            |          12&lt;br /&gt;
  S8                | P15          | J6            |           1&lt;br /&gt;
  S8                | P16          | J6            |           2&lt;br /&gt;
  S3                | P5           | J6            |          10&lt;br /&gt;
  S10               | P2           | J8            |           4&lt;br /&gt;
  S8                | P1           | J7            |          16&lt;br /&gt;
  S9                | P14          | J7            |           3&lt;br /&gt;
  S11               | P10          | J3            |           2&lt;br /&gt;
  S12               | P15          | J1            |           3&lt;br /&gt;
  S11               | P11          | J3            |           4&lt;br /&gt;
  S10               | P14          | J9            |           5&lt;br /&gt;
  S13               | P17          | J10           |        1001&lt;br /&gt;
  S14               | P17          | J10           |        1111&lt;br /&gt;
  S15               | P17          | J10           |        1010&lt;br /&gt;
  S5                | P18          | J11           |           9&lt;br /&gt;
  S5                | P19          | J11           |           1&lt;br /&gt;
  S5                | P20          | J11           |           4&lt;br /&gt;
  S9                | P14          | J8            |          25&lt;br /&gt;
  S12               | P21          | J12           |          15&lt;br /&gt;
  S11               | P22          | J13           |           9&lt;br /&gt;
  S11               | P1           | J14           |          26&lt;br /&gt;
  S12               | P1           | J14           |          13&lt;br /&gt;
  S12               | P2           | J14           |          54&lt;br /&gt;
  S12               | P23          | J4            |         101&lt;br /&gt;
  S12               | P16          | J15           |          40&lt;br /&gt;
  S7                | P21          | J12           |           3&lt;br /&gt;
  S8                | P21          | J12           |           4&lt;br /&gt;
  S9                | P21          | J12           |           5&lt;br /&gt;
  S1                | P24          | J16           |           1&lt;br /&gt;
  S1                | P15          | J6            |           3&lt;br /&gt;
  S4                | P25          | J17           |           1&lt;br /&gt;
  S17               | P16          | J1            |           4&lt;br /&gt;
 (55 rows)&lt;br /&gt;
&lt;br /&gt;
== Готовые запросы ==&lt;br /&gt;
&lt;br /&gt;
Если видите, что тот или иной запрос можно составить короче и рациональней - смело вносите правку.&lt;br /&gt;
&lt;br /&gt;
=== Билет 1 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера поставщиков, которые поставляют, по крайней мере, все те детали, которые поставляет поставщик с номером &#039;S2&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nomer_postavshika&lt;br /&gt;
FROM spasoi_ekz.spj SPJX&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT nomer_detali&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJY&lt;br /&gt;
                  WHERE nomer_postavshika = &#039;S2&#039;&lt;br /&gt;
                    AND NOT EXISTS (&lt;br /&gt;
                                    SELECT *&lt;br /&gt;
                                    FROM spasoi_ekz.spj&lt;br /&gt;
                                    WHERE nomer_postavshika = SPJX.nomer_postavshika&lt;br /&gt;
                                      AND nomer_detali = SPJY.nomer_detali&lt;br /&gt;
                                   )&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika&lt;br /&gt;
 -------------------&lt;br /&gt;
  S6&lt;br /&gt;
  S2&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 2 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера деталей и общее их количество для всех номеров деталей, поставляемых более чем одним поставщиком.&lt;br /&gt;
&lt;br /&gt;
Текст запроса, каким его дал Григорьев на лекции, впоследствии исправив его:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali AS &amp;quot;Номер детали&amp;quot;,&lt;br /&gt;
       SUM(kolichestvo) AS &amp;quot;Сколько штук поставляется&amp;quot;,&lt;br /&gt;
       COUNT(DISTINCT nomer_postavshika) AS &amp;quot;Сколько у неё поставщиков&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_postavshika) &amp;gt; 1;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali AS &amp;quot;Номер детали&amp;quot;,&lt;br /&gt;
       kol AS &amp;quot;Сколько штук поставляется&amp;quot;&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT nomer_detali,&lt;br /&gt;
             SUM(kolichestvo) AS kol,&lt;br /&gt;
             COUNT(DISTINCT nomer_postavshika)&lt;br /&gt;
      FROM spasoi_ekz.spj&lt;br /&gt;
      GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_postavshika) &amp;gt; 1&lt;br /&gt;
     ) A;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер детали | Сколько штук поставляется | Сколько у неё поставщиков&lt;br /&gt;
 --------------+---------------------------+---------------------------&lt;br /&gt;
  P1           |                        71 |                         5&lt;br /&gt;
  P10          |                         3 |                         2&lt;br /&gt;
  P11          |                         5 |                         2&lt;br /&gt;
  P12          |                        13 |                         7&lt;br /&gt;
  P14          |                      9036 |                         4&lt;br /&gt;
  P15          |                         7 |                         3&lt;br /&gt;
  P16          |                        46 |                         3&lt;br /&gt;
  P17          |                      3122 |                         3&lt;br /&gt;
  P2           |                        68 |                         4&lt;br /&gt;
  P21          |                        27 |                         4&lt;br /&gt;
  P4           |                        10 |                         2&lt;br /&gt;
  P5           |                        16 |                         2&lt;br /&gt;
 (12 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 3 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера поставщиков, поставляющих детали с номером &#039;P1&#039; для какого-либо изделия в количестве (в поставке) большим, чем средний объём поставок деталей с номером &#039;P2&#039; для этого изделия.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT X.nomer_postavshika &lt;br /&gt;
FROM spasoi_ekz.spj X&lt;br /&gt;
WHERE X.nomer_detali = &#039;P1&#039;&lt;br /&gt;
  AND X.kolichestvo &amp;gt; (&lt;br /&gt;
                       SELECT AVG(kolichestvo)&lt;br /&gt;
                       FROM spasoi_ekz.spj&lt;br /&gt;
                       WHERE nomer_izdelia = X.nomer_izdelia&lt;br /&gt;
                         AND nomer_detali = &#039;P2&#039;&lt;br /&gt;
                      );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но длиннее и нерациональней&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nomer_postavshika&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT *&lt;br /&gt;
      FROM spasoi_ekz.spj&lt;br /&gt;
      WHERE nomer_izdelia IN(&lt;br /&gt;
                             SELECT nomer_izdelia&lt;br /&gt;
                             FROM spasoi_ekz.spj&lt;br /&gt;
                             WHERE nomer_detali = &#039;P1&#039;&lt;br /&gt;
                            )&lt;br /&gt;
        AND nomer_izdelia IN(&lt;br /&gt;
	                     SELECT nomer_izdelia&lt;br /&gt;
	                     FROM spasoi_ekz.spj&lt;br /&gt;
	                     WHERE nomer_detali = &#039;P2&#039;&lt;br /&gt;
	                    )&lt;br /&gt;
     ) A&lt;br /&gt;
WHERE nomer_detali = &#039;P1&#039; AND kolichestvo &amp;gt;&lt;br /&gt;
(&lt;br /&gt;
 SELECT AVG(kolichestvo)&lt;br /&gt;
 FROM (&lt;br /&gt;
       SELECT *&lt;br /&gt;
       FROM spasoi_ekz.spj&lt;br /&gt;
       WHERE nomer_izdelia IN(&lt;br /&gt;
                              SELECT nomer_izdelia&lt;br /&gt;
                              FROM spasoi_ekz.spj&lt;br /&gt;
                              WHERE nomer_detali = &#039;P1&#039;&lt;br /&gt;
                             )&lt;br /&gt;
         AND nomer_izdelia IN(&lt;br /&gt;
                              SELECT nomer_izdelia&lt;br /&gt;
                              FROM spasoi_ekz.spj&lt;br /&gt;
                              WHERE nomer_detali = &#039;P2&#039;&lt;br /&gt;
                             )&lt;br /&gt;
      ) B&lt;br /&gt;
 WHERE nomer_detali = &#039;P2&#039;&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika&lt;br /&gt;
 -------------------&lt;br /&gt;
  S6&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 4 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера изделий, для которых детали поставляет только поставщик с номером ‘S1’.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT X.nomer_izdelia&lt;br /&gt;
FROM spasoi_ekz.spj X&lt;br /&gt;
WHERE NOT EXISTS	&lt;br /&gt;
                (		&lt;br /&gt;
                           SELECT *		&lt;br /&gt;
                           FROM spasoi_ekz.spj 		&lt;br /&gt;
                           WHERE nomer_postavshika != &#039;S1&#039; AND		&lt;br /&gt;
                           X.nomer_izdelia = nomer_izdelia	&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nomer_izdelia&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
WHERE nomer_izdelia IN(&lt;br /&gt;
                       SELECT nomer_izdelia&lt;br /&gt;
                       FROM spasoi_ekz.spj&lt;br /&gt;
                       WHERE nomer_postavshika = &#039;S1&#039;&lt;br /&gt;
                      )&lt;br /&gt;
  AND nomer_izdelia NOT IN(&lt;br /&gt;
                           SELECT nomer_izdelia&lt;br /&gt;
                           FROM spasoi_ekz.spj&lt;br /&gt;
                           WHERE nomer_postavshika != &#039;S1&#039;&lt;br /&gt;
                          );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_izdelia&lt;br /&gt;
 ---------------&lt;br /&gt;
  J5&lt;br /&gt;
  J16&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 5 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих детали с названием &amp;quot;Болт&amp;quot; в количестве (в поставке) большим, чем средний объём всех поставок деталей с номером &#039;P1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                           ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                        JOIN spasoi_ekz.p P&lt;br /&gt;
                           ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                              AND nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
WHERE kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT AVG(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                                               ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                                  AND SPJ.nomer_detali = &#039;P1&#039;&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но без JOIN&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s&lt;br /&gt;
WHERE nomer_postavshika IN (&lt;br /&gt;
                            SELECT nomer_postavshika&lt;br /&gt;
                            FROM spasoi_ekz.spj&lt;br /&gt;
                            WHERE nomer_detali = (&lt;br /&gt;
                                                  SELECT nomer_detali&lt;br /&gt;
                                                  FROM spasoi_ekz.p&lt;br /&gt;
                                                  WHERE LOWER(nazvanie) = LOWER(&#039;Болт&#039;)&lt;br /&gt;
                                                 )&lt;br /&gt;
                              AND kolichestvo &amp;gt; (&lt;br /&gt;
                                                 SELECT AVG(kolichestvo)&lt;br /&gt;
                                                 FROM spasoi_ekz.spj&lt;br /&gt;
                                                 WHERE nomer_detali = &#039;P1&#039;&lt;br /&gt;
                                                )&lt;br /&gt;
                           );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  imya&lt;br /&gt;
 ------&lt;br /&gt;
  Оша&lt;br /&gt;
  Иванов&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 6 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия деталей, поставляемых поставщиком, проживающим в том же городе, где изготавливаются эти детали, для изделия с названием ‘Велосипед 01/23’.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nazvanie&lt;br /&gt;
FROM spasoi_ekz.S S, spasoi_ekz.p P, spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE S.gorod = P.gorod&lt;br /&gt;
  AND P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
  AND S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
  AND nomer_izdelia = (&lt;br /&gt;
                       SELECT nomer_izdelia&lt;br /&gt;
                       FROM spasoi_ekz.j&lt;br /&gt;
                       WHERE nazvanie = LOWER(&#039;Велосипед 01/23&#039;)&lt;br /&gt;
                      );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nazvanie&lt;br /&gt;
 ----------&lt;br /&gt;
  рама&lt;br /&gt;
  колесо&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 7 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия изделий, куда входят детали с названием &#039;Болт&#039;, поставляемых поставщиками с именем &#039;Иванов&#039;, в количестве (в поставке) большим, чем средний объём поставок для этого изделия.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie&lt;br /&gt;
FROM spasoi_ekz.j&lt;br /&gt;
WHERE nomer_izdelia IN (&lt;br /&gt;
                        SELECT nomer_izdelia&lt;br /&gt;
                        FROM (spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                                                   ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                                                      AND imya = &#039;Иванов&#039;&lt;br /&gt;
                                                 JOIN spasoi_ekz.p P&lt;br /&gt;
                                                   ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                                      AND nazvanie = LOWER(&#039;Болт&#039;)) A&lt;br /&gt;
                        WHERE kolichestvo &amp;gt; (&lt;br /&gt;
                                             SELECT AVG(kolichestvo)&lt;br /&gt;
                                             FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                                                       ON SPJ.nomer_izdelia = A.nomer_izdelia&lt;br /&gt;
                                            )&lt;br /&gt;
                       );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но длиннее и нерациональней&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT J.nazvanie, kolichestvo&lt;br /&gt;
      FROM spasoi_ekz.s S, spasoi_ekz.p P, spasoi_ekz.j J, spasoi_ekz.spj SPJ&lt;br /&gt;
      WHERE J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
        AND P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
        AND P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
        AND S.imya = &#039;Иванов&#039;&lt;br /&gt;
        AND S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
     ) A&lt;br /&gt;
WHERE kolichestvo &amp;gt;&lt;br /&gt;
(&lt;br /&gt;
 SELECT AVG(kolichestvo)&lt;br /&gt;
 FROM spasoi_ekz.spj&lt;br /&gt;
 WHERE nomer_izdelia IN(&lt;br /&gt;
                        SELECT J.nomer_izdelia&lt;br /&gt;
                        FROM spasoi_ekz.s S, spasoi_ekz.p P, spasoi_ekz.j J, spasoi_ekz.spj SPJ&lt;br /&gt;
                        WHERE J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
                          AND P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                          AND P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
                          AND S.imya = &#039;Иванов&#039;&lt;br /&gt;
                          AND S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
                       )&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
      nazvanie&lt;br /&gt;
 -------------------&lt;br /&gt;
  шкаф&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 8 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера изделий и общее количество деталей для них, поставляемых поставщиками с именем &#039;Петров&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_izdelia AS &amp;quot;Номер изделия&amp;quot;, SUM(kolichestvo) AS &amp;quot;Количество деталей&amp;quot; &lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                             -- так как &amp;quot;поставщикАМИ&amp;quot; и возможны&lt;br /&gt;
                             -- Иван Петров и Петров Иван, то LIKE %Петров%&lt;br /&gt;
                             AND imya LIKE &#039;%Петров%&#039;&lt;br /&gt;
GROUP BY nomer_izdelia;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер изделия | Количество деталей&lt;br /&gt;
 ---------------+--------------------&lt;br /&gt;
  J4            |                101&lt;br /&gt;
  J3            |                  6&lt;br /&gt;
  J13           |                  9&lt;br /&gt;
  J15           |                 40&lt;br /&gt;
  J1            |                  3&lt;br /&gt;
  J12           |                 15&lt;br /&gt;
  J14           |                 93&lt;br /&gt;
 (7 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 9 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера деталей и общее их количество для всех номеров деталей, которые входят только в одно изделие.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali, SUM(kolichestvo)&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_izdelia) = 1;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali, kol FROM (&lt;br /&gt;
       SELECT nomer_detali, SUM(kolichestvo) AS kol, COUNT(DISTINCT nomer_izdelia) = 1&lt;br /&gt;
       FROM spasoi_ekz.spj&lt;br /&gt;
       GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_izdelia) = 1&lt;br /&gt;
    ) A;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_detali | sum&lt;br /&gt;
 --------------+------&lt;br /&gt;
  P10          |    3&lt;br /&gt;
  P11          |    5&lt;br /&gt;
  P12          |   13&lt;br /&gt;
  P13          |   14&lt;br /&gt;
  P17          | 3122&lt;br /&gt;
  P18          |    9&lt;br /&gt;
  P19          |    1&lt;br /&gt;
  P20          |    4&lt;br /&gt;
  P21          |   27&lt;br /&gt;
  P22          |    9&lt;br /&gt;
  P23          |  101&lt;br /&gt;
  P24          |    1&lt;br /&gt;
  P25          |    1&lt;br /&gt;
  P3           |   50&lt;br /&gt;
  P4           |   10&lt;br /&gt;
  P6           |   20&lt;br /&gt;
  P7           |    5&lt;br /&gt;
  P8           |   25&lt;br /&gt;
  P9           |    1&lt;br /&gt;
 (19 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 10 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих детали с названием &#039;Болт&#039; для изделия с названием &#039;Рама 02-01&#039; в количестве (в поставке) большим, чем минимальное значение поставки детали с номером &#039;P1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
			   ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
			      AND J.nazvanie = LOWER(&#039;Рама 02-01&#039;)&lt;br /&gt;
			 JOIN spasoi_ekz.p P&lt;br /&gt;
			   ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
			      AND P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
			 JOIN spasoi_ekz.s S&lt;br /&gt;
			   ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE kolichestvo &amp;gt; (&lt;br /&gt;
		     SELECT MIN(kolichestvo)&lt;br /&gt;
		     FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
					       ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
					          AND P.nomer_detali = &#039;P1&#039;&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Русе Болтон&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 11 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия городов и суммарное состояние проживающих в каждом городе поставщиков, у которых минимальный объём поставки деталей больше 1000.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT gorod, SUM(sostoyanie)&lt;br /&gt;
FROM spasoi_ekz.s&lt;br /&gt;
WHERE nomer_postavshika IN (&lt;br /&gt;
                            SELECT nomer_postavshika&lt;br /&gt;
                            FROM spasoi_ekz.spj&lt;br /&gt;
                            GROUP BY nomer_postavshika HAVING MIN(kolichestvo) &amp;gt; 1000&lt;br /&gt;
                           )&lt;br /&gt;
GROUP BY gorod;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;!-- этот запрос выполняет не совсем то и не правильно&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT gorod, sost&lt;br /&gt;
FROM (&lt;br /&gt;
SELECT gorod, SUM(sostoyanie) AS sost, SUM(SPJ.kolichestvo)&lt;br /&gt;
FROM spasoi_ekz.spj, spasoi_ekz.s&lt;br /&gt;
WHERE S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
GROUP BY S.gorod HAVING SUM(SPJ.kolichestvo) &amp;gt; 1000&lt;br /&gt;
) A;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; --&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
    gorod   |   sum&lt;br /&gt;
 -----------+---------&lt;br /&gt;
  Прага     | 2111110&lt;br /&gt;
  Стокгольм |  888888&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 12 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера деталей, поставляемых для какого-либо изделия поставщиком, проживающим в том же городе, где изготавливается это изделие.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali&lt;br /&gt;
FROM spasoi_ekz.spj SPJ, spasoi_ekz.s S, spasoi_ekz.j J&lt;br /&gt;
WHERE SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
  AND S.gorod = J.gorod&lt;br /&gt;
  AND J.nomer_izdelia = SPJ.nomer_izdelia;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_detali&lt;br /&gt;
 --------------&lt;br /&gt;
  P15&lt;br /&gt;
  P16&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 13 ===&lt;br /&gt;
&lt;br /&gt;
Написать &amp;lt;u&amp;gt;один&amp;lt;/u&amp;gt; запрос SELECT: выдать количества строк в таблице S (Поставщик) 1) с пустыми значениями и 2) непустыми значениями в столбце Состояние.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT COUNT(nomer_postavshika) - COUNT(sostoyanie) AS &amp;quot;С пустым состоянием&amp;quot;, &lt;br /&gt;
       COUNT(sostoyanie) AS &amp;quot;С не пустым состоянием&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.s;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но длиннее и нерациональней&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SELECT COUNT(Snull.*) AS &amp;quot;С пустым состоянием&amp;quot;, COUNT(Snotnull.sostoyanie) AS &amp;quot;С не пустым состоянием&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.s Snull RIGHT OUTER JOIN spasoi_ekz.s Snotnull&lt;br /&gt;
                                      ON Snull.nomer_postavshika = Snotnull.nomer_postavshika&lt;br /&gt;
                                         AND Snull.sostoyanie IS NULL;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  С пустым состоянием | С не пустым состоянием&lt;br /&gt;
 ---------------------+-----------------------&lt;br /&gt;
                    2 |                    15&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 14 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют детали только и только для изделия с номером &#039;J1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj A JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON A.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE nomer_izdelia = &#039;J1&#039;&lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT nomer_postavshika&lt;br /&gt;
                  FROM spasoi_ekz.spj&lt;br /&gt;
                  WHERE nomer_izdelia != &#039;J1&#039;&lt;br /&gt;
                    AND nomer_postavshika = A.nomer_postavshika&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       imya&lt;br /&gt;
 ----------------&lt;br /&gt;
  Томми Версетти&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 15 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать наименования изделий, для которых детали поставляют только те поставщики, у которых состояние больше 1000000 у.е.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                        JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
WHERE sostoyanie &amp;gt; 1000000&lt;br /&gt;
  AND SPJ.nomer_izdelia NOT IN (&lt;br /&gt;
                                SELECT nomer_izdelia&lt;br /&gt;
                                FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                                                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                                WHERE sostoyanie &amp;lt; 1000000&lt;br /&gt;
                               );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       nazvanie&lt;br /&gt;
 --------------------&lt;br /&gt;
  кружевное бельё&lt;br /&gt;
  уникальное изделие&lt;br /&gt;
  процессор&lt;br /&gt;
 (3 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 16 ===&lt;br /&gt;
Написать запрос SELECT: выдать цвета и для каждого цвета общее количество деталей, входящих в изделие с названием &#039;Панно 01-03&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT cvet AS &amp;quot;Цвет&amp;quot;, SUM(kolichestvo) AS &amp;quot;Деталей&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
			     AND J.nazvanie = LOWER(&#039;Панно 01-03&#039;)&lt;br /&gt;
			JOIN spasoi_ekz.P P&lt;br /&gt;
			  ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
GROUP BY cvet;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Цвет  | Деталей&lt;br /&gt;
 -------+---------&lt;br /&gt;
  белый |       9&lt;br /&gt;
  серый |       5&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 17 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера поставщиков и количество сделанных ими поставок при условии, что среднее число деталей во всех этих поставках больше 1000.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nom AS &amp;quot;Номер поставщика&amp;quot;, cnt AS &amp;quot;Количество поставок&amp;quot;&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT S.nomer_postavshika AS nom,&lt;br /&gt;
             COUNT(SPJ.nomer_postavshika) AS cnt,&lt;br /&gt;
             AVG(SPJ.kolichestvo) AS kol&lt;br /&gt;
      FROM spasoi_ekz.s S, spasoi_ekz.spj SPJ&lt;br /&gt;
      WHERE S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
      GROUP BY S.nomer_postavshika&lt;br /&gt;
     ) A&lt;br /&gt;
WHERE kol &amp;gt; 1000;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос немного попроще&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_postavshika AS &amp;quot;Номер поставщика&amp;quot;, COUNT(*) AS &amp;quot;Количество поставок&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
WHERE nomer_postavshika IN (&lt;br /&gt;
                            SELECT nomer_postavshika&lt;br /&gt;
                            FROM spasoi_ekz.spj&lt;br /&gt;
                            GROUP BY nomer_postavshika HAVING AVG(kolichestvo) &amp;gt; 1000&lt;br /&gt;
                           )&lt;br /&gt;
GROUP BY nomer_postavshika;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер поставщика | Количество поставок&lt;br /&gt;
 ------------------+---------------------&lt;br /&gt;
  S13              |                   1&lt;br /&gt;
  S6               |                   7&lt;br /&gt;
  S14              |                   1&lt;br /&gt;
  S15              |                   1&lt;br /&gt;
 (4 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 18 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, имеющих состояние больше 1000 и поставляющих деталь с названием &#039;Гайка 01-01&#039; для изделия с названием &#039;Велосипед 03-04&#039; в количестве (в поставке) большим, чем средний объём поставки, выполненной поставщиками с именем &#039;Иванов&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:2nd dufficulty.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;5px&amp;quot;&amp;gt;&#039;&#039;&#039;Второй по сложности запрос экзамена!&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;4px&amp;quot;&amp;gt;&#039;&#039;&#039;Вот уж не свезло, так не свезло&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                    JOIN spasoi_ekz.j J&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
WHERE sostoyanie &amp;gt; 1000&lt;br /&gt;
  AND P.nazvanie = LOWER(&#039;Гайка 01-01&#039;)&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Велосипед 03-04&#039;)&lt;br /&gt;
  AND kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT AVG(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                       ON SPJ.nomer_postavshika = S.nomer_postavshika &lt;br /&gt;
                     WHERE S.imya = &#039;Иванов&#039;&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Пётр&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 19 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия красных деталей, которые входят только в изделие с названием &#039;Рама 02-03&#039; в количестве, меньшем 10 единиц в поставке.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT X.nazvanie&lt;br /&gt;
FROM spasoi_ekz.p X JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_detali = X.nomer_detali&lt;br /&gt;
                    JOIN spasoi_ekz.j J&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
WHERE X.cvet = &#039;красный&#039;&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Рама 02-03&#039;)&lt;br /&gt;
  AND kolichestvo &amp;lt; 10&lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT J.nomer_izdelia&lt;br /&gt;
                  FROM spasoi_ekz.j J JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                                        ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                  WHERE J.nazvanie != LOWER(&#039;Рама 02-03&#039;)&lt;br /&gt;
                    AND X.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант этого же запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT P.nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND cvet = &#039;красный&#039;&lt;br /&gt;
                        JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                              AND J.nazvanie = LOWER(&#039;Рама 02-03&#039;)&lt;br /&gt;
WHERE kolichestvo &amp;lt; 10&lt;br /&gt;
  AND SPJ.nomer_detali NOT IN (&lt;br /&gt;
                               SELECT nomer_detali&lt;br /&gt;
                               FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                                         ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                                                            AND J.nazvanie != LOWER(&#039;Рама 02-03&#039;)&lt;br /&gt;
                              );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     nazvanie&lt;br /&gt;
 ----------------&lt;br /&gt;
  усиленная рама&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 20 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих только белые детали.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
WHERE cvet = &#039;белый&#039;&lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT nomer_postavshika&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                                            ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                  WHERE nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    AND P.cvet != &#039;белый&#039;&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё один вариант этого же запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND cvet = &#039;белый&#039;&lt;br /&gt;
                        JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE S.nomer_postavshika NOT IN (&lt;br /&gt;
                                  SELECT nomer_postavshika&lt;br /&gt;
                                  FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                                                            ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                                               AND cvet != &#039;белый&#039;&lt;br /&gt;
                                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;И ещё один вариант этого же запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s&lt;br /&gt;
WHERE nomer_postavshika NOT IN  (&lt;br /&gt;
                                 SELECT spj.nomer_postavshika&lt;br /&gt;
                                 FROM spasoi_ekz.spj SPJ, spasoi_ekz.p P&lt;br /&gt;
                                 WHERE SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                   AND p.cvet != &#039;белый&#039;&lt;br /&gt;
                                )&lt;br /&gt;
  AND nomer_postavshika  IN (&lt;br /&gt;
                             SELECT spj.nomer_postavshika&lt;br /&gt;
                             FROM spasoi_ekz.spj SPJ, spasoi_ekz.p P&lt;br /&gt;
                             WHERE SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                               AND p.cvet = &#039;белый&#039;&lt;br /&gt;
                            );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       imya&lt;br /&gt;
 -----------------&lt;br /&gt;
  Рендилл Тарли&lt;br /&gt;
  Сэмвелл Тарли&lt;br /&gt;
  Мелисса Флорент&lt;br /&gt;
  Томми Версетти&lt;br /&gt;
 (4 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 21 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия изделий, для которых детали поставляет только и только поставщик с номером &#039;S1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie&lt;br /&gt;
FROM spasoi_ekz.j J, spasoi_ekz.SPJ SPJ&lt;br /&gt;
WHERE J.nomer_izdelia = SPJ.nomer_izdelia &lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT nomer_postavshika&lt;br /&gt;
                  FROM spasoi_ekz.spj&lt;br /&gt;
                  WHERE nomer_postavshika != &#039;S1&#039;&lt;br /&gt;
                    AND nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                 );&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё один вариант запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
WHERE nomer_postavshika = &#039;S1&#039;&lt;br /&gt;
  AND SPJ.nomer_izdelia NOT IN (&lt;br /&gt;
                                SELECT nomer_izdelia&lt;br /&gt;
                                FROM spasoi_ekz.spj&lt;br /&gt;
                                WHERE nomer_postavshika != &#039;S1&#039;&lt;br /&gt;
                               );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       nazvanie&lt;br /&gt;
 --------------------&lt;br /&gt;
  уникальное изделие&lt;br /&gt;
  кружевное бельё&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 22 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют только детали с номером &#039;P1&#039; для изделия с именем &#039;Штуцер 01-02&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- неверный запрос - номер изделия, а не название&lt;br /&gt;
SELECT imya FROM S X&lt;br /&gt;
JOIN SPJ Y ON X.nomer_postavshika=Y.nomer_postavshika&lt;br /&gt;
WHERE X.nomer_postavshika NOT IN (&lt;br /&gt;
                  SELECT DISTINCT nomer_postavshika FROM SPJ Z&lt;br /&gt;
                  WHERE Z.nomer_izdelia != &#039;Штуцер 01-02&#039;&lt;br /&gt;
                  AND Z.nomer_detali!=&#039;P1&#039;);--&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                             AND J.nazvanie = LOWER(&#039;штуцер 01-02&#039;)&lt;br /&gt;
                        JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND SPJ.nomer_detali = &#039;P1&#039;&lt;br /&gt;
                        JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE SPJ.nomer_postavshika NOT IN (&lt;br /&gt;
                                    SELECT nomer_postavshika&lt;br /&gt;
                                    FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                                              ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                                                                 AND J.nazvanie = LOWER(&#039;штуцер 01-02&#039;)&lt;br /&gt;
                                                            JOIN spasoi_ekz.p P&lt;br /&gt;
                                                              ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                                                 AND SPJ.nomer_detali != &#039;P1&#039;&lt;br /&gt;
                              );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Иван&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 23 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют деталь с названием &#039;Винт&#039; в количестве большим 100 единиц в одной поставке и имеют состояние больше среднего по их родному городу.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT S.imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
WHERE P.nazvanie = LOWER(&#039;Винт&#039;)&lt;br /&gt;
  AND SPJ.kolichestvo &amp;gt; 100&lt;br /&gt;
  AND S.sostoyanie &amp;gt; (&lt;br /&gt;
                      SELECT AVG(SS.sostoyanie)&lt;br /&gt;
                      FROM spasoi_ekz.s SS&lt;br /&gt;
                      WHERE SS.gorod = S.gorod&lt;br /&gt;
                     );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Пётр&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 24 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать наименования деталей и общее их количество для всех наименований деталей, изготавливаемых в одном городе.&lt;br /&gt;
&lt;br /&gt;
С этим запросом возникла неожиданная проблема - задание то ли неполное, то ли неправильное, потому что нельзя однозначно сказать, что по нему требуется сделать.&lt;br /&gt;
&lt;br /&gt;
Так что тут несколько вариантов запросов (кто как понял).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Первый вариант запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie, kol&lt;br /&gt;
FROM spasoi_ekz.p A, (&lt;br /&gt;
                      SELECT X.gorod, SUM(kolichestvo) as kol&lt;br /&gt;
                      FROM spasoi_ekz.p X, spasoi_ekz.spj Y&lt;br /&gt;
                      WHERE Y.nomer_detali = X.nomer_detali&lt;br /&gt;
                      GROUP BY X.gorod&lt;br /&gt;
                     ) B&lt;br /&gt;
WHERE A.gorod = B.gorod;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
        nazvanie       | kol&lt;br /&gt;
 ----------------------+------&lt;br /&gt;
  подставка            |    9&lt;br /&gt;
  стойка               |    9&lt;br /&gt;
  абажур               |    9&lt;br /&gt;
  гайка                |  139&lt;br /&gt;
  ось                  |   60&lt;br /&gt;
  зубчатое колесо      |   60&lt;br /&gt;
  транзистор           |   50&lt;br /&gt;
  печатная плата       |   50&lt;br /&gt;
  диод                 |   50&lt;br /&gt;
  универсальная деталь |   13&lt;br /&gt;
  уникальная деталь    |   14&lt;br /&gt;
  болт                 | 9137&lt;br /&gt;
  рама                 |   69&lt;br /&gt;
  колесо               |   69&lt;br /&gt;
  втулка               |   69&lt;br /&gt;
  бумага               | 3122&lt;br /&gt;
  плитка               |   14&lt;br /&gt;
  орнамент             |   14&lt;br /&gt;
  уголок               |   14&lt;br /&gt;
  гайка 01-01          |   27&lt;br /&gt;
  усиленная рама       |   10&lt;br /&gt;
  винт                 | 9137&lt;br /&gt;
  труселя              |    1&lt;br /&gt;
  штуцерная деталь     |   10&lt;br /&gt;
  шуруп                |  139&lt;br /&gt;
 (25 rows)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
и&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Второй вариант запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
В уточнение задания Григорьев сказал следующее: &amp;quot;&#039;&#039;Следует учесть, что в качестве наименования города может выступать переменная, в которую в некоторой программе должно быть занесено конкретное значение перед выполнением запроса&#039;&#039;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
То есть, вообще говоря, задание на запрос неполное, и его можно трактовать так: выдать наименования деталей и общее их количество для всех наименований деталей, изготавливаемых в городе &amp;lt;code&amp;gt;%НАЗВАНИЕГОРОДА%&amp;lt;/code&amp;gt;. Вот эта переменная задаётся где-то в программе, а в БД идёт запрос с уже подставленным конкретным названием. &lt;br /&gt;
&lt;br /&gt;
Этот вариант запроса составлен, например, для Лондона. &lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie, SUM(kolichestvo)&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
WHERE gorod = &#039;Лондон&#039;&lt;br /&gt;
GROUP BY nazvanie;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nazvanie | sum&lt;br /&gt;
 ----------+-----&lt;br /&gt;
  гайка    |  71&lt;br /&gt;
  шуруп    |  68&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Билет 25 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих хотя бы одну белую деталь для изделия с названием &#039;Велосипед 01-04&#039; с объёмом поставки большим, чем средний объём поставки этого поставщика.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                    JOIN spasoi_ekz.j J&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
WHERE cvet = &#039;белый&#039;&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Велосипед 01-04&#039;)&lt;br /&gt;
  AND kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT AVG(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj SPJ&lt;br /&gt;
                     WHERE SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Пётр&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 26 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера красных деталей и количество поставок этих деталей.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT P.nomer_detali AS &amp;quot;Номер детали&amp;quot;, COUNT(kolichestvo) AS &amp;quot;Количество поставок с ней&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.p P, spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
  AND cvet = &#039;красный&#039;&lt;br /&gt;
GROUP BY P.nomer_detali;   &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос через JOIN&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT SPJ.nomer_detali AS &amp;quot;Номер детали&amp;quot;, COUNT(kolichestvo) AS &amp;quot;Количество поставок с ней&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND cvet = &#039;красный&#039;&lt;br /&gt;
GROUP BY SPJ.nomer_detali;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер детали | Количество поставок с ней&lt;br /&gt;
 --------------+---------------------------&lt;br /&gt;
  P15          |                         3&lt;br /&gt;
  P22          |                         1&lt;br /&gt;
  P24          |                         1&lt;br /&gt;
 (3 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 27 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать наименования городов и среднее состояние поставщиков для каждого города, поставляющих детали с названием &#039;Гайка 01-01&#039; для изделия с названием &#039;Велосипед 03-04&#039; в количестве (в поставке) большим, чем минимальный объём поставки, выполненной поставщиком с номером &#039;S1&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:1st dufficulty.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;7px&amp;quot;&amp;gt;&#039;&#039;&#039;Сложнейший запрос экзамена!&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;5px&amp;quot;&amp;gt;&#039;&#039;&#039;Сохрани Джа, вытащить такое&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT S.gorod AS &amp;quot;Город&amp;quot;, AVG(S.sostoyanie) AS &amp;quot;Среднее состояние&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                    JOIN spasoi_ekz.j J&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
WHERE P.nazvanie = LOWER(&#039;Гайка 01-01&#039;)&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Велосипед 03-04&#039;)&lt;br /&gt;
  AND kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT MIN(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj&lt;br /&gt;
                     WHERE nomer_postavshika = &#039;S1&#039;&lt;br /&gt;
                    )&lt;br /&gt;
GROUP BY S.gorod;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
    Город   |   Среднее состояние&lt;br /&gt;
 -----------+-----------------------&lt;br /&gt;
  Мытищи    |    35000.500000000000&lt;br /&gt;
  Йокогама  |  1500000.000000000000&lt;br /&gt;
  Манчестер | 2571.0000000000000000&lt;br /&gt;
 (3 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 28 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия изделий, куда входит хотя бы одна красная деталь весом больше 10 граммов, поставляемая только поставщиком с номером &#039;S1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT J.nazvanie&lt;br /&gt;
FROM spasoi_ekz.j J JOIN spasoi_ekz.spj SPJ1&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ1.nomer_izdelia&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ1.nomer_detali&lt;br /&gt;
WHERE P.ves &amp;gt; 10&lt;br /&gt;
 AND P.cvet = &#039;красный&#039;&lt;br /&gt;
 AND NOT EXISTS (&lt;br /&gt;
                 SELECT SPJ2.nomer_postavshika&lt;br /&gt;
                 FROM spasoi_ekz.spj SPJ2         &lt;br /&gt;
                 WHERE SPJ2.nomer_detali = P.nomer_detali&lt;br /&gt;
	 	   AND SPJ2.nomer_postavshika != &#039;S1&#039;&lt;br /&gt;
                );                     &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     nazvanie&lt;br /&gt;
 -----------------&lt;br /&gt;
  кружевное бельё&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 29 ===&lt;br /&gt;
Написать запрос SELECT: выдать названия деталей, которые входят только и только в состав изделия с названием &#039;Штуцер 01-03&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie&lt;br /&gt;
FROM spasoi_ekz.p P, spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE P.nomer_detali = SPJ.nomer_detali &lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT SPJ.nomer_izdelia&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                            ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
                  WHERE J.nazvanie != LOWER(&#039;Штуцер 01-03&#039;)&lt;br /&gt;
                    AND SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
      nazvanie&lt;br /&gt;
 ------------------&lt;br /&gt;
  штуцерная деталь&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 30 ===&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют, по крайней мере, все те детали, которые поставляет поставщик с номером &#039;S2&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT imya&lt;br /&gt;
FROM spasoi_ekz.s S&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT nomer_detali&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJY&lt;br /&gt;
                  WHERE nomer_postavshika = &#039;S2&#039;&lt;br /&gt;
                    AND NOT EXISTS (&lt;br /&gt;
                                    SELECT *&lt;br /&gt;
                                    FROM spasoi_ekz.spj&lt;br /&gt;
                                    WHERE nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                                      AND nomer_detali = SPJY.nomer_detali&lt;br /&gt;
                                   )&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  imya&lt;br /&gt;
 ------------&lt;br /&gt;
  Оша&lt;br /&gt;
  Бран Старк&lt;br /&gt;
 (2 rows)&lt;br /&gt;
[[Категория:Структурное проектирование АСОИ (10 семестр)]]&lt;/div&gt;</summary>
		<author><name>81.9.52.28</name></author>
	</entry>
	<entry>
		<id>https://iu5bmstu.ru/index.php?title=SQL-%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D1%8B_%D0%BA_%D1%8D%D0%BA%D0%B7%D0%B0%D0%BC%D0%B5%D0%BD%D1%83_%D0%BF%D0%BE_%D0%A1%D0%9F%D0%90%D0%A1%D0%9E%D0%98_(10_%D1%81%D0%B5%D0%BC%D0%B5%D1%81%D1%82%D1%80)&amp;diff=3813</id>
		<title>SQL-запросы к экзамену по СПАСОИ (10 семестр)</title>
		<link rel="alternate" type="text/html" href="https://iu5bmstu.ru/index.php?title=SQL-%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D1%8B_%D0%BA_%D1%8D%D0%BA%D0%B7%D0%B0%D0%BC%D0%B5%D0%BD%D1%83_%D0%BF%D0%BE_%D0%A1%D0%9F%D0%90%D0%A1%D0%9E%D0%98_(10_%D1%81%D0%B5%D0%BC%D0%B5%D1%81%D1%82%D1%80)&amp;diff=3813"/>
		<updated>2013-06-14T19:26:17Z</updated>

		<summary type="html">&lt;p&gt;81.9.52.28: /* Билет 4 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right; clear:both; margin-right:1.0em;&amp;quot;&amp;gt;__TOC__&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Билет экзамена по [[:Категория:Структурное проектирование АСОИ (10 семестр) | СПАСОИ]] состоит из двух частей:&lt;br /&gt;
# теория;&lt;br /&gt;
# SQL-запрос.&lt;br /&gt;
&lt;br /&gt;
На этой странице собраны все сформированные запросы по билетам.&lt;br /&gt;
&lt;br /&gt;
Странно, что ни в одном билете нет запроса с сортировкой результатов. Возможно, они буду в дополнительных заданиях.&lt;br /&gt;
&lt;br /&gt;
== Схема БД ==&lt;br /&gt;
&lt;br /&gt;
Схема БД используется всё [[СПАСОИ_(10)_-_Лекция_№8_-_SQL#Некоторые возможности языка SQL | та же]], что была в прошлом семестре и на лекциях.&lt;br /&gt;
&lt;br /&gt;
Для написания запросов и проверки их выполнения создана БД в СУБД [http://www.postgresql.org/ PostgreSQL].&lt;br /&gt;
&lt;br /&gt;
Скрипт создания можно загрузить [http://yadi.sk/d/MmOgbWnr5cATO отсюда].&lt;br /&gt;
&lt;br /&gt;
=== Таблицы БД ===&lt;br /&gt;
&lt;br /&gt;
==== Поставщики ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.s;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika |       imya       | sostoyanie |   gorod&lt;br /&gt;
 -------------------+------------------+------------+------------&lt;br /&gt;
  S5                | Мелисандра       |      65000 | Мадрид&lt;br /&gt;
  S2                | Бран Старк       |      60000 | Мурманск&lt;br /&gt;
  S1                | Якен Хгар        |    1500000 | Йокогама&lt;br /&gt;
  S7                | Сирио Форель     |    1500000 | Йокогама&lt;br /&gt;
  S4                | Джейме Ланнистер |     750000 | Лондон&lt;br /&gt;
  S3                | Серсея Ланнистер |    1200000 | Лондон&lt;br /&gt;
  S8                | Тирион Ланнистер |       2571 | Манчестер&lt;br /&gt;
  S9                | Иванов           |      35000 | Мытищи&lt;br /&gt;
  S10               | Русе Болтон      |      44444 | Баренцбург&lt;br /&gt;
  S11               | Петров Иван      |      35000 | Мытищи&lt;br /&gt;
  S14               | Рендилл Тарли    |    1111111 | Прага&lt;br /&gt;
  S13               | Сэмвелл Тарли    |     999999 | Прага&lt;br /&gt;
  S6                | Оша              |            | Москва&lt;br /&gt;
  S16               | Ходор            |            | Москва&lt;br /&gt;
  S15               | Мелисса Флорент  |     888888 | Стокгольм&lt;br /&gt;
  S12               | Петров Пётр      |      35001 | Мытищи&lt;br /&gt;
  S17               | Томми Версетти   |  123456789 | Майами&lt;br /&gt;
 (17 rows)&lt;br /&gt;
&lt;br /&gt;
==== Детали ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.p;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_detali |       nazvanie       |     cvet      | ves  |      gorod&lt;br /&gt;
 --------------+----------------------+---------------+------+-----------------&lt;br /&gt;
  P9           | подставка            | синий         |  400 | Нижний Новгород&lt;br /&gt;
  P10          | стойка               | синий         | 2000 | Нижний Новгород&lt;br /&gt;
  P11          | абажур               | синий         |  400 | Нижний Новгород&lt;br /&gt;
  P1           | гайка                | чёрный        |   20 | Лондон&lt;br /&gt;
  P3           | ось                  | белый         | 5000 | Эдинбург&lt;br /&gt;
  P4           | зубчатое колесо      | чёрный        |   50 | Эдинбург&lt;br /&gt;
  P6           | транзистор           | коричневый    |    2 | Токио&lt;br /&gt;
  P7           | печатная плата       | зелёный       |  200 | Токио&lt;br /&gt;
  P8           | диод                 | коричневый    |    1 | Токио&lt;br /&gt;
  P12          | универсальная деталь | универсальный |    1 | Париж&lt;br /&gt;
  P13          | уникальная деталь    | уникальный    |    1 | Бостон&lt;br /&gt;
  P14          | болт                 | серый         |   20 | Ижевск&lt;br /&gt;
  P15          | рама                 | красный       | 3000 | Манчестер&lt;br /&gt;
  P16          | колесо               | белый         | 1500 | Манчестер&lt;br /&gt;
  P5           | втулка               | серый         |  350 | Манчестер&lt;br /&gt;
  P17          | бумага               | белый         |    1 | Астрахань&lt;br /&gt;
  P18          | плитка               | белый         |  300 | Флоренция&lt;br /&gt;
  P19          | орнамент             | серый         |  800 | Флоренция&lt;br /&gt;
  P20          | уголок               | серый         |  100 | Флоренция&lt;br /&gt;
  P21          | гайка 01-01          | серебристый   |   20 | Клин&lt;br /&gt;
  P22          | усиленная рама       | красный       | 3200 | Череповец&lt;br /&gt;
  P23          | винт                 | розовый       |    5 | Ижевск&lt;br /&gt;
  P24          | труселя              | красный       |   20 | Челябинск&lt;br /&gt;
  P25          | штуцерная деталь     | коричневый    |  450 | Череповец&lt;br /&gt;
  P2           | шуруп                | чёрный        |    5 | Лондон&lt;br /&gt;
 (25 rows)&lt;br /&gt;
&lt;br /&gt;
==== Изделия ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.j;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_izdelia |       nazvanie        |      gorod&lt;br /&gt;
 ---------------+-----------------------+-----------------&lt;br /&gt;
  J1            | автомобиль            | Магнитогорск&lt;br /&gt;
  J2            | процессор             | Зеленоград&lt;br /&gt;
  J3            | торшер                | Нижний Новгород&lt;br /&gt;
  J4            | универсальное изделие | Париж&lt;br /&gt;
  J5            | уникальное изделие    | Бостон&lt;br /&gt;
  J6            | велосипед 01/23       | Манчестер&lt;br /&gt;
  J7            | изделие из болтов     | Челябинск&lt;br /&gt;
  J8            | шкаф                  | Ярославль&lt;br /&gt;
  J9            | рама 02-01            | Череповец&lt;br /&gt;
  J10           | книга                 | Астрахань&lt;br /&gt;
  J11           | панно 01-03           | Флоренция&lt;br /&gt;
  J12           | велосипед 03-04       | Клин&lt;br /&gt;
  J13           | рама 02-03            | Череповец&lt;br /&gt;
  J14           | штуцер 01-02          | Череповец&lt;br /&gt;
  J15           | велосипед 01-04       | Клин&lt;br /&gt;
  J16           | кружевное бельё       | Челябинск&lt;br /&gt;
  J17           | штуцер 01-03          | Череповец&lt;br /&gt;
 (17 rows)&lt;br /&gt;
&lt;br /&gt;
==== Сборки ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM spasoi_ekz.spj;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika | nomer_detali | nomer_izdelia | kolichestvo&lt;br /&gt;
 -------------------+--------------+---------------+-------------&lt;br /&gt;
  S1                | P6           | J2            |          20&lt;br /&gt;
  S1                | P7           | J2            |           5&lt;br /&gt;
  S2                | P1           | J1            |           4&lt;br /&gt;
  S6                | P4           | J1            |           2&lt;br /&gt;
  S6                | P5           | J1            |           6&lt;br /&gt;
  S3                | P9           | J3            |           1&lt;br /&gt;
  S4                | P10          | J3            |           1&lt;br /&gt;
  S5                | P11          | J3            |           1&lt;br /&gt;
  S2                | P4           | J1            |           8&lt;br /&gt;
  S6                | P3           | J1            |          50&lt;br /&gt;
  S7                | P8           | J2            |          25&lt;br /&gt;
  S1                | P12          | J4            |           1&lt;br /&gt;
  S2                | P12          | J4            |           1&lt;br /&gt;
  S3                | P12          | J4            |           1&lt;br /&gt;
  S4                | P12          | J4            |           1&lt;br /&gt;
  S5                | P12          | J4            |           1&lt;br /&gt;
  S7                | P12          | J4            |           1&lt;br /&gt;
  S7                | P2           | J1            |           1&lt;br /&gt;
  S6                | P2           | J1            |           9&lt;br /&gt;
  S6                | P12          | J4            |           7&lt;br /&gt;
  S1                | P13          | J5            |          14&lt;br /&gt;
  S6                | P14          | J1            |        9000&lt;br /&gt;
  S2                | P14          | J1            |           3&lt;br /&gt;
  S6                | P1           | J1            |          12&lt;br /&gt;
  S8                | P15          | J6            |           1&lt;br /&gt;
  S8                | P16          | J6            |           2&lt;br /&gt;
  S3                | P5           | J6            |          10&lt;br /&gt;
  S10               | P2           | J8            |           4&lt;br /&gt;
  S8                | P1           | J7            |          16&lt;br /&gt;
  S9                | P14          | J7            |           3&lt;br /&gt;
  S11               | P10          | J3            |           2&lt;br /&gt;
  S12               | P15          | J1            |           3&lt;br /&gt;
  S11               | P11          | J3            |           4&lt;br /&gt;
  S10               | P14          | J9            |           5&lt;br /&gt;
  S13               | P17          | J10           |        1001&lt;br /&gt;
  S14               | P17          | J10           |        1111&lt;br /&gt;
  S15               | P17          | J10           |        1010&lt;br /&gt;
  S5                | P18          | J11           |           9&lt;br /&gt;
  S5                | P19          | J11           |           1&lt;br /&gt;
  S5                | P20          | J11           |           4&lt;br /&gt;
  S9                | P14          | J8            |          25&lt;br /&gt;
  S12               | P21          | J12           |          15&lt;br /&gt;
  S11               | P22          | J13           |           9&lt;br /&gt;
  S11               | P1           | J14           |          26&lt;br /&gt;
  S12               | P1           | J14           |          13&lt;br /&gt;
  S12               | P2           | J14           |          54&lt;br /&gt;
  S12               | P23          | J4            |         101&lt;br /&gt;
  S12               | P16          | J15           |          40&lt;br /&gt;
  S7                | P21          | J12           |           3&lt;br /&gt;
  S8                | P21          | J12           |           4&lt;br /&gt;
  S9                | P21          | J12           |           5&lt;br /&gt;
  S1                | P24          | J16           |           1&lt;br /&gt;
  S1                | P15          | J6            |           3&lt;br /&gt;
  S4                | P25          | J17           |           1&lt;br /&gt;
  S17               | P16          | J1            |           4&lt;br /&gt;
 (55 rows)&lt;br /&gt;
&lt;br /&gt;
== Готовые запросы ==&lt;br /&gt;
&lt;br /&gt;
Если видите, что тот или иной запрос можно составить короче и рациональней - смело вносите правку.&lt;br /&gt;
&lt;br /&gt;
=== Билет 1 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера поставщиков, которые поставляют, по крайней мере, все те детали, которые поставляет поставщик с номером &#039;S2&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nomer_postavshika&lt;br /&gt;
FROM spasoi_ekz.spj SPJX&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT nomer_detali&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJY&lt;br /&gt;
                  WHERE nomer_postavshika = &#039;S2&#039;&lt;br /&gt;
                    AND NOT EXISTS (&lt;br /&gt;
                                    SELECT *&lt;br /&gt;
                                    FROM spasoi_ekz.spj&lt;br /&gt;
                                    WHERE nomer_postavshika = SPJX.nomer_postavshika&lt;br /&gt;
                                      AND nomer_detali = SPJY.nomer_detali&lt;br /&gt;
                                   )&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika&lt;br /&gt;
 -------------------&lt;br /&gt;
  S6&lt;br /&gt;
  S2&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 2 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера деталей и общее их количество для всех номеров деталей, поставляемых более чем одним поставщиком.&lt;br /&gt;
&lt;br /&gt;
Текст запроса, каким его дал Григорьев на лекции, впоследствии исправив его:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali AS &amp;quot;Номер детали&amp;quot;,&lt;br /&gt;
       SUM(kolichestvo) AS &amp;quot;Сколько штук поставляется&amp;quot;,&lt;br /&gt;
       COUNT(DISTINCT nomer_postavshika) AS &amp;quot;Сколько у неё поставщиков&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_postavshika) &amp;gt; 1;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali AS &amp;quot;Номер детали&amp;quot;,&lt;br /&gt;
       kol AS &amp;quot;Сколько штук поставляется&amp;quot;&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT nomer_detali,&lt;br /&gt;
             SUM(kolichestvo) AS kol,&lt;br /&gt;
             COUNT(DISTINCT nomer_postavshika)&lt;br /&gt;
      FROM spasoi_ekz.spj&lt;br /&gt;
      GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_postavshika) &amp;gt; 1&lt;br /&gt;
     ) A;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер детали | Сколько штук поставляется | Сколько у неё поставщиков&lt;br /&gt;
 --------------+---------------------------+---------------------------&lt;br /&gt;
  P1           |                        71 |                         5&lt;br /&gt;
  P10          |                         3 |                         2&lt;br /&gt;
  P11          |                         5 |                         2&lt;br /&gt;
  P12          |                        13 |                         7&lt;br /&gt;
  P14          |                      9036 |                         4&lt;br /&gt;
  P15          |                         7 |                         3&lt;br /&gt;
  P16          |                        46 |                         3&lt;br /&gt;
  P17          |                      3122 |                         3&lt;br /&gt;
  P2           |                        68 |                         4&lt;br /&gt;
  P21          |                        27 |                         4&lt;br /&gt;
  P4           |                        10 |                         2&lt;br /&gt;
  P5           |                        16 |                         2&lt;br /&gt;
 (12 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 3 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера поставщиков, поставляющих детали с номером &#039;P1&#039; для какого-либо изделия в количестве (в поставке) большим, чем средний объём поставок деталей с номером &#039;P2&#039; для этого изделия.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT X.nomer_postavshika &lt;br /&gt;
FROM spasoi_ekz.spj X&lt;br /&gt;
WHERE X.nomer_detali = &#039;P1&#039;&lt;br /&gt;
  AND X.kolichestvo &amp;gt; (&lt;br /&gt;
                       SELECT AVG(kolichestvo)&lt;br /&gt;
                       FROM spasoi_ekz.spj&lt;br /&gt;
                       WHERE nomer_izdelia = X.nomer_izdelia&lt;br /&gt;
                         AND nomer_detali = &#039;P2&#039;&lt;br /&gt;
                      );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но длиннее и нерациональней&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nomer_postavshika&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT *&lt;br /&gt;
      FROM spasoi_ekz.spj&lt;br /&gt;
      WHERE nomer_izdelia IN(&lt;br /&gt;
                             SELECT nomer_izdelia&lt;br /&gt;
                             FROM spasoi_ekz.spj&lt;br /&gt;
                             WHERE nomer_detali = &#039;P1&#039;&lt;br /&gt;
                            )&lt;br /&gt;
        AND nomer_izdelia IN(&lt;br /&gt;
	                     SELECT nomer_izdelia&lt;br /&gt;
	                     FROM spasoi_ekz.spj&lt;br /&gt;
	                     WHERE nomer_detali = &#039;P2&#039;&lt;br /&gt;
	                    )&lt;br /&gt;
     ) A&lt;br /&gt;
WHERE nomer_detali = &#039;P1&#039; AND kolichestvo &amp;gt;&lt;br /&gt;
(&lt;br /&gt;
 SELECT AVG(kolichestvo)&lt;br /&gt;
 FROM (&lt;br /&gt;
       SELECT *&lt;br /&gt;
       FROM spasoi_ekz.spj&lt;br /&gt;
       WHERE nomer_izdelia IN(&lt;br /&gt;
                              SELECT nomer_izdelia&lt;br /&gt;
                              FROM spasoi_ekz.spj&lt;br /&gt;
                              WHERE nomer_detali = &#039;P1&#039;&lt;br /&gt;
                             )&lt;br /&gt;
         AND nomer_izdelia IN(&lt;br /&gt;
                              SELECT nomer_izdelia&lt;br /&gt;
                              FROM spasoi_ekz.spj&lt;br /&gt;
                              WHERE nomer_detali = &#039;P2&#039;&lt;br /&gt;
                             )&lt;br /&gt;
      ) B&lt;br /&gt;
 WHERE nomer_detali = &#039;P2&#039;&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_postavshika&lt;br /&gt;
 -------------------&lt;br /&gt;
  S6&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 4 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера изделий, для которых детали поставляет только поставщик с номером ‘S1’.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT X.nomer_izdeliaFROM spasoi_ekz.spj XWHERE not exists 	(		SELECT *		FROM spasoi_ekz.spj 		WHERE nomer_postavshika != &#039;S1&#039; AND		X.nomer_izdelia = nomer_izdelia	);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nomer_izdelia&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
WHERE nomer_izdelia IN(&lt;br /&gt;
                       SELECT nomer_izdelia&lt;br /&gt;
                       FROM spasoi_ekz.spj&lt;br /&gt;
                       WHERE nomer_postavshika = &#039;S1&#039;&lt;br /&gt;
                      )&lt;br /&gt;
  AND nomer_izdelia NOT IN(&lt;br /&gt;
                           SELECT nomer_izdelia&lt;br /&gt;
                           FROM spasoi_ekz.spj&lt;br /&gt;
                           WHERE nomer_postavshika != &#039;S1&#039;&lt;br /&gt;
                          );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_izdelia&lt;br /&gt;
 ---------------&lt;br /&gt;
  J5&lt;br /&gt;
  J16&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 5 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих детали с названием &amp;quot;Болт&amp;quot; в количестве (в поставке) большим, чем средний объём всех поставок деталей с номером &#039;P1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                           ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                        JOIN spasoi_ekz.p P&lt;br /&gt;
                           ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                              AND nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
WHERE kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT AVG(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                                               ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                                  AND SPJ.nomer_detali = &#039;P1&#039;&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но без JOIN&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s&lt;br /&gt;
WHERE nomer_postavshika IN (&lt;br /&gt;
                            SELECT nomer_postavshika&lt;br /&gt;
                            FROM spasoi_ekz.spj&lt;br /&gt;
                            WHERE nomer_detali = (&lt;br /&gt;
                                                  SELECT nomer_detali&lt;br /&gt;
                                                  FROM spasoi_ekz.p&lt;br /&gt;
                                                  WHERE LOWER(nazvanie) = LOWER(&#039;Болт&#039;)&lt;br /&gt;
                                                 )&lt;br /&gt;
                              AND kolichestvo &amp;gt; (&lt;br /&gt;
                                                 SELECT AVG(kolichestvo)&lt;br /&gt;
                                                 FROM spasoi_ekz.spj&lt;br /&gt;
                                                 WHERE nomer_detali = &#039;P1&#039;&lt;br /&gt;
                                                )&lt;br /&gt;
                           );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  imya&lt;br /&gt;
 ------&lt;br /&gt;
  Оша&lt;br /&gt;
  Иванов&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 6 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия деталей, поставляемых поставщиком, проживающим в том же городе, где изготавливаются эти детали, для изделия с названием ‘Велосипед 01/23’.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nazvanie&lt;br /&gt;
FROM spasoi_ekz.S S, spasoi_ekz.p P, spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE S.gorod = P.gorod&lt;br /&gt;
  AND P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
  AND S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
  AND nomer_izdelia = (&lt;br /&gt;
                       SELECT nomer_izdelia&lt;br /&gt;
                       FROM spasoi_ekz.j&lt;br /&gt;
                       WHERE nazvanie = LOWER(&#039;Велосипед 01/23&#039;)&lt;br /&gt;
                      );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nazvanie&lt;br /&gt;
 ----------&lt;br /&gt;
  рама&lt;br /&gt;
  колесо&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 7 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия изделий, куда входят детали с названием &#039;Болт&#039;, поставляемых поставщиками с именем &#039;Иванов&#039;, в количестве (в поставке) большим, чем средний объём поставок для этого изделия.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie&lt;br /&gt;
FROM spasoi_ekz.j&lt;br /&gt;
WHERE nomer_izdelia IN (&lt;br /&gt;
                        SELECT nomer_izdelia&lt;br /&gt;
                        FROM (spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                                                   ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                                                      AND imya = &#039;Иванов&#039;&lt;br /&gt;
                                                 JOIN spasoi_ekz.p P&lt;br /&gt;
                                                   ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                                      AND nazvanie = LOWER(&#039;Болт&#039;)) A&lt;br /&gt;
                        WHERE kolichestvo &amp;gt; (&lt;br /&gt;
                                             SELECT AVG(kolichestvo)&lt;br /&gt;
                                             FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                                                       ON SPJ.nomer_izdelia = A.nomer_izdelia&lt;br /&gt;
                                            )&lt;br /&gt;
                       );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но длиннее и нерациональней&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT J.nazvanie, kolichestvo&lt;br /&gt;
      FROM spasoi_ekz.s S, spasoi_ekz.p P, spasoi_ekz.j J, spasoi_ekz.spj SPJ&lt;br /&gt;
      WHERE J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
        AND P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
        AND P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
        AND S.imya = &#039;Иванов&#039;&lt;br /&gt;
        AND S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
     ) A&lt;br /&gt;
WHERE kolichestvo &amp;gt;&lt;br /&gt;
(&lt;br /&gt;
 SELECT AVG(kolichestvo)&lt;br /&gt;
 FROM spasoi_ekz.spj&lt;br /&gt;
 WHERE nomer_izdelia IN(&lt;br /&gt;
                        SELECT J.nomer_izdelia&lt;br /&gt;
                        FROM spasoi_ekz.s S, spasoi_ekz.p P, spasoi_ekz.j J, spasoi_ekz.spj SPJ&lt;br /&gt;
                        WHERE J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
                          AND P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                          AND P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
                          AND S.imya = &#039;Иванов&#039;&lt;br /&gt;
                          AND S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
                       )&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
      nazvanie&lt;br /&gt;
 -------------------&lt;br /&gt;
  шкаф&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 8 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера изделий и общее количество деталей для них, поставляемых поставщиками с именем &#039;Петров&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_izdelia AS &amp;quot;Номер изделия&amp;quot;, SUM(kolichestvo) AS &amp;quot;Количество деталей&amp;quot; &lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                             -- так как &amp;quot;поставщикАМИ&amp;quot; и возможны&lt;br /&gt;
                             -- Иван Петров и Петров Иван, то LIKE %Петров%&lt;br /&gt;
                             AND imya LIKE &#039;%Петров%&#039;&lt;br /&gt;
GROUP BY nomer_izdelia;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер изделия | Количество деталей&lt;br /&gt;
 ---------------+--------------------&lt;br /&gt;
  J4            |                101&lt;br /&gt;
  J3            |                  6&lt;br /&gt;
  J13           |                  9&lt;br /&gt;
  J15           |                 40&lt;br /&gt;
  J1            |                  3&lt;br /&gt;
  J12           |                 15&lt;br /&gt;
  J14           |                 93&lt;br /&gt;
 (7 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 9 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера деталей и общее их количество для всех номеров деталей, которые входят только в одно изделие.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali, SUM(kolichestvo)&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_izdelia) = 1;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali, kol FROM (&lt;br /&gt;
       SELECT nomer_detali, SUM(kolichestvo) AS kol, COUNT(DISTINCT nomer_izdelia) = 1&lt;br /&gt;
       FROM spasoi_ekz.spj&lt;br /&gt;
       GROUP BY nomer_detali HAVING COUNT(DISTINCT nomer_izdelia) = 1&lt;br /&gt;
    ) A;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_detali | sum&lt;br /&gt;
 --------------+------&lt;br /&gt;
  P10          |    3&lt;br /&gt;
  P11          |    5&lt;br /&gt;
  P12          |   13&lt;br /&gt;
  P13          |   14&lt;br /&gt;
  P17          | 3122&lt;br /&gt;
  P18          |    9&lt;br /&gt;
  P19          |    1&lt;br /&gt;
  P20          |    4&lt;br /&gt;
  P21          |   27&lt;br /&gt;
  P22          |    9&lt;br /&gt;
  P23          |  101&lt;br /&gt;
  P24          |    1&lt;br /&gt;
  P25          |    1&lt;br /&gt;
  P3           |   50&lt;br /&gt;
  P4           |   10&lt;br /&gt;
  P6           |   20&lt;br /&gt;
  P7           |    5&lt;br /&gt;
  P8           |   25&lt;br /&gt;
  P9           |    1&lt;br /&gt;
 (19 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 10 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих детали с названием &#039;Болт&#039; для изделия с названием &#039;Рама 02-01&#039; в количестве (в поставке) большим, чем минимальное значение поставки детали с номером &#039;P1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
			   ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
			      AND J.nazvanie = LOWER(&#039;Рама 02-01&#039;)&lt;br /&gt;
			 JOIN spasoi_ekz.p P&lt;br /&gt;
			   ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
			      AND P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
			 JOIN spasoi_ekz.s S&lt;br /&gt;
			   ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE kolichestvo &amp;gt; (&lt;br /&gt;
		     SELECT MIN(kolichestvo)&lt;br /&gt;
		     FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
					       ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
					          AND P.nomer_detali = &#039;P1&#039;&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Русе Болтон&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 11 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия городов и суммарное состояние проживающих в каждом городе поставщиков, у которых минимальный объём поставки деталей больше 1000.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT gorod, SUM(sostoyanie)&lt;br /&gt;
FROM spasoi_ekz.s&lt;br /&gt;
WHERE nomer_postavshika IN (&lt;br /&gt;
                            SELECT nomer_postavshika&lt;br /&gt;
                            FROM spasoi_ekz.spj&lt;br /&gt;
                            GROUP BY nomer_postavshika HAVING MIN(kolichestvo) &amp;gt; 1000&lt;br /&gt;
                           )&lt;br /&gt;
GROUP BY gorod;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;!-- этот запрос выполняет не совсем то и не правильно&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT gorod, sost&lt;br /&gt;
FROM (&lt;br /&gt;
SELECT gorod, SUM(sostoyanie) AS sost, SUM(SPJ.kolichestvo)&lt;br /&gt;
FROM spasoi_ekz.spj, spasoi_ekz.s&lt;br /&gt;
WHERE S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
GROUP BY S.gorod HAVING SUM(SPJ.kolichestvo) &amp;gt; 1000&lt;br /&gt;
) A;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; --&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
    gorod   |   sum&lt;br /&gt;
 -----------+---------&lt;br /&gt;
  Прага     | 2111110&lt;br /&gt;
  Стокгольм |  888888&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 12 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера деталей, поставляемых для какого-либо изделия поставщиком, проживающим в том же городе, где изготавливается это изделие.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_detali&lt;br /&gt;
FROM spasoi_ekz.spj SPJ, spasoi_ekz.s S, spasoi_ekz.j J&lt;br /&gt;
WHERE SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
  AND S.gorod = J.gorod&lt;br /&gt;
  AND J.nomer_izdelia = SPJ.nomer_izdelia;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nomer_detali&lt;br /&gt;
 --------------&lt;br /&gt;
  P15&lt;br /&gt;
  P16&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 13 ===&lt;br /&gt;
&lt;br /&gt;
Написать &amp;lt;u&amp;gt;один&amp;lt;/u&amp;gt; запрос SELECT: выдать количества строк в таблице S (Поставщик) 1) с пустыми значениями и 2) непустыми значениями в столбце Состояние.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT COUNT(nomer_postavshika) - COUNT(sostoyanie) AS &amp;quot;С пустым состоянием&amp;quot;, &lt;br /&gt;
       COUNT(sostoyanie) AS &amp;quot;С не пустым состоянием&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.s;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос, но длиннее и нерациональней&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SELECT COUNT(Snull.*) AS &amp;quot;С пустым состоянием&amp;quot;, COUNT(Snotnull.sostoyanie) AS &amp;quot;С не пустым состоянием&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.s Snull RIGHT OUTER JOIN spasoi_ekz.s Snotnull&lt;br /&gt;
                                      ON Snull.nomer_postavshika = Snotnull.nomer_postavshika&lt;br /&gt;
                                         AND Snull.sostoyanie IS NULL;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  С пустым состоянием | С не пустым состоянием&lt;br /&gt;
 ---------------------+-----------------------&lt;br /&gt;
                    2 |                    15&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 14 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют детали только и только для изделия с номером &#039;J1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj A JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON A.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE nomer_izdelia = &#039;J1&#039;&lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT nomer_postavshika&lt;br /&gt;
                  FROM spasoi_ekz.spj&lt;br /&gt;
                  WHERE nomer_izdelia != &#039;J1&#039;&lt;br /&gt;
                    AND nomer_postavshika = A.nomer_postavshika&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       imya&lt;br /&gt;
 ----------------&lt;br /&gt;
  Томми Версетти&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 15 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать наименования изделий, для которых детали поставляют только те поставщики, у которых состояние больше 1000000 у.е.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                        JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
WHERE sostoyanie &amp;gt; 1000000&lt;br /&gt;
  AND SPJ.nomer_izdelia NOT IN (&lt;br /&gt;
                                SELECT nomer_izdelia&lt;br /&gt;
                                FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                                                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                                WHERE sostoyanie &amp;lt; 1000000&lt;br /&gt;
                               );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       nazvanie&lt;br /&gt;
 --------------------&lt;br /&gt;
  кружевное бельё&lt;br /&gt;
  уникальное изделие&lt;br /&gt;
  процессор&lt;br /&gt;
 (3 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 16 ===&lt;br /&gt;
Написать запрос SELECT: выдать цвета и для каждого цвета общее количество деталей, входящих в изделие с названием &#039;Панно 01-03&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT cvet AS &amp;quot;Цвет&amp;quot;, SUM(kolichestvo) AS &amp;quot;Деталей&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
			     AND J.nazvanie = LOWER(&#039;Панно 01-03&#039;)&lt;br /&gt;
			JOIN spasoi_ekz.P P&lt;br /&gt;
			  ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
GROUP BY cvet;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Цвет  | Деталей&lt;br /&gt;
 -------+---------&lt;br /&gt;
  белый |       9&lt;br /&gt;
  серый |       5&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 17 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера поставщиков и количество сделанных ими поставок при условии, что среднее число деталей во всех этих поставках больше 1000.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nom AS &amp;quot;Номер поставщика&amp;quot;, cnt AS &amp;quot;Количество поставок&amp;quot;&lt;br /&gt;
FROM (&lt;br /&gt;
      SELECT S.nomer_postavshika AS nom,&lt;br /&gt;
             COUNT(SPJ.nomer_postavshika) AS cnt,&lt;br /&gt;
             AVG(SPJ.kolichestvo) AS kol&lt;br /&gt;
      FROM spasoi_ekz.s S, spasoi_ekz.spj SPJ&lt;br /&gt;
      WHERE S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
      GROUP BY S.nomer_postavshika&lt;br /&gt;
     ) A&lt;br /&gt;
WHERE kol &amp;gt; 1000;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос немного попроще&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nomer_postavshika AS &amp;quot;Номер поставщика&amp;quot;, COUNT(*) AS &amp;quot;Количество поставок&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj&lt;br /&gt;
WHERE nomer_postavshika IN (&lt;br /&gt;
                            SELECT nomer_postavshika&lt;br /&gt;
                            FROM spasoi_ekz.spj&lt;br /&gt;
                            GROUP BY nomer_postavshika HAVING AVG(kolichestvo) &amp;gt; 1000&lt;br /&gt;
                           )&lt;br /&gt;
GROUP BY nomer_postavshika;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер поставщика | Количество поставок&lt;br /&gt;
 ------------------+---------------------&lt;br /&gt;
  S13              |                   1&lt;br /&gt;
  S6               |                   7&lt;br /&gt;
  S14              |                   1&lt;br /&gt;
  S15              |                   1&lt;br /&gt;
 (4 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 18 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, имеющих состояние больше 1000 и поставляющих деталь с названием &#039;Гайка 01-01&#039; для изделия с названием &#039;Велосипед 03-04&#039; в количестве (в поставке) большим, чем средний объём поставки, выполненной поставщиками с именем &#039;Иванов&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:2nd dufficulty.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;5px&amp;quot;&amp;gt;&#039;&#039;&#039;Второй по сложности запрос экзамена!&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;4px&amp;quot;&amp;gt;&#039;&#039;&#039;Вот уж не свезло, так не свезло&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                    JOIN spasoi_ekz.j J&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
WHERE sostoyanie &amp;gt; 1000&lt;br /&gt;
  AND P.nazvanie = LOWER(&#039;Гайка 01-01&#039;)&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Велосипед 03-04&#039;)&lt;br /&gt;
  AND kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT AVG(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.s S&lt;br /&gt;
                       ON SPJ.nomer_postavshika = S.nomer_postavshika &lt;br /&gt;
                     WHERE S.imya = &#039;Иванов&#039;&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Пётр&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 19 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия красных деталей, которые входят только в изделие с названием &#039;Рама 02-03&#039; в количестве, меньшем 10 единиц в поставке.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT X.nazvanie&lt;br /&gt;
FROM spasoi_ekz.p X JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_detali = X.nomer_detali&lt;br /&gt;
                    JOIN spasoi_ekz.j J&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
WHERE X.cvet = &#039;красный&#039;&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Рама 02-03&#039;)&lt;br /&gt;
  AND kolichestvo &amp;lt; 10&lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT J.nomer_izdelia&lt;br /&gt;
                  FROM spasoi_ekz.j J JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                                        ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                  WHERE J.nazvanie != LOWER(&#039;Рама 02-03&#039;)&lt;br /&gt;
                    AND X.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант этого же запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT P.nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND cvet = &#039;красный&#039;&lt;br /&gt;
                        JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                              AND J.nazvanie = LOWER(&#039;Рама 02-03&#039;)&lt;br /&gt;
WHERE kolichestvo &amp;lt; 10&lt;br /&gt;
  AND SPJ.nomer_detali NOT IN (&lt;br /&gt;
                               SELECT nomer_detali&lt;br /&gt;
                               FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                                         ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                                                            AND J.nazvanie != LOWER(&#039;Рама 02-03&#039;)&lt;br /&gt;
                              );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     nazvanie&lt;br /&gt;
 ----------------&lt;br /&gt;
  усиленная рама&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 20 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих только белые детали.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
WHERE cvet = &#039;белый&#039;&lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT nomer_postavshika&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                                            ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                  WHERE nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    AND P.cvet != &#039;белый&#039;&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё один вариант этого же запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND cvet = &#039;белый&#039;&lt;br /&gt;
                        JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE S.nomer_postavshika NOT IN (&lt;br /&gt;
                                  SELECT nomer_postavshika&lt;br /&gt;
                                  FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                                                            ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                                               AND cvet != &#039;белый&#039;&lt;br /&gt;
                                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;И ещё один вариант этого же запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s&lt;br /&gt;
WHERE nomer_postavshika NOT IN  (&lt;br /&gt;
                                 SELECT spj.nomer_postavshika&lt;br /&gt;
                                 FROM spasoi_ekz.spj SPJ, spasoi_ekz.p P&lt;br /&gt;
                                 WHERE SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                   AND p.cvet != &#039;белый&#039;&lt;br /&gt;
                                )&lt;br /&gt;
  AND nomer_postavshika  IN (&lt;br /&gt;
                             SELECT spj.nomer_postavshika&lt;br /&gt;
                             FROM spasoi_ekz.spj SPJ, spasoi_ekz.p P&lt;br /&gt;
                             WHERE SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                               AND p.cvet = &#039;белый&#039;&lt;br /&gt;
                            );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       imya&lt;br /&gt;
 -----------------&lt;br /&gt;
  Рендилл Тарли&lt;br /&gt;
  Сэмвелл Тарли&lt;br /&gt;
  Мелисса Флорент&lt;br /&gt;
  Томми Версетти&lt;br /&gt;
 (4 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 21 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия изделий, для которых детали поставляет только и только поставщик с номером &#039;S1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie&lt;br /&gt;
FROM spasoi_ekz.j J, spasoi_ekz.SPJ SPJ&lt;br /&gt;
WHERE J.nomer_izdelia = SPJ.nomer_izdelia &lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT nomer_postavshika&lt;br /&gt;
                  FROM spasoi_ekz.spj&lt;br /&gt;
                  WHERE nomer_postavshika != &#039;S1&#039;&lt;br /&gt;
                    AND nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                 );&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё один вариант запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
WHERE nomer_postavshika = &#039;S1&#039;&lt;br /&gt;
  AND SPJ.nomer_izdelia NOT IN (&lt;br /&gt;
                                SELECT nomer_izdelia&lt;br /&gt;
                                FROM spasoi_ekz.spj&lt;br /&gt;
                                WHERE nomer_postavshika != &#039;S1&#039;&lt;br /&gt;
                               );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
       nazvanie&lt;br /&gt;
 --------------------&lt;br /&gt;
  уникальное изделие&lt;br /&gt;
  кружевное бельё&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 22 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют только детали с номером &#039;P1&#039; для изделия с именем &#039;Штуцер 01-02&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- неверный запрос - номер изделия, а не название&lt;br /&gt;
SELECT imya FROM S X&lt;br /&gt;
JOIN SPJ Y ON X.nomer_postavshika=Y.nomer_postavshika&lt;br /&gt;
WHERE X.nomer_postavshika NOT IN (&lt;br /&gt;
                  SELECT DISTINCT nomer_postavshika FROM SPJ Z&lt;br /&gt;
                  WHERE Z.nomer_izdelia != &#039;Штуцер 01-02&#039;&lt;br /&gt;
                  AND Z.nomer_detali!=&#039;P1&#039;);--&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                          ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                             AND J.nazvanie = LOWER(&#039;штуцер 01-02&#039;)&lt;br /&gt;
                        JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND SPJ.nomer_detali = &#039;P1&#039;&lt;br /&gt;
                        JOIN spasoi_ekz.s S&lt;br /&gt;
                          ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
WHERE SPJ.nomer_postavshika NOT IN (&lt;br /&gt;
                                    SELECT nomer_postavshika&lt;br /&gt;
                                    FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                                              ON SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
                                                                 AND J.nazvanie = LOWER(&#039;штуцер 01-02&#039;)&lt;br /&gt;
                                                            JOIN spasoi_ekz.p P&lt;br /&gt;
                                                              ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                                                                 AND SPJ.nomer_detali != &#039;P1&#039;&lt;br /&gt;
                              );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Иван&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 23 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют деталь с названием &#039;Винт&#039; в количестве большим 100 единиц в одной поставке и имеют состояние больше среднего по их родному городу.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT S.imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
WHERE P.nazvanie = LOWER(&#039;Винт&#039;)&lt;br /&gt;
  AND SPJ.kolichestvo &amp;gt; 100&lt;br /&gt;
  AND S.sostoyanie &amp;gt; (&lt;br /&gt;
                      SELECT AVG(SS.sostoyanie)&lt;br /&gt;
                      FROM spasoi_ekz.s SS&lt;br /&gt;
                      WHERE SS.gorod = S.gorod&lt;br /&gt;
                     );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Пётр&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 24 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать наименования деталей и общее их количество для всех наименований деталей, изготавливаемых в одном городе.&lt;br /&gt;
&lt;br /&gt;
С этим запросом возникла неожиданная проблема - задание то ли неполное, то ли неправильное, потому что нельзя однозначно сказать, что по нему требуется сделать.&lt;br /&gt;
&lt;br /&gt;
Так что тут несколько вариантов запросов (кто как понял).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Первый вариант запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie, kol&lt;br /&gt;
FROM spasoi_ekz.p A, (&lt;br /&gt;
                      SELECT X.gorod, SUM(kolichestvo) as kol&lt;br /&gt;
                      FROM spasoi_ekz.p X, spasoi_ekz.spj Y&lt;br /&gt;
                      WHERE Y.nomer_detali = X.nomer_detali&lt;br /&gt;
                      GROUP BY X.gorod&lt;br /&gt;
                     ) B&lt;br /&gt;
WHERE A.gorod = B.gorod;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
        nazvanie       | kol&lt;br /&gt;
 ----------------------+------&lt;br /&gt;
  подставка            |    9&lt;br /&gt;
  стойка               |    9&lt;br /&gt;
  абажур               |    9&lt;br /&gt;
  гайка                |  139&lt;br /&gt;
  ось                  |   60&lt;br /&gt;
  зубчатое колесо      |   60&lt;br /&gt;
  транзистор           |   50&lt;br /&gt;
  печатная плата       |   50&lt;br /&gt;
  диод                 |   50&lt;br /&gt;
  универсальная деталь |   13&lt;br /&gt;
  уникальная деталь    |   14&lt;br /&gt;
  болт                 | 9137&lt;br /&gt;
  рама                 |   69&lt;br /&gt;
  колесо               |   69&lt;br /&gt;
  втулка               |   69&lt;br /&gt;
  бумага               | 3122&lt;br /&gt;
  плитка               |   14&lt;br /&gt;
  орнамент             |   14&lt;br /&gt;
  уголок               |   14&lt;br /&gt;
  гайка 01-01          |   27&lt;br /&gt;
  усиленная рама       |   10&lt;br /&gt;
  винт                 | 9137&lt;br /&gt;
  труселя              |    1&lt;br /&gt;
  штуцерная деталь     |   10&lt;br /&gt;
  шуруп                |  139&lt;br /&gt;
 (25 rows)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
и&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Второй вариант запроса&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
В уточнение задания Григорьев сказал следующее: &amp;quot;&#039;&#039;Следует учесть, что в качестве наименования города может выступать переменная, в которую в некоторой программе должно быть занесено конкретное значение перед выполнением запроса&#039;&#039;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
То есть, вообще говоря, задание на запрос неполное, и его можно трактовать так: выдать наименования деталей и общее их количество для всех наименований деталей, изготавливаемых в городе &amp;lt;code&amp;gt;%НАЗВАНИЕГОРОДА%&amp;lt;/code&amp;gt;. Вот эта переменная задаётся где-то в программе, а в БД идёт запрос с уже подставленным конкретным названием. &lt;br /&gt;
&lt;br /&gt;
Этот вариант запроса составлен, например, для Лондона. &lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie, SUM(kolichestvo)&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
WHERE gorod = &#039;Лондон&#039;&lt;br /&gt;
GROUP BY nazvanie;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  nazvanie | sum&lt;br /&gt;
 ----------+-----&lt;br /&gt;
  гайка    |  71&lt;br /&gt;
  шуруп    |  68&lt;br /&gt;
 (2 rows)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Билет 25 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, поставляющих хотя бы одну белую деталь для изделия с названием &#039;Велосипед 01-04&#039; с объёмом поставки большим, чем средний объём поставки этого поставщика.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT imya&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                    JOIN spasoi_ekz.j J&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
WHERE cvet = &#039;белый&#039;&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Велосипед 01-04&#039;)&lt;br /&gt;
  AND kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT AVG(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj SPJ&lt;br /&gt;
                     WHERE SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     imya&lt;br /&gt;
 -------------&lt;br /&gt;
  Петров Пётр&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 26 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать номера красных деталей и количество поставок этих деталей.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT P.nomer_detali AS &amp;quot;Номер детали&amp;quot;, COUNT(kolichestvo) AS &amp;quot;Количество поставок с ней&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.p P, spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
  AND cvet = &#039;красный&#039;&lt;br /&gt;
GROUP BY P.nomer_detali;   &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Этот же запрос через JOIN&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT SPJ.nomer_detali AS &amp;quot;Номер детали&amp;quot;, COUNT(kolichestvo) AS &amp;quot;Количество поставок с ней&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.p P&lt;br /&gt;
                          ON SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                             AND cvet = &#039;красный&#039;&lt;br /&gt;
GROUP BY SPJ.nomer_detali;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  Номер детали | Количество поставок с ней&lt;br /&gt;
 --------------+---------------------------&lt;br /&gt;
  P15          |                         3&lt;br /&gt;
  P22          |                         1&lt;br /&gt;
  P24          |                         1&lt;br /&gt;
 (3 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 27 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать наименования городов и среднее состояние поставщиков для каждого города, поставляющих детали с названием &#039;Гайка 01-01&#039; для изделия с названием &#039;Велосипед 03-04&#039; в количестве (в поставке) большим, чем минимальный объём поставки, выполненной поставщиком с номером &#039;S1&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:1st dufficulty.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;7px&amp;quot;&amp;gt;&#039;&#039;&#039;Сложнейший запрос экзамена!&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;5px&amp;quot;&amp;gt;&#039;&#039;&#039;Сохрани Джа, вытащить такое&#039;&#039;&#039;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT S.gorod AS &amp;quot;Город&amp;quot;, AVG(S.sostoyanie) AS &amp;quot;Среднее состояние&amp;quot;&lt;br /&gt;
FROM spasoi_ekz.s S JOIN spasoi_ekz.spj SPJ&lt;br /&gt;
                      ON SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
                    JOIN spasoi_ekz.j J&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
WHERE P.nazvanie = LOWER(&#039;Гайка 01-01&#039;)&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Велосипед 03-04&#039;)&lt;br /&gt;
  AND kolichestvo &amp;gt; (&lt;br /&gt;
                     SELECT MIN(kolichestvo)&lt;br /&gt;
                     FROM spasoi_ekz.spj&lt;br /&gt;
                     WHERE nomer_postavshika = &#039;S1&#039;&lt;br /&gt;
                    )&lt;br /&gt;
GROUP BY S.gorod;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
    Город   |   Среднее состояние&lt;br /&gt;
 -----------+-----------------------&lt;br /&gt;
  Мытищи    |    35000.500000000000&lt;br /&gt;
  Йокогама  |  1500000.000000000000&lt;br /&gt;
  Манчестер | 2571.0000000000000000&lt;br /&gt;
 (3 rows)&lt;br /&gt;
&lt;br /&gt;
=== Билет 28 ===&lt;br /&gt;
&lt;br /&gt;
Написать запрос SELECT: выдать названия изделий, куда входит хотя бы одна красная деталь весом больше 10 граммов, поставляемая только поставщиком с номером &#039;S1&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT J.nazvanie&lt;br /&gt;
FROM spasoi_ekz.j J JOIN spasoi_ekz.spj SPJ1&lt;br /&gt;
                      ON J.nomer_izdelia = SPJ1.nomer_izdelia&lt;br /&gt;
                    JOIN spasoi_ekz.p P&lt;br /&gt;
                      ON P.nomer_detali = SPJ1.nomer_detali&lt;br /&gt;
WHERE P.ves &amp;gt; 10&lt;br /&gt;
 AND P.cvet = &#039;красный&#039;&lt;br /&gt;
 AND NOT EXISTS (&lt;br /&gt;
                 SELECT SPJ2.nomer_postavshika&lt;br /&gt;
                 FROM spasoi_ekz.spj SPJ2         &lt;br /&gt;
                 WHERE SPJ2.nomer_detali = P.nomer_detali&lt;br /&gt;
	 	   AND SPJ2.nomer_postavshika != &#039;S1&#039;&lt;br /&gt;
                );                     &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
     nazvanie&lt;br /&gt;
 -----------------&lt;br /&gt;
  кружевное бельё&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 29 ===&lt;br /&gt;
Написать запрос SELECT: выдать названия деталей, которые входят только и только в состав изделия с названием &#039;Штуцер 01-03&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT nazvanie&lt;br /&gt;
FROM spasoi_ekz.p P, spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE P.nomer_detali = SPJ.nomer_detali &lt;br /&gt;
  AND NOT EXISTS (&lt;br /&gt;
                  SELECT SPJ.nomer_izdelia&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJ JOIN spasoi_ekz.j J&lt;br /&gt;
                                            ON J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
                  WHERE J.nazvanie != LOWER(&#039;Штуцер 01-03&#039;)&lt;br /&gt;
                    AND SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
      nazvanie&lt;br /&gt;
 ------------------&lt;br /&gt;
  штуцерная деталь&lt;br /&gt;
 (1 row)&lt;br /&gt;
&lt;br /&gt;
=== Билет 30 ===&lt;br /&gt;
Написать запрос SELECT: выдать имена поставщиков, которые поставляют, по крайней мере, все те детали, которые поставляет поставщик с номером &#039;S2&#039;.&lt;br /&gt;
&lt;br /&gt;
Текст запроса:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT imya&lt;br /&gt;
FROM spasoi_ekz.s S&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
                  SELECT nomer_detali&lt;br /&gt;
                  FROM spasoi_ekz.spj SPJY&lt;br /&gt;
                  WHERE nomer_postavshika = &#039;S2&#039;&lt;br /&gt;
                    AND NOT EXISTS (&lt;br /&gt;
                                    SELECT *&lt;br /&gt;
                                    FROM spasoi_ekz.spj&lt;br /&gt;
                                    WHERE nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
                                      AND nomer_detali = SPJY.nomer_detali&lt;br /&gt;
                                   )&lt;br /&gt;
                 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результат:&lt;br /&gt;
&lt;br /&gt;
  imya&lt;br /&gt;
 ------------&lt;br /&gt;
  Оша&lt;br /&gt;
  Бран Старк&lt;br /&gt;
 (2 rows)&lt;br /&gt;
[[Категория:Структурное проектирование АСОИ (10 семестр)]]&lt;/div&gt;</summary>
		<author><name>81.9.52.28</name></author>
	</entry>
	<entry>
		<id>https://iu5bmstu.ru/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%90%D1%80%D1%85%D0%B8%D1%82%D0%B5%D0%BA%D1%82%D1%83%D1%80%D0%B0_%D0%BA%D0%BE%D1%80%D0%BF%D0%BE%D1%80%D0%B0%D1%82%D0%B8%D0%B2%D0%BD%D1%8B%D1%85_%D0%B8%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_(10_%D1%81%D0%B5%D0%BC%D0%B5%D1%81%D1%82%D1%80)&amp;diff=3155</id>
		<title>Категория:Архитектура корпоративных информационных систем (10 семестр)</title>
		<link rel="alternate" type="text/html" href="https://iu5bmstu.ru/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%90%D1%80%D1%85%D0%B8%D1%82%D0%B5%D0%BA%D1%82%D1%83%D1%80%D0%B0_%D0%BA%D0%BE%D1%80%D0%BF%D0%BE%D1%80%D0%B0%D1%82%D0%B8%D0%B2%D0%BD%D1%8B%D1%85_%D0%B8%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_(10_%D1%81%D0%B5%D0%BC%D0%B5%D1%81%D1%82%D1%80)&amp;diff=3155"/>
		<updated>2013-04-06T18:25:24Z</updated>

		<summary type="html">&lt;p&gt;81.9.52.28: /* Литература */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;p&amp;gt;{{Предмет | name=Архитектура корпоративных информационных систем | prepod=[[Нестеров Ю.Г.]] | lections=17 | seminars=нет | labs=4 | dzs=1 | rks=? | signif=желательно | what=зачёт}}&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Архитектура корпоративных информационных систем.&lt;br /&gt;
__TOC__&lt;br /&gt;
== Лекции ==&lt;br /&gt;
&lt;br /&gt;
17 лекций. Отношение к посещаемости либеральное.&lt;br /&gt;
&lt;br /&gt;
== Домашнее задание ==&lt;br /&gt;
&lt;br /&gt;
Написать исследовательскую работу объёмом не более 30 страниц на указанную тему. Список тем [http://yadi.sk/d/l72llmEl2e7Zc тут].&lt;br /&gt;
&lt;br /&gt;
Если тема не нравится, то можно поменять на другую - это надо согласовать с Нестеровым по почте.&lt;br /&gt;
&lt;br /&gt;
== Лабораторные работы ==&lt;br /&gt;
&lt;br /&gt;
4 лабораторных.&lt;br /&gt;
&lt;br /&gt;
== Зачёт ==&lt;br /&gt;
&lt;br /&gt;
Если посетил более 75% лекций и хорошо написал ДЗ, то автомат.&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
* [http://old.intuit.ru/department/itmngt/entarc/ курс на ИНТУИТе] - лекции читаются по нему;&lt;br /&gt;
&lt;br /&gt;
[[Категория:10 семестр]]&lt;br /&gt;
[[Категория:Предметы]]&lt;/div&gt;</summary>
		<author><name>81.9.52.28</name></author>
	</entry>
	<entry>
		<id>https://iu5bmstu.ru/index.php?title=%D0%A2%D0%9E%D0%A0%D0%90_(9)_-_%D0%A1%D0%B5%D0%BC%D0%B8%D0%BD%D0%B0%D1%80_%E2%84%966_-_%D0%A1%D0%B8%D0%BD%D1%82%D0%B5%D0%B7_%D1%85%D0%BE%D1%80%D0%BE%D1%88%D0%B5%D0%B9_%D0%91%D0%94&amp;diff=2576</id>
		<title>ТОРА (9) - Семинар №6 - Синтез хорошей БД</title>
		<link rel="alternate" type="text/html" href="https://iu5bmstu.ru/index.php?title=%D0%A2%D0%9E%D0%A0%D0%90_(9)_-_%D0%A1%D0%B5%D0%BC%D0%B8%D0%BD%D0%B0%D1%80_%E2%84%966_-_%D0%A1%D0%B8%D0%BD%D1%82%D0%B5%D0%B7_%D1%85%D0%BE%D1%80%D0%BE%D1%88%D0%B5%D0%B9_%D0%91%D0%94&amp;diff=2576"/>
		<updated>2013-01-18T16:24:16Z</updated>

		<summary type="html">&lt;p&gt;81.9.52.28: /* Вторая задача */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Tabli4ka warning undone summary|text=&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;- окончания [[#Первая задача | первой задачи]] второго ДЗ.}}&lt;br /&gt;
{{Backward|l=ТОРА (9) - Семинар №5 - Синтез хорошей БД}}&lt;br /&gt;
Разбираем задачи из ДЗ прошлого семинара.&lt;br /&gt;
__TOC__&lt;br /&gt;
== ДЗ 1 ==&lt;br /&gt;
&lt;br /&gt;
Продолжаем задачу из прошлого семинара.&lt;br /&gt;
&lt;br /&gt;
Строим схему отношений:&lt;br /&gt;
&lt;br /&gt;
[[Файл:9sTORAs6pic1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Перерисовываем её с синтетическими ключами:&lt;br /&gt;
&lt;br /&gt;
[[Файл:9sTORAs6pic2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Для генерации синтетических ключей используются &#039;&#039;объекты последовательности&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
CREATE SEQUENCE имя_объекта_последовательности;&lt;br /&gt;
...&lt;br /&gt;
INSERT INTO имя_таблицы VALUES(имя_объекта_последовательности.NEXTVAL ...);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ДЗ 2 ==&lt;br /&gt;
&lt;br /&gt;
=== Первая задача ===&lt;br /&gt;
&lt;br /&gt;
Из [[ТОРА (9) - Семинар №5 - Синтез хорошей БД#Первая задача | 5 семинара]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Задание:&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Задана предметная область [[ТОРА (9) - Семинар №4 - Синтез хорошей БД#Синтез хорошей схемы БД | про пилотов]], но ФЗ другие:&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=F = (B\rightarrow D, D\rightarrow B, AB\rightarrow D, AD\rightarrow B, BC\rightarrow A, BC\rightarrow D, CD\rightarrow A, CD\rightarrow B,}}&lt;br /&gt;
{{Формула|f=ABC\rightarrow D, ACD\rightarrow B, BCD\rightarrow A)}}&lt;br /&gt;
&lt;br /&gt;
Синтезировать БД с помощью алгоритма.&lt;br /&gt;
&lt;br /&gt;
1)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=УНП = (B\rightarrow D, D\rightarrow B, AB\rightarrow D, BC\rightarrow AD, CD\rightarrow AB, AD\rightarrow B, ABC\rightarrow D, ACD\rightarrow B, BCD\rightarrow A)}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3) сначала этот пункт:&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=A^+ = A}}&lt;br /&gt;
:{{Формула|f=B^+ = BD}}&lt;br /&gt;
:{{Формула|f=C^+ = C}}&lt;br /&gt;
:{{Формула|f=D^+ = DB}}&lt;br /&gt;
:{{Формула|f=(BC)^+ = BCAD}}&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=УНП = (B\rightarrow D, D\rightarrow B, CD\rightarrow AB, BC\rightarrow AD)}}&lt;br /&gt;
&lt;br /&gt;
2)&lt;br /&gt;
&lt;br /&gt;
:как-то куда-то делся этот пункт.&lt;br /&gt;
&lt;br /&gt;
4)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=B\rightarrow D}}&lt;br /&gt;
:{{Формула|f=D\rightarrow B}}&lt;br /&gt;
:{{Формула|f=K_1 = BD}}&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=BC\rightarrow AD}}&lt;br /&gt;
:{{Формула|f=CD\rightarrow AB}}&lt;br /&gt;
:{{Формула|f=K_2 = ABCD}}&lt;br /&gt;
&lt;br /&gt;
5)&lt;br /&gt;
&lt;br /&gt;
:[[Файл:9sTORAs6pic3.png|200px]]&lt;br /&gt;
&lt;br /&gt;
6)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=K_2}}:&lt;br /&gt;
::{{Формула|f=BC\rightarrow D}}&lt;br /&gt;
::{{Формула|f=СD\rightarrow B}}&lt;br /&gt;
::вторую вычеркнули&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=K_1}}&lt;br /&gt;
::вторую вычеркнули&lt;br /&gt;
&lt;br /&gt;
7)&lt;br /&gt;
&lt;br /&gt;
:[[Файл:9sTORAs6pic4.png|200px]]&lt;br /&gt;
&lt;br /&gt;
и дальше по алгоритму.&lt;br /&gt;
&lt;br /&gt;
=== Вторая задача ===&lt;br /&gt;
&lt;br /&gt;
Всё также из [[ТОРА (9) - Семинар №5 - Синтез хорошей БД#Вторая задача | 5 семинара]].&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=U = A, B, C, D, E, K, L, N, O, P, R, S, T, V, X}}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=F = A\rightarrow CNO, B\rightarrow PRS, ADE\rightarrow X, K\rightarrow DEL, L\rightarrow T, X\rightarrow VT, ET\rightarrow V, D\rightarrow XBE}}&lt;br /&gt;
&lt;br /&gt;
Синтезируем схему БД:&lt;br /&gt;
&lt;br /&gt;
1)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=УНП = (A\rightarrow CNO, B\rightarrow PRS, ADE\rightarrow CNOXVTBPRS, K\rightarrow DELXBTVPRS,}}&lt;br /&gt;
:{{Формула|f=L\rightarrow T, X\rightarrow VT, ET\rightarrow V, D\rightarrow XBEPRSVT)}}&lt;br /&gt;
&lt;br /&gt;
2)&lt;br /&gt;
&lt;br /&gt;
:так как нет ФЗ, включающей в себя все атрибуты, то добавляем её сами:&lt;br /&gt;
:{{Формула|f=УНП = (A\rightarrow CNO, B\rightarrow PRS, ADE\rightarrow CNOXVTBPRS, K\rightarrow DELXBTVPRS,}}&lt;br /&gt;
:{{Формула|f=L\rightarrow T, X\rightarrow VT, ET\rightarrow V, D\rightarrow XBEPRSVT, ABCDEKLNOPRSTVX\rightarrow\varnothing)}}&lt;br /&gt;
&lt;br /&gt;
3)&lt;br /&gt;
&lt;br /&gt;
:смотрим замыкания:&lt;br /&gt;
::{{Формула|f=A^+ = ACNO}}&lt;br /&gt;
::{{Формула|f=E^+ = E}}&lt;br /&gt;
::{{Формула|f=(AD)^+ = ADCNOXBEPRSVT}}&lt;br /&gt;
::{{Формула|f=T^+ = T}}&lt;br /&gt;
:получили {{Формула|f=УНП = (A\rightarrow CNO, B\rightarrow PRS, AD\rightarrow CNOXBEPRSVTE, K\rightarrow DELXBTVPRS,}}&lt;br /&gt;
:{{Формула|f=L\rightarrow T, X\rightarrow VT, ET\rightarrow V, D\rightarrow XBEPRSVT, ABCDEKLNOPRSTVX\rightarrow\varnothing)}}&lt;br /&gt;
&lt;br /&gt;
{{Forward|l=ТОРА (9) - Семинар №7 - Синтез хорошей БД}}&lt;br /&gt;
&lt;br /&gt;
[[Категория:Теоретические основы реляционной алгебры (9 семестр)|С]]&lt;br /&gt;
[[Категория:Конспекты лекций и семинаров]]&lt;br /&gt;
[[Категория:Незаконченные конспекты]]&lt;/div&gt;</summary>
		<author><name>81.9.52.28</name></author>
	</entry>
	<entry>
		<id>https://iu5bmstu.ru/index.php?title=%D0%A2%D0%9E%D0%A0%D0%90_(9)_-_%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_%E2%84%9615_-_%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80_%D0%BE%D1%86%D0%B5%D0%BD%D0%BA%D0%B8&amp;diff=2574</id>
		<title>ТОРА (9) - Лекция №15 - Пример оценки</title>
		<link rel="alternate" type="text/html" href="https://iu5bmstu.ru/index.php?title=%D0%A2%D0%9E%D0%A0%D0%90_(9)_-_%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_%E2%84%9615_-_%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80_%D0%BE%D1%86%D0%B5%D0%BD%D0%BA%D0%B8&amp;diff=2574"/>
		<updated>2013-01-18T10:18:56Z</updated>

		<summary type="html">&lt;p&gt;81.9.52.28: /* Пример оценки физического плана */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Tabli4ka warning undone summary|text=&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;- описаний формул. А также в некоторых формулах должны быть ошибки;&amp;lt;br&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;- графического представления оптимального плана.}}&lt;br /&gt;
{{Backward|l=ТОРА_(9)_-_Лекция_№14_-_Оценки_(продолжение)}}&lt;br /&gt;
Оригинал всего раздела, посвящённого оптимизации SQL-запросов, от самого [[Григорьев Ю.А. | Григорьева]] можно загрузить [http://yadi.sk/d/VjjMs6ww1HH2D здесь].&lt;br /&gt;
__TOC__&lt;br /&gt;
== Оптимизация SQL-запросов ==&lt;br /&gt;
&lt;br /&gt;
=== Методы соединения таблиц ===&lt;br /&gt;
&lt;br /&gt;
==== Алгоритмы для поиска физического плана ====&lt;br /&gt;
&lt;br /&gt;
===== Пример оценки физического плана =====&lt;br /&gt;
&lt;br /&gt;
Исходные данные:&lt;br /&gt;
&lt;br /&gt;
1) количество записей в таблице {{Формула|f=T(R_1)}} = 10000, количество записей в таблице {{Формула|f=T(R_2)}} = 100000;&lt;br /&gt;
&lt;br /&gt;
2) количество записей в одном блоке таблицы {{Формула|f=L(R_1) = L(R_2)}} = 100, количество записей в соединении {{Формула|f=L_{JOIN} }} = 1000;&lt;br /&gt;
&lt;br /&gt;
3) количество записей в блоке индекса код_пользователя {{Формула|f=L} = 200, количество записей в блоке индекса номер_счёта {{Формула|f=L} = 200;&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;&amp;lt;u&amp;gt;Примечание:&amp;lt;/u&amp;gt; &#039;&#039;записи исходных таблиц могут читаться в сортированном виде по своим индексированным атрибутам. Записи в таблице {{Формула|f=R_1}} сгруппированы по атрибуту код_пользователя (кластеризованный индекс), а в таблице {{Формула|f=R_2}} не сгруппированы.&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4) мощность атрибутов:&lt;br /&gt;
* {{Формула|f=R_1}}, &amp;lt;code&amp;gt;код_пользователя&amp;lt;/code&amp;gt; 5000;&lt;br /&gt;
* {{Формула|f=R_1}}, &amp;lt;code&amp;gt;номер_счёта&amp;lt;/code&amp;gt; 10000;&lt;br /&gt;
* {{Формула|f=R_2}}, &amp;lt;code&amp;gt;номер_счёта&amp;lt;/code&amp;gt; 100000&lt;br /&gt;
* {{Формула|f=R_2}}, &amp;lt;code&amp;gt;остаток&amp;lt;/code&amp;gt; - неизвестно.&lt;br /&gt;
&lt;br /&gt;
5) тут почему-то пусто&lt;br /&gt;
&lt;br /&gt;
6) {{Формула|f=b}} = 10, {{Формула|f=C_{COMP} = C_{MOVE} = C_{filter} = 0.01}} мс, {{Формула|f=C_B = 10}} мс.&lt;br /&gt;
&lt;br /&gt;
Для построение оптимального физического плана используется алгоритм динамического программирования (из [[ТОРА (9) - Лекция №14 - Оценки (продолжение)#Алгоритмы для поиска физического плана | предыдущей лекции]]).&lt;br /&gt;
&lt;br /&gt;
Алгоритм:&lt;br /&gt;
&lt;br /&gt;
1) {{Формула|f=AccessPlan}}&lt;br /&gt;
&lt;br /&gt;
:а) {{Формула|f=R_1}} - таблица пользователи;&lt;br /&gt;
::{{Формула|f=j = 1}}, чтение всей таблицы&lt;br /&gt;
::{{Формула|f=C_1 = C_{CPU1} + C_{I/O1} = T(R_1)\cdot C_{filter} + B(R_1)\cdot C_B = 10000\cdot 0.01 + \frac{10000}{100}\cdot 10 = 1100}} мс&lt;br /&gt;
::{{Формула|f=j = 2}} - индекс по атрибуту &amp;lt;code&amp;gt;код_пользователя&amp;lt;/code&amp;gt;&lt;br /&gt;
::{{Формула|f=C_2 = C_{CPU2} + C_{I/O2} = \frac{T(R_1)\cdot K}{I(R_1, a)}\cdot C_{filter} + \frac{B(Index(a))\cdot k}{I(R_1, a)} \cdot C_b + \frac{B(R_2)\cdot k}{I(R_1, a)} =}}&lt;br /&gt;
:::{{Формула|f==\frac{10000\cdot 1}{5000}\cdot 0.01 + \frac{(10000/200)\cdot 1}{5000}\cdot 10 + \frac{10000/100\cdot 1}{5000}\cdot 10 = 0.02 + 0.3 = 0.32}} мс&lt;br /&gt;
::{{Формула|f=С = min(С_1, С_2) = 0.32}} мс&lt;br /&gt;
::{{Формула|f=С_{I/O} = C_{I/O2} = 0.3}} мс&lt;br /&gt;
::{{Формула|f=T(Q_1) = T(R_2)\cdot P_{код\_ пользователя = 3} = T(R_2)\cdot \frac{k}{I(R_1, a)} = 10000 \cdot 1/5000 = 2}}&lt;br /&gt;
::{{Формула|f=B(Q_1) = \lceil\frac{T(Q_1)}{L(R_1)\cdot 10}\rceil = \lceil\frac{2}{100\cdot 10}\rceil = 1}}&lt;br /&gt;
::{{Формула|f=str[1] = \{\{Q_1\}, \varnothing, \varnothing, 0.32, 0.3, \{2, 1, \{2\}, 2\}\} }}&lt;br /&gt;
&lt;br /&gt;
:б) {{Формула|f=R_2}} - таблица счёт.&lt;br /&gt;
::{{Формула|f=j = 1}}&lt;br /&gt;
::{{Формула|f=C_1 = 100000\cdot 0.01 + \frac{100000}{100}\cdot 10 = 11000}} мс&lt;br /&gt;
::{{Формула|f=j = 2}}&lt;br /&gt;
::{{Формула|f=C = C_1 = 11000}} мс&lt;br /&gt;
::{{Формула|f=C_{I/O} = C_{I/O1} = 10000}} мс&lt;br /&gt;
::{{Формула|f=T(Q_2) = T(R_2)\cdot P_{R_2.остаток &amp;gt; 1500} = 100000\cdot 1/3 = 33000}}, вероятность принята равной {{Формула|f=1/3}}, так как по условию эта мощность неизвестна&lt;br /&gt;
::{{Формула|f=B(Q_2) = \lceil\frac{T(Q_2)}{L(R_2)\cdot 10}\rceil = \lceil\frac{33000}{100\cdot 10}\rceil = 33}}&lt;br /&gt;
::{{Формула|f=str[2] = \{\{Q_2\}, \varnothing, \varnothing, 11000, 10000, \{33000, 33, \{33000\}, 1\}\} }}&lt;br /&gt;
&lt;br /&gt;
2) {{Формула|f=JoinPlan}}&lt;br /&gt;
:{{Формула|f=m_1 = 1}}, {{Формула|f=m_2 = 2}} - номера экземпляров структур, таких, что {{Формула|f=str[m_1].W = Q_1}} и {{Формула|f=str[m_2].W = Q_2}}&lt;br /&gt;
&lt;br /&gt;
:а)&lt;br /&gt;
::{{Формула|f=i = 1}}, [[ТОРА_(9)_-_Лекция_№12_-_Оценки_(продолжение)#Метод ложных циклов (NLJ) | NLJ]]&lt;br /&gt;
::{{Формула|f=C_1 = C_{CPU1} + C_{I/O1} = T(Q_1)\cdot T(Q_2)\cdot C_{COMP} + \lfloor\frac{B(Q_1)}{b}\rfloor\cdot C_{I/O}(Q_2) = 2\cdot 33000\cdot 0.01 + \lfloor\frac{1}{10}\rfloor\cdot 10000 = 660}} мс&lt;br /&gt;
::{{Формула|f=i = 2}}, [[ТОРА_(9)_-_Лекция_№12_-_Оценки_(продолжение)#Метод сортировки слияния (SMJ) | SMJ]]&lt;br /&gt;
::таблица {{Формула|f=Q_2}} уже отсортирована по номер_счёта, так как имеется индекс по номеру счёта&lt;br /&gt;
::{{Формула|f=С_2 = С_{CPU2} + C_{I/O2} = C^{SORT}_{CPU}(Q_1) + С^{JOIN}_{CPU}(Q_1, Q_2) + C^{SORT}_{I/O}(Q_1) + C^{JOIN}_{I/O}(Q_1, Q_2) =}}&lt;br /&gt;
:::{{Формула|f== 2\cdot \log_2\frac{2}{\lfloor 1/10\rfloor}\cdot (0.01 + 0.01) + (\log_{10}1 - 1)\cdot 2\cdot (10\cdot 0.01 + 0.01) + ((\frac{33000}{33000} + 2\cdot 2 +}}&lt;br /&gt;
:::{{Формула|f=+ 33000\cdot(1 - \frac{2}{33000}))\cdot 0.01 + (2\cdot 1\cdot \log_{10}\cdot 1)\cdot 10 + (1 + 0)\cdot 10 = 340}} мс&lt;br /&gt;
::{{Формула|f=C = min(C_1, C_2) = 340}}&lt;br /&gt;
::{{Формула|f=C = str[1].Z + str[2].Z + C = 0.32 + 11000 + 340 = 11340.32}} мс&lt;br /&gt;
::{{Формула|f=C_{I/O} = str[1].ZIO + str[2].ZIO + C_{I/O2} = 0.3 + 10000 + 10 = 10010.3}} мс&lt;br /&gt;
::{{Формула|f=T(Q_1\bowtie Q_2) = \frac{T(Q_1)\cdot T(Q_2)}{max(I(Q_1, a), I(Q_2, a))} = \frac{2\cdot 33000}{max(2, 33000)} =2}}&lt;br /&gt;
::{{Формула|f=B(Q_1\bowtie Q_2) = \lceil\frac{2}{1000}\rceil= 1}}&lt;br /&gt;
::{{Формула|f=I(Q_1\bowtie Q_2, a) = min(I(Q_1, a), I(Q_2, a)) = min(2, 33000) = 2}}&lt;br /&gt;
::{{Формула|f=str[3] = \{\{Q_1, Q_2\}, \{Q_1\}, \{Q_2\}, 11340, 10010, \{2, 1, \{2\}, 2\}\} }}&lt;br /&gt;
&lt;br /&gt;
:б)&lt;br /&gt;
::структура остаётся такая же&lt;br /&gt;
&lt;br /&gt;
3) {{Формула|f=OptPlanReturn}} - вывод оптимального плана и представление этого плана в графическом виде.&lt;br /&gt;
&lt;br /&gt;
:1) {{Формула|f=(Q_1, Q_2) = Q_1\bowtie Q_2}}&lt;br /&gt;
:2) {{Формула|f=Q_1 = (IndexScan() + Filter())}}&lt;br /&gt;
:3) {{Формула|f=Q_2 = (TableScan() + Filter())}}&lt;br /&gt;
&lt;br /&gt;
[[Категория:Теоретические основы реляционной алгебры (9 семестр)]]&lt;br /&gt;
[[Категория:Конспекты лекций и семинаров]]&lt;br /&gt;
[[Категория:Незаконченные конспекты]]&lt;/div&gt;</summary>
		<author><name>81.9.52.28</name></author>
	</entry>
	<entry>
		<id>https://iu5bmstu.ru/index.php?title=%D0%A2%D0%9E%D0%A0%D0%90_(9)_-_%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_%E2%84%9615_-_%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80_%D0%BE%D1%86%D0%B5%D0%BD%D0%BA%D0%B8&amp;diff=2573</id>
		<title>ТОРА (9) - Лекция №15 - Пример оценки</title>
		<link rel="alternate" type="text/html" href="https://iu5bmstu.ru/index.php?title=%D0%A2%D0%9E%D0%A0%D0%90_(9)_-_%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_%E2%84%9615_-_%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80_%D0%BE%D1%86%D0%B5%D0%BD%D0%BA%D0%B8&amp;diff=2573"/>
		<updated>2013-01-18T09:54:28Z</updated>

		<summary type="html">&lt;p&gt;81.9.52.28: /* Пример оценки физического плана */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Tabli4ka warning undone summary|text=&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;- описаний формул. А также в некоторых формулах должны быть ошибки;&amp;lt;br&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;- графического представления оптимального плана.}}&lt;br /&gt;
{{Backward|l=ТОРА_(9)_-_Лекция_№14_-_Оценки_(продолжение)}}&lt;br /&gt;
Оригинал всего раздела, посвящённого оптимизации SQL-запросов, от самого [[Григорьев Ю.А. | Григорьева]] можно загрузить [http://yadi.sk/d/VjjMs6ww1HH2D здесь].&lt;br /&gt;
__TOC__&lt;br /&gt;
== Оптимизация SQL-запросов ==&lt;br /&gt;
&lt;br /&gt;
=== Методы соединения таблиц ===&lt;br /&gt;
&lt;br /&gt;
==== Алгоритмы для поиска физического плана ====&lt;br /&gt;
&lt;br /&gt;
===== Пример оценки физического плана =====&lt;br /&gt;
&lt;br /&gt;
Исходные данные:&lt;br /&gt;
&lt;br /&gt;
1) количество записей в таблице {{Формула|f=T(R_1)}} = 10000, количество записей в таблице {{Формула|f=T(R_2)}} = 100000;&lt;br /&gt;
&lt;br /&gt;
2) количество записей в одном блоке таблицы {{Формула|f=L(R_1) = L(R_2)}} = 100, количество записей в соединении {{Формула|f=L_{JOIN} }} = 1000;&lt;br /&gt;
&lt;br /&gt;
3) количество записей в блоке индекса код_пользователя {{Формула|f=L} = 200, количество записей в блоке индекса номер_счёта {{Формула|f=L} = 200;&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;&amp;lt;u&amp;gt;Примечание:&amp;lt;/u&amp;gt; &#039;&#039;записи исходных таблиц могут читаться в сортированном виде по своим индексированным атрибутам. Записи в таблице {{Формула|f=R_1}} сгруппированы по атрибуту код_пользователя (кластеризованный индекс), а в таблице {{Формула|f=R_2}} не сгруппированы.&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4) мощность атрибутов:&lt;br /&gt;
* {{Формула|f=R_1}}, &amp;lt;code&amp;gt;код_пользователя&amp;lt;/code&amp;gt; 5000;&lt;br /&gt;
* {{Формула|f=R_1}}, &amp;lt;code&amp;gt;номер_счёта&amp;lt;/code&amp;gt; 10000;&lt;br /&gt;
* {{Формула|f=R_2}}, &amp;lt;code&amp;gt;номер_счёта&amp;lt;/code&amp;gt; 100000&lt;br /&gt;
* {{Формула|f=R_2}}, &amp;lt;code&amp;gt;остаток&amp;lt;/code&amp;gt; - неизвестно.&lt;br /&gt;
&lt;br /&gt;
5) тут почему-то пусто&lt;br /&gt;
&lt;br /&gt;
6) {{Формула|f=b}} = 10, {{Формула|f=C_{COMP} = C_{MOVE} = C_{filter} = 0.01}} мс, {{Формула|f=C_B = 10}} мс.&lt;br /&gt;
&lt;br /&gt;
Для построение оптимального физического плана используется алгоритм динамического программирования (из [[ТОРА (9) - Лекция №14 - Оценки (продолжение)#Алгоритмы для поиска физического плана | предыдущей лекции]]).&lt;br /&gt;
&lt;br /&gt;
Алгоритм:&lt;br /&gt;
&lt;br /&gt;
1) {{Формула|f=AccessPlan}}&lt;br /&gt;
&lt;br /&gt;
:а) {{Формула|f=R_1}} - таблица пользователи;&lt;br /&gt;
::{{Формула|f=j = 1}}, чтение всей таблицы&lt;br /&gt;
::{{Формула|f=C_1 = C_{CPU1} + C_{I/O1} = T(R_1)\cdot C_{filter} + B(R_1)\cdot C_B = 10000\cdot 0.01 + \frac{10000}{100}\cdot 10 = 1100}} мс&lt;br /&gt;
::{{Формула|f=j = 2}} - индекс по атрибуту &amp;lt;code&amp;gt;код_пользователя&amp;lt;/code&amp;gt;&lt;br /&gt;
::{{Формула|f=C_2 = C_{CPU2} + C_{I/O2} = \frac{T(R_1)\cdot K}{I(R_1, a)}\cdot C_{filter} + \frac{B(Index(a))\cdot k}{I(R_1, a)} \cdot C_b + \frac{B(R_2)\cdot k}{I(R_1, a)} =}}&lt;br /&gt;
:::{{Формула|f==\frac{10000\cdot 1}{5000}\cdot 0.01 + \frac{(10000/200)\cdot 1}{5000}\cdot 10 + \frac{10000/100\cdot 1}{5000}\cdot 10 = 0.02 + 0.3 = 0.32}} мс&lt;br /&gt;
::{{Формула|f=С = min(С_1, С_2) = 0.32}} мс&lt;br /&gt;
::{{Формула|f=С_{I/O} = C_{I/O2} = 0.3}} мс&lt;br /&gt;
::{{Формула|f=T(Q_1) = T(R_2)\cdot P_{код\_ пользователя = 3} = T(R_2)\cdot \frac{k}{I(R_1, a)} = 10000 \cdot 1/5000 = 2}}&lt;br /&gt;
::{{Формула|f=B(Q_1) = \lceil\frac{T(Q_1)}{L(R_1)\cdot 10}\rceil = \lceil\frac{2}{100\cdot 10}\rceil = 1}}&lt;br /&gt;
::{{Формула|f=str[1] = \{\{Q_1\}, \varnothing, \varnothing, 0.32, 0.3, \{2, 1, \{2\}, 2\}\} }}&lt;br /&gt;
&lt;br /&gt;
:б) {{Формула|f=R_2}} - таблица счёт.&lt;br /&gt;
::{{Формула|f=j = 1}}&lt;br /&gt;
::{{Формула|f=C_1 = 100000\cdot 0.01 + \frac{100000}{100}\cdot 10 = 11000}} мс&lt;br /&gt;
::{{Формула|f=j = 2}}&lt;br /&gt;
::{{Формула|f=C = C_1 = 11000}} мс&lt;br /&gt;
::{{Формула|f=C_{I/O} = C_{I/O1} = 10000}} мс&lt;br /&gt;
::{{Формула|f=T(Q_2) = T(R_2)\cdot P_{R_2.остаток &amp;gt; 1500} = 100000\cdot 1/3 = 33000}}, вероятность принята равной {{Формула|f=1/3}}, так как по условию эта мощность неизвестна&lt;br /&gt;
::{{Формула|f=B(Q_2) = \lceil\frac{T(Q_2)}{L(R_2)\cdot 10}\rceil = \lceil\frac{33000}{100\cdot 10}\rceil = 33}}&lt;br /&gt;
::{{Формула|f=str[2] = \{\{Q_2\}, \varnothing, \varnothing, 11000, 10000, \{33000, 33, \{33000\}, 1\}\} }}&lt;br /&gt;
&lt;br /&gt;
2) {{Формула|f=JoinPlan}}&lt;br /&gt;
:{{Формула|f=m_1 = 1}}, {{Формула|f=m_2 = 2}} - номера экземпляров структур, таких, что {{Формула|f=str[m_1].W = Q_1}} и {{Формула|f=str[m_2].W = Q_2}}&lt;br /&gt;
&lt;br /&gt;
:а)&lt;br /&gt;
::{{Формула|f=i = 1}}, [[ТОРА_(9)_-_Лекция_№12_-_Оценки_(продолжение)#Метод ложных циклов (NLJ) | NLJ]]&lt;br /&gt;
::{{Формула|f=C_1 = C_{CPU1} + C_{I/O1} = T(Q_1)\cdot T(Q_2)\cdot C_{COMP} + \lfloor\frac{B(Q_1)}{b}\rfloor\cdot C_{I/O(Q_2)} = 2\cdot 33000\cdot 0.01 + \lfloor\frac{1}{10}\rfloor\cdot 10000 = 660}} мс&lt;br /&gt;
::{{Формула|f=i = 2}}, [[ТОРА_(9)_-_Лекция_№12_-_Оценки_(продолжение)#Метод сортировки слияния (SMJ) | SMJ]]&lt;br /&gt;
::таблица {{Формула|f=Q_2}} уже отсортирована по номер_счёта, так как имеется индекс по номеру счёта&lt;br /&gt;
::{{Формула|f=С_2 = С_{CPU2} + C_{I/O2} = C^{SORT}_{CPU}(Q_1) + С^{JOIN}_{CPU}(Q_1, Q_2) + C^{SORT}_{I/O}(Q_1) + C^{JOIN}_{I/O}(Q_1, Q_2) =}}&lt;br /&gt;
:::{{Формула|f== 2\cdot \log_2\frac{2}{\lfloor 1/10\rfloor}\cdot (0.01 + 0.01) + (\log_{10}1 - 1)\cdot 2\cdot (10\cdot 0.01 + 0.01) + ((\frac{33000}{33000} + 2\cdot 2 +}}&lt;br /&gt;
:::{{Формула|f=+ 33000\cdot(1 - \frac{2}{33000}))\cdot 0.01 + (2\cdot 1\cdot \log_{10}\cdot 1)\cdot 10 + (1 + 0)\cdot 10 = 340}} мс&lt;br /&gt;
::{{Формула|f=C = min(C_1, C_2) = 340}}&lt;br /&gt;
::{{Формула|f=C = str[1].Z + str[2].Z + C = 0.32 + 11000 + 340 = 11340.32}} мс&lt;br /&gt;
::{{Формула|f=C_{I/O} = str[1].ZIO + str[2].ZIO + C_{I/O2} = 0.3 + 10000 + 10 = 10010.3}} мс&lt;br /&gt;
::{{Формула|f=T(Q_1\bowtie Q_2) = \frac{T(Q_1)\cdot T(Q_2)}{max(I(Q_1, a), I(Q_2, a))} = \frac{2\cdot 33000}{max(2, 33000)} =2}}&lt;br /&gt;
::{{Формула|f=B(Q_1\bowtie Q_2) = \lceil\frac{2}{1000}\rceil= 1}}&lt;br /&gt;
::{{Формула|f=I(Q_1\bowtie Q_2, a) = min(I(Q_1, a), I(Q_2, a)) = min(2, 33000) = 2}}&lt;br /&gt;
::{{Формула|f=str[3] = \{\{Q_1, Q_2\}, \{Q_1\}, \{Q_2\}, 11340, 10010, \{2, 1, \{2\}, 2\}\} }}&lt;br /&gt;
&lt;br /&gt;
:б)&lt;br /&gt;
::структура остаётся такая же&lt;br /&gt;
&lt;br /&gt;
3) {{Формула|f=OptPlanReturn}} - вывод оптимального плана и представление этого плана в графическом виде.&lt;br /&gt;
&lt;br /&gt;
:1) {{Формула|f=(Q_1, Q_2) = Q_1\bowtie Q_2}}&lt;br /&gt;
:2) {{Формула|f=Q_1 = (IndexScan() + Filter())}}&lt;br /&gt;
:3) {{Формула|f=Q_2 = (TableScan() + Filter())}}&lt;br /&gt;
&lt;br /&gt;
[[Категория:Теоретические основы реляционной алгебры (9 семестр)]]&lt;br /&gt;
[[Категория:Конспекты лекций и семинаров]]&lt;br /&gt;
[[Категория:Незаконченные конспекты]]&lt;/div&gt;</summary>
		<author><name>81.9.52.28</name></author>
	</entry>
	<entry>
		<id>https://iu5bmstu.ru/index.php?title=%D0%A2%D0%9E%D0%A0%D0%90_(9)_-_%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_%E2%84%967_-_%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_(%D0%BF%D1%80%D0%BE%D0%B4%D0%BE%D0%BB%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5)&amp;diff=2557</id>
		<title>ТОРА (9) - Лекция №7 - Алгоритм (продолжение)</title>
		<link rel="alternate" type="text/html" href="https://iu5bmstu.ru/index.php?title=%D0%A2%D0%9E%D0%A0%D0%90_(9)_-_%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_%E2%84%967_-_%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_(%D0%BF%D1%80%D0%BE%D0%B4%D0%BE%D0%BB%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5)&amp;diff=2557"/>
		<updated>2013-01-15T21:44:42Z</updated>

		<summary type="html">&lt;p&gt;81.9.52.28: /* Пример 1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Backward|l=ТОРА (9) - Лекция №6 - Алгоритм построения хорошей БД}}&lt;br /&gt;
&lt;br /&gt;
== Алгоритм синтеза &amp;quot;хорошей&amp;quot; БД ==&lt;br /&gt;
&lt;br /&gt;
=== Пример ===&lt;br /&gt;
&lt;br /&gt;
7) редуцирование атрибутов справа ФЗ, расположенной по иерархии выше&lt;br /&gt;
&lt;br /&gt;
: вычёркиваем в графе {{Формула|f=A}}&lt;br /&gt;
&lt;br /&gt;
: [[Файл:9sTORAl7pic1.png|link=9sTORAl7pic1.svg]]&lt;br /&gt;
&lt;br /&gt;
8)&lt;br /&gt;
&lt;br /&gt;
: нет ФЗ с пустой правой частью, потому шаг пропускаем.&lt;br /&gt;
&lt;br /&gt;
9)&lt;br /&gt;
&lt;br /&gt;
: {{Формула|f=\rho = (AB, BCD) = (R_1, R_2)}}&lt;br /&gt;
&lt;br /&gt;
10)&lt;br /&gt;
&lt;br /&gt;
:проверяем&lt;br /&gt;
&lt;br /&gt;
:* соединение без потерь&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=F = (A\rightarrow B, B\rightarrow A, AC\rightarrow D, BC\rightarrow D)}}&lt;br /&gt;
&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !! {{Формула|f=A}} !! {{Формула|f=B}} !! {{Формула|f=C}} !! {{Формула|f=D}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! {{Формула|f=AB}}&lt;br /&gt;
 | {{Формула|f=a}} || {{Формула|f=a}} || {{Формула|f=b_1}} || {{Формула|f=b_1}}&lt;br /&gt;
 |-&lt;br /&gt;
 ! {{Формула|f=BCD}}&lt;br /&gt;
 | {{Формула|f=b_2}} || {{Формула|f=a}} || {{Формула|f=a}} || {{Формула|f=a}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !! {{Формула|f=A}} !! {{Формула|f=B}} !! {{Формула|f=C}} !! {{Формула|f=D}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! {{Формула|f=AB}}&lt;br /&gt;
 | {{Формула|f=a}} || {{Формула|f=a}} || {{Формула|f=b_1}} || {{Формула|f=b_1}}&lt;br /&gt;
 |-&lt;br /&gt;
 ! {{Формула|f=BCD}}&lt;br /&gt;
 | bgcolor=&amp;quot;lime&amp;quot; | {{Формула|f=a}} || {{Формула|f=a}} || {{Формула|f=a}} || {{Формула|f=a}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
:Значит, {{Формула|f=\rho}} обладает сохранением без потерь.&lt;br /&gt;
&lt;br /&gt;
:* сохранение ФЗ&lt;br /&gt;
&lt;br /&gt;
:1-4)&lt;br /&gt;
&lt;br /&gt;
:: {{Формула|f=H = \varnothing}}, {{Формула|f=УНП = (A\rightarrow B, B\rightarrow A, AC\rightarrow BD, BC\rightarrow AD)}}&lt;br /&gt;
:: {{Формула|f=H = (AC\rightarrow BD, BC\rightarrow A)}}&lt;br /&gt;
&lt;br /&gt;
:5)&lt;br /&gt;
&lt;br /&gt;
:: {{Формула|f=H\neq\varnothing}}&lt;br /&gt;
&lt;br /&gt;
:6)&lt;br /&gt;
&lt;br /&gt;
:: выполняется ли {{Формула|f=AC\rightarrow BDE\in(A\rightarrow B, B\rightarrow A, BC\rightarrow D)^+}}?&lt;br /&gt;
:: {{Формула|f=(AC)^+ = ACBD}}, {{Формула|f=BD\subset(AC)^+}}&lt;br /&gt;
:: выполняется ли {{Формула|f=BC\rightarrow A\in(A\rightarrow B, B\rightarrow A, BC\rightarrow D)^+}}?&lt;br /&gt;
:: {{Формула|f=(BC)^+ = BCAD}}, {{Формула|f=A\subset(BC)^+}}&lt;br /&gt;
:: значит, {{Формула|f=\rho}} обладает сохранением ФЗ.&lt;br /&gt;
&lt;br /&gt;
:На практике, частно пренебрегают свойством сохранения ФЗ, если в БД вводятся правильные данные - не надо проверять, противоречат ли эти данные исходной ФЗ.&lt;br /&gt;
&lt;br /&gt;
Таким образом, {{Формула|f=\rho}} обладает:&lt;br /&gt;
* обладает соединением без потерь;&lt;br /&gt;
* обладает сохранением ФЗ;&lt;br /&gt;
* точно находится в 3НФ.&lt;br /&gt;
&lt;br /&gt;
Но мы всё равно проверим, находятся ли {{Формула|f=R_1}} и {{Формула|f=R_2}} в [[ТОРА_(9)_-_Лекция_№6_-_Алгоритм_построения_хорошей_БД#Нормальная_форма_Бойса-Кодда | 3НФ Бойса-Кодда]]:&lt;br /&gt;
&lt;br /&gt;
: {{Формула|f=R_1 = AB}}:&lt;br /&gt;
:: {{Формула|f=A\rightarrow B}}, {{Формула|f=B\rightarrow A}}&lt;br /&gt;
:: здесь {{Формула|f=A}} - ключ и {{Формула|f=B}} - ключ.&lt;br /&gt;
:: значит, находится в НФ.&lt;br /&gt;
&lt;br /&gt;
: {{Формула|f=R_2 = BCD}}:&lt;br /&gt;
:: {{Формула|f=BC\rightarrow D}}&lt;br /&gt;
:: {{Формула|f=BC}} - ключ.&lt;br /&gt;
:: значит, находится в НФ.&lt;br /&gt;
&lt;br /&gt;
=== Преимущество и недостатки алгоритма ===&lt;br /&gt;
&lt;br /&gt;
==== Преимущество ====&lt;br /&gt;
&lt;br /&gt;
Алгоритм определяет стандартную (математическую) процедуру построения схемы БД.&lt;br /&gt;
&lt;br /&gt;
==== Недостатки ====&lt;br /&gt;
&lt;br /&gt;
* очень трудно определить всё множество ФЗ, а алгоритм критичен к набору этих ФЗ. В приципе, надо строить абстрактный экземпляр отношений ([[ТОРА_(9)_-_Семинар_№2_-_Функциональные_зависимости#Задача №2 - Как выявлять ФЗ|семинар №2]]), но надо знать и предметную область;&lt;br /&gt;
* при увеличении числа ФЗ возможно увеличение сложности вычисления алгоритма.&lt;br /&gt;
&lt;br /&gt;
Эти недостатки сдерживают применение алгоритма на практике.&lt;br /&gt;
&lt;br /&gt;
== Практические приёмы нормализации ==&lt;br /&gt;
&lt;br /&gt;
Кроме алгоритма есть практические приёмы нормализации схемы отношений.&lt;br /&gt;
&lt;br /&gt;
=== Нормальные формы ===&lt;br /&gt;
&lt;br /&gt;
==== 1НФ ====&lt;br /&gt;
&lt;br /&gt;
Схема отношений находится в 1НФ, если не содержит таблицу или вектор в явном виде. Поэтому, если таблица скрыта в объекте, то схема будет в 1НФ;&lt;br /&gt;
&lt;br /&gt;
==== 2НФ ====&lt;br /&gt;
&lt;br /&gt;
Схема отношений находится в 2НФ, если не существует ключа {{Формула|f=X}}, подмножества атрибутов {{Формула|f=Y\subset X}} и непервичного атрибута {{Формула|f=H}}, для которых выполняются условия:&lt;br /&gt;
* {{Формула|f=X\rightarrow Y}};&lt;br /&gt;
* {{Формула|f=Y\rightarrow H}};&lt;br /&gt;
* {{Формула|f=Y\nrightarrow X}}.&lt;br /&gt;
&lt;br /&gt;
[[Файл:9sTORAl7pic2.png|link=Файл:9sTORAl7pic2.svg]]&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=A_1\rightarrow A_i ... A_j}}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=X = A_1 A_2}}, {{Формула|f=Y = A_1\subset X}}, {{Формула|f=H\in(A_i ... A_j)}}:&lt;br /&gt;
:1) {{Формула|f=X\rightarrow Y}}, так как {{Формула|f=A_1 A_2\rightarrow A_1}}&lt;br /&gt;
:2) {{Формула|f=Y\rightarrow H}}, так как {{Формула|f=A_1\rightarrow A_i ... A_j}}&lt;br /&gt;
:3) {{Формула|f=Y\nrightarrow X}}, так как {{Формула|f=A_1^+ = A_1 A_i ... A_j}}, {{Формула|f=X\nsubseteq Y^+}}&lt;br /&gt;
&lt;br /&gt;
==== 3НФ ====&lt;br /&gt;
&lt;br /&gt;
Подробнее [[ТОРА (9) - Лекция №5 - Третья нормальная форма#Третья нормальная форма | на лекции №5]].&lt;br /&gt;
&lt;br /&gt;
[[Файл:9sTORAl7pic3.png|link=Файл:9sTORAl7pic3.svg]]&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=A_2\rightarrow A_i ... A_j}}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=X = A_1}}, {{Формула|f=Y = A_2}}, {{Формула|f=H\in(A_i ... A_j)}}:&lt;br /&gt;
:1) {{Формула|f=X\rightarrow Y}}, так как {{Формула|f=A_1\rightarrow A_2}}&lt;br /&gt;
:2) {{Формула|f=Y\rightarrow H}}, так как {{Формула|f=A_2\rightarrow A_i ... A_j}}&lt;br /&gt;
:3) {{Формула|f=Y\nrightarrow X}}, так как {{Формула|f=A_2^+ = A_2 A_i ... A_j}}, {{Формула|f=X = A_1\notin Y^+}}&lt;br /&gt;
&lt;br /&gt;
=== Пример 1 ===&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=R}} - схема отношения &amp;quot;Сотрудники&amp;quot;.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! {{Формула|f=A_1}}&lt;br /&gt;
 | табельный номер&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! {{Формула|f=A_5}}&lt;br /&gt;
 | номер заказа&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! {{Формула|f=A_2}}&lt;br /&gt;
 | ФИО&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! {{Формула|f=A_3}}&lt;br /&gt;
 | должность&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! {{Формула|f=A_4}}&lt;br /&gt;
 | оклад&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
ФЗ: &lt;br /&gt;
:{{Формула|f=A_1 A_5\rightarrow A_2 A_3 A_4}}&lt;br /&gt;
:{{Формула|f=A_1\rightarrow A_2 A_3 A_4}}&lt;br /&gt;
:{{Формула|f=A_3\rightarrow A_4}}&lt;br /&gt;
&lt;br /&gt;
Покажем, что эта схема не находится в 2НФ:&lt;br /&gt;
&lt;br /&gt;
Можно найти ключ {{Формула|f=X = A_1 A_5}}, {{Формула|f=Y = A_1\subset X}}, {{Формула|f=H\notin Y}}, {{Формула|f=H\in(A_2, A_3, A_4)}}:&lt;br /&gt;
:1) {{Формула|f=X\rightarrow Y}}&lt;br /&gt;
:2) {{Формула|f=Y\rightarrow H}}&lt;br /&gt;
:3) {{Формула|f=Y\nrightarrow X}}&lt;br /&gt;
&lt;br /&gt;
[[Файл:9sTORAl7pic4.png|link=Файл:9sTORAl7pic4.svg]]&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=R_1}} тоже не находится во 2НФ, потому что {{Формула|f=X = A_1}}, {{Формула|f=Y = A_3}}, {{Формула|f=H = A_4}}:&lt;br /&gt;
:1) {{Формула|f=X\rightarrow Y}}&lt;br /&gt;
:2) {{Формула|f=Y\rightarrow H}}&lt;br /&gt;
:3) {{Формула|f=Y\nrightarrow X}}&lt;br /&gt;
&lt;br /&gt;
[[Файл:9sTORAl7pic5.png|link=Файл:9sTORAl7pic5.svg]]&lt;br /&gt;
&lt;br /&gt;
Предположим, вдруг оказалось, что сотрудник может занимать несколько должностей, и ещё теперь в таблице надо хранить сведения о заказе. В этом случае схема преобразуется к следующему виду:&lt;br /&gt;
&lt;br /&gt;
[[Файл:9sTORAl7pic6.png|link=Файл:9sTORAl7pic6.svg]]&lt;br /&gt;
&lt;br /&gt;
Но анализ показывает, что в этом случае таблицы {{Формула|f=R_1}} и {{Формула|f=R_2}} не находятся в 2НФ:&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=R_1}}:&lt;br /&gt;
:{{Формула|f=A_1\rightarrow A_2}}, {{Формула|f=X = A_1 A_3}}, {{Формула|f=Y = A_1\subset X}}, {{Формула|f=H = A_2}}&lt;br /&gt;
:1) {{Формула|f=X\rightarrow Y}}, так как {{Формула|f=A_1 A_3\rightarrow A_1}}&lt;br /&gt;
:2) {{Формула|f=Y\rightarrow H}}, так как {{Формула|f=A_1\rightarrow A_2}}&lt;br /&gt;
:3) {{Формула|f=Y\nrightarrow X}}, так как {{Формула|f=Y^+ = A_1 A_2}}, {{Формула|f=X\nsubseteq Y^+}}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=R_2}}:&lt;br /&gt;
:{{Формула|f=A_5\rightarrow A_6}}, {{Формула|f=X = A_1 A_3 A_5}}, {{Формула|f=Y = A_5\subset X}}, {{Формула|f=H = A_6}}&lt;br /&gt;
:1) {{Формула|f=X\rightarrow Y}}, так как {{Формула|f=A_1 A_3 A_5\rightarrow A_5}}&lt;br /&gt;
:2) {{Формула|f=Y\rightarrow H}}, так как {{Формула|f=A_5\rightarrow A_6}}&lt;br /&gt;
:3) {{Формула|f=Y\nrightarrow X}}, так как {{Формула|f=Y^+ = A_5 A_6}}, {{Формула|f=X = A_1 A_3 A_5\nsubseteq Y^+}}&lt;br /&gt;
&lt;br /&gt;
{{Forward|l=ТОРА (9) - Лекция №8 - Алгоритм (продолжение)}}&lt;br /&gt;
&lt;br /&gt;
[[Категория:Теоретические основы реляционной алгебры (9 семестр)]]&lt;br /&gt;
[[Категория:Конспекты лекций и семинаров]]&lt;/div&gt;</summary>
		<author><name>81.9.52.28</name></author>
	</entry>
	<entry>
		<id>https://iu5bmstu.ru/index.php?title=%D0%A2%D0%9E%D0%A0%D0%90_(9)_-_%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_%E2%84%964_-_%D0%A5%D0%BE%D1%80%D0%BE%D1%88%D0%B0%D1%8F_%D1%81%D1%85%D0%B5%D0%BC%D0%B0_%D0%91%D0%94_-_%D0%A1%D0%BE%D1%85%D1%80%D0%B0%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D0%A4%D0%97&amp;diff=2544</id>
		<title>ТОРА (9) - Лекция №4 - Хорошая схема БД - Сохранение ФЗ</title>
		<link rel="alternate" type="text/html" href="https://iu5bmstu.ru/index.php?title=%D0%A2%D0%9E%D0%A0%D0%90_(9)_-_%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_%E2%84%964_-_%D0%A5%D0%BE%D1%80%D0%BE%D1%88%D0%B0%D1%8F_%D1%81%D1%85%D0%B5%D0%BC%D0%B0_%D0%91%D0%94_-_%D0%A1%D0%BE%D1%85%D1%80%D0%B0%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D0%A4%D0%97&amp;diff=2544"/>
		<updated>2013-01-14T22:34:42Z</updated>

		<summary type="html">&lt;p&gt;81.9.52.28: /* Доказательство */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Продолжение [[ТОРА_(9)_-_Лекция_№3_-_Хорошая_схема_БД_-_Соединение_без_потерь | предыдущей лекции]].&lt;br /&gt;
&lt;br /&gt;
== Свойства &amp;quot;хорошей&amp;quot; схемы БД ==&lt;br /&gt;
&lt;br /&gt;
=== Соединение без потерь ===&lt;br /&gt;
&lt;br /&gt;
==== Теорема о свойстве соединения без потерь ====&lt;br /&gt;
&lt;br /&gt;
Пусть {{Формула|f=\rho=(R_1, R_2)}} и {{Формула|f=F}} - множество ФЗ.&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=\rho}} обладает свойством соединения без потерь тогда и только тогда, когда выполняется хотя бы одно из:&lt;br /&gt;
* {{Формула|f=R_1\bigcap R_2\rightarrow R_1 - R_2}} (1)&lt;br /&gt;
* {{Формула|f=R_1\bigcap R_2\rightarrow R_2 - R_1}} (2)&lt;br /&gt;
&lt;br /&gt;
===== Доказательство =====&lt;br /&gt;
&lt;br /&gt;
1)&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! rowspan=&amp;quot;2&amp;quot; | !! colspan=&amp;quot;3&amp;quot; | {{Формула|f=R_1 - R_2}} !! colspan=&amp;quot;3&amp;quot; | {{Формула|f=R_1\bigcap R_2}} || colspan=&amp;quot;3&amp;quot; | {{Формула|f=R_2 - R_1}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! {{Формула|f=A_1}} !! ... !! {{Формула|f=A_k}} !! {{Формула|f=A_{k+1} }} !! ... !! {{Формула|f=A_m}} !! {{Формула|f=A_{m+1} }} !! ... !! {{Формула|f=A_n}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | {{Формула|f=R_1}} || {{Формула|f=a}} || ... || {{Формула|f=a}} || {{Формула|f=a}} || ... || {{Формула|f=a}} || {{Формула|f=b_1}} || ... || {{Формула|f=b_1}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | {{Формула|f=R_2}} || {{Формула|f=b_2}} || ... || {{Формула|f=b_2}} || {{Формула|f=a}} || ... || {{Формула|f=a}} || {{Формула|f=a}} || ... || {{Формула|f=a}}&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! rowspan=&amp;quot;2&amp;quot; | !! colspan=&amp;quot;3&amp;quot; | {{Формула|f=R_1 - R_2}} !! colspan=&amp;quot;3&amp;quot; | {{Формула|f=R_1\bigcap R_2}} || colspan=&amp;quot;3&amp;quot; | {{Формула|f=R_2 - R_1}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! {{Формула|f=A_1}} !! ... !! {{Формула|f=A_k}} !! {{Формула|f=A_{k+1} }} !! ... !! {{Формула|f=A_m}} !! {{Формула|f=A_{m+1} }} !! ... !! {{Формула|f=A_n}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | {{Формула|f=R_1}} || {{Формула|f=a}} || ... || {{Формула|f=a}} || {{Формула|f=a}} || ... || {{Формула|f=a}} || {{Формула|f=b_1}} || ... || {{Формула|f=b_1}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | {{Формула|f=R_2}} || bgcolor=&amp;quot;lime&amp;quot; | {{Формула|f=a}} || ... || bgcolor=&amp;quot;lime&amp;quot; | {{Формула|f=a}} || {{Формула|f=a}} || ... || {{Формула|f=a}} || {{Формула|f=a}} || ... || {{Формула|f=a}}&lt;br /&gt;
 |} &lt;br /&gt;
 &lt;br /&gt;
:Получили строку, сплошь состоящую из {{Формула|f=a}}.&lt;br /&gt;
 &lt;br /&gt;
2)&lt;br /&gt;
&lt;br /&gt;
:Теперь докажем обратное, что если {{Формула|f=\rho}} обладает соединением без потерь, то имеет место одна из ФЗ: (1) или (2).&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=r=\Pi_{R_1}(r)\bowtie\Pi_{R_2}(r)}} (3)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=r}} - это {{Формула|f=R_1\bigcup R_2}} (экземпляр универсальной схемы отношений)&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! {{Формула|f=R_1 - R_2}} !! {{Формула|f=R_1\bigcap R_2}} !! {{Формула|f=R_2 - R_1}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | {{Формула|f=a_1}} || {{Формула|f=b_1}} || {{Формула|f=c_1}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | {{Формула|f=a_2}} || {{Формула|f=b_2}} || {{Формула|f=c_2}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | ... || ... || ...&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | {{Формула|f=a_n}} || {{Формула|f=b_n}} || {{Формула|f=c_n}}&lt;br /&gt;
 |}&lt;br /&gt;
 &lt;br /&gt;
{|&lt;br /&gt;
  | valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !! {{Формула|f=R_1 - R_2}} !! {{Формула|f=R_1\bigcap R_2}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | rowspan=&amp;quot;4&amp;quot; | {{Формула|f=\Pi_{R_1}(r)}} || {{Формула|f=a_1}} || {{Формула|f=b_1}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | {{Формула|f=a_2}} || {{Формула|f=b_2}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | ... || ...&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | {{Формула|f=a_n}} || {{Формула|f=b_n}}&lt;br /&gt;
 |}&lt;br /&gt;
 |&lt;br /&gt;
 | valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
 |&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !! {{Формула|f=R_1\bigcap R_2}} !! {{Формула|f=R_2 - R_1}} &lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | rowspan=&amp;quot;4&amp;quot; | {{Формула|f=\Pi_{R_2}(r)}} || {{Формула|f=b_1}} || {{Формула|f=c_1}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | {{Формула|f=b_2}} || {{Формула|f=c_2}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | ... || ...&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | {{Формула|f=b_n}} || {{Формула|f=c_n}}&lt;br /&gt;
 |}&lt;br /&gt;
|}&lt;br /&gt;
 &lt;br /&gt;
:Если выполняется равенство (3), то возможны два варианта:&lt;br /&gt;
:1) {{Формула|f=b_i\neq b_j}}, {{Формула|f=i\neq j}};&amp;lt;br&amp;gt;&lt;br /&gt;
:2) некоторые {{Формула|f=b_i}} совпадают, {{Формула|f=b_1 = b_2}}.&lt;br /&gt;
&lt;br /&gt;
:Тогда для выполнения равенства (3) необходимо, чтобы выполнялось одно из двух:&lt;br /&gt;
:* {{Формула|f=a_1 = a_2}};&lt;br /&gt;
:* {{Формула|f=c_1 = c_2}}.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !! {{Формула|f=R_1 - R_2}} !! {{Формула|f=R_1\bigcap R_2}} !! {{Формула|f=R_2 - R_1}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | rowspan=&amp;quot;6&amp;quot; | {{Формула|f=\Pi_{R_1}(r)\bowtie\Pi_{R_2}(r)}} || {{Формула|f=a_1}} || {{Формула|f=b_1}} || {{Формула|f=c_1}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot; bgcolor=&amp;quot;#FFB6C1&amp;quot;&lt;br /&gt;
 | {{Формула|f=a_1}} || {{Формула|f=b_1(=b_2)}} || {{Формула|f=c_2}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot; bgcolor=&amp;quot;#FFB6C1&amp;quot;&lt;br /&gt;
 | {{Формула|f=a_2}} || {{Формула|f=b_2(=b_1)}} || {{Формула|f=c_1}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | {{Формула|f=a_2}} || {{Формула|f=b_2}} || {{Формула|f=c_2}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | {{Формула|f=a_3}} || {{Формула|f=b_3}} || {{Формула|f=c_3}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | ... || ... || ...&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | {{Формула|f=N+2}} || {{Формула|f=a_n}} || {{Формула|f=b_n}} || {{Формула|f=c_n}}&lt;br /&gt;
 |}&lt;br /&gt;
 &lt;br /&gt;
:2 и 3 кортежи - лишние. Чтобы они не были лишними, они должны совпадать с одним из других кортежей, чтобы их можно было вычеркнуть.&lt;br /&gt;
&lt;br /&gt;
:Предположим, {{Формула|f=a_1 = a_2}}, тогда что-то там насовпадало и 2 и 3 кортежи можно вычеркнуть.&lt;br /&gt;
&lt;br /&gt;
:Аналогичные рассуждения можно провести для случая, когда {{Формула|f=c_1 = c_2}}, но тогда получаем:&lt;br /&gt;
:* для варианта {{Формула|f=b_i\neq b_j}} имеют место обе ФЗ : (1) и (2);&lt;br /&gt;
:* для варианта с некоторыми совпадающими {{Формула|f=b_i}} работает либо (1), либо (2).&lt;br /&gt;
&lt;br /&gt;
:Всё, теорема доказана.&lt;br /&gt;
&lt;br /&gt;
===== Следствие из теоремы =====&lt;br /&gt;
&lt;br /&gt;
Пусть {{Формула|f=R_1}} и {{Формула|f=R_2}} - это сущности БД и они связаны между собой. Тогда схема БД обладает соединением без потерь, если общий атрибут {{Формула|f=R_1}} и {{Формула|f=R_2}} содержит ключ одной из этих схем отношений.&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=R_1\bigcap R_2 = A}}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=R_1 - R_2 = B}}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=R_1\bigcap R_2\rightarrow R_1 - R_2}}, потому что {{Формула|f=A\rightarrow B}}, так как является ключом.&lt;br /&gt;
&lt;br /&gt;
== Свойство сохранения ФЗ ==&lt;br /&gt;
&lt;br /&gt;
Пусть дана схема БД {{Формула|f=\rho=(R_1 ... R_n)}} и {{Формула|f=F}} - множество ФЗ.&lt;br /&gt;
&lt;br /&gt;
Проекцией {{Формула|f=F}} на {{Формула|f=R_i}} называется такое множество ФЗ, принадлежащее {{Формула|f=F^+}}, что {{Формула|f=XY\subseteq R_i}}, {{Формула|f=\Pi_{R_i}(F)}}&lt;br /&gt;
&lt;br /&gt;
Схема {{Формула|f=\rho}} обладает свойство сохранения ФЗ, если:&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=(\bigcup_{i=1}^n\Pi_{R_i}(F))^+ = F^+}} - ФЗ могут быть декомпозированны по схеме отношений (тогда проверку надо будет выполнять только в рамках отдельных таблиц при включении новой записи).&lt;br /&gt;
&lt;br /&gt;
=== Пример схемы БД без свойства сохранения ФЗ ===&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=R=(A,B,C)}} - универсальная схема отношений.&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=F=(A\rightarrow B, B\rightarrow C)}}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=\rho=(AB, AC)=(R_1, R_2)}}&lt;br /&gt;
&lt;br /&gt;
Надо доказать, что {{Формула|f=\rho}} не обладает свойством сохранения ФЗ.&lt;br /&gt;
&lt;br /&gt;
Первая проекция: {{Формула|f=\Pi_{R_1}(F) = F_1 = (A\rightarrow A, B\rightarrow B, AB\rightarrow A, AB\rightarrow B, AB\rightarrow AB, A\rightarrow B, A\rightarrow AB)}}&lt;br /&gt;
&lt;br /&gt;
Вторая проекция: {{Формула|f=\Pi_{R_2}(F) = F_2 = (A\rightarrow A, C\rightarrow C, AC\rightarrow A, AC\rightarrow C, AC\rightarrow AC, A\rightarrow C, A\rightarrow AC)}}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=B\rightarrow C\in F^+}} по определению.&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=B\rightarrow C\notin (F_1\bigcup F_2)^+}} - не работает, так что эта БД не обладает свойством сохранения ФЗ.&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=B^+ = B}}, {{Формула|f=C\notin B^+}}&lt;br /&gt;
&lt;br /&gt;
=== Пример схемы БД со свойством сохранения ФЗ ===&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=R=(A,B,C)}} - универсальная схема отношений.&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=F=(A\rightarrow B, B\rightarrow C)}}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=\rho=(AB, BC)=(R_1, R_2)}}&lt;br /&gt;
&lt;br /&gt;
Надо доказать, что {{Формула|f=\rho}} обладает свойством сохранения ФЗ.&lt;br /&gt;
&lt;br /&gt;
Первая проекция: {{Формула|f=\Pi_{R_1}(F) = F_1 = (}}тривиальные ФЗ, {{Формула|f=A\rightarrow B, A\rightarrow AB)}}&lt;br /&gt;
&lt;br /&gt;
Вторая проекция: {{Формула|f=\Pi_{R_2}(F) = F_2 = (}}тривиальные ФЗ, {{Формула|f=B\rightarrow C, B\rightarrow BC)}}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=(F_1\bigcup F_2)^+ = (}}тривиальные ФЗ, {{Формула|f=A\rightarrow B, A\rightarrow AB, B\rightarrow C, B\rightarrow BC, A\rightarrow C, A\rightarrow AC)}}, а это и есть по определению само {{Формула|f=F^+}}, что и доказывает, что данная схема БД обладает свойством сохранения ФЗ.&lt;br /&gt;
&lt;br /&gt;
=== Алгоритм проверки схемы БД на обладание свойством сохранения ФЗ ===&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=\rho = (R_1 ... R_n)}}&lt;br /&gt;
&lt;br /&gt;
Алгоритм:&lt;br /&gt;
# построить условно-неизбыточное покрытие (УНП), взять {{Формула|f=H = \varnothing}};&lt;br /&gt;
# каждую ФЗ из УНП заменить на совокупность ФЗ с одним атрибутом в правой части, то есть заменить {{Формула|f=X\rightarrow A_1}} ... {{Формула|f=X\rightarrow A_k}} на {{Формула|f=Y = A_1 ... A_k}}. Обозначить полученную ФЗ как {{Формула|f=G}};&lt;br /&gt;
# выбрать очередную ФЗ из {{Формула|f=G}}. Найти такую схему отношения {{Формула|f=R_i}}, для которой справедливо включение {{Формула|f=XA\subseteq R_i}}. Если такой схемы отношений не существует, то поместить ФЗ {{Формула|f=X\rightarrow A}} в множество {{Формула|f=H}};&lt;br /&gt;
# если все ФЗ из {{Формула|f=G}} рассмотрены, то перейти к следующему пункту, иначе к предыдущему;&lt;br /&gt;
# если {{Формула|f=H}} пусто, то завершить алгоритм. &amp;lt;u&amp;gt;{{Формула|f=\rho}} обладает свойством сохранения ФЗ&amp;lt;/u&amp;gt;. Иначе перейти к следующему пункту;&lt;br /&gt;
# просмотреть все ФЗ из {{Формула|f=H}}. Если какая-либо ФЗ {{Формула|f=X\rightarrow A \in H}} не выводится из множества {{Формула|f=G - H}}, то завершить алгоритм. &amp;lt;u&amp;gt;{{Формула|f=\rho}} не обладает свойством сохранения ФЗ&amp;lt;/u&amp;gt;. Иначе завершить алгоритм, и тогда &amp;lt;u&amp;gt;{{Формула|f=\rho}} обладает свойством сохранения ФЗ&amp;lt;/u&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Категория:Теоретические основы реляционной алгебры (9 семестр)]]&lt;br /&gt;
[[Категория:Конспекты лекций и семинаров]]&lt;/div&gt;</summary>
		<author><name>81.9.52.28</name></author>
	</entry>
	<entry>
		<id>https://iu5bmstu.ru/index.php?title=%D0%A2%D0%9E%D0%A0%D0%90_(9)_-_%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_%E2%84%964_-_%D0%A5%D0%BE%D1%80%D0%BE%D1%88%D0%B0%D1%8F_%D1%81%D1%85%D0%B5%D0%BC%D0%B0_%D0%91%D0%94_-_%D0%A1%D0%BE%D1%85%D1%80%D0%B0%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D0%A4%D0%97&amp;diff=2543</id>
		<title>ТОРА (9) - Лекция №4 - Хорошая схема БД - Сохранение ФЗ</title>
		<link rel="alternate" type="text/html" href="https://iu5bmstu.ru/index.php?title=%D0%A2%D0%9E%D0%A0%D0%90_(9)_-_%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_%E2%84%964_-_%D0%A5%D0%BE%D1%80%D0%BE%D1%88%D0%B0%D1%8F_%D1%81%D1%85%D0%B5%D0%BC%D0%B0_%D0%91%D0%94_-_%D0%A1%D0%BE%D1%85%D1%80%D0%B0%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D0%A4%D0%97&amp;diff=2543"/>
		<updated>2013-01-14T22:14:08Z</updated>

		<summary type="html">&lt;p&gt;81.9.52.28: /* Доказательство */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Продолжение [[ТОРА_(9)_-_Лекция_№3_-_Хорошая_схема_БД_-_Соединение_без_потерь | предыдущей лекции]].&lt;br /&gt;
&lt;br /&gt;
== Свойства &amp;quot;хорошей&amp;quot; схемы БД ==&lt;br /&gt;
&lt;br /&gt;
=== Соединение без потерь ===&lt;br /&gt;
&lt;br /&gt;
==== Теорема о свойстве соединения без потерь ====&lt;br /&gt;
&lt;br /&gt;
Пусть {{Формула|f=\rho=(R_1, R_2)}} и {{Формула|f=F}} - множество ФЗ.&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=\rho}} обладает свойством соединения без потерь тогда и только тогда, когда выполняется хотя бы одно из:&lt;br /&gt;
* {{Формула|f=R_1\bigcap R_2\rightarrow R_1 - R_2}} (1)&lt;br /&gt;
* {{Формула|f=R_1\bigcap R_2\rightarrow R_2 - R_1}} (2)&lt;br /&gt;
&lt;br /&gt;
===== Доказательство =====&lt;br /&gt;
&lt;br /&gt;
1)&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! rowspan=&amp;quot;2&amp;quot; | !! colspan=&amp;quot;3&amp;quot; | {{Формула|f=R_1 - R_2}} !! colspan=&amp;quot;3&amp;quot; | {{Формула|f=R_1\bigcap R_2}} || colspan=&amp;quot;3&amp;quot; | {{Формула|f=R_2 - R_1}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! {{Формула|f=A_1}} !! ... !! {{Формула|f=A_k}} !! {{Формула|f=A_{k+1} }} !! ... !! {{Формула|f=A_m}} !! {{Формула|f=A_{m+1} }} !! ... !! {{Формула|f=A_n}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | {{Формула|f=R_1}} || {{Формула|f=a}} || ... || {{Формула|f=a}} || {{Формула|f=a}} || ... || {{Формула|f=a}} || {{Формула|f=b_1}} || ... || {{Формула|f=b_1}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | {{Формула|f=R_2}} || {{Формула|f=b_2}} || ... || {{Формула|f=b_2}} || {{Формула|f=a}} || ... || {{Формула|f=a}} || {{Формула|f=a}} || ... || {{Формула|f=a}}&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! rowspan=&amp;quot;2&amp;quot; | !! colspan=&amp;quot;3&amp;quot; | {{Формула|f=R_1 - R_2}} !! colspan=&amp;quot;3&amp;quot; | {{Формула|f=R_1\bigcap R_2}} || colspan=&amp;quot;3&amp;quot; | {{Формула|f=R_2 - R_1}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! {{Формула|f=A_1}} !! ... !! {{Формула|f=A_k}} !! {{Формула|f=A_{k+1} }} !! ... !! {{Формула|f=A_m}} !! {{Формула|f=A_{m+1} }} !! ... !! {{Формула|f=A_n}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | {{Формула|f=R_1}} || {{Формула|f=a}} || ... || {{Формула|f=a}} || {{Формула|f=a}} || ... || {{Формула|f=a}} || {{Формула|f=b_1}} || ... || {{Формула|f=b_1}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | {{Формула|f=R_2}} || bgcolor=&amp;quot;lime&amp;quot; | {{Формула|f=a}} || ... || bgcolor=&amp;quot;lime&amp;quot; | {{Формула|f=a}} || {{Формула|f=a}} || ... || {{Формула|f=a}} || {{Формула|f=a}} || ... || {{Формула|f=a}}&lt;br /&gt;
 |} &lt;br /&gt;
 &lt;br /&gt;
:Получили строку, сплошь состоящую из {{Формула|f=a}}.&lt;br /&gt;
 &lt;br /&gt;
2)&lt;br /&gt;
&lt;br /&gt;
:Теперь докажем обратное, что если {{Формула|f=\rho}} обладает соединением без потерь, то имеет место одна из ФЗ: (1) или (2).&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=r=\Pi_{R_1}(r)\bowtie\Pi_{R_2}(r)}} (3)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=r}} - это {{Формула|f=R_1\bigcup R_2}} (экземпляр универсальной схемы отношений)&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! {{Формула|f=R_1 - R_2}} !! {{Формула|f=R_1\bigcap R_2}} !! {{Формула|f=R_2 - R_1}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | {{Формула|f=a_1}} || {{Формула|f=b_1}} || {{Формула|f=c_1}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | {{Формула|f=a_2}} || {{Формула|f=b_2}} || {{Формула|f=c_2}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | ... || ... || ...&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | {{Формула|f=a_n}} || {{Формула|f=b_n}} || {{Формула|f=c_n}}&lt;br /&gt;
 |}&lt;br /&gt;
 &lt;br /&gt;
{|&lt;br /&gt;
  | valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !! {{Формула|f=R_1 - R_2}} !! {{Формула|f=R_1\bigcap R_2}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | rowspan=&amp;quot;4&amp;quot; | {{Формула|f=\Pi_{R_1}(r)}} || {{Формула|f=a_1}} || {{Формула|f=b_1}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | {{Формула|f=a_2}} || {{Формула|f=b_2}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | ... || ...&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | {{Формула|f=a_n}} || {{Формула|f=b_n}}&lt;br /&gt;
 |}&lt;br /&gt;
 |&lt;br /&gt;
 | valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
 |&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !! {{Формула|f=R_1\bigcap R_2}} !! {{Формула|f=R_2 - R_1}} &lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | rowspan=&amp;quot;4&amp;quot; | {{Формула|f=\Pi_{R_2}(r)}} || {{Формула|f=b_1}} || {{Формула|f=c_1}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | {{Формула|f=b_2}} || {{Формула|f=c_2}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | ... || ...&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | {{Формула|f=b_n}} || {{Формула|f=c_n}}&lt;br /&gt;
 |}&lt;br /&gt;
|}&lt;br /&gt;
 &lt;br /&gt;
:Если выполняется равенство (3), то возможны два варианта:&lt;br /&gt;
:1) {{Формула|f=b_i\neq b_j}}, {{Формула|f=i\neq j}};&amp;lt;br&amp;gt;&lt;br /&gt;
:2) некоторые {{Формула|f=b_i}} совпадают, {{Формула|f=b_1 = b_2}}.&lt;br /&gt;
&lt;br /&gt;
:Тогда для выполнения равенства (3) необходимо, чтобы выполнялось одно из двух:&lt;br /&gt;
:* {{Формула|f=a_1 = a_2}};&lt;br /&gt;
:* {{Формула|f=c_1 = c_2}}.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !! {{Формула|f=R_1 - R_2}} !! {{Формула|f=R_1\bigcup R_2}} !! {{Формула|f=R_2 - R_1}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | rowspan=&amp;quot;6&amp;quot; | {{Формула|f=\Pi_{R_1}(r)\bowtie\Pi_{R_2}(r)}} || {{Формула|f=a_1}} || {{Формула|f=b_1}} || {{Формула|f=c_1}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot; bgcolor=&amp;quot;#FFB6C1&amp;quot;&lt;br /&gt;
 | {{Формула|f=a_1}} || {{Формула|f=b_1(=b_2)}} || {{Формула|f=c_2}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot; bgcolor=&amp;quot;#FFB6C1&amp;quot;&lt;br /&gt;
 | {{Формула|f=a_2}} || {{Формула|f=b_2(=b_1)}} || {{Формула|f=c_1}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | {{Формула|f=a_2}} || {{Формула|f=b_2}} || {{Формула|f=c_2}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | {{Формула|f=a_3}} || {{Формула|f=b_3}} || {{Формула|f=c_3}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | ... || ... || ...&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | {{Формула|f=N+2}} || {{Формула|f=a_n}} || {{Формула|f=b_n}} || {{Формула|f=c_n}}&lt;br /&gt;
 |}&lt;br /&gt;
 &lt;br /&gt;
:2 и 3 кортежи - лишние. Чтобы они не были лишними, они должны совпадать с одним из других кортежей, чтобы их можно было вычеркнуть.&lt;br /&gt;
&lt;br /&gt;
:Предположим, {{Формула|f=a_1 = a_2}}, тогда что-то там насовпадало и 2 и 3 кортежи можно вычеркнуть.&lt;br /&gt;
&lt;br /&gt;
:Аналогичные рассуждения можно провести для случая, когда {{Формула|f=c_1 = c_2}}, но тогда получаем:&lt;br /&gt;
:* для варианта {{Формула|f=b_i\neq b_j}} имеют место обе ФЗ : (1) и (2);&lt;br /&gt;
:* для варианта с некоторыми совпадающими {{Формула|f=b_i}} работает либо (1), либо (2).&lt;br /&gt;
&lt;br /&gt;
:Всё, теорема доказана.&lt;br /&gt;
&lt;br /&gt;
===== Следствие из теоремы =====&lt;br /&gt;
&lt;br /&gt;
Пусть {{Формула|f=R_1}} и {{Формула|f=R_2}} - это сущности БД и они связаны между собой. Тогда схема БД обладает соединением без потерь, если общий атрибут {{Формула|f=R_1}} и {{Формула|f=R_2}} содержит ключ одной из этих схем отношений.&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=R_1\bigcap R_2 = A}}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=R_1 - R_2 = B}}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=R_1\bigcap R_2\rightarrow R_1 - R_2}}, потому что {{Формула|f=A\rightarrow B}}, так как является ключом.&lt;br /&gt;
&lt;br /&gt;
== Свойство сохранения ФЗ ==&lt;br /&gt;
&lt;br /&gt;
Пусть дана схема БД {{Формула|f=\rho=(R_1 ... R_n)}} и {{Формула|f=F}} - множество ФЗ.&lt;br /&gt;
&lt;br /&gt;
Проекцией {{Формула|f=F}} на {{Формула|f=R_i}} называется такое множество ФЗ, принадлежащее {{Формула|f=F^+}}, что {{Формула|f=XY\subseteq R_i}}, {{Формула|f=\Pi_{R_i}(F)}}&lt;br /&gt;
&lt;br /&gt;
Схема {{Формула|f=\rho}} обладает свойство сохранения ФЗ, если:&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=(\bigcup_{i=1}^n\Pi_{R_i}(F))^+ = F^+}} - ФЗ могут быть декомпозированны по схеме отношений (тогда проверку надо будет выполнять только в рамках отдельных таблиц при включении новой записи).&lt;br /&gt;
&lt;br /&gt;
=== Пример схемы БД без свойства сохранения ФЗ ===&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=R=(A,B,C)}} - универсальная схема отношений.&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=F=(A\rightarrow B, B\rightarrow C)}}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=\rho=(AB, AC)=(R_1, R_2)}}&lt;br /&gt;
&lt;br /&gt;
Надо доказать, что {{Формула|f=\rho}} не обладает свойством сохранения ФЗ.&lt;br /&gt;
&lt;br /&gt;
Первая проекция: {{Формула|f=\Pi_{R_1}(F) = F_1 = (A\rightarrow A, B\rightarrow B, AB\rightarrow A, AB\rightarrow B, AB\rightarrow AB, A\rightarrow B, A\rightarrow AB)}}&lt;br /&gt;
&lt;br /&gt;
Вторая проекция: {{Формула|f=\Pi_{R_2}(F) = F_2 = (A\rightarrow A, C\rightarrow C, AC\rightarrow A, AC\rightarrow C, AC\rightarrow AC, A\rightarrow C, A\rightarrow AC)}}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=B\rightarrow C\in F^+}} по определению.&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=B\rightarrow C\notin (F_1\bigcup F_2)^+}} - не работает, так что эта БД не обладает свойством сохранения ФЗ.&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=B^+ = B}}, {{Формула|f=C\notin B^+}}&lt;br /&gt;
&lt;br /&gt;
=== Пример схемы БД со свойством сохранения ФЗ ===&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=R=(A,B,C)}} - универсальная схема отношений.&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=F=(A\rightarrow B, B\rightarrow C)}}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=\rho=(AB, BC)=(R_1, R_2)}}&lt;br /&gt;
&lt;br /&gt;
Надо доказать, что {{Формула|f=\rho}} обладает свойством сохранения ФЗ.&lt;br /&gt;
&lt;br /&gt;
Первая проекция: {{Формула|f=\Pi_{R_1}(F) = F_1 = (}}тривиальные ФЗ, {{Формула|f=A\rightarrow B, A\rightarrow AB)}}&lt;br /&gt;
&lt;br /&gt;
Вторая проекция: {{Формула|f=\Pi_{R_2}(F) = F_2 = (}}тривиальные ФЗ, {{Формула|f=B\rightarrow C, B\rightarrow BC)}}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=(F_1\bigcup F_2)^+ = (}}тривиальные ФЗ, {{Формула|f=A\rightarrow B, A\rightarrow AB, B\rightarrow C, B\rightarrow BC, A\rightarrow C, A\rightarrow AC)}}, а это и есть по определению само {{Формула|f=F^+}}, что и доказывает, что данная схема БД обладает свойством сохранения ФЗ.&lt;br /&gt;
&lt;br /&gt;
=== Алгоритм проверки схемы БД на обладание свойством сохранения ФЗ ===&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=\rho = (R_1 ... R_n)}}&lt;br /&gt;
&lt;br /&gt;
Алгоритм:&lt;br /&gt;
# построить условно-неизбыточное покрытие (УНП), взять {{Формула|f=H = \varnothing}};&lt;br /&gt;
# каждую ФЗ из УНП заменить на совокупность ФЗ с одним атрибутом в правой части, то есть заменить {{Формула|f=X\rightarrow A_1}} ... {{Формула|f=X\rightarrow A_k}} на {{Формула|f=Y = A_1 ... A_k}}. Обозначить полученную ФЗ как {{Формула|f=G}};&lt;br /&gt;
# выбрать очередную ФЗ из {{Формула|f=G}}. Найти такую схему отношения {{Формула|f=R_i}}, для которой справедливо включение {{Формула|f=XA\subseteq R_i}}. Если такой схемы отношений не существует, то поместить ФЗ {{Формула|f=X\rightarrow A}} в множество {{Формула|f=H}};&lt;br /&gt;
# если все ФЗ из {{Формула|f=G}} рассмотрены, то перейти к следующему пункту, иначе к предыдущему;&lt;br /&gt;
# если {{Формула|f=H}} пусто, то завершить алгоритм. &amp;lt;u&amp;gt;{{Формула|f=\rho}} обладает свойством сохранения ФЗ&amp;lt;/u&amp;gt;. Иначе перейти к следующему пункту;&lt;br /&gt;
# просмотреть все ФЗ из {{Формула|f=H}}. Если какая-либо ФЗ {{Формула|f=X\rightarrow A \in H}} не выводится из множества {{Формула|f=G - H}}, то завершить алгоритм. &amp;lt;u&amp;gt;{{Формула|f=\rho}} не обладает свойством сохранения ФЗ&amp;lt;/u&amp;gt;. Иначе завершить алгоритм, и тогда &amp;lt;u&amp;gt;{{Формула|f=\rho}} обладает свойством сохранения ФЗ&amp;lt;/u&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Категория:Теоретические основы реляционной алгебры (9 семестр)]]&lt;br /&gt;
[[Категория:Конспекты лекций и семинаров]]&lt;/div&gt;</summary>
		<author><name>81.9.52.28</name></author>
	</entry>
	<entry>
		<id>https://iu5bmstu.ru/index.php?title=%D0%A2%D0%9E%D0%A0%D0%90_(9)_-_%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_%E2%84%969_-_%D0%9E%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D0%BE%D0%B2&amp;diff=2518</id>
		<title>ТОРА (9) - Лекция №9 - Оптимизация запросов</title>
		<link rel="alternate" type="text/html" href="https://iu5bmstu.ru/index.php?title=%D0%A2%D0%9E%D0%A0%D0%90_(9)_-_%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_%E2%84%969_-_%D0%9E%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D0%BE%D0%B2&amp;diff=2518"/>
		<updated>2013-01-13T22:15:44Z</updated>

		<summary type="html">&lt;p&gt;81.9.52.28: /* Построение логического плана */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Оригинал всего раздела, посвящённого оптимизации SQL-запросов, от самого [[Григорьев Ю.А. | Григорьева]] можно загрузить [http://yadi.sk/d/VjjMs6ww1HH2D здесь].&lt;br /&gt;
__TOC__&lt;br /&gt;
== Оптимизация SQL-запросов ==&lt;br /&gt;
&lt;br /&gt;
Запрос, поступающий в СУБД, подвергается оптимизации с целью уменьшения времени его выполнения.&lt;br /&gt;
&lt;br /&gt;
Шаги оптимизатора:&lt;br /&gt;
# строится логический план выполнения запроса (дерево логических операций);&lt;br /&gt;
# на основе логического плана строится физический план выполнения запроса (дерево физических операций);&lt;br /&gt;
# реализация этого физического плана.&lt;br /&gt;
&lt;br /&gt;
=== Законы реляционной алгебры ===&lt;br /&gt;
&lt;br /&gt;
==== Закон коммутативности декартова произведения отношений ====&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=R_1\times R_2 = R_2\times R_1}}, здесь и далее {{Формула|f=R_1}} и {{Формула|f=R_2}} - экземпляры отношений.&lt;br /&gt;
&lt;br /&gt;
==== Закон ассоциативности декартова произведения ====&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=(R_1\times R_2)\times R_3 = R_1\times (R_2\times R_3)}}&lt;br /&gt;
&lt;br /&gt;
==== Закон каскада проекций ====&lt;br /&gt;
&lt;br /&gt;
Допустим, {{Формула|f=(a_1 ... a_n)\subseteq (b_1 ... b_n)}}, {{Формула|f={a_i} }}, {{Формула|f={b_i} }} - это атрибуты отношения {{Формула|f=R}}&lt;br /&gt;
&lt;br /&gt;
тогда {{Формула|f=\Pi_{a_1 ... a_n}(\Pi_{b_1 ... b_n}(R)) = \Pi_{a_1 ... a_n}(R)}}&lt;br /&gt;
&lt;br /&gt;
==== Закон каскада селекций ====&lt;br /&gt;
&lt;br /&gt;
Допустим, {{Формула|f=F = f_1\wedge f_2}}&lt;br /&gt;
&lt;br /&gt;
тогда {{Формула|f=\sigma_F(R) = \sigma_{f_1}(\sigma_{f_2}(R))}}&lt;br /&gt;
&lt;br /&gt;
==== Закон перестановки проекции и селекции ====&lt;br /&gt;
&lt;br /&gt;
1)&lt;br /&gt;
&lt;br /&gt;
: Допустим, в условия поиска {{Формула|f=F}} входят атрибуты только из множества {{Формула|f=a_1 ... a_n}}&lt;br /&gt;
: тогда {{Формула|f=\Pi_{a_1 ... a_n}(\sigma_F(R)) = \sigma_F(\Pi_{a_1 ... a_n}(R))}}&lt;br /&gt;
&lt;br /&gt;
2)&lt;br /&gt;
&lt;br /&gt;
: Допустим, в условия поиска {{Формула|f=F}} входят атрибуты не только из множества {{Формула|f=a_1 ... a_n}}, но и из {{Формула|f=b_1 ... b_n}}&lt;br /&gt;
: тогда {{Формула|f=\Pi_{a_1 ... a_n}(\sigma_F(R)) = \Pi_{a_1 ... a_n}(\sigma_F(\Pi_{a_1 ... a_n, b_1 ... b_n}(R)))}}&lt;br /&gt;
&lt;br /&gt;
==== Селекция декартова произведения ====&lt;br /&gt;
&lt;br /&gt;
Отношение {{Формула|f=f_1}} содержит атрибуты только из отношения {{Формула|f=R_1}}&lt;br /&gt;
&lt;br /&gt;
тогда {{Формула|f=\sigma_{f_1}(R_1\times R_2) = \sigma_{f_1}(R_1)\times R_2}}&lt;br /&gt;
&lt;br /&gt;
:Следствие:&lt;br /&gt;
:пусть {{Формула|f=F = f_1 \wedge f_2}} и в {{Формула|f=f_1}} входят атрибуты {{Формула|f=R_1}}, а в {{Формула|f=f_2}} входят из {{Формула|f=R_2}},&lt;br /&gt;
:тогда {{Формула|f=\sigma_{F}(R_1\times R_2) = \sigma_{f_1}(R_1)\times \sigma_{f_2}(R_2)}}&lt;br /&gt;
::Доказательство:&lt;br /&gt;
::{{Формула|f=\sigma_{f_1 \wedge f_2}(R_1\times R_2) = \sigma_{f_1}(\sigma_{f_2}(R_1\times R_2)) = \sigma_{f_1}(\sigma_{f_2}(R_2\times R_1))=}}&lt;br /&gt;
::{{Формула|f== \sigma_{f_1}(R_1\times\sigma_{f_2}(R_2)) = \sigma_{f_1}(R_1)\times \sigma_{f_2}(R_2)}}&lt;br /&gt;
&lt;br /&gt;
==== Закон перестановки селекции и объединения ====&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=\sigma_{F}(R_1\bigcup R_2) = \sigma_{F}(R_1)\bigcup\sigma_{F}(R_2)}}&lt;br /&gt;
&lt;br /&gt;
==== Закон перестановки селекции и разности отношений ====&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=\sigma_{F}(R_1 - R_2) = \sigma_{F}(R_1) - \sigma_{F}(R_2)}}&lt;br /&gt;
&lt;br /&gt;
==== Закон перестановки проекции и декартова произведения ====&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=b_1 ... b_n}} - это атрибуты отношения {{Формула|f=R_1}}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=c_1 ... c_k}} - это атрибуты отношения {{Формула|f=R_2}}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=\Pi_{b_1 ... b_n, c_1 ... c_k}(R_1\times R_2)}} = {{Формула|f=\Pi_{b_1 ... b_n}(R_1)\times \Pi_{c_1 ... c_k}(R_2)}}&lt;br /&gt;
&lt;br /&gt;
==== Закон перестановки проекции и объединения ====&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=\Pi_{a_1 ... a_n}(R_1\bigcup R_2) = \Pi_{a_1 ... a_n}(R_1)\bigcup\Pi_{a_1 ... a_n}(R_2)}}&lt;br /&gt;
&lt;br /&gt;
=== Оптимизация формул реляционной алгебры ===&lt;br /&gt;
&lt;br /&gt;
Пусть условие {{Формула|f=F = f_1 \wedge ... \wedge f_n}}&lt;br /&gt;
&lt;br /&gt;
Правила:&lt;br /&gt;
# переместить каждую селекцию внутрь декартова произведения, используя законы 1, 4, 6, 7, 8;&lt;br /&gt;
# переместить каждую проекцию внутрь декартова произведения, используя законы 1, 3, 5, 9, 10;&lt;br /&gt;
# по возможности скомбинировать каждый каскад селекции в одиночную селекцию и каждый каскад проекции в одиночную проекцию. Тогда всё можно будет сделать за один проход.&lt;br /&gt;
&lt;br /&gt;
После выполнения этих трёх правил выражение {{Формула|f=\Pi_A(\sigma_F(R_1\times ...\times R_n))}} преобразуется к виду:&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=\Pi_A(\sigma_F(}}&amp;lt;span style=&amp;quot;background-color:#32CD32&amp;quot;&amp;gt;{{Формула|f=\Pi_{A_i}(\sigma_{f_2}(R_1))}}&amp;lt;/span&amp;gt;{{Формула|f=\times ...\times}}&amp;lt;span style=&amp;quot;background-color:#00BFFF&amp;quot;&amp;gt;{{Формула|f=\Pi_{A_n}(\sigma_{f_n}(R_n))}}&amp;lt;/span&amp;gt;{{Формула|f=))}},&lt;br /&gt;
&lt;br /&gt;
здесь &amp;lt;span style=&amp;quot;background-color:#32CD32&amp;quot;&amp;gt;{{Формула|f=\Pi_{A_i}(\sigma_{f_2}(R_1))}}&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;background-color:#00BFFF&amp;quot;&amp;gt;{{Формула|f=\Pi_{A_n}(\sigma_{f_n}(R_n))}}&amp;lt;/span&amp;gt; и прочие - &#039;&#039;подзапросы&#039;&#039;. Суть в том, что сначала выполняются подзапросы, а они имеют намного меньшую размерность, чем исходная таблица, и время выполнения будет меньше, чем по исходной формуле {{Формула|f=\Pi_A(\sigma_F(R_1\times ...\times R_n))}}.&lt;br /&gt;
&lt;br /&gt;
=== Логический план ===&lt;br /&gt;
&lt;br /&gt;
==== Построение логического плана ====&lt;br /&gt;
&lt;br /&gt;
Порядок построения:&lt;br /&gt;
# запрос преобразуется в формулу реляционной алгебры;&lt;br /&gt;
# выполняется преобразование (оптимизация) этой формулы.&lt;br /&gt;
&lt;br /&gt;
Оператор &amp;lt;code&amp;gt;SELECT&amp;lt;/code&amp;gt; (без агрегирования, группирования и удаления дубликатов) может быть представлен так:&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=\Pi_A(\sigma_F(R_1\times ...\times R_n))}}, где&lt;br /&gt;
:от {{Формула|f=R_1}} до {{Формула|f=R_n}} - это декартово произведение отношений (таблиц), указанных за ключевым словом &amp;lt;code&amp;gt;FROM&amp;lt;/code&amp;gt;;&lt;br /&gt;
:{{Формула|f=\sigma_F}} - это селекция кортежей декартова произведения в соответствии с условием, указанным за ключевым словом &amp;lt;code&amp;gt;WHERE&amp;lt;/code&amp;gt;;&lt;br /&gt;
:{{Формула|f=\Pi_A}} - это проекция селекции на множество атрибутов A, указанных за ключевым словом &amp;lt;code&amp;gt;SELECT&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В чём суть такой логической оптимизации? Сначала надо выполнить декартово произведение, потом селекцию, потом проекцию - всё по порядку скобок в этом выражении. Потому что если таблица имеет большой размер, то это выражение будет выполняться очень долго.&lt;br /&gt;
&lt;br /&gt;
Пример: найти фамилии поставщиков, поставляющих детали с названием &amp;quot;винт&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=\rho = (S, P, SP)}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT фамилия&lt;br /&gt;
FROM S, P, SP&lt;br /&gt;
WHERE P.название = &#039;винт&#039; AND&lt;br /&gt;
      S.номер_поставки = SP.номер_поставки AND&lt;br /&gt;
      SP.номер_детали = P.номер_детали;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=\Pi_{фамилия}(\sigma_{P.н=&amp;quot;винт&amp;quot; \wedge S.н-п=SP.н-п \wedge SP.н-д=P.н-д}(S\times P\times SP))}}&lt;br /&gt;
&lt;br /&gt;
[[#Оптимизация формул реляционной алгебры | Полученную]] {{Формула|f=\Pi_A(\sigma_F(\Pi_{A_i}(\sigma_{f_2}(R_1))\times ...\times \Pi_{A_n}(\sigma_{f_n}(R_n))))}} можно представить в графическом виде - это и будет &#039;&#039;логический план выполнения запроса&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
[[Файл:9sTORAl9pic1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Получается, подзапросы можно выполнять параллельно, а это тоже уменьшает время выполнения всего запроса.&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
&lt;br /&gt;
[[Файл:9sTORAl9pic2.png|link=Файл:9sTORAl9pic2.svg]]&lt;br /&gt;
&lt;br /&gt;
Запрос найти значение остатков больше 1500 на счетах пользователя с кодом 3:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT остаток&lt;br /&gt;
FROM R2&lt;br /&gt;
WHERE остаток &amp;gt; 1500 AND&lt;br /&gt;
      номер_счёта IN(&lt;br /&gt;
                     SELECT номер_счёта&lt;br /&gt;
                     FROM R1&lt;br /&gt;
                     WHERE код_пользователя = 3&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Этот запрос преобразуется сервером в неявном виде в формулу реляционной алгебры:&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=\Pi_{остаток}(\sigma_{R_2.о&amp;gt;1500 \wedge R_1.к-п=3 \wedge R_1.н-c=R_2.н-с})}}&lt;br /&gt;
&lt;br /&gt;
Теперь оптимизируем:&lt;br /&gt;
&lt;br /&gt;
{{Формула|f==^4\Pi_{остаток}(\sigma_{R_1.н-c=R_2.н-с}(\sigma_{R_2.о&amp;gt;1500 \wedge R_1.к-п=3}(R_1\times R_2)))=^6}}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f==\Pi_{остаток}(\sigma_{R_1.н-c=R_2.н-с}(\sigma_{R_1.к-п=3}(R_1)\times\sigma_{R_2.о&amp;gt;1500}(R_2)=^{5, 2} }}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f==\Pi_{остаток}(\sigma_{R_1.н-c=R_2.н-с}(\Pi_{остаток, R_1.н-с, R_2.н-с}(\sigma_{R_1.к-п=3}(R_1)\times\sigma_{R_2.о&amp;gt;1500}(R_2))=^9}}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f==\Pi_{остаток}(\sigma_{R_1.н-c=R_2.н-с}(}}&amp;lt;span style=&amp;quot;background-color:#32CD32&amp;quot;&amp;gt;{{Формула|f=\Pi_{R_1.н-с}(\sigma_{R_1.к-п=3}(R_1))}}&amp;lt;/span&amp;gt;{{Формула|f=\times}}&amp;lt;span style=&amp;quot;background-color:#00BFFF&amp;quot;&amp;gt;{{Формула|f=\Pi_{R_2.н-с, остаток}(\sigma_{R_2.о&amp;gt;1500}(R_2))}}&amp;lt;/span&amp;gt;{{Формула|f=))}}&lt;br /&gt;
&lt;br /&gt;
Полученное выражение - результат оптимизации. Можно построить логический план выполнения запроса.&lt;br /&gt;
&lt;br /&gt;
[[Файл:9sTORAl9pic3.png|400px]]&lt;br /&gt;
&lt;br /&gt;
{{Forward|l=ТОРА (9) - Лекция №10 - Логический и физический план запроса}}&lt;br /&gt;
&lt;br /&gt;
[[Категория:Теоретические основы реляционной алгебры (9 семестр)]]&lt;br /&gt;
[[Категория:Конспекты лекций и семинаров]]&lt;/div&gt;</summary>
		<author><name>81.9.52.28</name></author>
	</entry>
	<entry>
		<id>https://iu5bmstu.ru/index.php?title=%D0%A2%D0%9E%D0%A0%D0%90_(9)_-_%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_%E2%84%969_-_%D0%9E%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D0%BE%D0%B2&amp;diff=2517</id>
		<title>ТОРА (9) - Лекция №9 - Оптимизация запросов</title>
		<link rel="alternate" type="text/html" href="https://iu5bmstu.ru/index.php?title=%D0%A2%D0%9E%D0%A0%D0%90_(9)_-_%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_%E2%84%969_-_%D0%9E%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D0%BE%D0%B2&amp;diff=2517"/>
		<updated>2013-01-13T21:24:06Z</updated>

		<summary type="html">&lt;p&gt;81.9.52.28: /* Закон перестановки селекции и разности отношений */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Оригинал всего раздела, посвящённого оптимизации SQL-запросов, от самого [[Григорьев Ю.А. | Григорьева]] можно загрузить [http://yadi.sk/d/VjjMs6ww1HH2D здесь].&lt;br /&gt;
__TOC__&lt;br /&gt;
== Оптимизация SQL-запросов ==&lt;br /&gt;
&lt;br /&gt;
Запрос, поступающий в СУБД, подвергается оптимизации с целью уменьшения времени его выполнения.&lt;br /&gt;
&lt;br /&gt;
Шаги оптимизатора:&lt;br /&gt;
# строится логический план выполнения запроса (дерево логических операций);&lt;br /&gt;
# на основе логического плана строится физический план выполнения запроса (дерево физических операций);&lt;br /&gt;
# реализация этого физического плана.&lt;br /&gt;
&lt;br /&gt;
=== Законы реляционной алгебры ===&lt;br /&gt;
&lt;br /&gt;
==== Закон коммутативности декартова произведения отношений ====&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=R_1\times R_2 = R_2\times R_1}}, здесь и далее {{Формула|f=R_1}} и {{Формула|f=R_2}} - экземпляры отношений.&lt;br /&gt;
&lt;br /&gt;
==== Закон ассоциативности декартова произведения ====&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=(R_1\times R_2)\times R_3 = R_1\times (R_2\times R_3)}}&lt;br /&gt;
&lt;br /&gt;
==== Закон каскада проекций ====&lt;br /&gt;
&lt;br /&gt;
Допустим, {{Формула|f=(a_1 ... a_n)\subseteq (b_1 ... b_n)}}, {{Формула|f={a_i} }}, {{Формула|f={b_i} }} - это атрибуты отношения {{Формула|f=R}}&lt;br /&gt;
&lt;br /&gt;
тогда {{Формула|f=\Pi_{a_1 ... a_n}(\Pi_{b_1 ... b_n}(R)) = \Pi_{a_1 ... a_n}(R)}}&lt;br /&gt;
&lt;br /&gt;
==== Закон каскада селекций ====&lt;br /&gt;
&lt;br /&gt;
Допустим, {{Формула|f=F = f_1\wedge f_2}}&lt;br /&gt;
&lt;br /&gt;
тогда {{Формула|f=\sigma_F(R) = \sigma_{f_1}(\sigma_{f_2}(R))}}&lt;br /&gt;
&lt;br /&gt;
==== Закон перестановки проекции и селекции ====&lt;br /&gt;
&lt;br /&gt;
1)&lt;br /&gt;
&lt;br /&gt;
: Допустим, в условия поиска {{Формула|f=F}} входят атрибуты только из множества {{Формула|f=a_1 ... a_n}}&lt;br /&gt;
: тогда {{Формула|f=\Pi_{a_1 ... a_n}(\sigma_F(R)) = \sigma_F(\Pi_{a_1 ... a_n}(R))}}&lt;br /&gt;
&lt;br /&gt;
2)&lt;br /&gt;
&lt;br /&gt;
: Допустим, в условия поиска {{Формула|f=F}} входят атрибуты не только из множества {{Формула|f=a_1 ... a_n}}, но и из {{Формула|f=b_1 ... b_n}}&lt;br /&gt;
: тогда {{Формула|f=\Pi_{a_1 ... a_n}(\sigma_F(R)) = \Pi_{a_1 ... a_n}(\sigma_F(\Pi_{a_1 ... a_n, b_1 ... b_n}(R)))}}&lt;br /&gt;
&lt;br /&gt;
==== Селекция декартова произведения ====&lt;br /&gt;
&lt;br /&gt;
Отношение {{Формула|f=f_1}} содержит атрибуты только из отношения {{Формула|f=R_1}}&lt;br /&gt;
&lt;br /&gt;
тогда {{Формула|f=\sigma_{f_1}(R_1\times R_2) = \sigma_{f_1}(R_1)\times R_2}}&lt;br /&gt;
&lt;br /&gt;
:Следствие:&lt;br /&gt;
:пусть {{Формула|f=F = f_1 \wedge f_2}} и в {{Формула|f=f_1}} входят атрибуты {{Формула|f=R_1}}, а в {{Формула|f=f_2}} входят из {{Формула|f=R_2}},&lt;br /&gt;
:тогда {{Формула|f=\sigma_{F}(R_1\times R_2) = \sigma_{f_1}(R_1)\times \sigma_{f_2}(R_2)}}&lt;br /&gt;
::Доказательство:&lt;br /&gt;
::{{Формула|f=\sigma_{f_1 \wedge f_2}(R_1\times R_2) = \sigma_{f_1}(\sigma_{f_2}(R_1\times R_2)) = \sigma_{f_1}(\sigma_{f_2}(R_2\times R_1))=}}&lt;br /&gt;
::{{Формула|f== \sigma_{f_1}(R_1\times\sigma_{f_2}(R_2)) = \sigma_{f_1}(R_1)\times \sigma_{f_2}(R_2)}}&lt;br /&gt;
&lt;br /&gt;
==== Закон перестановки селекции и объединения ====&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=\sigma_{F}(R_1\bigcup R_2) = \sigma_{F}(R_1)\bigcup\sigma_{F}(R_2)}}&lt;br /&gt;
&lt;br /&gt;
==== Закон перестановки селекции и разности отношений ====&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=\sigma_{F}(R_1 - R_2) = \sigma_{F}(R_1) - \sigma_{F}(R_2)}}&lt;br /&gt;
&lt;br /&gt;
==== Закон перестановки проекции и декартова произведения ====&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=b_1 ... b_n}} - это атрибуты отношения {{Формула|f=R_1}}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=c_1 ... c_k}} - это атрибуты отношения {{Формула|f=R_2}}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=\Pi_{b_1 ... b_n, c_1 ... c_k}(R_1\times R_2)}} = {{Формула|f=\Pi_{b_1 ... b_n}(R_1)\times \Pi_{c_1 ... c_k}(R_2)}}&lt;br /&gt;
&lt;br /&gt;
==== Закон перестановки проекции и объединения ====&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=\Pi_{a_1 ... a_n}(R_1\bigcup R_2) = \Pi_{a_1 ... a_n}(R_1)\bigcup\Pi_{a_1 ... a_n}(R_2)}}&lt;br /&gt;
&lt;br /&gt;
=== Оптимизация формул реляционной алгебры ===&lt;br /&gt;
&lt;br /&gt;
Пусть условие {{Формула|f=F = f_1 \wedge ... \wedge f_n}}&lt;br /&gt;
&lt;br /&gt;
Правила:&lt;br /&gt;
# переместить каждую селекцию внутрь декартова произведения, используя законы 1, 4, 6, 7, 8;&lt;br /&gt;
# переместить каждую проекцию внутрь декартова произведения, используя законы 1, 3, 5, 9, 10;&lt;br /&gt;
# по возможности скомбинировать каждый каскад селекции в одиночную селекцию и каждый каскад проекции в одиночную проекцию. Тогда всё можно будет сделать за один проход.&lt;br /&gt;
&lt;br /&gt;
После выполнения этих трёх правил выражение {{Формула|f=\Pi_A(\sigma_F(R_1\times ...\times R_n))}} преобразуется к виду:&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=\Pi_A(\sigma_F(}}&amp;lt;span style=&amp;quot;background-color:#32CD32&amp;quot;&amp;gt;{{Формула|f=\Pi_{A_i}(\sigma_{f_2}(R_1))}}&amp;lt;/span&amp;gt;{{Формула|f=\times ...\times}}&amp;lt;span style=&amp;quot;background-color:#00BFFF&amp;quot;&amp;gt;{{Формула|f=\Pi_{A_n}(\sigma_{f_n}(R_n))}}&amp;lt;/span&amp;gt;{{Формула|f=))}},&lt;br /&gt;
&lt;br /&gt;
здесь &amp;lt;span style=&amp;quot;background-color:#32CD32&amp;quot;&amp;gt;{{Формула|f=\Pi_{A_i}(\sigma_{f_2}(R_1))}}&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;background-color:#00BFFF&amp;quot;&amp;gt;{{Формула|f=\Pi_{A_n}(\sigma_{f_n}(R_n))}}&amp;lt;/span&amp;gt; и прочие - &#039;&#039;подзапросы&#039;&#039;. Суть в том, что сначала выполняются подзапросы, а они имеют намного меньшую размерность, чем исходная таблица, и время выполнения будет меньше, чем по исходной формуле {{Формула|f=\Pi_A(\sigma_F(R_1\times ...\times R_n))}}.&lt;br /&gt;
&lt;br /&gt;
=== Логический план ===&lt;br /&gt;
&lt;br /&gt;
==== Построение логического плана ====&lt;br /&gt;
&lt;br /&gt;
Порядок построения:&lt;br /&gt;
# запрос преобразуется в формулу реляционной алгебры;&lt;br /&gt;
# выполняется преобразование (оптимизация) этой формулы.&lt;br /&gt;
&lt;br /&gt;
Оператор &amp;lt;code&amp;gt;SELECT&amp;lt;/code&amp;gt; (без агрегирования, группирования и удаления дубликатов) может быть представлен так:&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=\Pi_A(\sigma_F(R_1\times ...\times R_n))}}, где&lt;br /&gt;
:от {{Формула|f=R_1}} до {{Формула|f=R_n}} - это декартово произведение отношений (таблиц), указанных за ключевым словом &amp;lt;code&amp;gt;FROM&amp;lt;/code&amp;gt;;&lt;br /&gt;
:{{Формула|f=\sigma_F}} - это селекция кортежей декартова произведения в соответствии с условием, указанным за ключевым словом &amp;lt;code&amp;gt;WHERE&amp;lt;/code&amp;gt;;&lt;br /&gt;
:{{Формула|f=\Pi_A}} - это проекция селекции на множество атрибутов A, указанных за ключевым словом &amp;lt;code&amp;gt;SELECT&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В чём суть такой логической оптимизации? Сначала надо выполнить декартово произведение, потом селекцию, потом проекцию - всё по порядку скобок в этом выражении. Потому что если таблица имеет большой размер, то это выражение будет выполняться очень долго.&lt;br /&gt;
&lt;br /&gt;
Пример: найти фамилии поставщиков, поставляющих детали с названием &amp;quot;винт&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=\rho = (S, P, SP)}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT фамилия&lt;br /&gt;
FROM S, P, SP&lt;br /&gt;
WHERE P.название = &#039;винт&#039; AND&lt;br /&gt;
      S.номер_поставки = SP.номер_поставки AND&lt;br /&gt;
      SP.номер_детали = P.номер_детали;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=\Pi_{фамилия}(\sigma_{P.н=&amp;quot;винт&amp;quot; \wedge S.н-п=SP.н-п \wedge SP.н-д=P.н-д})}}&lt;br /&gt;
&lt;br /&gt;
[[#Оптимизация формул реляционной алгебры | Полученную]] {{Формула|f=\Pi_A(\sigma_F(\Pi_{A_i}(\sigma_{f_2}(R_1))\times ...\times \Pi_{A_n}(\sigma_{f_n}(R_n))))}} можно представить в графическом виде - это и будет &#039;&#039;логический план выполнения запроса&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
[[Файл:9sTORAl9pic1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Получается, подзапросы можно выполнять параллельно, а это тоже уменьшает время выполнения всего запроса.&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
&lt;br /&gt;
[[Файл:9sTORAl9pic2.png|link=Файл:9sTORAl9pic2.svg]]&lt;br /&gt;
&lt;br /&gt;
Запрос найти значение остатков больше 1500 на счетах пользователя с кодом 3:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT остаток&lt;br /&gt;
FROM R2&lt;br /&gt;
WHERE остаток &amp;gt; 1500 AND&lt;br /&gt;
      номер_счёта IN(&lt;br /&gt;
                     SELECT номер_счёта&lt;br /&gt;
                     FROM R1&lt;br /&gt;
                     WHERE код_пользователя = 3&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Этот запрос преобразуется сервером в неявном виде в формулу реляционной алгебры:&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=\Pi_{остаток}(\sigma_{R_2.о&amp;gt;1500 \wedge R_1.к-п=3 \wedge R_1.н-c=R_2.н-с})}}&lt;br /&gt;
&lt;br /&gt;
Теперь оптимизируем:&lt;br /&gt;
&lt;br /&gt;
{{Формула|f==^4\Pi_{остаток}(\sigma_{R_1.н-c=R_2.н-с}(\sigma_{R_2.о&amp;gt;1500 \wedge R_1.к-п=3}(R_1\times R_2)))=^6}}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f==\Pi_{остаток}(\sigma_{R_1.н-c=R_2.н-с}(\sigma_{R_1.к-п=3}(R_1)\times\sigma_{R_2.о&amp;gt;1500}(R_2)=^{5, 2} }}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f==\Pi_{остаток}(\sigma_{R_1.н-c=R_2.н-с}(\Pi_{остаток, R_1.н-с, R_2.н-с}(\sigma_{R_1.к-п=3}(R_1)\times\sigma_{R_2.о&amp;gt;1500}(R_2))=^9}}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f==\Pi_{остаток}(\sigma_{R_1.н-c=R_2.н-с}(}}&amp;lt;span style=&amp;quot;background-color:#32CD32&amp;quot;&amp;gt;{{Формула|f=\Pi_{R_1.н-с}(\sigma_{R_1.к-п=3}(R_1))}}&amp;lt;/span&amp;gt;{{Формула|f=\times}}&amp;lt;span style=&amp;quot;background-color:#00BFFF&amp;quot;&amp;gt;{{Формула|f=\Pi_{R_2.н-с, остаток}(\sigma_{R_2.о&amp;gt;1500}(R_2))}}&amp;lt;/span&amp;gt;{{Формула|f=))}}&lt;br /&gt;
&lt;br /&gt;
Полученное выражение - результат оптимизации. Можно построить логический план выполнения запроса.&lt;br /&gt;
&lt;br /&gt;
[[Файл:9sTORAl9pic3.png|400px]]&lt;br /&gt;
&lt;br /&gt;
{{Forward|l=ТОРА (9) - Лекция №10 - Логический и физический план запроса}}&lt;br /&gt;
&lt;br /&gt;
[[Категория:Теоретические основы реляционной алгебры (9 семестр)]]&lt;br /&gt;
[[Категория:Конспекты лекций и семинаров]]&lt;/div&gt;</summary>
		<author><name>81.9.52.28</name></author>
	</entry>
	<entry>
		<id>https://iu5bmstu.ru/index.php?title=%D0%A2%D0%9E%D0%A0%D0%90_(9)_-_%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_%E2%84%969_-_%D0%9E%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D0%BE%D0%B2&amp;diff=2516</id>
		<title>ТОРА (9) - Лекция №9 - Оптимизация запросов</title>
		<link rel="alternate" type="text/html" href="https://iu5bmstu.ru/index.php?title=%D0%A2%D0%9E%D0%A0%D0%90_(9)_-_%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_%E2%84%969_-_%D0%9E%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D0%BE%D0%B2&amp;diff=2516"/>
		<updated>2013-01-13T21:23:46Z</updated>

		<summary type="html">&lt;p&gt;81.9.52.28: /* Закон перестановки селекции и объединения */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Оригинал всего раздела, посвящённого оптимизации SQL-запросов, от самого [[Григорьев Ю.А. | Григорьева]] можно загрузить [http://yadi.sk/d/VjjMs6ww1HH2D здесь].&lt;br /&gt;
__TOC__&lt;br /&gt;
== Оптимизация SQL-запросов ==&lt;br /&gt;
&lt;br /&gt;
Запрос, поступающий в СУБД, подвергается оптимизации с целью уменьшения времени его выполнения.&lt;br /&gt;
&lt;br /&gt;
Шаги оптимизатора:&lt;br /&gt;
# строится логический план выполнения запроса (дерево логических операций);&lt;br /&gt;
# на основе логического плана строится физический план выполнения запроса (дерево физических операций);&lt;br /&gt;
# реализация этого физического плана.&lt;br /&gt;
&lt;br /&gt;
=== Законы реляционной алгебры ===&lt;br /&gt;
&lt;br /&gt;
==== Закон коммутативности декартова произведения отношений ====&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=R_1\times R_2 = R_2\times R_1}}, здесь и далее {{Формула|f=R_1}} и {{Формула|f=R_2}} - экземпляры отношений.&lt;br /&gt;
&lt;br /&gt;
==== Закон ассоциативности декартова произведения ====&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=(R_1\times R_2)\times R_3 = R_1\times (R_2\times R_3)}}&lt;br /&gt;
&lt;br /&gt;
==== Закон каскада проекций ====&lt;br /&gt;
&lt;br /&gt;
Допустим, {{Формула|f=(a_1 ... a_n)\subseteq (b_1 ... b_n)}}, {{Формула|f={a_i} }}, {{Формула|f={b_i} }} - это атрибуты отношения {{Формула|f=R}}&lt;br /&gt;
&lt;br /&gt;
тогда {{Формула|f=\Pi_{a_1 ... a_n}(\Pi_{b_1 ... b_n}(R)) = \Pi_{a_1 ... a_n}(R)}}&lt;br /&gt;
&lt;br /&gt;
==== Закон каскада селекций ====&lt;br /&gt;
&lt;br /&gt;
Допустим, {{Формула|f=F = f_1\wedge f_2}}&lt;br /&gt;
&lt;br /&gt;
тогда {{Формула|f=\sigma_F(R) = \sigma_{f_1}(\sigma_{f_2}(R))}}&lt;br /&gt;
&lt;br /&gt;
==== Закон перестановки проекции и селекции ====&lt;br /&gt;
&lt;br /&gt;
1)&lt;br /&gt;
&lt;br /&gt;
: Допустим, в условия поиска {{Формула|f=F}} входят атрибуты только из множества {{Формула|f=a_1 ... a_n}}&lt;br /&gt;
: тогда {{Формула|f=\Pi_{a_1 ... a_n}(\sigma_F(R)) = \sigma_F(\Pi_{a_1 ... a_n}(R))}}&lt;br /&gt;
&lt;br /&gt;
2)&lt;br /&gt;
&lt;br /&gt;
: Допустим, в условия поиска {{Формула|f=F}} входят атрибуты не только из множества {{Формула|f=a_1 ... a_n}}, но и из {{Формула|f=b_1 ... b_n}}&lt;br /&gt;
: тогда {{Формула|f=\Pi_{a_1 ... a_n}(\sigma_F(R)) = \Pi_{a_1 ... a_n}(\sigma_F(\Pi_{a_1 ... a_n, b_1 ... b_n}(R)))}}&lt;br /&gt;
&lt;br /&gt;
==== Селекция декартова произведения ====&lt;br /&gt;
&lt;br /&gt;
Отношение {{Формула|f=f_1}} содержит атрибуты только из отношения {{Формула|f=R_1}}&lt;br /&gt;
&lt;br /&gt;
тогда {{Формула|f=\sigma_{f_1}(R_1\times R_2) = \sigma_{f_1}(R_1)\times R_2}}&lt;br /&gt;
&lt;br /&gt;
:Следствие:&lt;br /&gt;
:пусть {{Формула|f=F = f_1 \wedge f_2}} и в {{Формула|f=f_1}} входят атрибуты {{Формула|f=R_1}}, а в {{Формула|f=f_2}} входят из {{Формула|f=R_2}},&lt;br /&gt;
:тогда {{Формула|f=\sigma_{F}(R_1\times R_2) = \sigma_{f_1}(R_1)\times \sigma_{f_2}(R_2)}}&lt;br /&gt;
::Доказательство:&lt;br /&gt;
::{{Формула|f=\sigma_{f_1 \wedge f_2}(R_1\times R_2) = \sigma_{f_1}(\sigma_{f_2}(R_1\times R_2)) = \sigma_{f_1}(\sigma_{f_2}(R_2\times R_1))=}}&lt;br /&gt;
::{{Формула|f== \sigma_{f_1}(R_1\times\sigma_{f_2}(R_2)) = \sigma_{f_1}(R_1)\times \sigma_{f_2}(R_2)}}&lt;br /&gt;
&lt;br /&gt;
==== Закон перестановки селекции и объединения ====&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=\sigma_{F}(R_1\bigcup R_2) = \sigma_{F}(R_1)\bigcup\sigma_{F}(R_2)}}&lt;br /&gt;
&lt;br /&gt;
==== Закон перестановки селекции и разности отношений ====&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=\sigma_{F}(R_1 - R_2) = \sigma_{f_1}(R_1) - \sigma_{f_2}(R_2)}}&lt;br /&gt;
&lt;br /&gt;
==== Закон перестановки проекции и декартова произведения ====&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=b_1 ... b_n}} - это атрибуты отношения {{Формула|f=R_1}}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=c_1 ... c_k}} - это атрибуты отношения {{Формула|f=R_2}}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=\Pi_{b_1 ... b_n, c_1 ... c_k}(R_1\times R_2)}} = {{Формула|f=\Pi_{b_1 ... b_n}(R_1)\times \Pi_{c_1 ... c_k}(R_2)}}&lt;br /&gt;
&lt;br /&gt;
==== Закон перестановки проекции и объединения ====&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=\Pi_{a_1 ... a_n}(R_1\bigcup R_2) = \Pi_{a_1 ... a_n}(R_1)\bigcup\Pi_{a_1 ... a_n}(R_2)}}&lt;br /&gt;
&lt;br /&gt;
=== Оптимизация формул реляционной алгебры ===&lt;br /&gt;
&lt;br /&gt;
Пусть условие {{Формула|f=F = f_1 \wedge ... \wedge f_n}}&lt;br /&gt;
&lt;br /&gt;
Правила:&lt;br /&gt;
# переместить каждую селекцию внутрь декартова произведения, используя законы 1, 4, 6, 7, 8;&lt;br /&gt;
# переместить каждую проекцию внутрь декартова произведения, используя законы 1, 3, 5, 9, 10;&lt;br /&gt;
# по возможности скомбинировать каждый каскад селекции в одиночную селекцию и каждый каскад проекции в одиночную проекцию. Тогда всё можно будет сделать за один проход.&lt;br /&gt;
&lt;br /&gt;
После выполнения этих трёх правил выражение {{Формула|f=\Pi_A(\sigma_F(R_1\times ...\times R_n))}} преобразуется к виду:&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=\Pi_A(\sigma_F(}}&amp;lt;span style=&amp;quot;background-color:#32CD32&amp;quot;&amp;gt;{{Формула|f=\Pi_{A_i}(\sigma_{f_2}(R_1))}}&amp;lt;/span&amp;gt;{{Формула|f=\times ...\times}}&amp;lt;span style=&amp;quot;background-color:#00BFFF&amp;quot;&amp;gt;{{Формула|f=\Pi_{A_n}(\sigma_{f_n}(R_n))}}&amp;lt;/span&amp;gt;{{Формула|f=))}},&lt;br /&gt;
&lt;br /&gt;
здесь &amp;lt;span style=&amp;quot;background-color:#32CD32&amp;quot;&amp;gt;{{Формула|f=\Pi_{A_i}(\sigma_{f_2}(R_1))}}&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;background-color:#00BFFF&amp;quot;&amp;gt;{{Формула|f=\Pi_{A_n}(\sigma_{f_n}(R_n))}}&amp;lt;/span&amp;gt; и прочие - &#039;&#039;подзапросы&#039;&#039;. Суть в том, что сначала выполняются подзапросы, а они имеют намного меньшую размерность, чем исходная таблица, и время выполнения будет меньше, чем по исходной формуле {{Формула|f=\Pi_A(\sigma_F(R_1\times ...\times R_n))}}.&lt;br /&gt;
&lt;br /&gt;
=== Логический план ===&lt;br /&gt;
&lt;br /&gt;
==== Построение логического плана ====&lt;br /&gt;
&lt;br /&gt;
Порядок построения:&lt;br /&gt;
# запрос преобразуется в формулу реляционной алгебры;&lt;br /&gt;
# выполняется преобразование (оптимизация) этой формулы.&lt;br /&gt;
&lt;br /&gt;
Оператор &amp;lt;code&amp;gt;SELECT&amp;lt;/code&amp;gt; (без агрегирования, группирования и удаления дубликатов) может быть представлен так:&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=\Pi_A(\sigma_F(R_1\times ...\times R_n))}}, где&lt;br /&gt;
:от {{Формула|f=R_1}} до {{Формула|f=R_n}} - это декартово произведение отношений (таблиц), указанных за ключевым словом &amp;lt;code&amp;gt;FROM&amp;lt;/code&amp;gt;;&lt;br /&gt;
:{{Формула|f=\sigma_F}} - это селекция кортежей декартова произведения в соответствии с условием, указанным за ключевым словом &amp;lt;code&amp;gt;WHERE&amp;lt;/code&amp;gt;;&lt;br /&gt;
:{{Формула|f=\Pi_A}} - это проекция селекции на множество атрибутов A, указанных за ключевым словом &amp;lt;code&amp;gt;SELECT&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В чём суть такой логической оптимизации? Сначала надо выполнить декартово произведение, потом селекцию, потом проекцию - всё по порядку скобок в этом выражении. Потому что если таблица имеет большой размер, то это выражение будет выполняться очень долго.&lt;br /&gt;
&lt;br /&gt;
Пример: найти фамилии поставщиков, поставляющих детали с названием &amp;quot;винт&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=\rho = (S, P, SP)}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT фамилия&lt;br /&gt;
FROM S, P, SP&lt;br /&gt;
WHERE P.название = &#039;винт&#039; AND&lt;br /&gt;
      S.номер_поставки = SP.номер_поставки AND&lt;br /&gt;
      SP.номер_детали = P.номер_детали;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=\Pi_{фамилия}(\sigma_{P.н=&amp;quot;винт&amp;quot; \wedge S.н-п=SP.н-п \wedge SP.н-д=P.н-д})}}&lt;br /&gt;
&lt;br /&gt;
[[#Оптимизация формул реляционной алгебры | Полученную]] {{Формула|f=\Pi_A(\sigma_F(\Pi_{A_i}(\sigma_{f_2}(R_1))\times ...\times \Pi_{A_n}(\sigma_{f_n}(R_n))))}} можно представить в графическом виде - это и будет &#039;&#039;логический план выполнения запроса&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
[[Файл:9sTORAl9pic1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Получается, подзапросы можно выполнять параллельно, а это тоже уменьшает время выполнения всего запроса.&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
&lt;br /&gt;
[[Файл:9sTORAl9pic2.png|link=Файл:9sTORAl9pic2.svg]]&lt;br /&gt;
&lt;br /&gt;
Запрос найти значение остатков больше 1500 на счетах пользователя с кодом 3:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT остаток&lt;br /&gt;
FROM R2&lt;br /&gt;
WHERE остаток &amp;gt; 1500 AND&lt;br /&gt;
      номер_счёта IN(&lt;br /&gt;
                     SELECT номер_счёта&lt;br /&gt;
                     FROM R1&lt;br /&gt;
                     WHERE код_пользователя = 3&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Этот запрос преобразуется сервером в неявном виде в формулу реляционной алгебры:&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=\Pi_{остаток}(\sigma_{R_2.о&amp;gt;1500 \wedge R_1.к-п=3 \wedge R_1.н-c=R_2.н-с})}}&lt;br /&gt;
&lt;br /&gt;
Теперь оптимизируем:&lt;br /&gt;
&lt;br /&gt;
{{Формула|f==^4\Pi_{остаток}(\sigma_{R_1.н-c=R_2.н-с}(\sigma_{R_2.о&amp;gt;1500 \wedge R_1.к-п=3}(R_1\times R_2)))=^6}}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f==\Pi_{остаток}(\sigma_{R_1.н-c=R_2.н-с}(\sigma_{R_1.к-п=3}(R_1)\times\sigma_{R_2.о&amp;gt;1500}(R_2)=^{5, 2} }}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f==\Pi_{остаток}(\sigma_{R_1.н-c=R_2.н-с}(\Pi_{остаток, R_1.н-с, R_2.н-с}(\sigma_{R_1.к-п=3}(R_1)\times\sigma_{R_2.о&amp;gt;1500}(R_2))=^9}}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f==\Pi_{остаток}(\sigma_{R_1.н-c=R_2.н-с}(}}&amp;lt;span style=&amp;quot;background-color:#32CD32&amp;quot;&amp;gt;{{Формула|f=\Pi_{R_1.н-с}(\sigma_{R_1.к-п=3}(R_1))}}&amp;lt;/span&amp;gt;{{Формула|f=\times}}&amp;lt;span style=&amp;quot;background-color:#00BFFF&amp;quot;&amp;gt;{{Формула|f=\Pi_{R_2.н-с, остаток}(\sigma_{R_2.о&amp;gt;1500}(R_2))}}&amp;lt;/span&amp;gt;{{Формула|f=))}}&lt;br /&gt;
&lt;br /&gt;
Полученное выражение - результат оптимизации. Можно построить логический план выполнения запроса.&lt;br /&gt;
&lt;br /&gt;
[[Файл:9sTORAl9pic3.png|400px]]&lt;br /&gt;
&lt;br /&gt;
{{Forward|l=ТОРА (9) - Лекция №10 - Логический и физический план запроса}}&lt;br /&gt;
&lt;br /&gt;
[[Категория:Теоретические основы реляционной алгебры (9 семестр)]]&lt;br /&gt;
[[Категория:Конспекты лекций и семинаров]]&lt;/div&gt;</summary>
		<author><name>81.9.52.28</name></author>
	</entry>
	<entry>
		<id>https://iu5bmstu.ru/index.php?title=%D0%A2%D0%9E%D0%A0%D0%90_(9)_-_%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_%E2%84%966_-_%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BF%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D1%8F_%D1%85%D0%BE%D1%80%D0%BE%D1%88%D0%B5%D0%B9_%D0%91%D0%94&amp;diff=2497</id>
		<title>ТОРА (9) - Лекция №6 - Алгоритм построения хорошей БД</title>
		<link rel="alternate" type="text/html" href="https://iu5bmstu.ru/index.php?title=%D0%A2%D0%9E%D0%A0%D0%90_(9)_-_%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_%E2%84%966_-_%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BF%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D1%8F_%D1%85%D0%BE%D1%80%D0%BE%D1%88%D0%B5%D0%B9_%D0%91%D0%94&amp;diff=2497"/>
		<updated>2013-01-12T21:12:57Z</updated>

		<summary type="html">&lt;p&gt;81.9.52.28: /* Алгоритм синтеза &amp;quot;хорошей&amp;quot; БД */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Третья нормальная форма ==&lt;br /&gt;
&lt;br /&gt;
=== Пример аномалий у 3НФ ===&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=R = (A, B, C, D)}} и {{Формула|f=F = (A\rightarrow B, B\rightarrow A, AC\rightarrow D)}}&lt;br /&gt;
&lt;br /&gt;
Два ключа: {{Формула|f=AC}} и {{Формула|f=BC}}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=(AC)^+=ACBD}}, {{Формула|f=(BC)^+=BCAD}}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=A^+=AB}}, {{Формула|f=C^+ = C}}, {{Формула|f=B^+ = BA}}&lt;br /&gt;
&lt;br /&gt;
Покажем, что в этом случае {{Формула|f=R}} находится в 3НФ:&lt;br /&gt;
&lt;br /&gt;
1)&lt;br /&gt;
&lt;br /&gt;
:неключевой атрибут {{Формула|f=H}}, {{Формула|f=H = D}}&lt;br /&gt;
&lt;br /&gt;
2)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=Y\rightarrow H}}, {{Формула|f=H\notin Y}}, {{Формула|f=Y = AC}}&lt;br /&gt;
&lt;br /&gt;
3)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=X = BC}}, {{Формула|f=X = AC}}&lt;br /&gt;
&lt;br /&gt;
Нельзя подобрать нужную тройку, потому {{Формула|f=R}} находится в 3НФ. Однако, отношение всё равно обладает аномалиями:&lt;br /&gt;
* избыточности: наименование поставщика повторяется для каждой поставляемой делали;&lt;br /&gt;
* противоречивости при изменении наименования поставщика надо изменить его во всех записях, куда оно входит;&lt;br /&gt;
* включения: нельзя включить информацию о поставщике, если он ничего не поставляет;&lt;br /&gt;
* удаления: при удалении детали удаляется информация о поставщике.&lt;br /&gt;
&lt;br /&gt;
Для устранения этого вводится усиленная 3НФ - Бойса-Кодда.&lt;br /&gt;
&lt;br /&gt;
=== Нормальная форма Бойса-Кодда ===&lt;br /&gt;
&lt;br /&gt;
ФЗ {{Формула|f=X\rightarrow Y}} является неприводимой, если для любого подмножества {{Формула|f=Z\subset X}} выполняется {{Формула|f=Z\nrightarrow Y}} или {{Формула|f=Z\rightarrow Y\notin F^+}}&lt;br /&gt;
&lt;br /&gt;
Пусть есть отношение {{Формула|f=R}} и {{Формула|f=F}} включает в себя нетривиальные неприводимые ФЗ. Тогда отношение {{Формула|f=R}} &amp;lt;u&amp;gt;находится в нормальной форме Бойса-Кодда&amp;lt;/u&amp;gt;, если для любого {{Формула|f=X\rightarrow Y\in F}} =&amp;gt; {{Формула|f=X}} - ключ.&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=R_1 = AB}}, {{Формула|f=F_1 = (A\rightarrow B, B\rightarrow A)}}, {{Формула|f=A}} - ключ, {{Формула|f=B}} - ключ.&lt;br /&gt;
&lt;br /&gt;
или&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=R_2 = ACD}}, {{Формула|f=F_2 = (AC\rightarrow D)}}, {{Формула|f=AC}} - ключ.&lt;br /&gt;
&lt;br /&gt;
== Алгоритм синтеза &amp;quot;хорошей&amp;quot; БД ==&lt;br /&gt;
&lt;br /&gt;
Пусть {{Формула|f=U}} - универсальная схема отношения (множество всех атрибутов предметной области) и {{Формула|f=F}} - множество ФЗ.&lt;br /&gt;
&lt;br /&gt;
Перед выполнением алгоритма можно привести все ФЗ к одному атрибуту в правой части (по свойству декомпозиции) и удалить лишние ФЗ. Но это не обязательно.&lt;br /&gt;
&lt;br /&gt;
Алгоритм:&lt;br /&gt;
&lt;br /&gt;
# построить УНП для {{Формула|f=F}};&lt;br /&gt;
# если среди ФЗ в УНП нет ФЗ, включающей все атрибуты из {{Формула|f=U}}, то добавить в УНП тривиальную ФЗ {{Формула|f=U\rightarrow\varnothing}}. Выполнение этого шага почти всегда обеспечивает свойство соединения без потерь будущей схемы БД;&lt;br /&gt;
# привести все нетривиальные ФЗ из УНП к неприводимому виду (удалить лишние атрибуты в левых частях ФЗ);&lt;br /&gt;
# разбить полученное множество ФЗ УНП на классы эквивалентности. Две зависимости {{Формула|f=X_i\rightarrow Y_i}} и {{Формула|f=X_j\rightarrow Y_j}} будем называть эквивалентными, если {{Формула|f=X_iY_i = X_jY_j}}. Далее введём обозначение {{Формула|f=K_r = X_iY_i}} - множество атрибутов в левой и правой частях ФЗ {{Формула|f=r}}-того класса эквивалентности;&lt;br /&gt;
# построить граф иерархии полученных на предыдущем шаге классов эквивалентности (если это возможно). Правило построения: {{Формула|f=j}}-ый узел соединяем снизу с {{Формула|f=i}}-ым узлом, если {{Формула|f=K_j\subset K_i}}. В каждом узле записываются все ФЗ, соответствующего класса эквивалентности;&lt;br /&gt;
# из каждого класса эквивалентности в графе иерархии оставить только одну ФЗ. Правила выбора:&lt;br /&gt;
## удалить из класса эквивалентности лишние ФЗ;&lt;br /&gt;
## если в классе эквивалентности осталось больше одной ФЗ, то выбрать ФЗ с меньшим числом атрибутов в левой части;&lt;br /&gt;
## если у оставшихся ФЗ число атрибутов в левой части одинаково, то выбрать ту ФЗ, которая позволит редуцировать (вычеркнуть) атрибуты справа у ФЗ, расположенных выше в графе иерархии;&lt;br /&gt;
## если в результате не удалось выбрать ни одной, то выбрать произвольную;&lt;br /&gt;
# редуцировать атрибуты справа в оставшихся ФЗ. Для этого просмотреть каждый путь снизу вверх в графе иерархии. Двигаясь по выбранному пути, выполнить следующие действия в каждом узле пути:&lt;br /&gt;
## пусть {{Формула|f=X\rightarrow Y}} - это ФЗ, записанная в данном узле. Каждый атрибут, принадлежащий правой части, вычеркнуть в правых частях ФЗ, расположенных в узлах этого пути по иерархии выше;&lt;br /&gt;
## для тривиальной ФЗ {{Формула|f=U\rightarrow\varnothing}} атрибуты вычёркиваются слева;&lt;br /&gt;
# исключить из рассмотрения ФЗ с пустой правой частью (кроме редуцированной ФЗ {{Формула|f=U\rightarrow\varnothing}}). Исключённые на этом шаге ФЗ являются лишними и выводятся из оставшихся;&lt;br /&gt;
# каждую оставшуюся в графе иерархий ФЗ {{Формула|f=V\rightarrow W}} заменить на множество {{Формула|f=VW}}. Получившееся множество схем отношений обозначить как {{Формула|f=\rho}};&lt;br /&gt;
# для полученной на предыдущем шаге схемы БД проверить:&lt;br /&gt;
## обладает ли она свойством соединия без потерь. Если не обладает, то добавить ключ универсальной схемы {{Формула|f=U}} в эту схему;&lt;br /&gt;
## обладает ли {{Формула|f=\rho}} свойством сохранения ФЗ. Если нет, то, использовать зависимости, не вошедшие в проекцию {{Формула|f=X\rightarrow Y\notin\Pi_{R_i}(F)}}, для построения новых схем отношений, то есть добавить в {{Формула|f=\rho}} {{Формула|f=XY}}.&lt;br /&gt;
&lt;br /&gt;
После выполнения всех шагов полученная схема {{Формула|f=\rho}}:&lt;br /&gt;
* обладает свойством соединения без потерь;&lt;br /&gt;
* обладает свойством сохранения ФЗ;&lt;br /&gt;
* находится в 3НФ или [[#Нормальная форма Бойса-Кодда | НФБК]];&lt;br /&gt;
* содержит минимальное число схем отношений.&lt;br /&gt;
&lt;br /&gt;
=== Пример ===&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=U = (поставщик, фирма, деталь, количество) = (A, B, C, D)}}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=F = (A\rightarrow B, B\rightarrow A, AC\rightarrow D, BC\rightarrow D)}}&lt;br /&gt;
&lt;br /&gt;
Строим {{Формула|f=\rho}}:&lt;br /&gt;
&lt;br /&gt;
1)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=УНП = (A\rightarrow B, B\rightarrow A, AC\rightarrow BD, BC\rightarrow AD)}}&lt;br /&gt;
&lt;br /&gt;
2)&lt;br /&gt;
&lt;br /&gt;
:пропускаем этот шаг, так как есть ФЗ (даже не одна), включающая все атрибуты из {{Формула|f=U}}&lt;br /&gt;
&lt;br /&gt;
3)&lt;br /&gt;
&lt;br /&gt;
:уменьшить число атрибутов не удаётся&lt;br /&gt;
&lt;br /&gt;
4)&lt;br /&gt;
&lt;br /&gt;
:1 класс: {{Формула|f=A\rightarrow B}}, {{Формула|f=B\rightarrow A}}, {{Формула|f=K_1 = AB}}&lt;br /&gt;
:2 класс: {{Формула|f=AC\rightarrow BD}}, {{Формула|f=BC\rightarrow AD}}, {{Формула|f=K_2 = ABCD}}&lt;br /&gt;
&lt;br /&gt;
5)&lt;br /&gt;
&lt;br /&gt;
:[[Файл:9sTORAl6pic1.png|link=Файл:9sTORAl6pic1.svg]]&lt;br /&gt;
&lt;br /&gt;
6)&lt;br /&gt;
&lt;br /&gt;
:для {{Формула|f=K_2}}:&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;u&amp;gt;способ 1&amp;lt;/u&amp;gt; - как во [[ТОРА_(9)_-_Семинар_№2_-_Функциональные_зависимости#Выявление лишних ФЗ | втором семинаре]]&lt;br /&gt;
:::можно ли вывести {{Формула|f=AC\rightarrow BD\in(BC\rightarrow AD)^+}}?&lt;br /&gt;
:::{{Формула|f=(AC)^+=AC}}, {{Формула|f=BD\nsubseteq(AC)^+}}, значит нельзя&lt;br /&gt;
:::можно ли вывести {{Формула|f=BC\rightarrow AD\in(AC\rightarrow BD)^+}}?&lt;br /&gt;
:::{{Формула|f=(BC)^+=BC}}, {{Формула|f=AD\nsubseteq(BC)^+}}, значит нельзя&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;u&amp;gt;способ 2&amp;lt;/u&amp;gt; - вычеркнуть из правых частей ФЗ рассматриваемых классов эквивалентностей общие  атрибуты. Если получаются ФЗ с пустой правой частью, то они являются лишними.&lt;br /&gt;
:::{{Формула|f=AC\rightarrow B}}&lt;br /&gt;
:::{{Формула|f=BC\rightarrow A}}&lt;br /&gt;
:::выше по иерархии ничего нет, выбираем  {{Формула|f=BC\rightarrow AD}}&lt;br /&gt;
&lt;br /&gt;
::нет лишних ФЗ, потому... &lt;br /&gt;
&lt;br /&gt;
:для {{Формула|f=K_1}}:&lt;br /&gt;
&lt;br /&gt;
{{Forward|l=ТОРА (9) - Лекция №7 - Алгоритм (продолжение)}}&lt;br /&gt;
&lt;br /&gt;
[[Категория:Теоретические основы реляционной алгебры (9 семестр)]]&lt;br /&gt;
[[Категория:Конспекты лекций и семинаров]]&lt;/div&gt;</summary>
		<author><name>81.9.52.28</name></author>
	</entry>
	<entry>
		<id>https://iu5bmstu.ru/index.php?title=%D0%A2%D0%9E%D0%A0%D0%90_(9)_-_%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_%E2%84%965_-_%D0%A2%D1%80%D0%B5%D1%82%D1%8C%D1%8F_%D0%BD%D0%BE%D1%80%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D1%84%D0%BE%D1%80%D0%BC%D0%B0&amp;diff=2496</id>
		<title>ТОРА (9) - Лекция №5 - Третья нормальная форма</title>
		<link rel="alternate" type="text/html" href="https://iu5bmstu.ru/index.php?title=%D0%A2%D0%9E%D0%A0%D0%90_(9)_-_%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_%E2%84%965_-_%D0%A2%D1%80%D0%B5%D1%82%D1%8C%D1%8F_%D0%BD%D0%BE%D1%80%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D1%84%D0%BE%D1%80%D0%BC%D0%B0&amp;diff=2496"/>
		<updated>2013-01-12T16:17:18Z</updated>

		<summary type="html">&lt;p&gt;81.9.52.28: /* Третья нормальная форма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойство сохранения ФЗ ==&lt;br /&gt;
&lt;br /&gt;
=== Алгоритм проверки схемы БД на обладание свойством сохранения ФЗ ===&lt;br /&gt;
&lt;br /&gt;
==== Пример 1 ====&lt;br /&gt;
&lt;br /&gt;
Пусть {{Формула|f=R = (A, B, C)}}, {{Формула|f=\rho = (AB, BC) = (R_1, R_2)}} и {{Формула|f=F = (A\rightarrow B, B\rightarrow C)}}&lt;br /&gt;
&lt;br /&gt;
Обладает ли {{Формула|f=\rho}} сохранением ФЗ?&lt;br /&gt;
&lt;br /&gt;
Смотрим:&lt;br /&gt;
&lt;br /&gt;
1)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=H=\varnothing}}, {{Формула|f=УНП = (A\rightarrow BC, B\rightarrow C)}}&lt;br /&gt;
&lt;br /&gt;
2)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=G = (A\rightarrow B, A\rightarrow C, B\rightarrow C)}}&lt;br /&gt;
&lt;br /&gt;
3)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=A\rightarrow B}}, {{Формула|f=AB\subseteq R_1}}&lt;br /&gt;
:{{Формула|f=A\rightarrow C}}, {{Формула|f=AC\nsubseteq R_2}}, {{Формула|f=H=(A\rightarrow C)}}&lt;br /&gt;
:{{Формула|f=B\rightarrow C}}, {{Формула|f=BC\subseteq R_2}}&lt;br /&gt;
&lt;br /&gt;
4) пропускаем, так как не выполнилось условие в 3)&lt;br /&gt;
&lt;br /&gt;
5) &lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=H}} не пустое.&lt;br /&gt;
&lt;br /&gt;
6)&lt;br /&gt;
&lt;br /&gt;
:выполняется ли {{Формула|f=A\rightarrow C\in(G-H)^+ = (A\rightarrow B, B\rightarrow C)^+}}&lt;br /&gt;
:{{Формула|f=A^+=ABC}}, {{Формула|f=C\in A^+}}, значит {{Формула|f=\rho}} &amp;lt;u&amp;gt;обладает сохранением ФЗ&amp;lt;/u&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Пример 2 ====&lt;br /&gt;
&lt;br /&gt;
Пусть {{Формула|f=R = (A, B, C)}}, {{Формула|f=\rho = (AB, AC) = (R_1, R_2)}} и {{Формула|f=F = (A\rightarrow B, B\rightarrow C)}}&lt;br /&gt;
&lt;br /&gt;
Обладает ли {{Формула|f=\rho}} сохранением ФЗ?&lt;br /&gt;
&lt;br /&gt;
1-4)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=H = \varnothing}}, {{Формула|f=УНП = (A\rightarrow BC, B\rightarrow C)}}&lt;br /&gt;
:{{Формула|f=H = (B\rightarrow C))}}&lt;br /&gt;
&lt;br /&gt;
5)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=H}} не пустое.&lt;br /&gt;
&lt;br /&gt;
6)&lt;br /&gt;
&lt;br /&gt;
:выполняется ли {{Формула|f=B\rightarrow C\in(G - H)^+ = (A\rightarrow BC)^+}}&lt;br /&gt;
:{{Формула|f=B^+ = B}}, {{Формула|f=C\notin B^+}}, значит {{Формула|f=\rho}} &amp;lt;u&amp;gt;не обладает сохранением ФЗ&amp;lt;/u&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Ключ схемы отношения ==&lt;br /&gt;
&lt;br /&gt;
Если атрибут {{Формула|f=A_i\in R}} входит в какой-либо ключ схемы отношения {{Формула|f=R}}, то он называется &#039;&#039;&#039;первичным&#039;&#039;&#039;. А если не входит ни в один, то называется &#039;&#039;&#039;непервичным&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Пусть&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=R = (A_1 ... A_n)}} - некоторая схема отношения.&lt;br /&gt;
:{{Формула|f=F}} - множество ФЗ.&lt;br /&gt;
&lt;br /&gt;
Тогда&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=X\subseteq R}} называется ключом схемы, если выполняются:&lt;br /&gt;
:* {{Формула|f=X\rightarrow A_1 ... A_n\in F^+}}&lt;br /&gt;
:* {{Формула|f=\forall Z\subset X}}, {{Формула|f=Z\rightarrow A_1 ... A_n\notin F^+}}. {{Формула|f=X}} содержит минимальное число атрибутов, для которых выполняется предыдущее свойство.&lt;br /&gt;
&lt;br /&gt;
=== Алгоритм построения ключа ===&lt;br /&gt;
&lt;br /&gt;
Базируется на определении ключа. Позволяет построить только один ключ.&lt;br /&gt;
&lt;br /&gt;
1)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=i = 0}}, {{Формула|f=X_0 = A_1 ... A_n}}&lt;br /&gt;
&lt;br /&gt;
2)&lt;br /&gt;
&lt;br /&gt;
:цикл по атрибутам {{Формула|f=A_j}} в {{Формула|f=X_i}}&lt;br /&gt;
&lt;br /&gt;
:Если {{Формула|f=(X_i - A_j)^+ = R}}, то {{Формула|f=X_{i+1} = X_i - A_j}}, {{Формула|f=i = i + 1}} и выйти из цикла;&lt;br /&gt;
:иначе продолжить цикл&lt;br /&gt;
&lt;br /&gt;
3)&lt;br /&gt;
&lt;br /&gt;
:если {{Формула|f=i}} возросло, то перейти к шагу 2);&lt;br /&gt;
:иначе {{Формула|f=X = X_i}} - это найденный ключ.&lt;br /&gt;
&lt;br /&gt;
=== Пример построения ключа ===&lt;br /&gt;
&lt;br /&gt;
Пусть {{Формула|f=R = (A, B, C, D)}}, {{Формула|f=F = (AB\rightarrow DC, BC\rightarrow AD)}}&lt;br /&gt;
&lt;br /&gt;
Надо построить ключ.&lt;br /&gt;
&lt;br /&gt;
1)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=i = 0}}, {{Формула|f=X_0 = ABCD}}&lt;br /&gt;
&lt;br /&gt;
2)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=(X_0 - A)^+ = (BCD)^+ = BCDA = R}}, значит {{Формула|f=X_1 = BCD}}, {{Формула|f=i = 1}}&lt;br /&gt;
&lt;br /&gt;
3)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=i}}, как видим, возросло, значит опять 2)&lt;br /&gt;
&lt;br /&gt;
2)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=(CD)^+ = CD\neq R}}&lt;br /&gt;
:{{Формула|f=(BD)^+ = BD\neq R}}&lt;br /&gt;
:{{Формула|f=(BC)^+ = BCAD = R}}, {{Формула|f=X_2 = BC}}, {{Формула|f=i = 2}}&lt;br /&gt;
&lt;br /&gt;
3)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=i}}, как видим, возросло, значит опять 2)&lt;br /&gt;
&lt;br /&gt;
2)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=C^+ = C\neq R}}&lt;br /&gt;
:{{Формула|f=B^+ = B\neq R}}&lt;br /&gt;
&lt;br /&gt;
3) &lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=i}}, как видим, не возросло. Значит, {{Формула|f=X = BC}} - ключ. Но не единственный, {{Формула|f=X = AB}} - тоже ключ, просто у нас получился сначала этот.&lt;br /&gt;
&lt;br /&gt;
Значит, {{Формула|f=A,B,C}} - первичные атрибуты, а {{Формула|f=D}} - непервичный.&lt;br /&gt;
&lt;br /&gt;
== Третья нормальная форма ==&lt;br /&gt;
&lt;br /&gt;
Отношение &amp;lt;u&amp;gt;находится в 3НФ&amp;lt;/u&amp;gt;, если не существует ключа {{Формула|f=X}}, {{Формула|f=Y\subseteq R}} и непервичного атрибута {{Формула|f=H\notin Y}}.&lt;br /&gt;
&lt;br /&gt;
А если можно найти такую тройку {{Формула|f=X, Y, H}}, для которой выполняются:&lt;br /&gt;
*{{Формула|f=X\rightarrow Y\in F^+}}&lt;br /&gt;
*{{Формула|f=Y\rightarrow H\in F^+}}&lt;br /&gt;
*{{Формула|f=Y\rightarrow X\notin F^+}}&lt;br /&gt;
то схема &amp;lt;u&amp;gt;не находится в 3НФ&amp;lt;/u&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если схема отношения находится в 3НФ, то в большинстве случаев эта схема отношения не обладает [[ТОРА (9) - Лекция_№1 - Операции реляционной алгебры#Пример &amp;quot;плохой&amp;quot; схемы БД | аномалиями]]. Но существуют условия, когда схема в 3НФ обладает этими аномалиями. Хотя, встречаются они редко. Вот они:&lt;br /&gt;
* схема отношения имеет 2 или больше ключей,&lt;br /&gt;
** и любые 2 из них являются составными,&lt;br /&gt;
*** и имеют общий атрибут.&lt;br /&gt;
&lt;br /&gt;
=== Пример 1 ===&lt;br /&gt;
&lt;br /&gt;
Пусть {{Формула|f=R = (A, B, C, D)}}, {{Формула|f=F = (A\rightarrow B, AC\rightarrow D)}} и {{Формула|f=\rho = R}}&lt;br /&gt;
&lt;br /&gt;
Доказать, что это отношение не находится в 3НФ.&lt;br /&gt;
&lt;br /&gt;
Доказываем:&lt;br /&gt;
&lt;br /&gt;
1)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=i = 0}}, {{Формула|f=X_0 = ABCD}}&lt;br /&gt;
&lt;br /&gt;
2)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=(BCD)^+ = BCD\neq R}}&lt;br /&gt;
:{{Формула|f=(ACD)^+ = ACDB = R}}, {{Формула|f=X = ACD}}, {{Формула|f=i = 1}}&lt;br /&gt;
&lt;br /&gt;
3)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=i}}, как видим, возросло, значит опять 2)&lt;br /&gt;
&lt;br /&gt;
2)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=(CD)^+ = CD\neq R}}&lt;br /&gt;
:{{Формула|f=(AD)+^ = ADB\neq R}}&lt;br /&gt;
:{{Формула|f=(AC)^+ = ACBD = R}}, {{Формула|f=X_2 = AC}}, {{Формула|f=i = 2}}&lt;br /&gt;
&lt;br /&gt;
3)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=i}}, как видим, возросло, значит опять 2)&lt;br /&gt;
&lt;br /&gt;
2)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=C^+ = C\neq R}}&lt;br /&gt;
:{{Формула|f=A^+ = AB\neq R}}&lt;br /&gt;
&lt;br /&gt;
3)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=i}} не возросло, значит {{Формула|f=X = X_2 = AC}} - это ключ. Причём, можно показать, что он единственный.&lt;br /&gt;
&lt;br /&gt;
Теперь предполагаем тройку:&lt;br /&gt;
*{{Формула|f=X = AC}}&lt;br /&gt;
*{{Формула|f=Y = A\subseteq R}}&lt;br /&gt;
*{{Формула|f=H = B}} - непервичный атрибут, {{Формула|f=B\notin X}}&lt;br /&gt;
&lt;br /&gt;
Проверям три условия для неё:&lt;br /&gt;
&lt;br /&gt;
1)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=X\rightarrow Y}}, так как {{Формула|f=AC\rightarrow A}} по 1 аксиоме Армстронга;&lt;br /&gt;
&lt;br /&gt;
2)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=Y\rightarrow H}}, {{Формула|f=A\rightarrow B}} по условию;&lt;br /&gt;
&lt;br /&gt;
3)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=Y\nrightarrow X}}, {{Формула|f=A\nrightarrow AC}}&lt;br /&gt;
:{{Формула|f=A^+ = AB}}, {{Формула|f=AC\nsubseteq A^+}}&lt;br /&gt;
&lt;br /&gt;
Таким образом, найдена тройка, для которой выполняются все три условия, а значит отношение &amp;lt;u&amp;gt;не находится в 3НФ&amp;lt;/u&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Пример 2 ===&lt;br /&gt;
&lt;br /&gt;
Декомпозируем эту схему отношения {{Формула|f=R}} на две схему отношений.&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=R = (A, B, C, D)}}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=F = (A\rightarrow B, AC\rightarrow D)}}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=\rho = (AB, ACD) = (R_1, R_2)}}&lt;br /&gt;
&lt;br /&gt;
Если {{Формула|f=R_1}} и {{Формула|f=R_2}} находятся в 3НФ, то значит всё {{Формула|f=\rho}} будет в 3НФ.&lt;br /&gt;
&lt;br /&gt;
Сначала покажем 3НФ у {{Формула|f=R_1 = (AB)}}, {{Формула|f=F = (A\rightarrow B)}}:&lt;br /&gt;
&lt;br /&gt;
:* {{Формула|f=X = A}} - выберем ключом&lt;br /&gt;
:* {{Формула|f=Y}}, {{Формула|f=X\rightarrow Y}}, {{Формула|f=Y\nrightarrow X}}&lt;br /&gt;
::{{Формула|f=Y = B}}, {{Формула|f=A\rightarrow B}}, {{Формула|f=B\nrightarrow A}}&lt;br /&gt;
:* невозможно подобрать непервичный атрибут {{Формула|f=H\notin Y}}, потому что непервичным может быть только {{Формула|f=B}}.&lt;br /&gt;
&lt;br /&gt;
Таким образом, нельзя подобрать необходимую тройку. Значит, {{Формула|f=R_1}} находится в 3НФ.&lt;br /&gt;
&lt;br /&gt;
Теперь покажем 3НФ у {{Формула|f=R_2 = (ACD)}}, {{Формула|f=F = (AC\rightarrow D)}}:&lt;br /&gt;
&lt;br /&gt;
:* {{Формула|f=X = AC}} - выберем ключом&lt;br /&gt;
:* {{Формула|f=Y}}, {{Формула|f=X\rightarrow Y}}, {{Формула|f=Y\nrightarrow X}}&lt;br /&gt;
::а) {{Формула|f=A}} - что-то как-то не выполняется;&lt;br /&gt;
::б) {{Формула|f=C}} - что-то как-то не выполняется;&lt;br /&gt;
::в) {{Формула|f=D}} - что-то как-то не выполняется;&lt;br /&gt;
::г) {{Формула|f=AD}} - что-то как-то не выполняется;&lt;br /&gt;
::д) {{Формула|f=CD}} - что-то как-то не выполняется.&lt;br /&gt;
:* {{Формула|f=H\notin Y}}, {{Формула|f=H = D}}&lt;br /&gt;
::а) {{Формула|f=Y = A}}, {{Формула|f=Y\nrightarrow H}}&lt;br /&gt;
::б) {{Формула|f=Y = C}}, {{Формула|f=Y\nrightarrow H}}&lt;br /&gt;
::в-д) {{Формула|f=H\in Y}}&lt;br /&gt;
&lt;br /&gt;
Не удалось подобрать нужную тройку, так что {{Формула|f=R_2}} тоже находится в 3НФ.&lt;br /&gt;
&lt;br /&gt;
[[Категория:Теоретические основы реляционной алгебры (9 семестр)]]&lt;br /&gt;
[[Категория:Конспекты лекций и семинаров]]&lt;/div&gt;</summary>
		<author><name>81.9.52.28</name></author>
	</entry>
	<entry>
		<id>https://iu5bmstu.ru/index.php?title=%D0%A2%D0%9E%D0%A0%D0%90_(9)_-_%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_%E2%84%961_-_%D0%9E%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%B8_%D1%80%D0%B5%D0%BB%D1%8F%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D0%BE%D0%B9_%D0%B0%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D1%8B&amp;diff=2495</id>
		<title>ТОРА (9) - Лекция №1 - Операции реляционной алгебры</title>
		<link rel="alternate" type="text/html" href="https://iu5bmstu.ru/index.php?title=%D0%A2%D0%9E%D0%A0%D0%90_(9)_-_%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_%E2%84%961_-_%D0%9E%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%B8_%D1%80%D0%B5%D0%BB%D1%8F%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D0%BE%D0%B9_%D0%B0%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D1%8B&amp;diff=2495"/>
		<updated>2013-01-12T15:29:09Z</updated>

		<summary type="html">&lt;p&gt;81.9.52.28: /* Пример &amp;quot;плохой&amp;quot; схемы БД */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Определения ==&lt;br /&gt;
&lt;br /&gt;
=== Схема отношения ===&lt;br /&gt;
&lt;br /&gt;
Это поименованная совокупность атрибутов.&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=R = (A_1, ..., A_n)}}, где {{Формула|f=A_i}} - некоторый атрибут из домена отношения.&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=R = (}}идентификатор поставщика, адрес, товар, цена{{Формула|f=)=(A_1, A_2, A_3, A_4)}}.&lt;br /&gt;
&lt;br /&gt;
Здесь {{Формула|f=(A_1, A_3)}} - ключ, определяющий запись.&lt;br /&gt;
&lt;br /&gt;
=== Степень схемы отношения ===&lt;br /&gt;
&lt;br /&gt;
Это количество атрибутов в схеме.&lt;br /&gt;
&lt;br /&gt;
Для {{Формула|f=R = (A_1, A_2, A_3, A_4)}} степень равна 4.&lt;br /&gt;
&lt;br /&gt;
=== Экземпляр отношения ===&lt;br /&gt;
&lt;br /&gt;
Это конкретная таблица с данной схемой отношения.&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=R = (}}идентификатор поставщика, адрес, товар, цена{{Формула|f=)}}.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! Идентификатор !! Адрес !! Товар !! Цена&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | ОАО &amp;quot;Х&amp;quot; || Ленина, 2 || сахар || 40&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | ОАО &amp;quot;У&amp;quot; || Комсомола, 25 || соль || 5&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
=== Кортеж ===&lt;br /&gt;
&lt;br /&gt;
Любая одна строка в таблице экземпляра отношения.&lt;br /&gt;
&lt;br /&gt;
=== Схема БД ===&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=A}} - множество всех атрибутов некоторой предметной области (универсальная схема отношения).&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=R_1, ..., R_n}} - совокупность атрибутов.&lt;br /&gt;
&lt;br /&gt;
Тогда {{Формула|f=\rho=(R_1, ..., R_n)}} называется схемой БД.&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=A = (A_1, A_2, A_3, A_4)}}&lt;br /&gt;
&lt;br /&gt;
и две схемы: {{Формула|f=R_1 = (A_1, A_2)$ и $R_2 = (A_1, A_3, A_4)}}&lt;br /&gt;
&lt;br /&gt;
Так как {{Формула|f=R_1\bigcup R_2 = A}}, то {{Формула|f=\rho = (R_1, R_2)}}.&lt;br /&gt;
&lt;br /&gt;
== Примеры схем БД ==&lt;br /&gt;
&lt;br /&gt;
=== Пример &amp;quot;плохой&amp;quot; схемы БД ===&lt;br /&gt;
&lt;br /&gt;
Пусть {{Формула|f=A = (}}идентификатор поставщика, адрес, товар, цена{{Формула|f=)}}&lt;br /&gt;
&lt;br /&gt;
и есть одна схема {{Формула|f=\rho = R_1 = A}}&lt;br /&gt;
&lt;br /&gt;
Данная схема БД обладает следующими недостатками (аномалиями):&lt;br /&gt;
* избыточность. Адрес поставщика повторяется для каждого поставляемого им товара;&lt;br /&gt;
* потенциальная противоречивость. Если у поставщика меняется адрес, то его необходимо изменить во всех кортежах, в которые он входит;&lt;br /&gt;
* аномалия включения кортежа. В выбранном отношении {{Формула|f=R_1}} пара атрибутов идентификатор-товар является ключом. При включении новой записи, атрибуты ключа не должны быть пустыми, поэтому в БД нельзя включить поставщика, если он в данный момент не поставляет товар;&lt;br /&gt;
* аномалия удаления. При удалении всех товаров, поставляемых поставщиком, теряется информация о самом поставщике.&lt;br /&gt;
Первопричиной этих недостатков является то, что {{Формула|f=R_1}} не находится в {{Википедия|Третья_нормальная_форма|3НФ}}&lt;br /&gt;
&lt;br /&gt;
=== Пример &amp;quot;хорошей&amp;quot; схемы БД ===&lt;br /&gt;
&lt;br /&gt;
Пусть {{Формула|f=A = (}}идентификатор поставщика, адрес, товар, цена{{Формула|f=)}}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=R_1 = (}}идентификатор, адрес{{Формула|f=)}}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=R_2 = (}}товар, цена{{Формула|f=)}}&lt;br /&gt;
&lt;br /&gt;
Схема {{Формула|f=\rho = (R_1, R_2)}} находится в 3НФ и не обладает перечисленными выше недостатками.&lt;br /&gt;
&lt;br /&gt;
== Основные операции реляционной алгебры ==&lt;br /&gt;
&lt;br /&gt;
=== Объединение отношений ===&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=R=R_1\bigcup R_2}}&lt;br /&gt;
&lt;br /&gt;
Объединение отношений - это отношение, каждый кортеж которого принадлежит либо {{Формула|f=R_1}}, либо {{Формула|f=R_2}}.&lt;br /&gt;
{|&lt;br /&gt;
 |&lt;br /&gt;
 {| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
  ! !!{{Формула|f=A_1}} !! {{Формула|f=A_2}}&lt;br /&gt;
  |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
  ! rowspan=&amp;quot;2&amp;quot; | {{Формула|f=R_1}} &lt;br /&gt;
  | 1 || 2&lt;br /&gt;
  |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
  | 3 || 4&lt;br /&gt;
  |}&lt;br /&gt;
  | &lt;br /&gt;
 {| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
  ! !!{{Формула|f=A_1}} !! {{Формула|f=A_2}}&lt;br /&gt;
  |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
  ! rowspan=&amp;quot;2&amp;quot; | {{Формула|f=R_2}} &lt;br /&gt;
  | 5 || 6&lt;br /&gt;
  |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
  | 1 || 2&lt;br /&gt;
  |}&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !!{{Формула|f=A_1}} !! {{Формула|f=A_2}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! rowspan=&amp;quot;3&amp;quot; | {{Формула|f=R}} &lt;br /&gt;
 | 1 || 2&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | 3 || 4&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | 5 || 6&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
Дублирование кортежей не допускается.&lt;br /&gt;
&lt;br /&gt;
=== Пересечение отношений ===&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=R = R_1\bigcap R_2}}&lt;br /&gt;
&lt;br /&gt;
Пересечение отношений - это отношение, каждый кортеж которого принадлежит и {{Формула|f=R_1}}, и {{Формула|f=R_2}}&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
 |&lt;br /&gt;
 {| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
  ! !!{{Формула|f=A_1}} !! {{Формула|f=A_2}}&lt;br /&gt;
  |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
  ! rowspan=&amp;quot;2&amp;quot; | {{Формула|f=R_1}} &lt;br /&gt;
  | 1 || 2&lt;br /&gt;
  |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
  | 3 || 4&lt;br /&gt;
  |}&lt;br /&gt;
  | &lt;br /&gt;
 {| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
  ! !!{{Формула|f=A_1}} !! {{Формула|f=A_2}}&lt;br /&gt;
  |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
  ! rowspan=&amp;quot;2&amp;quot; | {{Формула|f=R_2}} &lt;br /&gt;
  | 5 || 6&lt;br /&gt;
  |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
  | 1 || 2&lt;br /&gt;
  |}&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !!{{Формула|f=A_1}} !! {{Формула|f=A_2}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! {{Формула|f=R}} &lt;br /&gt;
 | 1 || 2&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
=== Разность отношений ===&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=R = R_1 - R_2}}&lt;br /&gt;
&lt;br /&gt;
Разность отношений - это отношение, кортежи которого принадлежат {{Формула|f=R_1}} и не принадлежат {{Формула|f=R_2}}&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
 |&lt;br /&gt;
 {| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
  ! !!{{Формула|f=A_1}} !! {{Формула|f=A_2}}&lt;br /&gt;
  |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
  ! rowspan=&amp;quot;2&amp;quot; | {{Формула|f=R_1}} &lt;br /&gt;
  | 1 || 2&lt;br /&gt;
  |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
  | 3 || 4&lt;br /&gt;
  |}&lt;br /&gt;
  | &lt;br /&gt;
 {| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
  ! !!{{Формула|f=A_1}} !! {{Формула|f=A_2}}&lt;br /&gt;
  |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
  ! rowspan=&amp;quot;2&amp;quot; | {{Формула|f=R_2}} &lt;br /&gt;
  | 5 || 6&lt;br /&gt;
  |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
  | 1 || 2&lt;br /&gt;
  |}&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !!{{Формула|f=A_1}} !! {{Формула|f=A_2}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! {{Формула|f=R}} &lt;br /&gt;
 | 3 || 4&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
=== Декартово произведение ===&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=R, S}} - две схемы отношения со степенями {{Формула|f=k_1}} и {{Формула|f=k_2}}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=t = R \times S}}&lt;br /&gt;
&lt;br /&gt;
Декартово произведение - это отношение {{Формула|f=t}} со степенью {{Формула|f=k_1 + k_2}}, кортежи которого получаются {{Википедия|Конкатенация|конкатенацией}} кортежей из отношений {{Формула|f=R}} и {{Формула|f=S}}.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
 |&lt;br /&gt;
 {| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
  ! !!{{Формула|f=A_1}} !! {{Формула|f=A_2}}&lt;br /&gt;
  |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
  ! rowspan=&amp;quot;2&amp;quot; | {{Формула|f=R}} &lt;br /&gt;
  | 1 || 2&lt;br /&gt;
  |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
  | 3 || 4&lt;br /&gt;
  |}&lt;br /&gt;
  | &lt;br /&gt;
 {| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
  ! !!{{Формула|f=A_1}} !! {{Формула|f=A_3}}&lt;br /&gt;
  |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
  ! rowspan=&amp;quot;2&amp;quot; | {{Формула|f=S}} &lt;br /&gt;
  | 5 || 6&lt;br /&gt;
  |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
  | 7 || 8&lt;br /&gt;
  |}&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !!{{Формула|f=R.A_2}} !! {{Формула|f=A_2}} !! {{Формула|f=S.A_1}} !! {{Формула|f=A_3}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! rowspan=&amp;quot;4&amp;quot; | {{Формула|f=t}} &lt;br /&gt;
 | 1 || 2 || 5 || 6&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | 1 || 2 || 7 || 8&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | 3 || 4 || 5 || 6&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | 3 || 4 || 7 || 8&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
=== Проекция ===&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=t=\Pi_{A_{i1} ... A_{ik} }(R) }}&lt;br /&gt;
&lt;br /&gt;
Проекция - это отношение, каждый кортеж которого состоит из значений атрибутов {{Формула|f=A_{i1} ... A_{ik} }} исходного отношения {{Формула|f=R}}.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !! {{Формула|f=A_1}} !! {{Формула|f=A_2}} !! {{Формула|f=A_3}} !! {{Формула|f=A_4}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! rowspan=&amp;quot;4&amp;quot; | {{Формула|f=R}} &lt;br /&gt;
 | 1 || 2 || 3 || 4&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | 7 || 8 || 9 || 10&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | 3 || 4 || 5 || 6&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | 3 || 4 || 7 || 6&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !!{{Формула|f=A_1}} !! {{Формула|f=A_4}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! rowspan=&amp;quot;3&amp;quot; | {{Формула|f=t = \Pi_{A_1, A_4}(R)}} &lt;br /&gt;
 | 1 || 4&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | 7 || 10&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | 3 || 6&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
=== Селекция ===&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=t = \sigma_F(R)}}&lt;br /&gt;
&lt;br /&gt;
Селекция - это отношение, каждый кортеж которого принадлежит исходному отношению {{Формула|f=R}} и удовлетворяет логическому условию {{Формула|f=F}}.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !!{{Формула|f=A_1}} !! {{Формула|f=A_2}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! rowspan=&amp;quot;3&amp;quot; | {{Формула|f=R}} &lt;br /&gt;
 | 1 || 2&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | 9 || 8&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | 3 || 3&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !!{{Формула|f=A_1}} !! {{Формула|f=A_2}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! rowspan=&amp;quot;2&amp;quot; | {{Формула|f=t = \sigma_{A_1\leq A_2}(R)}} &lt;br /&gt;
 | 1 || 2&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | 3 || 3&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
=== Естественное соединение ===&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=t = R\bowtie S}}&lt;br /&gt;
&lt;br /&gt;
Определение этой операции следует из способа построения естественного соединения.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
 | valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
 {| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
  ! !!{{Формула|f=A_1}} !! {{Формула|f=A_2}} !! {{Формула|f=A_3}}&lt;br /&gt;
  |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
  ! rowspan=&amp;quot;2&amp;quot; | {{Формула|f=R}} &lt;br /&gt;
  | 1 || 2 || 3&lt;br /&gt;
  |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
  | 4 || 6 || 7&lt;br /&gt;
  |}&lt;br /&gt;
  | valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
 {| class=&amp;quot;wikitable&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
  ! !! {{Формула|f=A_1}} !! {{Формула|f=A_2}} !! {{Формула|f=A_4}} !! {{Формула|f=A_5}}&lt;br /&gt;
  |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
  ! rowspan=&amp;quot;3&amp;quot; | {{Формула|f=S}} &lt;br /&gt;
  | 1 || 2 || 7 || 8&lt;br /&gt;
  |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
  | 8 || 9 || 10 || 11&lt;br /&gt;
  |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
  | 5 || 6 || 9 || 16&lt;br /&gt;
  |}&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
Построение естественного соединения:&lt;br /&gt;
&lt;br /&gt;
:1) построить декартово произведение {{Формула|f=R\times S}}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !! {{Формула|f=R.A_1}} !! {{Формула|f=R.A_2}} !! {{Формула|f=A_3}} !! {{Формула|f=S.A_1}} !! {{Формула|f=S.A_2}}!! {{Формула|f=A_4}} !! {{Формула|f=A_5}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! rowspan=&amp;quot;6&amp;quot; | {{Формула|f=t_1}} &lt;br /&gt;
 | 1 || 2 || 3 || 1 || 2 || 7 || 8&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | 1 || 2 || 3 || 8 || 9 || 10 || 11&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | 1 || 2 || 3 || 4 || 6 || 9 || 16&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | 4 || 6 || 7 || 1 || 2 || 7 || 8&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | 4 || 6 || 7 || 8 || 9 || 10 || 11&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | 4 || 6 || 7 || 4 || 6 || 9 || 16&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
:2) выбрать из этого произведения кортежи по условию {{Формула|f=R.A_{i1} = S.A_{i1} ... R.A_{ik} = S.A_{ik} }}, где {{Формула|f=A_1 = A_k}} - общие атрибуты в схемах отношений {{Формула|f=R}} и {{Формула|f=S}} (предполагается, что эти атрибуты занимают одинаковое положение в отношениях. Хотя не обязательно)&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !! {{Формула|f=R.A_1}} !! {{Формула|f=R.A_2}} !! {{Формула|f=A_3}} !! {{Формула|f=S.A_1}} !! {{Формула|f=S.A_2}}!! {{Формула|f=A_4}} !! {{Формула|f=A_5}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! rowspan=&amp;quot;2&amp;quot; | {{Формула|f=t_2}} &lt;br /&gt;
 | 1 || 2 || 3 || 1 || 2 || 7 || 8&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | 4 || 6 || 7 || 4 || 6 || 9 || 16&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
:3) удалить из полученного отношения {{Формула|f=S.A_{i1} ... S.A_{ik} }}, потому что они будут дублирующими.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !! {{Формула|f=R.A_1}} !! {{Формула|f=R.A_2}} !! {{Формула|f=A_3}} !! {{Формула|f=A_4}} !! {{Формула|f=A_5}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! rowspan=&amp;quot;2&amp;quot; | {{Формула|f=t_3}} &lt;br /&gt;
 | 1 || 2 || 3 || 7 || 8&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | 4 || 6 || 7 || 9 || 16&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
[[Категория:Теоретические основы реляционной алгебры (9 семестр)]]&lt;br /&gt;
[[Категория:Конспекты лекций и семинаров]]&lt;/div&gt;</summary>
		<author><name>81.9.52.28</name></author>
	</entry>
	<entry>
		<id>https://iu5bmstu.ru/index.php?title=%D0%A2%D0%9E%D0%A0%D0%90_(9)_-_%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_%E2%84%965_-_%D0%A2%D1%80%D0%B5%D1%82%D1%8C%D1%8F_%D0%BD%D0%BE%D1%80%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D1%84%D0%BE%D1%80%D0%BC%D0%B0&amp;diff=2494</id>
		<title>ТОРА (9) - Лекция №5 - Третья нормальная форма</title>
		<link rel="alternate" type="text/html" href="https://iu5bmstu.ru/index.php?title=%D0%A2%D0%9E%D0%A0%D0%90_(9)_-_%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_%E2%84%965_-_%D0%A2%D1%80%D0%B5%D1%82%D1%8C%D1%8F_%D0%BD%D0%BE%D1%80%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D1%84%D0%BE%D1%80%D0%BC%D0%B0&amp;diff=2494"/>
		<updated>2013-01-12T14:30:19Z</updated>

		<summary type="html">&lt;p&gt;81.9.52.28: /* Пример 2 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойство сохранения ФЗ ==&lt;br /&gt;
&lt;br /&gt;
=== Алгоритм проверки схемы БД на обладание свойством сохранения ФЗ ===&lt;br /&gt;
&lt;br /&gt;
==== Пример 1 ====&lt;br /&gt;
&lt;br /&gt;
Пусть {{Формула|f=R = (A, B, C)}}, {{Формула|f=\rho = (AB, BC) = (R_1, R_2)}} и {{Формула|f=F = (A\rightarrow B, B\rightarrow C)}}&lt;br /&gt;
&lt;br /&gt;
Обладает ли {{Формула|f=\rho}} сохранением ФЗ?&lt;br /&gt;
&lt;br /&gt;
Смотрим:&lt;br /&gt;
&lt;br /&gt;
1)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=H=\varnothing}}, {{Формула|f=УНП = (A\rightarrow BC, B\rightarrow C)}}&lt;br /&gt;
&lt;br /&gt;
2)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=G = (A\rightarrow B, A\rightarrow C, B\rightarrow C)}}&lt;br /&gt;
&lt;br /&gt;
3)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=A\rightarrow B}}, {{Формула|f=AB\subseteq R_1}}&lt;br /&gt;
:{{Формула|f=A\rightarrow C}}, {{Формула|f=AC\nsubseteq R_2}}, {{Формула|f=H=(A\rightarrow C)}}&lt;br /&gt;
:{{Формула|f=B\rightarrow C}}, {{Формула|f=BC\subseteq R_2}}&lt;br /&gt;
&lt;br /&gt;
4) пропускаем, так как не выполнилось условие в 3)&lt;br /&gt;
&lt;br /&gt;
5) &lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=H}} не пустое.&lt;br /&gt;
&lt;br /&gt;
6)&lt;br /&gt;
&lt;br /&gt;
:выполняется ли {{Формула|f=A\rightarrow C\in(G-H)^+ = (A\rightarrow B, B\rightarrow C)^+}}&lt;br /&gt;
:{{Формула|f=A^+=ABC}}, {{Формула|f=C\in A^+}}, значит {{Формула|f=\rho}} &amp;lt;u&amp;gt;обладает сохранением ФЗ&amp;lt;/u&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Пример 2 ====&lt;br /&gt;
&lt;br /&gt;
Пусть {{Формула|f=R = (A, B, C)}}, {{Формула|f=\rho = (AB, AC) = (R_1, R_2)}} и {{Формула|f=F = (A\rightarrow B, B\rightarrow C)}}&lt;br /&gt;
&lt;br /&gt;
Обладает ли {{Формула|f=\rho}} сохранением ФЗ?&lt;br /&gt;
&lt;br /&gt;
1-4)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=H = \varnothing}}, {{Формула|f=УНП = (A\rightarrow BC, B\rightarrow C)}}&lt;br /&gt;
:{{Формула|f=H = (B\rightarrow C))}}&lt;br /&gt;
&lt;br /&gt;
5)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=H}} не пустое.&lt;br /&gt;
&lt;br /&gt;
6)&lt;br /&gt;
&lt;br /&gt;
:выполняется ли {{Формула|f=B\rightarrow C\in(G - H)^+ = (A\rightarrow BC)^+}}&lt;br /&gt;
:{{Формула|f=B^+ = B}}, {{Формула|f=C\notin B^+}}, значит {{Формула|f=\rho}} &amp;lt;u&amp;gt;не обладает сохранением ФЗ&amp;lt;/u&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Ключ схемы отношения ==&lt;br /&gt;
&lt;br /&gt;
Если атрибут {{Формула|f=A_i\in R}} входит в какой-либо ключ схемы отношения {{Формула|f=R}}, то он называется &#039;&#039;&#039;первичным&#039;&#039;&#039;. А если не входит ни в один, то называется &#039;&#039;&#039;непервичным&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Пусть&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=R = (A_1 ... A_n)}} - некоторая схема отношения.&lt;br /&gt;
:{{Формула|f=F}} - множество ФЗ.&lt;br /&gt;
&lt;br /&gt;
Тогда&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=X\subseteq R}} называется ключом схемы, если выполняются:&lt;br /&gt;
:* {{Формула|f=X\rightarrow A_1 ... A_n\in F^+}}&lt;br /&gt;
:* {{Формула|f=\forall Z\subset X}}, {{Формула|f=Z\rightarrow A_1 ... A_n\notin F^+}}. {{Формула|f=X}} содержит минимальное число атрибутов, для которых выполняется предыдущее свойство.&lt;br /&gt;
&lt;br /&gt;
=== Алгоритм построения ключа ===&lt;br /&gt;
&lt;br /&gt;
Базируется на определении ключа. Позволяет построить только один ключ.&lt;br /&gt;
&lt;br /&gt;
1)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=i = 0}}, {{Формула|f=X_0 = A_1 ... A_n}}&lt;br /&gt;
&lt;br /&gt;
2)&lt;br /&gt;
&lt;br /&gt;
:цикл по атрибутам {{Формула|f=A_j}} в {{Формула|f=X_i}}&lt;br /&gt;
&lt;br /&gt;
:Если {{Формула|f=(X_i - A_j)^+ = R}}, то {{Формула|f=X_{i+1} = X_i - A_j}}, {{Формула|f=i = i + 1}} и выйти из цикла;&lt;br /&gt;
:иначе продолжить цикл&lt;br /&gt;
&lt;br /&gt;
3)&lt;br /&gt;
&lt;br /&gt;
:если {{Формула|f=i}} возросло, то перейти к шагу 2);&lt;br /&gt;
:иначе {{Формула|f=X = X_i}} - это найденный ключ.&lt;br /&gt;
&lt;br /&gt;
=== Пример построения ключа ===&lt;br /&gt;
&lt;br /&gt;
Пусть {{Формула|f=R = (A, B, C, D)}}, {{Формула|f=F = (AB\rightarrow DC, BC\rightarrow AD)}}&lt;br /&gt;
&lt;br /&gt;
Надо построить ключ.&lt;br /&gt;
&lt;br /&gt;
1)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=i = 0}}, {{Формула|f=X_0 = ABCD}}&lt;br /&gt;
&lt;br /&gt;
2)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=(X_0 - A)^+ = (BCD)^+ = BCDA = R}}, значит {{Формула|f=X_1 = BCD}}, {{Формула|f=i = 1}}&lt;br /&gt;
&lt;br /&gt;
3)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=i}}, как видим, возросло, значит опять 2)&lt;br /&gt;
&lt;br /&gt;
2)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=(CD)^+ = CD\neq R}}&lt;br /&gt;
:{{Формула|f=(BD)^+ = BD\neq R}}&lt;br /&gt;
:{{Формула|f=(BC)^+ = BCAD = R}}, {{Формула|f=X_2 = BC}}, {{Формула|f=i = 2}}&lt;br /&gt;
&lt;br /&gt;
3)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=i}}, как видим, возросло, значит опять 2)&lt;br /&gt;
&lt;br /&gt;
2)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=C^+ = C\neq R}}&lt;br /&gt;
:{{Формула|f=B^+ = B\neq R}}&lt;br /&gt;
&lt;br /&gt;
3) &lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=i}}, как видим, не возросло. Значит, {{Формула|f=X = BC}} - ключ. Но не единственный, {{Формула|f=X = AB}} - тоже ключ, просто у нас получился сначала этот.&lt;br /&gt;
&lt;br /&gt;
Значит, {{Формула|f=A,B,C}} - первичные атрибуты, а {{Формула|f=D}} - непервичный.&lt;br /&gt;
&lt;br /&gt;
== Третья нормальная форма ==&lt;br /&gt;
&lt;br /&gt;
Отношение &amp;lt;u&amp;gt;находится в 3НФ&amp;lt;/u&amp;gt;, если не существует ключа {{Формула|f=X}}, {{Формула|f=Y\subseteq R}} и непервичного атрибута {{Формула|f=H\notin Y}}.&lt;br /&gt;
&lt;br /&gt;
А если можно найти такую тройку {{Формула|f=X, Y, H}}, для которой выполняются:&lt;br /&gt;
*{{Формула|f=X\rightarrow Y\in F^+}}&lt;br /&gt;
*{{Формула|f=Y\rightarrow H\in F^+}}&lt;br /&gt;
*{{Формула|f=Y\rightarrow X\notin F^+}}&lt;br /&gt;
то схема &amp;lt;u&amp;gt;не находится в 3НФ&amp;lt;/u&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если схема отношения находится в 3НФ, то в большинстве случаев эта схема отношения не обладает [[ТОРА (9) - Лекция_№1 - Операции реляционной алгебры#Пример &amp;quot;плохой&amp;quot; схемы БД | аномалиями]]. Но существуют условия, когда схема в 3НФ обладаем этими аномалиями. Хотя, встречаются они редко. Вот они:&lt;br /&gt;
* схема отношения имеет 2 или больше ключей,&lt;br /&gt;
** и любые 2 из них являются составными,&lt;br /&gt;
*** и имеют общий атрибут.&lt;br /&gt;
&lt;br /&gt;
=== Пример 1 ===&lt;br /&gt;
&lt;br /&gt;
Пусть {{Формула|f=R = (A, B, C, D)}}, {{Формула|f=F = (A\rightarrow B, AC\rightarrow D)}} и {{Формула|f=\rho = R}}&lt;br /&gt;
&lt;br /&gt;
Доказать, что это отношение не находится в 3НФ.&lt;br /&gt;
&lt;br /&gt;
Доказываем:&lt;br /&gt;
&lt;br /&gt;
1)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=i = 0}}, {{Формула|f=X_0 = ABCD}}&lt;br /&gt;
&lt;br /&gt;
2)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=(BCD)^+ = BCD\neq R}}&lt;br /&gt;
:{{Формула|f=(ACD)^+ = ACDB = R}}, {{Формула|f=X = ACD}}, {{Формула|f=i = 1}}&lt;br /&gt;
&lt;br /&gt;
3)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=i}}, как видим, возросло, значит опять 2)&lt;br /&gt;
&lt;br /&gt;
2)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=(CD)^+ = CD\neq R}}&lt;br /&gt;
:{{Формула|f=(AD)+^ = ADB\neq R}}&lt;br /&gt;
:{{Формула|f=(AC)^+ = ACBD = R}}, {{Формула|f=X_2 = AC}}, {{Формула|f=i = 2}}&lt;br /&gt;
&lt;br /&gt;
3)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=i}}, как видим, возросло, значит опять 2)&lt;br /&gt;
&lt;br /&gt;
2)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=C^+ = C\neq R}}&lt;br /&gt;
:{{Формула|f=A^+ = AB\neq R}}&lt;br /&gt;
&lt;br /&gt;
3)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=i}} не возросло, значит {{Формула|f=X = X_2 = AC}} - это ключ. Причём, можно показать, что он единственный.&lt;br /&gt;
&lt;br /&gt;
Теперь предполагаем тройку:&lt;br /&gt;
*{{Формула|f=X = AC}}&lt;br /&gt;
*{{Формула|f=Y = A\subseteq R}}&lt;br /&gt;
*{{Формула|f=H = B}} - непервичный атрибут, {{Формула|f=B\notin X}}&lt;br /&gt;
&lt;br /&gt;
Проверям три условия для неё:&lt;br /&gt;
&lt;br /&gt;
1)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=X\rightarrow Y}}, так как {{Формула|f=AC\rightarrow A}} по 1 аксиоме Армстронга;&lt;br /&gt;
&lt;br /&gt;
2)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=Y\rightarrow H}}, {{Формула|f=A\rightarrow B}} по условию;&lt;br /&gt;
&lt;br /&gt;
3)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=Y\nrightarrow X}}, {{Формула|f=A\nrightarrow AC}}&lt;br /&gt;
:{{Формула|f=A^+ = AB}}, {{Формула|f=AC\nsubseteq A^+}}&lt;br /&gt;
&lt;br /&gt;
Таким образом, найдена тройка, для которой выполняются все три условия, а значит отношение &amp;lt;u&amp;gt;не находится в 3НФ&amp;lt;/u&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Пример 2 ===&lt;br /&gt;
&lt;br /&gt;
Декомпозируем эту схему отношения {{Формула|f=R}} на две схему отношений.&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=R = (A, B, C, D)}}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=F = (A\rightarrow B, AC\rightarrow D)}}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=\rho = (AB, ACD) = (R_1, R_2)}}&lt;br /&gt;
&lt;br /&gt;
Если {{Формула|f=R_1}} и {{Формула|f=R_2}} находятся в 3НФ, то значит всё {{Формула|f=\rho}} будет в 3НФ.&lt;br /&gt;
&lt;br /&gt;
Сначала покажем 3НФ у {{Формула|f=R_1 = (AB)}}, {{Формула|f=F = (A\rightarrow B)}}:&lt;br /&gt;
&lt;br /&gt;
:* {{Формула|f=X = A}} - выберем ключом&lt;br /&gt;
:* {{Формула|f=Y}}, {{Формула|f=X\rightarrow Y}}, {{Формула|f=Y\nrightarrow X}}&lt;br /&gt;
::{{Формула|f=Y = B}}, {{Формула|f=A\rightarrow B}}, {{Формула|f=B\nrightarrow A}}&lt;br /&gt;
:* невозможно подобрать непервичный атрибут {{Формула|f=H\notin Y}}, потому что непервичным может быть только {{Формула|f=B}}.&lt;br /&gt;
&lt;br /&gt;
Таким образом, нельзя подобрать необходимую тройку. Значит, {{Формула|f=R_1}} находится в 3НФ.&lt;br /&gt;
&lt;br /&gt;
Теперь покажем 3НФ у {{Формула|f=R_2 = (ACD)}}, {{Формула|f=F = (AC\rightarrow D)}}:&lt;br /&gt;
&lt;br /&gt;
:* {{Формула|f=X = AC}} - выберем ключом&lt;br /&gt;
:* {{Формула|f=Y}}, {{Формула|f=X\rightarrow Y}}, {{Формула|f=Y\nrightarrow X}}&lt;br /&gt;
::а) {{Формула|f=A}} - что-то как-то не выполняется;&lt;br /&gt;
::б) {{Формула|f=C}} - что-то как-то не выполняется;&lt;br /&gt;
::в) {{Формула|f=D}} - что-то как-то не выполняется;&lt;br /&gt;
::г) {{Формула|f=AD}} - что-то как-то не выполняется;&lt;br /&gt;
::д) {{Формула|f=CD}} - что-то как-то не выполняется.&lt;br /&gt;
:* {{Формула|f=H\notin Y}}, {{Формула|f=H = D}}&lt;br /&gt;
::а) {{Формула|f=Y = A}}, {{Формула|f=Y\nrightarrow H}}&lt;br /&gt;
::б) {{Формула|f=Y = C}}, {{Формула|f=Y\nrightarrow H}}&lt;br /&gt;
::в-д) {{Формула|f=H\in Y}}&lt;br /&gt;
&lt;br /&gt;
Не удалось подобрать нужную тройку, так что {{Формула|f=R_2}} тоже находится в 3НФ.&lt;br /&gt;
&lt;br /&gt;
[[Категория:Теоретические основы реляционной алгебры (9 семестр)]]&lt;br /&gt;
[[Категория:Конспекты лекций и семинаров]]&lt;/div&gt;</summary>
		<author><name>81.9.52.28</name></author>
	</entry>
	<entry>
		<id>https://iu5bmstu.ru/index.php?title=%D0%A2%D0%9E%D0%A0%D0%90_(9)_-_%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_%E2%84%965_-_%D0%A2%D1%80%D0%B5%D1%82%D1%8C%D1%8F_%D0%BD%D0%BE%D1%80%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D1%84%D0%BE%D1%80%D0%BC%D0%B0&amp;diff=2493</id>
		<title>ТОРА (9) - Лекция №5 - Третья нормальная форма</title>
		<link rel="alternate" type="text/html" href="https://iu5bmstu.ru/index.php?title=%D0%A2%D0%9E%D0%A0%D0%90_(9)_-_%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_%E2%84%965_-_%D0%A2%D1%80%D0%B5%D1%82%D1%8C%D1%8F_%D0%BD%D0%BE%D1%80%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D1%84%D0%BE%D1%80%D0%BC%D0%B0&amp;diff=2493"/>
		<updated>2013-01-12T14:26:20Z</updated>

		<summary type="html">&lt;p&gt;81.9.52.28: /* Алгоритм построения ключа */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойство сохранения ФЗ ==&lt;br /&gt;
&lt;br /&gt;
=== Алгоритм проверки схемы БД на обладание свойством сохранения ФЗ ===&lt;br /&gt;
&lt;br /&gt;
==== Пример 1 ====&lt;br /&gt;
&lt;br /&gt;
Пусть {{Формула|f=R = (A, B, C)}}, {{Формула|f=\rho = (AB, BC) = (R_1, R_2)}} и {{Формула|f=F = (A\rightarrow B, B\rightarrow C)}}&lt;br /&gt;
&lt;br /&gt;
Обладает ли {{Формула|f=\rho}} сохранением ФЗ?&lt;br /&gt;
&lt;br /&gt;
Смотрим:&lt;br /&gt;
&lt;br /&gt;
1)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=H=\varnothing}}, {{Формула|f=УНП = (A\rightarrow BC, B\rightarrow C)}}&lt;br /&gt;
&lt;br /&gt;
2)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=G = (A\rightarrow B, A\rightarrow C, B\rightarrow C)}}&lt;br /&gt;
&lt;br /&gt;
3)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=A\rightarrow B}}, {{Формула|f=AB\subseteq R_1}}&lt;br /&gt;
:{{Формула|f=A\rightarrow C}}, {{Формула|f=AC\nsubseteq R_2}}, {{Формула|f=H=(A\rightarrow C)}}&lt;br /&gt;
:{{Формула|f=B\rightarrow C}}, {{Формула|f=BC\subseteq R_2}}&lt;br /&gt;
&lt;br /&gt;
4) пропускаем, так как не выполнилось условие в 3)&lt;br /&gt;
&lt;br /&gt;
5) &lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=H}} не пустое.&lt;br /&gt;
&lt;br /&gt;
6)&lt;br /&gt;
&lt;br /&gt;
:выполняется ли {{Формула|f=A\rightarrow C\in(G-H)^+ = (A\rightarrow B, B\rightarrow C)^+}}&lt;br /&gt;
:{{Формула|f=A^+=ABC}}, {{Формула|f=C\in A^+}}, значит {{Формула|f=\rho}} &amp;lt;u&amp;gt;обладает сохранением ФЗ&amp;lt;/u&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Пример 2 ====&lt;br /&gt;
&lt;br /&gt;
Пусть {{Формула|f=R = (A, B, C)}}, {{Формула|f=\rho = (AB, AC) = (R_1, R_2)}} и {{Формула|f=F = (A\rightarrow B, B\rightarrow C)}}&lt;br /&gt;
&lt;br /&gt;
Обладает ли {{Формула|f=\rho}} сохранением ФЗ?&lt;br /&gt;
&lt;br /&gt;
1-4)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=H = \varnothing}}, {{Формула|f=УНП = (A\rightarrow BC, B\rightarrow C)}}&lt;br /&gt;
:{{Формула|f=H = (B\rightarrow C))}}&lt;br /&gt;
&lt;br /&gt;
5)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=H}} не пустое.&lt;br /&gt;
&lt;br /&gt;
6)&lt;br /&gt;
&lt;br /&gt;
:выполняется ли {{Формула|f=B\rightarrow C\in(G - H)^+ = (A\rightarrow BC)}}&lt;br /&gt;
:{{Формула|f=B^+ = B}}, {{Формула|f=C\notin B^+}}, значит {{Формула|f=\rho}} &amp;lt;u&amp;gt;не обладает сохранением ФЗ&amp;lt;/u&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Ключ схемы отношения ==&lt;br /&gt;
&lt;br /&gt;
Если атрибут {{Формула|f=A_i\in R}} входит в какой-либо ключ схемы отношения {{Формула|f=R}}, то он называется &#039;&#039;&#039;первичным&#039;&#039;&#039;. А если не входит ни в один, то называется &#039;&#039;&#039;непервичным&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Пусть&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=R = (A_1 ... A_n)}} - некоторая схема отношения.&lt;br /&gt;
:{{Формула|f=F}} - множество ФЗ.&lt;br /&gt;
&lt;br /&gt;
Тогда&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=X\subseteq R}} называется ключом схемы, если выполняются:&lt;br /&gt;
:* {{Формула|f=X\rightarrow A_1 ... A_n\in F^+}}&lt;br /&gt;
:* {{Формула|f=\forall Z\subset X}}, {{Формула|f=Z\rightarrow A_1 ... A_n\notin F^+}}. {{Формула|f=X}} содержит минимальное число атрибутов, для которых выполняется предыдущее свойство.&lt;br /&gt;
&lt;br /&gt;
=== Алгоритм построения ключа ===&lt;br /&gt;
&lt;br /&gt;
Базируется на определении ключа. Позволяет построить только один ключ.&lt;br /&gt;
&lt;br /&gt;
1)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=i = 0}}, {{Формула|f=X_0 = A_1 ... A_n}}&lt;br /&gt;
&lt;br /&gt;
2)&lt;br /&gt;
&lt;br /&gt;
:цикл по атрибутам {{Формула|f=A_j}} в {{Формула|f=X_i}}&lt;br /&gt;
&lt;br /&gt;
:Если {{Формула|f=(X_i - A_j)^+ = R}}, то {{Формула|f=X_{i+1} = X_i - A_j}}, {{Формула|f=i = i + 1}} и выйти из цикла;&lt;br /&gt;
:иначе продолжить цикл&lt;br /&gt;
&lt;br /&gt;
3)&lt;br /&gt;
&lt;br /&gt;
:если {{Формула|f=i}} возросло, то перейти к шагу 2);&lt;br /&gt;
:иначе {{Формула|f=X = X_i}} - это найденный ключ.&lt;br /&gt;
&lt;br /&gt;
=== Пример построения ключа ===&lt;br /&gt;
&lt;br /&gt;
Пусть {{Формула|f=R = (A, B, C, D)}}, {{Формула|f=F = (AB\rightarrow DC, BC\rightarrow AD)}}&lt;br /&gt;
&lt;br /&gt;
Надо построить ключ.&lt;br /&gt;
&lt;br /&gt;
1)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=i = 0}}, {{Формула|f=X_0 = ABCD}}&lt;br /&gt;
&lt;br /&gt;
2)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=(X_0 - A)^+ = (BCD)^+ = BCDA = R}}, значит {{Формула|f=X_1 = BCD}}, {{Формула|f=i = 1}}&lt;br /&gt;
&lt;br /&gt;
3)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=i}}, как видим, возросло, значит опять 2)&lt;br /&gt;
&lt;br /&gt;
2)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=(CD)^+ = CD\neq R}}&lt;br /&gt;
:{{Формула|f=(BD)^+ = BD\neq R}}&lt;br /&gt;
:{{Формула|f=(BC)^+ = BCAD = R}}, {{Формула|f=X_2 = BC}}, {{Формула|f=i = 2}}&lt;br /&gt;
&lt;br /&gt;
3)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=i}}, как видим, возросло, значит опять 2)&lt;br /&gt;
&lt;br /&gt;
2)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=C^+ = C\neq R}}&lt;br /&gt;
:{{Формула|f=B^+ = B\neq R}}&lt;br /&gt;
&lt;br /&gt;
3) &lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=i}}, как видим, не возросло. Значит, {{Формула|f=X = BC}} - ключ. Но не единственный, {{Формула|f=X = AB}} - тоже ключ, просто у нас получился сначала этот.&lt;br /&gt;
&lt;br /&gt;
Значит, {{Формула|f=A,B,C}} - первичные атрибуты, а {{Формула|f=D}} - непервичный.&lt;br /&gt;
&lt;br /&gt;
== Третья нормальная форма ==&lt;br /&gt;
&lt;br /&gt;
Отношение &amp;lt;u&amp;gt;находится в 3НФ&amp;lt;/u&amp;gt;, если не существует ключа {{Формула|f=X}}, {{Формула|f=Y\subseteq R}} и непервичного атрибута {{Формула|f=H\notin Y}}.&lt;br /&gt;
&lt;br /&gt;
А если можно найти такую тройку {{Формула|f=X, Y, H}}, для которой выполняются:&lt;br /&gt;
*{{Формула|f=X\rightarrow Y\in F^+}}&lt;br /&gt;
*{{Формула|f=Y\rightarrow H\in F^+}}&lt;br /&gt;
*{{Формула|f=Y\rightarrow X\notin F^+}}&lt;br /&gt;
то схема &amp;lt;u&amp;gt;не находится в 3НФ&amp;lt;/u&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если схема отношения находится в 3НФ, то в большинстве случаев эта схема отношения не обладает [[ТОРА (9) - Лекция_№1 - Операции реляционной алгебры#Пример &amp;quot;плохой&amp;quot; схемы БД | аномалиями]]. Но существуют условия, когда схема в 3НФ обладаем этими аномалиями. Хотя, встречаются они редко. Вот они:&lt;br /&gt;
* схема отношения имеет 2 или больше ключей,&lt;br /&gt;
** и любые 2 из них являются составными,&lt;br /&gt;
*** и имеют общий атрибут.&lt;br /&gt;
&lt;br /&gt;
=== Пример 1 ===&lt;br /&gt;
&lt;br /&gt;
Пусть {{Формула|f=R = (A, B, C, D)}}, {{Формула|f=F = (A\rightarrow B, AC\rightarrow D)}} и {{Формула|f=\rho = R}}&lt;br /&gt;
&lt;br /&gt;
Доказать, что это отношение не находится в 3НФ.&lt;br /&gt;
&lt;br /&gt;
Доказываем:&lt;br /&gt;
&lt;br /&gt;
1)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=i = 0}}, {{Формула|f=X_0 = ABCD}}&lt;br /&gt;
&lt;br /&gt;
2)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=(BCD)^+ = BCD\neq R}}&lt;br /&gt;
:{{Формула|f=(ACD)^+ = ACDB = R}}, {{Формула|f=X = ACD}}, {{Формула|f=i = 1}}&lt;br /&gt;
&lt;br /&gt;
3)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=i}}, как видим, возросло, значит опять 2)&lt;br /&gt;
&lt;br /&gt;
2)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=(CD)^+ = CD\neq R}}&lt;br /&gt;
:{{Формула|f=(AD)+^ = ADB\neq R}}&lt;br /&gt;
:{{Формула|f=(AC)^+ = ACBD = R}}, {{Формула|f=X_2 = AC}}, {{Формула|f=i = 2}}&lt;br /&gt;
&lt;br /&gt;
3)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=i}}, как видим, возросло, значит опять 2)&lt;br /&gt;
&lt;br /&gt;
2)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=C^+ = C\neq R}}&lt;br /&gt;
:{{Формула|f=A^+ = AB\neq R}}&lt;br /&gt;
&lt;br /&gt;
3)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=i}} не возросло, значит {{Формула|f=X = X_2 = AC}} - это ключ. Причём, можно показать, что он единственный.&lt;br /&gt;
&lt;br /&gt;
Теперь предполагаем тройку:&lt;br /&gt;
*{{Формула|f=X = AC}}&lt;br /&gt;
*{{Формула|f=Y = A\subseteq R}}&lt;br /&gt;
*{{Формула|f=H = B}} - непервичный атрибут, {{Формула|f=B\notin X}}&lt;br /&gt;
&lt;br /&gt;
Проверям три условия для неё:&lt;br /&gt;
&lt;br /&gt;
1)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=X\rightarrow Y}}, так как {{Формула|f=AC\rightarrow A}} по 1 аксиоме Армстронга;&lt;br /&gt;
&lt;br /&gt;
2)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=Y\rightarrow H}}, {{Формула|f=A\rightarrow B}} по условию;&lt;br /&gt;
&lt;br /&gt;
3)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=Y\nrightarrow X}}, {{Формула|f=A\nrightarrow AC}}&lt;br /&gt;
:{{Формула|f=A^+ = AB}}, {{Формула|f=AC\nsubseteq A^+}}&lt;br /&gt;
&lt;br /&gt;
Таким образом, найдена тройка, для которой выполняются все три условия, а значит отношение &amp;lt;u&amp;gt;не находится в 3НФ&amp;lt;/u&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Пример 2 ===&lt;br /&gt;
&lt;br /&gt;
Декомпозируем эту схему отношения {{Формула|f=R}} на две схему отношений.&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=R = (A, B, C, D)}}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=F = (A\rightarrow B, AC\rightarrow D)}}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=\rho = (AB, ACD) = (R_1, R_2)}}&lt;br /&gt;
&lt;br /&gt;
Если {{Формула|f=R_1}} и {{Формула|f=R_2}} находятся в 3НФ, то значит всё {{Формула|f=\rho}} будет в 3НФ.&lt;br /&gt;
&lt;br /&gt;
Сначала покажем 3НФ у {{Формула|f=R_1 = (AB)}}, {{Формула|f=F = (A\rightarrow B)}}:&lt;br /&gt;
&lt;br /&gt;
:* {{Формула|f=X = A}} - выберем ключом&lt;br /&gt;
:* {{Формула|f=Y}}, {{Формула|f=X\rightarrow Y}}, {{Формула|f=Y\nrightarrow X}}&lt;br /&gt;
::{{Формула|f=Y = B}}, {{Формула|f=A\rightarrow B}}, {{Формула|f=B\nrightarrow A}}&lt;br /&gt;
:* невозможно подобрать непервичный атрибут {{Формула|f=H\notin Y}}, потому что непервичным может быть только {{Формула|f=B}}.&lt;br /&gt;
&lt;br /&gt;
Таким образом, нельзя подобрать необходимую тройку. Значит, {{Формула|f=R_1}} находится в 3НФ.&lt;br /&gt;
&lt;br /&gt;
Теперь покажем 3НФ у {{Формула|f=R_2 = (ACD)}}, {{Формула|f=F = (AC\rightarrow D)}}:&lt;br /&gt;
&lt;br /&gt;
:* {{Формула|f=X = AC}} - выберем ключом&lt;br /&gt;
:* {{Формула|f=Y}}, {{Формула|f=X\rightarrow Y}}, {{Формула|f=Y\nrightarrow X}}&lt;br /&gt;
::а) {{Формула|f=A}} - что-то как-то не выполняется;&lt;br /&gt;
::б) {{Формула|f=C}} - что-то как-то не выполняется;&lt;br /&gt;
::в) {{Формула|f=D}} - что-то как-то не выполняется;&lt;br /&gt;
::г) {{Формула|f=AD}} - что-то как-то не выполняется;&lt;br /&gt;
::д) {{Формула|f=CD}} - что-то как-то не выполняется.&lt;br /&gt;
:* {{Формула|f=H\notin Y}}, {{Формула|f=H = D}}&lt;br /&gt;
::а) {{Формула|f=Y = A}}, {{Формула|f=Y\nrightarrow H}}&lt;br /&gt;
::б) {{Формула|f=Y = C}}, {{Формула|f=Y\nrightarrow H}}&lt;br /&gt;
::в-д) {{Формула|f=H\in Y}}&lt;br /&gt;
&lt;br /&gt;
Не удалось подобрать нужную тройку, так что {{Формула|f=R_2}} тоже находится в 3НФ.&lt;br /&gt;
&lt;br /&gt;
[[Категория:Теоретические основы реляционной алгебры (9 семестр)]]&lt;br /&gt;
[[Категория:Конспекты лекций и семинаров]]&lt;/div&gt;</summary>
		<author><name>81.9.52.28</name></author>
	</entry>
	<entry>
		<id>https://iu5bmstu.ru/index.php?title=%D0%A2%D0%9E%D0%A0%D0%90_(9)_-_%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_%E2%84%963_-_%D0%A5%D0%BE%D1%80%D0%BE%D1%88%D0%B0%D1%8F_%D1%81%D1%85%D0%B5%D0%BC%D0%B0_%D0%91%D0%94_-_%D0%A1%D0%BE%D0%B5%D0%B4%D0%B8%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B1%D0%B5%D0%B7_%D0%BF%D0%BE%D1%82%D0%B5%D1%80%D1%8C&amp;diff=2489</id>
		<title>ТОРА (9) - Лекция №3 - Хорошая схема БД - Соединение без потерь</title>
		<link rel="alternate" type="text/html" href="https://iu5bmstu.ru/index.php?title=%D0%A2%D0%9E%D0%A0%D0%90_(9)_-_%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_%E2%84%963_-_%D0%A5%D0%BE%D1%80%D0%BE%D1%88%D0%B0%D1%8F_%D1%81%D1%85%D0%B5%D0%BC%D0%B0_%D0%91%D0%94_-_%D0%A1%D0%BE%D0%B5%D0%B4%D0%B8%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B1%D0%B5%D0%B7_%D0%BF%D0%BE%D1%82%D0%B5%D1%80%D1%8C&amp;diff=2489"/>
		<updated>2013-01-11T21:46:29Z</updated>

		<summary type="html">&lt;p&gt;81.9.52.28: /* Пример */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Пусть {{Формула|f=F}} и {{Формула|f=G}} - два множества ФЗ.&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=G}} называется &#039;&#039;покрытием&#039;&#039; {{Формула|f=F}}, если имеет место равенство {{Формула|f=G^+ = F^+}}&lt;br /&gt;
&lt;br /&gt;
Существуют различные виды покрытий. Но мы рассмотрим только один - &#039;&#039;условно-неизбыточное покрытие&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Алгоритм построения условно-неизбыточного покрытия ==&lt;br /&gt;
&lt;br /&gt;
1) если в множестве ФЗ {{Формула|f=F}} встречаются ФЗ с одинаковой левой частью {{Формула|f=X}}, то следует объединить эти ФЗ в одну ФЗ. Это следует из леммы объединения. Получившееся множество ФЗ обозначим {{Формула|f=G}};&lt;br /&gt;
&lt;br /&gt;
2) для каждой ФЗ {{Формула|f=X\rightarrow Y}} из {{Формула|f=G}} заменить её на {{Формула|f=X\rightarrow X^+ - X}};&lt;br /&gt;
&lt;br /&gt;
После выполнения 1) и 2) получаем замыкание {{Формула|f=G^+ = F^+}}&lt;br /&gt;
&lt;br /&gt;
=== Доказательство ===&lt;br /&gt;
&lt;br /&gt;
1)&lt;br /&gt;
&lt;br /&gt;
:Докажем, что если ФЗ {{Формула|f=X\rightarrow Y\in F}} (из этого следует, что {{Формула|f=Y \subseteq X^+}} (1) по определению замыкания множества аттрибутов), то эта ФЗ принадежит {{Формула|f=G^+}}&lt;br /&gt;
&lt;br /&gt;
:По построению G имеет место ФЗ: {{Формула|f=X\rightarrow X^+ - X}} (2)&lt;br /&gt;
&lt;br /&gt;
:Пополним эту ФЗ: {{Формула|f=X\rightarrow (X^+ - X)\bigcup X = X^+}} (3)&lt;br /&gt;
&lt;br /&gt;
:Теперь по первой аксиоме Армстронга из (1) имеем {{Формула|f=X^+\rightarrow Y}} (4)&lt;br /&gt;
&lt;br /&gt;
:Значит, {{Формула|f=X\rightarrow Y \in G^+}}, по третьей аксиоме Армстронга, исходя из (3) и (4).&lt;br /&gt;
&lt;br /&gt;
2)&lt;br /&gt;
&lt;br /&gt;
:Докажем обратное, что если {{Формула|f=X\rightarrow Y \in G}},то {{Формула|f=X\rightarrow Y \in F^+}}&lt;br /&gt;
&lt;br /&gt;
:По построению G имеем: {{Формула|f=Y = X^+ - X}} (5)&lt;br /&gt;
&lt;br /&gt;
:Для F имеем:&lt;br /&gt;
:{{Формула|f=X\rightarrow X^+}} (по определению) (6)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=X^+\rightarrow X^+ - X}} (1 аксиома Армстронга, так как {{Формула|f=X^+ - X\subseteq X^+}}) (7)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=X\rightarrow X^+ - X = Y}} (3 аксимома Армстронга из (6)и (7), и по равенству (5))&lt;br /&gt;
&lt;br /&gt;
:В итоге получили {{Формула|f=X\rightarrow Y \in F^+}} Теорема доказана.&lt;br /&gt;
&lt;br /&gt;
=== Пример ===&lt;br /&gt;
&lt;br /&gt;
УСО: {{Формула|f=R = (A, B, C)}}&lt;br /&gt;
&lt;br /&gt;
Множество ФЗ: {{Формула|f=F = (A\rightarrow B, B\rightarrow A, C\rightarrow A, A\rightarrow C, B\rightarrow C)}}&lt;br /&gt;
&lt;br /&gt;
1)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=G = (A\rightarrow BC, B\rightarrow AC, C\rightarrow A)}}&lt;br /&gt;
&lt;br /&gt;
2)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=A^+ = ABC}}, {{Формула|f=A^+ - A = BC}}&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=B^+ = BAC}}, {{Формула|f=B^+ - B = AC}}&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=C^+ = CAB}}, {{Формула|f=C^+ - C = AB}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Тогда {{Формула|f=G = (A\rightarrow BC, B\rightarrow AC, C\rightarrow AB)}} будет являться УНП.&lt;br /&gt;
&lt;br /&gt;
== Свойства &amp;quot;хорошей&amp;quot; схемы БД ==&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Хорошая&amp;quot;, но не оптимальная. Должна обладать следующими свойствами:&lt;br /&gt;
* соединение без потерь;&lt;br /&gt;
* сохранение ФЗ;&lt;br /&gt;
* каждая схема отношений в этой БД находится в 3НФ. Наличие этого свойства обеспечивает отсутствие в схемах отношений следующих аномалий:&lt;br /&gt;
** избыточность;&lt;br /&gt;
** потенциальная противоречивсть;&lt;br /&gt;
** аномалия обновления;&lt;br /&gt;
** аномалия удаления.&lt;br /&gt;
&lt;br /&gt;
=== Соединение без потерь ===&lt;br /&gt;
&lt;br /&gt;
Чтобы схема БД обладала свойством соединения без потерь, необходимо, чтобы хотя бы одна из таблиц содержала ключ универсальной схемы отношений.&lt;br /&gt;
&lt;br /&gt;
Пусть {{Формула|f=\rho = (R_1 ... R_n)}} - схема БД. Она будет обладать свойством соединения без потерь, если для любого экземпляра отношения {{Формула|f=r}} из {{Формула|f=R}} справедливо равенство: {{Формула|f=r = \Pi_{R_1}(r) \bowtie \Pi_{R_2}(r) \bowtie ... \bowtie \Pi_{R_n}(r)}}, где {{Формула|f=\Pi_{R_i}(r)}} - это проекция экземпляра отношения {{Формула|f=r}} на множество атрибутов {{Формула|f=R_i}}&lt;br /&gt;
&lt;br /&gt;
==== Пример БД, не обладающей свойством соединения без потерь ====&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=R = (A, B, C)}}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=\rho = (AB, BC) = (R_1, R_2)}}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=F = (A\rightarrow B)}}&lt;br /&gt;
&lt;br /&gt;
Достаточно привести пример экземпляра {{Формула|f=r}}, для которого равенство не выполняется:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !! A !! B !! C&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | rowspan=&amp;quot;2&amp;quot; | {{Формула|f=r}} || {{Формула|f=a_1}} || {{Формула|f=b_1}} || {{Формула|f=c_1}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | {{Формула|f=a_2}} || {{Формула|f=b_1}} || {{Формула|f=c_2}}&lt;br /&gt;
 |}&lt;br /&gt;
 &lt;br /&gt;
{|&lt;br /&gt;
 | valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !! A !! B&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | rowspan=&amp;quot;2&amp;quot; | {{Формула|f=\Pi_{R_1}(r)}} || {{Формула|f=a_1}} || {{Формула|f=b_1}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | {{Формула|f=a_2}} || {{Формула|f=b_1}}&lt;br /&gt;
 |}&lt;br /&gt;
 |&lt;br /&gt;
 | valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
 |&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !! В !! С&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | rowspan=&amp;quot;2&amp;quot; | {{Формула|f=\Pi_{R_2}(r)}} || {{Формула|f=b_1}} || {{Формула|f=c_1}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | {{Формула|f=b_1}} || {{Формула|f=c_2}}&lt;br /&gt;
 |}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Полученное соединение не будет равняться {{Формула|f=r}}:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !! A !! B !! C&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | rowspan=&amp;quot;4&amp;quot; | {{Формула|f=\Pi_{R_1}(r) \bowtie \Pi_{R_2}(r)}} || {{Формула|f=a_1}} || {{Формула|f=b_1}} || {{Формула|f=c_1}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot; bgcolor=&amp;quot;#FFB6C1&amp;quot;&lt;br /&gt;
 | {{Формула|f=a_1}} || {{Формула|f=b_1}} || {{Формула|f=c_2}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot; bgcolor=&amp;quot;#FFB6C1&amp;quot;&lt;br /&gt;
 | {{Формула|f=a_2}} || {{Формула|f=b_1}} || {{Формула|f=c_1}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | {{Формула|f=a_2}} || {{Формула|f=b_1}} || {{Формула|f=c_2}}&lt;br /&gt;
 |}&lt;br /&gt;
 &lt;br /&gt;
Этот пример показывает, что при неправильном построении БД запросы могут выдавать неправильный результат.&lt;br /&gt;
&lt;br /&gt;
==== Пример БД, обладающей свойством соединения без потерь ====&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=R = (A, B, C)}}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=\rho = (AB, AC) = (R_1, R_2)}}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=F = (A\rightarrow B)}}&lt;br /&gt;
&lt;br /&gt;
Возьмём тот же экземпляр:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !! A !! B !! C&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | rowspan=&amp;quot;2&amp;quot; | {{Формула|f=r}} || {{Формула|f=a_1}} || {{Формула|f=b_1}} || {{Формула|f=c_1}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | {{Формула|f=a_2}} || {{Формула|f=b_1}} || {{Формула|f=c_2}}&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
 | valign=&amp;quot;top&amp;quot; | &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !! A !! B&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | rowspan=&amp;quot;2&amp;quot; | {{Формула|f=\Pi_{R_1}(r)}} || {{Формула|f=a_1}} || {{Формула|f=b_1}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | {{Формула|f=a_2}} || {{Формула|f=b_1}}&lt;br /&gt;
 |}&lt;br /&gt;
 |&lt;br /&gt;
 | valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
 |&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !! A !! С&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | rowspan=&amp;quot;2&amp;quot; | {{Формула|f=\Pi_{R_2}(r)}} || {{Формула|f=a_1}} || {{Формула|f=c_1}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | {{Формула|f=a_2}} || {{Формула|f=c_2}}&lt;br /&gt;
 |}&lt;br /&gt;
|}&lt;br /&gt;
 &lt;br /&gt;
Полученное соединение будет равняться {{Формула|f=r}}:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !! A !! B !! C&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | rowspan=&amp;quot;2&amp;quot; | {{Формула|f=\Pi_{R_1}(r) \bowtie \Pi_{R_2}(r)}} || {{Формула|f=a_1}} || {{Формула|f=b_1}} || {{Формула|f=c_1}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | {{Формула|f=a_2}} || {{Формула|f=b_1}} || {{Формула|f=c_2}}&lt;br /&gt;
|}&lt;br /&gt;
 &lt;br /&gt;
Но это не доказательство, а только один пример, просто чтобы показать, в чём разница.&lt;br /&gt;
&lt;br /&gt;
==== Алгоритм проверки схемы БД на свойство соединения без потерь ====&lt;br /&gt;
 &lt;br /&gt;
{{Формула|f=\rho = (R_1 ... R_n)}}&lt;br /&gt;
 &lt;br /&gt;
{{Формула|f=R = (A_1 ... A_n)}}&lt;br /&gt;
 &lt;br /&gt;
1) построить таблицу T:&lt;br /&gt;
 &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !! {{Формула|f=A_1}} || {{Формула|f=A_2}} || ... || {{Формула|f=A_k}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! {{Формула|f=R_1}}&lt;br /&gt;
 | || || ||&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! {{Формула|f=R_2}}&lt;br /&gt;
 | || || ||&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! ...&lt;br /&gt;
 | || || ||&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! {{Формула|f=R_n}}&lt;br /&gt;
 | || || ||&lt;br /&gt;
 |}&lt;br /&gt;
  &lt;br /&gt;
И заполнить таблицу T по правилу: если {{Формула|f=A_j \in R_i}}, то {{Формула|f=T_{ij}=a}}, иначе {{Формула|f=T_{ij}=b_i}}&lt;br /&gt;
&lt;br /&gt;
2) изменить таблицу T - циклически просматривать ФЗ из {{Формула|f=F}} в любом порядке, и для очередной ФЗ {{Формула|f=X\rightarrow Y \in F}} выполнить следующие действия:&lt;br /&gt;
* найти в таблице T строки, совпадающие по атрибутам {{Формула|f=X}} (по левой части);&lt;br /&gt;
* если хотя бы в одной такой строке значение атрибута {{Формула|f=A_m \in Y = a}}, то во всех найденных строках присвоить {{Формула|f=A_m = a}}, иначе присвоить {{Формула|f=A_m = b_i}} (}}i}} - номер одной из найденных строк, {{Формула|f=b_i}} должно быть одинаково во всех указанных строках);&lt;br /&gt;
* выполнить предыдущие два пункта для всех атрибутов {{Формула|f=A_l \in Y}};&lt;br /&gt;
* выполнить предыдущие три пункта для всех ФЗ из {{Формула|f=F}}, циклически их просматривая.&lt;br /&gt;
&lt;br /&gt;
3) алгоритм останавливается, если при очередном просмотре ФЗ из {{Формула|f=F}}:&lt;br /&gt;
* не произошло никаких изменений в таблице T;&lt;br /&gt;
* какая-нибудь строка в T не стала состоять сплошь из символов {{Формула|f=a}} (наличие такой строки и говорит о выполнении свойства соединения без потерь).&lt;br /&gt;
&lt;br /&gt;
===== Пример =====&lt;br /&gt;
&lt;br /&gt;
Пусть {{Формула|f=R = (A, B, C)}}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=\rho = (AB, AC) = (R_1, R_2)}}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=F = (A\rightarrow B)}}&lt;br /&gt;
&lt;br /&gt;
Доказать, что {{Формула|f=\rho}} обладает свойством соединения без потерь.&lt;br /&gt;
&lt;br /&gt;
1)&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !! A || B || C&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! AB&lt;br /&gt;
 | {{Формула|f=a}} || {{Формула|f=a}} || {{Формула|f=b_1}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! AC&lt;br /&gt;
 | {{Формула|f=a}} || {{Формула|f=b_2}} || {{Формула|f=a}}&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
2)&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
 | valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !! A || B || C&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! AB&lt;br /&gt;
 | {{Формула|f=a}} || {{Формула|f=a}} || {{Формула|f=b_1}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! AC&lt;br /&gt;
 | {{Формула|f=a}} || {{Формула|f=b_2}} || {{Формула|f=a}}&lt;br /&gt;
 |}&lt;br /&gt;
 |&lt;br /&gt;
 | valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
 |&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !! A || B || C&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! AB&lt;br /&gt;
 | {{Формула|f=a}} || {{Формула|f=a}} || {{Формула|f=b_1}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! AC&lt;br /&gt;
 | {{Формула|f=a}} || bgcolor=&amp;quot;lime&amp;quot; | {{Формула|f=a}} || {{Формула|f=a}}&lt;br /&gt;
 |}&lt;br /&gt;
|}&lt;br /&gt;
  &lt;br /&gt;
Получили строку, сплошь состоящую из {{Формула|f=a}}. Значит {{Формула|f=\rho}} обладает свойством соединения без потерь.&lt;br /&gt;
&lt;br /&gt;
===== Другой пример =====&lt;br /&gt;
 &lt;br /&gt;
Пусть {{Формула|f=R = (A, B, C, D, E, F, P, S)}}&lt;br /&gt;
 &lt;br /&gt;
{{Формула|f=\rho = (AB, ACDPS, BCPS, DEF) = (R_1, R_2, R_3, R_4)}}&lt;br /&gt;
 &lt;br /&gt;
{{Формула|f=F = (B\rightarrow C, D\rightarrow EF, B\rightarrow PS, A\rightarrow CDPS, AP\rightarrow S)}}&lt;br /&gt;
&lt;br /&gt;
Доказать, что {{Формула|f=\rho}} обладает свойством соединения без потерь.&lt;br /&gt;
 &lt;br /&gt;
1)&lt;br /&gt;
 &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !! A || B || C || D || E || F || P || S&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! AB&lt;br /&gt;
 | {{Формула|f=a}} || {{Формула|f=a}} || {{Формула|f=b_1}} || {{Формула|f=b_1}} || {{Формула|f=b_1}} || {{Формула|f=b_1}} || {{Формула|f=b_1}} || {{Формула|f=b_1}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! ACDPS&lt;br /&gt;
 | {{Формула|f=a}} || {{Формула|f=b_2}} || {{Формула|f=a}} || {{Формула|f=a}} || {{Формула|f=b_2}} || {{Формула|f=b_2}} || {{Формула|f=a}} || {{Формула|f=a}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! BCPS&lt;br /&gt;
 | {{Формула|f=b_3}} || {{Формула|f=a}} || {{Формула|f=a}} || {{Формула|f=b_3}} || {{Формула|f=b_3}} || {{Формула|f=b_3}} || {{Формула|f=a}} || {{Формула|f=a}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! DEF&lt;br /&gt;
 | {{Формула|f=b_4}} || {{Формула|f=b_4}} || {{Формула|f=b_4}} || {{Формула|f=a}} || {{Формула|f=a}} || {{Формула|f=a}} || {{Формула|f=b_4}} || {{Формула|f=b_4}}&lt;br /&gt;
 |}&lt;br /&gt;
 &lt;br /&gt;
2)&lt;br /&gt;
&lt;br /&gt;
первый просмотр:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !! A || B || C || D || E || F || P || S&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! AB&lt;br /&gt;
 | {{Формула|f=a}} || {{Формула|f=a}} || bgcolor=&amp;quot;lime&amp;quot; | {{Формула|f=a}} || bgcolor=&amp;quot;lime&amp;quot; | {{Формула|f=a}} || {{Формула|f=b_1}} || {{Формула|f=b_1}} || bgcolor=&amp;quot;lime&amp;quot; | {{Формула|f=a}} || bgcolor=&amp;quot;lime&amp;quot; | {{Формула|f=a}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! ACDPS&lt;br /&gt;
 | {{Формула|f=a}} || {{Формула|f=b_2}} || {{Формула|f=a}} || {{Формула|f=a}} || bgcolor=&amp;quot;lime&amp;quot; | {{Формула|f=a}} || bgcolor=&amp;quot;lime&amp;quot; | {{Формула|f=a}} || {{Формула|f=a}} || {{Формула|f=a}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! BCPS&lt;br /&gt;
 | {{Формула|f=b_3}} || {{Формула|f=a}} || {{Формула|f=a}} || {{Формула|f=b_3}} || {{Формула|f=b_3}} || {{Формула|f=b_3}} || {{Формула|f=a}} || {{Формула|f=a}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! DEF&lt;br /&gt;
 | {{Формула|f=b_4}} || {{Формула|f=b_4}} || {{Формула|f=b_4}} || {{Формула|f=a}} || {{Формула|f=a}} || {{Формула|f=a}} || {{Формула|f=b_4}} || {{Формула|f=b_4}}&lt;br /&gt;
 |}&lt;br /&gt;
  &lt;br /&gt;
второй просмотр:&lt;br /&gt;
 &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !! A || B || C || D || E || F || P || S&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! AB&lt;br /&gt;
 | {{Формула|f=a}} || {{Формула|f=a}} || bgcolor=&amp;quot;lime&amp;quot; | {{Формула|f=a}} || bgcolor=&amp;quot;lime&amp;quot; | {{Формула|f=a}} || bgcolor=&amp;quot;#32CD32&amp;quot; | {{Формула|f=a}} || bgcolor=&amp;quot;#32CD32&amp;quot; | {{Формула|f=a}} || bgcolor=&amp;quot;lime&amp;quot; | {{Формула|f=a}} || bgcolor=&amp;quot;lime&amp;quot; | {{Формула|f=a}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! ACDPS&lt;br /&gt;
 | {{Формула|f=a}} || {{Формула|f=b_2}} || {{Формула|f=a}} || {{Формула|f=a}} || bgcolor=&amp;quot;lime&amp;quot; | {{Формула|f=a}} || bgcolor=&amp;quot;lime&amp;quot; | {{Формула|f=a}} || {{Формула|f=a}} || {{Формула|f=a}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! BCPS&lt;br /&gt;
 | {{Формула|f=b_3}} || {{Формула|f=a}} || {{Формула|f=a}} || {{Формула|f=b_3}} || {{Формула|f=b_3}} || {{Формула|f=b_3}} || {{Формула|f=a}} || {{Формула|f=a}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! DEF&lt;br /&gt;
 | {{Формула|f=b_4}} || {{Формула|f=b_4}} || {{Формула|f=b_4}} || {{Формула|f=a}} || {{Формула|f=a}} || {{Формула|f=a}} || {{Формула|f=b_4}} || {{Формула|f=b_4}}&lt;br /&gt;
 |}&lt;br /&gt;
  &lt;br /&gt;
Вот и получили строку, сплошь состоящую из {{Формула|f=a}}. Значит {{Формула|f=\rho}} обладает свойством соединения без потерь.&lt;br /&gt;
&lt;br /&gt;
[[Категория:Теоретические основы реляционной алгебры (9 семестр)]]&lt;br /&gt;
[[Категория:Конспекты лекций и семинаров]]&lt;/div&gt;</summary>
		<author><name>81.9.52.28</name></author>
	</entry>
	<entry>
		<id>https://iu5bmstu.ru/index.php?title=%D0%A2%D0%9E%D0%A0%D0%90_(9)_-_%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_%E2%84%962_-_%D0%A4%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%BE%D0%BD%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B7%D0%B0%D0%B2%D0%B8%D1%81%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8&amp;diff=2486</id>
		<title>ТОРА (9) - Лекция №2 - Функциональные зависимости</title>
		<link rel="alternate" type="text/html" href="https://iu5bmstu.ru/index.php?title=%D0%A2%D0%9E%D0%A0%D0%90_(9)_-_%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_%E2%84%962_-_%D0%A4%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%BE%D0%BD%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B7%D0%B0%D0%B2%D0%B8%D1%81%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8&amp;diff=2486"/>
		<updated>2013-01-10T10:26:20Z</updated>

		<summary type="html">&lt;p&gt;81.9.52.28: /* Дополнение */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Функциональные зависимости, замыкание множества функциональных зависимостей, атрибутов.&lt;br /&gt;
&lt;br /&gt;
== Функциональные зависимости ==&lt;br /&gt;
&lt;br /&gt;
Пусть {{Формула|f=R=(A_1 ... A_n)}} является функциональной схемой отношения и {{Формула|f=X}}, {{Формула|f=Y}} - некоторые подмножества атрибутов этой схемы. Говорят, что {{Формула|f=X}} функционально определяет {{Формула|f=Y}} ({{Формула|f=X\rightarrow Y}}), если в любом экземпляре отношения со схемой {{Формула|f=R}} не существует двух кортежей, совпадающих по подмножеству {{Формула|f=X}} и не совпадающих по подмножеству {{Формула|f=Y}}&lt;br /&gt;
&lt;br /&gt;
Иначе говоря, если два кортежа совпадают по {{Формула|f=x}}, то они должны совпадать и по {{Формула|f=y}}&lt;br /&gt;
&lt;br /&gt;
Например, {{Формула|f=R=(A_1, A_2, A_3, A_4)}}, есть зависимости:&lt;br /&gt;
* {{Формула|f=A_1\rightarrow A_2}} (1)&lt;br /&gt;
* {{Формула|f=A_1A_3\rightarrow A_4}} (2)&lt;br /&gt;
&lt;br /&gt;
Предположим, что имеет место один экземпляр отношения со схемой {{Формула|f=R}}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !! {{Формула|f=A_1}} !! {{Формула|f=A_2}} !! {{Формула|f=A_3}} !! {{Формула|f=A_4}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | rowspan=&amp;quot;3&amp;quot; | {{Формула|f=R}} || фирма X || улица Ленина, д.1 || сахар || 40&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | фирма X || улица Ленина, д.1 || карамель || 50&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | фирма X || улица Ленина, д.1 || пастила || 90&lt;br /&gt;
 |}&lt;br /&gt;
 &lt;br /&gt;
Вторая ФЗ (2) имеет место быть, так как нет двух кортежей, совпадающих по этой паре. А первая ФЗ (1) не имеет место быть.&lt;br /&gt;
&lt;br /&gt;
== Замыкание множества функциональных зависимостей ==&lt;br /&gt;
&lt;br /&gt;
Пусть {{Формула|f=R}} - универсальная схема отношения, а {{Формула|f=F}} - исходное множество функциональной зависимости на этой схеме. Замыканием {{Формула|f=F}} называется всё множество функциональной зависимости, которое логически следует из {{Формула|f=F}} - обозначается как {{Формула|f=F^+}}&lt;br /&gt;
&lt;br /&gt;
Функциональная зависимость логически следует из {{Формула|f=F}}, если её можно вывести (получить) с помощью аксиом Армстронга.&lt;br /&gt;
&lt;br /&gt;
=== Аксиомы Армстронга ===&lt;br /&gt;
&lt;br /&gt;
Или правила вывода функциональной зависимости. Существуют различные интерпретации аксиом, но все эквивалентны. Потому приведём только один вариант.&lt;br /&gt;
&lt;br /&gt;
Аксиомы Армстронга являются надёжными и полными.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Надёжность&#039;&#039;&#039; - если ФЗ выводится с помощью аксиом Армстронга, то она справедлива во всех экземплярах отношения, где справедливы исходные ФЗ {{Формула|f=F}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Полнота&#039;&#039;&#039; - если имеет место какая-либо ФЗ, то она обязательно может быть выведена с помощью аксиом Армстронга.&lt;br /&gt;
&lt;br /&gt;
==== Рефлексивность ====&lt;br /&gt;
&lt;br /&gt;
Если {{Формула|f=Y \subseteq X \subseteq R}}&lt;br /&gt;
&lt;br /&gt;
то {{Формула|f=X\rightarrow Y}}. Тривиальная аксиома.&lt;br /&gt;
&lt;br /&gt;
==== Дополнение ====&lt;br /&gt;
&lt;br /&gt;
Если {{Формула|f=X\rightarrow Y}},&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=Z \subseteq R}} ({{Формула|f=Z}} может быть пустым),&lt;br /&gt;
&lt;br /&gt;
тогда {{Формула|f=X\bigcup Y\rightarrow Y\bigcup Z}} или {{Формула|f=XZ\rightarrow YZ}}&lt;br /&gt;
&lt;br /&gt;
==== Транзитивность ====&lt;br /&gt;
&lt;br /&gt;
Если {{Формула|f=X\rightarrow Y}}&lt;br /&gt;
&lt;br /&gt;
а {{Формула|f=Y\rightarrow Z}}&lt;br /&gt;
&lt;br /&gt;
то {{Формула|f=X\rightarrow Z}}&lt;br /&gt;
&lt;br /&gt;
=== Пример построения множества ФЗ ===&lt;br /&gt;
&lt;br /&gt;
Пусть задана УСО (универсальная схема отношения) {{Формула|f=R=(A, B, C)}} и зависимости {{Формула|f=F=(A\rightarrow B, B\rightarrow C)}}&lt;br /&gt;
&lt;br /&gt;
# {{Формула|f=A\rightarrow A}}, {{Формула|f=B\rightarrow B}}, {{Формула|f=C\rightarrow C}}, {{Формула|f=AB\rightarrow A}}, {{Формула|f=AB\rightarrow B}}, {{Формула|f=AC\rightarrow A}}, {{Формула|f=AC\rightarrow C}}, {{Формула|f=BC\rightarrow B}}, {{Формула|f=BC\rightarrow C}}, {{Формула|f=ABC\rightarrow A}}, {{Формула|f=ABC\rightarrow C}}, {{Формула|f=AB\rightarrow AB}}, {{Формула|f=AC\rightarrow AC}}, {{Формула|f=BC\rightarrow BC}}, {{Формула|f=ABC\rightarrow AB}}, {{Формула|f=ABC\rightarrow AC}}, {{Формула|f=ABC\rightarrow BC}}, {{Формула|f=ABC\rightarrow ABC}}&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# {{Формула|f=A\rightarrow AB}} (1ФЗ и пополняем A), {{Формула|f=AC\rightarrow BC}}, {{Формула|f=B\rightarrow BC}} (2 ФЗ и пополняем B), {{Формула|f=AB\rightarrow AC}}, {{Формула|f=AC\rightarrow ABC}}, {{Формула|f=AB\rightarrow ABC}}, {{Формула|f=AB\rightarrow BC}}, {{Формула|f=A\rightarrow AC}}&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# {{Формула|f=A\rightarrow C}} (1 и 2 ФЗ), {{Формула|f=A\rightarrow ABC}}&lt;br /&gt;
&lt;br /&gt;
Всё, замыкание ({{Формула|f=F^+}}) построено. Все перечисленные зависимости образуют замыкание.&lt;br /&gt;
&lt;br /&gt;
=== Лемма ===&lt;br /&gt;
&lt;br /&gt;
Справедливы следующие правила. Для их доказательства необходимо пополнить ФЗ так, чтобы можно было использовать аксиомы.&lt;br /&gt;
&lt;br /&gt;
==== Правило объединения ====&lt;br /&gt;
&lt;br /&gt;
Если {{Формула|f=X\rightarrow Y}} и {{Формула|f=X\rightarrow Z}}, то {{Формула|f=X\rightarrow YZ}}&lt;br /&gt;
&lt;br /&gt;
Доказательство:&lt;br /&gt;
# {{Формула|f=X\rightarrow XY}} (1 ФЗ и пополняем X);&lt;br /&gt;
# {{Формула|f=XY\rightarrow YZ}} (2 ФЗ и пополняем Y);&lt;br /&gt;
# {{Формула|f=X\rightarrow YZ}} (по аксиоме транзитивности).&lt;br /&gt;
&lt;br /&gt;
==== Правило декомпозиции ====&lt;br /&gt;
&lt;br /&gt;
Если {{Формула|f=X\rightarrow Y}}, а {{Формула|f=Z \subseteq Y}}, то {{Формула|f=X\rightarrow Z}}&lt;br /&gt;
&lt;br /&gt;
Доказательство:&lt;br /&gt;
# {{Формула|f=X\rightarrow Y}} (по условию);&lt;br /&gt;
# {{Формула|f=Y\rightarrow Z}} (по аксиоме рефлексивности);&lt;br /&gt;
# {{Формула|f=X\rightarrow Z}} (по аксиоме транзитивности).&lt;br /&gt;
&lt;br /&gt;
==== Правило псевдотранзитивности ====&lt;br /&gt;
&lt;br /&gt;
Если {{Формула|f=X\rightarrow Y}} и {{Формула|f=WY\rightarrow Z}}, то {{Формула|f=WX\rightarrow Z}}&lt;br /&gt;
&lt;br /&gt;
Доказательство:&lt;br /&gt;
# {{Формула|f=WX\rightarrow WY}} (1 ФЗ и пополняем W);&lt;br /&gt;
# {{Формула|f=WY\rightarrow Z}} (по условию);&lt;br /&gt;
# {{Формула|f=WX\rightarrow Z}} (по аксиоме транзитивности).&lt;br /&gt;
&lt;br /&gt;
== Замыкание множества атрибутов ==&lt;br /&gt;
&lt;br /&gt;
Замыкание {{Формула|f=F^+}} может включать в себя очень большое количество ФЗ. Например:&lt;br /&gt;
&lt;br /&gt;
$F=(X\rightarrow A_1, X\rightarrow A_2 ... X\rightarrow A_n)$&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=X\rightarrow Y \subseteq F^+}}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=Y \subseteq (A_1, A_2 ... A_n)}} и таких подмножеств может быть {{Формула|f=2^n}}&lt;br /&gt;
&lt;br /&gt;
Поэтому &amp;quot;в лоб&amp;quot; замыкание {{Формула|f=F^+}} никто не строит. Но необходимо найти какой-то метод, который достаточно просто позволял бы выяснять, принадлежит ли произвольная ФЗ {{Формула|f=X\rightarrow Y}} к {{Формула|f=F^+}}&lt;br /&gt;
&lt;br /&gt;
Для этого применяется &#039;&#039;замыкание множества атрибутов&#039;&#039;. Пусть {{Формула|f=R}} - универсальная схема отношения, а {{Формула|f=X}} - некоторое подмножество атрибутов. Тогда замыканием множества атрибутов {{Формула|f=X^+}} называется совокупность атрибутов {{Формула|f=A_{i1}, A_{i2} ... A_{ik} }} таких, что {{Формула|f=X\rightarrow A_{i1}, X\rightarrow A_{i2} ... X\rightarrow A_{ik} }}&lt;br /&gt;
&lt;br /&gt;
=== Алгоритм построения ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм является итерационной процедурой.&lt;br /&gt;
&lt;br /&gt;
# полагаем {{Формула|f=i = 0}} и {{Формула|f=X_0^+=X}}, а {{Формула|f=X_i^+}} - замыкание множества атрибутов на i-том шаге;&lt;br /&gt;
# {{Формула|f=X _{i+1} ^+ = X _i ^+ \bigcup V}}, где V - такое множество атрибутов в F, и {{Формула|f=Y\rightarrow Z}}, {{Формула|f=Y \subseteq X _i ^+}}, {{Формула|f=V \subseteq Z}};&lt;br /&gt;
# если {{Формула|f=X_{i+1}^+ = X_i^+}}, то {{Формула|f=X^+ = X_i^+}}, иначе {{Формула|f=i = i + 1}} и возвращаемся в пункт 2.&lt;br /&gt;
&lt;br /&gt;
==== Пример построения ====&lt;br /&gt;
&lt;br /&gt;
Пусть {{Формула|f=R=(A, B, C, D, E, G)}}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=F=(AB\rightarrow C, C\rightarrow A, BC\rightarrow D, ACD\rightarrow B, D\rightarrow EG, BE\rightarrow C, CG\rightarrow BD, CE\rightarrow AG)}}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=X = BD}}&lt;br /&gt;
&lt;br /&gt;
Надо построить {{Формула|f=X^+}}:&lt;br /&gt;
&lt;br /&gt;
1) {{Формула|f=i = 0}}, {{Формула|f=X _0 ^+ = BD}}&lt;br /&gt;
&lt;br /&gt;
2) &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! {{Формула|f=i}} !! {{Формула|f=Y\rightarrow Z}}, для которых {{Формула|f=Y \subseteq X_i^+}} !! {{Формула|f=V\subseteq Z}} !! {{Формула|f=X_{i+1}^+ = X_i^+\bigcup V}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | 0 || {{Формула|f=D\rightarrow EG}} || {{Формула|f=EG}} || {{Формула|f=BDEG}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | 1 || {{Формула|f=BE\rightarrow C}} || {{Формула|f=C}} || {{Формула|f=BDEGC}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | 2 || {{Формула|f=C\rightarrow A}}&amp;lt;br&amp;gt;{{Формула|f=BC\rightarrow D}}&amp;lt;br&amp;gt;{{Формула|f=CG\rightarrow BD}}&amp;lt;br&amp;gt;{{Формула|f=CE\rightarrow AG}} || {{Формула|f=A}} || {{Формула|f=BDEGCA}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | 3 || {{Формула|f=AB\rightarrow C}}&amp;lt;br&amp;gt;{{Формула|f=ACD\rightarrow B}} || - || {{Формула|f=BDEGCA}}&lt;br /&gt;
 |}&lt;br /&gt;
 &lt;br /&gt;
Получили, что {{Формула|f=X_4^+ = X_3^+}}, а значит {{Формула|f=X^+ = X_3^+ = BDEGCA}}&lt;br /&gt;
&lt;br /&gt;
Это означает, что имеют место следующие ФЗ: $BD\rightarrow B$, {{Формула|f=BD\rightarrow D}}, {{Формула|f=BD\rightarrow E}}, {{Формула|f=BD\rightarrow G}}, {{Формула|f=BD\rightarrow C}}, {{Формула|f=BD\rightarrow A}}, и все они {{Формула|f=\subseteq F^+}}&lt;br /&gt;
&lt;br /&gt;
Короче, чтобы проверить {{Формула|f=X\rightarrow Y \subseteq F^+}}, необходимо построить {{Формула|f=X^+}}&lt;br /&gt;
&lt;br /&gt;
[[Категория:Теоретические основы реляционной алгебры (9 семестр)]]&lt;br /&gt;
[[Категория:Конспекты лекций и семинаров]]&lt;/div&gt;</summary>
		<author><name>81.9.52.28</name></author>
	</entry>
</feed>