Глава 17. Вложенные запросы

Чтобы найти в таблице planet планеты с массой большей, чем у Марса, можно прежде определить массу Марса, а затем выбрать планеты с помощью условия WHERE mass>масса_Марса:

test54=# SELECT mass FROM planet WHERE name='Марс';
    mass    
------------
 6.4219e+23
(1 запись)

test54=# SELECT * FROM planet WHERE mass>6.4219e+23;
  name  | token | diameter |    mass    | orbit  
--------+-------+----------+------------+--------
 Венера | ♀     |  12103.6 |  4.869e+24 |   0.72
 Земля  | ♁     |  12756.3 | 5.9736e+24 |      1
 Марс   | ♂     |     6794 | 6.4219e+23 |   1.52
 Юпитер | ♃     |   142984 |    1.9e+27 |    5.2
 Сатурн | ♄     |   120536 |   5.68e+26 |   9.54
 Уран   | ♅     |    51118 |  8.683e+25 | 19.218
 Нептун | ♆     |    49532 | 1.0247e+26 |  30.06
(7 rows)

[Замечание]Замечание

Таинственное появление Марса (эта уникальная планета тяжелее самой себя) в этом списке имеет рациональное объяснение. Я при составлении второго запроса скопировал и вставил то значение, которое было выведено при первом запросе. Есть подозрение, что показанное число (6.4219e+23) не содержит каких-то дальних знаков после десятичной точки, поскольку получено в результате округления истинного значения массы Марса. Истинное значение массы Марса, записанное в таблице, чуть больше, что и объясняет парадокс.

Но можно получить интересующие нас записи одним запросом:

test54=# SELECT * from planet
test54-# WHERE mass>(SELECT mass FROM planet WHERE name='Марс');
  name  | token | diameter |    mass    | orbit  
--------+-------+----------+------------+--------
 Венера | ♀     |  12103.6 |  4.869e+24 |   0.72
 Земля  | ♁     |  12756.3 | 5.9736e+24 |      1
 Юпитер | ♃     |   142984 |    1.9e+27 |    5.2
 Сатурн | ♄     |   120536 |   5.68e+26 |   9.54
 Уран   | ♅     |    51118 |  8.683e+25 | 19.218
 Нептун | ♆     |    49532 | 1.0247e+26 |  30.06
(6 rows)

Видно, что в качестве правой части неравенства взято значение, полученное в результате запроса. Важно, чтобы такой подзапрос возвращал только одну колонку и только одну запись.

Информатика-54