Оглавление
Вопрос №1. SQL и его история. 1
Вопрос №2. Описание основных операторов SQL.. 1
Арифметические функции. 4
Функции обработки строк. 5
Специальные функции. 6
Функции для обработки даты.. 7
Использование агрегатных функций в запросах. 7
Вопрос №1. SQL и его история
Единственным средством общения и администраторов баз данных, и проектировщиков, и разработчиков, и пользователей с реляционной базой данных является структурированный язык запрос SQL (Structured Query Language). SQL есть полнофункциональный язык манипулирования данными в реляционных базах данных. В настоящее время он является общепризнанным, стандартным интерфейсом для реляционных баз данных, таких как Oracle, Informix, Sybase, DB/2, MS SQL Server и ряда других (стандарты ANSI и ISO). SQL - непроцедурный язык, который предназначен для обработки множеств, состоящих из строк и колонок таблиц реляционной базы данных. Хотя существуют его расширения, допускающие процедурную обработку. Проектировщики баз данных используют SQL для создания всех физических объектов реляционной базы данных.
Теоретические основы SQL были заложены в известной статье Кодда, положившей начало развитию теории реляционных БД. Первая практическая реализации была выполнена в исследовательских лабораториях фирмы IBM Chamberlin D.D. и Royce R.F. Промышленное применение SQL было впервые реализовано в СУБД Ingres. Одной из первых промышленных реляционных СУБД является Oracle. По сути дела, реляционная СУБД — это программное обеспечение, которое управляет работой реляционной базы данных.
Первый международный стандарт языка SQL был принят в 1989 г. (SQL-89). В конце 1992 г. был принят новый международный стандарт SQL-92. В настоящее время большинство производителей реляционных СУБД используют его в качестве базового. Однако работы по стандартизации языка SQL далеки от завершения и уже разработан проект стандарта SQL-99, который вводит в обиход языка понятие объекта и разрешает на него ссылаться в операторах SQL: В исходном варианте SQL не было команд управления потоком данных, они появились в недавно принятом стандарте ISO/IEC 9075-5: 1996 дополнительной части SQL.
|
Каждой конкретной СУБД соответствует своя собственная реализация SQL, в целом поддерживающая определенный стандарт, но имеющая свои особенности. Эти реализации называются диалектами. Так, стандарт 1SO/IEC 9075-5 предусматривает объекты, называемые постоянно хранимыми модулями или PSM-модулями (Persistent Stored Modules). В СУБД Oracle расширение PL/SQL является аналогом указанного выше расширения стандарта'.
Вопрос №2. Описание основных операторов SQL
SQL состоит из набора команд манипулирования данными в реляционной базе данных, которые позволяют создавать объекты реляционной базы данных, модифицировать данные в таблицах (вставлять, удалять, исправлять), изменять схемы отношений базы данных, выполнять вычисления над данными, делать выборки из базы данных, поддерживать безопасность и целостность данных.
Весь набор команд SQL можно разбить на следующие группы:
· команды определения данных (DDL - Data Defininion Language);
· команды манипулирования данными (DML — Data Manipulation Language);
· команды выборки данных (DQL - Data Query Language);
· команды управления транзакциями;
· команды управления данными.
При выполнении каждая команда SQL проходит четыре фазы обработки:
|
· фаза синтаксического разбора, которая включает проверку синтаксиса команды, проверку имен таблиц и колонок в базе данных, а также подготовку исходных данных для оптимизатора;
· фаза оптимизации, которая включает подстановку действительных имен таблиц и колонок базы данных в представление, идентификацию возможных вариантов выполнения команды, определение стоимости выполнения каждого варианта, выбор наилучшего варианта на основе внутренней статистики;
· фаза генерации исполняемого кода, которая включает построение выполняемого кода команды;
· фаза выполнения команды, которая включает выполнение кода команды.
В настоящее время оптимизатор является составной частью любой промышленной реализации SQL. Работа оптимизатора основана на сборе статистики о выполняемых командах и выполнении эквивалентных алгебраических преобразований с отношениями базы данных. Такая статистика сохраняется в системном каталоге базы данных. Системный каталог является словарем данных для каждой базы данных и содержит информацию о таблицах, представлениях, индексах, колонках, пользователях и их привилегиях доступа. Каждая база данных имеет свой системный каталог, который представляет совокупность предопределенных таблиц базы данных.
Таблица 8.1 содержит список команд SQL в соответствии с принятым стандартом, за исключением некоторых практически не используемых в диалектах команд.
Таблица 8.1. Типичный список команд SQL
Команда | Описание |
Команды определения данных объектов | |
ALTER TABLE | Изменяет описание таблицы (схему отношения) |
CREATE EVENT | Создает событие таймера в базе данных |
CREATE INDEX | Создаст индекс для таблицы |
CREATE SEQUENCE | Создает последовательность |
CREATE TABLE | Определяет таблицу |
CREATE TABLESPACE | Создаст табличное пространство |
CREATE TRIGGER | Создает триггер в базе данных |
CREATE VIEW | Определяет представление на таблицах |
DROP INDEX | Физически удаляет индекс из базы данных |
DROP SEQUENCE | Удаляет последовательность |
DROP TABLE | Физически удаляет таблицу из базы данных |
DROP TABLESPACE | Удаляет табличное пространство |
DROP VIEW | Удаляет представление |
Команды манипулирования данными | |
DELETE | Удаляет одну или более строк из таблицы базы данных |
INSERT | Вставляет одну или более строк в таблицу базы данных |
UPDATE | Обновляет значения колонок в таблице базы данных |
Команды выборки данных | |
SELECT | Выполняет запрос на выборку данных из таблиц и представлений |
UNION | Объединяет в одной выборке результаты выполнения двух или более команд SELECT |
Команды управления транзакциями | |
COMMIT | Завершает транзакцию и физически актуализирует текущее состояние базы данных |
ROLLBACK | Завершает транзакцию и возвращает текущее состояние базы данных на момент последней завершенной транзакции и контрольной точки |
SAVEPOINT | Назначает контрольную точку внутри транзакции |
Команды управления данными | |
ALTER DATABASE | Изменяет группы хранения или журналы транзакций |
ALTER DBAREA | Изменяет размер областей хранения базы данных |
ALTER PASSWORD | Изменяет пароль для доступа к базе данных |
ALTER STOGROUP | Изменяет состав областей хранения в группе хранения |
CHECK DATABASE | Проверяет целостность базы данных |
CHECK INDEX | Проверяет целостность индекса |
CHECK TABLE | Проверяет целостность таблицы и индекса |
CREATE DATABASE | Физически создает базу данных |
CREATE DBAREA | Создает область хранения базы данных |
CREATE STOGROUP | Создает группу хранения |
CREATE SYSNONYM | Создает синоним для таблицы или представления |
DEINSTALL DATABASE | Делает базу данных недоступной пользователям вычислительной сети |
DROP DATABASE | Физически удаляет базы данных |
DROP DBAREA | Физически удаляет область хранения базы данных |
DROP STOGROUP | Удаляет группу хранения |
GRANT | Определяет привилегии пользователей и разграничение доступа к базе данных |
INSTALL DATABASE | Делает базу данных доступной пользователям вычислительной сети |
LOCK DATABASE | Блокирует текущую активную базу данных |
REVOKE | Отменяет привилегии пользователей и разграничения доступа к базе данных |
SET DEFAULT STOGROUP | Определяет группу хранения по умолчанию |
UNLOCK DATABASE | Деблокирует текущую активную базу данных |
UPDATE STATISTIC | Обновляет статистику для базы данных |
Другие команды | |
COMMENT ON | Размещает в системном каталоге комментарии к описанию объектов БД |
CREATE SYNONYM | Определяет в системном каталоге альтернативные имена для таблиц и представлений БД |
DROP SYNONYM | Удаляет из системного каталога альтернативные имена для таблиц и представлений БД |
LABEL | Изменяет метки системных описаний |
ROWCOUNT | Вычисляет число строк в таблице БД |
Набор команд SQL, перечисленный в таблице, не является полным. Этот список приведен, чтобы вы составили впечатление о возможностях SQL в целом. Для получения полного списка команд следует обратиться к соответствующему руководству для конкретной СУБД. Следует помнить, что SQL является единственным средством общения всех категорий пользователей с реляционными базами данных.
|
Арифметические функции
SQL поддерживает полный набор арифметических операций и математических функций для построения арифметических выражений над колонками базы данных (+, -, *, /, ABS, LN, SQRT и т.д.).
Список основных встроенных математических функций дан ниже в таблице 8.2.
Математическая функция | Описание |
ABS(X) | Возвращает абсолютное значение числа X |
ACOS(X) | Возвращает арккосинус числа X |
ASIN(X) | Возвращает арксинус числа X |
ATAN(X) | Возвращает арктангенс числа X |
COS(X) | Возвращает косинус числа X |
EXP(X) | Возвращает экспоненту числа X |
SIGN(X) | Возвращает -], если X < 0, 0, если X = 0, + 1, если X > 0 |
LN(X) | Возвращает натуральный логарифм числа X |
MOD(X,Y) | Возвращает остаток от деления X на Y |
CEIL(X) | Возвращает наименьшее целое, большее или равное X |
ROUND(X,n) | Округляет число X до числа с п знаками после десятичной точки |
SIN(X) | Возвращает синус числа X |
SQRT(X) | Возвращает квадратный корень числа X |
TAN(X) | Возвращает тангенс числа X |
FLOOR(X) | Возвращает наибольшее целое, меньшее или равное X |
LOG(a,X) | Возвращает логарифм числа X по основанию А |
SINH(X) | Возвращает гиперболический синус числа X |
COSH(X) | Возвращает гиперболический косинус числа X |
TANH(X) | Возвращает гиперболический тангенс числа X |
TRANC(X.n) | Усекает число X до числа с п знаками после десятичной точки |
POWER(A,X) | Возвращает значение А, возведенное в степень X |
Набор встроенных функций может изменяться в зависимости от версии СУБД одного производителя и также в СУБД различных производителей. Так, например, в СУБД SQLBase, Centure Inc. есть функция @ATAN2(X,Y), которая возвращает арктангенс Y/X, но отсутствует функция SIGN(X).
Арифметические выражения необходимы для получения данных, которые непосредственно не сохраняются в колонках таблиц базы данных, но значения которых необходимы пользователю. Допустим, что вам необходим список служащих, показывающий выплату, которую получил каждый служащий с учетом премий и штрафов.
SELECT ENAME, SAL, COMM. FINE, SAL + COMM - FINE
FROM EMPLOYEE
ORDER BY DEPNO;
Арифметическое выражение SAL + COMM - FINE выводится как новая колонка в результирующей таблице, которая вычисляется в результате выполнения запроса. Такие колонки называют еще производными (вычисляемыми) атрибутами или полями.
Функции обработки строк
SQL предоставляет вам широкий набор функций для манипулирования со строковыми данными (конкатенация строк, CHR, LENGTH, INSTR и другие). Список основных функций для обработки строковых данных приведен в таблице 8.3.
Таблица 8.3. Функции SQL для обработки строк
Функция | Описание |
CHR(N) | Возвращает символ ASCII кода для десятичного кода N |
ASCII(S) | Возвращает десятичный ASCII код первого символа строки |
INSTR(S2,SI,pos|,N|) | Возвращает позицию строки SI в строке S2 большую или равную pos. N — число вхождений |
LENGTH(S) | Возвращает длину строки |
LOWER(S) | Заменяет все символы строки на прописные символы |
INITCAP(S) | Устанавливает первый символ каждого слова в строке на заглавный, а остальные символы каждого слова - на прописные |
SUBSTR(S,pos,[,len|) | Выделяет в строке S подстроку длиной ten, начиная с позиции pos |
UPPER(S) | Преобразует прописные буквы в строке на заглавные буквы |
LPAD(S,N |,A|) | Возвращает строку S, дополненную слева символами А до числа символов N. Символ-наполнитель по умолчанию — пробел |
RPAD(S,N |,А]) | Возвращает строку S, дополненную справа символами А до числа символов N. Символ-наполнитель по умолчанию - пробел |
LTRIM(S,|,Sll) | Возвращает усеченную слева строку S. Символы удаляются до тех пор, пока удаляемый символ входит в строку - шаблон SI (по умолчанию - пробел) |
RTRIM(S,|,SI |) | Возвращает усеченную справа строку S. Символы удаляются до тех пор, пока удаляемый символ входит в строку — шаблон S1 (по умолчанию - пробел) |
TRANSLATES,(SI,S2) | Возвращает строку S, в которой все вхождения строки SI замещены строкой S2. Если SI <>S2, то символы, которым нет соответствия, исключаются из результирующей строки |
REPLACED(SI,|,S2|) | Возвращает строку S, для которой все вхождения подстроки SI замещены на подстроку S2. Если S2 не указано, то все вхождения подстроки SI удаляются из результирующей строки S |
NVL(X,Y) | Если X есть NULL, то возвращает в Y либо строку, либо число, либо дату в зависимости от исходного типа Y |
Названия одних и тex же функций могут отличаться в различных СУБД. Так, например, функция СУБД Oracle SUBSTR(S, pos, |, len|) в СУБД SQLBase называется @SUBSTRING(S, pos, Ien). В СУБД SQLBase имеются функции, которых нет в СУБД Oracle (см. таблицу ниже, где приведен список таких функций).
Таблица 8.4. Строковые функции СУБД SQLBase, отличающиеся от строковых функций СУБД Oracle
Функция | Описание |
@EXACT(SI,S2) | Возвращает результат сравнения двух строк |
@LEFT(S,lcn) | Возвращает левую подстроку длиной len |
@LENGTH(S) | Возвращает дли ну строки |
@MID(S, pos, len) | Возвращает подстроку указанной длины, начиная с позиции pos |
@REPEAT(S,n) | Повторяет строку S n раз |
@REPLACE(SI,pos,len,S2) | Замещаете позиции pos len символов в строке S2 символами строки SI |
@RIGHT(S,len) | Возвращает правую подстроку S длиной len |
@SCAN(S,pat) | Возвращает позицию подстроки pat в строке S |
@STRING(X, scale) | Возвращает символьное представление числа с указанным масштабом scale |
@TRIM(S) | Удаляет пробелы в строке справа и слева |
@VALUE(S) | Преобразует символьное представление числа в числовое значение |
Можно использовать функцию INITCAP, чтобы при получении списка имен служащих фамилии всегда начинались с заглавной буквы, а все остальные были прописными.
SELECT INITCAP(ENAME)
FROM EMPLOYEE
ORDER BY DEPNO;
Специальные функции
SQL обеспечивает набор специальных функций для преобразований значений колонок. Список таких функций приведен в таблице 8.5.
Таблица 8.5. Специальные функции
Функция | Описание |
DEC0DE(E,S1,R1,S2,R2,...,[def|) | Если E соответствует Si, то возвращается Ri, в противном случае - def или NULL, если умолчание не задано |
TO_NUMBER(S) | Возвращает результат преобразования строки S в аргумент типа NUMBER |
TO_CHAR(X[,F]) | Возвращает результат преобразования строки S в аргумент типа DATE согласно заданному формату даты F |
TO_DATE(S|,F]) | Возвращает результат преобразования значения параметра S символьного типа в тип DATE |
В таблице EMPLOYEE для каждого служащего можно ввести признак пола - добавить колонку SEX типа CHAR(l) (0 - мужской, 1 - женский). Допустим, что вам нужен список служащих, в котором требуется разделение их по признаку пола с указанием его в числовом формате; тогда можно задать такую команду:
SELECT ENAME, LNAME, AGE, ' Пол:', TO_NUMBER(SEX)
FROM EMPLOYEE
ORDER BY 5;
В качестве примера использования функцииDECODE приведем запрос, вычисляющий список служащих с указанием их руководителя. Если руководитель неизвестен, то выводится по умолчанию «не имеет».
SELECT ENAME, DEC0DE(DEPN0, 10, ' Дрягин', 20,' Жиляева '. 30,'
Коротков ', 'не имеет')
FROM EMPLOYEE
ORDER BY ENAME;
Предположим, что руководитель организации имеет неопределенное значение колонкиDEPNO и, следовательно, для него будет работать умолчание, предусмотренное вDECODE.