УП СУБД ч1
.pdfРис. 5.6. Окно со значением исполнения скрипта
Обратите внимание, что все сохраненные скрипты сохраняются после выхода из браузера.
Наконец, режим Query Builder позволяет создавать SQL-запросы в режиме конструктора при помощи средств графического интерфейса. Основное преимущество этого режима состоит в том, что пользователю нет необходимости знать все тонкости синтаксиса языка SQL, помнить имена таблиц и т.д., поскольку текст SQL-запроса создается автоматически. Этот режим бывает полезен при практической деятельности, в том числе потому что значительно ускоряет процесс создания запросов, однако в учебных целях предпочтительнее разрабатывать запросы в режимах SQL Commands или SQL Scripts.
Web-клиент, используемый в системе Oracle 10, по своим функциональным возможностям аналогичен клиенту Oracle XE; некоторые отличия касаются интерфейса системы.
Выводы
•в состав СБД входят следующие основные компоненты:
собственно системы баз данных, включая пользовательскую документацию;
средства для администрирования системой;
компоненты для обеспечения сетевого доступа;
интерпретатор команд языка SQL;
51
средства разработки приложений и схем баз данных, редакторы отчетов, экранных форм и т.д.;
средства диагностики и настройки производительности баз данных.
•к наиболее распространенным СБД относятся Oracle, Microsoft SQL Server, IBM DB2 и др.;
•система Oracle Express Edition является версией, доступной для обучения и некоммерческого использования;
•для доступа к Oracle XE используется Web-интерфейс, вызываемый при помощи Internet Browser, который позволяет создавать и исполнять отдельные SQL-запросы и скрипты, а также выполнять основные функции по управлению и администрированию системой.
Вопросы для контроля
1.Опишите состав компонент, входящих в состав типичной СБД.
2.Объясните основное различие между коммерческими
исвободно распространяемыми СБД.
3.Какие основные отличия существуют между Oracle Express Edition и полной версией Oracle?
4.Опишите основные возможности Web-клиента в системе Oracle Express Edition.
52
Раздел 6. Язык Oracle SQL. Общие сведения
Данный раздел содержит сведения об истории языка SQL, общие сведения о SQL-базах данных, структуре выражений языка и его основных конструкциях.
6.1. История языка SQL
История языка SQL восходит к 70-м годам XX века. Непосредственным предшественником данного языка являлся язык SEQUEL, предложенный Д. Чамберлином (Donald Chamberlin) и Р. Бойсом (Raymond Boyce) в 1974 г. Название SEQUEL, представляющее аббревиатуру от выражения Structured English Query Language, впоследствии было заменено на имя SQL, однако при произношении часто используется оригинальное слово «сиквел». Первой экспериментальной системой баз данных, основанной на языке SQL, считается система System/R, разработанная фирмой IBM.
По языку SQL были приняты стандарты, относящиеся к 1986–1989 годам, 1992 году (неформально называемый SQL2) и 1999 году (SQL3). Основное назначение стандартов состоит в унификации версий языка, реализованных в СБД различных поставщиков, а также в формулировании рекомендаций по его дальнейшему развитию.
6.2. Общие сведения
Текст, написанный на языке SQL, представляет собой набор команд, исполняемых по порядку; исполнение (интерпретация) каждой команды обычно не зависит от исполнения предыдущих команд. Файл с SQL-командами часто называют скриптом. Для разделения нескольких команд в файле необходимо использовать символ «;». Каждую команду можно записывать на нескольких строках.
Команда языка SQL содержит:
1. Служебные и зарезервированные слова, например: CREATE, SELECT. SQL-команда всегда начинается с зарезер-
53
вированного слова. Регистр букв при написании служебных слов значения не имеет.
2.Имена таблиц, полей и других объектов базы данных. Традиционно такое имя – это набор символов: букв латинского алфавита и цифр, начинающийся с буквы, которая не может содержать специальные символы и разделители (например, пробелы) и не может совпадать с зарезервированными словами; регистр букв также значения не имеет. Однако имена можно помещать в двойные кавычки, и в этом случае приведенные выше ограничения на состав имен не применяются; использование таких имен полезно, например, при определении объектов с именами на русском языке.
3.Литеральные константы (таблица 2). Строки, в отличие от имен объектов, записываются в одиночных кавычках. Следует иметь в виду, что формат вывода вещественных чисел и дат зависит от региональных настроек.
4.Операторы (например, арифметические), используемые для построения выражений.
5.Дополнительные символы, например скобки «(« и »)».
Таблица 2
|
Литеральные значения |
|
|
|
|
целые числа |
|
543 |
|
|
-4 |
|
|
|
вещественные |
|
-2.4 (десятичное представление) |
числа |
|
1.3E+01 (научная запись) |
|
|
$199.99 (денежная запись) |
|
|
|
строки |
|
‘abc’ |
|
|
‘Строка’ |
|
|
N’Строка из символов национальных алфавитов’ |
|
|
|
Даты |
|
‘10-JUL-08’ |
|
|
‘22, Friday August 2008’ |
|
|
‘22 08 2008’ |
|
|
|
Внутри SQL-команды слова должны разделяться стандартными разделителями, например пробелами и табуляцией; операторы обычно также считаются раздели телями.
54
Внутри одной команды или между командами можно вставлять комментарии, записываемые одним из следующих способов:
–-- текст комментария на одной строке (до конца строки);
–/* текст комментария на одной или на нескольких строках. После комментария запрос может продолжиться на той же строке */.
6.3. Структура запроса
SQL–база данных состоит из нескольких таблиц. Каждую таблицу можно представить как множество записей или строк; все строки в таблице имеют одинаковую структуру, которая определяется при создании таблицы. Для создания таблицы используется команда CREATE TABLE. Ниже приведен пример создания таблицы:
CREATE TABLE acceptedorders |
– принятые заказы |
(item CHAR(20), price FLOAT, quantity INT,
customer_address CHAR(100), customer_name CHAR(20), orderdate DATE );
Здесь item, price – имена полей таблицы, называемые также иногда колонками таблицы, а FLOAT, INT, CHAR – типы значений, хранящиеся в этих полях.
Для извлечения данных из SQL-таблиц используется команда SELECT. Ниже приведен простейший запрос в таб лице acceptedorders:
SELECT * FROM acceptedorders; |
(6.1) |
Этот запрос извлекает из указанной таблицы все строки и помещает их в результирующее множество, или выборку. Если SQL-запрос исполняется в среде интерпретатора, результирующее множество (все или только ее первые строчки) печатается на экране в виде ниже приведенной таблицы.
55
ITEM |
PRICE |
QUANTITY |
CUSTOMER_ |
CUSTOMER_ |
ORDER_ |
|
ADDRESS |
NAME |
DATE |
||||
|
|
|
||||
Watch |
199.99 |
1 |
Green str. 2 |
Mr.Pundleberry |
02-AUG-08 |
|
Book |
12.5 |
2 |
Green str. 2 |
Mr.Pundleberry |
15-AUG-08 |
|
DVD |
6.35 |
2 |
Docks |
Mr.O’Raily |
03-AUG-08 |
|
Disk |
||||||
|
|
|
|
|
||
Book |
12.5 |
1 |
Pall Mall, 3 |
Ms.Magpie |
11-AUG-08 |
|
Pizza |
5.5 |
3 |
Pall Mall, 3 |
Ms.Magpie |
02-AUG-08 |
|
PS3 |
400 |
1 |
Pall Mall, 3 |
Ms.Magpie |
01-AUG-08 |
|
Pizza |
5.5 |
3 |
Docks |
Mr.O’Raily |
02-AUG-08 |
Рис. 6.1. Значение запроса 6.1
В предыдущем запросе символ «*» использовался для обозначения всех полей таблицы. Более типичными являются запросы с явно указанными именами полей:
SELECT item, price, customer_address
FROM acceptedorders; |
(6.2) |
|||
|
|
|
|
|
|
ITEM |
PRICE |
CUSTOMER_ADDRESS |
|
|
Watch |
199.99 |
Green str. 2 |
|
|
DVD Disk |
6.35 |
Docks |
|
|
Book |
12.5 |
Pall Mall, 3 |
|
|
Pizza |
5.5 |
Pall Mall, 3 |
|
|
Pizza |
5.5 |
Docks |
|
|
Book |
12.5 |
Green str. 2 |
|
|
PS3 |
199.99 |
Pall Mall, 3 |
|
Рис. 6.2. Значение запроса 6.2
Заголовки колонок результирующего множества, как видно, совпадают с именами извлекаемых полей. Если имена полей некоторой таблицы пользователю неизвестны, можно воспользоваться командой DESCR, которая печатает имена полей, их типы и другую информацию о структуре таблицы.
DESCR acceptedorders; |
(6.3) |
56
Вобщем случае после слова SELECT в тексте запроса указывается список выражений, разделяемых запятой. В эти выражения могут входить:
1. Имена полей таблиц (эти таблицы должны быть перечислены после слова FROM текста запроса);
2. Литеральные константы, т.е. числа, строки и даты; 3. Операторы (арифметические «+», «-», «*». «/», операция
конкатенации (слияния) строк «||»), 4. Функции.
Специальным случаем выражения является списочное выражение – набор выражений, перечисляемых через запятую и заключенных в скобки, например:
– ( ‘Ada’, ‘Polie’, ‘Bill’);
– ( 123, 23).
Использование списочных выражений рассматривается
впоследующих разделах.
Вследующем запросе вычисляется стоимость товара с учетом количества заказанных единиц:
SELECT item, price*quantity , customer_address
FROM acceptedorders; |
(6.3) |
|
|
|
|
ITEM |
PRICE*QUANTITY |
CUSTOMER_ADDRESS |
Watch |
199.99 |
Green str. 2 |
DVD Disk |
12.7 |
Docks |
Book |
12.5 |
Pall Mall, 3 |
Pizza |
16.5 |
Pall Mall, 3 |
izza |
16.5 |
Docks |
Book |
25 |
Green str. 2 |
PS3 |
199.99 |
Pall Mall, 3 |
Рис. 6.3. Значение запроса 6.3
В результирующем множестве запроса в качестве имени колонки используется текст соответствующего выражения из группы SELECT, который в частном случае совпадает с именем поля; во второй колонке выборки предыдущего запроса в качестве ее имени помещен текст выражения price*quantity. Для каждого выражения можно указать новое имя (записываемое в двойных кавычках), которое получит соответствующая колонка, например:
57
SELECT item AS «Товар»,
rice*quantity AS «Общая стоимость»,
customer_address AS «Клиент» |
(6.4) |
|||
FROM acceptedorders; |
||||
|
|
|
|
|
|
Товар |
Общая стоимость |
Клиент |
|
|
Watch |
199.99 |
Green str. 2 |
|
|
DVD Disk |
12.7 |
Docks |
|
|
Book |
12.5 |
Pall Mall, 3 |
|
|
Pizza |
16.5 |
Pall Mall, 3 |
|
|
Pizza |
16.5 |
Docks |
|
|
Book |
25 |
Green str. 2 |
|
|
PS3 |
199.99 |
Pall Mall, 3 |
|
Рис. 6.4. Значение запроса 6.4
Служебное слово AS является необязательным и может опускаться. Переименование колонок выборки является полезным, например, для того чтобы присвоить колонке имя на русском языке.
Для того чтобы определить количество записей в таблице, можно использовать функцию COUNT():
SELECT COUNT(*) FROM acceptedorders; |
(6.5) |
COUNT(*)
7
Рис. 6.5. Значение запроса 6.5 |
|
Рассмотрим следующий запрос: |
|
SELECT customer_name FROM acceptedorders; |
(6.6) |
CUSTOMER_NAME
Mr.Pundleberry
Ms.Magpie
Ms.Magpie
Ms.Magpie
Mr.O’Raily
Mr.Pundleberry
Mr.O’Raily
Рис. 6.6. Значение запроса 6.6
58
В выборке каждое имя повторяется столько раз, сколько существует таких строк в исходной таблице. Для удаления дубликатов из результирующего множества используется конструкция DISTINCT, применение которой иллюстрируется в следующем примере:
SELECT DISTINCT customer_name |
(6.7) |
FROM acceptedorders; |
CUSTOMER_NAME
Mr.Pundleberry
Mr.O’Raily
Ms.Magpie
Рис. 6.7. Значение запроса 6.7
Для селекции (отбора) строк исходной таблицы по различным условиям используется конструкция WHERE, после которой специфицируется (указывается) логическое выражение. Например, следующий запрос помещает в результирующее множество только записи с ценой товара более 100 за единицу:
SELECT item, price, customer_address |
|
|||
|
FROM acceptedorders |
(6.8) |
||
|
WHERE price > 100; |
|||
|
|
|
|
|
|
ITEM |
PRICE |
CUSTOMER_ADDRESS |
|
|
Watch |
199.99 |
Green str. 2 |
|
|
PS3 |
400 |
Pall Mall, 3 |
|
Рис. 6.8. Значение запроса 6.8
Подробнее логические выражения рассматриваются в следующем подразделе.
Следует иметь в виду, что порядок записей в результирующем множестве запроса будет в общем случае совершенно отличным от порядка записей в исходной таблице (точнее говоря, от порядка добавления записей в таблицу). Для явного упорядочивания предназначена конструкция ORDER BY,
59
после которой указывается список выражений (например, имен полей), по которым происходит упорядочивание результирующего множества.
SELECT customer_name, item |
FROM acceptedorders |
|||||
ORDER BY customer_name; |
|
|
(6.9) |
|||
|
|
|
|
|
|
|
|
|
CUSTOMER_NAME |
ITEM |
|
||
|
|
Mr.O’Raily |
Pizza |
|
||
|
|
Mr.O’Raily |
DVD Disk |
|
||
|
|
Mr.Pundleberry |
Book |
|
||
|
|
Mr.Pundleberry |
Watch |
|
||
|
|
Ms.Magpie |
Pizza |
|
||
|
|
Ms.Magpie |
Book |
|
||
|
|
Ms.Magpie |
PS3 |
|
||
|
|
Рис. 6.9. Значение запроса 6.9 |
|
|||
SELECT customer_name, item |
FROM acceptedorders |
|||||
ORDER BY customer_name, item; |
(6.10) |
|||||
|
|
|
|
|
|
|
|
|
CUSTOMER_NAME |
|
ITEM |
|
|
|
|
Mr.O’Raily |
|
DVD Disk |
|
|
|
|
Mr.O’Raily |
|
Pizza |
|
|
|
|
Mr.Pundleberry |
|
Book |
|
|
|
|
Mr.Pundleberry |
|
Watch |
|
|
|
|
Ms.Magpie |
|
Book |
|
|
|
|
Ms.Magpie |
|
PS3 |
|
|
|
|
Ms.Magpie |
|
Pizza |
|
|
Рис. 6.10. Значение запроса 6.10
В запросах также можно использовать специальные поля ROWID и ROWNUM, которые присутствуют в любой таблице, но не выводятся по команде DESC или SELECT * … Поле ROWID содержит адрес данной записи; это поле обычно использовать не рекомендуется.
SELECT customer_name, rowid, rownum |
(6.11) |
FROM acceptedorders |
60