<?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=92.243.181.7</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=92.243.181.7"/>
	<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/92.243.181.7"/>
	<updated>2026-04-30T04:16:49Z</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=4038</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=4038"/>
		<updated>2013-06-25T08:01:18Z</updated>

		<summary type="html">&lt;p&gt;92.243.181.7: /* Билет 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;
Странно, что ни в одном билете нет запроса с сортировкой результатов. &amp;lt;s&amp;gt;Возможно, они будут в дополнительных заданиях.&amp;lt;/s&amp;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;
Если видите, что тот или иной запрос можно составить короче и рациональней - смело вносите правку.&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;
==== Про JOIN ====&lt;br /&gt;
&lt;br /&gt;
Почти все запросы, где используется соединение таблиц, можно написать с использованием &amp;lt;code&amp;gt;JOIN&amp;lt;/code&amp;gt;, а можно просто с перечислением таблиц через запятую.&lt;br /&gt;
&lt;br /&gt;
Но неожиданно оказалось, это почти то же самое и называется [http://ru.wikipedia.org/wiki/Join_%28SQL%29#CROSS_JOIN CROSS JOIN]. Такое соединение таблиц (&amp;lt;code&amp;gt;CROSS JOIN + WHERE&amp;lt;/code&amp;gt;) считается устаревшим, поскольку его не рекомендует стандарт SQL ANSI. Таким образом, использование &amp;lt;code&amp;gt;JOIN&amp;lt;/code&amp;gt; с условием соединения в &amp;lt;code&amp;gt;ON&amp;lt;/code&amp;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;
&amp;lt;!-- &amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-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 spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
    (SELECT DISTINCT nomer_detali FROM spasoi_ekz.spj WHERE nomer_postavshika = &#039;S2&#039;)&lt;br /&gt;
    EXCEPT&lt;br /&gt;
    (SELECT DISTINCT nomer_detali FROM spasoi_ekz.spj WHERE nomer_postavshika = SPJ.nomer_postavshika)&lt;br /&gt;
)&lt;br /&gt;
AND nomer_postavshika != &#039;S2&#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; --&amp;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 S, spasoi_ekz.p P, spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
  AND P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
  AND S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
  AND SPJ.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;
&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;Ещё вариант запроса без 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;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
Этот же запрос без JOIN (точнее, с CROSS JOIN):&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;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,&lt;br /&gt;
     spasoi_ekz.p P,&lt;br /&gt;
     spasoi_ekz.j J,&lt;br /&gt;
     spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
  AND SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
  AND SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
  AND P.nazvanie = LOWER(&#039;Болт&#039;) &lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Рама 02-01&#039;)&lt;br /&gt;
  AND SPJ.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;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;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 HAVING MIN(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 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;
&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 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;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;И ещё вариант этого запроса без JOIN (точнее, с CROSS 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 S.gorod, SUM(S.sostoyanie)--, MIN(SPJ.kolichestvo)&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 gorod HAVING MIN(kolichestvo) &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;
    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 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;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Другой вариант запроса для тонко чувствующих натур&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;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.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 J.nazvanie = LOWER(&#039;Панно 01-03&#039;)&lt;br /&gt;
GROUP BY cvet;&lt;br /&gt;
&amp;lt;/syntaxhighlight&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;И ещё один вариант запроса от ненавистника 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.cvet, SUM(SPJ.kolichestvo)&lt;br /&gt;
FROM spasoi_ekz.p P,&lt;br /&gt;
     spasoi_ekz.spj SPJ,&lt;br /&gt;
     spasoi_ekz.j J&lt;br /&gt;
WHERE P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
  AND J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Панно 01-03&#039;)&lt;br /&gt;
GROUP BY P.cvet;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;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;
 -------+---------&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;
&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 S,&lt;br /&gt;
     spasoi_ekz.spj SPJ,&lt;br /&gt;
     spasoi_ekz.p P,&lt;br /&gt;
     spasoi_ekz.j J&lt;br /&gt;
WHERE SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
  AND SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
  AND SPJ.nomer_izdelia=J.nomer_izdelia&lt;br /&gt;
  AND S.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 SPJ2, spasoi_ekz.S S2&lt;br /&gt;
		     WHERE S2.nomer_postavshika = SPJ2.nomer_postavshika&lt;br /&gt;
		       AND S2.imya LIKE &#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;
 (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;Вариант этого же запроса без 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 FROM spasoi_ekz.s S, spasoi_ekz.spj SPJ2&lt;br /&gt;
WHERE SPJ2.nomer_postavshika=S.nomer_postavshika  AND&lt;br /&gt;
		NOT EXISTS (&lt;br /&gt;
		Select * FROM spasoi_ekz.p P, spasoi_ekz.spj SPJ&lt;br /&gt;
		WHERE SPJ.nomer_detali=P.nomer_detali AND&lt;br /&gt;
		SPJ.nomer_postavshika=SPJ2.nomer_postavshika AND&lt;br /&gt;
		P.cvet!=LOWER(&#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;
&amp;lt;!-- &amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-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 imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
    (SELECT DISTINCT nomer_detali FROM spasoi_ekz.spj WHERE nomer_postavshika = &#039;S2&#039;)&lt;br /&gt;
    EXCEPT&lt;br /&gt;
    (SELECT DISTINCT nomer_detali FROM spasoi_ekz.spj WHERE nomer_postavshika = SPJ.nomer_postavshika)&lt;br /&gt;
)&lt;br /&gt;
AND nomer_postavshika != &#039;S2&#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; --&amp;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>92.243.181.7</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=4035</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=4035"/>
		<updated>2013-06-24T19:02:11Z</updated>

		<summary type="html">&lt;p&gt;92.243.181.7: /* Билет 18 */&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;
Странно, что ни в одном билете нет запроса с сортировкой результатов. &amp;lt;s&amp;gt;Возможно, они будут в дополнительных заданиях.&amp;lt;/s&amp;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;
Если видите, что тот или иной запрос можно составить короче и рациональней - смело вносите правку.&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;
==== Про JOIN ====&lt;br /&gt;
&lt;br /&gt;
Почти все запросы, где используется соединение таблиц, можно написать с использованием &amp;lt;code&amp;gt;JOIN&amp;lt;/code&amp;gt;, а можно просто с перечислением таблиц через запятую.&lt;br /&gt;
&lt;br /&gt;
Но неожиданно оказалось, это почти то же самое и называется [http://ru.wikipedia.org/wiki/Join_%28SQL%29#CROSS_JOIN CROSS JOIN]. Такое соединение таблиц (&amp;lt;code&amp;gt;CROSS JOIN + WHERE&amp;lt;/code&amp;gt;) считается устаревшим, поскольку его не рекомендует стандарт SQL ANSI. Таким образом, использование &amp;lt;code&amp;gt;JOIN&amp;lt;/code&amp;gt; с условием соединения в &amp;lt;code&amp;gt;ON&amp;lt;/code&amp;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;
&amp;lt;!-- &amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-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 spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
    (SELECT DISTINCT nomer_detali FROM spasoi_ekz.spj WHERE nomer_postavshika = &#039;S2&#039;)&lt;br /&gt;
    EXCEPT&lt;br /&gt;
    (SELECT DISTINCT nomer_detali FROM spasoi_ekz.spj WHERE nomer_postavshika = SPJ.nomer_postavshika)&lt;br /&gt;
)&lt;br /&gt;
AND nomer_postavshika != &#039;S2&#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; --&amp;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 S, spasoi_ekz.p P, spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
  AND P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
  AND S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
  AND SPJ.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;
&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;Ещё вариант запроса без 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;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
Этот же запрос без JOIN (точнее, с CROSS JOIN):&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;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,&lt;br /&gt;
     spasoi_ekz.p P,&lt;br /&gt;
     spasoi_ekz.j J,&lt;br /&gt;
     spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
  AND SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
  AND SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
  AND P.nazvanie = LOWER(&#039;Болт&#039;) &lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Рама 02-01&#039;)&lt;br /&gt;
  AND SPJ.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;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;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 HAVING MIN(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 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;
&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 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;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;И ещё вариант этого запроса без JOIN (точнее, с CROSS 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 S.gorod, SUM(S.sostoyanie)--, MIN(SPJ.kolichestvo)&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 gorod HAVING MIN(kolichestvo) &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;
    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 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;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Другой вариант запроса для тонко чувствующих натур&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;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.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 J.nazvanie = LOWER(&#039;Панно 01-03&#039;)&lt;br /&gt;
GROUP BY cvet;&lt;br /&gt;
&amp;lt;/syntaxhighlight&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;И ещё один вариант запроса от ненавистника 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.cvet, SUM(SPJ.kolichestvo)&lt;br /&gt;
FROM spasoi_ekz.p P,&lt;br /&gt;
     spasoi_ekz.spj SPJ,&lt;br /&gt;
     spasoi_ekz.j J&lt;br /&gt;
WHERE P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
  AND J.nomer_izdelia = SPJ.nomer_izdelia&lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Панно 01-03&#039;)&lt;br /&gt;
GROUP BY P.cvet;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;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;
 -------+---------&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;
&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 S, spasoi_ekz.spj SPJ, spasoi_ekz.p P, spasoi_ekz.j J&lt;br /&gt;
WHERE SPJ.nomer_postavshika=S.nomer_postavshika AND&lt;br /&gt;
SPJ.nomer_detali=P.nomer_detali AND&lt;br /&gt;
SPJ.nomer_izdelia=J.nomer_izdelia AND&lt;br /&gt;
S.sostoyanie&amp;gt;1000 AND&lt;br /&gt;
P.nazvanie=LOWER(&#039;Гайка 01-01&#039;) AND&lt;br /&gt;
J.nazvanie=LOWER(&#039;Велосипед 03-04&#039;) AND&lt;br /&gt;
kolichestvo&amp;gt; (select AVG(kolichestvo) &lt;br /&gt;
             from spasoi_ekz.spj SPJ2, spasoi_ekz.S S2&lt;br /&gt;
	     where S2.nomer_postavshika=SPJ2.nomer_postavshika AND&lt;br /&gt;
             S2.imya LIKE &#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;
 (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;
&amp;lt;!-- &amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-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 imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
    (SELECT DISTINCT nomer_detali FROM spasoi_ekz.spj WHERE nomer_postavshika = &#039;S2&#039;)&lt;br /&gt;
    EXCEPT&lt;br /&gt;
    (SELECT DISTINCT nomer_detali FROM spasoi_ekz.spj WHERE nomer_postavshika = SPJ.nomer_postavshika)&lt;br /&gt;
)&lt;br /&gt;
AND nomer_postavshika != &#039;S2&#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; --&amp;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>92.243.181.7</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=4033</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=4033"/>
		<updated>2013-06-24T19:00:20Z</updated>

		<summary type="html">&lt;p&gt;92.243.181.7: /* Билет 18 */&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;
Странно, что ни в одном билете нет запроса с сортировкой результатов. &amp;lt;s&amp;gt;Возможно, они будут в дополнительных заданиях.&amp;lt;/s&amp;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;
Если видите, что тот или иной запрос можно составить короче и рациональней - смело вносите правку.&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;
==== Про JOIN ====&lt;br /&gt;
&lt;br /&gt;
Почти все запросы, где используется соединение таблиц, можно написать с использованием &amp;lt;code&amp;gt;JOIN&amp;lt;/code&amp;gt;, а можно просто с перечислением таблиц через запятую.&lt;br /&gt;
&lt;br /&gt;
Но неожиданно оказалось, это почти то же самое и называется [http://ru.wikipedia.org/wiki/Join_%28SQL%29#CROSS_JOIN CROSS JOIN]. Такое соединение таблиц (&amp;lt;code&amp;gt;CROSS JOIN + WHERE&amp;lt;/code&amp;gt;) считается устаревшим, поскольку его не рекомендует стандарт SQL ANSI. Таким образом, использование &amp;lt;code&amp;gt;JOIN&amp;lt;/code&amp;gt; с условием соединения в &amp;lt;code&amp;gt;ON&amp;lt;/code&amp;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;
&amp;lt;!-- &amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-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 spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
    (SELECT DISTINCT nomer_detali FROM spasoi_ekz.spj WHERE nomer_postavshika = &#039;S2&#039;)&lt;br /&gt;
    EXCEPT&lt;br /&gt;
    (SELECT DISTINCT nomer_detali FROM spasoi_ekz.spj WHERE nomer_postavshika = SPJ.nomer_postavshika)&lt;br /&gt;
)&lt;br /&gt;
AND nomer_postavshika != &#039;S2&#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; --&amp;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 S, spasoi_ekz.p P, spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
  AND P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
  AND S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
  AND SPJ.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;
&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;Ещё вариант запроса без 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;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
Этот же запрос без JOIN (точнее, с CROSS JOIN):&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;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,&lt;br /&gt;
     spasoi_ekz.p P,&lt;br /&gt;
     spasoi_ekz.j J,&lt;br /&gt;
     spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
  AND SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
  AND SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
  AND P.nazvanie = LOWER(&#039;Болт&#039;) &lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Рама 02-01&#039;)&lt;br /&gt;
  AND SPJ.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;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;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 HAVING MIN(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 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;
&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 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;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;И ещё вариант этого запроса без JOIN (точнее, с CROSS 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 S.gorod, SUM(S.sostoyanie)--, MIN(SPJ.kolichestvo)&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 gorod HAVING MIN(kolichestvo) &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;
    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 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;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Другой вариант запроса для тонко чувствующих натур&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;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.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 J.nazvanie = LOWER(&#039;Панно 01-03&#039;)&lt;br /&gt;
GROUP BY cvet;&lt;br /&gt;
&amp;lt;/syntaxhighlight&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;Вариант запроса без 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.cvet, sum(SPJ.kolichestvo)&lt;br /&gt;
FROM spasoi_ekz.p P,spasoi_ekz.spj SPJ, spasoi_ekz.j J&lt;br /&gt;
WHERE P.nomer_detali = SPJ.nomer_detali AND&lt;br /&gt;
J.nomer_izdelia=SPJ.nomer_izdelia AND&lt;br /&gt;
J.nazvanie=LOWER(&#039;Панно 01-03&#039;)&lt;br /&gt;
GROUP BY P.cvet&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;
&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;
&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 S, spasoi_ekz.spj SPJ, spasoi_ekz.p P, spasoi_ekz.j J&lt;br /&gt;
WHERE SPJ.nomer_postavshika=S.nomer_postavshika AND&lt;br /&gt;
SPJ.nomer_detali=P.nomer_detali AND&lt;br /&gt;
SPJ.nomer_izdelia=J.nomer_izdelia AND&lt;br /&gt;
S.sostoyanie&amp;gt;1000 AND&lt;br /&gt;
P.nazvanie=LOWER(&#039;Гайка 01-01&#039;) AND&lt;br /&gt;
J.nazvanie=LOWER(&#039;Велосипед 03-04&#039;) AND&lt;br /&gt;
kolichestvo&amp;gt; (select AVG(kolichestvo) from spasoi_ekz.spj SPJ2, spasoi_ekz.S S2&lt;br /&gt;
		where S2.nomer_postavshika=SPJ2.nomer_postavshika AND&lt;br /&gt;
S2.imya LIKE &#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;
 (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;
&amp;lt;!-- &amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-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 imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
    (SELECT DISTINCT nomer_detali FROM spasoi_ekz.spj WHERE nomer_postavshika = &#039;S2&#039;)&lt;br /&gt;
    EXCEPT&lt;br /&gt;
    (SELECT DISTINCT nomer_detali FROM spasoi_ekz.spj WHERE nomer_postavshika = SPJ.nomer_postavshika)&lt;br /&gt;
)&lt;br /&gt;
AND nomer_postavshika != &#039;S2&#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; --&amp;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>92.243.181.7</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=4029</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=4029"/>
		<updated>2013-06-24T18:34:23Z</updated>

		<summary type="html">&lt;p&gt;92.243.181.7: /* Билет 16 */&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;
Странно, что ни в одном билете нет запроса с сортировкой результатов. &amp;lt;s&amp;gt;Возможно, они буду в дополнительных заданиях.&amp;lt;/s&amp;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;
Если видите, что тот или иной запрос можно составить короче и рациональней - смело вносите правку.&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;
==== Про JOIN ====&lt;br /&gt;
&lt;br /&gt;
Почти все запросы, где используется соединение таблиц, можно написать с использованием &amp;lt;code&amp;gt;JOIN&amp;lt;/code&amp;gt;, а можно просто с перечислением таблиц через запятую.&lt;br /&gt;
&lt;br /&gt;
Но неожиданно оказалось, это почти то же самое и называется [http://ru.wikipedia.org/wiki/Join_%28SQL%29#CROSS_JOIN CROSS JOIN]. Такое соединение таблиц (&amp;lt;code&amp;gt;CROSS JOIN + WHERE&amp;lt;/code&amp;gt;) считается устаревшим, поскольку его не рекомендует стандарт SQL ANSI. Таким образом, использование &amp;lt;code&amp;gt;JOIN&amp;lt;/code&amp;gt; с условием соединения в &amp;lt;code&amp;gt;ON&amp;lt;/code&amp;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;
&amp;lt;!-- &amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-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 spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
    (SELECT DISTINCT nomer_detali FROM spasoi_ekz.spj WHERE nomer_postavshika = &#039;S2&#039;)&lt;br /&gt;
    EXCEPT&lt;br /&gt;
    (SELECT DISTINCT nomer_detali FROM spasoi_ekz.spj WHERE nomer_postavshika = SPJ.nomer_postavshika)&lt;br /&gt;
)&lt;br /&gt;
AND nomer_postavshika != &#039;S2&#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; --&amp;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 S, spasoi_ekz.p P, spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
  AND P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
  AND S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
  AND SPJ.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;
&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;Ещё вариант запроса без 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;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
Этот же запрос без JOIN (точнее, с CROSS JOIN):&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;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,&lt;br /&gt;
     spasoi_ekz.p P,&lt;br /&gt;
     spasoi_ekz.j J,&lt;br /&gt;
     spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE SPJ.nomer_postavshika = S.nomer_postavshika&lt;br /&gt;
  AND SPJ.nomer_detali = P.nomer_detali&lt;br /&gt;
  AND SPJ.nomer_izdelia = J.nomer_izdelia&lt;br /&gt;
  AND P.nazvanie = LOWER(&#039;Болт&#039;) &lt;br /&gt;
  AND J.nazvanie = LOWER(&#039;Рама 02-01&#039;)&lt;br /&gt;
  AND SPJ.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;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;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 HAVING MIN(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 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;
&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 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;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;И ещё вариант этого запроса без JOIN (точнее, с CROSS 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 S.gorod, SUM(S.sostoyanie)--, MIN(SPJ.kolichestvo)&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 gorod HAVING MIN(kolichestvo) &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;
    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 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;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Другой вариант запроса для тонко чувствующих натур&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;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.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 J.nazvanie = LOWER(&#039;Панно 01-03&#039;)&lt;br /&gt;
GROUP BY cvet;&lt;br /&gt;
&amp;lt;/syntaxhighlight&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;Вариант запроса без 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.cvet, sum(SPJ.kolichestvo)&lt;br /&gt;
FROM spasoi_ekz.p P,spasoi_ekz.spj SPJ, spasoi_ekz.j J&lt;br /&gt;
WHERE P.nomer_detali = SPJ.nomer_detali AND&lt;br /&gt;
J.nomer_izdelia=SPJ.nomer_izdelia AND&lt;br /&gt;
J.nazvanie=LOWER(&#039;Панно 01-03&#039;)&lt;br /&gt;
GROUP BY P.cvet&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;
&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;
&amp;lt;!-- &amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-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 imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
    (SELECT DISTINCT nomer_detali FROM spasoi_ekz.spj WHERE nomer_postavshika = &#039;S2&#039;)&lt;br /&gt;
    EXCEPT&lt;br /&gt;
    (SELECT DISTINCT nomer_detali FROM spasoi_ekz.spj WHERE nomer_postavshika = SPJ.nomer_postavshika)&lt;br /&gt;
)&lt;br /&gt;
AND nomer_postavshika != &#039;S2&#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; --&amp;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>92.243.181.7</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=4025</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=4025"/>
		<updated>2013-06-24T17:26:25Z</updated>

		<summary type="html">&lt;p&gt;92.243.181.7: /* Билет 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;
Странно, что ни в одном билете нет запроса с сортировкой результатов. &amp;lt;s&amp;gt;Возможно, они буду в дополнительных заданиях.&amp;lt;/s&amp;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;
Если видите, что тот или иной запрос можно составить короче и рациональней - смело вносите правку.&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;
==== Про JOIN ====&lt;br /&gt;
&lt;br /&gt;
Почти все запросы, где используется соединение таблиц, можно написать с использованием &amp;lt;code&amp;gt;JOIN&amp;lt;/code&amp;gt;, а можно просто с перечислением таблиц через запятую.&lt;br /&gt;
&lt;br /&gt;
Но неожиданно оказалось, это почти то же самое и называется [http://ru.wikipedia.org/wiki/Join_%28SQL%29#CROSS_JOIN CROSS JOIN]. Такое соединение таблиц (&amp;lt;code&amp;gt;CROSS JOIN + WHERE&amp;lt;/code&amp;gt;) считается устаревшим, поскольку его не рекомендует стандарт SQL ANSI. Таким образом, использование &amp;lt;code&amp;gt;JOIN&amp;lt;/code&amp;gt; с условием соединения в &amp;lt;code&amp;gt;ON&amp;lt;/code&amp;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;
&amp;lt;!-- &amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-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 spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
    (SELECT DISTINCT nomer_detali FROM spasoi_ekz.spj WHERE nomer_postavshika = &#039;S2&#039;)&lt;br /&gt;
    EXCEPT&lt;br /&gt;
    (SELECT DISTINCT nomer_detali FROM spasoi_ekz.spj WHERE nomer_postavshika = SPJ.nomer_postavshika)&lt;br /&gt;
)&lt;br /&gt;
AND nomer_postavshika != &#039;S2&#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; --&amp;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 S, spasoi_ekz.p P, spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
  AND P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
  AND S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
  AND SPJ.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;
&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;Ещё вариант запроса без 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;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
Запрос без JOIN:&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;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 , spasoi_ekz.p P , spasoi_ekz.j J , spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE SPJ.nomer_postavshika=S.nomer_postavshika AND &lt;br /&gt;
SPJ.nomer_detali=P.nomer_detali AND&lt;br /&gt;
SPJ.nomer_izdelia=J.nomer_izdelia AND&lt;br /&gt;
P.nazvanie=LOWER(&#039;Болт&#039;) AND&lt;br /&gt;
J.nazvanie=LOWER(&#039;Рама 02-01&#039;) AND&lt;br /&gt;
SPJ.kolichestvo&amp;gt;(select min(kolichestvo) from spasoi_ekz.spj where 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;
     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 HAVING MIN(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 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;
&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 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;
&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 S.gorod, SUM(S.sostoyanie), MIN(SPJ.kolichestvo)&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 gorod HAVING MIN(kolichestvo)&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;
    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 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;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Другой вариант запроса для тонко чувствующих натур&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;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.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 J.nazvanie = LOWER(&#039;Панно 01-03&#039;)&lt;br /&gt;
GROUP BY cvet;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;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;
  белый |       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;
&amp;lt;!-- &amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-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 imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
    (SELECT DISTINCT nomer_detali FROM spasoi_ekz.spj WHERE nomer_postavshika = &#039;S2&#039;)&lt;br /&gt;
    EXCEPT&lt;br /&gt;
    (SELECT DISTINCT nomer_detali FROM spasoi_ekz.spj WHERE nomer_postavshika = SPJ.nomer_postavshika)&lt;br /&gt;
)&lt;br /&gt;
AND nomer_postavshika != &#039;S2&#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; --&amp;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>92.243.181.7</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=4024</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=4024"/>
		<updated>2013-06-24T17:25:23Z</updated>

		<summary type="html">&lt;p&gt;92.243.181.7: /* Билет 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;
Странно, что ни в одном билете нет запроса с сортировкой результатов. &amp;lt;s&amp;gt;Возможно, они буду в дополнительных заданиях.&amp;lt;/s&amp;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;
Если видите, что тот или иной запрос можно составить короче и рациональней - смело вносите правку.&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;
==== Про JOIN ====&lt;br /&gt;
&lt;br /&gt;
Почти все запросы, где используется соединение таблиц, можно написать с использованием &amp;lt;code&amp;gt;JOIN&amp;lt;/code&amp;gt;, а можно просто с перечислением таблиц через запятую.&lt;br /&gt;
&lt;br /&gt;
Но неожиданно оказалось, это почти то же самое и называется [http://ru.wikipedia.org/wiki/Join_%28SQL%29#CROSS_JOIN CROSS JOIN]. Такое соединение таблиц (&amp;lt;code&amp;gt;CROSS JOIN + WHERE&amp;lt;/code&amp;gt;) считается устаревшим, поскольку его не рекомендует стандарт SQL ANSI. Таким образом, использование &amp;lt;code&amp;gt;JOIN&amp;lt;/code&amp;gt; с условием соединения в &amp;lt;code&amp;gt;ON&amp;lt;/code&amp;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;
&amp;lt;!-- &amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-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 spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
    (SELECT DISTINCT nomer_detali FROM spasoi_ekz.spj WHERE nomer_postavshika = &#039;S2&#039;)&lt;br /&gt;
    EXCEPT&lt;br /&gt;
    (SELECT DISTINCT nomer_detali FROM spasoi_ekz.spj WHERE nomer_postavshika = SPJ.nomer_postavshika)&lt;br /&gt;
)&lt;br /&gt;
AND nomer_postavshika != &#039;S2&#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; --&amp;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 S, spasoi_ekz.p P, spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
  AND P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
  AND S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
  AND SPJ.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;
&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;Ещё вариант запроса без 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;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
Запрос без JOIN:&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;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 , spasoi_ekz.p P , spasoi_ekz.j J , spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE SPJ.nomer_postavshika=S.nomer_postavshika AND &lt;br /&gt;
SPJ.nomer_detali=P.nomer_detali AND&lt;br /&gt;
SPJ.nomer_izdelia=J.nomer_izdelia AND&lt;br /&gt;
P.nazvanie=LOWER(&#039;Болт&#039;) AND&lt;br /&gt;
J.nazvanie=LOWER(&#039;Рама 02-01&#039;) AND&lt;br /&gt;
SPJ.kolichestvo&amp;gt;(select min(kolichestvo) from spasoi_ekz.spj where 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;
     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 HAVING MIN(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 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;
&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 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;
&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 S.gorod, SUM(S.sostoyanie), MIN(SPJ.kolichestvo)&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 gorod HAVING MIN(kolichestvo)&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;
    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 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;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Другой вариант запроса для тонко чувствующих натур&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;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.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 J.nazvanie = LOWER(&#039;Панно 01-03&#039;)&lt;br /&gt;
GROUP BY cvet;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;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;
  белый |       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;
&amp;lt;!-- &amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-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 imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
    (SELECT DISTINCT nomer_detali FROM spasoi_ekz.spj WHERE nomer_postavshika = &#039;S2&#039;)&lt;br /&gt;
    EXCEPT&lt;br /&gt;
    (SELECT DISTINCT nomer_detali FROM spasoi_ekz.spj WHERE nomer_postavshika = SPJ.nomer_postavshika)&lt;br /&gt;
)&lt;br /&gt;
AND nomer_postavshika != &#039;S2&#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; --&amp;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>92.243.181.7</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=4023</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=4023"/>
		<updated>2013-06-24T17:02:40Z</updated>

		<summary type="html">&lt;p&gt;92.243.181.7: /* Билет 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;
Странно, что ни в одном билете нет запроса с сортировкой результатов. &amp;lt;s&amp;gt;Возможно, они буду в дополнительных заданиях.&amp;lt;/s&amp;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;
Если видите, что тот или иной запрос можно составить короче и рациональней - смело вносите правку.&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;
==== Про JOIN ====&lt;br /&gt;
&lt;br /&gt;
Почти все запросы, где используется соединение таблиц, можно написать с использованием &amp;lt;code&amp;gt;JOIN&amp;lt;/code&amp;gt;, а можно просто с перечислением таблиц через запятую.&lt;br /&gt;
&lt;br /&gt;
Но неожиданно оказалось, это почти то же самое и называется [http://ru.wikipedia.org/wiki/Join_%28SQL%29#CROSS_JOIN CROSS JOIN]. Такое соединение таблиц (&amp;lt;code&amp;gt;CROSS JOIN + WHERE&amp;lt;/code&amp;gt;) считается устаревшим, поскольку его не рекомендует стандарт SQL ANSI. Таким образом, использование &amp;lt;code&amp;gt;JOIN&amp;lt;/code&amp;gt; с условием соединения в &amp;lt;code&amp;gt;ON&amp;lt;/code&amp;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;
&amp;lt;!-- &amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-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 spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
    (SELECT DISTINCT nomer_detali FROM spasoi_ekz.spj WHERE nomer_postavshika = &#039;S2&#039;)&lt;br /&gt;
    EXCEPT&lt;br /&gt;
    (SELECT DISTINCT nomer_detali FROM spasoi_ekz.spj WHERE nomer_postavshika = SPJ.nomer_postavshika)&lt;br /&gt;
)&lt;br /&gt;
AND nomer_postavshika != &#039;S2&#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; --&amp;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 S, spasoi_ekz.p P, spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
  AND P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
  AND S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
  AND SPJ.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;
&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;Ещё вариант запроса без 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;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
Запрос без JOIN:&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;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 , spasoi_ekz.p P , spasoi_ekz.j J , spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE SPJ.nomer_postavshika=S.nomer_postavshika AND &lt;br /&gt;
SPJ.nomer_detali=P.nomer_detali AND&lt;br /&gt;
SPJ.nomer_izdelia=J.nomer_izdelia AND&lt;br /&gt;
P.nazvanie=LOWER(&#039;Болт&#039;) AND&lt;br /&gt;
J.nazvanie=LOWER(&#039;Рама 02-01&#039;) AND&lt;br /&gt;
SPJ.kolichestvo&amp;gt;(select min(kolichestvo) from spasoi_ekz.spj where 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;
     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 HAVING MIN(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 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;
&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 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 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;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Другой вариант запроса для тонко чувствующих натур&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;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.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 J.nazvanie = LOWER(&#039;Панно 01-03&#039;)&lt;br /&gt;
GROUP BY cvet;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;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;
  белый |       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;
&amp;lt;!-- &amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-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 imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
    (SELECT DISTINCT nomer_detali FROM spasoi_ekz.spj WHERE nomer_postavshika = &#039;S2&#039;)&lt;br /&gt;
    EXCEPT&lt;br /&gt;
    (SELECT DISTINCT nomer_detali FROM spasoi_ekz.spj WHERE nomer_postavshika = SPJ.nomer_postavshika)&lt;br /&gt;
)&lt;br /&gt;
AND nomer_postavshika != &#039;S2&#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; --&amp;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>92.243.181.7</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=4022</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=4022"/>
		<updated>2013-06-24T17:01:41Z</updated>

		<summary type="html">&lt;p&gt;92.243.181.7: /* Билет 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;
Странно, что ни в одном билете нет запроса с сортировкой результатов. &amp;lt;s&amp;gt;Возможно, они буду в дополнительных заданиях.&amp;lt;/s&amp;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;
Если видите, что тот или иной запрос можно составить короче и рациональней - смело вносите правку.&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;
==== Про JOIN ====&lt;br /&gt;
&lt;br /&gt;
Почти все запросы, где используется соединение таблиц, можно написать с использованием &amp;lt;code&amp;gt;JOIN&amp;lt;/code&amp;gt;, а можно просто с перечислением таблиц через запятую.&lt;br /&gt;
&lt;br /&gt;
Но неожиданно оказалось, это почти то же самое и называется [http://ru.wikipedia.org/wiki/Join_%28SQL%29#CROSS_JOIN CROSS JOIN]. Такое соединение таблиц (&amp;lt;code&amp;gt;CROSS JOIN + WHERE&amp;lt;/code&amp;gt;) считается устаревшим, поскольку его не рекомендует стандарт SQL ANSI. Таким образом, использование &amp;lt;code&amp;gt;JOIN&amp;lt;/code&amp;gt; с условием соединения в &amp;lt;code&amp;gt;ON&amp;lt;/code&amp;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;
&amp;lt;!-- &amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-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 spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
    (SELECT DISTINCT nomer_detali FROM spasoi_ekz.spj WHERE nomer_postavshika = &#039;S2&#039;)&lt;br /&gt;
    EXCEPT&lt;br /&gt;
    (SELECT DISTINCT nomer_detali FROM spasoi_ekz.spj WHERE nomer_postavshika = SPJ.nomer_postavshika)&lt;br /&gt;
)&lt;br /&gt;
AND nomer_postavshika != &#039;S2&#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; --&amp;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 S, spasoi_ekz.p P, spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
  AND P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
  AND S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
  AND SPJ.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;
&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;Ещё вариант запроса без 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;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
Запрос без JOIN:&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
WHERE SPJ.nomer.postavshika=S.nomer.postavshika AND &lt;br /&gt;
SPJ.nomer_detali=P.nomer_detali AND&lt;br /&gt;
SPJ.nomer_izdelia=J.nomer_izdelia AND&lt;br /&gt;
P.nazvanie=LOWER(&#039;Болт&#039;) AND&lt;br /&gt;
J.nazvanie=LOWER(&#039;Рама 02-01&#039;) AND&lt;br /&gt;
SPJ.kolichestvo&amp;gt;(select min(kolichestvo) from spasoi_ekz.spj where nomer_detali=&#039;P1&#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;
     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 HAVING MIN(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 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;
&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 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 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;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Другой вариант запроса для тонко чувствующих натур&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;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.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 J.nazvanie = LOWER(&#039;Панно 01-03&#039;)&lt;br /&gt;
GROUP BY cvet;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;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;
  белый |       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;
&amp;lt;!-- &amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-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 imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
    (SELECT DISTINCT nomer_detali FROM spasoi_ekz.spj WHERE nomer_postavshika = &#039;S2&#039;)&lt;br /&gt;
    EXCEPT&lt;br /&gt;
    (SELECT DISTINCT nomer_detali FROM spasoi_ekz.spj WHERE nomer_postavshika = SPJ.nomer_postavshika)&lt;br /&gt;
)&lt;br /&gt;
AND nomer_postavshika != &#039;S2&#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; --&amp;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>92.243.181.7</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=4020</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=4020"/>
		<updated>2013-06-24T16:58:31Z</updated>

		<summary type="html">&lt;p&gt;92.243.181.7: /* Билет 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;
Странно, что ни в одном билете нет запроса с сортировкой результатов. &amp;lt;s&amp;gt;Возможно, они буду в дополнительных заданиях.&amp;lt;/s&amp;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;
Если видите, что тот или иной запрос можно составить короче и рациональней - смело вносите правку.&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;
==== Про JOIN ====&lt;br /&gt;
&lt;br /&gt;
Почти все запросы, где используется соединение таблиц, можно написать с использованием &amp;lt;code&amp;gt;JOIN&amp;lt;/code&amp;gt;, а можно просто с перечислением таблиц через запятую.&lt;br /&gt;
&lt;br /&gt;
Но неожиданно оказалось, это почти то же самое и называется [http://ru.wikipedia.org/wiki/Join_%28SQL%29#CROSS_JOIN CROSS JOIN]. Такое соединение таблиц (&amp;lt;code&amp;gt;CROSS JOIN + WHERE&amp;lt;/code&amp;gt;) считается устаревшим, поскольку его не рекомендует стандарт SQL ANSI. Таким образом, использование &amp;lt;code&amp;gt;JOIN&amp;lt;/code&amp;gt; с условием соединения в &amp;lt;code&amp;gt;ON&amp;lt;/code&amp;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;
&amp;lt;!-- &amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-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 spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
    (SELECT DISTINCT nomer_detali FROM spasoi_ekz.spj WHERE nomer_postavshika = &#039;S2&#039;)&lt;br /&gt;
    EXCEPT&lt;br /&gt;
    (SELECT DISTINCT nomer_detali FROM spasoi_ekz.spj WHERE nomer_postavshika = SPJ.nomer_postavshika)&lt;br /&gt;
)&lt;br /&gt;
AND nomer_postavshika != &#039;S2&#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; --&amp;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 S, spasoi_ekz.p P, spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE P.nazvanie = LOWER(&#039;Болт&#039;)&lt;br /&gt;
  AND P.nomer_detali = SPJ.nomer_detali&lt;br /&gt;
  AND S.nomer_postavshika = SPJ.nomer_postavshika&lt;br /&gt;
  AND SPJ.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;
&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;Ещё вариант запроса без 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;
Без JOIN:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
WHERE SPJ.nomer.postavshika=S.nomer.postavshika AND &lt;br /&gt;
SPJ.nomer_detali=P.nomer_detali AND&lt;br /&gt;
SPJ.nomer_izdelia=J.nomer_izdelia AND&lt;br /&gt;
P.nazvanie=LOWER(&#039;Болт&#039;) AND&lt;br /&gt;
J.nazvanie=LOWER(&#039;Рама 02-01&#039;) AND&lt;br /&gt;
SPJ.kolichestvo&amp;gt;(select min(kolichestvo) from spasoi_ekz.spj where nomer_detali=&#039;P1&#039;)&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 HAVING MIN(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 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;
&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 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 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;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Другой вариант запроса для тонко чувствующих натур&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;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.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 J.nazvanie = LOWER(&#039;Панно 01-03&#039;)&lt;br /&gt;
GROUP BY cvet;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;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;
  белый |       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;
&amp;lt;!-- &amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Ещё вариант&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-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 imya&lt;br /&gt;
FROM spasoi_ekz.spj SPJ&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
    (SELECT DISTINCT nomer_detali FROM spasoi_ekz.spj WHERE nomer_postavshika = &#039;S2&#039;)&lt;br /&gt;
    EXCEPT&lt;br /&gt;
    (SELECT DISTINCT nomer_detali FROM spasoi_ekz.spj WHERE nomer_postavshika = SPJ.nomer_postavshika)&lt;br /&gt;
)&lt;br /&gt;
AND nomer_postavshika != &#039;S2&#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; --&amp;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>92.243.181.7</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=2474</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=2474"/>
		<updated>2013-01-03T16:01:28Z</updated>

		<summary type="html">&lt;p&gt;92.243.181.7: /* Пример */&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=G^+}}, а из этого следует, что {{Формула|f=Y \subseteq X^+}}&lt;br /&gt;
&lt;br /&gt;
:По построению G имеет место ФЗ: {{Формула|f=X\rightarrow X^+ - X}}&lt;br /&gt;
&lt;br /&gt;
:Пополним эту ФЗ: {{Формула|f=X\rightarrow (X^+ - X)\bigcup X = X^+}}&lt;br /&gt;
&lt;br /&gt;
:Теперь по первой аксиоме Армстронга имеем {{Формула|f=X^+\rightarrow Y}}&lt;br /&gt;
&lt;br /&gt;
:Значит, {{Формула|f=X\rightarrow Y \in G^+}}, по третьей аксиоме Армстронга.&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;
:{{Формула|f=Y = X^+ - X}}&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=X\rightarrow X^+}} (по определению)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=X^+\rightarrow X^+ - X}} (1 аксиома Армстронга)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=X^+\rightarrow X^+ - X = Y}} (3 аксимома Армстронга)&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>92.243.181.7</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%A1%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D0%BF%D0%B5%D1%80%D0%B5%D0%B4%D0%B0%D1%87%D0%B8_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(9_%D1%81%D0%B5%D0%BC%D0%B5%D1%81%D1%82%D1%80)&amp;diff=2459</id>
		<title>Категория:Системы передачи данных (9 семестр)</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%A1%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D0%BF%D0%B5%D1%80%D0%B5%D0%B4%D0%B0%D1%87%D0%B8_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(9_%D1%81%D0%B5%D0%BC%D0%B5%D1%81%D1%82%D1%80)&amp;diff=2459"/>
		<updated>2012-12-25T18:42:50Z</updated>

		<summary type="html">&lt;p&gt;92.243.181.7: /* Экзамен */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;p&amp;gt;{{Предмет | name=Системы передачи данных | prepod=[[Антонов А.И.]] | lections=14 | seminars=нет |  labs=5 | dzs=нет | rks=2 | signif=по желанию | what=экзамен}}&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Продолжение курса [[Сетевые_технологии_(7_семестр) | Сетевых технологий]].&lt;br /&gt;
&lt;br /&gt;
Конспектов по предмету не будет, так как после каждой лекции материал будет выдаваться в электрическом виде. Выкладываться всё будет здесь, на этой странице.&lt;br /&gt;
&lt;br /&gt;
== Лекции ==&lt;br /&gt;
&lt;br /&gt;
* [http://yadi.sk/d/fId7ythmdbGg лекция №1]&lt;br /&gt;
* [http://yadi.sk/d/H3Rn3tUrdbHu лекция №2]&lt;br /&gt;
* [http://yadi.sk/d/XDljnh4EkiBa лекция №3]&lt;br /&gt;
* [http://yadi.sk/d/gczqbpCDkiCc лекция №4]&lt;br /&gt;
* [http://yadi.sk/d/Mav3ex44sCkU лекция №5]&lt;br /&gt;
* [http://yadi.sk/d/0Usxsy3esCmi лекция №6]&lt;br /&gt;
* [http://yadi.sk/d/hmqYisEI0-8se лекция №7]&lt;br /&gt;
* [http://yadi.sk/d/_Q_0th2b06hDE лекция №8]&lt;br /&gt;
* [http://yadi.sk/d/PSM1rc8S0NoHP лекция №9]&lt;br /&gt;
* [http://yadi.sk/d/0kIBbq1v0aS4F лекция №10]&lt;br /&gt;
* [http://yadi.sk/d/mBMx8pJS0iE0l лекция №11]&lt;br /&gt;
* [http://yadi.sk/d/W5Clg9dc0qhg4 лекция №12]&lt;br /&gt;
* [http://yadi.sk/d/MpsFB3fN0w-rP лекция №13]&lt;br /&gt;
* [http://yadi.sk/d/B7h4QKLM1Aefe лекция №14]&lt;br /&gt;
&lt;br /&gt;
Внутренняя нумерация лекций внутри самих документов отличается от приведённой здесь потому, что некоторые лекции были двойные. Здесь же лекции приведены в порядке выдачи.&lt;br /&gt;
&lt;br /&gt;
== Лабораторные работы ==&lt;br /&gt;
&lt;br /&gt;
Кроме Антонова лабораторные ведёт ещё [[Аксёнов А.Н. | Аксёнов]].&lt;br /&gt;
&lt;br /&gt;
Всего пять лабораторных. Первые три делаются дома, надо принести только показать отчёт в электрическом виде - печатать не надо. 4 и 5 работы делать в зале, отчёт не надо, сделать и показать.&lt;br /&gt;
&lt;br /&gt;
За лабораторные ставятся баллы.&lt;br /&gt;
&lt;br /&gt;
* [http://yadi.sk/d/TR5f8_A6vGiI методички по ЛР №1, 2, 3]&lt;br /&gt;
* [http://yadi.sk/d/HwXTVro1vGiq методички по ЛР №4, 5]&lt;br /&gt;
&lt;br /&gt;
=== Лабораторные №1, 2, 3 ===&lt;br /&gt;
&lt;br /&gt;
Для заданного хоста в сети (для вебсайта) выполнить следующие операции (по вариантам):&lt;br /&gt;
* пинг до узла, трассировку маршрута до узла;&lt;br /&gt;
* просканировать порты узла на запущенные службы;&lt;br /&gt;
* выполнить определённые запросы (lookup, whois, HTTP);&lt;br /&gt;
* проанализировать TCP-сессию с узлом.&lt;br /&gt;
&lt;br /&gt;
Всё, кроме анализа TCP-сессии, можно делать стандартными утилитами ОС или чем угодно, но по методичке рекомендуется использовать [http://netinfo.tsarfin.com/ NetInfo].&lt;br /&gt;
&lt;br /&gt;
Анализ пакетов для выполняемых команд и TCP-сессии можно выполнять в [http://www.wireshark.org/ Wireshark].&lt;br /&gt;
&lt;br /&gt;
==== Готовые работы ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! rowspan=&amp;quot;2&amp;quot; | Удалённый хост !! colspan=&amp;quot;3&amp;quot; | Команды !! rowspan=&amp;quot;2&amp;quot; | Запросы !! rowspan=&amp;quot;2&amp;quot; | Ссылка&lt;br /&gt;
 |- &lt;br /&gt;
 ! ping !! traceroute !! services &lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! мегафон.рф&lt;br /&gt;
 | + || - || + || whois, HTML || [http://yadi.sk/d/HDt99cP_0-8Qs загрузить]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Лабораторные №4, 5 ===&lt;br /&gt;
&lt;br /&gt;
В NetCracker собрать сеть на мультиплексорах с разделением по времени в соответствии со своим вариантом.&lt;br /&gt;
&lt;br /&gt;
Мультиплексоры должны быть минимум с двумя High Speed портами. Если по заданию стоит, например, Sunrise, а у него только один порт, то брать любой другой.&lt;br /&gt;
&lt;br /&gt;
Как строить:&lt;br /&gt;
* между собой мультиплексоры соединяются портами High Speed и по протоколу Pear to Pear и T1;&lt;br /&gt;
* от мультиплексора до роутера идёт связь по портам Low Speed и Serial, тоже Pear to Pear и T1;&lt;br /&gt;
* от роутера до коммутатора и дальше к рабочим станциям идёт обычная витая пара.&lt;br /&gt;
&lt;br /&gt;
Назначить трафик между узлами. На этом заканчивается ЛР №4.&lt;br /&gt;
&lt;br /&gt;
В ЛР №5 берётся схема из предыдущей работы и меняется её топология (старую схему не удалять). Теперь надо измерить, какая топология для сети будет лучше - выставить на мультиплексорах и линиях между ними счётчики статистики и сравнить старую и новую.&lt;br /&gt;
&lt;br /&gt;
==== Готовые работы ====&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
 ! Вариант !! Топология !! Мультиплексоров !! Сетей !! Рабочих станций !! Ссылка&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! 5&lt;br /&gt;
 | Радиально-кольцевая || 5 || 9 || 6 || [http://yadi.sk/d/6veD4-SIvJLG загрузить]&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! 19&lt;br /&gt;
 | Цепь || 6 || 8 || 1 || [http://yadi.sk/d/e4tYpQ-VvJMu загрузить]&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;
* первый РК: максимум 3 балла;&lt;br /&gt;
* второй РК: максимум 3 балла;&lt;br /&gt;
* все лабораторные: максимум 6 баллов(максимум - если до декабря);&lt;br /&gt;
* посещаемость: 1 балл;&lt;br /&gt;
* блиц-опрос при сдаче: 2 балла.&lt;br /&gt;
&lt;br /&gt;
Итого: с 14 баллов для получения &amp;quot;отлично&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
* Слепов Н.Н. - &amp;quot;Синхронные цифровые сети&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Категория:9 семестр]]&lt;br /&gt;
[[Категория:Предметы]]&lt;/div&gt;</summary>
		<author><name>92.243.181.7</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%A1%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D0%BF%D0%B5%D1%80%D0%B5%D0%B4%D0%B0%D1%87%D0%B8_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(9_%D1%81%D0%B5%D0%BC%D0%B5%D1%81%D1%82%D1%80)&amp;diff=2458</id>
		<title>Категория:Системы передачи данных (9 семестр)</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%A1%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D0%BF%D0%B5%D1%80%D0%B5%D0%B4%D0%B0%D1%87%D0%B8_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(9_%D1%81%D0%B5%D0%BC%D0%B5%D1%81%D1%82%D1%80)&amp;diff=2458"/>
		<updated>2012-12-25T18:42:14Z</updated>

		<summary type="html">&lt;p&gt;92.243.181.7: /* Экзамен */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;p&amp;gt;{{Предмет | name=Системы передачи данных | prepod=[[Антонов А.И.]] | lections=14 | seminars=нет |  labs=5 | dzs=нет | rks=2 | signif=по желанию | what=экзамен}}&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Продолжение курса [[Сетевые_технологии_(7_семестр) | Сетевых технологий]].&lt;br /&gt;
&lt;br /&gt;
Конспектов по предмету не будет, так как после каждой лекции материал будет выдаваться в электрическом виде. Выкладываться всё будет здесь, на этой странице.&lt;br /&gt;
&lt;br /&gt;
== Лекции ==&lt;br /&gt;
&lt;br /&gt;
* [http://yadi.sk/d/fId7ythmdbGg лекция №1]&lt;br /&gt;
* [http://yadi.sk/d/H3Rn3tUrdbHu лекция №2]&lt;br /&gt;
* [http://yadi.sk/d/XDljnh4EkiBa лекция №3]&lt;br /&gt;
* [http://yadi.sk/d/gczqbpCDkiCc лекция №4]&lt;br /&gt;
* [http://yadi.sk/d/Mav3ex44sCkU лекция №5]&lt;br /&gt;
* [http://yadi.sk/d/0Usxsy3esCmi лекция №6]&lt;br /&gt;
* [http://yadi.sk/d/hmqYisEI0-8se лекция №7]&lt;br /&gt;
* [http://yadi.sk/d/_Q_0th2b06hDE лекция №8]&lt;br /&gt;
* [http://yadi.sk/d/PSM1rc8S0NoHP лекция №9]&lt;br /&gt;
* [http://yadi.sk/d/0kIBbq1v0aS4F лекция №10]&lt;br /&gt;
* [http://yadi.sk/d/mBMx8pJS0iE0l лекция №11]&lt;br /&gt;
* [http://yadi.sk/d/W5Clg9dc0qhg4 лекция №12]&lt;br /&gt;
* [http://yadi.sk/d/MpsFB3fN0w-rP лекция №13]&lt;br /&gt;
* [http://yadi.sk/d/B7h4QKLM1Aefe лекция №14]&lt;br /&gt;
&lt;br /&gt;
Внутренняя нумерация лекций внутри самих документов отличается от приведённой здесь потому, что некоторые лекции были двойные. Здесь же лекции приведены в порядке выдачи.&lt;br /&gt;
&lt;br /&gt;
== Лабораторные работы ==&lt;br /&gt;
&lt;br /&gt;
Кроме Антонова лабораторные ведёт ещё [[Аксёнов А.Н. | Аксёнов]].&lt;br /&gt;
&lt;br /&gt;
Всего пять лабораторных. Первые три делаются дома, надо принести только показать отчёт в электрическом виде - печатать не надо. 4 и 5 работы делать в зале, отчёт не надо, сделать и показать.&lt;br /&gt;
&lt;br /&gt;
За лабораторные ставятся баллы.&lt;br /&gt;
&lt;br /&gt;
* [http://yadi.sk/d/TR5f8_A6vGiI методички по ЛР №1, 2, 3]&lt;br /&gt;
* [http://yadi.sk/d/HwXTVro1vGiq методички по ЛР №4, 5]&lt;br /&gt;
&lt;br /&gt;
=== Лабораторные №1, 2, 3 ===&lt;br /&gt;
&lt;br /&gt;
Для заданного хоста в сети (для вебсайта) выполнить следующие операции (по вариантам):&lt;br /&gt;
* пинг до узла, трассировку маршрута до узла;&lt;br /&gt;
* просканировать порты узла на запущенные службы;&lt;br /&gt;
* выполнить определённые запросы (lookup, whois, HTTP);&lt;br /&gt;
* проанализировать TCP-сессию с узлом.&lt;br /&gt;
&lt;br /&gt;
Всё, кроме анализа TCP-сессии, можно делать стандартными утилитами ОС или чем угодно, но по методичке рекомендуется использовать [http://netinfo.tsarfin.com/ NetInfo].&lt;br /&gt;
&lt;br /&gt;
Анализ пакетов для выполняемых команд и TCP-сессии можно выполнять в [http://www.wireshark.org/ Wireshark].&lt;br /&gt;
&lt;br /&gt;
==== Готовые работы ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! rowspan=&amp;quot;2&amp;quot; | Удалённый хост !! colspan=&amp;quot;3&amp;quot; | Команды !! rowspan=&amp;quot;2&amp;quot; | Запросы !! rowspan=&amp;quot;2&amp;quot; | Ссылка&lt;br /&gt;
 |- &lt;br /&gt;
 ! ping !! traceroute !! services &lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! мегафон.рф&lt;br /&gt;
 | + || - || + || whois, HTML || [http://yadi.sk/d/HDt99cP_0-8Qs загрузить]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Лабораторные №4, 5 ===&lt;br /&gt;
&lt;br /&gt;
В NetCracker собрать сеть на мультиплексорах с разделением по времени в соответствии со своим вариантом.&lt;br /&gt;
&lt;br /&gt;
Мультиплексоры должны быть минимум с двумя High Speed портами. Если по заданию стоит, например, Sunrise, а у него только один порт, то брать любой другой.&lt;br /&gt;
&lt;br /&gt;
Как строить:&lt;br /&gt;
* между собой мультиплексоры соединяются портами High Speed и по протоколу Pear to Pear и T1;&lt;br /&gt;
* от мультиплексора до роутера идёт связь по портам Low Speed и Serial, тоже Pear to Pear и T1;&lt;br /&gt;
* от роутера до коммутатора и дальше к рабочим станциям идёт обычная витая пара.&lt;br /&gt;
&lt;br /&gt;
Назначить трафик между узлами. На этом заканчивается ЛР №4.&lt;br /&gt;
&lt;br /&gt;
В ЛР №5 берётся схема из предыдущей работы и меняется её топология (старую схему не удалять). Теперь надо измерить, какая топология для сети будет лучше - выставить на мультиплексорах и линиях между ними счётчики статистики и сравнить старую и новую.&lt;br /&gt;
&lt;br /&gt;
==== Готовые работы ====&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
 ! Вариант !! Топология !! Мультиплексоров !! Сетей !! Рабочих станций !! Ссылка&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! 5&lt;br /&gt;
 | Радиально-кольцевая || 5 || 9 || 6 || [http://yadi.sk/d/6veD4-SIvJLG загрузить]&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! 19&lt;br /&gt;
 | Цепь || 6 || 8 || 1 || [http://yadi.sk/d/e4tYpQ-VvJMu загрузить]&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;
* первый РК: максимум 3 балла;&lt;br /&gt;
* второй РК: максимум 3 балла;&lt;br /&gt;
* все лабораторные: максимум 6 баллов(максимум - если до декабря);&lt;br /&gt;
* посещаемость: 1 балл;&lt;br /&gt;
* блиц-опрос при сдаче: 2 балла.&lt;br /&gt;
&lt;br /&gt;
Итого: 15 баллов для получения &amp;quot;отлично&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
* Слепов Н.Н. - &amp;quot;Синхронные цифровые сети&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Категория:9 семестр]]&lt;br /&gt;
[[Категория:Предметы]]&lt;/div&gt;</summary>
		<author><name>92.243.181.7</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%A1%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D0%BF%D0%B5%D1%80%D0%B5%D0%B4%D0%B0%D1%87%D0%B8_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(9_%D1%81%D0%B5%D0%BC%D0%B5%D1%81%D1%82%D1%80)&amp;diff=2457</id>
		<title>Категория:Системы передачи данных (9 семестр)</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%A1%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D0%BF%D0%B5%D1%80%D0%B5%D0%B4%D0%B0%D1%87%D0%B8_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(9_%D1%81%D0%B5%D0%BC%D0%B5%D1%81%D1%82%D1%80)&amp;diff=2457"/>
		<updated>2012-12-25T18:41:21Z</updated>

		<summary type="html">&lt;p&gt;92.243.181.7: /* Экзамен */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;p&amp;gt;{{Предмет | name=Системы передачи данных | prepod=[[Антонов А.И.]] | lections=14 | seminars=нет |  labs=5 | dzs=нет | rks=2 | signif=по желанию | what=экзамен}}&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Продолжение курса [[Сетевые_технологии_(7_семестр) | Сетевых технологий]].&lt;br /&gt;
&lt;br /&gt;
Конспектов по предмету не будет, так как после каждой лекции материал будет выдаваться в электрическом виде. Выкладываться всё будет здесь, на этой странице.&lt;br /&gt;
&lt;br /&gt;
== Лекции ==&lt;br /&gt;
&lt;br /&gt;
* [http://yadi.sk/d/fId7ythmdbGg лекция №1]&lt;br /&gt;
* [http://yadi.sk/d/H3Rn3tUrdbHu лекция №2]&lt;br /&gt;
* [http://yadi.sk/d/XDljnh4EkiBa лекция №3]&lt;br /&gt;
* [http://yadi.sk/d/gczqbpCDkiCc лекция №4]&lt;br /&gt;
* [http://yadi.sk/d/Mav3ex44sCkU лекция №5]&lt;br /&gt;
* [http://yadi.sk/d/0Usxsy3esCmi лекция №6]&lt;br /&gt;
* [http://yadi.sk/d/hmqYisEI0-8se лекция №7]&lt;br /&gt;
* [http://yadi.sk/d/_Q_0th2b06hDE лекция №8]&lt;br /&gt;
* [http://yadi.sk/d/PSM1rc8S0NoHP лекция №9]&lt;br /&gt;
* [http://yadi.sk/d/0kIBbq1v0aS4F лекция №10]&lt;br /&gt;
* [http://yadi.sk/d/mBMx8pJS0iE0l лекция №11]&lt;br /&gt;
* [http://yadi.sk/d/W5Clg9dc0qhg4 лекция №12]&lt;br /&gt;
* [http://yadi.sk/d/MpsFB3fN0w-rP лекция №13]&lt;br /&gt;
* [http://yadi.sk/d/B7h4QKLM1Aefe лекция №14]&lt;br /&gt;
&lt;br /&gt;
Внутренняя нумерация лекций внутри самих документов отличается от приведённой здесь потому, что некоторые лекции были двойные. Здесь же лекции приведены в порядке выдачи.&lt;br /&gt;
&lt;br /&gt;
== Лабораторные работы ==&lt;br /&gt;
&lt;br /&gt;
Кроме Антонова лабораторные ведёт ещё [[Аксёнов А.Н. | Аксёнов]].&lt;br /&gt;
&lt;br /&gt;
Всего пять лабораторных. Первые три делаются дома, надо принести только показать отчёт в электрическом виде - печатать не надо. 4 и 5 работы делать в зале, отчёт не надо, сделать и показать.&lt;br /&gt;
&lt;br /&gt;
За лабораторные ставятся баллы.&lt;br /&gt;
&lt;br /&gt;
* [http://yadi.sk/d/TR5f8_A6vGiI методички по ЛР №1, 2, 3]&lt;br /&gt;
* [http://yadi.sk/d/HwXTVro1vGiq методички по ЛР №4, 5]&lt;br /&gt;
&lt;br /&gt;
=== Лабораторные №1, 2, 3 ===&lt;br /&gt;
&lt;br /&gt;
Для заданного хоста в сети (для вебсайта) выполнить следующие операции (по вариантам):&lt;br /&gt;
* пинг до узла, трассировку маршрута до узла;&lt;br /&gt;
* просканировать порты узла на запущенные службы;&lt;br /&gt;
* выполнить определённые запросы (lookup, whois, HTTP);&lt;br /&gt;
* проанализировать TCP-сессию с узлом.&lt;br /&gt;
&lt;br /&gt;
Всё, кроме анализа TCP-сессии, можно делать стандартными утилитами ОС или чем угодно, но по методичке рекомендуется использовать [http://netinfo.tsarfin.com/ NetInfo].&lt;br /&gt;
&lt;br /&gt;
Анализ пакетов для выполняемых команд и TCP-сессии можно выполнять в [http://www.wireshark.org/ Wireshark].&lt;br /&gt;
&lt;br /&gt;
==== Готовые работы ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! rowspan=&amp;quot;2&amp;quot; | Удалённый хост !! colspan=&amp;quot;3&amp;quot; | Команды !! rowspan=&amp;quot;2&amp;quot; | Запросы !! rowspan=&amp;quot;2&amp;quot; | Ссылка&lt;br /&gt;
 |- &lt;br /&gt;
 ! ping !! traceroute !! services &lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! мегафон.рф&lt;br /&gt;
 | + || - || + || whois, HTML || [http://yadi.sk/d/HDt99cP_0-8Qs загрузить]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Лабораторные №4, 5 ===&lt;br /&gt;
&lt;br /&gt;
В NetCracker собрать сеть на мультиплексорах с разделением по времени в соответствии со своим вариантом.&lt;br /&gt;
&lt;br /&gt;
Мультиплексоры должны быть минимум с двумя High Speed портами. Если по заданию стоит, например, Sunrise, а у него только один порт, то брать любой другой.&lt;br /&gt;
&lt;br /&gt;
Как строить:&lt;br /&gt;
* между собой мультиплексоры соединяются портами High Speed и по протоколу Pear to Pear и T1;&lt;br /&gt;
* от мультиплексора до роутера идёт связь по портам Low Speed и Serial, тоже Pear to Pear и T1;&lt;br /&gt;
* от роутера до коммутатора и дальше к рабочим станциям идёт обычная витая пара.&lt;br /&gt;
&lt;br /&gt;
Назначить трафик между узлами. На этом заканчивается ЛР №4.&lt;br /&gt;
&lt;br /&gt;
В ЛР №5 берётся схема из предыдущей работы и меняется её топология (старую схему не удалять). Теперь надо измерить, какая топология для сети будет лучше - выставить на мультиплексорах и линиях между ними счётчики статистики и сравнить старую и новую.&lt;br /&gt;
&lt;br /&gt;
==== Готовые работы ====&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
 ! Вариант !! Топология !! Мультиплексоров !! Сетей !! Рабочих станций !! Ссылка&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! 5&lt;br /&gt;
 | Радиально-кольцевая || 5 || 9 || 6 || [http://yadi.sk/d/6veD4-SIvJLG загрузить]&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! 19&lt;br /&gt;
 | Цепь || 6 || 8 || 1 || [http://yadi.sk/d/e4tYpQ-VvJMu загрузить]&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;
* первый РК: максимум 3 балла;&lt;br /&gt;
* второй РК: максимум 3 балла;&lt;br /&gt;
* все лабораторные: максимум 6 баллов;&lt;br /&gt;
* посещаемость: 1 балл;&lt;br /&gt;
* блиц-опрос при сдаче: 2 балла.&lt;br /&gt;
&lt;br /&gt;
Итого: 15 баллов для получения &amp;quot;отлично&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
* Слепов Н.Н. - &amp;quot;Синхронные цифровые сети&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Категория:9 семестр]]&lt;br /&gt;
[[Категория:Предметы]]&lt;/div&gt;</summary>
		<author><name>92.243.181.7</name></author>
	</entry>
	<entry>
		<id>https://iu5bmstu.ru/index.php?title=%D0%9F%D0%91%D0%94_(9)_-_%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_%E2%84%963_-_%D0%9C%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(%D0%BF%D1%80%D0%BE%D0%B4%D0%BE%D0%BB%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5)&amp;diff=1663</id>
		<title>ПБД (9) - Лекция №3 - Модели данных (продолжение)</title>
		<link rel="alternate" type="text/html" href="https://iu5bmstu.ru/index.php?title=%D0%9F%D0%91%D0%94_(9)_-_%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_%E2%84%963_-_%D0%9C%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(%D0%BF%D1%80%D0%BE%D0%B4%D0%BE%D0%BB%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5)&amp;diff=1663"/>
		<updated>2012-10-09T19:12:20Z</updated>

		<summary type="html">&lt;p&gt;92.243.181.7: /* Про связи */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
Продолжаем работать с нашим примером:&lt;br /&gt;
&lt;br /&gt;
[[Файл:9sPBDl2pic2.png|link=Файл:9sPBDl2pic2.svg]]&lt;br /&gt;
&lt;br /&gt;
== ODL ==&lt;br /&gt;
&lt;br /&gt;
=== Для нашего примера ===&lt;br /&gt;
&lt;br /&gt;
Кстати, ключи везде прописывать не обязательно, потому что по умолчанию всегда будет OID. И он будет назначаться всегда, даже если мы объявим ещё и свой ключ.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=cpp&amp;gt;&lt;br /&gt;
class Film(extent Films&lt;br /&gt;
	key(name, year))&lt;br /&gt;
{&lt;br /&gt;
 attribute string name;&lt;br /&gt;
 attribute integer year;&lt;br /&gt;
 attribute integer len;&lt;br /&gt;
 attribute enum Ftype {bw, color} type;&lt;br /&gt;
&lt;br /&gt;
 relationship Studia stud&lt;br /&gt;
	inverse Studia::fs;&lt;br /&gt;
&lt;br /&gt;
 relationship Set&amp;lt;Actor&amp;gt; acts &lt;br /&gt;
	inverse Actor::infs;&lt;br /&gt;
&lt;br /&gt;
 -- пример метода. Считает актёров и возвращает noActors, если нету ни одного&lt;br /&gt;
 integer ActCount() raises(noActors);&lt;br /&gt;
&lt;br /&gt;
 void FinYear(in integer year, out Set&amp;lt;Films&amp;gt;) raises(noFilms, badYear);&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
class Studia(extent Studies)&lt;br /&gt;
{&lt;br /&gt;
 attribute string sname;&lt;br /&gt;
 attribute Struct Addr&lt;br /&gt;
	{&lt;br /&gt;
	 string city,&lt;br /&gt;
	 string street&lt;br /&gt;
	} addr;&lt;br /&gt;
&lt;br /&gt;
 relationship Set&amp;lt;Film&amp;gt; fs&lt;br /&gt;
	inverse Film::stud;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
class Actor(extent Actors&lt;br /&gt;
	key inn)&lt;br /&gt;
{&lt;br /&gt;
 attribute string inn;&lt;br /&gt;
 attribute string fio;&lt;br /&gt;
 attribute List&amp;lt;string&amp;gt; edu;&lt;br /&gt;
 &lt;br /&gt;
 relationship Set&amp;lt;Film&amp;gt; infs&lt;br /&gt;
	inverse Film::acts;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
class MF extend S Film(extent MFS)&lt;br /&gt;
{&lt;br /&gt;
 attribute string drawer;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
class Drama extend S Film (extent Dranas)&lt;br /&gt;
{&lt;br /&gt;
 attribute Struct&lt;br /&gt;
	{&lt;br /&gt;
	 Set&amp;lt;string&amp;gt; authors,&lt;br /&gt;
	 string bname&lt;br /&gt;
	} book;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Для примера с ВУЗом ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=cpp&amp;gt;&lt;br /&gt;
class Vuz(extent Vs)&lt;br /&gt;
{&lt;br /&gt;
 attribute string name;&lt;br /&gt;
 &lt;br /&gt;
 relationship Set&amp;lt;Kaf&amp;gt; Kafs&lt;br /&gt;
	inverse Kaf::vuzz;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
-- слабая сущность&lt;br /&gt;
class Kaf(extent Ks&lt;br /&gt;
	key(kname, vuzz))&lt;br /&gt;
{&lt;br /&gt;
 attribute string kname;&lt;br /&gt;
 &lt;br /&gt;
 relationship Vuz vuzz&lt;br /&gt;
	inverse Vuz::Kafs;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Про связи ===&lt;br /&gt;
&lt;br /&gt;
Все связи строго бинарны - можно связать только два объекта. Чтобы связать больше объектов (например, три), надо делать так:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=cpp&amp;gt;&lt;br /&gt;
class Gr(extent ...)&lt;br /&gt;
{&lt;br /&gt;
 attribute ...&lt;br /&gt;
 &lt;br /&gt;
 relationship Set&amp;lt;ADG&amp;gt; gin&lt;br /&gt;
	inverse ADG::g;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
class Dis(extent ...)&lt;br /&gt;
{&lt;br /&gt;
 relationship Set&amp;lt;ADG&amp;gt; din&lt;br /&gt;
	inverse ADG::d;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
class Aud(extent ...)&lt;br /&gt;
{&lt;br /&gt;
 relationship Set&amp;lt;ADG&amp;gt; in&lt;br /&gt;
	inverse ADG::a;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
-- этот класс содержит связи&lt;br /&gt;
class ADG(extent edgs)&lt;br /&gt;
{ &lt;br /&gt;
 relationship Aud a&lt;br /&gt;
	inverse Aud::in;&lt;br /&gt;
 relationship Dis d&lt;br /&gt;
	inverse Dis::din;&lt;br /&gt;
 relationship Gr g&lt;br /&gt;
	inverse Gr::gin;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;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;
* ключ преобразуется в ключ;&lt;br /&gt;
* если ключа не было, то вводится дополнительное поле, которое будет ключом;&lt;br /&gt;
* у структур поля преобразуются в отдельный атрибут;&lt;br /&gt;
* множества преобразуются в множества кортежей.&lt;br /&gt;
&lt;br /&gt;
Пример с нашим примером:&lt;br /&gt;
&lt;br /&gt;
 Films(&amp;lt;u&amp;gt;name, year&amp;lt;/u&amp;gt;, len, type);&lt;br /&gt;
 Stusies(sname, city, street, &amp;lt;u&amp;gt;sid&amp;lt;/u&amp;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;
*** множество структур (&#039;&#039;вложенное отношение&#039;&#039;):&lt;br /&gt;
 Actors(&amp;lt;u&amp;gt;inn&amp;lt;/u&amp;gt;, fio, edu(year, Vuz));&lt;br /&gt;
* методы;&lt;br /&gt;
** методы экземпляров;&lt;br /&gt;
** методы классов;&lt;br /&gt;
* ссылки - теперь в качестве значения атрибута можно хранить ссылку на конкретный кортеж:&lt;br /&gt;
 Studies(sname, addr, s&amp;lt;u&amp;gt;id&amp;lt;/u&amp;gt;&lt;br /&gt;
 Films(&amp;lt;u&amp;gt;name, year&amp;lt;/u&amp;gt;, len, type, stud(*(Studies)));&lt;br /&gt;
&lt;br /&gt;
Для соблюдения стандарта SQL&#039;99 связь 1:M создаётся добавлением в таблицу со стороны М ссылки на кортеж таблицы со стороны 1.&lt;br /&gt;
&lt;br /&gt;
А связь М:М создаётся путём отдельной дополнительной таблицы, содержащей ссылки на соответствующие кортежи таблиц.&lt;br /&gt;
&lt;br /&gt;
=== Сравнение объектной и объектно-реляционной модели ===&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;lt;br&amp;gt;объект || схема отношения → отношение (таблица)&amp;lt;br&amp;gt;кортеж&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | методы || методы&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | структуры, коллекции,&amp;lt;br&amp;gt;множество структур (классы) || структуры, коллекции,&amp;lt;br&amp;gt;множество структур (схемы отношений или вложенные отношения)&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | OID скрыт || OID может быть доступен&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | 1 класс - 1 экстент&amp;lt;br&amp;gt;1 интерфейс - N классов и N их экстентов || 1 схема отношений - N отношений (таблиц)&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | обратной совместимости с реляционной моделью нет || обратно совместима с реляционной моделью&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
[[Категория:Постреляционные базы данных (9 семестр)]]&lt;br /&gt;
[[Категория:Конспекты лекций и семинаров]]&lt;/div&gt;</summary>
		<author><name>92.243.181.7</name></author>
	</entry>
</feed>