Использование специальных операторов в условиях


Оглавление (нажмите, чтобы открыть):

Использование специальных операторов в условиях

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

  • = Равно
  • > Больше чем
  • = Больше или равно
  • Не равно

Они имеют стандартные значения для символьных значений и дат. Символьные значения сравниваются в терминах их кодов.

Рассмотрим теперь специальные операторы: IN, BETWEEN, LIKE, IS NULL.

Оператор IN определяет список значений, в который должно входить значение поля. Например, если Вы хотите найти всех продавцов находящихся в Москве или Хабаровске, Вы должны использовать такой запрос: Но есть есть более простой способ: Результат этого запроса: Набор значений для оператора IN заключается в круглые скобки, значения разделяются запятыми.

Оператор BETWEEN похож на оператор IN. В отличие от списка допустимых значений BETWEEN определяет диапазон значений. В запросе Вы должны указать слово BETWEEN затем начальное значение, ключевое слово AND и конечное значение. Первое значение должно быть меньше второго. Следующий запрос выберет Агентов с комиссионными между 10 и 12:

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

  • символ подчеркивания _ — замещает любой одиночный символ. Например, ‘к_т’ будет соответствовать ‘кот’ и ‘кит’, но не ‘крот’.
  • знак процента % — замещает последовательность любого числа символов. Например, ‘%м%р’ будет соответствовать ‘компьютер’ и ‘омар’.

Давайте выберем заказчиков чьи имена начинаются с буквы ‘О’: LIKE удобен поиске значений, если Вы точно не помните как они пишутся. Вы просто можете использовать ту часть, которую помните.

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

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

Теперь Вы знаете как можно строить запросы к таблицам, используя любые условия. Далее следует: агрегатные функции и просто функции, GROUP BY,ORDER BY.

Все это и еще многое другое, но уже в Новом Году.
С Новым Годом! Друзья. 😉

Использование специальных операторов в условиях

В ДОПОЛНЕНИЕ К РЕЛЯЦИОННЫМ И БУЛЕВСКИМ операторам, обсуждаемым в Главе 4, SQL использует специальные операторыIN, BETWEEN, LIKE,и IS NULL. В этой главе вы узнаете, как их использовать, и как реляционные операторы позволяют создавать более сложные и мощные предикаты. Обсуждение оператора IS NULL будет включать отсутствие данных и значение NULL, которое указывает на то, что данные отсутствуют. Вы также узнаете о разновидностях использования оператора NOT, применяющегося с этими операторами.

Оператор IN определяет набор значений, в который данное значение может или не может быть включено. В соответствии с нашей учебной базой данных, на которой вы обучаетесь по настоящее время, если вы хотите найти всех продавцов, которые размещены в Barcelona или в London, вы должны использовать следующий запрос (вывод показывается в Рисунке 5.1):

SELECT *
FROM Salespeople
WHERE city = ‘Barcelona’ OR city = ‘London’;

================ SQL Execution Log ============
| SELECT * |
| FROM Salespeople |
| WHERE city = ‘Barcelona’ |
| OR city = ‘London’; |
| ==============================================|
| snum sname city comm |
| —— ———- ———— ——- |
| 1001 Peel London 0.12 |
| 1004 Motika London 0.11 |
| 1007 Rifkin Barcelona 0.15 |
===============================================

Рисунок 5.1. Нахождение продавцов в Барселоне и Лондоне

Имеется и более простой способ получить ту же информацию:

SELECT *
FROM Salespeople
WHERE city IN (‘Barcelona’, ‘London’);

Вывод для этого запроса показывается в Рисунке 5.2.

Рисунок 5.2. SELECT использует IN

Как вы можете видеть, IN определяет набор значений с помощью имен членов набора, заключенных в круглые скобки и отделенных запятыми. Он затем проверяет различные значения указанного поля, пытаясь найти совпадение со значениями из набора. Если это случается, то предикат верен. Когда набор содержит значения номеров, а не символов, одиночные кавычки опускаются. Давайте найдем всех заказчиков относящихся к продавцам имеющих значения snum = 1001, 1007, и 1004. Вывод для следующего запроса показан на Рисунке 5.3:

SELECT *
FROM Customers
WHERE cnum IN (1001, 1007, 1004);

=============== SQL Execution Log ============
| SELECT * |
| FROM Customers |
| WHERE snum IN (1001, 1007, 1004); |
| ============================================= |
| snum cname city rating snum |
| —— ——— —— —- —— |
| 2001 Hoffman London 100 1001 |
| 2006 Clemens London 100 1001 |
| 2008 Cisneros San Jose 300 1007 |
| 2007 Pereira Rome 100 1004 |
===============================================

Рисунок 5.3. SELECT использует IN с номерами

Оператор BETWEEN похож на оператор IN. В отличие от определения по номерам из набора, как это делает IN, BETWEEN определяет диапазон, значения которого должны уменьшаться, что делает предикат верным. Вы должны ввести ключевое слово BETWEEN с начальным значением, ключевое AND и конечное значение. В отличие от IN, BETWEEN чувствителен к порядку, и первое значение в предложении должно быть первым в алфавитном или числовом порядке. Обратите внимание, что, в отличие от английского языка, SQL не говорит «значениенаходится между (BETWEEN)значением и значением”, а просто «значениеBETWEENзначениеANDзначение”. Это применимо и к оператору LIKE (см. ниже). Следующий пример будет извлекать из таблицы Продавцов всех продавцов с комиссионными между .10 и .12 (вывод показывается в Рисунке 5.4):

SELECT *
FROM Salespeople
WHERE comm BETWEEN .10 AND .12;

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

Рисунок 5.4: SELECT использует BETWEEN

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

SELECT *
FROM Salespeople
WHERE (comm BETWEEN .10, AND .12) AND NOT comm IN (.10, .12);

Вывод для этого запроса показывается в Рисунке 5.5.

Рисунок 5.5. Сделать BETWEEN — невключающим

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

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

Этот запрос выбирает всех заказчиков, чьи имена попали в диапазон от ‘A’ до ‘G’:

SELECT *
FROM Customers
WHERE cname BETWEEN ‘A’ AND ‘G’;

Вывод для этого запроса показывается в Рисунке 5.6.

=============== SQL Execution Log ============
| SELECT * |
| FROM Customers |
| WHERE cname BETWEEN ‘A’ AND ‘G’; |
| ============================================= |
| cnum cname city rating snum |
| —— ——— —— —- —— |
| 2006 Clemens London 100 1001 |
| 2008 Cisneros San Jose 300 1007 |
===============================================

Рисунок 5.6. Использование BETWEEN в алфавитном порядке.

Обратите внимание, что Grass и Giovanni отсутствуют. Это происходит из-за того, что BETWEEN сравнивает строки неравной длины. Строка ‘G’ более короткая, чем строка ‘Giovanni’, поэтому BETWEEN выводит ‘G’ с пробелами. Пробелы предшествуют символам в алфавитном порядке (в большинстве реализаций), поэтому ‘Giovanni’ не выбирается. То же самое происходит с Grass. Важно помнить это, когда вы используете BETWEEN для извлечения значений из алфавитных полей. Обычно вы указываете диапазон с помощью символа начала диапазона и символа конца (вместо которого можно просто поставить ‘z’).

LIKE применим только к полям типа CHAR или VARCHAR, с которыми он используется, чтобы находить подстроки. То есть, он ищет поле символа, чтобы видеть, совпадает ли с условием часть его строки. В качестве условия он использует групповые символы (wildcards) — специальные символы которые могут соответствовать чему-нибудь. Имеются два типа групповых символов используемых с LIKE:

символ подчеркивания (_) замещает любой одиночный символ. Например, ‘b_t’ будет соответствовать словам ‘bat’ или ‘bit’, но не будет соответствовать ‘brat’.

знак процента (%) замещает последовательность любого числа символов (включая символы нуля). Например ‘%p%t’ будет соответствовать словам ‘put’, ‘posit’,или‘opt’,но не‘spite‘.

Давайте найдем всех заказчиков, чьи имена начинаются с G (вывод показывается в Рисунке 5.7):

SELECT
FROM Customers
WHERE cname LIKE ‘G%’;

Рисунок 5.7. Оператор SELECT использует LIKE со знаком ‘%’.

LIKE может быть удобен, если вы ищете имя или другое значение, и если вы не помните, как они точно пишутся. Предположим, что вы не уверены, как записано по буквам имя одного из ваших продавцов PealилиPeel. Вы можете просто использовать ту часть, которую вы знаете, и групповые символы, чтобы находить все возможные пары (вывод этого запроса показывается в Рисунке 5.8):

SELECT *
FROM Salespeople
WHERE sname LIKE ‘P _ _ l %’;

Групповые символы подчеркивания, каждый из которых представляет один символ, добавят только два символа к уже существующим ‘P’ и ‘l’, поэтому имя наподобие Prettel не может быть показано. Групповой символ ‘%’ — в конце строки необходим в большинстве реализаций, если длина поля sname больше чем число символов в имени Peel, потому что некоторые другие значения sname — длиннее, чем четыре символа. В таком случае, значение поля sname, фактически сохраняемое как имя Peel, сопровождается рядом пробелов. Следовательно, символ ‘l’ не будет рассматриваться концом строки. Групповой символ ‘%’ — просто соответствует этим пробелам. Это необязательно, если поля sname имеет тип VARCHAR.

Рисунок 5.8. Оператор SELECT использует LIKE с символом подчеркивания (_).

А что же Вы будете делать, если вам нужно искать знак процента или знак подчеркивания в строке? В предикате LIKE вы можете определить любой одиночный символ как символ ESC. Символ ESC используется сразу перед процентом или подчеркиванием в предикате, и означает, что процент или подчеркивание будет интерпретироваться как символ, а не как групповой символ. Например, мы могли бы найти наш sname столбец, где присутствует подчеркивание, следующим образом:

SELECT *
FROM Salespeople
WHERE sname LIKE ‘%/_%’ESCAPE’/’;

С этими данными не будет никакого вывода, потому что мы не включили никакого подчеркивания в имя нашего продавца. Предложение ESCAPE определяет ‘/’ как символ ESC. Символ ESC используемый в LIKE строке, сопровождается знаком процента, знаком подчеркивания, или знаком ESCAPE, который будет искаться в столбце, а не обрабатываться как групповой символ. Символ ESC должен быть одиночным символом и применяться только к одиночному символу сразу после него.


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

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

Имеется предыдущий пример, который пересмотрен, чтобы искать местонахождение строки ‘_/’ в sname столбце:

SELECT *
FROM Salespeople
WHERE sname LIKE ‘%/_//%’ ESCAPE’/’;

Снова не будет никакого вывода с такими данными.

Строка сравнивается с содержанием любой последовательности символов (%), сопровождаемых символом подчеркивания (/_), символом ESC (//), и любой последовательностью символов в конце строки (%).

SELECT — операторы сравнения, логические и специальные.

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

  • = Равно
  • > Больше чем
  • Меньше чем
  • >= Больше или равно
  • Меньше или равно
  • Не равно

Они имеют стандартные значения для символьных значений и дат. Символьные значения сравниваются в терминах их кодов.

Рассмотрим теперь специальные операторы: IN, BETWEEN, LIKE, IS NULL.

Оператор IN определяет список значений, в который должно входить значение поля. Например, если Вы хотите найти всех продавцов находящихся в Москве или Хабаровске, Вы должны использовать такой запрос:

Но есть есть более простой способ: Результат этого запроса: Набор значений для оператора IN заключается в круглые скобки, значения разделяются запятыми.

Оператор BETWEEN похож на оператор IN. В отличие от списка допустимых значений BETWEEN определяет диапазон значений. В запросе Вы должны указать слово BETWEEN затем начальное значение, ключевое слово AND и конечное значение. Первое значение должно быть меньше второго. Следующий запрос выберет Агентов с комиссионными между 10 и 12:

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

  • символ подчеркивания _ — замещает любой одиночный символ. Например, ‘к_т’ будет соответствовать ‘кот’ и ‘кит’, но не ‘крот’.
  • знак процента % — замещает последовательность любого числа символов. Например, ‘%м%р’ будет соответствовать ‘компьютер’ и ‘омар’.
Мастер Йода рекомендует:  Какой он, хороший код по мнению Линуса Торвальдса

Давайте выберем заказчиков чьи имена начинаются с буквы ‘О’: LIKE удобен поиске значений, если Вы точно не помните как они пишутся. Вы просто можете использовать ту часть, которую помните.

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

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

Теперь Вы знаете как можно строить запросы к таблицам, используя любые условия. Далее следует: агрегатные функции и просто функции, GROUP BY,ORDER BY.

Использование специальных операторов в условиях

В дополнение к реляционным и булевым операциям, обсуждённым в Главе 4, SQL использует специальные операторы: IN, BETWEEN, LIKE и IS NULL.
В этой главе вы узнаете, как их использовать и как реляционные операторы позволяют создавать более сложные и мощные предикаты. Обсуждение оператора IS NULL будет включать отсутствие данных и значение NULL, которое указывает на то, что данные отсутствуют.
Вы также узнаете о вариантах использования оператора, NOT применяющегося с этими операторами.

ОПЕРАТОР IN

Оператор IN определяет набор значений, в который данное значение может или может не быть включено. В соответствии с нашей учебной базой данных, на которой вы обучаетесь по настоящее время, если вы хотите найти всех продавцов, которые находятся в Barcelona или в London, вы должны использовать следующий запрос (вывод показан на Рисунке 5.1):

Имеется и более простой способ получить ту же информацию:

Вывод для этого запроса показан на Рисунке 5.2.

Как видите, IN определяет набор значений с помощью имён членов набора, заключённых в круглые скобки и разделённых запятыми. Он затем проверяет различные значения указанного поля, пытаясь найти совпадение со значениями из набора. Если это случается, то предикат верен. Когда набор содержит числовые значения, а не символы, одиночные кавычки опускаются. Давайте найдём всех заказчиков, относящихся к продавцам, имеющих значения snum = 1001, 1007, и 1004. Вывод для следующего запроса показан на Рисунке 5.3:

ОПЕРАТОР BETWEEN

Оператор BETWEEN похож на оператор IN. Но, в отличие от определения по числам из набора, как это делает IN, BETWEEN определяет диапазон, значения которого должны уменьшаться, что делает предикат верным. Вы должны ввести ключевое слово BETWEEN с начальным значением, ключевое AND и конечное значение. В отличие от IN, BETWEEN чувствителен к порядку, и первое значение в предложении должно быть последним по алфавитному или числовому порядку. (Обратите внимание, что, в отличие от английского языка, SQL не говорит, что «значение находится (между) BETWEEN значением и значением», а просто «значение BETWEEN значение значение». Это применимо и к оператору LIKE). Следующий пример будет извлекать из таблицы Продавцов всех продавцов с комиссионными между .10 и .12 (вывод показан на Рисунке 5.4):

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

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

Вывод для этого запроса показан на Рисунке 5.5.

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

В основном вы используете IN и BETWEEN так же, как вы использовали реляционные операции при сравнении значений, которые берутся либо из набора (для IN), либо из диапазона (для BETWEEN).

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

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

Вывод для этого запроса показан на Рисунке 5.6.

Обратите внимание, что Grass и Giovanni отсутствуют даже при включенном BETWEEN. Это происходит из-за того, что BETWEEN сравнивает строки неравной длины. Строка ‘G’ короче, чем строка Giovanni, поэтому BETWEEN выводит ‘G’ с пробелами. Пробелы предшествуют символам в алфавитном порядке (в большинстве реализаций), поэтому Giovanni не выбирается. То же самое происходит и с Grass. Важно помнить это, когда вы используете BETWEEN для извлечения значений из алфавитных диапазонов. Обычно вы указываете диапазон с помощью символа начала диапазона и символа конца (вместо которого можно просто поставить z).

ОПЕРАТОР LIKE

LIKE применим только к полям типа CHAR или VARCHAR, с которыми он используется для поиска подстрок. Т.е. он ищет поле символа, чтобы увидеть, совпадает ли с условием часть его строки. В качестве условия он использует групповые символы-шаблоны (wildсards) — специальные символы, которые могут соответствовать чему-нибудь.

Имеются два типа шаблонов, используемых с LIKE:

  • символ подчёркивания ( _ ) замещает любой одиночный символ. Например, ‘b_t’ будет соответствовать словам ‘bat’ или ‘bit’, но не будет соответствовать ‘brat’.
  • знак процента (%) замещает последовательность любого количества символов (включая символы нуля). Например ‘%p%t’ будет соответствовать словам ‘put’, ‘posit’, или ‘opt, но не ‘spite’.

Давайте найдём всех заказчиков, чьи имена начинаются с G (вывод показан на Рисунке 5.7):

LIKE может быть удобен, если вы ищете имя или другое значение и если вы не помните, как они точно пишутся. Предположим, что вы не уверены, как записано по буквам имя одного из ваших продавцов — Peal или Peel. Вы можете просто использовать ту часть, которую вы знаете, и групповые символы, чтобы находить все возможные совпадения (вывод этого запроса показан на Рисунке 5.8):

Группа символов подчёркивания, каждый из которых представляет один символ, добавит только два символа к уже существующим ‘P’ и ‘l’ , поэтому имя наподобие Prettel не может быть показано. Групповой символ ‘ % ‘ в конце строки необходим в большинстве реализаций, если длина поля sname больше, чем число символов в имени Peel (потому что некоторые другие значения sname длиннее, чем четыре символа). В этом варианте значение поля sname, фактически сохраняемое как имя Peel, сопровождается рядом пробелов. Следовательно, символ ‘l’ не будет считаться концом строки. Групповой символ ‘ % ‘ просто соответствует этим пробелам. Это не обязательно, если поле sname имеет тип VARCHAR.

А что вы будете делать, если вам нужно искать символ процента или символ подчёркивания в строке? В LIKE-предикате вы можете определить любой одиночный символ как символ ESC. Символ ESC используется сразу перед процентом или подчёркиванием в предикате и означает, что процент или подчёркивание будет интерпретироваться как символ, а не как групповой символ-шаблон. Например, мы могли бы найти наш sname-столбец, где присутствует подчёркивание, следующим образом:

С этими данными не будет никакого вывода, потому что мы не включили никакого подчёркивания в имя нашего продавца. Ключевое слово ESCAPE определяет ‘/ ‘ как ESC-символ. ESC-символ, используемый в LIKE-строке, сопровождается знаком процента, знаком подчёркивания или знаком ESCAPE, который будет искаться в столбце, а не обрабатываться как шаблон.

Символ ESC должен быть одиночным символом и применяется только к одиночному символу сразу после него.

В примере выше, символ процента начала и символ процента окончания обрабатываются как групповые символы; только подчёркивание представлено как сам символ.

Как упомянуто выше, символ ESC может также использоваться самостоятельно. Другими словами, если вы будете искать столбец с символом ESC, вы просто вводите его дважды. Символ ESC «берёт следующий символ буквально как символ» и, во-вторых, символ ESC самостоятелен.

Вот предыдущий пример, который пересмотрен, чтобы найти местонахождение строки ‘_/’ в sname-столбце:

Снова не будет никакого вывода с такими данными. Строка сравнивается с содержанием любой последовательности символов (%), сопровождаемых символом подчёркивания ( /_ ), символом ESC ( // ) и любой последовательностью символов в конце строки (%).

РАБОТА СО ЗНАЧЕНИЯМИ NULL

Часто в таблице будут записи, которые не имеют никаких значений поля, например, потому что информация не завершена, или потому что это поле просто не заполнялось. SQL учитывает такой вариант, позволяя вам вводить значение NULL (ПУСТОЙ) в поле, вместо значения. Когда значение поля равно NULL, это означает, что программа базы данных специально промаркировала это поле как не имеющее никакого значения для этой строки (записи).
Это отличается от просто назначения полю значения нуль или пробела, которые база данных будет обрабатывать так же, как и любое другое значение. Точно так же как NULL не является техническим значением, оно не имеет и типа данных. Оно может помещаться в любой тип поля. Тем не менее, NULL в SQL часто упоминается как «нуль».

Предположим, что вы получили нового заказчика, который ещё не был назначен продавцу. Чем ждать продавца, к которому его нужно назначить, вы можете ввести заказчика в базу данных теперь же, так что он не потеряется при перестановке. Вы можете ввести строку для заказчика со значением NULL в поле snum и заполнить это поле значением позже, когда продавец будет назначен.


ОПЕРАТОР IS NULL

Так как NULL указывает на отсутствие значения, вы не можете знать, каков будет результат любого сравнения с использованием NULL. Когда NULL сравнивается с любым значением, даже с другим таким же NULL, результат будет ни true, ни false, он неизвестен/undefined. Неизвестный булев вообще ведёт себя так же, как неверная строка, которая, произведя неизвестное значение в предикате, не будет выбрана запросом. Имейте в виду, что, в то время как NOT (неверное) равняется верно, NOT (неизвестное) равняется неизвестно.

Следовательно, выражение типа ‘city = NULL’ или ‘city IN (NULL)’ будет неизвестно в любом случае.

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

Найдём все записи в нашей таблице Заказчиков с NULL-значениями в столбце city:

Здесь не будет никакого вывода, потому что мы не имеем никаких значений NULL в наших типовых таблицах. Значения NULL очень важны, и мы вернёмся к ним позже.

ИСПОЛЬЗОВАНИЕ NOT СО СПЕЦИАЛЬНЫМИ ОПЕРАТОРАМИ

Операнды могут непосредственно предшествовать булеву NOT.

Это противоположно реляционным операциям, когда оператор NOT должен идти перед вводимым выражением. Например, если мы хотим устранить NULL из нашего вывода, мы будем использовать NOT, чтобы изменить на противоположное значение предиката:

При отсутствии значений NULL (как в нашем случае), будет выведена вся таблица Заказчиков. Аналогично можно ввести следующее

что также приемлемо. Мы можем также использовать NOT с IN:

А вот другой способ подобного же выражения:

Вывод для этого запроса показан на Рисунке 5.9.

Таким же способом вы можете использовать NOT BETWEEN и NOT LIKE.

РЕЗЮМЕ

Теперь вы можете создавать предикаты в терминах связей, специально определённых в SQL. Вы можете искать значения в определённом диапазоне (BETWEEN) или в числовом наборе (IN), или вы можете искать символьные значения, которые соответствуют тексту внутри параметров (LIKE).

Вы также изучили кое-что о том, как SQL поступает при отсутствии данных (а это реально), используя NULL вместо конкретных значений. Вы можете извлекать или исключать значения NULL из вашего вывода, используя оператор IS NULL.

Часть III. Операторы: EXISTS, ANY, SOME, ALL

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

Оператора EXISTS. Данный оператор, используя подзапрос в качестве аргумента, оценивает его как истинный, если подзапрос генерирует выходные данные или как ложный, если на выходе подзапрос не содержит данных. Таким образом, в результате применения EXISTS к подзапросу получаем TRUE или FALSE.

Одной из особенностей использования EXISTS, является то, что он не может принимать значение UNKNOWN. Вполне логично: если на выходе подзапрос, который является аргументом EXISTS, генерирует данные, то возвращается правда, в противном случае — ложь. Исходя из предыдущих размышлений, замечу, что оператор EXISTS позволяет нам работать с несколькими строками группы значений, в отличие от остальных операторов используемых с подзапросами. Вы, наверное, заметили что, часто в SQL одну и ту же задачу возможно решить несколькими способами. Рассмотрим следующий пример: «Выбрать всех студентов, которые когда-либо пользовались услугами библиотеки.»

FROM Students s

Обратите внимание, что в примере использовался связанный подзапрос. При применении связанных подзапросов оператор EXISTS применяется отдельно для каждой строки таблицы, на которую есть ссылка в основном запросе.

Следующие два оператора абсолютно идентичны и являются взаимозаменяемыми: это ANY и SOME. Как работают данные операторы? Продемонстрируем это на примере известного Вам запроса: «Выбрать всех студентов, которые когда-либо пользовались услугами библиотеки.»

Оператор ANY берет все значения поля id_student в таблице S_Cards и оценивает результат как истину, если какое-либо значение совпадает со значением поля id из текущей строки внешнего запроса. Конечно, аналогичного результата возможно добиться и при использование оператора SOME.

Еще один специальный оператор, который мы сегодня рассмотрим, это оператор ALL. Данный оператор возвращает значение TRUE, если каждое значение, выбранное в процессе выполнения подзапроса, удовлетворяет условию, заданному в условии внешнего запроса. Рассмотрим следующий пример: «Выбрать всех авторов, написавших книги с объемом страниц большим, чем любая книга выпущенная издательством Питер».

SELECT Authors.FirstName & ‘ ‘ & Authors.LastNAme AS [Полное имя]

FROM Authors, Books

FROM Books, Press

Если бы мы записали данный запрос без оператора ALL, тогда бы мы получили сообщение об ошибке: «Данный подчиненный запрос должен возвращать не более одной записи». Используя же оператор ALL мы добиваемся следующего желаемого эффекта: вначале выполняется подзапрос, который на выходе дает несколько результирующих строк. Затем значение каждой результирующей строки сравнивается с значением поля Pages таблицы Books. Если, в каждом из случаев, значение поля Pages таблицы BOOK будет больше соответсвующего значения каждой из результирующих строк, то результатом работы Books.Pages>ALL (. ) будет TRUE. Дальнейшая обработка происходит по уже известным Вам правилам.

Мастер Йода рекомендует:  Бесплатно ускоряем индексацию сайта

Не нашли то, что искали? Воспользуйтесь поиском:

Лучшие изречения: Только сон приблежает студента к концу лекции. А чужой храп его отдаляет. 8802 — | 7520 — или читать все.

91.105.232.77 © studopedia.ru Не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования. Есть нарушение авторского права? Напишите нам | Обратная связь.

Отключите adBlock!
и обновите страницу (F5)

очень нужно

Основные операторы, используемые в условиях отбора

Читайте также:

  1. I. Основные понятия
  2. I. ОСНОВНЫЕ ПОНЯТИЯ (ТЕРМИНЫ) ЭКОЛОГИИ. ЕЕ СИСТЕМНОСТЬ
  3. I. Основные структурные элементы формирования личности как исходная позиция учебного плана.
  4. II. НЕОСНОВНЫЕ ПУТИ.
  5. II. Основные клинические формы ОНМК.
  6. II. Основные определения
  7. II. Основные параметры магнитного поля.
  8. II. Основные положения учения Ф. де Соссюра о языке.
  9. IV. Основные понятия алгебры логики
  10. VI. Основные размеры стиха
  11. XVIII. Основные понятия. Алфавит. Синтаксис. Семантика
  12. XXXII. Основные понятия криптографии

Виды условий отбора

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

В простом запросе в качестве операндов выражения могут использоваться: константы или идентификаторы (ссылки).

Константами являются не изменяющиеся значения, например True, False, да, Нет, Null (константы автоматически определяются в Access).

Идентификатор представляет собой ссылку на значение поля, элемент управления или свойство. Идентификаторами могут быть имена полей, таблиц, запросов, форм, отчетов и т.д. Они должны заключаться в квадратные скобки. Во многих случаях Access производит автоматическую подстановку скобок. Если необходимо указать ссылку на поле в конкретной таблице, форме, отчете, то перед именем поля ставится имя таблицы, также заключенное в квадратные скобки и отделенное от имени поля восклицательным знаком, т.е. [Имя таблицы]![Имя поля]. Например, [Таблица1]![стаж].

В выражении условия отбора допускается использование операторов сравнения: =, , Between, In, Like и логических операторов And, Or, Not, которые определяют операцию над одним или несколькими операндами. Перечень операторов, которые могут присутствовать в условии отбора, и примеры простых условий приведены в табл. 7, кроме того, предполагается, что открыта таблица «Т1» с полями «Имя», «М_стаж» и «М_оклад». Отметим некоторые особенности написания условий отбора. Если выражение в условии отбора не содержит оператора, то по умолчанию используется оператор =. Текстовые значения в выражении вводятся в кавычках, если они содержат пробелы или знаки препинания. В противном случае кавычки можно не вводить, они будут добавлены автоматически.

Оператор Between проверяет, входит ли значение поля в заданный интервал. Используется для полей типа Дата/Время или числового типа. Например, Between 10 And 100 задает интервал от 10 до 100, а Between 10.01.70 And 10.02.77 задает интервал от первой даты до последней.

Тип Оператор Описание Пример
Поле Условие отбора
Арифметические ^ Возведение в степень Стаж =3^0,5
* Умножение Стаж >2*[Т1]![М_стаж]
/ Деление Оклад =[Т1]![М_оклад]/2
+ Сложение Стаж >=[Т1]![М_стаж]
Вычитание Стаж >=[Т1]![М_стаж]-10
Текстовые & Объединение строк Фамилия «Сотрудник: «& [Т1]![Имя]
Сравнения > Больше Оклад >5000
= Больше или равно Стаж >=12,5
Не равно Стаж <>25
Between Поверка на вхождение в интервал Стаж Between 10 And 15
Дата Between 1.1.70 And 15.3.77
Like Поверка по образцу Стаж Like «#5»
Фамилия Like «П*»
Дата Like «##.##.65»
In Проверка на равенство любому значению из списка Стаж In(10;12;18)
Дата In(1.1.70; 10.2.82)
Фамилия In («Перов»; «Жуков»)
Логические And И (выполняются все условия) Стаж > 10 And

Таблица 1 – Список полей таблицы «Пациенты»

Поле Тип Свойства
Дата_поступления Дата/Время Краткий формат даты

Таблица 2 – Запросы

Назначение запроса Вид Поля, участв в выборке Условие отбора Результаты работы
Поле Условие Значение параметра Состав выборки
Выбор по окладу Параметрич Фамилия, Оклад, должность оклад >[Введите сумму] 10 000 1, 3, 5
| следующая лекция ==>
Основы конструирования запроса | Роль лучевой терапии в лечении больных злокачественными новообразованиями

Дата добавления: 2014-01-06 ; Просмотров: 285 ; Нарушение авторских прав? ;

Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет

Лабораторная работа № 4. Использование агрегатных функций и специальных операторов в условиях отбора

Цель работы: освоение операторов специального вида и возможностей подведения итогов по данным запроса.

Операторы специального вида

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


— IN определяет список значений, в который должно входить значение поля. Набор значений для оператора IN заключается в круглые скобки, значения разделяются запятыми. Например, предложение WHERE ADDRESS IN (`Samal’, `Tastak’) выберет из списка сотрудников, проживающих в микрорайонах Самал и Тастак;

— BETWEEN в отличие от списка допустимых значений BETWEEN, определяет диапазон значений. В запросе необходимо указать слово BETWEEN, затем начальное значение, ключевое слово AND и конечное значение;

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

— IS NULL — используется для проверки равенства данного значения значению NULL. Например, WHERE PHONE IS NULL — поиск сотрудников, не имеющих телефонов.

Для всех этих операций можно построить их отрицания (ключевое слово NOT), чтобы рассмотреть противоположные условия. Ключевое слово NOT используется с операциями следующим образом: NOT BETWEEN, IS NOT NULL, NOT IN, NOT LIKE.

Сортировка вывода

Обычно требуется, чтобы выводимые данные были как-то упорядочены. Выводимые данные можно упорядочить с помощью выражения, связанного с ключевым словом ORDER BY. Упорядочение, задаваемое с помощью ключевого слова ORDER BY, по умолчанию будет упорядочением по возрастанию, обозначается A-Z (А-Я) в случае сортировки имен. Алфавитное упорядочение по убыванию соответствует порядку Z-А (Я-А). Для числовых значений между 1 и 9 упорядочение по возрастанию обозначается 1-9, а по убыванию — 9-1. Синтаксис оператора SELECT, использующего выражение ORDER BY, следующий:

SELECT [ALL | * | DISTINCT СТОЛБЕЦ1, СТОЛБЕЦ2]

FROM ТАБЛИЦА1 [, ТАБЛИЦА2]

WHERE [УСЛОВИЕ1 | ВЫРАЖЕНИЕ1]

[AND УСЛОВИЕ2 | ВЫРАЖЕНИЕ2]

ORDER BY СТОЛБЕЦ1|ЦЕЛОЕ_ЗНАЧЕНИЕ [ASC|DESC];

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

В SQL предлагаются и некоторые сокращения. Столбец, указанный в списке ключевого слова ORDER BY, можно заменить числом. ЦЕЛОЕ_ЗНАЧЕНИЕ является значением, замещающим действительное имя столбца и соответствующим порядку столбца в списке после ключевого слова SELECT.

Основные операторы SQL

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

Введение

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

Определяют несколько категорий операторов SQL:

  • определение объектов базы данных;
  • манипулирование значениями;
  • защита и управление;
  • параметры сеанса;
  • информация о базе;
  • статический SQL;
  • динамический SQL.

Операторы SQL для манипулирования данными

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

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

имя таблицы (имя столбца 1, имя столбца 2)

VALUES (значение 1, значение 2).

Для использования оператора SQL запроса INSERT при нескольких значениях, применяется такой синтаксис:

имя таблицы 1 (имя столбца 1, имя столбца 2)

SELECT имя столбца 1, имя столбца 2

FROM имя таблицы 2

WHERE имя таблицы 2.имя столбца 1>2

Этот запрос выберет все данные из таблицы 2, которые больше 2 по столбцу 1 и вставит их в первую.

UPDATE. Как видно из названия, этот оператор SQL запроса обновляет данные в существующей таблице по определённому признаку.

UPDATE имя таблицы 1

SET имя столбца 2 = «Василий»

WHERE имя таблицы 1.имя столбца 1 = 1

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

DELETE. Удаляет данные из таблицы. Можно указать какое-либо условие или же убрать все строки.

DELETE FROM имя таблицы

WHERE имя таблицы.имя столбца 1 = 1

Приведённый запрос удалит из базы все данные со значением один в первом столбце. А вот так можно очистить всю таблицу:

DELETE FROM имя таблицы.

Далее стоит рассказать об операторе SELECT. Он является одним из самых важных, поэтому ему придётся посвятить отдельную главу.

Оператор SELECT

Главное назначение SELECT — выборка данных по определенным условиям. Результатом его работы всегда является новая таблица с отобранными данными. Оператор MS SQL SELECT может быть использован в массе различных запросов. Поэтому наряду с ним можно рассмотреть и другие смежные ключевые слова.

Для выбора всех данных из определённой таблицы используется знак «*».

FROM имя таблицы 1

Результатом работы данного запроса будет точная копия таблицы 1.

А здесь происходит выборка по условию WHERE, которое достаёт из таблицы 1 все значения, больше 2 в столбце 1.

FROM имя таблицы 1

WHERE имя таблицы 1.имя столбца 1 > 2

Также можно указать в выборке, что нужны только определённые столбцы.

SELECT имя таблицы 1.имя столбца 1

FROM имя таблицы 1

Результатом данного запроса будут все строки, со значениями из столбца 1. С помощью операторов MS SQL можно составить собственную таблицу, на ходу заменив, вычислив и подставив определённые значения.

имя таблицы 1.имя столбца 1


имя таблицы 1.имя столбца 2

имя таблицы 1.имя столбца 3

имя таблицы 1.имя столбца 2 * имя таблицы 1.имя столбца 3 AS SUMMA

FROM имя таблицы 1

Данный, на первый взгляд сложный запрос выполняет выборку всех значений из таблицы 1, затем создаёт новые колонки EQ и SUMMA. В первую заносит знак «+», во вторую произведение данных из столбца 2 и 3. Полученный результат можно представить в виде таблицы, для понимания как это работает:

При использовании оператора SELECT, можно сразу провести упорядочивание данных по какому-либо признаку. Для этого используется слово ORDER BY.

имя таблицы 1.имя столбца 1

имя таблицы 1.имя столбца 2

имя таблицы 1.имя столбца 3

FROM имя таблицы 1

ORDER BY имя столбца 2

Результирующая таблица будет выглядеть таким образом:

То есть все строки были установлены в таком порядке, чтобы в столбце 2 значения шли по возрастанию.

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

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

FROM Сотрудники, Зарплата

WHERE Сотрудники.Номер = Зарплата.Номер

Здесь происходит выборка из двух разных таблиц значений, объединённых по номеру. Результатом будет следующий набор данных:

Ещё немного о SELECT. Использование агрегатных функций

Один из основных операторов SQL SELECT может производить некоторые вычисления при выборке. Для этого он использует определённые функции и формулы.

К примеру, чтобы получить количество записей из таблицы «Сотрудники», нужно использовать запрос:

SELECT COUNT (*) AS N

В результате получится таблица с одним значением и столбцом.

В запросах можно использовать функции, вычисляющие сумму, максимальные и минимальные значения, а также среднее. Для этого применяются ключевые слова SUM, MAX, MIN, AVG.

Например, нужно провести выборку из уже известной таблицы «Зарплата»:

Можно применить такой запрос и посмотреть что получится:

SUM(Зарплата.Начислено) AS SUMMA

MAX(Зарплата.Начислено) AS MAX

MIN(Зарплата.Начислено) AS MIN

AVG(Зарплата.Начислено) AS SRED

Итоговая таблица будет такой:

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

Объединение, пересечение и разности

Объединить несколько запросов в SQL

WHERE Сотрудники.Номер = 1

FROM Сотрудники, Зарплата

WHERE Зарплата.Номер = 1

При этом стоит учитывать, что при таком объединении таблицы должны быть совместимы. То есть иметь одинаковое количество столбцов.

Синтаксис оператора SELECT и порядок его обработки

Первым делом SELECT определяет область, из которой он будет брать данные. Для этого используется ключевое слово FROM. Если не указано, что именно выбрать.

Затем может присутствовать SQL оператор WHERE. С его помощью SELECT пробегает по всем строкам таблицы и проверяет данные на соответствие условию.

Если в запросе имеется GROUP BY, то происходит группировка значений по указанным параметрам.

Операторы для сравнения данных

Их имеется несколько типов. В SQL операторы сравнения могут проверять различные типы значений.

«=». Обозначает, как можно догадаться, равенство двух выражений. Например, он уже использовался в примерах выше — WHERE Зарплата.Номер = 1.

«>». Знак больше. Если значение левой части выражения больше, то возвращается логическое TRUE и условие считается выполненным.

« =». Отличается от простых операторов больше и меньше, тем, что при равенстве операндов условие также будет истинным.

«<>». Не равно. Условие будет считаться TRUE, только если один операнд не равен другому. У него имеется ещё одна интерпретация — «!=».

Перевести данное ключевое слово можно как «похожий». Оператор LIKE в SQL используется примерно по такому же принципу — выполняет запрос по шаблону. То есть он позволяет расширить выборку данных из базы используя регулярные выражения.

Например, поставлена такая задача: из уже известной базы «Сотрудники» получить всех людей, чьё имя заканчивается на «я». Тогда запрос можно составить так:

WHERE Имя LIKE `%я`

Знак процента в данном случае означает маску, то есть любой символ и их количество. А по букве «я» SQL определит что последний символ должен быть именно таким.

Данный оператор SQL Server представляет собой реализацию множественного выбора. Он напоминает конструкцию switch во многих языках программирования. Оператор CASE в SQL выполняет действие по нескольким условиям.

Например, нужно выбрать из таблицы «Зарплата» максимальное и минимальное значение.

Тогда запрос можно составить так:

WHERE CASE WHEN SELECT MAX(Начислено) THEN Максимум


WHEN SELECT MIN(Начислено) THEN Минимум

В данном контексте система ищет максимальное и минимальное значение в столбце «Начислено». Затем с помощью END создаётся поле «итог», в которое будет заноситься «Максимум» или «Минимум» в зависимости от результата выполнения условия.

Кстати, в SQL имеется и более компактная форма CASE — COALESCE.

Операторы определения данных

Это вид позволяет проводить разнообразное изменение таблиц — создание, удаление, модификации и работу с индексами.

Первый из них, который стоит рассмотреть — CREATE TABLE. Он делает не что иное, как создаёт таблицу. Если просто набрать запрос CREATE TABLE, ничего не случится, так как нужно ещё указать несколько параметров.

Например, для создания уже знакомой таблицы «Сотрудники» нужно использовать команды:

CREATE TABLE Сотрудники

(Номер number(10) NOT NULL

Имя varchar(50) NOT NULL

Фамилия varchar(50) NOT NULL)

В это запросе, в скобках сразу же определяются имена полей и их типы, а также может ли он быть равен NULL.

DROP TABLE

Выполняет одну простую задачу — удаление указанной таблицы. Имеет дополнительный параметр IF EXISTS. Он поглощает ошибку при удалении, если искомая таблица не существует. Пример использования:

DROP TABLE Сотрудники IF EXISTS.

CREATE INDEX

В SQL имеется система индексов, которая позволяет ускорить доступ к данным. В общем, он представляет собой ссылку, которая указывает на определённый столбец. Создать индекс можно простым запросом:

CREATE INDEX название_индекса

Используется данный оператор в T-SQL, Oracle, PL SQL и многих других интерпретациях технологиях.

ALTER TABLE

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

Далее будут представлены различные варианты использования ALTER TABLE.

ADD. Осуществляет добавление столбца в таблицу. Синтаксис его такой: ALTER TABLE название_таблицы ADD название_столбца тип_хранимых_данных. Может иметь параметр IF NOT EXISTS, что подавить ошибку, если создаваемый столбец уже есть;

DROP. Удаляет столбец. Также имеет ключ IF EXISTS, без которого сгенерируется ошибка, говорящая о том, что требуемый столбец отсутствует;

CHANGE. Служит для переименования имени поля в указанное. Пример использования: ALTER TABLE название_таблицы CHANGE старое_имя новое_имя;

MODIFY. Данная команда поможет сменить тип и дополнительные атрибуты определённого столбца. А используется он вот так: ALTER TABLE название_таблицы MODIFY название_столбца тип_данных атрибуты;

CREATE VIEW

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

Процесс создания происходит с помощью простого запроса:

CREATE VIEW название представления AS SELECT FROM * название таблицы

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

Немного о функциях

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

COUNT. Производит подсчёт записей или строк в конкретной таблице. В качестве параметра можно указать имя столбца, тогда данные будут взяты из него. SELECT COUNT * FROM Сотрудники;

AVG. Данная функция применяется только на столбцы с числовыми данными. Ее результатом является определение среднего арифметического всех значений;

MIN и MAX. Эти функции уже использовались в этой статье. Определяют они максимальное и минимальное значения из указанного столбца;

SUM. Все просто — функция вычисляет сумму значений столбца. Применяется исключительно для числового вида данных. Добавив в запрос параметр DISTINCT, будут суммироваться только уникальные значения;

ROUND. Функция округления десятичных дробных чисел. В синтаксисе используется название столбца и количество знаков после запятой;

LEN. Простая функция, вычисляющая длину значений столбца. Результатом будет новая таблица с указанием количества символов;

NOW. Это ключевое слово используется для вычисления текущей даты и времени.

Дополнительные операторы

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

AS. Применяется, когда нужно визуально оформить результат, присваивая указанное имя получившейся таблице.

BETWEEN. Очень удобный инструмент для выборки. Он указывает область значений, среди которых нужно получить данные. На вход принимает параметр от и до какого числа используется диапазон;.

NOT. Оператор придаёт противоположность выражению.

TRUNCATE. Удаляет данные из указанного участка базы. Отличается от аналогичных операторов тем, что восстановить данные после его использования невозможно. Стоит учесть, что реализация данного ключевого слова в различных интерпретациях SQL может отличаться. Поэтому перед тем как пробовать использовать TRUNCATE, лучше ознакомиться со справочной информацией.

LIMIT. Устанавливает количество строк для вывода. Особенность оператора в том, что он всегда располагается в конце. Принимает один обязательный параметр и один опциональный. Первый указывает, сколько строк с выбранными данными нужно показать. А если используется второй, то оператор срабатывает как для диапазона значений.

UNION. Очень удобный оператор для объединения нескольких запросов. Он уже встречался среди примеров этой в этой статье. Можно вывести нужные строки из нескольких таблиц, объединив их UNION для более удобного использования. Синтаксис его такой: SELECT имя_столбца FROM имя_таблицы UNION SELECT имя_другого_столбца FROM имя_другой таблицы. В результате получится сводная таблица с объединёнными запросами.

PRIMARY KEY. Переводится как «первичный ключ». Собственно, именно такая терминология и используется в справочных материалах. Он означает уникальный идентификатор строки. Применяется, как правило, при создании таблицы для указания поля, которое и будет содержать его.

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

Несколько советов при разработке платформы для работы с SQL

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

Память. В этой статье были показаны несколько функций, способные выполнять некоторые задачи. При разработке оболочки для работы с базой, можно «перевесить» вычисление простых выражений на систему управления базами данных. В некоторых случаях это даёт значительный прирост в производительности.

Ограничения. Если нужно получить из базы с тысячами строк всего лишь двух, то стоит использовать операторы типа LIMIT или TOP. Не нужно извлекать данные средствами языка разработки оболочки.

Соединение. После получения данных из нескольких таблиц многие программисты начинают сводить их воедино средствами памяти оболочки. Но зачем? Ведь можно составить один запрос в котором это все будет присутствовать. Не придётся писать лишний код и резервировать дополнительную память в системе.

Сортировка. Если есть возможность применять упорядочивание в запросе, то есть силами СУБД, то нужно её использовать. Это позволит значительно сэкономить на ресурсах при работе программы или сервиса.


Много запросов. Если приходится вставлять множество записей последовательно, то для оптимизации следует задуматься о пакетной вставке данных одним запросом. Это также позволит увеличить производительность всей системы в целом.

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

Типы. Для экономии места и ресурсов нужно чутко относиться к видам используемых данных. Если есть возможность воспользоваться менее «тяжёлым» для памяти типом, то надо применять именно его. Например, если известно, что в данном поле числовое значение не будет превышать 255, то зачем использовать 4-байтный INT, если есть TINYINT в 1 байт.

Заключение

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

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

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

Основные операторы языка SQL. Интерактивный SQL

12.3. Использование языка SQL для выбора информации из таблицы

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

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

Ключевое слово ALL означает, что результатом будут все строки, удовлетворяющие условию запроса, в том числе и одинаковые строки. DISTINCT означает, что в результирующий набор не включаются одинаковые строки. Далее идет список атрибутов исходной таблицы, которые будут включены в таблицу-результат. Символ * означает, что в таблицу-результат включаются все атрибуты исходной таблицы.

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

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

Ключевое слово ORDER BY задает операцию упорядочения строк таблицы-результата по указанному списку атрибутов.

В предложении с ключевым словом GROUP BY задается список атрибутов группировки (разъяснение этого и последующего ключевого слова будет представлено немного позднее).

В предложении HAVING задаются условия, накладываемые на каждую группу.

Отдельно отметим, что ключевые слова FROM, WHERE, ORDER BY используются аналогичным образом и в других операторах манипулирования данными языка SQL .

Рассмотрим реализацию запросов для конкретного примера, представленного в «Использование формального аппарата для оптимизации схем отношений» (см. рис. 8.1)

Выдать список всех студентов.

Заметим, что если добавить к данному запросу предложение ORDER BY surname, то список будет упорядочен по фамилии. По умолчанию подразумевается, что сортировка производится по возрастанию. Если необходимо упорядочение по убыванию, после имени атрибута добавляется слово DESC .

Выдать список оценок, которые получил студент с кодом «1».

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

В предложении WHERE можно записывать выражение с использованием арифметических операторов сравнения ( , и т.д.) и логических операторов ( AND, OR, NOT ) как и в обычных языках программирования.

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

  • IN – вхождение в некоторое множество значений;
  • BETWEEN – вхождение в некоторый диапазон значений;
  • LIKE – проверка на совпадение с образцом;
  • IS NULL – проверка на неопределенное значение.

Оператор IN используется для проверки вхождения в некоторое множество значений. Так, запрос

дает тот же результат, что и вышеуказанный запрос (выведет идентификаторы всех абитуриентов, получивших хотя бы одну двойку или тройку на экзаменах).

Того же результата можно добиться, используя оператор BETWEEN :

Выдать список всех студентов, фамилии которых начинаются с буквы А.

В этом случае удобно использовать оператор LIKE .

Оператор LIKE применим исключительно к символьным полям и позволяет устанавливать, соответствует ли значение поля образцу. Образец может содержать специальные символы:

_ (символ подчеркивания) – замещает любой одиночный символ;

% (знак процента) – замещает последовательность любого числа символов.

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

  • MIN – минимальное значение в столбце;
  • MAX – максимальное значение в столбце;
  • SUM – сумма значений в столбце;
  • AVG – среднее значение в столбце;
  • COUNT – количество значений в столбце, отличных от NULL.

Следующий запрос считает среднее среди всех баллов, полученных студентами на экзаменах.

Естественно, можно использовать агрегатные функции совместно с предложением WHERE :

Данный запрос вычислит средний балл студента с кодом 100 по результатам всех сданных им экзаменов.

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

Все это, как обычно, может быть совмещено с предложением WHERE . При этом, не вдаваясь в тонкости выполнения запроса внутри СУБД , можно считать, что сначала выполняется выборка тех строк таблицы, которые удовлетворяют условиям из предложения WHERE , а потом производится группировка и агрегирование .

Приведем запрос , который вычисляет средний балл по оценкам, полученным на экзамене с кодом 100, для каждого студента.

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

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

Для того чтобы форматировать вывод , существуют различные возможности SQL . Так, например, допустимым является включение текста в запрос . Рассмотрим пример того, как это делается:

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

FROM Orders

Дата добавления: 2015-07-09 ; просмотров: 134 ; Нарушение авторских прав

WHERE (amt 2003 ));

5.Что может быть выведено в результате следующего запроса ?

SELECT *

FROM Orders

WHERE NOT ((odate = 10/03/1990 OR snum > 1006)

AND amt > = 1500 );

6. Как можно проще переписать такой запрос ?

SELECT snum, sname, city, comm

Мастер Йода рекомендует:  10 шагов навстречу собственному безлимитному VPN
Добавить комментарий