06 1 06 (775942)
Текст из файла
6. Язык структурированных запросов SQL. Выбор и модификация данных, группировка таблиц, агрегатные функции, использование подзапросов.
SQL - Structured Query Language (Структурированный язык запросов). Язык SQL - наиболее распространённый язык управления базами данных типа клиент - сервер. SQL запрос представляет собой набор команд, определённым образом влияющий на отбор данных. Каждая инструкция начинается командой (одной из SELECT, INSERT, DELETE, UPDATE, CREATE, DROP, ALTER, TRANSFORM) и заканчивается точкой с запятой [;].
Команда SELECT
Команда SELECT - наиболее часто употребляемая команда из всех восьми. Она используется для выборки данных из базы данных.
Её синтаксис:
SELECT [Предикат] Поля FROM Таблицы [IN БазаДанных] [WHERE ...] [GROUP BY ...] [HAVING ...] [ORDER BY ...];
Необязательные аргументы заключены в [].
Предикат - одно из четырёх слов ALL, DISTINCT, DISTINCTROW, TOP. Если предикат не указан, то устанавливается ALL. Предикат ALL позволяет отобрать все записи. При использовании предиката DISTINCT, записи, которые содержат повторяющиеся значения в выбранных в запросе полях, исключаются. Предикат DISTINCTROW исключает из выборки записи, если повторяется вся запись, а не одно из полей. Предикат TOP позволяет отобрать определённое количество записей.
Поля - имена одного или нескольких полей, выборка которых производится. Для выборки всех полей вместо имен полей можно поставить звёздочку [*].
Таблицы - имена одной или нескольких таблиц, из которых производится выборка.
База данных - путь и имя внешней базы данных, в которой содержатся таблицы. Если таблицы находятся в текущей базе данных, то этот аргумент необязателен.
Минимальный синтаксис запроса на выборку выглядит так:
SELECT поле FROM Таблица;
Если таблицы, из которых выбираются записи, содержат одноимённые поля, то перед именем поля нужно поставить название таблицы и точку [.].
Предложение WHERE позволяет установить критерии отбора записей. Например:
SELECT * FROM Orders WHERE ID=5;
В этом запросе происходит выборка всех полей таблицы Orders. Выбираются только те записи, значения поля ID которых равно 5.
Вместо знака равно [=] можно также использовать знаки больше [>] и меньше [<].
SELECT * FROM Buyers WHERE Age>30;
В этом запросе выбираются все записи из таблицы Buyers, в которых значение поля Age больше 30.
Также возможно использование предложения WHERE вместе с операторами BETWEEN, IN и LIKE.
Оператор BETWEEN позволяет отобрать записи, значение определённого поля которых находится в заданном диапазоне. Например:
SELECT * FROM Orders WHERE ID BETWEEN 10 AND 20;
Здесь выбираются все записи, значение поля ID которых находится между 10 и 20.
Оператор IN позволяет отобрать записи, значение поля которых соответствует одному из значений, указанных в скобках.
SELECT * FROM Orders WHERE ID IN ( 10, 12, 30, 45 );
Предложение GROUP BY позволяет объединять поля в запросе. Предложение ORDER BY позволяет упорядочивать выбираемые записи. При использовании совместно с предложением ключевого слова ASC можно определить возрастающий порядок, а используя DESC, определяется убывающий порядок.
SELECT * FROM Orders ORDER BY Name ASC;
Также можно упорядочивать записи по нескольким полям. Сначала записи упорядочиваются по первому полю, если в нём есть записи, имеющие одинаковые значения, то они упорядочиваются по следующему указанному в предложении ORDER BY полю и т.д. Имена полей пишутся через запятую [,].
SELECT * FROM Orders ORDER BY Name ASC, Email ASC;
SQL позволяет производить некоторые вычисления и получать некоторую описательную информацию при помощи агрегатных функций. Среди этих
функций - COUNT, SUM, MAX, MIN и AVG.
* COUNT - вычисляет количество найденных строк
* SUM - находит сумму значений в найденных строках
* MAX - находит наибольшее среди найденных значений
* MIN - находит наименьшее среди найденных значений
* AVG - находит среднее значение от найденных значений
Используются эти функции как элементы списка таблиц в запросе с аргументом - названием поля. Вот несколько примеров.
SELECT COUNT (project) FROM staff;
SELECT MAX (projects_done) FROM staff;
SELECT AVG (project_done) FROM staff
HAVING
Наконец, последним при вычислении табличного выражения используется раздел HAVING (если он присутствует). Синтаксис этого раздела следующий:
::=
HAVING
Раздел HAVING может осмысленно появиться в табличном выражении только в том случае, когда в нем присутствует раздел GROUP BY. Условие поиска этого раздела задает условие на группу строк сгруппированной таблицы. Формально раздел HAVING может присутствовать и в табличном выражении, не содержащем GROUP BY. В этом случае полагается, что результат вычисления предыдущих разделов представляет собой сгруппированную таблицу, состоящую из одной группы без выделенных столбцов группирования.
Условие поиска раздела HAVING строится по тем же синтаксическим правилам, что и условие поиска раздела WHERE, и может включать те же самые предикаты. Однако имеются специальные синтаксические ограничения по части использования в условии поиска спецификаций столбцов таблиц из раздела FROM данного табличного выражения. Эти ограничения следуют из того, что условие поиска раздела HAVING задает условие на целую группу, а не на индивидуальные строки.
Поэтому в арифметических выражениях предикатов, входящих в условие выборки раздела HAVING, прямо можно использовать только спецификации столбцов, указанных в качестве столбцов группирования в разделе GROUP BY. Остальные столбцы можно специфицировать только внутри спецификаций агрегатных функций COUNT, SUM, AVG, MIN и MAX, вычисляющих в данном случае некоторое агрегатное значение для всей группы строк. Аналогично обстоит дело с подзапросами, входящими в предикаты условия выборки раздела HAVING: если в подзапросе используется характеристика текущей группы, то она может задаваться только путем ссылки на столбцы группирования.
Результатом выполнения раздела HAVING является сгруппированная таблица, содержащая только те группы строк, для которых результат вычисления условия поиска есть true. В частности, если раздел HAVING присутствует в табличном выражении, не содержащем GROUP BY, то результатом его выполнения будет либо пустая таблица, либо результат выполнения предыдущих разделов табличного выражения, рассматриваемый как одна группа без столбцов группирования.
Подзапросы
Подзапрос - это команда SELECT, вложенная в предложение другой команды SQL (например, SELECT, CREATE, INSERT и т.д.). Механизм подзапросов является мощным и гибким инструментом языка SQL, позволяющим создавать сложные команды при работе с данными. Это может быть удобно для выборки строк таблицы по условию, зависящему от данных в самой таблице.
Структура подзапроса представлена на рисунке.
Подзапросы очень полезны при написании команд SELECT для выборки значений по некоторому условию, значения операндов которого заранее неизвестны. Подзапросы можно использовать в разных предложениях команд SQL:
-
Предложение WHERE.
-
Предложение HAVING.
-
Предложение FROM команды SELECT или DELETE.
Синтаксис запроса с подзапросом:
|
где
оператор | Оператор сравнения (например, >, = или IN). |
По количеству возвращаемых строк, удовлетворяющих условию запроса, подзапросы разделяют на однострочные и многострочные. В однострочных подзапросах в качестве операторов сравнения могут быть использованы (>,=,>=,<,<>,<=). Для многострочных запросов правильным будет использование только оператора IN (NOT IN).
Правила оформления подзапроса следующие:
-
подзапрос должен быть заключен в круглые скобки;
-
подзапрос должен находиться справа от оператора сравнения в логическом выражении;
-
в подзапросе нельзя использовать предложение ORDER BY.
Как обрабатываются вложенные подзапросы?
Вложенная команда SELECT выполняется первой. Результат передается в условие главного запроса.
Пример: Выборка фамилий и должностей сотрудников того же отдела, что у Biri.
-
Первой выполняется команда SELECT вложенного блока запроса. Результат -- 43.
-
Далее обрабатывается главный блок запроса. Результат подзапроса используется при этом для вычисления условия поиска.
Команда SELECT для этого примера будет выглядеть следующим образом:
Команда UPDATE
Команда UPDATE посылает запрос на изменение записи.
Синтаксис:
UPDATE Таблица SET НовоеЗначение WHERE ...;
Таблица - имена одной или нескольких таблиц, в которых изменяются записи
НовоеЗначение - новые значения для полей записи
Команду UPDATE удобно использовать, если изменяется сразу большое число записей или если изменяемые записи находятся в разных таблицах. Новые значения указываются через запятую для каждого поля. Использование предложения WHERE аналогично его использованию в команде SELECT.
Пример:
UPDATE Buyers SET Order='Ничего' WHERE ID=7;
Устанавливаем значение поля покупки 'Ничего' у покупателя, номер которого равен 7.
UPDATE Заказы SET СуммаЗаказа=СуммаЗаказа * 1.2, СтоимостьДоставки=СтоимостьДоставки * 1.1 WHERE Страна='США';
Этот запрос немного сложнее. Он повышает сумму заказа на 20% и стоимость доставки на 10% для покупателей из США.
Команда DELETE
Команда DELETE посылает запрос на удаление записей из таблицы.
Синтаксис:
DELETE [Таблица.*] FROM Таблица WHERE ...;
Таблица - имя таблицы, из которой удаляются записи.
Использование предложения WHERE аналогично его использованию в команде SELECT.
Аргумент команды DELETE можно не указывать, поскольку он фактически дублируется в предложении FROM.
Пример:
DELETE FROM Buyers WHERE ID=8;
Этот запрос удаляет из таблицы Buyers запись, в которой ID равно 8.
Для удаления не всей записи, а только ее поля, следует воспользоваться запросом на изменение записи (команда UPDATE) и поменять значения нужных полей на Null.
Команда INSERT INTO
Команда INSERT INTO предназначена для добавления одной или нескольких записей в конец таблицы. Возможны 2 варианта использования этой команды. Первый вариант добавляет одну запись в таблицу, а второй вариант добавляет записи из одной таблицы в другую.
Синтаксис первого варианта:
INSERT INTO ТаблицаНазначения [(Поля)] VALUES (Значения);
Синтаксис второго варианта:
INSERT INTO ТаблицаНазначения [(Поля)] [IN БазаДанных] SELECT [Таблица.]Поля FROM Таблица;
ТаблицаНазначения - таблица, в которую добавляются записи.
Поля - названия полей.
Таблица - имя таблицы, источника данных.
База данных - путь и имя внешней базы данных, в которой содержатся таблицы. Если таблицы находятся в текущей базе данных, то этот аргумент необязателен.
Значения - значения полей добавляемой записи.
Все поля записи и соответствующие им значения должны быть определены, иначе им будут присвоены значения Null. Если таблица, в которую добавляются записи, имеет ключевое поле, то в него должны добавляться уникальные, непустые значения. Иначе запись не будет добавлена.
Пример:
INSERT INTO Orders (ID, Name, Email, Order) VALUES (12, 'Вася Пупкин', 'vasya@pupkin.ru', 'Pentium II 450 MHz');
Добавляется новая запись, в которой полям ID, Name, Email, Order соответствуют значения 12, 'Вася Пупкин', 'vasya@pupkin.ru', 'Pentium II 450 MHz'.
INSERT INTO Orders2001 (ID, Name, Email, Order) SELECT ID, Name, Email, Order FROM Orders2000;
Этот запрос добавляет все записи из таблицы Orders2000 в таблицу Orders2001.
Команда CREATE
Создание таблицы
Создание таблицы в БД реализуется оператором CREATE TABLE, имеющим следующий синтаксис
CREATE TABLE имя_табл (с_спецификация, ...);
где с_спецификация имеет разнообразный синтаксис. Здесь же рассматриваются наиболее часто используемые ее формы.
1. Описание столбца таблицы
имя_столбца тип_данных [NULL]
где имя_столбца - имя столбца таблицы, а тип_данных - спецификация одного из типов данных, рассмотренных в разделе ?Типы данных языка SQL?. Необязательное ключевое слово NULL означает, что ячейкам данного столбца разрешено быть пустыми (т.е. не содержать какого-либо значения).
2. Описание столбца таблицы
имя_столбца тип_данных NOT NULL [DEFAULT по_умолч] [PRIMARY KEY]
где конструкция NOT NULL запрещает иметь в таблице пустые ячейки в данном столбце. Конструкция PRIMARY KEY указывает, что содержимое столбца будет играть роль первичного ключа для создаваемой таблицы. Конструкция DEFAULT по_умолч переопределяет имеющееся для столбцов каждого типа данных значение ?по умолчанию? (например, 0 для числовых типов), используемое при добавлении в таблицу оператором INSERT INTO строк, не содержащих значений в этом столбце.
3. Описание первичного ключа
PRIMARY KEY имя_ключа (имя_столбца, ...)
Команда ALTER TABLE
Модификация существующей таблицы в БД реализуется оператором ALTER TABLE, имеющим следующий синтаксис
ALTER TABLE имя_табл м_специкация [,м_спецификация ...]
где м_спецификация имеет различные формы. Ниже рассматриваются наиболее часто используемые.
1. Добавление нового столбца
ADD COLUMN с_спецификация
где с_спецификация - описание добавляемого столбца в том виде, как оно используется для создания таблицы оператором CREATE TABLE.
2. Удаление первичного ключа для таблицы
DROP PRIMARY KEY
3. Изменение/удаление значения ?по умолчанию?
ALTER COLUMN имя_столбца SET по_умолч
или
ALTER COLUMN имя_столбца DROP DEFAULT
Команда DROP TABLE
Удаление таблицы
Удаление одной или сразу нескольких таблиц из БД реализуется оператором DROP TABLE, имеющим следующий простой синтаксис
DROP TABLE имя_табл, ...
Подчеркнем, что оператор DROP TABLE удаляет не только все содержимое таблицы, но и само описание таблицы из БД. Если требуется удалить только содержимое таблицы, то необходимо использовать оператор DELETE FROM.
6
Характеристики
Тип файла документ
Документы такого типа открываются такими программами, как Microsoft Office Word на компьютерах Windows, Apple Pages на компьютерах Mac, Open Office - бесплатная альтернатива на различных платформах, в том числе Linux. Наиболее простым и современным решением будут Google документы, так как открываются онлайн без скачивания прямо в браузере на любой платформе. Существуют российские качественные аналоги, например от Яндекса.
Будьте внимательны на мобильных устройствах, так как там используются упрощённый функционал даже в официальном приложении от Microsoft, поэтому для просмотра скачивайте PDF-версию. А если нужно редактировать файл, то используйте оригинальный файл.
Файлы такого типа обычно разбиты на страницы, а текст может быть форматированным (жирный, курсив, выбор шрифта, таблицы и т.п.), а также в него можно добавлять изображения. Формат идеально подходит для рефератов, докладов и РПЗ курсовых проектов, которые необходимо распечатать. Кстати перед печатью также сохраняйте файл в PDF, так как принтер может начудить со шрифтами.