Краткие теоретические сведения
Второстепенные термины
- SELECT;
- INSERT;
- UPDATE;
- DELETE.
Структурная схема терминов:
|
Содержание темы
1 Возможности SQL;
2 Создание запросов с помощью SELECT;
3 Добавление данных;
4 Обновление данных;
5 Удаление данных.
SQL(structured query language - структурированный язык запросов) является стандартом в области реляционных БД.
SQL позволяет манипулировать данными, производить:
1 Выбор данных (команда SELECT)
2 Добавление (команда INSERT)
3 Обновление (команда UPDATE)
4 Удаление (команда DELETE)
А так же может быть использован для создания БД и таблиц, индексов и триггеров, хранимых процедур, модификации БД и структуры таблиц, удаления индексов, определения прав доступа.
SQL является основой для БД в архитектуре Клиент-Сервер, которые в настоящее время наиболее перспективны.
Выбор данных
(создание запросов при помощи команды SELECT)
Запрос – это средство выбора данных из одной или нескольких таблиц.
Результатом выполнения запроса всегда будет набор строк и столбцов, который может быть сохранен в таблице, массиве, отображен на экране, записан в текстовый файл, выведен на печать.
Для формирования запроса используется команда:
SELECT [DISTINCT] Список Выбираемых Полей
FROM Список Таблиц
[WHERE Условие Выборки ]
[GROUP BY Условие Группировки ]
[ORDER BY Условие Упорядочивания ]
[ [ INTO Имя Таблицы ]
[TO FILE Имя Файла [ADDITIVE] | TO PRNTER] ]
Обозначения: Необязательные опции заключаются в квадратные скобки. Вертикальная черта обозначает, что может быть выбрана одна из опций, которые стоят слева и справа от черты, но не обе сразу.
По умолчанию в отчет включаются все строки, опция DISTINCT исключает одинаковые строки. Команда INTOнаправляет запрос в таблицу. TO FILE– перенаправление запроса в файл. Если файл, имя которого указано для сохранения уже существует, то его содержимое будет заменено. ADDITIVE – позволяет добавить результата в конец существующего файла. TO PRNTER – направляет запрос на печать.
В списке выбираемых полей необходимо перечислить поля, разделенные запятой.
Пример 1: Пусть дана БД, состоящая из двух таблиц:
Таблица Popup ( Покупатели), с полями:
Фамилия | Cfam |
Код товара | Nkod |
Вид оплаты | Cvid |
Стоимость товара | Ntov |
Стоимость доставки | Ndos |
Дата поступления заявки | Dpos |
Дата и время выполнения | Tvip |
и данными:
Cfam | Nkod | Cvid | ntov | ndos | dpos | tvip |
Гребенев А.Н. Степанова Е.Д. Гребенев А.Н. Акимченко В.Г. Звягинцев Р.Т. Шараева Е.Н. Денисов А.В. Скрынникова Е.В. | Безналичный наличный безналичный безналичный безналичный наличный наличный безналичный | 389.00 124.00 500.00 560.00 125.00 875.00 1200.00 498.00 | 12.00 8.50 56.00 20.00 23.00 100.00 267.50 19.90 | 12/04/98 11/04/98 12/04/98 13/04/98 15/04/98 10/04/98 14/04/98 12/04/98 | 13/04/98 10:40:00 AM 13/04/98 09:15:00 PM 12/04/98 03:10:00 PM 15/04/98 02:50:00 PM / / : : AM 12/04/98 10:10:00 PM 15/04/98 09:30:00 AM 13/04/98 10:25:00 PM |
Таблица Tovary (товары)
Код товара | Nkod |
Наименование товара | Cnaim |
Цена | Nzena |
Сорт | Nsort |
С данными:
nkod | Cnaim | nzena | Nsort |
Лак паркетный Кафель отделочный Обои Зеркало Краска Натяжной потолок Клеенка | 38.90 124.00 23.00 560.00 |
Выберем поля фамилия и дата поступления заявки из таблицы Pokup
SELECT cfam, dpos FROM Pokup
Результат:
Cfam | dpos |
Гребенев А.Н. Степанова Е.Д. Гребенев А.Н. Акимченко В.Г. Звягинцев Р.Т. Шараева Е.Н. Денисов А.В. Скрынникова Е.В. | 12/04/98 11/04/98 12/04/98 13/04/98 15/04/98 10/04/98 14/04/98 12/04/98 |
Если поля выбираются из нескольких таблиц, перед именем поля необходимо поставить имя таблицы и точку. Для однотабличных запросов указание таблицы необязательно.
Второй вариант команды:
SELECT Pokup.cfam, Pokup.dpos FROM Pokup
* обозначает выбор всех полей таблицы
Пример 2:Выбрать все поля таблицы Pokup
SELECT Pokup.* FROM Pokup
Или
SELECT * FROM Pokup
(Результат аналогичен самой таблице)
Список выбираемых полей может содержать также выражения от полей и агрегатные функции.
Пример 3: Выбрать поля фамилия, код товара, рассчитать сумму стоимости товара и доставки
SELECT cfam, nkod, ntov+ndos FROM Pokup
Результат
Cfam | nkod | Exp 1 |
Гребенев А.Н. Степанова Е.Д. Гребенев А.Н. Акимченко В.Г. Звягинцев Р.Т. Шараева Е.Н. Денисов А.В. Скрынникова Е.В. | 391.00 132.50 556.00 580.00 148.00 975.00 1467.50 517.90 |
В качестве агрегатных функций можно использовать:
MIN | Минимальное значение |
MAX | Максимальное значение |
AVG | Среднее значение |
SUM | Сумма |
COUNT | Расчет количества |
Пример 4: Рассчитать общее количество покупателей и среднюю стоимость товара:
SELECT COUNT(cfam), AVG(ntov) FROM Pokup
В качестве результата будет передана одна строка, которая содержит два значения.
Cnt cfam | Avg ntov |
533.94 |
Для изменения имени столбца в результате можно использовать опцию AS
В предыдущем примере сохраним количество покупателей под именем KOL_VO, среднюю стоимость под именем SRED
SELECT COUNT(cfam) AS KOL_VO, AVG(ntov) AS SRED FROM Pokup
Kol vo | Sred |
533.94 |
Список таблиц является обязательным, таблицы перечисляются через запятую.
Если название таблицы достаточно длинное можно использовать вместо него псевдоним.
Пример 5: Выберем из таблицы Pokup фамилию покупателя и стоимость товара, а из таблицы Tovary – наименование товара.
1 вариант команды:
SELECT Pokup.cfam, Pokup.ntov, Tovary.cnaim
FROM Pokup, Tovary
WHERE Pokup.nkod = Tovary.nkod
Опция WHERE задает условие связи таблиц (по совпадению кода товара)
Результат:
Cfam | Ntod | cnaim |
Гребенев А.Н. Степанова Е.Д. Гребенев А.Н. Акимченко В.Г. Звягинцев Р.Т. Шараева Е.Н. Денисов А.В. Скрынникова Е.В. | 389.00 124.50 500.00 560.00 125.00 875.00 1200.00 498.00 | Лак паркетный Кафель отделочный Обои Зеркало Обои Краска Натяжной потолок Кафель отделочный |
2 вариант команды, с использование псевдонима p для Pokup и t для Tovary:
SELECT p.cfam, p.ntov, t.cnaim
FROM Pokup p, Tovary t
WHERE p.nkod = t.nkod
Опция WHERE позволяет задавать условие отбора записей
Пример 6: Выберем из таблицы Pokup поля фамилия покупателя, код товара и стоимость товара для всех товаров с кодом больше 400.
SELECT cfam, nkod, ntov
FROM Pokup WHERE nkod > 400
Результат:
Cfam | Nkod | ntov |
Гребенев А.Н. Гребенев А.Н. Звягинцев Р.Т. | 389.00 500.00 125.00 |
Условие может строиться с использованием логического операции AND (И),
OR (ИЛИ), NOT (НЕ), включать в себя операции сравнения: <, <=, >, >= , =
Пример 6: Выберем из таблицы Pokup поля фамилия покупателя, код товара и стоимость товара для всех товаров с кодом больше 400, но меньше 700.
SELECT cfam, nkod, ntov
FROM Pokup WHERE 400< nkod AND nkod < 700
Результат:
Cfam | Nkod | ntov |
Гребенев А.Н. | 389.00 |
В условиях можно использовать функции:
BETWEEN - задает диапазон значений,
IN – задает список,
LIKE – маска для символьных переменных (% - любое количество произвольных символов, *- один произвольный символ)
Предыдущий пример с использование функции BETWEEN
SELECT cfam, nkod, ntov
FROM Pokup WHERE nkod BETWEEN 400 AND 700
Пример 7: Выбрать все поля из таблицы Pokup, код товара должен быть равен 310, 600 или 910.
SELECT * FROM Pokup WHERE nkod IN (310, 600, 910)
Результат:
Cfam | Nkod | Cvid | ntov | ndos | dpos | tvip |
Гребенев А.Н. Акимченко В.Г. Звягинцев Р.Т. | безналичный безналичный безналичный | 500.00 560.00 125.00 | 56.00 20.00 23.00 | 12/04/98 13/04/98 15/04/98 | 12/04/98 03:10:00 PM 15/04/98 02:50:00 PM / / : : AM |
Пример 8: Выбрать все поля из таблицы Pokup, фамилия клиента должна начинаться с буквы С
SELECT * FROM Pokup WHERE cfam LIKE 'С%'
Cfam | Nkod | Cvid | ntov | ndos | dpos | tvip |
Степанова Е.Д. Скрынникова Е.В. | наличный безналичный | 124.00 498.00 | 8.50 19.90 | 11/04/98 12/04/98 | 13/04/98 09:15:00 PM 13/04/98 10:25:00 PM |
Условие группировки используется в том случае, если какое-либо поле содержит повторяющиеся значения. В этом случае записи с каждым значением будут выделены в отдельные группы.
Пример 9: Выбрать из таблицы Pokup поле вид оплаты, сгруппировать по нему, рассчитать сумму стоимости товара и доставки для каждого вида оплаты.
SELECT cvid, SUM( ntov+ ndos) FROM Pokup GROUP BY cvid
Результат:
Cvid | Sum exp 2 |
безналичный наличный | 2202.00 1575.00 |
Можно использовать группировку по нескольким полям.
Пример 10: Выбрать из таблицы Pokup поля вид оплаты и код товара, сгруппировать по этим полям, рассчитать сумму стоимости товара и доставки для каждого товара и вида оплаты.
SELECT cvid, nkod, SUM( ntov+ ndos) FROM Pokup
GROUP BY Pokup.cvid, Pokup.ckod
Результат
Cvid | Nkod | Sum_exp 3 |
безналичный безналичный безналичный безналичныйналичный наличный наличный | 389.00 517.00 401.00 704.00 975.00 133.00 1467.00 |
Строки группируются по виду оплаты (безналичный, наличный), а за тем по коду товара. Обратите внимание, товар 910 покупался 2 раза по безналичному расчету:
Cfam | Nkod | Cvid | ntov | ndos | dpos | tvip |
Гребенев А.Н. Звягинцев Р.Т. | безналичный безналичный | 500.00 125.00 | 56.00 23.00 | 12/04/98 15/04/98 | 12/04/98 03:10:00 PM / / : : AM |
В результате указывается общая сумма стоимости товара и доставки.
Условие упорядочивания позволяет задать порядок следования записей. В качестве такового задается одно или несколько полей. По умолчанию записи располагаются в порядке возрастания. Для размещения в порядке убывания необходимо указывать опцию DESC.
Пример 11: Выбрать все поля из таблицы Tovary, в порядке возрастания цены:
SELECT * FROM Tovary ORDER BY nzena
Результат:
Nkod | Cnaim | nzena | Nsort |
Обои Клеенка Краска Лак паркетный Кафель отделочный Натяжной потолок Зеркало | 23.00 24.00 25.00 38.90 124.00 200.00 560.00 |
В порядке убывания цены:
SELECT * FROM Tovary ORDER BY nzena DESC
Результат – строки в обратном порядке.
Пример 12: Выбрать поля фамилия, дата поступления заявки, стоимость товара и направить результат в таблицу S1.dbf
SELECT cfam, dpos, ntov FROM Pokup INTO TABLE S1.dbf
Результат: таблица S1.dbf, будет содержать данные:
Cfam | Dpos | Ntov |
Гребенев А.Н. Степанова Е.Д. Гребенев А.Н. Акимченко В.Г. Звягинцев Р.Т. Шараева Е.Н. Денисов А.В. Скрынникова Е.В. | 12/04/98 11/04/98 12/04/98 13/04/98 15/04/98 10/04/98 14/04/98 12/04/98 | 389.00 124.00 500.00 560.00 125.00 875.00 1200.00 498.00 |
Пример 13: Запрос из предыдущего примера направить в файл t1.txt
SELECT cfam, dpos, ntov FROM Pokup TO TABLE t1.txt
По умолчанию будет создан файл t1.txt. Если такой файл уже существует, то его содержимое будет заменено на результат запроса. Опция ADDITIVE позволяет добавить результаты в конец существующего файла.
SELECT cfam, dpos, ntov FROM Pokup TO TABLE t1.txt ADDITIVE
Пример 14: Направить результаты запроса на принтер
SELECT cfam, dpos, ntov FROM Pokup TO PRINTER