Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
536.pdf
Скачиваний:
1
Добавлен:
15.11.2022
Размер:
2.31 Mб
Скачать

UPDATE (обновить)

Обновляет данные, существующие в БД

Определение данных

 

CREATE ТАВЬЕ(создать таб­

Создает в БД новую таблицу

лицу)

 

DROP(Hciono4aTb)

Удаляет колонку из таблицы

ALTER ТАВЬЕ(переделать таб­

Изменяет структуру существующей

лицу)

таблицы

6.1.2. Список основных ключевых слов SQL:

 

AND (и)

HAVING (имеющий)

ORDER (порядок)

AVG (среднее значение)

IN (в)

SELECT (выбирать)

BETWEEN (между)

INSERT (вставлять)

SET (установить)

BY (по)

IS (есть)

SUM (сумма)

COUNT (считать)

INTO (внутрь)

TABLE (таблица)

CREATE (создать)

LIKE (такой как)

UNION (объединение)

DELETE (удалять)

МАХ (максимальный)

UPDATE (обновить)

DESC (обратный поря­

MIN (минимальный)

VALUES (значения)

док)

NOT (не)

WHERE (где)

01БТШСТ(исключая)

NULL (пустой)

 

EXISTS (существовать)

OR (или)

 

FROM (откуда)

 

 

GROUP (группировать)

 

 

6.2. Оператор SELECT

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

Оператор SELECT читает из базы данных и возвращает их в виде таб-i лицы результатов запроса.

Запрос к одной таблице:

Вывести все поля из таблицы Документ:

SELECT * FROM ДОКУМЕНТ

* - означает все поля, вместо нее можно указать какие-либо поля.

Вывести поля КОД, ДАТА, НОМЕР из таблицы Документ:

SELECT КОД, ДАТА, НОМЕР FROM ДОКУМЕНТ.

На рис. 10 приведена синтаксическая диаграмма оператора SELECT Он состоит из шести предложений. Предложения SELECT и FROM явля ются обязательными. Четыре остальных включаются в оператор толью

при необходимости. Ниже перечислены функции каждого из предложе­

ний.

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

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

Предложение WHERE (ГДЕ) показывает, что в результаты запроса следует включать только некоторые строки. Для отбора строк, включае­ мых в результаты запроса, используется условие поиска.

SELECT

f возвращаемый.столбец i *L

 

t

k DISTINCT

*

uFROM ~* спецификаторг

таблицы

L

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

Q

GROUP BY|"и м я столбца

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

ORDER BYf~спецификатор сортировки [

Рис. 10. Синтаксическая диаграмма оператора SELECT

Предложение GROUP BY (ГРУППИРОВКА) позволяет создать ито­ говый запрос. Обычный запрос включает в результаты запроса по одной строке для каждой строки из базы данных. Итоговый запрос, напротив, вначале группирует строки базы данных по определенному признаку, а за­ тем включает в результаты запроса одну итоговую строку для каждой группы.

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

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

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

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

иэлементы списка возвращаемых столбцов. Возвращаемый столбец может представлять собой:

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

2) константу, показывающую, что в каждой строке результатов за­ проса должно содержаться одно и то же значение;

3) выражение, показывающее, что SQL должен вычислять значение, помещаемое в результаты запроса, по формуле, определенной в выраже­ нии.

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

SELECT * FROM ГОРОДА

Это означает, что все данные для запроса будут взяты из таблицы

ГОРОДА.

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

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

Предположим, что если у нас в один день 10 документов, то для ис­ ключения дублирующихся элементов применяется ключевое слово DIS­ TINCT:

SELECT DISTINCT ДАТА FROM ДОКУМЕНТ

6.2.3. Предложение WHERE. SQL-запросы, считывающие из таблицы все строки, полезны при просмотре базы данных и создании отчетов, од­ нако редко применяются для чего-нибудь еще. Обычно требуется выбрать из таблицы несколько строк и включить в результаты запроса только их. Чтобы указать, какие строки требуется отобрать, следует использовать предложение WHERE. Ниже покажем несколько запросов, в которых ис­ пользуется это предложение.

Нам нужно достать все IDNKJMEHTA за 7 мая 2002 года:

(5.2.3 - 1) SELECT IDN_KJIHEHTA FROM ДОКУМЕНТ

WHERE ДАТА=’7.05.2000’

Нам нужно достать все документы, полученные за март 2000 года:

(5.2.3-2) SELECT *

FROM ДОКУМЕНТ

WHERE ДАТА > ’1.03.2000’ AND ДАТА <= ’31.03.2000’

Нам нужно достать все IDNJKJIHEHTA, у которых ПЖ_СКЛАДА= 1: (5.2.3-3)

SELECT IDNJCJIHEHTA FROM ДОКУМЕНТ WHERE IDN CKЛАДА= 1

6.2.4. Условия поиска. В SQL используется множество условий по­ иска, позволяющих эффективно и естественным образом создавать раз­ личные типы запросов. Ниже рассматриваются пять основных условий поиска:

1.Сравнение. Значение одного выражения сравнивается со значением другого выражения. Например, такое условие поиска используется для выбора всех документов, дата которых более поздняя, чем 1.03.2000.

2.Проверка на принадлежность диапазону значений. Проверяется, попадает ли указанное значение в определенный диапазон значений. На­ пример, тот же пример, что и у сравнения, только к этому еще добавляется: но не позднее, чем 9.03.2000.

3.Проверка на членство в множестве. Проверяется, совпадает ли

значение выражения с одним из значений из заданного множества. На­

пример, такое условие поиска используется для выбора клиентов, у кото­ рых IDN СКЛАДА=1.

4. Проверка на соответствие шаблону. Проверяется, соответствует ли строковое значение, содержащееся в столбце, определенному шаблону. Например, такое условие поиска используется для выбора клиентов на бу­ кву <<А».

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

Сравнение (=,<>,<,<=,>,>=). Наиболее распространенным условием по­ иска в SQL является сравнение. При сравнении SQL вычисляет и сравни­ вает значения двух выражений для каждой строки данных. Выражения мо­ гут быть как очень простыми, например содержать одно имя столбца или константу, так и более сложными - арифметическими выражениями. В SQL имеется шесть различных способов сравнения двух выражений:

Синтаксическая диаграмма сравнения

- выражение 1 -|--------

=

------- выражение 2

-

О .

_ < .

-

< = .

-

>

-

> = .

Когда SQL сравнивает значения двух выражений, могут получиться три результата:

1) если сравнение истинно, то результат проверки имеет значени TRUE;

2)если сравнение ложно, то результат проверки имеет значение

FALSE;

3)если хотя бы одно из двух выражений имеет значение NULL, то

результатом проверки будет значение NULL.

Запросы на сравнение вы можете посмотреть в п. 6.2.3. Предложе­ ние WHERE.

Составные условия поиска (AND, OR и NOT). Простые условия по­ иска, описанные выше, после применения к некоторой строке возвращают значения TRUE, FALSE или NULL. С помощью правил логики эти про­ стые условия можно объединять в более сложные, как показано ниже. Об­ ратим внимание на то, что условия поиска, объединенные с помощью ключевых слов AND, OR и NOT, сами могут быть составными.

WHERE-, n---------- 1 условие поиска - --------- fc ‘-NOT—*

AAND'I "

•-OR—1

Таблица истинности операции AND

AND

TRUE

FALSE

NULL

TRUE

TRUE

FALSE

NULL

FALSE

FALSE

FALSE

FALSE

NULL

NULL

FALSE

NULL

OR

Таблица истинности операции OR

 

TRUE

FALSE

NULL

TRUE

TRUE

TRUE

TRUE

FALSE

TRUE

FALSE

NULL

NULL

TRUE

NULL

NULL

NOT

Таблица истинности операции NOT

 

TRUE

FALSE

NULL

 

FALSE

TRUE

NULL

Предположим, что нам нужно достать все документы за опреде­ ленные промежутки времени, исключая 8 марта 2000 года:

SELECT *

FROM ДОКУМЕНТ

WHERE (ДАТА>’1.03.2000’ AND ДАТА<’13.03.2000’)

OR (ДАТА=’18.01.2000’) AND NOT (ДАТА=’8.03.2000’)

Вывести все документы за 8 января, 8 февраля, 8 марта 2000 года:

SELECT *

FROM ДОКУМЕНТ

WHERE ДАТА=’8.01.2000’ OR ДАТА=’8.02.2000’ OR ДАТА=’8.03.2000’

Проверка на принадлежность диапазону значений (BETWEEN).

Другой формой условия поиска является проверка на принадлежность диапазону значений (ключевое слово BETWEEN), схематически показан­ ная ниже. При этом проверяется, находится ли значение данных между двумя определенными значениями. В условие поиска входят три выраже­ ния. Первое выражение определяет проверяемое значение; второе и третье выражения определяют верхний и нижний пределы проверяемого диапа­ зона. Типы данных трех выражений должны быть сравнимыми.

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

(BETWEEN):

 

 

Проверяемое выражение\

Ъ BETWEEN нижнее выражение,

AND верхнее выражение

LNOTJ

 

Найти все документы за последний квартал 2000 года:

SELECT *

FROM ДОКУМЕНТ

WHERE ДАТА BETWEEN ’01.10.2000’ AND ’31.12.2000*

Вывести все перемещения для первых пяти номеров:

SELECT *

FROM ПЕРЕМЕЩЕНИЕ

WHERE ПОРЯДКОВ^ BETWEEN ’ 1 *AND ’5’

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

Синтаксическая диаграмма проверки на членство в множестве (IN):

----- Проверяемое выражение ( ~Т~1<онстанта' L-NOT-f41

Вывести все документы за 8 января, 8 февраля, 8 марта (5.2.4 - 1):

SELECT *

FROM ДОКУМЕНТ

WHERE ДАТА IN (‘8.01.2000’, ‘8.02.2000’, ‘8.03.2000’)

Вывести все перемещения, у которых цена равна 2000, 3000, 4000:

SELECT *

FROM ПЕРЕМЕЩЕНИЕ

WHERE ЦЕНА IN (‘2000’,’3000’,’4000’)

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

Проверка на равенство значению NULL (IS NULL). Значения NULL обеспечивают возможность применения трехзначной логики в условиях поиска. Для любой заданной строки результат применения условия может быть TRUE, FALSE или NULL (в случае, когда в одном из столбцов со­

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

Синтаксическая диаграмма проверки на равенство значению NULL

(IS NULL):

 

~Имя столбца IS

N U L f

_ N O TJ

 

Вывести всех клиентов, у которых город не определен:

SELECT *

 

FROM КЛИЕНТ

 

WHERE IDN_TOPOflA IS NULL

 

Проверка на соответствие шаблону (LIKE). Для чтения строк, в ко­ торых содержимое некоторого текстового столбца совпадает с заданным текстом, можно использовать простое сравнение. Например, следующий запрос считывает строку из таблицы КЛИЕНТ:

SELECT НАЗВАНИЕ FROM КЛИЕНТ

WHERE НАЗВАНИЕ(ИМЯ) =’Баранов Ко’

Однако очень легко можно забыть, какое именно название носит ин­ тересующая нас компания: «Бараков», «Баранов» или «Барановский». Проверка на соответствие шаблону позволяет выбрать из базы данных строки на основе частичного соответствия имени клиента.

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

Синтаксическая диаграмма проверки на соответствие шаблону

(LIKE):

 

------ Имя столбца

---------- LIKE шаблон'

 

_ N O T JГ

Подстановочные знаки. Подстановочный знак процента (%) совпада­ ет с любой последовательностью из нуля или более символов. Ниже при­ ведена измененная версия предыдущего запроса, в которой используется шаблон, содержащий знак «%»:

SELECT НАЗВАНИЕ(ИМЯ) FROM КЛИЕНТ

WHERE НАЗВАНИЕ(ИМЯ) LIKE ‘Бара% Ко.

Ключевое слово LIKE указывает SQL, что необходимо сравнивать со­ держимое столбца НАЗВАНИЕ(ИМЯ) с шаблоном «Smith% Согр.».

Подстановочный знак «_» (символ подчеркивания) совпадает с лю­ бым отдельным символом. Например:

Вывести всех клиентов на букву «А»:

SELECT * FROM КЛИЕНТ

WHERE НАЗВАНИЕ(ИМЯ) LIKE 1А%* OR НАЗВАНИЕ LIKE ‘_А%’

6.2.5. Сортировка результатов запроса (предложение ORDER BY).

Строки результатов запроса, как и строки таблицы базы данных, не имеют определенного порядка. Включив в оператор SELECT предложение OR­ DER BY, можно отсортировать результаты запроса. Это предложение, синтаксическая диаграмма которого показана ниже, состоит из ключевых слов ORDER BY, за которыми следует список имен или порядковых номе­ ров столбцов, разделенных запятыми.

ORDER B Y ' k имя столбца

jк

Jпорядковый номер столбца

Вывести все склады, отсортировав их по IDN MAT.OTB.:

SELECT * FROM СКЛАД

ORDER BY IDN_MAT.OTB.

Для сортировки в обратном порядке используется ключевое слово DESC.

6.2.6. Агрегатные функции. Для подведения итогов по информации, содержащейся в базе данных, в SQL предусмотрены агрегатные (стати­ стические) функции. Агрегатная функция принимает в качестве аргумента какой-либо столбец данных целиком, а возвращает одно значение, которое определенным образом подытоживает этот столбец. Таким образом, все запросы, использующие агрегатные функции, могут иметь в списке воз­ вращаемых столбцов только результаты применения агрегатных функций к полям или к их комбинациям и, кроме этого, возвращать только одну

строку (за исключением запросов с использованием предложения GROUP BY, которые рассмотрены ниже).

Стандартными агрегатными функциями являются SUM, MIN, MAX, AVG, COUNT.

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

Вычислить оборот за каждый день в течение месяца:

SELECT ДАТА_ДОК

SUM (КОЛ-ВО*ЦЕПА)

FROM ПЕРЕМЕЩЕНИЕ

WHERE ДАТА_ДОК BETWEEN ‘1.01.2000’ AND ’31.01.2000’

Вычисление экстремумов (MIN и МАХ). Агрегатные функции MIN () и МАХ () позволяют найти соответственно наименьшее и наибольшее зна­ чения в столбце. При этом столбец может содержать числовые или стро­ ковые значения либо значения даты/времени. Результат, возвращаемый этими функциями, имеет точно такой же тип данных, что и сам столбец.

Вывести максимальную цену товара:

SELECT МАХ (ЦЕНА)

FROM ПЕРЕМЕЩЕНИЕ

Когда был сделан самый первый из всех содержащихся в базе данных до­ кумент?

SELECT MIN (ДАТА)

FROM ДОКУМЕНТ

В случае применения агрегатных функций MIN (...) и МАХ (...) к чи­ словым данным числа сравниваются по арифметическим правилам (боль­ шие отрицательные числа меньше, чем маленькие отрицательные числа, которые меньше нуля; нуль меньше любого положительного числа). Срав­ нение дат происходит последовательно (более ранние даты считаются меньшими, чем более поздние). Сравнение интервалов времени выполня­ ется на основании их продолжительности (более короткие интервалы вре­ мени меньше, чем более длинные).

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

AVG () вначале суммирует все значения, содержащиеся в столбце, а затем делит сумму на число этих значений, возвращаемый ею результат может иметь не такой тип данных, как столбец. Например, если применить функ­ цию AVG () к столбцу целых чисел, результат будет либо десятичным числом, либо числом с плавающей запятой в зависимости от используемой СУБД.

Вычислить среднее значение цены и количества в таблице «Остатки»:

SELECT AVG(4EHA),AVG(KOJIH4ECTBO) FROM ОСТАТКИ

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

Вывести количество фирм, являющихся ЗЛО:

SELECT COUNT(*) FROM КЛИЕНТ

WHERE НАЗВАНИЕ LIKE ‘%ЗАО%’

6.2.7. Запросы с группировкой (предложение GROUP BY). Итоговые запросы напоминают итоговую информацию, находящуюся обычно в кон­ це отчета. Эти запросы «сжимают» подробные данные, содержащиеся в отчете, в одну строку итоговых результатов. Но, как известно, в отчетах иногда используются также промежуточные итоги. И точно так же бывает необходимо получать промежуточные итоги результатов запроса. Эту воз­ можность предоставляет предложение GROUP BY

Вычислить оборот за каждый день в течение месяца:

SELECT ДАТА_ДОК, SUM (КОЛ-ВО*ЦЕНА) FROM ПЕРЕМЕЩЕНИЕ

WHERE ДАТА_ДОК BETWEEN ‘1.01.2000’ AND ’31.01.2000’ GROUP BY ДАТА_ДОК

ORDER BY ДАТА_ДОК

Какова средняя цена для каждой материальной ценности:

SELECT IDN_MAT.UEH, AVG(UEHA) FROM ПЕРЕМЕЩЕНИЕ

GROUP BY ПЖ_МАТ.ЦЕН

Как видно из приведенных примеров, в предложении GROUP BY обя­ зательно перечисляются те поля, которые в списке возвращаемых столб­

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]