Запрос к системным таблицам базы геоданных с помощью SQL—Справка
После понимания отношений между четырьмя системными таблицами базы геоданных лучше всего можно посмотреть принципы их совместной работы, используя SQL. Если выбрать все строки и столбцы из таблицы элементов GDB_Items появится набор результатов, выглядящий примерно следующим образом (вместе со многими другими полями):
Обратите внимание, что значения в столбце «Тип» хранятся в качестве идентификаторов UUID. Как говорилось в разделе Обзор системных таблиц базы геоданных, эти идентификаторы UUID могут быть разрешены с помощью таблицы GDB_ItemTypes, как показано в следующем запросе:
SELECT gdb_items.UUID, gdb_itemtypes.name AS "Type", gdb_items.name FROM gdb_items INNER JOIN gdb_itemtypes ON gdb_items.type = gdb_itemtypes.UUID;
Возвращает результат, похожий на результат запуска простого выражения SELECT в таблице GDB_Items, но при этом использует UUID в столбце Type (Тип), замененный читаемыми строками:
Аналогичным образом, таблица GDB_ItemRelationships также содержит идентификаторы UUID, которые являются значениями ключей из других таблиц.
--SQL Server and PostgreSQL query SELECT relationships.type, origin_items.name AS "Origin Name", dest_items.name AS "Dest Name" FROM gdb_items AS origin_items, gdb_itemrelationships AS relationships, gdb_items AS dest_items WHERE origin_items.UUID = relationships.originid AND dest_items.UUID = relationships.destid; --Oracle query SELECT relationships.type, origin_items.name AS "Origin Name", dest_items.name AS "Dest Name" FROM sde.gdb_items origin_items, sde.gdb_itemrelationships relationships, sde.gdb_items dest_items WHERE origin_items.UUID = relationships.originid AND dest_items.UUID = relationships.destid;
На рисунке ниже показан пример набора результатов, который может быть выведен после предыдущего запроса:
Хотя здесь показаны отношения между элементами базы геоданных, требуется также тип отношений. Вы можете выполнить разрешение идентификатора UUID «Тип» посредством расширения предыдущего запроса с добавлением объединения с таблицей GDB_ItemRelationshipTypes:
--SQL Server and PostgreSQL query SELECT reltypes.name AS type, origin_items.name AS "Origin Name", dest_items.name AS "Dest Name" FROM gdb_items AS origin_items, gdb_itemrelationships AS relationships, gdb_items AS dest_items, gdb_itemrelationshiptypes AS reltypes WHERE origin_items.UUID = relationships.originid AND dest_items.UUID = relationships.destid AND relationships.type = reltypes.UUID; --Oracle query SELECT reltypes.name AS type, origin_items.name AS "Origin Name", dest_items.name AS "Dest Name" FROM sde.gdb_items origin_items, sde.gdb_itemrelationships relationships, sde.gdb_items dest_items, sde.gdb_itemrelationshiptypes reltypes WHERE origin_items.UUID = relationships.originid AND dest_items.UUID = relationships.destid AND relationships.type = reltypes.UUID;
При этом выводится следующее:
SQL exercises | Language Русский English | November 28, 23:07 MSK | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Practical skills of SQL languageThis site will help everyone to gain or improve skills in building
SQL Data Manipulation Language statements. To train You will have to build yourself
the SQL statements for retrieval or modification of specific data required in the exercises.
When Your query is incorrect, You will be able to see rows returned by the correct
query along with that returned by Your query. Furthermore, you may execute arbitrary
DML statements on available databases by setting the «Without checking» option. There are
five levels of difficulty (from 1 to 5), You may see it in second column of
exercises list. We propose the exercises on retrieving data ( SELECT statement) and
the exercises on modifying data (INSERT, UPDATE, DELETE, and MERGE statements). Your success in the solving the exercises are shown by a rating of participants.
As this takes place, there are three stages:
the first one (first 5 exercises) is performed without time control for an individual
exercise, the second one (begins with the exercise #6) controls time for completion of each
task. At the third stage which refers to optimizing and begins with exercise #139, it is required not only to solve an exercise correctly, but also time of execution of inquiry should be commensurable with time of execution of the author’s solution.
NOTE: The query stated incorrectly may return the «correct» data on a current state of database. For this reason You should not be surprised if the results of incorrect query are coincide with the results of right one with Your query is estimated as incorrect by the Verifying system. NOTE: Your browser should support Cookies and Javascript to provide correct usage of this site. If you use content filter, it should allow opening child windows to explore help pages. CertificationSuccessful testing of yours can be confirmed by the certificate «SQL Data Manipulation Language Specialist». We support quality of our certificate by periodically replacing exercises and changing the certificate requirements. More about certification. What does the certificate give to you? SQL syntax usedUser’s queries are executed by SQL server that brings some limitations to the
syntax of SQL statements. Now we use Top 10 results
|
1. Изучите SQL SELECT/FROM/WHERE
Если вы уже закончили загрузку QueryPie и подключение к базе данных, пришло время управлять данными и находить их. Давайте рассмотрим, что мы можем сделать с запросом SELECT, FROM и WHERE.
📌Содержание
Запрос 1. Использование SELECT для ВСЕХ столбцов
SELECT * FROM film;
Запрос 2. Использование SELECT для столбца SPECIFIC
SELECT film_id, title, rating, special_features FROM film;
Запрос 3. Использование WHERE
SELECT film_id, title, rating, special_features FROM film WHERE rating='R';
# SELECT, FROM, WHERE
Самые основные «Вопросы», которые мы можем задать в SQL, это SELECT , FROM и WHERE . Они имеют интуитивно понятное значение, поэтому довольно легко догадаться о функции, прочитав их. Давайте быстро пробежимся по ним.
📌 SELECT : вы говорите базе данных, что вам показать
📌 ИЗ : вы указываете базу данных место для поиска
📌 ГДЕ : вы сужаете/указываете местоположение
🔑 Начиная с этого момента, мы будем называть наши «Вопросы»
запросами .Итак, давайте рассмотрим наш первый запрос.
Q1. Какие данные содержатся в таблице «фильм»? Покажите мне!
SELECT(нужные столбцы) FROM(в конкретной таблице)
Это самый простой запрос. Мы можем начать диалог с любой базой данных
, просто используя это предложение.
В этом примере мы будем использовать данные из таблицы Film в Sample Database sakila .
Применив эту идею к запросу 1, мы можем прочитать его как «ВЫБЕРИТЕ «столбцы» ИЗ таблицы «фильм». Нам не нужно слово «таблица» после названия таблицы. SQL уже знает, что слово, следующее за запросом FROM
, будет именем таблицы. Так и пиши ИЗ плёнки
.
Если вы хотите увидеть сразу все доступные данные каждого столбца в указанной таблице, используйте символ звездочки ( *
). Символ *
здесь означает все данные всех столбцов. Допустим, мы хотим, чтобы отображал все столбцы, содержащие информацию внутри таблицы фильмов . В SQL это примерно переводится как « SELECT
(показать) *
(все столбцы, содержащие информацию) FROM
(внутри) фильм
(таблица). Удалите все скобки, и вы получите простой SQL-запрос:
SELECT * FROM film;
Обязательно используйте точку с запятой ( ;
) в конце предложения, чтобы сообщить SQL, что это конец вашего запроса и вы готовы увидеть результаты.
✦ Нажмите SQL Запустите в левом верхнем углу, чтобы попробовать ваш запрос
Вы должны увидеть что-то похожее на изображение, показанное ниже.
В результате тонна колонок загружена информацией о фильмах!
Но, допустим, мы хотим видеть только информацию о самом фильме без лишнего беспорядка в виде арендной ставки или продолжительности фильма.
Q2. Здесь слишком много столбцов!! Давайте посмотрим только на идентификатор, название, рейтинг и специальные функции в таблице фильмов.
SELECT(конкретный желаемый «столбец») FROM(в конкретной «таблице»)
Для этого мы сосредоточимся на столбцах идентификатор фильма , название , рейтинг и специальные функции . Просто введите точное имя нужного столбца после SELECT
, чтобы отфильтровать информацию. В этом случае вы можете использовать это:
ВЫБЕРИТЕ фильм_идентификатор, название, рейтинг, специальные_функции ИЗ фильма;
Q3. Хорошо, теперь давайте сузим его еще больше. Давайте посмотрим только на идентификатор фильма, название, рейтинг и особенности фильмов с рейтингом R.
SELECT(показать этот столбец) FROM(конкретная таблица) WHERE(соответствует условию)
Если условие числовое: WHERE film_id=5
Если рейтинг символьное: WHERE= ‘PG’ — ( Добавить одинарные кавычки!! )
Теперь, когда мы знаем, как находить конкретные данные, давайте еще немного сузим круг поиска. Допустим, нам нужна информация только о фильмах с определенным рейтингом (R, PG-13, PG и т. д.). Для этого нам нужно начать использовать SQL-запрос WHERE
.
Просто добавьте ГДЕ
в конец запроса после желаемого рейтинга. В этом примере мы будем искать фильмы с рейтингом R. Почему бы и нет?
Плагин ГДЕ рейтинг='R'
в конце заявления. Обратите внимание, что мы добавили одинарные кавычки вокруг буквы R ( ‘’
). Это связано с тем, что SQL нуждается в этой дополнительной скобке, когда условие не является числом. Есть способы обойти это, но для начинающих хорошо иметь прочную основу. Итак, давайте использовать эти одинарные кавычки! Ваш окончательный запрос должен выглядеть примерно так:
SELECT film_id, title, rating, special_features FROM film WHERE rating='R';
✦ Не забудьте нажать SQL Run в левом верхнем углу, чтобы выполнить запрос
# Время практики Попробуйте использовать SELECT
, FROM
и WHERE
в этом примерном сценарии:
📰 Покупатель в вашем киномагазине подходит к вам и просит список всех фильмов, срок проката которых составляет 3 дня. Она также интересуется ценой (арендной ставкой). Как можно посмотреть эту информацию? Не забудьте также найти идентификационный номер, чтобы вы могли легко найти фильмы на полках.
Вот ответ:
ВЫБЕРИТЕ фильм_идентификатор, название, ставка_проката, продолжительность_проката ИЗ фильма, ГДЕ прокат_длительность=3;
postgresql — Использование SELECT в предложении WHERE другого SELECT
Задавать вопрос
спросил
Изменено 6 лет, 3 месяца назад
Просмотрено 448 тысяч раз
Я сделал проект удаленного приложения поверх libpq для PostrgreSQL . Он ведет себя хорошо, но я профилировал общее функционирование приложения. Для каждого конечного бизнес-результата, который я получаю, бывает, что я вызываю что-то вроде предложения 40 select (через tcpip).
У меня есть воспоминания о SQL-Server, которые напоминают мне о необходимости свести к минимуму количество взаимодействий между моим удаленным приложением и базой данных. Проанализировав свои выборки, я думаю, что могу уменьшить это число до 3 SELECT
предложений с использованием соединений. Но я не помню синтаксиса для использования результата SELECT
в другом SELECT
.
Например:
ВЫБЕРИТЕ * ОТ индивидуального ВНУТРЕННЕЕ СОЕДИНЕНИЕ издатель ON индивидуал.индивидуал_ид = издатель.индивидуал_ид WHERE Individual.individual_id = 'Здесь я хотел бы использовать результаты другого выбора'
Этот другой SELECT
будет просто вида:
SELECT идентификатор FROM other_table WHERE something='something'
Вот упрощенная структура таблиц, отклоненная несколько раз для разных item_types . .. (3 совершенно разных типа, следовательно, 3 SQL-запроса, если они оптимизированы).
проход стола id_passage ПК байт business_field_passage предмет таблицы id_item ПК id_passage ФК текст business_field_item таблица item_detail id_item_detail ПК id_item ФК текст business_field_item_detail image_content байт
Есть несколько id_item
на один id_passage
.
Есть несколько id_item_detail
на один id_item
.
Как бы вы это написали?
Как называется описание действия по перенаправлению одного выбора в другой (если есть)?
- postgresql
- присоединиться
- выбрать
3
Это то, к чему вы стремитесь? Убедитесь, что сравниваемые поля сопоставимы (т. е. оба поля являются числовыми, текстовыми, логическими и т. д.).
ВЫБЕРИТЕ * ОТ Индивидуального ВНУТРЕННЕЕ СОЕДИНЕНИЕ Издатель ON Индивидуальный.