Я изучаю SQL с помощью учебника по GalaXQL.
Я не могу понять следующий вопрос (Упражнение 12):
Сформировать список звезд со звездными идентификаторами ниже 100 с колонками «starname», «startemp», «planetname», и "планетемп". В списке должны быть все звезды с неизвестными данными, заполненными NULL. Эти ценности, как обычно, вымышлены. Вычислите температуру для звезды с ((класс + 7) * интенсивность) * 1000000, и температура планеты рассчитывается по температуре звезды минус 50 раз по орбите.
Каков синтаксис для написания запроса LEFT OUTER JOIN, когда у вас есть элементы подзапроса «AS», которые необходимо объединить?
Вот что у меня есть:
SELECT stars.name AS starname, startemp, planets.name AS planetname, planettemp
FROM stars, planets
LEFT OUTER JOIN (SELECT ((stars.class + 7) * stars.intensity) * 1000000 AS startemp
FROM stars)
ON stars.starid < 100 = planets.planetid
LEFT OUTER JOIN (SELECT (startemp - 50 * planets.orbitdistance) AS planettemp
FROM planets)
ON stars.starid < 100
Вот схема базы данных (извините, я не могу опубликовать файл изображения из-за низкой частоты повторений):
CREATE TABLE stars (starid INTEGER PRIMARY KEY,
name TEXT,
x DOUBLE NOT NULL,
y DOUBLE NOT NULL,
z DOUBLE NOT NULL,
class INTEGER NOT NULL,
intensity DOUBLE NOT NULL);
CREATE TABLE hilight (starid INTEGER UNIQUE);
CREATE TABLE planets (planetid INTEGER PRIMARY KEY,
starid INTEGER NOT NULL,
orbitdistance DOUBLE NOT NULL,
name TEXT,
color INTEGER NOT NULL,
radius DOUBLE NOT NULL);
CREATE TABLE moons (moonid INTEGER PRIMARY KEY,
planetid INTEGER NOT NULL,
orbitdistance DOUBLE NOT NULL,
name TEXT,
color INTEGER NOT NULL,
radius DOUBLE NOT NULL);
CREATE INDEX planets_starid ON planets (starid);
CREATE INDEX moons_planetid ON moons (planetid);