2015-08-18 10 views
-2

Эта часть требует, чтобы вы записали простое внутреннее соединение из нескольких таблиц. Напишите инструкцию SQL, которая возвращает набор данных со всеми аэропортами Лондона. Набор данных должен содержать, для каждого аэропорта, название города, страны, код аэропорта и его широту и LONGI-TudeSQL join (INNER JOIN)

Моего ответа здесь:

 SELECT City.name, Country.name, Airport.code, Airport.latitude, 
       Airport.longtitude 
     FROM City, Airport, Country 
      WHERE Country.id = City.Country 
      AND Airport.city = City.id 
      AND City.name = "London" 

я прав? Нужно ли писать ключевые слова, такие как «INNER JOIN» или «ON» в моем коде?

+0

может у объяснить структуру таблицы? –

+0

Извините. Таблица аэропорта имеет ПЕРВИЧНЫЙ КЛЮЧ (id), ИНОСТРАННЫЙ КЛЮЧ (город) ССЫЛКИ Город (id) Стол Город имеет ПЕРВИЧНЫЙ КЛЮЧ (id), УНИКАЛЬНЫЙ ИНДЕКС (название, страна), ИНОСТРАННЫЙ КЛЮЧ (страна) ССЫЛКИ Страна (id) Таблица Страна имеет ПЕРВИЧНЫЙ КЛЮЧ (id), –

ответ

1

Это нормально.

SELECT City.name, Country.name, Airport.code, Airport.latitude, Airport.longtitude 
FROM City, Airport, Country 
WHERE 
    Country.id = City.Country 
AND Airport.city = City.id 
AND City.name = "London" 

Но может быть также написать как этот

SELECT City.name, Country.name, Airport.code, Airport.latitude, Airport.longtitude 
FROM 
    City 
    inner join Country ON Country.id = City.Country 
    inner join Airport ON Airport.city = City.id 
WHERE 
    City.name = "London" 
1

Учитывая, что вопрос задает для «простой внутреннее соединение», то да, вы должны будете использовать эти ключевые слова! INNER JOIN используется для связывания таблиц с соответствующими столбцами. Например, если одна таблица содержит сведения о городе, другая таблица может ссылаться на нее через свой столбец идентификаторов, а запрос с использованием INNER JOIN может извлекать данные из обоих. Если данные города меняются, их нужно изменить только в одной таблице.

В вашем примере, запрос будет выглядеть следующим образом:

SELECT 
    c.name, 
    cty.name, 
    ap.code, 
    ap.latitude, 
    ap.longtitude 
FROM 
    Airport ap 
    INNER JOIN City c ON ap.city = c.id 
    INNER JOIN Country cty ON c.Country = cty.id 
WHERE 
    c.name = "London" 
+0

cty означает город :-) – vels4j

+0

yep, должен работать над моими псевдонимами :-) –

0
 SELECT City.name, Country.name, Airport.code, Airport.latitude, 
       Airport.longtitude 

     from Airport 
      inner join city on Airport.city = City.id 
      inner join Country ON Country.id = City.Country 
     where 
      city.name='London'