Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

УП СУБД ч1

.pdf
Скачиваний:
14
Добавлен:
11.06.2015
Размер:
1.05 Mб
Скачать

Рис. 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