Рис для лекций 8 и 9x

advertisement
1.Таблицы SQL
1.1. Типы данных
Данные — это информация, хранящаяся в базе данных в виде, определенном одним из нескольких допустимых типов
данных. Данные могут включать имена, числа, денежные величины, текст, графику, значения с дробными частями,
рисунки, формулы для вычислений, итоговые значения и вообще почти все, что вы можете себе представить.
Категория
Типы
данных
Описание
1.2. Из чего состоят таблицы
В определении таблицы столбцы можно задавать в произвольном порядке. Каждый столбец имеет определенное
уникальное имя и соответствует определенным правилам задания идентификаторов (имен столбцов).
Идентификаторы в SQL:
Идентификаторы имеют длину 1-128 символов в кодировке Unicode и содержат буквы, специальные символы и цифры
Первый символ идентификтора обязательно должен быть буквой
1.3. Управление таблицами базы данных
1.3.1. Создание таблиц
Базовые таблицы создаются с помощью предложения CREATE TABLE (создать таблицу)
Команда CREATE TABLE создает пустую таблицу - таблицу без строк. Значения вводятся с помощью INSERT Команда
CREATE TABLE определяет имя таблицы и описание набора имён столбцов, указанных в определенном посадке Она также
определяет типы данных и размеры столбцов. Каждая таблица должна иметь по крайней мере ОДИН СТОЛБЕЦ.
СИНТАКСИС
CREATE TABLE имя_таблицы
(столбец тип_данных [NOT NULL]
[,столбец тип_данных [NOT NULL]]
...);
Фактически число символов поля может быть от нуля (если поле - NULL) до этого числа.
CREATE TABLE Books
id int IDENTITY(1,1),
publishers char(20),
author char(20) ,
title char(50) ,
price money,
style char(20))
КОД
1.3.2. Изменение таблицы
СИКТАКСИС
ALTER TABLE имя_таблицы ADD имя_столбца
тип_данных
Столбец будет добавлен со значениями NULL для всех строк таблицы. Новый столбец станет последним по порядку
столбцом таблицы. Вообще-то можно добавить сразу несколько новых столбцов, отделив их запятыми, в одной команде.
Имеется возможность удалять или изменять столбцы. Наиболее частым изменением столбца может быть просто
увеличение его размера или добавление (удаление) ограничения. Ваша система должна убедиться, что любые изменения не
противоречат существующим данным: например, при попытке добавить ограничение к столбцу, который уже имел
значение, нарушающее ограничение, то ограничение будет отклонено. ALTER TABLE не действует, когда таблица должна
быть переопределена, но вы должны разрабатывать вашу БД по возможности так, чтобы не слишком ей в этом доверяться.
Изменять структуры таблицы, когда она уже в использовании, опасно! Изменение может
стереть всех пользователей, имеющих разрешение на обращение к таблице. По этим причинам вы должны
разрабатывать ваши таблицы так, чтобы использовать ALTER TABLE только в крайнем случае. Если ваша система
не поддерживает ALTER TABLE, или если вы хотите избежать её использования, вы можете просто создать новую таблицу,
с необходимыми изменениями при создании, и использовать команду INSERT с SELECT * запросом чтобы переписать в нее
данные из старой таблицы. Пользователям, которым был предоставлен доступ к старой таблице, должен быть предоставлен
доступ к новой таблице.
СИНТАКСИС
код
ALTER TABLE имя_таблицы DROP имя_столбца
ALTER TABLE Books ADD data_pub datetime
ALTER TABLE Books DROP data_pub
1.3.3. Удаление таблиц
СИНТАКСИС
DROP TABLE имя_таблицы
2. Предложение SELECT
2.1. Простая выборка
Все запросы на получение практически любого количества данных из одной или нескольких таблиц выполняются с
помощью единственного предложения SELECT. Представляет исторический интерес тот факт, что именно возможность
включения одного предложения SELECT внутрь другого послужила мотивировкой использования прилагательного
"структуризированный" в названии языка SQL.
Предложение SELECT может использоваться как:
самостоятельная команда на получение и вывод строк таблицы, сформированной из столбцов и строк одной или
нескольких таблиц (представлений); элемент WHERE- или HAVING - условия (сокращенный вариант предложения,
называемый "вложенный запрос");
Здесь в синтаксических конструкциях используются следующие обозначения:
звездочка (*) для обозначения "все" - употребляется в обычном для программирования
смысле, т.е. "все случаи,удовлетворяющие определению";
квадратные скобки ([]) - означают, что конструкции, заключенные в эти скобки, являются
необязательными (т.е. могут быть опущены);
фигурные скобки ({}) - означают, что конструкции, заключенные в эти скобки, должны
рассматриваться как целые синтаксические единицы, т.е. они позволяют уточнить порядок
разбора синтаксических конструкций, заменяя обычные скобки, используемые в синтаксисе
SQL;
многоточие (...) - указывает на то, что непосредственно предшествующая ему
синтаксическая единица факультативно может повторяться один или более раз;
прямая черта (|) - означает наличие выбора из двух или более возможностей. Например
обозначение ASC|DESC указывает, можно выбрать один из терминов ASC или DESC; когда же
один из элементов выбора заключен в квадратные скобки, то это означает, что он выбирается
по умолчанию (так, [ASC]|DESC означает, что отсутствие всей этой конструкции будет
восприниматься как выбор ASC);
точка с запятой ( ; ) - завершающий элемент предложений SQL;
запятая ( , ) - используется для разделения элементов списков;
пробелы ( ) - могут вводиться для повышения наглядности между любыми синтаксическими
конструкциями предложений SQL;
прописные жирные латинские буквы и символы - используются для написания конструкций
языка SQL и должны (если это специально не оговорено) записываться в точности так, как
показано;
строчные буквы - используются для написания конструкций, которые должны
заменяться конкретными значениями, выбранными пользователем, причем для
определенности отдельные слова этих конструкций связываются между собой символом
подчеркивания (_);
термины таблица, столбец, ... - заменяют (с целью сокращения текста синтаксических
конструкций) терминами имя_таблицы, имя_столбца,..., соответственно;
Оператор SELECT состоит из 3 основных элементов: SELECT, FROM, WHERE. Первый элемент оператора
определяет столбцы, которые вы хотите получить. Директива FROM определяет таблицы, из которых извлекаются
столбцы, a WHERE - условие, задающее ограничение на отображение данных.
Ниже приведен полный синтаксис оператора SELECT:
SELECT [ALL | DISTINCT] список_столбцов
[INTO имя_новой_таблицы]
СИНТАКСИС
[FROM таблицы_источники]
[WHERE условие_поиска]
[GROUP BY [ALL] выражение группирования]
[HAVING условие_поиска]
[ORDER BY имя_столбца [ASC |DESC]]
[COMPUTE {{ AVG|COUNT|MAX|MINISUM} (выражение)} [ , ...n]
[BY выражение [ ,...n ]]]
[FOR BROWSE] [OPTION (параметр_запроса [ ,...n])]
Запрос SELECT * FROM имя_таблицы составляет основу любого запроса. Оператор SELECT со (*) введенной вместо
параметра список_столбцов возвращает все столбцы таблицы
КОД
SELECT * FROM Books
Чтобы получить только часть столбцов, нужно перечислить их имена, разделив запятыми. После последнего имени столбца
запятая не ставится:
СИНТАКСИС
код
СИНТАКСИС
код
SELECT имя_столбца
FROM список_таблиц
[,
имя_столбца...]
SELECT title, author, price
FROM Books;
SELECT имя_столбца AS
FROM имя_таблицы
'
заголовок_столбца'
SELECT title AS Название, author AS Автор, price AS Цена
FROM Books;
2.2. Исключение дубликатов
Код
SELECT DISTINCT customer FROM Sales;
2.3. Выборка вычисляемых значений
Из синтаксиса фразы SELECT видно, что в ней может содержаться не только перечень столбцов таблицы или символ *, но и
выражения. Например, если нужно получить стоимость каждой книги с учетом 10% скидки для всех книг по зарубежной
прозе из таблицы Books, то необходимо выдать следующий запрос:
код
SELECT id, publishers, title, author, (price - price*0.1)AS
price, style FROM Books WHERE style='Заруб. проза';
Фраза SELECT может включать не только выражения, но и отдельные числовые или текстовые константы. Следует
отметить, что текстовые константы должны заключаться в апострофы (').
код
SELECT 'Книга', title, 'автора', author, 'с учетом скидки',
(price - price*0.1), 'p' FROM Books;
3. Выборка с использованием фразы WHERE
3.1. Использование операторов сравнения>>
Оператор
Описание
=
Равно
>
<
>=
<=
<>
Больше
Меньше
Больше или равно
Меньше или равно
Не равно
СИНТАКСИС
код
SELECT имя_столбца [, имя_столбца...]
FROM имя_таблицы
WHERE имя_столбца оператор сравнения выражение
SELECT id, publishers, title, author, price, style
FROM Books
WHERE author = 'Шекспир';
id
11
publishers author
Кристалл Шекспир
36
ACT
Шекспир
title
Как вам это понравится
price
71
style
Поэзия
Сон в летнюю ночь
144
Поэзия
Возможность использования нескольких условий, соединенных логическими операторами AND, OR, AND NOT и OR NOT,
позволяет осуществить более детальный отбор строк. Так, для получения перечня книг, опубликованными издательствами
ACT и Центрполиграф , можно сформировать запрос:
код
SELECT id, publishers, title, author, price, style
FROM Books
WHERE publishers='ACT' OR publishers='Центрполиграф'
3.2. Использование BETWEEN
SELECT id, publishers, title, author, price, style
код
FROM Books
WHERE price BETWEEN 150 AND 300
Можно задать и NOT BETWEEN (не принадлежит диапазону между), например:
код
SELECT id, publishers, title, author, price, style
FROM
Books
WHERE price NOT BETWEEN 150 AND 300
3.3. Использование IN
С помощью ключевого слова IN указываются строки, значения которых совпадают с одним из значений в заданном списке.
Даты и символьные данные необходимо заключать в одинарные кавычки.
СИНТАКСИС
КОД
SELECT имя_столбца [, имя_столбца...]
FROM имя_таблицы
WHERE имя_столбца [NOT] IN (список_значений)
SELECT id, publishers, title, author, price, style
FROM Books
WHERE id
код
IN
(7,8,9);
SELECT title, author, price, id
FROM Books
WHERE id NOT IN (7,8,9);
3.4. Использование LIKE
Ключевое слово LIKE позволяет в качестве условия поиска сравнить часть указанной строки с имеющимися в таблице
строками. Директива LIKE используется со следующими типами данных: char, varchar, text, datetime. В сравниваемой строке
можно использовать 4 вида символов.
Символ
Описание
%
Произвольная (возможно пустая) строка символов
_
[]
[^]
Код
Один символ
Один символ в указанном диапазоне
Один символ вне указанного диапазона
SELECT id, publishers, title, author, price, style
FROM Books
WHERE author LIKE 'Б'
3.5. Вовлечение неопределенного значения (NULL-значения)
Если при загрузке данных не введено значение в какое-либо поле таблицы, то СУБД поместит в него NULL-значение.
Аналогичное значение можно ввести в поле таблицы, выполняя операцию изменения данных. Значение NULL не
равносильно пробелу в символьной строке или нулю в данных числового типа. Поле данных имеет значение NULL, если ему
не было присвоено значение. Если один из операндов имеет значение NULL, то и результат будет неопределенный. Как же
в таком случае найти строки, содержащие неопределенные значения?
Это можно сделать с помощью ключевых слов IS NULL и IS NOT NULL.
СИНТАКСИС
SELECT имя_столбца [, имя_столбца...]
FROM имя_таблицы
WHERE имя столбца IS
[ NOT ] NULL
NULL
3.6. Выборка с использованием фразы ORDER BY
С помощью директивы ORDER BY оператора SELECT сортируются строки в наборе, возвращаемом запросом. Базовый
синтаксис директивы ORDER BY имеет вид:
СИНТАКСИС
SELECT имя_столбца [, имя_столбца...]
FROM список_строк
[ORDER BY имя_столбца | список_номеров_столбцов
[ASC |DESC]]
Список директивы содержит произвольное количество столбцов, однако их общая длина не должна превышать 900 байт.
Вместо имен столбцов можно использовать их порядковые номера в таблице. Следующие два запроса возвращают
одинаковые результаты:
код
SELECT id, title
FROM Books
ORDER BY id, title
SELECT id, title
FROM Books
ORDER BY 1. 2
В директиве ORDER BY имена и порядковые номера столбцов используются совместно. Вы можете также указать порядок
сортировки строк: восходящий ASC и нисходящий DESC. Если порядок сортировки не указать то строки выводятся в
восходящем порядке. Если в упорядоченном столбце присутствуют значения NULL и применяется порядок сортировки ASC, то
строки с NULL располагаются первыми.
Download