Sql select where: SQL AND, OR, NOT Operators

Запрос к системным таблицам базы геоданных с помощью 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, которые являются значениями ключей из других таблиц.

Каждое отношение содержит два значения UUID из таблицы GDB_Items выше: одно для элемента назначения отношений, а другое – для исходного элемента. Для их разрешения в читаемые строки необходимо присоединить таблицу GDB_ItemRelationships к таблице GDB_Items дважды:

--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

SQL exercises Language  Русский English November 28, 23:07 MSK

Ratings

Statistics

SQL exercises

Forums

Certification

HELP

Query optimization

Personal page
Developers & Thanks
For employers
References
Feedback
Support SQL-EX. RU


Документы

Today we have 1414 visitors (209 new).
90 exercises solved (36 on SELECT and 54 on DML),
on learning stage — 3458

Site news 2022-11-25
All the news    Week news
Certified within this week:

Luzin A.(kartohin)
Last certified.
Confirm certificate
Happy Birthday to:
Minyajlov V. S. (Volodya111)
Perevozchikov A.V. (angolmya)
!!!

The nearest birthdays.
Telegram channel SQL-Ex.

Top 100 on latest exercises.

Visual modelling (Painting database).



There are exercises on SELECT statement (presently 179 exercises on learn stage and 238 exercises on rating stages) and on other data manipulation operators — INSERT, UPDATE, DELETE, and MERGE (55 exercises). The rating of members is carried on SELECT exercises. See test conditions.
The book «SQL. Problems and solutions»
, which is analyzing the characteristic mistakes admitted at the solution of the learn-stage exercises on the site, was originally published in Peter Publishing Company.


Read last site news.

Practical skills of SQL language

This 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.
Exercises of the first stage are available without registration and may be solved in any order You like. The solution of the rest of exercises requires registration. REGISTRATION IS FREE as this for all other services of the site. In the third column of exercises list You will be able to see («OK») notes with the numbers of done exercises, but that is available only to the registered users. In fact, that is the main reason for registration. If You would like to visit our web site again, You won’t have to recollect which exercises You have done already and which You haven’t. If You don’t want to register, You may enter as a guest, but in that case Your results won’t be traced by the system. Registered users also may discuss the solutions to exercises in our forum.

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.

Certification

Successful 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 used

User’s queries are executed by SQL server that brings some limitations to the syntax of SQL statements. Now we use

Microsoft SQL Server 2019 (15.0) on the rating stages, and MariaDB-10.4 (compatible with MySQL 8), PostgreSQL 12.3, and Oracle Database 11g on the learn stage in addition. That is why You should follow the syntax of these realizations when building queries. It should be noted that SQL syntax, implemented in Microsoft SQL Server, is close to that of SQL-92 standard. But there are some distinctions, among them is absence of NATURAL JOIN of tables. Supplied help on SQL Data Manipulation Language is held in accordance with SQL-92 standard and contains information necessary for solving the exercises. In the same place it is possible to find features of used realization (SQL Server 2005).

Top 10 results

Person ScoresDaysDays_2Days_3Scores_3
Chernov D.V. (Kursist) 70820811602.4511710.888256
Filippkin D.V. (_dimon_) 7095040224.234156.502255
Doschenko V. N. (mcrain) 67138782042.874525.210252
Kostomarov A.V. (al29) 64932794333.7822473.867251
Kreslavskij O.M. (Arcan) 6975467284.494225.498248
Krasovskij E.A. (pegoopik) 6734519210.57714.367248
Bezhaev A.Yu. (Baser) 6454510203. 588178.822239
Boiko D. (Angellore) 65451385433.7553825.743237
Dubinskij A.V. (_velial) 65441292797.5203371.376227
Karasyova N.V. (vlksm) 6695809291.872242.855225

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 Индивидуальный.
Оставить комментарий

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *