Предложение FROM команды SELECT — КиберПедия 

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

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

Предложение FROM команды SELECT

2020-05-07 201
Предложение FROM команды SELECT 0.00 из 5.00 0 оценок
Заказать работу

В предложении FROM перечисляются все объекты (один или несколько), из которых производится выборка данных (рис.2). Каждая таблица или представление, о которых упоминается в запросе, должны быть перечислены в предложении FROM.

Ограничения на число выводимых строк

Число возвращаемых в результате запроса строк может быть ограничено путем использования предложения WHERE, содержащего условия отбора (предикат, рис.2). Условие отбора для отдельных строк может принимать значения true, false или unnown. При этом запрос возвращает в качестве результата только те строки (записи), для которых предикат имеет значение true.

Типы предикатов, используемых в предложении WHERE:

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

= равно

<> не равно

!= не равно

> больше

< меньше

>= больше или равно

<= меньше или равно

BETWEEN

IN

LIKE

CONTAINING

IS NULL

EXIST

ANY

ALL

Операции сравнения

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

Что же может быть элементом сравнения? Элементом сравнения может выступать:

значение поля

литерал

арифметическое выражение

агрегирующая функция

другая встроенная функция

значение (значения), возвращаемые подзапросом.

При сравнении литералов конечные пробелы игнорируются. Так, предложение WHERE first_name = 'Петр ' будет иметь тот же результат, что и предложение WHERE first_name = 'Петр'.

SELECT first_name, last_name, dept_no

FROM employee

WHERE job_code = "Admin"

получить список сотрудников (и номера их отделов), занимающих должность администраторов

FIRST_NAME LAST_NAME DEPT_NO
Terri Leev 000
Ann Bennet 120
Sue Anne O'Brien 670
Kelly Brown 600

SELECT first_name, last_name, dept_no,

  job_country

FROM employee

WHERE job_country <> "USA"

получить список сотрудников (а также номера их отделов и страну), работающих вне США

FIRST_NAME LAST_NAME DEPT_NO JOB_COUNTRY
Ann Bennet 120 England
Roger Reeves 120 England
Willie Stansbury 120 England
Claudia Sutherland 140 Canada
Yuki Ichida 115 Japan
Takashi Yamamoto 115 Japan
Roberto Ferrari 125 Italy
Jacques Glon 123 France
Pierre Osborne 121 Switzerland

BETWEEN

Предикат BETWEEN задает диапазон значений, для которого выражение принимает значение true. Разрешено также использовать конструкцию NOT BETWEEN.

SELECT first_name, last_name, salary

FROM employee

WHERE salary BETWEEN 20000 AND 30000

получить список сотрудников, годовая зарплата которых больше 20000 и меньше 30000

FIRST_NAME LAST_NAME SALARY
Ann Bennet 22935.00
Kelly Brown 27000.00

Тот же запрос с использованием операторов сравнения будет выглядеть следующим образом:

SELECT first_name, last_name, salary

FROM employee

WHERE salary >= 20000

AND salary <= 30000

получить список сотрудников, годовая зарплата которых больше 20000 и меньше 30000

FIRST_NAME LAST_NAME SALARY
Ann Bennet 22935.00
Kelly Brown 27000.00

Запрос с предикатом BETWEEN может иметь следующий вид:

SELECT first_name, last_name, salary

FROM employee

WHERE last_name BETWEEN "Nelson" AND "Osborne"

получить список сотрудников, фамилии которых начинаются с "Nelson" и заканчиваются "Osborne"

FIRST_NAME LAST_NAME SALARY
Robert Nelson 105900.00
Carol Nordstrom 42742.50
Sue Anne O'Brien 31275.00
Pierre Osborne 110000.00

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

SELECT first_name, last_name, salary

FROM employee

WHERE last_name BETWEEN "Nel" AND "Osb"

получить список сотрудников, фамилии которых находятся между "Nel" и "Osb"

FIRST_NAME LAST_NAME SALARY
Robert Nelson 105900.00
Carol Nordstrom 42742.50
Sue Anne O'Brien 31275.00

В данном примере значений "Nel" и "Osb" в базе данных нет. Однако, все сотрудники, входящие в диапазон, в нижней части которого начало фамилий совпадает с "Nel" (т.е. выполняется условие "больше или равно"), а в верхней части фамилия не более "Osb" (т.е. выполняется условие "меньше или равно" - а именно "O", "Os", "Osb"), попадут в выборку. Отметим, что при выборке с использованием предиката BETWEEN поле, на которое накладывается диапазон, считается упорядоченным по возрастанию.

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

SELECT first_name, last_name, hire_date

FROM employee

WHERE hire_date NOT BETWEEN "1-JAN-1989" AND "31-DEC-1993"

получить список самых "старых" и самых "молодых" (по времени поступления на работу) сотрудников

FIRST_NAME LAST_NAME HIRE_DATE
Robert Nelson 28-DEC-1988
Bruce Young 28-DEC-1988
Pierre Osborne 3-JAN-1994
John Montgomery 30-MAR-1994
Mark Guckenheimer 2-MAY-1994

IN

Предикат IN проверяет, входит ли заданное значение, предшествующее ключевому слову "IN" (например, значение столбца или функция от него) в указанный в скобках список. Если заданное проверяемое значение равно какому-либо элементу в списке, то предикат принимает значение true. Разрешено также использовать конструкцию NOT IN.

SELECT first_name, last_name, job_code

FROM employee

WHERE job_code IN ("VP", "Admin", "Finan")

получить список сотрудников, занимающих должности "вице-президент", "администратор", "финансовый директор"

FIRST_NAME LAST_NAME JOB_CODE
Robert Nelson VP
Terri Lee Admin
Stewart Hall Finan
Ann Bennet Admin
Sue Anne O'Brien Admin
Mary S. MacDonald VP
Kelly Brown Admin

А вот пример запроса, использующего предикат NOT IN:

SELECT first_name, last_name, job_country

FROM employee

WHERE job_country NOT IN

("USA", "Japan", "England")

получить список сотрудников, работающих не в США, не в Японии и не в Великобритании

FIRST_NAME LAST_NAME JOB_COUNTRY
Claudia Sutherland Canada
Roberto Ferrari Italy
Jacques Glon France
Pierre Osborne Switzerland

LIKE

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

% - замещает любое количество символов (в том числе и 0),

_ - замещает только один символ.

Разрешено также использовать конструкцию NOT LIKE.

SELECT first_name, last_name

FROM employee

WHERE last_name LIKE "F%"

получить список сотрудников, фамилии которых начинаются с буквы "F"

FIRST_NAME LAST_NAME
Phil Forest
Pete Fisher
Roberto Ferrari

SELECT first_name, last_name

FROM employee

WHERE first_name LIKE "%er"

получить список сотрудников, имена которых заканчиваются буквами "er"

FIRST_NAME LAST_NAME
Roger De Souza
Roger Reeves
Walter Steadman

А такой запрос позволяет решить проблему произношения (и написания) имени:

SELECT first_name, last_name

FROM employee

WHERE first_name LIKE "Jacq_es"

найти сотрудника(ов), в имени которого неизвестно произношение буквы перед окончанием "es"

FIRST_NAME LAST_NAME
Jacques Glon

Что делать, если требуется найти строку, которая содержит указанные выше специальные символы ("%", "_") в качестве информационных символов? Есть выход! Для этого с помощью ключевого слова ESCAPE нужно определить так называемый escape-символ, который, будучи поставленным перед символом "%" или "_", укажет, что этот символ является информационным. Escape-символ не может быть символом "\" (обратная косая черта) и, вообще говоря, должен представлять собой символ, никогда не появляющийся в упоминаемом столбце как информационный символ. Часто для этих целей используются символы "@" и "~".

SELECT first_name, last_name

FROM employee

WHERE first_name LIKE "%@_%" ESCAPE "@"

получить список сотрудников, в имени которых содержится "_" (знак подчеркивания)

CONTAINING

Предикат CONTAINING аналогичен предикату LIKE, за исключением того, что он не чувствителен к регистру букв. Разрешено также использовать конструкцию NOT CONTAINING.

SELECT first_name, last_name

FROM employee

WHERE last_name CONTAINING "ne"

получить список сотрудников, фамилии которых содержат буквы "ne", "Ne", "NE", "nE"

FIRST_NAME LAST_NAME
Robert Nelson
Ann Bennet
Pierre Osborne

IS NULL

В SQL-запросах NULL означает, что значение столбца неизвестно. Поисковые условия, в которых значение столбца сравнивается с NULL, всегда принимают значение unknown (и, соответственно, приводят к ошибке), в противоположность true или false, т.е.

WHERE dept_no = NULL

или даже

WHERE NULL = NULL.

Предикат IS NULL принимает значение true только тогда, когда выражение слева от ключевых слов "IS NULL" имеет значение null (пусто, не определено). Разрешено также использовать конструкцию IS NOT NULL, которая означает "не пусто", "имеет какое-либо значение".

SELECT department, mngr_no

FROM department

WHERE mngr_no IS NULL

получить список отделов, в которых еще не назначены начальники

DEPARTMENT MNGR_NO
Marketing <null>
Software Products Div. <null>
Software Development <null>
Field Office: Singapore <null>

Предикаты EXIST, ANY, ALL, SOME, SINGULAR мы рассмотрим в разделе, рассказывающем о подзапросах.

Логические операторы

К логическим операторам относятся известные операторы AND, OR, NOT, позволяющие выполнять различные логические действия: логическое умножение (AND, "пересечение условий"), логическое сложение (OR, "объединение условий"), логическое отрицание (NOT, "отрицание условий"). В наших примерах мы уже применяли оператор AND. Использование этих операторов позволяет гибко "настроить" условия отбора записей.

Оператор AND означает, что общий предикат будет истинным только тогда, когда условия, связанные по "AND", будут истинны.

Оператор OR означает, что общий предикат будет истинным, когда хотя бы одно из условий, связанных по "OR", будет истинным.

Оператор NOT означает, что общий предикат будет истинным, когда условие, перед которым стоит этот оператор, будет ложным.

В одном предикате логические операторы выполняются в следующем порядке: сначала выполняется оператор NOT, затем - AND и только после этого - оператор OR. Для изменения порядка выполнения операторов разрешается использовать скобки.

SELECT first_name, last_name, dept_no,

  job_code, salary

FROM employee

WHERE dept_no = 622

OR job_code = "Eng"

AND salary <= 40000

ORDER BY last_name

получить список служащих, занятых в отделе 622 или на должности "инженер" с зарплатой не выше 40000

FIRST_NAME LAST_NAME DEPT_NO JOB_CODE SALARY
Jennifer M. Burbank 622 Eng 53167.50
Phil Forest 622 Mngr 75060.00
T.J. Green 621 Eng 36000.00
Mark Guckenheimer 622 Eng 32000.00
John Montgomery 672 Eng 35000.00
Bill Parker 623 Eng 35000.00
Willie Stansbury 120 Eng 39224.06

SELECT first_name, last_name, dept_no,

  job_code, salary

FROM employee

WHERE (dept_no = 622

OR job_code = "Eng")

AND salary <= 40000

ORDER BY last_name

получить список служащих, занятых в отделе 622 или на должности "инженер", зарплата которых не выше 40000

FIRST_NAME LAST_NAME DEPT_NO JOB_CODE SALARY
T.J. Green 621 Eng 36000.00
Mark Guckenheimer 622 Eng 32000.00
John Montgomery 672 Eng 35000.00
Bill Parker 623 Eng 35000.00
Willie Stansbury 120 Eng 39224.06

Преобразование типов (CAST)

В SQL имеется возможность преобразовать значение столбца или функции к другому типу для более гибкого использования операций сравнения. Для этого используется функция CAST.

Типы данных могут быть конвертированы в соответствии со следующей таблицей:

Из типа данных В тип данных
NUMERIC CHAR, VARCHAR, DATE
CHAR, VARCHAR NUMERIC, DATE
DATE CHAR, VARCHAR, DATE

SELECT first_name, last_name, dept_no

FROM employee

WHERE CAST(dept_no AS char(20))

CONTAINING "00"

получить список сотрудников, занятых в отделах, номера которых содержат "00"

FIRST_NAME LAST_NAME DEPT_NO
Robert Nelson 600
Terri Lee 000
Stewart Hall 900
Walter Steadman 900
Mary S. MacDonald 100
Oliver H. Bender 000
Kelly Brown 600
Michael Yanowski 100

Изменение порядка выводимых строк (ORDER BY)

Порядок выводимых строк может быть изменен с помощью опционального (дополнительного) предложения ORDER BY в конце SQL-запроса. Это предложение имеет вид:

ORDER BY <порядок строк> [ASC | DESC]

Порядок строк может задаваться одним из двух способов:

именами столбцов

номерами столбцов.

Способ упорядочивания определяется дополнительными зарезервированными словами ASC и DESC. Способом по умолчанию - если ничего не указано - является упорядочивание "по возрастанию" (ASC). Если же указано слово "DESC", то упорядочивание будет производиться "по убыванию".

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


Поделиться с друзьями:

Своеобразие русской архитектуры: Основной материал – дерево – быстрота постройки, но недолговечность и необходимость деления...

История развития хранилищ для нефти: Первые склады нефти появились в XVII веке. Они представляли собой землянные ямы-амбара глубиной 4…5 м...

Индивидуальные очистные сооружения: К классу индивидуальных очистных сооружений относят сооружения, пропускная способность которых...

История развития пистолетов-пулеметов: Предпосылкой для возникновения пистолетов-пулеметов послужила давняя тенденция тяготения винтовок...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.053 с.