Основное sql-выражение для выборки данных

ПРОСТЫЕ ВЫБОРКИ ДАННЫХ

Предположим, что реляционная база данных, складывающаяся из одной либо нескольких таблиц, создана и вы к ней уже подключились. В этом случае обычной практической задачей есть получение (извлечение) нужных данных. К примеру, может потребоваться все содержимое какой-либо таблицы из базы данных либо некоторых ее полей. Наряду с этим быть может, вы захотите взять не все записи, а только те, каковые удовлетворяют заданным условиям. Но чаще появляется более занимательная и непростая задача извлечения данных сходу из нескольких таблиц. Эти из двух и более таблиц нужно скомпоновать в одну таблицу, дабы представить ее для обозрения, анализа либо последующей обработки. Язык SQL предоставляет для этого много возможностей, каковые мы и разглядим.

В следствии исполнения выражения на языке SQL (SQL-выражения) создается таблица, которая или содержит запрошенные эти, или безлюдна, в случае если данных, соответствующих запросу, не нашлось. Эта таблица, именуемая еще результатной, существует лишь на протяжении сеанса работы с БД и не присоединяется к числу таблиц, входящих в базу данных. В противном случае говоря, она не хранится на твёрдом диске компьютера подобно исходным таблицам базы данных, и исходя из этого ее еще именуют виртуальной.

Выборка данных из нескольких таблиц, их обработка, и применение подзапросов (запросов, каковые необходимы в качестве промежуточных для получения окончательного результата) относятся к теме сложных запросов. Тут мы остановимся на задаче выборки данных из одной таблицы при довольно несложных условиях отбора, сортировки и группировки записей. Однако, операторы SQL, используемые в несложных запросах на выборку данных, употребляются и в сложных запросах, направленных не только на получение, но и на трансформацию данных. Начните с несложного, дабы позже было легко понять сложное. Материал данной главы относится к фундаментальным темам SQL, не смотря на то, что многие пользователи баз данных смогут им и ограничиться. Последнее в полной мере возможно, потому, что материал данной главы сам по себе только практичен.

Все SQL-выражения, предназначенные для выборки данных из существующих таблиц базы данных, начинаются с главного слова (оператора) SELECT (выбрать). Для уточнения запроса помогают дополнительные операторы, такие как FROM (из), WHERE (где) и др. на данный момент принципиально важно осознать и запомнить, что результатом исполнения запроса, сформулированного в виде SQL-выражения, есть таблица, содержащая запрошенные эти. Эта таблица виртуальна в том смысле, что лишь воображает результаты запроса и не принадлежит к базе данных. SQL разрешает изменять существующую базу разрешённых — создавать и додавать к ней новые таблицы, и модифицировать и удалять уже существующие.

Главное SQL-выражение для выборки данных

Дабы выбрать из таблицы базы данных требуемые записи, направляться, по крайней мере, указать имя и столбцы данной таблицы. Это требование было бы конечно сформулировать так:

ВЫБРАТЬ такие-то столбцы ИЗ такой-то таблицы;

Очевидно, вам может потребоваться выбрать не все записи таблицы, а только те, каковые отвечают некоему условию. На практике как раз так и не редкость. Отложим до тех пор пока рассмотрение формирования условий отбора записей, а сконцентрируем внимание на выборке всех записей из заданной таблицы. SQL-запрос к базе данных, результатом которого есть таблица, полученная из упомянутой в запросе, но отличающаяся от нее тем, что содержит только указанные столбцы, выглядит так:

SELECT списокСтолбцов FROM перечень Таблиц;

Операторы SELECT (выбрать) и FROM (из) в SQL-выражении, определяющем выборку данных, являются необходимыми, т. е. ни один из них нельзя пропустить. SQL-выражение, содержащее лишь эти операторы, есть главным выражением, определяющим запрос к базе данных на выборку данных. В следствии исполнения этого запроса создается виртуальная таблица, содержащая указанные столбцы и все записи исходной таблицы.

Оператор SELECT осуществляет проекцию отношения, указанного в выражении FROM, на заданное множество атрибутов (столбцов), указанное в выражении SELECT.

В выражении FROM указывается перечень имен таблиц базы данных, из которых требуется выбрать эти. В несложном случае списокТаблиц содержит только одно имя таблицы. В случае если же таблиц пара, то их имена в перечне разделяются запятыми. В случае если в выражении FROM указано более одной таблицы, то результатная таблица получается из декартового произведения перечисленных в перечне таблиц. Время от времени это употребляется для особых целей, но значительно чаще в выражении FROM указывается лишь одна таблица.

Перечень столбцов — это список имен столбцов, поделённых запятой, как они выяснены в таблице, упомянутой в выражении FROM. Очевидно, возможно указать все либо лишь кое-какие столбцы. Если вы желаете взять все столбцы таблицы, то вместо перечня столбцов достаточно указать знак (*). В случае если в выражении FROM указано пара таблиц, то в выражении SELECT имена столбцов должны содержать префиксы, показывающие, к какой как раз таблице они относятся. Префикс отделяется от имени столбца точкой. К примеру, выражение Клиенты.Адрес свидетельствует столбец Адрес из таблицы Клиенты.

Тривиальный запрос, возвращающий все сведенья (все столбцы и все записи) из одной таблицы, формулируется так:

SELECT * FROM имяТаблицы;

Главное SQL-выражение возможно дополнено вторыми операторами, уточняющими запрос. Значительно чаще употребляется оператор WHERE (где), благодаря которому возможно задать условие выборки записей (строчков таблицы). Так, в случае если выражение SELECT задает столбцы таблицы, упомянутой в операторе FROM, то выражение WHERE определяет записи (строчка) из данной таблицы. Выражение, определяющее запрос на выборку данных, находящихся в некоей таблице, имеет следующий вид:

SELECT * FROM имяТаблицы WHERE условиеПоиска;

Условие, указанное в выражении WHERE, принимает одно из двух логических значений: true (ИСТИНА) либо false (Неправда). Иначе говоря это логическое выражение. При обработке запроса условие проверяется для каждой записи таблицы. Если оно действительно для данной записи, то она выбирается и будет представлена в результатной таблице. В другом случае запись не выбирается и в результатную таблицу не попадает. В случае если выражение WHERE не указано в SQL-выражении, то результатная таблица будет содержать все записи из таблицы, заданной в выражении FROM. Так, выражение WHERE определяет фильтр записей. Фильтр что-то пропускает в результатную таблицу, а что-то отбрасывает.

Фильтр — одно из главных понятий в области работы с базами данных. В литературе время от времени возможно встретить разные его трактовки. Так, отфильтровать записи вероятно значит взять записи, быть может напротив — отбраковать записи. Тут понятия отфильтровать, пропустить через фильтр либо наложить фильтр постоянно означают выбрать записи, удовлетворяющие условию фильтра.

Сходу за оператором SELECT до перечня столбцов возможно использовать главные слова ALL (все) и DISTINCT (отличающиеся), каковые показывают, какие конкретно записи воображать в результатной таблице. В случае если эти главные слова не употребляются, то подразумевается, что направляться выбрать все записи, что кроме этого соответствует применению главного слова ALL. При применения DISTINCT в результатной таблице представляются лишь неповторимые записи. Наряду с этим в случае если в исходной таблице находятся пара аналогичных записей, то из них выбирается лишь первая.

Примечание

В Микрософт Access не считая главных слов ALL и DISTINCT по окончании SELECT возможно применять главное слово ТОР с дополнительными параметрами. Выражение ТОР n требует, дабы в выборку данных попали лишь первые n записей, удовлетворяющих заданному условию запроса. Это ограничение условия поиска нужных записей, формулируемого в выражении WHERE. В случае если исходная таблица большая, то DISTINCT может ускорить получение ответа.

В Access возможно применять и выражение ТОР n PERCENT, дабы указать, что n выражается в процентах от общего количества записей. Не тяжело осознать, что применение для того чтобы выражения направлено не на ускорение поиска, а на получение таблицы, избавленной от лишних данных.

Заголовки столбцов в результатной таблице возможно переопределить по собственному усмотрению, назначив для них так именуемые псевдонимы. Для этого в перечне столбцов по окончании соответствующего столбца направляться написать выражение вида: AS заголовок_столбца

К примеру:

SELECT ClientName AS Клиент, Address AS Адрес FROM Клиенты;

Псевдонимы кроме этого возможно задать и для каждой таблицы по окончании главного слова FROM. Для этого достаточно указать псевдоним через пробел сразу после имени соответствующей таблицы. Псевдонимы таблиц, более маленькие, чем их имена, комфортно применять в сложных запросах. К примеру:

SELECT Т1.Имя, Т2.Адрес FROM Клиенты Т1, Контакты Т2;

Уточнения запроса

Главное SQL-выражение для выборки данных имеет форму:

SELECT списокСтолбцов FROM списокТаблиц;

Таковой запрос возвращает таблицу, взятую из упомянутой в операторе FROM методом выделения в ней лишь тех столбцов, каковые выяснены в операторе SELECT. Для выделения требуемых записей (строчков) исходной таблицы употребляется выражение, следующее за главным словом (оператором) WHERE. Оператор WHERE есть чаще всего применяемым, не смотря на то, что и не необходимым в SQL-выражении. Как раз из-за популярности его можно считать главным компонентом SQL-выражения. Не считая WHERE, в SQL-выражениях употребляются и другие операторы, разрешающие уточнить запрос.

Для уточнения запроса на выборку данных помогает последовательность дополнительных операторов:

  • WHERE (где) — показывает записи, каковые должны войти в результатную таблицу (фильтр записей);
  • GROUP BY (собирать по) — собирает записи по значениям определенных столбцов;
  • HAVING (имеющие, при условии) — показывает группы записей, каковые должны войти в результатную таблицу (фильтр групп);
  • ORDER BY (сортировать по) — сортирует (упорядочивает) записи.

Эти операторы не являются необходимыми. Их возможно совсем не применять, либо применять только кое-какие из них, либо все сходу. В случае если используются пара операторов, то в SQL-выражении они употребляются в указанном в перечне порядке. Так, запрос данных из таблицы с применением всех перечисленных операторов уточнения запроса имеет следующий вид:

SELECT списокСтолбцов FROM имяТаблицы

WHERE условиеПоиска

GROUP BY столбецГруппировки

HAVING условиеПоиска

ORDER BY условиеСортировки;

Порядок перечисления операторов в SQL-выражении не сходится с порядком их исполнения. Но знание порядка исполнения операторов окажет помощь вам избежать многих недоразумений. Итак, перечисленные операторы SQL-выражения выполняются в такой последовательности, передавая друг другу итог в виде таблицы:

1. FROM — выбирает таблицу из базы данных; в случае если указано пара таблиц, то выполняется их результирующая таблица и декартово произведение передается для обработки следующему оператору.

2. WHERE — из таблицы выбираются записи, отвечающие условию поиска, и отбрасываются все остальные.

3. GROUP BY— создаются группы записей, отобранных посредством оператора WHERE (если он присутствует в SQL-выражении); любая несколько соответствует какому-нибудь значению столбца группирования. Столбец группирования возможно любым столбцом таблицы, заданной в операторе from, а не только тем, что указан в SELECT.

4. HAVING — обрабатывает каждую из созданных групп записей, оставляя лишь те из них, каковые удовлетворяют условию поиска; данный оператор употребляется лишь вместе с оператором GROUP BY.

5. SELECT — выбирает из таблицы, взятой в следствии применения перечисленных операторов, лишь указанные столбцы.

6. ORDER BY — сортирует записи таблицы. Наряду с этим в условии сортировки возможно обращаться только к тем столбцам, каковые указаны в операторе SELECT.

Допустим, среди таблиц вашей базы данных имеется таблица Клиенты, которая содержит столбцы с именами: имя, Адрес, Сумма_заказа и, быть может, какие-то другие. Семантика данной таблицы тривиальна. В ней фиксируются информацию о клиентах и финансовые суммы, каковые они заплатили вашей компании, пользуясь ее одолжениями.

Рис. 1. Таблица Клиенты

Предположим, нас интересуют не все сведенья данной таблицы, а лишь те, каковые касаются клиентов, заплативших компании более 500 (на данный момент не имеет значения, в какой валюте производились оплаты). Правильнее, нам необходимы адреса и имена клиентов, каковые заплатили компании более 500 финансовых единиц. Так, нам нужно взять не все, что содержится в таблице Клиенты, а только некую ее часть, как по столбцам, так и по записям. Для данной цели подойдет следующее SQL-выражение:

SELECT Имя, Адрес FROM Клиенты WHERE Сумма_заказа 500;

Это SQL-выражение является запросом , что на естественном языке выглядит примерно так:

ВЫБРАТЬ СТОЛБЦЫ имя, Адрес ИЗ ТАБЛИЦЫ клиенты ГДЕ Сумма_заказа 500;

Тут из таблицы клиенты выбираются записи, в которых значение столбца Сумма_заказа превышает 500. Наряду с этим в результатной таблице будут представлены лишь два столбца таблицы Клиенты: Адрес и Имя.

Столбец Сумма_заказа, имеющийся в исходной таблице, в этом случае не выводится (отсутствует в результирующей таблице). Но, если бы вам потребовалось заметить конкретные суммы, превышающие 500, то для этого было бы достаточно указать в перечне столбцов, следующем за оператором SELECT, еще и столбец Сумма_заказа.

Рис. 2. Итог запроса ‘WHERE Сумма_заказа 500’

Следующее SQL-выражение формирует виртуальную таблицу, содержащую три Столбца: Регион, Адрес и Имя. Из таблицы Клиенты выбираются лишь те записи, в которых Сумма__заказа превышает 500, и они группируются по значениям столбцов Регион, Адрес и Имя. Это указывает, что в результатной таблице записи, имеющие однообразные значения в столбце Регион, будут расположены рядом между собой. Наконец, все записи в результатной таблице упорядочиваются по значениям столбца Имя (рис. 3).

SELECT Регион, Имя, Адрес FROM Клиенты

WHERE Сумма_заказа 500

GROUP BY Регион, Имя, Адрес

ORDER BY Имя;

Рис. 3. Итог запроса ‘WHERE Сумма_заказа 500’
с группировкой ‘GROUP BY Регион, Имя, Адрес’ и сортировкой ‘ORDER BY Имя’

Оператор выборки записей из исходной таблицы может соседствовать с другими SQL-операторами.

Оператор WHERE

Условия поиска в операторе WHERE (где) являются логическими выражениями, т. е. принимающими одно из двух вероятных значений — true (ИСТИНА) либо false (Неправда). К примеру, выражение Сумма_заказа 500 есть подлинным (имеет значение true), в случае если в текущей записи таблицы значение столбца Сумма_заказа превышает 500. В другом случае это выражение ложно (имеет значение false). Одно да и то же логическое выражение возможно подлинным для одних записей и фальшивым для других. По большому счету говоря, в SQL логические выражения смогут принимать еще и неизвестное значение. Это происходит тогда, в то время, когда в выражении кое-какие элементы имеют значение NULL. Тaким образом, в SQL мы имеем дело не с хорошей двузначной, а с трехзначной логикой.

Выражение, следующее за оператором WHERE, возвращает одно из трех значений: true, false либо NULL. При исполнении запроса (SQL-выражения) логическое выражение WHERE используется ко всем записям исходной таблицы. Если оно действительно для данной записи исходной Таблицы, то эта запись выбирается и будет представлена в результатной таблице; в другом случае запись не попадет в результатную таблицу.

При составлении логических выражений употребляются особые символы операций и ключевые слова сравнения, каковые именуют предикатами. Предикат в первый раз показался в SQL: 1999. К примеру, в выражении Сумма_заказа 500 применен предикат сравнения ().

Выражения с оператором WHERE употребляются не только при выборке данных (т.е. с оператором SELECT), но и при вставке, модификации и удалении записей. Так, материал данного раздела имеет значение, выходящее за границы разглядываемой темы о выборке данных.

Чаще всего употребляются предикаты сравнения, такие как (=), (), (), (=). Но имеются и другие. Потом приведен перечень всех предикатов:

  • предикаты сравнения:

(=) — равняется, () — больше, () – не равняется,

(=) — больше либо равняется (не меньше);

  • BETWEEN;
  • IN, NOT IN;
  • LIKE, NOT LIKE;
  • IS NULL;
  • ALL, SOME, ANY;
  • EXISTS;
  • UNIQUE;
  • DISTINCT;
  • OVERLAPS;
  • MATCH;
  • SIMILAR.

Примечание

В простых процедурных языках программирования перечисленные знаки сравнения именуются операторами сравнения, а не предикатами, но как бы мы ни именовали все, что связано с знаками сравнения, сущность остается неизменной.

BETWEEN

Предикат BETWEEN (между) разрешает задать выражение проверки вхождения какого-либо значения в диапазон, определяемый граничными значениями. К примеру:

WHERE Сумма_заказа BETWEEN 100 AND 750

Тут главное слово AND представляет собой логический альянс И. Граничные значения (в примере это 100 и 750) входят в диапазон. Причем первое граничное значение должно быть не больше второго.

Эквивалентным приведенному есть выражение с предикатами сравнения:

WHERE Сумма_заказа = 100 AND Сумма_заказа

Не считая данных числового типа, в выражениях с BEETWEEN возможно применять эти следующих типов: символьные, битовые, даты-времени. Так к примеру, дабы выбрать записи, в которых имена клиентов находятся в диапазоне от А до Ж, возможно применять такое выражение:

SELECT Имя, Адрес FROM Клиенты

WHERE Имя BETWEEN ‘А’ AND ‘ Ж’ ;

IN и NOT IN

Предикаты IN (в) и NOT IN (не в) используются для проверки вхождения какого-либо значения в заданный перечень значений. К примеру, для выборки записей о клиентах из некоторых регионов возможно применять такое выражение:

SELECT Имя, Адрес FROM Клиенты

WHERE Регион IN (‘Северо-запад’, ‘Ставропольский край’,

‘Иркутская область’);

В случае если требуется получить информацию о всех клиентах не из Северо Запада и-Москвы, то возможно применять предикат NOT IN:

SELECT Имя, Адрес FROM Клиенты

WHERE Регион NOT IN (‘Москва’, ‘Петербург’);

LIKE и NOT LIKE

Предикаты LIKE (похожий) и NOT LIKE (не похожий) используются для проверки частичного соответствия символьных строчков. К примеру, столбец Телефон в некоей таблице содержит полные номера телефонов, а вам требуется выбрать только те записи, в которых номера телефонов начинаются с 348 либо содержат такое сочетание цифр.

Критерий частичного соответствия задается посредством двух знаков-масок: символа процента (%) и подчеркивания (_). Символ процента свидетельствует любой комплект знаков, среди них и пустой, а знак подчеркивания — любой одиночный знак. К примеру, дабы выбрать записи о клиентах, у которых номера телефонов начинаются с 348, возможно применять такое выражение:

SELECT Имя, Адрес, Телефон FROM Клиенты

WHERE Телефон LIKE ‘348%’;

Допустим, столбец Адрес содержит полный почтовый адрес (индекс, наименование города, улицы и т. д.). В случае если вам требуется выбрать записи о клиентах, живущих в Петербурге, то для этого подойдет следующее выражение:

SELECT Имя, Адрес, Телефон FROM Клиенты

WHERE Адрес LIKE ‘%Петербург%’;

Если вы желаете исключить всех клиентов, живущих в Москве, то воспользуйтесь таким выражением:

SELECT Имя, Адрес, Телефон FROM Клиенты

WHERE Адрес NOT LIKE ‘%Москва%’;

Быть может, вам потребуется выбрать записи, срдержащие знаки процента и/либо подчеркивания. Тогда нужно, дабы такие знаки воспринимались интерпретатором SQL не как знаки-маски. Дабы символ процента либо подчеркивания воспринимался практически, перед ним нужно указать особый управляющий знак. Данный знак возможно выяснить произвольно, только бы он не виделся в качестве элемента данных. В следующем примере продемонстрировано, как это возможно сделать:

SELECT- Имя, Адрес, Процент_скидки FROM Клиенты

WHERE Процент_скидки LIKE ’20#%’

ESCAPE ‘#’;

Тут за главным словом ESCAPE указывается знак, что употребляется в качестве управляющего. Таким же методом возможно отключить и сам управляющий знак.

IS NULL

Предикат IS NULL используется для обнаружения записей, в которых тот либо другой столбец не имеет значения. К примеру, чтобы получить записи о клиентах, для которых не указан адрес, возможно применять следующее выражение:

SELECT Имя, Адрес, Регион FROM Клиенты

WHERE Адрес IS NULL;

Для получения записей, в которых столбец Адрес содержит кое-какие определенные значения (т. е. хорошие от NULL), возможно применять подобное выражение, но с логическим оператором NOT (не):

SELECT Имя, Адрес, Регион FROM Клиенты

WHERE Адрес IS NOT NULL;

Не нужно применять предикаты сравнения с NULL, такие как Адрес = NULL.

(SQL запросы) 1. Запрос на выборку данных при помощи оператора select


Также читать:

Понравилась статья? Поделиться с друзьями: