Where in sql: IN (Transact-SQL) — SQL Server
Содержание
Оператор SQL IN: примеры, синтаксис
Оператор SQL IN позволяет определить, совпадает ли значение объекта со значением в списке.
Оператор SQL IN имеет следующий синтаксис:
expression [ NOT ] IN ( expression, [...] )
Примеры оператора SQL IN: Имеется следующая таблица Universities:
ID | UniversityName | Students | Faculties | Professores | Location | Site |
1 | Perm State National Research University | 12400 | 12 | 1229 | Perm | psu. ru |
2 | Saint Petersburg State University | 21300 | 24 | 13126 | Saint-Petersburg | spbu.ru |
3 | Novosibirsk State University | 7200 | 13 | 1527 | Novosibirsk | nsu.ru |
4 | Moscow State University | 35100 | 39 | 14358 | Moscow | msu.ru |
5 | Higher School of Economics | 20335 | 12 | 1615 | Moscow | hse.ru |
6 | Ural Federal University | 57000 | 19 | 5640 | Yekaterinburg | urfu.ru |
7 | National Research Nuclear University | 8600 | 10 | 936 | Moscow | mephi.ru |
Пример 1. Используя оператор SQL IN вывести записи университетов из Новосибирска и Перми:
SELECT * FROM Universities WHERE Location IN ('Novosibirsk', 'Perm')
Этот запрос аналогичен:
SELECT * FROM Universities WHERE Location = 'Novosibirsk' OR Location = 'Perm'
Но если значений много, то удобней перечислить их в операторе SQL IN
Результат:
ID | UniversityName | Students | Faculties | Professores | Location | Site |
1 | Perm State National Research University | 12400 | 12 | 1229 | Perm | psu. ru |
3 | Novosibirsk State University | 7200 | 13 | 1527 | Novosibirsk | nsu.ru |
MS SQL Server и T-SQL
Фильтрация. WHERE
Последнее обновление: 13.07.2017
Для фильтрации в команде SELECT применяется оператор WHERE. После этого оператора ставится условие, которому должна соответствовать строка:
WHERE условие
Если условие истинно, то строка попадает в результирующую выборку. В качестве можно использовать операции сравнения.
Эти операции сравнивают два выражения. В T-SQL можно применять следующие операции сравнения:
=: сравнение на равенство (в отличие от си-подобных языков в T-SQL для сравнения на равенство используется один знак равно)
<>: сравнение на неравенство
<: меньше чем
>: больше чем
!<: не меньше чем
!>: не больше чем
<=: меньше чем или равно
>=: больше чем или равно
Например, найдем всех товары, производителем которых является компания Samsung:
SELECT * FROM Products WHERE Manufacturer = 'Samsung'
Стоит отметить, что в данном случае регистр не имеет значение, и мы могли бы использовать для поиска и строку «Samsung», и «SAMSUNG», и «samsung».
Все эти варианты давали бы эквивалентный результат выборки.
Другой пример — найдем все товары, у которых цена больше 45000:
SELECT * FROM Products WHERE Price > 45000
В качестве условия могут использоваться и более сложные выражения. Например, найдем все товары, у которых совокупная стоимость больше 200 000:
SELECT * FROM Products WHERE Price * ProductCount > 200000
Логические операторы
Для объединения нескольких условий в одно могут использоваться логические операторы. В T-SQL имеются следующие логические операторы:
AND: операция логического И. Она объединяет два выражения:
выражение1 AND выражение2
Только если оба этих выражения одновременно истинны, то и общее условие оператора AND также будет истинно. То есть если и первое условие истинно, и второе.
OR: операция логического ИЛИ. Она также объединяет два выражения:
выражение1 OR выражение2
Если хотя бы одно из этих выражений истинно, то общее условие оператора OR также будет истинно. То есть если или первое условие истинно, или второе.
NOT: операция логического отрицания. Если выражение в этой операции ложно, то общее условие истинно.
NOT выражение
Если эти операторы встречаются в одном выражении, то сначала выполняется NOT, потом AND и в конце OR.
Например, выберем все товары, у которых производитель Samsung и одновременно цена больше 50000:
SELECT * FROM Products WHERE Manufacturer = 'Samsung' AND Price > 50000
Теперь изменим оператор на OR. То есть выберем все товары, у которых либо производитель Samsung, либо цена больше 50000:
SELECT * FROM Products WHERE Manufacturer = 'Samsung' OR Price > 50000
Применение оператора NOT — выберем все товары, у которых производитель не Samsung:
SELECT * FROM Products WHERE NOT Manufacturer = 'Samsung'
Но в большинстве случае вполне можно обойтись без оператора NOT. Так, в предыдущий пример мы можем переписать следующим образом:
SELECT * FROM Products WHERE Manufacturer <> 'Samsung'
Также в одной команде SELECT можно использовать сразу несколько операторов:
SELECT * FROM Products WHERE Manufacturer = 'Samsung' OR Price > 30000 AND ProductCount > 2
Так как оператор AND имеет более высокий приоритет, то сначала будет выполняться подвыражение
Price > 30000 AND ProductCount > 2
, и только потом оператор OR.
То есть здесь выбираются товары, которыех на складе больше 2 и у которых одновременно цена больше 30000, либо те товары,
производителем которых является Samsung.
С помощью скобок мы также можем переопределить порядок операций:
SELECT * FROM Products WHERE (Manufacturer = 'Samsung' OR Price > 30000) AND ProductCount > 2
IS NULL
Ряд столбцов может допускать значение NULL. Это значение не эквивалентно пустой строке ». NULL представляет полное отсутствие какого-либо значения.
И для проверки на наличие подобного значения применяется оператор IS NULL.
Например, выберем все товары, у которых не установлено поле ProductCount:
SELECT * FROM Products WHERE ProductCount IS NULL
Если, наоборот, необходимо получить строки, у которых поле ProductCount не равно NULL, то можно использовать оператор NOT:
SELECT * FROM Products WHERE ProductCount IS NOT NULL
SQL запросы быстро. Часть 1 / Хабр
Введение
Язык SQL очень прочно влился в жизнь бизнес-аналитиков и требования к кандидатам благодаря простоте, удобству и распространенности. Из собственного опыта могу сказать, что наиболее часто SQL используется для формирования выгрузок, витрин (с последующим построением отчетов на основе этих витрин) и администрирования баз данных. И поскольку повседневная работа аналитика неизбежно связана с выгрузками данных и витринами, навык написания SQL запросов может стать фактором, из-за которого кандидат или получит преимущество, или будет отсеян. Печальная новость в том, что не каждый может рассчитывать получить его на студенческой скамье. Хорошая новость в том, что в изучении SQL нет ничего сложного, это быстро, а синтаксис запросов прост и понятен. Особенно это касается тех, кому уже доводилось сталкиваться с более сложными языками.
Обучение SQL запросам я разделил на три части. Эта часть посвящена базовому синтаксису, который используется в 80-90% случаев. Следующие две части будут посвящены подзапросам, Join’ам и специальным операторам. Цель гайдов: быстро и на практике отработать синтаксис SQL, чтобы добавить его к арсеналу навыков.
Практика
Введение в синтаксис будет рассмотрено на примере открытой базы данных, предназначенной специально для практики SQL. Чтобы твое обучение прошло максимально эффективно, открой ссылку ниже в новой вкладке и сразу запускай приведенные примеры, это позволит тебе лучше закрепить материал и самостоятельно поработать с синтаксисом.
Кликнуть здесь
После перехода по ссылке можно будет увидеть сам редактор запросов и вывод данных в центральной части экрана, список таблиц базы данных находится в правой части.
Структура sql-запросов
Общая структура запроса выглядит следующим образом:
SELECT ('столбцы или * для выбора всех столбцов; обязательно')
FROM ('таблица; обязательно')
WHERE ('условие/фильтрация, например, city = 'Moscow'; необязательно')
GROUP BY ('столбец, по которому хотим сгруппировать данные; необязательно')
HAVING ('условие/фильтрация на уровне сгруппированных данных; необязательно')
ORDER BY ('столбец, по которому хотим отсортировать вывод; необязательно')
Разберем структуру. Для удобства текущий изучаемый элемент в запроса выделяется CAPS’ом.
SELECT, FROM
SELECT, FROM — обязательные элементы запроса, которые определяют выбранные столбцы, их порядок и источник данных.
Выбрать все (обозначается как *) из таблицы Customers:
SELECT * FROM Customers
Выбрать столбцы CustomerID, CustomerName из таблицы Customers:
SELECT CustomerID, CustomerName FROM Customers
WHERE
WHERE — необязательный элемент запроса, который используется, когда нужно отфильтровать данные по нужному условию. Очень часто внутри элемента where используются IN / NOT IN для фильтрации столбца по нескольким значениям, AND / OR для фильтрации таблицы по нескольким столбцам.
Фильтрация по одному условию и одному значению:
select * from Customers
WHERE City = 'London'
Фильтрация по одному условию и нескольким значениям с применением IN (включение) или NOT IN (исключение):
select * from Customers
where City IN ('London', 'Berlin')
select * from Customers
where City NOT IN ('Madrid', 'Berlin','Bern')
Фильтрация по нескольким условиям с применением AND (выполняются все условия) или OR (выполняется хотя бы одно условие) и нескольким значениям:
select * from Customers
where Country = 'Germany' AND City not in ('Berlin', 'Aachen') AND CustomerID > 15
select * from Customers
where City in ('London', 'Berlin') OR CustomerID > 4
GROUP BY
GROUP BY — необязательный элемент запроса, с помощью которого можно задать агрегацию по нужному столбцу (например, если нужно узнать какое количество клиентов живет в каждом из городов).
При использовании GROUP BY обязательно:
- перечень столбцов, по которым делается разрез, был одинаковым внутри SELECT и внутри GROUP BY,
- агрегатные функции (SUM, AVG, COUNT, MAX, MIN) должны быть также указаны внутри SELECT с указанием столбца, к которому такая функция применяется.
Группировка количества клиентов по городу:
select City, count(CustomerID) from Customers
GROUP BY City
Группировка количества клиентов по стране и городу:
select Country, City, count(CustomerID) from Customers
GROUP BY Country, City
Группировка продаж по ID товара с разными агрегатными функциями: количество заказов с данным товаром и количество проданных штук товара:
select ProductID, COUNT(OrderID), SUM(Quantity) from OrderDetails
GROUP BY ProductID
Группировка продаж с фильтрацией исходной таблицы. В данном случае на выходе будет таблица с количеством клиентов по городам Германии:
select City, count(CustomerID) from Customers
WHERE Country = 'Germany'
GROUP BY City
Переименование столбца с агрегацией с помощью оператора AS. По умолчанию название столбца с агрегацией равно примененной агрегатной функции, что далее может быть не очень удобно для восприятия.
select City, count(CustomerID) AS Number_of_clients from Customers
group by City
HAVING
HAVING — необязательный элемент запроса, который отвечает за фильтрацию на уровне сгруппированных данных (по сути, WHERE, но только на уровень выше).
Фильтрация агрегированной таблицы с количеством клиентов по городам, в данном случае оставляем в выгрузке только те города, в которых не менее 5 клиентов:
select City, count(CustomerID) from Customers
group by City
HAVING count(CustomerID) >= 5
В случае с переименованным столбцом внутри HAVING можно указать как и саму агрегирующую конструкцию count(CustomerID), так и новое название столбца number_of_clients:
select City, count(CustomerID) as number_of_clients from Customers
group by City
HAVING number_of_clients >= 5
Пример запроса, содержащего WHERE и HAVING. В данном запросе сначала фильтруется исходная таблица по пользователям, рассчитывается количество клиентов по городам и остаются только те города, где количество клиентов не менее 5:
select City, count(CustomerID) as number_of_clients from Customers
WHERE CustomerName not in ('Around the Horn','Drachenblut Delikatessend')
group by City
HAVING number_of_clients >= 5
ORDER BY
ORDER BY — необязательный элемент запроса, который отвечает за сортировку таблицы.
Простой пример сортировки по одному столбцу. В данном запросе осуществляется сортировка по городу, который указал клиент:
select * from Customers
ORDER BY City
Осуществлять сортировку можно и по нескольким столбцам, в этом случае сортировка происходит по порядку указанных столбцов:
select * from Customers
ORDER BY Country, City
По умолчанию сортировка происходит по возрастанию для чисел и в алфавитном порядке для текстовых значений. Если нужна обратная сортировка, то в конструкции ORDER BY после названия столбца надо добавить DESC:
select * from Customers
order by CustomerID DESC
Обратная сортировка по одному столбцу и сортировка по умолчанию по второму:
select * from Customers
order by Country DESC, City
JOIN
JOIN — необязательный элемент, используется для объединения таблиц по ключу, который присутствует в обеих таблицах. Перед ключом ставится оператор ON.
Запрос, в котором соединяем таблицы Order и Customer по ключу CustomerID, при этом перед названиям столбца ключа добавляется название таблицы через точку:
select * from Orders
JOIN Customers ON Orders.CustomerID = Customers.CustomerID
Нередко может возникать ситуация, когда надо промэппить одну таблицу значениями из другой. В зависимости от задачи, могут использоваться разные типы присоединений. INNER JOIN — пересечение, RIGHT/LEFT JOIN для мэппинга одной таблицы знаениями из другой,
select * from Orders
join Customers on Orders. CustomerID = Customers.CustomerID
where Customers.CustomerID >10
Внутри всего запроса JOIN встраивается после элемента from до элемента where, пример запроса:
Другие типы JOIN’ов можно увидеть на замечательной картинке ниже:
В следующей части подробнее поговорим о типах JOIN’ов и вложенных запросах.
При возникновении вопросов/пожеланий, всегда прошу обращаться!
Productivity Features for SSMS and Visual Studio in SQL Complete
Tabs coloring
Helps you easily define the server connection a tab is currently related to by the matching color.
With this functionality, you can simply assign a color to the environment for the servers related to development, production,
sandbox or test. Additionally, it is possible to add or delete Color Match by clicking the corresponding buttons on the Settings
section of the Options menu.
Documents sessions
The functionality monitors active open sessions, thus, allowing you to restore accidentally closed or unsaved tabs within the current IDE session.
Custom SSMS main window title
You can change or define your own naming pattern for the SSMS main window caption and SQL document tabs.
This way a proportional tab width is achieved so that you can control what is displayed in the tab name.
Restore last closed tab
Easily opens recently closed tabs within one SSMS session, including the unsaved ones.
Close unmodified tabs
The functionality closes the tabs that were not modified during your current MSSMS session.
Stores main information about executed SQL statements for a particular period.
You can view, edit, and search the queries you run in the database.
Additionally, you can monitor who executed a query and when, as well as other valuable information.
Run script on multiple databases
Select databases on the current server and execute a script against them from one query window.
You can also specify the mode, in which the script will be executed for the selected databases: parallel or sequential.
Document Outline window
It displays a current document structure and considerably simplifies navigation in large SQL documents.
You can synchronize the structure with text directly from the code.
Execute current statement
You can execute a specific SQL statement without selecting it. You just need to place the mouse pointer over the statement
and press Ctrl+Shift+E or Alt+Enter, and dbForge SQL Complete will define the statement boundaries itself.
Execute to cursor
A handy feature allowing you to execute a script to the current position of the cursor.
Go to definition for database objects
Navigate from Code Editor straight to a specific object in Object Explorer (Server Explorer in Visual Studio).
Decrypt encrypted objects
dbForge SQL Complete easily handles encrypted objects, it shows the DDL of an encrypted object in a separate SQL document.
Highlight occurrences of identifiers
If you click an identifier in your code, SQL Complete will highlight all other occurrences of this identifier within your statement with grey color. The feature helps quickly discover where the current identifier is used.
Highlight BEGIN and END
If you click a BEGIN or END delimiter in your code, SQL Complete will highlight the BEGIN/END syntax pair in your statement with grey color. The feature helps quickly find matching BEGIN and END statements in a query.
Highlight BEGIN TRY/END TRY
The matching BEGIN TRY/END TRY statements will be highlighted with grey color after you click one of them. The feature significantly facilitates coding by helping quickly find matching statements in long and complex queries.
Highlight BEGIN CATCH/END CATCH
Discover matching BEGIN CATCH/END CATCH pairs in complex queries. After clicking one of the statements, the syntax pair will be highlighted.
Highlight CASE and END
Highlighting matching CASE and END operators can significantly reduce your coding time as CASE expressions used in SQL syntax can be quite long and navigating through them is not an easy task.
Highlight COLUMNS and VALUES in INSERT statement
SQL Complete highlights the name of the columns and its corresponding value in the INSERT statements to help you insert valid values. The feature significantly facilitates writing queries to insert values into multiple columns.
Navigation between queries
When you work with large scripts, SQL Complete will help you quickly find the beginning of an SQL statement.
Just press a certain hotkey combination and the cursor will sequentially jump to the beginning of each statement in the SQL document.
Navigation between BEGIN and END
Find matching BEGIN/END pairs in complex queries. By pressing SHIFT+F12, your cursor will jump up or down to the matching keywords.
Navigation between BEGIN TRY/END TRY
When working with large scripts, it is important to be able to quickly navigate between paired keywords in an SQL statement.
With SQL Complete you can jump between BEGIN TRY and END TRY in a blink.
Navigation between BEGIN CATCH/END CATCH
Find matching BEGIN CATCH/END CATCH pairs in complex queries. By pressing Shift+F12, your cursor will jump up or down to the matching keywords.
Navigation between CASE и END
The CASE expressions used in statements can be quite long and navigating between their beginnings and ends can be a daunting task.
To solve this problem, jumping between CASE and END has been introduced.
Navigation between brackets
You can quickly jump between matching brackets within a statement by pressing Ctrl+]. This SSMS built-in feature helps save time and energy when writing long and complex queries.
Navigation between COLUMNS and VALUES in INSERT statement
In large INSERT statements, it’s often hard to determine which value corresponds to which column, and vice versa. This functionality will help you
quickly locate a corresponding value for the current column.
Generate CREATE/ALTER script for server objects
This option lets you generate a script for object’s modification after you drag the carriage to that object.
Generate CRUD
Quickly generate CRUD (CREATE, READ, UPDATE, DELETE) stored procedures for tables using customizable procedure
that can be changed to better suit your needs.
Inline EXEC
Unwraps the sp_executesql procedure into a neat and readable static SQL query.
Convert EXEC to script
This feature allows to simplify debugging by replacing the call to a stored procedure with the stored procedure body.
It takes the contents of the stored procedure and replaces the call in your query with them.
Convert Inline EXEC to Script
Unwraps the sp_executesql procedure into a neat and readable static SQL query.
Execution warnings
This feature analyzes potentially dangerous statements (DELETE, DROP, TRUNCATE, and UPDATE) and generates
a pop-up alert if a user is about to execute a statement that may cause data loss. For example, the execution
warning will be thrown up if you try to execute a DELETE statement with no WHERE clause.
Execution notifications
When a query is successfully executed, a pop-up dialog box notifies you about the time of execution.
If the query was running more than 23:59:59 hours, days are added to the time in the Execution Notification.
Transaction reminder
Whenever there open transactions during query execution,
a reminder will pop-up informing you about the number of uncommitted transactions.
Generate Script As from SSMS data grid
You can generate a script from the SSMS grid based on the data in the table for the following statements: INSERT, INSERT #tmpTable,
WHERE IN(), WHERE AND OR, UPDATE. You can select the result statement to be saved to a file, copied to a clipboard, or opened in a new window.
Copy data from SSMS grid to file or clipboard
The data from a cell or entire table can be copied from the results grid to a file or clipboard in any of the available formats (CSV, XML, HTML, JSON).
Grid aggregates
Aggregates are automatically displayed at the bottom of the SSMS Results Grid. Select a range of values in the Results Grid to calculate aggregates.
On the Aggregate Panel, you will see MAX, MIN, AVG, SUM, COUNT, DISTINCT ON for these values. To copy a value from the Aggregate Panel,
double-click it or select it with a cursor and press Ctrl+C. Alternatively, double-click the value you want to copy and select the Copy command from the context menu that appears.
Data visualizers
In the Results Grid, data in Hexadecimal, Text, XML, HTML, Rich Text, PDF, JSON, Image, Spatial formats may be visually represented via the Data Viewer window.
Data can also be conveniently saved as a file. For example, hex data shown in a grid can be saved as a JPEG image.
Find in Results Grid
Searches all the matching data in the grid by the specified value.
Extend the search by adding the following search details:
Match Case to set a case-sensitive search
Whole Words to look for the single words
Use Regular Expressions to set the search by Reg Exp
Close button to close the search bar
All the data found will be highlighted in the Results Grid.
SQL WHERE IN, SELECT WHERE IN Список или подзапрос — с примерами
Что возвращает SQL IN?
WHERE IN возвращает значения, соответствующие значениям в списке или подзапросе.
Предложение WHERE IN является сокращением для нескольких условий OR.
Синтаксис SQL WHERE IN
Общий синтаксис:
ВЫБЕРИТЕ имена столбцов ОТ имя-таблицы ГДЕ имя-столбца IN (значения)
ПОСТАВЩИК |
---|
Идентификатор |
Название компании |
Контактное имя |
Город |
Страна |
Телефон |
Факс |
SQL WHERE IN Примеры
Проблема : Список всех поставщиков из США, Великобритании или Японии
ВЫБЕРИТЕ Id, CompanyName, City, Country ОТ поставщика ГДЕ Страна В (США, Великобритания, Япония)
Результат: 8 записей.
Идентификатор | Название компании | Город | Страна |
---|---|---|---|
1 | Экзотические жидкости | Лондон | Великобритания |
2 | Новый Орлеан Cajun Delights | Новый Орлеан | США |
3 | Усадьба бабушки Келли | Анн-Арбор | США |
4 | Tokyo Traders | Токио | Япония |
6 | Маюми | Осака | Япония |
8 | Specialty Biscuits, Ltd. | Манчестер | Великобритания |
16 | Пивоваренный завод Bigfoot | Колено | США |
19 | Консервный завод морепродуктов Новой Англии | Бостон | США |
ПРОДУКТ |
---|
Идентификатор |
Наименование продукта |
Идентификатор поставщика |
Цена единицы |
Упаковка |
Снято с производства |
Проблема : Перечислите все продукты, которые не стоят точно 10, 20, 30, 40 или 50 долларов.
ВЫБЕРИТЕ Id, ProductName, UnitPrice ОТ ПРОДУКТА ГДЕ UnitPrice НЕ ВХОДИТ (10,20,30,40,50)
Результат: 72 записи.
Id | Название продукта | Цена за единицу |
---|---|---|
1 | Чай | 18,00 |
2 | Чанг | 19,00 |
4 | Приправа для каджуна от шеф-повара Антона | 22.00 |
5 | Chef Anton’s Gumbo Mix | 21,35 |
6 | Бабушкины спреды с ягодами | 25,00 |
ПОСТАВЩИК |
---|
Идентификатор |
Название компании |
Контактное имя |
Город |
Страна |
Телефон |
Факс |
КЛИЕНТ |
---|
Имя |
Фамилия |
Город |
Страна |
Телефон |
Проблема : Список всех клиентов из
те же страны, где находятся поставщики.
ВЫБЕРИТЕ Id, FirstName, LastName, Country ОТ Заказчика ГДЕ Страна В (Выберите страну ОТ поставщика)
Результат: 91 запись.
Id | Имя | Фамилия | Страна | |
---|---|---|---|---|
1 | Мария | Андерс | Германия | |
4 | Томас | Харди | Великобритания | |
5 | Кристина | Berglund | Швеция | |
6 | Ханна | Моос | Германия | |
7 | Frédérique | Сито | Франция | |
SQL Server WHERE
Резюме : в этом руководстве вы узнаете, как использовать предложение SQL Server WHERE
для фильтрации строк, возвращаемых запросом.
Введение в SQL Server
WHERE
clause
Когда вы используете инструкцию SELECT
для запроса данных по таблице, вы получаете все строки этой таблицы, что не является необходимым, поскольку приложение может обрабатывать только набор строк в время.
Чтобы получить строки из таблицы, удовлетворяющие одному или нескольким условиям, используйте предложение WHERE
следующим образом:
Язык кода: SQL (язык структурированных запросов) (sql)
SELECT select_list ИЗ table_name ГДЕ search_condition;
В предложении WHERE
вы указываете условие поиска для фильтрации строк, возвращаемых предложением FROM
.Предложение WHERE
возвращает только те строки, которые приводят к тому, что условие поиска оценивается как TRUE
.
Условие поиска — это логическое выражение или комбинация нескольких логических выражений. В SQL логическое выражение часто называют предикатом .
Обратите внимание, что SQL Server использует логику трехзначного предиката, где логическое выражение может оцениваться как ИСТИНА
, ЛОЖЬ
или НЕИЗВЕСТНО
. Предложение WHERE
не вернет ни одной строки, из-за которой предикат оценивается как FALSE
или UNKNOWN
.
SQL Server
WHERE
examples
Мы будем использовать таблицу production.products
из образца базы данных для демонстрации
A) Поиск строк с помощью простого равенства
Следующая инструкция извлекает все продукты с идентификатором категории 1:
Язык кода: SQL (язык структурированных запросов) (sql)
ВЫБРАТЬ идантификационный номер продукта, наименование товара, category_id, год выпуска, список цен ИЗ production.products ГДЕ category_id = 1 СОРТИРОВАТЬ ПО list_price DESC;
B) Поиск строк, отвечающих двум условиям
В следующем примере возвращаются продукты, соответствующие двум условиям: идентификатор категории — 1 и модель — 2018.Он использует логический оператор И
для объединения двух условий.
Язык кода: SQL (язык структурированных запросов) (sql)
ВЫБРАТЬ идантификационный номер продукта, наименование товара, category_id, год выпуска, список цен ИЗ production.products ГДЕ category_id = 1 AND model_year = 2018 СОРТИРОВАТЬ ПО list_price DESC;
C) Поиск строк с помощью оператора сравнения
Следующий оператор находит продукты, прейскурантная цена которых превышает 300, а модель — 2018.
Язык кода: SQL (язык структурированных запросов) (sql)
ВЫБРАТЬ идантификационный номер продукта, наименование товара, category_id, год выпуска, список цен ИЗ production.products ГДЕ list_price> 300 И model_year = 2018 СОРТИРОВАТЬ ПО list_price DESC;
D) Поиск строк, удовлетворяющих любому из двух условий
Следующий запрос находит продукты, цена которых превышает 3000 или модель 2018 г. удовлетворяет одному из этих условий, включается в набор результатов.
Язык кода: SQL (язык структурированных запросов) (sql)
ВЫБРАТЬ идантификационный номер продукта, наименование товара, category_id, год выпуска, список цен ИЗ production.products ГДЕ list_price> 3000 ИЛИ model_year = 2018 СОРТИРОВАТЬ ПО list_price DESC;
Обратите внимание, что для объединения предикатов использовался оператор OR
.
E) Поиск строк со значением между двумя значениями
Следующий оператор находит продукты, прейскурантные цены которых находятся в диапазоне от 1899 до 1999.99:
Язык кода: SQL (язык структурированных запросов) (sql)
ВЫБРАТЬ идантификационный номер продукта, наименование товара, category_id, год выпуска, список цен ИЗ production.products ГДЕ list_price МЕЖДУ 1899.00 И 1999.99 СОРТИРОВАТЬ ПО list_price DESC;
F) Поиск строк, имеющих значение в списке значений
В следующем примере оператор IN
используется для поиска продуктов, цена по прейскуранту которых 299.99 или 466,99 или 489,99.
Язык кода: SQL (язык структурированных запросов) (sql)
ВЫБРАТЬ идантификационный номер продукта, наименование товара, category_id, год выпуска, список цен ИЗ production.products ГДЕ list_price IN (299,99, 369,99, 489,99) СОРТИРОВАТЬ ПО list_price DESC;
G) Поиск строк, значения которых содержат строку
В следующем примере оператор LIKE
используется для поиска продуктов, имя которых содержит строку Cruiser
:
Язык кода: SQL (язык структурированных запросов) (sql)
ВЫБРАТЬ идантификационный номер продукта, наименование товара, category_id, год выпуска, список цен ИЗ производство.продукты ГДЕ product_name LIKE '% Cruiser%' СОРТИРОВАТЬ ПО список цен;
В этом руководстве вы узнали, как использовать предложение SQL Server WHERE
для фильтрации строк на основе одного или нескольких условий.
SQL-соединений с использованием WHERE или ON | Средний уровень SQL
Начиная с этого места? Этот урок является частью полного руководства по использованию SQL для анализа данных. Проверьте начало.
В этом уроке мы рассмотрим:
Фильтрация в предложении ON
Обычно фильтрация обрабатывается в предложении WHERE
после того, как две таблицы уже были объединены. Однако возможно, что вы захотите отфильтровать одну или обе таблицы перед тем, как присоединится к ним. Например, вы хотите создавать совпадения между таблицами только при определенных обстоятельствах.
Используя данные Crunchbase, давайте еще раз посмотрим на пример LEFT JOIN
из предыдущего урока (на этот раз мы добавим предложение ORDER BY
):
ВЫБРАТЬ компании.постоянная ссылка AS companies_permalink,
company.name AS имя_компании,
acquisitions.company_permalink AS acquisitions_permalink,
acquisitions.acquired_at AS Дата_ приобретения
ОТ tutorial.crunchbase_companies компании
LEFT JOIN tutorial.crunchbase_acquisitions acquisitions
ON companies.permalink = acquisitions.company_permalink
ЗАКАЗАТЬ ПО 1
Сравните следующий запрос с предыдущим, и вы увидите, что все в таблице tutorial.crunchbase_acquisitions
было объединено с , за исключением для строки, для которой company_permalink
составляет '/ company / 1000memories'
:
ВЫБРАТЬ компании.постоянная ссылка AS companies_permalink,
company.name AS имя_компании,
acquisitions.company_permalink AS acquisitions_permalink,
acquisitions.acquired_at AS Дата_ приобретения
ОТ tutorial.crunchbase_companies компании
LEFT JOIN tutorial.crunchbase_acquisitions acquisitions
ON companies.permalink = acquisitions.company_permalink
И acquisitions.company_permalink! = '/ Company / 1000memories'
ЗАКАЗАТЬ ПО 1
Что происходит выше, так это то, что условный оператор AND...
оценивается до того, как произойдет соединение. Вы можете думать об этом как о предложении WHERE
, которое применяется только к одной из таблиц. Вы можете сказать, что это происходит только в одной из таблиц, потому что постоянная ссылка 1000memories все еще отображается в столбце, извлеченном из другой таблицы:
Фильтрация в предложении WHERE
Если вы переместите тот же фильтр в предложение WHERE
, вы заметите, что фильтр применяется после объединения таблиц. В результате строка 1000memories присоединяется к исходной таблице, но затем она полностью отфильтровывается (в обеих таблицах) в предложении WHERE
перед отображением результатов.
ВЫБЕРИТЕ companies.permalink AS companies_permalink,
company.name AS имя_компании,
acquisitions.company_permalink AS acquisitions_permalink,
acquisitions.acquired_at AS Дата_ приобретения
ОТ tutorial.crunchbase_companies компании
LEFT JOIN tutorial.crunchbase_acquisitions acquisitions
ON companies.permalink = acquisitions.company_permalink
ГДЕ acquisitions.company_permalink! = '/ Company / 1000memories'
ИЛИ acquisitions.company_permalink ЕСТЬ NULL
ЗАКАЗАТЬ ПО 1
Вы можете видеть, что строка 1000memories не возвращается (она была бы между двумя выделенными строками ниже).Также обратите внимание, что фильтрация в предложении WHERE
также может фильтровать нулевые значения, поэтому мы добавили дополнительную строку, чтобы обязательно включить нули.
Отточите свои навыки работы с SQL
Для этого набора практических задач мы собираемся представить новый набор данных: tutorial.crunchbase_investments
. Эта таблица также получена из Crunchbase и содержит большую часть той же информации, что и данные tutorial.crunchbase_companies
. Однако он имеет другую структуру: он содержит одну строку на инвестиций .В каждой компании может быть несколько инвестиций — даже возможно, что один инвестор может инвестировать в одну и ту же компанию несколько раз. Имена столбцов говорят сами за себя. Важно то, что company_permalink
в таблице tutorial.crunchbase_investments
соответствует постоянным ссылкам
в таблице tutorial.crunchbase_companies
. Имейте в виду, что некоторые случайные данные были удалены из этой таблицы для этого урока.
Очень вероятно, что вам нужно будет провести некоторый исследовательский анализ этой таблицы, чтобы понять, как вы можете решить следующие проблемы.
Практическая задача
Напишите запрос, который показывает название компании, «статус» (находится в таблице «Компании») и количество уникальных инвесторов в этой компании. Порядок по количеству инвесторов от наибольшего к наименьшему. Ограничение только для компаний в штате Нью-Йорк.
Попробуй это
Посмотреть ответ
Практическая задача
Напишите запрос, в котором будут перечислены инвесторы по количеству компаний, в которые они вложили средства.Включите строку для компаний без инвестора и закажите от большинства компаний до наименьшего.
Попробуй это
Посмотреть ответ
Разница между WHERE и ON в SQL для данных JOIN
Последнее изменение: 3 мая 2021 г.
Есть ли разница между предложением WHERE и ON?
Да. ON следует использовать для определения условия соединения, а WHERE следует использовать для фильтрации данных. Я использовал слово «должен», потому что это не жесткое правило.Разделение этих целей с соответствующими предложениями делает запрос наиболее читаемым, а также предотвращает получение неверных данных при использовании типов JOIN, отличных от INNER JOIN.
Чтобы углубиться в подробности, мы рассмотрим два варианта использования, которые могут поддерживаться WHERE или ON:
- Объединение данных
- Фильтрация данных
Объединение данных
Оба этих предложения могут использоваться для объединения данных путем определения условия, при котором две таблицы объединяются.Чтобы продемонстрировать это, давайте воспользуемся примером набора данных о друзьях в facebook и LinkedIn.
Мы хотим видеть людей, которые являются и нашими друзьями, и нашей связью. Так что в данном случае это будет только Мэтт. Теперь давайте сделаем запрос, используя различные определения условия JOIN.
Все три запроса дают одинаковый правильный результат:
ВЫБРАТЬ *
С Фейсбука
ПРИСОЕДИНЯЙТЕСЬ linkedin
НА facebook.name = linkedin.name
ВЫБРАТЬ *
С Фейсбука
ПРИСОЕДИНЯЙТЕСЬ linkedin
ГДЕ facebook.name = linkedin.name
ВЫБРАТЬ *
ИЗ facebook, linkedin
ГДЕ facebook.name = linkedin.name
Первые два — это типы явного соединения, а последний — неявное соединение. Явное JOIN явно сообщает вам, как присоединиться к данным, указав тип JOIN и условие соединения в предложении ON. Неявное JOIN не указывает тип JOIN и не использует предложение WHERE для определения условия соединения.
Читаемость
Основное различие между этими запросами состоит в том, насколько легко понять, что происходит.В первом запросе мы можем легко увидеть, как таблицы соединяются в предложениях FROM и JOIN. Мы также можем ясно видеть условие соединения в предложении ON. Во втором запросе это кажется столь же ясным, однако мы можем дважды взглянуть на предложение WHERE, поскольку оно обычно используется для фильтрации данных, а не для присоединения к ним. В последнем запросе мы должны внимательно посмотреть, как установить, к какой таблице присоединяются, и как они присоединяются.
Последний запрос использует так называемое неявное СОЕДИНЕНИЕ (СОЕДИНЕНИЕ, которое явно не указано в запросе.В большинстве случаев неявные СОЕДИНЕНИЯ будут действовать как ВНУТРЕННИЕ СОЕДИНЕНИЯ. Если вы хотите использовать JOIN, отличное от INNER JOIN, заявив, что это явно проясняет, что происходит.
ПРИСОЕДИНЕНИЕ к предложению WHERE может вызвать путаницу, поскольку это не типичная цель. Чаще всего используется для фильтрации данных. Поэтому, когда к предложению WHERE добавляются дополнительные условия фильтрации, помимо его использования для определения того, как ПРИСОЕДИНЯТЬСЯ к данным, становится труднее понять.
ВЫБРАТЬ *
ИЗ facebook, linkedin
ГДЕ facebook.name = linkedin.name И (facebook.name = Matt OR linkedin.city = "SF")
ВЫБРАТЬ *
С Фейсбука
ПРИСОЕДИНЯЙТЕСЬ linkedin
НА facebook.name = linkedin.name
ГДЕ facebook.name = Мэтт ИЛИ linkedin.city = "SF"
Хотя в первом запросе меньше символов, чем во втором, его не так легко понять.
Оптимизация
Иногда написание запроса другим способом может улучшить скорость. Однако в этом случае не должно быть преимуществ в скорости из-за того, что называется планом запроса.План запроса — это код, который SQL предлагает для выполнения запроса. Он принимает запрос, а затем создает оптимизированный способ поиска данных. Использование WHERE или ON для JOIN данных должно привести к тому же плану запроса.
Однако способ создания планов запросов может различаться в зависимости от языка и версии SQL, опять же, в этом случае все должно быть одинаковым, но вы можете протестировать его в своей базе данных, чтобы увидеть, повысится ли производительность. Будьте осторожны, чтобы кеширование не повлияло на результаты ваших запросов.
Фильтрация данных
И предложение ON, и предложение WHERE можно использовать для фильтрации данных в запросе. Есть проблемы с удобочитаемостью и точностью, которые нужно решить с помощью фильтрации в предложении ON. Давайте воспользуемся немного большим набором данных, чтобы продемонстрировать это.
На этот раз мы ищем, какие люди являются нашими друзьями и связями, но мы хотим видеть только тех, кто также живет в Сан-Франциско.
Читаемость
Давайте оценим, насколько удобочитаема каждая опция, эти два запроса дадут одинаковый результат:
ВЫБРАТЬ *
ПРИСОЕДИНЯЙТЕСЬ linkedin
На Фейсбуке.name = linkedin.name
ГДЕ facebook.city = 'SF'
ВЫБРАТЬ *
С Фейсбука
ПРИСОЕДИНЯЙТЕСЬ linkedin
НА facebook.name = linkedin.name И facebook.city = 'SF'
Первый запрос понятен, каждое предложение имеет свое назначение. Второй запрос труднее понять, потому что предложение ON используется как для СОЕДИНЕНИЯ данных, так и для их фильтрации.
Точность
Фильтрация в предложении ON может привести к неожиданным результатам при использовании LEFT, RIGHT или OUTER JOIN.Эти два запроса не дадут одинаковый результат:
ВЫБРАТЬ *
С Фейсбука
LEFT JOIN linkedin
НА facebook.name = linkedin.name
ГДЕ facebook.city = 'SF'
В LEFT JOIN он вводит каждую строку из первой таблицы «facebook» и присоединяется везде, где истинно условие соединения (facebook.name = linkedin.name), это будет верно как для Мэтта, так и для Дэйва. Так и была бы промежуточная таблица.
Затем предложение WHERE фильтрует эти результаты в строки, где facebook.city = ‘SF’, оставив одну строку.
ВЫБРАТЬ *
С Фейсбука
LEFT JOIN linkedin
НА facebook.name = linkedin.name И facebook.city = 'SF'
В этом запросе другое условие соединения. LEFT JOIN вводит каждую строку, а данные, которые присоединяются из linkedin, происходят только тогда, когда facebook.name = linkedin.name AND facebook.city = ‘SF’. Он не отфильтровывает все строки, в которых не было facebook.city = ‘SF’
.
Оптимизация
Здесь есть потенциальные вариации в том, как строится план запроса, поэтому может быть полезно попробовать фильтрацию в ON.Некоторые языки SQL могут фильтровать при присоединении, а другие могут ждать, пока будет построена полная таблица, перед фильтрацией. Первый план будет быстрее.
Сводка
Держите контекст отдельно между , соединяющим таблицы и фильтрующим объединенной таблицей. Он наиболее читаемый, с наименьшей вероятностью может быть неточным и не должен быть менее производительным.
- JOIN данные в ON
- Данные фильтра в ГДЕ
- Напишите явные JOIN, чтобы сделать ваш запрос более читаемым
- Отфильтруйте данные в предложении WHERE вместо JOIN, чтобы убедиться, что они правильные и читаемые
- Различные языки SQL могут иметь разные планы запросов на основе фильтрации в предложении ON и в предложении WHERE, поэтому проверьте производительность в своей базе данных.
Написано:
Мэтт Дэвид
Проверено:
Как фильтровать результаты запроса с помощью WHERE
В сегодняшнем уроке вы узнаете, как фильтровать результаты запроса с помощью предложения WHERE.Это предложение важно, поскольку в результатах запроса возвращаются только те записи, которые соответствуют условиям предложения where. Цели сегодняшнего урока:
- Узнайте о различных типах условий, таких как равенство, диапазон и членство
- Полный пример с Select, Where и Order By
- Успешно выполнить упражнения
Важно! Проследите и сделайте примеры в своей базе данных. Если вы еще этого не сделали, подпишитесь на мое Руководство по началу работы с SQL Server.Вы получите инструкции о том, как установить бесплатные инструменты и образец базы данных.
Пункт WHERE
Предложение where — это условие, которое должно быть выполнено для того, чтобы строка была возвращена в запросе. Простым примером оператора Select с предложением where является Select CustomerName from Customers, где State = ’MI’. В этом примере выбираются только клиенты в штате Мичиган.
Для того, чтобы строка была возвращена, выражение State = ’MI’ должно быть истинным, то есть State должно быть равно ‘MI’. Обычно строка включается в результат, если условие условия where истинно.Условие предложения where может состоять из одного или нескольких тестов.
Благодаря использованию логической логики (более подробно обсуждается в Уроке 4) вы можете комбинировать эти тесты для формирования сложных сравнений между одним или несколькими столбцами или выражениями. В этом уроке мы рассмотрим три типа условий: равенство, диапазон и членство.
Условия равенства
Условие равенства проверяет соответствие столбца или выражения значению. Как и следовало ожидать, знак равенства используется для формирования равенства.В следующем операторе SQL мы возвращаем всех лиц, чье имя — г-н
.
ВЫБРАТЬ Имя, Фамилия ОТ Person.Person ГДЕ Заголовок = 'Мистер'
Другие примеры условий равенства включают:
- Количество = 30
- UnitPrice = 0,25
- Город = «Эль-Пасо»
Вы могли заметить, что числа записываются как есть, однако текст заключен в одинарные кавычки. Вы также можете включать выражения в условие равенства.Например, если ваши данные были несовместимыми, а состояния в базе данных находятся в различных комбинациях заглавных букв, таких как «mi», «MI» и «mI», которые являются разными значениями с точки зрения равенства, вы можете сравнить версию в верхнем регистре чтобы быть в безопасности. Для этого ваше состояние будет
Верхний (состояние) = 'MI'
Таким образом, независимо от того, какой шрифт у вас заглавные, он всегда будет оценивать все заглавные буквы, а затем безопасно сравнивать с правильным сокращением штата.
Неравенства
Иногда нужно исключить значение. Для этого можно использовать неравенство. Оператор для этого: <> . Примеры неравенств:
- Государство <> «MI»
- Кол-во <> 0
Если бы вы вернули всех лиц, чье звание не было «г-н. ‘, То ваш запрос будет
ВЫБРАТЬ Имя, Фамилия ОТ Person.Person ГДЕ Заголовок <> 'Мистер'
Совет! Я помню, что <> означает «не равно», потому что < и > противостоят друг другу.
Условия диапазона
Иногда вам нужно знать, когда значение попадает в диапазон, например количества больше 10. Наиболее интересными для нас условиями диапазона являются больше чем, меньше чем и между ними. Операторы, выполняющие различные испытания:
- > (больше)
- > = (больше или равно)
- <(менее)
- <= (меньше или равно)
- МЕЖДУ
Рассмотрим наши закупки.Таблица PurchaseOrderDetail. Если вы хотите знать заказы, в которых количество заказов превышает 10, протестируйте с помощью
.
Кол-во для заказа> 10
Чтобы включить заказанные количества из 10 тестов, используя
Кол-во заказа> = 10
Работает как с текстом, так и с числами. Состояние
Фамилия <'Никсон'
возвращает всех лиц, чья фамилия предшествует Никсону. Чтобы включить Никсона, вы должны написать
Фамилия <= 'Никсон'
Таким образом, чтобы найти всех людей с фамилией меньше или равной Никсон, вы должны написать
ВЫБРАТЬ Имя, Фамилия ОТ человека.Человек ГДЕ Фамилия <= 'Nixon'
Вы также можете использовать выражения. Чтобы найти все OrderDetails с TotalPrice более 100 долларов, ваш запрос будет иметь вид
.
ВЫБЕРИТЕ PurchaseOrderID, PurchaseOrderDetailID, Идантификационный номер продукта, Цена за единицу, OrderQty, UnitPrice * OrderQty КАК TotalPrice ОТ Purchasing.PurchaseOrderDetail ГДЕ UnitPrice * OrderQty> = 100
А что, если вы хотите, чтобы TotalPrices попадала в пределы 100 и 200 долларов? Как вы можете сделать это разовое? Что ж, на самом деле есть несколько способов, но мы сейчас поговорим об операторе Between .Оператор между используется в условии как
.
Цена за штуку * Кол-во в заказе МЕЖДУ 100 и 200
Как вы, наверное, подозреваете, вы также можете использовать его для теста. Если вы ищете все состояния между a и c, вы должны
Состояния МЕЖДУ 'A' и 'CZ' В приведенном выше примере я использовал «CZ», поскольку все аббревиатуры штатов состоят из двух символов, и я знаю, что все сокращения штатов, например, Коннектикут (CT), стоят перед CZ.
Возвращаясь к нашему примеру TotalPrice, полное выражение для этих запросов -
.
ВЫБЕРИТЕ PurchaseOrderID, PurchaseOrderDetailID, Идантификационный номер продукта, Цена за единицу, OrderQty, UnitPrice * OrderQty КАК TotalPrice ОТ Закупки.PurchaseOrderDetail ГДЕ UnitPrice * OrderQty МЕЖДУ 100 И 200
Обратите внимание, что оператор BETWEEN является включающим, то есть он включает как начальное, так и конечное значение.
! Общая информация : В некоторых версиях SQL вы можете использовать псевдоним столбца, например TotalPrice, в предложении WHERE. К сожалению, это не относится к SQL Server.
Условия участия
Последний тип условия, о котором нужно узнать в этом уроке, - это тип членства.Условие типа членства позволяет вам компактно провести несколько тестов на соответствие в одном операторе. Например, подумайте, есть ли у вас несколько JobTitles, которые вы хотите включить в результат запроса. В этом случае вы можете использовать оператор in, чтобы найти все совпадения
JobTitle IN («Бухгалтер», «Покупатель», «Стокер»)
Вышеупомянутое будет совпадать или возвращаться, если заголовок JobTitle - «Бухгалтер», «Покупатель» или «Стокер». Чтобы использовать оператор сравнения IN, разделите элементы, которые вы хотите проверить, запятыми и обязательно заключите их в круглые скобки.Полный оператор SQL для нашего примера -
.
ВЫБЕРИТЕ NationalIDNumber, OrganizationNode, Название работы ОТ HumanResources.Сотрудник ГДЕ JobTitle IN («Бухгалтер», «Покупатель», «Стокер»)
Комплексный пример
Теперь давайте объединим все это вместе с примером для фильтрации и сортировки запроса. Общая структура оператора select -
.
ВЫБРАТЬ столбцы Из таблицы ГДЕ WhereClause ЗАКАЗАТЬ Столбцы
В предыдущем разделе запрос для выбора контактов, которые были владельцами:
ВЫБЕРИТЕ NationalIDNumber, OrganizationNode, Название работы ОТ HumanResources.Работник ГДЕ JobTitle IN («Бухгалтер», «Покупатель», «Стокер»)
Для сортировки по JobTitle просто добавьте предложение ORDER BY как
ВЫБЕРИТЕ NationalIDNumber, OrganizationNode, Название работы ОТ HumanResources.Сотрудник ГДЕ JobTitle IN ("бухгалтер", "покупатель", "стокер") ЗАКАЗАТЬ JobTitle
Упражнения
Важно практиковаться! Используйте образец базы данных, чтобы ответить на эти вопросы.
- Выберите PurchaseOrderDetailID, срок оплаты и количество заказа для всех элементов детализации заказа на закупку, количество заказа которых меньше 100
- Выберите PurchaseOrderDetailID, срок оплаты и количество заказа для всех элементов детализации заказа на закупку, количество заказа которых находится в диапазоне от 1 до 10
- Найти всех людей по имени «Кен»
- Найти все идентификаторы продуктов в PurchaseOrders 421, 424, 142
Ответы здесь!
Поздравляем! Вы только что узнали, как фильтровать результаты запроса с помощью предложения where.Следуют другие руководства! Помнить! Я хочу напомнить вам, что если у вас есть другие вопросы, на которые вы хотите ответить, оставьте комментарий или напишите мне в Твиттере. Я здесь, чтобы помочь тебе. О каких еще темах вы хотели бы узнать больше?
Основное руководство по фильтрации данных
Резюме : в этом руководстве вы узнаете, как использовать предложение Oracle WHERE
, чтобы указать условие для фильтрации строк, возвращаемых запросом.
Введение в Oracle
Предложение WHERE
Предложение WHERE
определяет условие поиска для строк, возвращаемых оператором SELECT
.Ниже показан синтаксис предложения WHERE
:
Язык кода: SQL (язык структурированных запросов) (sql)
SELECT select_list ИЗ table_name ГДЕ search_condition СОРТИРОВАТЬ ПО sort_expression;
Предложение WHERE
появляется после предложения FROM
, но перед предложением ORDER BY
. После ключевого слова WHERE
следует search_condition
, которое определяет условие, которому должны удовлетворять возвращаемые строки.
Помимо оператора SELECT
, вы можете использовать предложение WHERE
в операторе DELETE
или UPDATE
, чтобы указать, какие строки следует обновить или удалить.
Oracle
WHERE
examples
См. Следующую таблицу products
в образце базы данных:
A) Выбор строк с помощью простого оператора равенства
В следующем примере возвращаются только продукты с именами 'Kingston'
:
Язык кода: SQL (язык структурированных запросов) (sql)
ВЫБРАТЬ наименование товара, описание, список цен, category_id ИЗ продукты ГДЕ product_name = 'Кингстон';
Результат показан на следующем рисунке:
В этом примере Oracle оценивает предложения в следующем порядке: FROM
WHERE
and SELECT
- Во-первых, в предложении
FROM
указана таблица для запроса данных. - Во-вторых, предложение
WHERE
отфильтровало строки на основе условия, например,product_name = 'Kingston'
). - В-третьих, предложение
SELECT
выбирает столбцы, которые должны быть возвращены.
B) Выбор строк с помощью оператора сравнения
Помимо оператора равенства Oracle предоставляет вам множество других операторов сравнения, показанных в следующей таблице:
Оператор | Описание |
---|---|
= | Равенство |
! =, <> | Неравенство |
> | Больше |
< | Меньше |
> = | Больше или равно |
<= | Меньше или равно |
IN | Равно любому значению в списке значений |
ЛЮБОЙ / НЕКОТОРЫЙ / ВСЕ | Сравните значение со списком или подзапросом.Ему должен предшествовать другой оператор, например =,>, <. |
НЕ ВХОДИТЕ | Не равно какому-либо значению в списке значений |
[НЕ] МЕЖДУ n и м | Эквивалентно [Not]> = n и <= y . |
[НЕ] СУЩЕСТВУЕТ | Вернуть истину, если подзапрос возвращает хотя бы одну строку |
IS [НЕ] NULL | NULL test |
Например, чтобы получить продукты, прейскурантные цены которых превышают 500 , вы используете следующий оператор:
Язык кода: SQL (язык структурированных запросов) (sql)
SELECT наименование товара, список цен ИЗ продукты ГДЕ list_price> 500;
C) Выберите строки, которые соответствуют некоторым условиям
Для объединения условий вы можете использовать логические операторы AND
, OR
и NOT
.
Например, чтобы получить все материнские платы, которые принадлежат к категории с идентификатором 1 и имеют прейскурантные цены выше 500, вы используете следующий оператор:
Язык кода: SQL (язык структурированных запросов) (sql)
SELECT наименование товара, список цен ИЗ продукты ГДЕ list_price> 500 И category_id = 4;
Набор результатов включает только материнские платы, прейскурантные цены которых превышают 500.
D) Выбор строк со значением между двумя значениями
Чтобы найти строки которые имеют значение между двумя значениями, вы используете оператор BETWEEN
в предложении WHERE
.
Например, чтобы получить продукты, прейскурантные цены которых составляют от 650 до 680, вы используете следующую инструкцию:
Язык кода: SQL (язык структурированных запросов) (sql)
SELECT наименование товара, список цен ИЗ продукты ГДЕ list_price МЕЖДУ 650 И 680 СОРТИРОВАТЬ ПО список цен;
На следующем рисунке показан набор результатов:
Обратите внимание, что следующие выражения эквивалентны:
list_price МЕЖДУ 650 И 680 list_price> = 650 AND list_price <= 680
E) Выбор строк, которые находятся в списке значений
Для запроса строк, которые находятся в списке значений, вы используете оператор IN
следующим образом:
Язык кода: SQL (язык структурированных запросов) (sql)
ВЫБРАТЬ наименование товара, category_id ИЗ продукты ГДЕ category_id IN (1, 4) СОРТИРОВАТЬ ПО наименование товара;
Результат показан ниже:
Выражение:
Язык кода: SQL (структурированный запрос Language) (sql)
category_id IN (1, 4)
совпадает с:
Язык кода: SQL (язык структурированных запросов) (sql)
category_id = 1 OR category_id = 4
F) Выбор строк, содержащих значение как часть строки
Следующий оператор извлекает продукт, имя которого начинается с Asus
:
Язык кода: SQL (язык структурированных запросов) (sql)
SELECT наименование товара, список цен ИЗ продукты ГДЕ product_name КАК "Asus%" СОРТИРОВАТЬ ПО список цен;
В этом примере мы использовали оператор LIKE
для сопоставления строк на основе указанного шаблона.
В этом руководстве вы узнали, как использовать предложение Oracle WHERE
для указания условия поиска для строк, возвращаемых запросом.
Было ли это руководство полезным?
Что такое предложение SQL WHERE?
Предложение WHERE
является фундаментальной частью SQL. Это предложение фильтрует результаты и применяет условия к SQL-запросам. Чаще всего он используется вместе с оператором SELECT
. Если вы новичок в этой теме, вы можете изучить основы SQL, в том числе WHERE
, в нашем курсе основ SQL
.
В этой статье четко объясняется, как использовать WHERE
в запросе SQL.Прочитав его, вы обретете уверенность и знания, чтобы интегрировать ГДЕ в свою повседневную работу.
Синтаксис предложения WHERE SQL
Синтаксис предложения SQL WHERE
прост для понимания. Он должен стоять после ключевого слова FROM в вашем SQL-запросе:
.
ВЫБРАТЬ * ИЗ таблицы ГДЕ id = 100
В этом примере есть целочисленный столбец с именем id
. Мы выбираем все строки, в которых значение столбца id
равно 100.
Примеры предложения SQL WHERE
Один из лучших способов изучения SQL - это его использование, поэтому давайте рассмотрим несколько различных примеров использования предложения WHERE
. Вы можете убедиться, насколько это полезно в реальных ситуациях!
Представьте, что у нас есть тренажерный зал. Когда люди записываются в тренажерный зал, они дают нам основную информацию. Это хранится в нашей таблице members
, которая содержит уникальный идентификатор для каждого участника, их имя и фамилию, их возраст и дату, когда они присоединились к тренажерному залу.
id | Имя | Фамилия | Возраст | Дата присоединения |
---|---|---|---|---|
1 | Уилл | Смит | 52 | 2020-08-23 |
2 | Брэд | Питт | 56 | 2018-06-15 |
3 | Том | Хэнкс | 64 | 2017-02-27 |
4 | Анджелина | Джоли | 45 | 2019-04-02 |
5 | Мэрил | Стрип | 71 | 21.03.2014 |
Если вы совершенно не знакомы с SQL или вам нужно освежить свои знания об операторе SELECT
, найдите время, чтобы прочитать эту статью. SELECT
будет присутствовать в этом фрагменте, поэтому важно, чтобы вы его поняли.
Использование WHERE с числами
Если мы хотим получить подробную информацию об одном из наших участников, и мы знаем его уникальный идентификатор, мы могли бы написать такой запрос:
ВЫБРАТЬ * ОТ участников ГДЕ id = 3
Это позволит получить все данные для этого члена, Тома Хэнкса:
id | Имя | Фамилия | Возраст | Дата присоединения |
---|---|---|---|---|
3 | Том | Хэнкс | 64 | 27.02.2017 |
Использование WHERE с текстом
В предыдущем примере использовалось WHERE в сочетании с числовым значением из нашего столбца id
.Однако вы можете использовать WHERE
с множеством разных типов данных. Давайте посмотрим на пример, использующий предложение WHERE
с текстовым значением. В этом случае мы будем искать в наших столбцах VARCHAR: FirstName
и LastName
.
ВЫБРАТЬ * ОТ участников ГДЕ FirstName = 'Том' И LastName = 'Hanks'
Обратите внимание, как текстовые значения, которые мы хотим сопоставить, заключены в одинарные кавычки. Вы должны делать это каждый раз, когда включаете текстовое значение в свой запрос.Выполнение этого запроса возвращает следующие данные:
id | Имя | Фамилия | Возраст | Дата присоединения |
---|---|---|---|---|
3 | Том | Хэнкс | 64 | 27.02.2017 |
Потрясающе! Это именно тот результат, которого мы хотели.
Посмотрите на запрос еще раз. Вы обратили внимание на оператора И
? Предложение WHERE
часто сочетается с использованием трех разных операторов SQL - AND
, OR
и NOT
:
- A
WHERE
пункт сAND
требует, чтобы выполнялись оба условия . - Предложение
WHERE
сOR
требует, чтобы либо условие было истинным. - A
WHERE
clause сNOT
требует, чтобы указанное условие было not true .
Попробуйте эти операторы сами, изменив запрос, использованный выше. Обратите внимание на эффект, который он оказывает на возвращаемые данные. Лучший способ полностью понять эти операторы - прочитать учебники, посвященные m, и попрактиковаться в написании запросов, включающих операторы AND, OR и NOT.Вот еще несколько полезных способов практиковать SQL в Интернете.
Использование WHERE для получения диапазона значений
В следующем примере мы рассмотрим использование операторов сравнения (,> =,
ВЫБРАТЬ * ОТ участников ГДЕ Возраст> = 50 И ВозрастОбратите особое внимание на синтаксис, следующий за ключевым словом
WHERE
.Этот запрос SQL, переведенный на простой английский, просто гласит: «Выбрать всех из членов, возраст которых больше или равен 50, а возраст меньше 60».Его выполнение дает следующий результат:
id | Имя | Фамилия | Возраст | Дата присоединения |
---|---|---|---|---|
1 | Уилл | Смит | 52 | 2020-08-23 |
2 | Брэд | Питт | 56 | 2018-06-15 |
Вот и все! Все наши участники, которым за пятьдесят, вернулись.Теперь мы можем нацелить на этих участников наше предстоящее специальное предложение.
Это лишь некоторые из способов использования предложения SQL WHERE
, чтобы сузить круг запросов. Одна из самых важных вещей в SQL - это возможность фильтровать огромные объемы данных; Предложение WHERE поможет вам в этом.
Использование WHERE с UPDATE
Предложение WHERE также можно комбинировать с операторами UPDATE
и DELETE
. ОБНОВЛЕНИЕ
используется для изменения существующих записей в вашей базе данных. Оператор DELETE
используется для полного удаления записи из вашей базы данных.
Итак, как на самом деле работает использование UPDATE
в сочетании с предложением WHERE
? Представьте себе, что участница спортзала Анджелина Джоли недавно вышла замуж и взяла фамилию мужа. Нам нужно обновить ее фамилию в нашей базе данных. Для этого вы должны найти id
для Анджелины Джоли и использовать его в своем запросе:
ОБНОВЛЕНИЕ участников SET LastName = 'Clooney' WHERE id = 4
Столбец, который вы хотите обновить, следует за ключевым словом SET
.Очень важно включить предложение WHERE
при использовании оператора UPDATE
; если вы этого не сделаете, для всех записей в таблице будет установлено значение LastName
как «Клуни».
Теперь давайте посмотрим, как этот запрос повлиял на наш набор данных, выполнив следующий запрос:
ВЫБЕРИТЕ id, FirstName, LastName ОТ участников ГДЕ id = 4
id | Имя | Фамилия |
---|---|---|
4 | Анджелина | Клуни |
Успехов! Как видите, данные обновились правильно.ОБНОВЛЕНИЕ
- мощный инструмент, позволяющий обновлять любые неверные значения в наборе данных.
Использование WHERE с DELETE
Что, если бы мы хотели полностью удалить запись из нашей таблицы базы данных? Использование WHERE
в сочетании с оператором DELETE
делает это возможным. Синтаксис для DELETE
прост, и применительно к нашему примеру он выглядит следующим образом:
УДАЛИТЬ ИЗ участников ГДЕ id = 4
Мы используем предложение WHERE
, чтобы точно указать, какую запись мы хотим удалить.Важно отметить, что если несколько записей имеют одинаковое значение id
(в данном случае 4), все эти записи будут удалены из таблицы.
Будьте очень осторожны при использовании инструкции DELETE
; Рекомендуется всегда сначала ВЫБРАТЬ
записи, чтобы вы точно знали, что удаляете.
Мы можем увидеть эффект от нашего оператора DELETE
, выбрав все наши записи:
ВЫБРАТЬ * ОТ участников
Выполнение этого SQL-запроса дает следующий набор результатов:
id | Имя | Фамилия | Возраст | Дата присоединения |
---|---|---|---|---|
1 | Уилл | Смит | 52 | 2020-08-23 |
2 | Брэд | Питт | 56 | 2018-06-15 |
3 | Том | Хэнкс | 64 | 2017-02-27 |
5 | Мэрил | Стрип | 71 | 21.03.2014 |
Найдите точные данные с помощью SQL-предложения WHERE
Теперь у вас есть возможность находить нужные вам данные и работать с ними. WHERE
- чрезвычайно мощный инструмент в вашем арсенале. Вы можете использовать это предложение вместе с UPDATE
, DELETE
и SELECT
. Это позволяет вам манипулировать данными и представлять их бесчисленными способами - возможности безграничны!
Если вы хотите продолжить изучение SQL, используя эффективный и проверенный ресурс, рассмотрите наш курс «Основы SQL», который предоставит вам фундаментальные знания SQL.
.