Программирование Викиданных/ТопКар SQL

Материал из Викиверситета

Запросы на языке SQL к базе данных ТопКар.

См. Топонимия Карелии.

См. схему базы данных в проекте GitHub topkar.

См. код для сравнения результатов запросов к wikidata и topkar

Запрос[править]

Получить все объекты для которых не заполнено поле geotype_id[править]

SELECT id, name FROM toponyms WHERE geotype_id IS NULL

Получить id топонима, название топонима, geotype_id и имя geotype[править]

 SELECT toponyms.id, toponyms.name, geotype_id, name_ru, wd FROM toponyms LEFT JOIN geotypes ON toponyms.id WHERE geotype_id = geotypes.id INTO OUTFILE 'output.txt'

Горы[править]

Получить все объекты гор из таблицы toponyms[править]

SELECT name FROM toponyms WHERE geotype_id = 53 INTO OUTFILE 'mountains.txt';

Получить все топонимы гор из таблицы toponyms и topnames[править]

CREATE TABLE sets_1 SELECT id, name, geotype_id FROM toponyms WHERE geotype_id = 53;
SELECT toponym_id, topnames.name FROM topnames INNER JOIN sets_1 ON toponym_id WHERE sets_1 .id = topnames.toponym_id
UNION
SELECT id, name FROM stream_1 INTO OUTFILE 'mountain.txt';
DROP TABLE sets_1

Озёра[править]

Получить все объекты озёр из таблицы toponyms[править]

SELECT name FROM toponyms WHERE geotype_id = 25 INTO OUTFILE 'lakes.txt';

Получить все топонимы озёр из таблицы toponyms и topnames[править]

CREATE TABLE sets_1 SELECT id, name, geotype_id FROM toponyms WHERE geotype_id = 25;
SELECT toponym_id, topnames.name FROM topnames INNER JOIN sets_1 ON toponym_id WHERE sets_1 .id = topnames.toponym_id
UNION
SELECT id, name FROM stream_1 INTO OUTFILE 'lakes.txt';
DROP TABLE sets_1

Реки[править]

Получить все объекты рек из таблицы toponyms[править]

SELECT name FROM toponyms WHERE geotype_id = 26 INTO OUTFILE 'rivers.txt';

Получить все топонимы рек из таблицы toponyms и topnames[править]

CREATE TABLE sets_1 SELECT id, name, geotype_id FROM toponyms WHERE geotype_id = 26;
SELECT toponym_id, topnames.name FROM topnames INNER JOIN sets_1 ON toponym_id WHERE sets_1 .id = topnames.toponym_id
UNION
SELECT id, name FROM stream_1 INTO OUTFILE 'rivers.txt';
DROP TABLE sets_1

Острова[править]

Получить все объекты островов из таблицы toponyms[править]

SELECT name FROM toponyms WHERE geotype_id = 51 INTO OUTFILE 'islands.txt';

Получить все топонимы рек из таблицы toponyms и topnames[править]

CREATE TABLE sets_1 SELECT id, name, geotype_id FROM toponyms WHERE geotype_id = 51;
SELECT toponym_id, topnames.name FROM topnames INNER JOIN sets_1 ON toponym_id WHERE sets_1 .id = topnames.toponym_id
UNION
SELECT id, name FROM stream_1 INTO OUTFILE 'islands.txt';
DROP TABLE sets_1

Деревни[править]

Получить все объекты деревень из таблицы toponyms[править]

SELECT name FROM toponyms WHERE geotype_id = 21 INTO OUTFILE 'villages.txt';

Получить все топонимы рек из таблицы toponyms и topnames[править]

CREATE TABLE sets_1 SELECT id, name, geotype_id FROM toponyms WHERE geotype_id = 21;
SELECT toponym_id, topnames.name FROM topnames INNER JOIN sets_1 ON toponym_id WHERE sets_1 .id = topnames.toponym_id
UNION
SELECT id, name FROM stream_1 INTO OUTFILE 'villages.txt';
DROP TABLE sets_1