Delete - удаление строк в таблице
Пример 4. Удаление нескольких строк в таблице:
DELETE FROM P
WHERE P.PNUM = 1;
Пример 5. Удаление всех строк в таблице:
DELETE FROM P;
Insert - вставка строк в таблицу
Вставка одной строки в таблицу:
INSERT INTO
P (PNUM, PNAME)
VALUES (4, "Иванов");
Вставка в таблицу нескольких строк, выбранных из другой таблицы (в таблицу TMP_TABLE вставляются данные о поставщиках из таблицы P, имеющие номера, большие 2):
INSERT INTO
TMP_TABLE (PNUM, PNAME)
SELECT PNUM, PNAME
FROM P
WHERE P.PNUM>2;
Update - обновление строк в таблице
Обновление нескольких строк в таблице:
UPDATE P
SET PNAME = "Пушников"
WHERE P.PNUM = 1;
30.Сложные запросы.Примеры
SELECT [Каталог продукции].[Наименование контроллера]
FROM [Каталог продукции], типизация
WHERE id_типизации=( select id from типизация where типизация.Типизация='автоматика для холодильного оборудования');
Многотабличный запрос позволяет сформировать записи результата путем объединения взаимосвязанных записей из таблиц базы данных и выбора из них нужных полей и записей. Многотабличный запрос часто осуществляет объединение данных, которые на этапе проектирования были разделены на множество объектов в соответствии с требованиями нормализации. В таких объектах, прежде всего, обеспечивалось отсутствие дублируемости данных в базе, повторяются только значения ключевых полей. В результате выполнения запроса формируется таблица с повторяющимися данными, в которой каждая запись собирает необходимые данные из разных таблиц.
Подзапрос-это обычный запрос который вложен в другой запрос. Подзапрос представляет собой оператор select ,который применяется для выбора определенной части данных или служит в качестве условия для другого запроса.
Связанные запросы
Оператор IN
Оператор IN определяет набор значений в которое данное значение может или не может быть включено например у нас есть таблица (продавцы) где указаны в каких городах они расположены
SELECT *
FROM Salespeople
WHERE city = 'Barcelona'
OR city = 'London';
Имеется и более простой способ получить ту же информацию:
SELECT *
FROM Salespeople
WHERE city IN ( 'Barcelona', 'London' );
Подзапросы, возвращающие более одной строки, называются многострочными. Вместо однострочного оператора в их используются многострочный. Многострочный оператор ожидает одно или более значений. Многострочные операторы сравнения: IN - Равно любому члену списка; SOME - Сравнение значения с любым значением, возвращаемым подзапросом; ALL - Cравнение значения с каждым значением, возвращаемым подзапросом. В большинстве случаев, если подзапрос возвращает множество значений, используется оператор сравнения IN.
Оператор IN определяет набор значений в которое данное значение может или не может быть включено например у нас есть таблица (продавцы) где указаны в каких городах они расположены
SELECT *
FROM Salespeople
WHERE city = 'Barcelona'
OR city = 'London';
Имеется и более простой способ получить ту же информацию:
SELECT *
FROM Salespeople
WHERE city IN ( 'Barcelona', 'London' );
Например: Выбрать все продажи каких-либо товаров, которые в свое время был проданы на наибольшую сумму.
2 таблицы Sale Tovar
SQL |
SELECT S.ID, S.Sum_sale, S.Number_sale, S.Date_sale, T.NameTovar FROM Tovar T, Sale S WHERE T.ID = S.Tovar_ID AND S.Tovar_ID IN (SELECT Tovar_ID FROM Sale WHERE Sum_Sale = (SELECT MAX(Sum_Sale) FROM SALE)) ORDER BY S.Sum_Sale DESC |
Примечание: В результате выполнения «самого вложенного» подзапроса (SELECT MAX(Sum_Sale)…) нам возвращается максимальная сумма продажи товара (16500). Затем вложенный подзапрос (SELECT Tovar_ID ….) возвращает нам два значения (4,5) , т.е ID двух товаров у которых максимальная сумма продажи составила значение 16500. Иначе говоря, этот запрос можно было бы представить в следующей форме:
|
SELECT S.ID, S.Sum_sale, S.Number_sale, S.Date_sale, T.NameTovar FROM Tovar T, Sale S WHERE T.ID = S.Tovar_ID AND S.Tovar_ID IN (4, 5) |
Использование ALL, SOME Если в условии поиска необходимо указать, что сравниваемое значение (значение столбца, результат выражения) должно находиться в определенных отношениях со всеми значениями из множества значений, возвращаемых подзапросом, применяют предложения типа: <сравниваемое значение> {[NOT]} <оператор> {ALL|SOME|ANY} (<подзапрос>) где подзапрос может возвращать более одного значения. Оператор определяет операцию сравнения (>, >=,<,<= и т.д). Отношение сравниваемого значения и значений, возвращаемых подзапросом устанавливаются многострочными операторами ALL и ANY (SOME). Оператор ALL сравнивает значение с каждым значением, возвращаемым подзапросам. >ALL - означает «больше, чем максимум» <ALL - означает «меньше, чем минимум» Иначе говоря, ALL определяет, что условие поиска истинно, когда сравниваемое значение находится в отношении, определяемым оператором, со всеми значениями, возвращаемыми подзапросом. Например: WHERE Column >ALL (SELECT Field FROM Table) определяет, что текущее значение столбца Column должно быть больше всех значений в столбце Field из таблицы Table. Пример: Выбрать все факты продажи товаров, в которых сумма проданного товара, превышает среднее значение: SQL |
SELECT S.ID, S.Sum_sale, S.Number_sale, S.Date_sale, T.NameTovar FROM Tovar T, Sale S WHERE T.ID = S.Tovar_ID AND S.Sum_sale > ALL (SELECT AVG(Sum_Sale) FROM SALE GROUP BY Tovar_ID) |
Оператор ANY и его синоним SOME сравнивает значение с любым значением, возвращаемым подзапросом. <ANY - означает «меньше, чем максимум» >ANY - означает «больше, чем минимум» =ANY – эквивалент IN Т.е. Использование этого оператора ANY (или SOME) означает, что условие поиска истинно, когда сравниваемое значение находиться в отношении, определяемым оператором, хотя бы с одним значением, возвращаемым подзапросом. Например: WHERE Column >ANY (SELECT Field FROM Table) Определяет, что текущее значение столбца Column должно быть больше хотя бы одного значения в столбце Field из таблицы Table. Пример: Выбрать все факты продажи товаров, в которых сумма проданного товара, превышает среднее значение хотя бы одного товара: SQL |
SELECT S.ID, S.Sum_sale, S.Number_sale, S.Date_sale, T.NameTovar FROM Tovar T, Sale S WHERE T.ID = S.Tovar_ID AND S.Sum_sale > ANY (SELECT AVG(Sum_Sale) FROM SALE GROUP BY Tovar_ID) |
35.Выборка данных .Группировка.
Иногда требуется разделить таблицу на более мелкие группы. В этом случае оператор SELECT после предложения WHERE вводиться предложение GROUP BY столбец [, столбец1 …] Предложение GROUP BY разбивает строки таблицы на группы. • Если агрегатная функция задана в предложении SELECT, получить одноименно индивидуальный результат можно только в случае, если отдельный столбец указан в предложении GROUP BY. Если предложение GROUP BY со списком столбцов отсутствует, выдается сообщение об ошибке. • Предложение WHERE позволяет исключать строки до их группировки. • Список столбцов в предложении GROUP BY обязателен. • Использование псевдонимов столбцов в предложении GROUP BY недопустимо. • По умолчанию строки сортируются в порядке возрастания значений столбцов, заданных в предложении GROUP BY, изменить этот порядок можно с помощью предложения ORDER BY. • Если используется приложение GROUP BY, все столбцы, указанные в предложении SELECT, к которым не применяется групповые функции, должны быть обязательно включены в предложение GROUP BY. • Столбец, заданный в предложении GROUP BY, может отсутствовать в предложении SELECT. Пример: Выдать общее количество проданного товара по каждому из наименований товаров:
SQL |
SELECT T.NameTovar, SUM(S.Number_sale) AS Gen_Number_Sale FROM Sale S, Tovar T WHERE S.Tovar_ID = T |
GROUP BY T.NameTovar
Выдать общую сумму продажи товара по каждому из наименований товаров SQL |
SELECT T.NameTovar, SUM(S.Number_sale*T.Price) AS Gen_Sum FROM Sale S, Tovar T WHERE S.Tovar_ID = T.ID GROUP BY T.NameTovar |
Определить, по каким полям необходимо отсортировать записи в результирующем , можно, указав после предложения, следующего за словом WHERE, предложение ORDER BY <список столбцов> Список столбцов должен содержать имена столбцов, по которым будет производиться сортировка. В случае указания имен нескольких столбцов, разделенных через запятую, столбец, указанный первым, будет использован для глобальной сортировки, второй столбец, для сортировки внутри группы, определяемой единым значением первого столбца, и т.д. Пример: Выдать все записи из таблицы продаж, отсортировав их по количеству продаж. SQL |
SELECT * FROM Sale ORDER BY Number_sale |
Пример: Выдать все записи из таблицы продаж, где сумма продаж больше или равно 3000 и отсортировав полученные результаты по дате продаж:
SQL |
SELECT * FROM Sale WHERE Sum_Sale > = 3000 ORDER BY Date_sale |
Пример: Выдать все записи из таблицы продаж, отсортировав полученный результирующий НД сначала по дате, а затем по сумме продаж.
SQL |
SELECT * FROM Sale ORDER BY Date_sale, Sum_sale |
Типы данных
Int-целое число длиной 4 бита
Double-вещественное число повышенной точности
Float-действительное число
Bool-логическое
String-строка
Byt-байт
Char-строка символов Символьные типы данных - содержат буквы, цифры и специальные символы.
CHAR или CHAR(n) -символьные строки фиксированной длины. Длина строки определяется параметром n. CHAR без параметра соответсвует CHAR(1). Для хранения таких данных всегда отводится n байт вне зависимости от реальной длины строки.
VARCHAR(n) - символьная строка переменной длины. Для хранения данных этого типа отводится число байт, соответствующее реальной длине строки.
Целые типы данных - поддерживают только целые числа (дробные части и десятичные точки не допускаются). Над этими типами разрешается выполнять арифметические операции и применять к ним агрегирующие функции (определение максимального, минимального, среднего и суммарного значения столбца реляционной таблицы).
INTEGER или INT- целое, для хранения которого отводится, как правило, 4 байта. (Замечание: число байт, отводимое для хранения того или иного числового типа данных зависит от используемой СУБД и аппаратной платформы, здесь приводятся наиболее "типичные" значения) Интервал значений от - 2147483647 до + 2147483648
SMALLINT - короткое целое (2 байта), интервал значений от - 32767 до +32768
Вещественные типы данных - описывают числа с дробной частью.
FLOAT и SMALLFLOAT - числа с плавающей точкой (для хранения отводится обычно 8 и 4 байта соответсвенно).
DECIMAL(p) - тип данных аналогичный FLOAT с числом значащих цифр p.
DECIMAL(p,n) - аналогично предыдущему, p - общее количество десятичных цифр, n - количество цифр после десятичной запятой.
Денежные типы данных - описывают, естественно, денежные величины. Если в ваша система такого типа данных не поддерживает, то используйте DECIMAL(p,n).
MONEY(p,n) - все аналогично типу DECIMAL(p,n). Вводится только потому, что некоторые СУБД предусматривают для него специальные методы форматирования.
Дата и время - используются для хранения даты, времени и их комбинаций. Большинство СУБД умеет определять интервал между двумя датами, а также уменьшать или увеличивать дату на определенное количество времени.
DATE - тип данных для хранения даты.
TIME - тип данных для хранения времени.
INTERVAL - тип данных для хранения верменного интервала.
DATETIME - тип данных для хранения моментов времени (год + месяц + день + часы + минуты + секунды + доли секунд).
Двоичные типы данных - позволяют хранить данные любого объема в двоичном коде (оцифрованные изображения, исполняемые файлы и т.д.). Определения этих типов наиболее сильно различаются от системы к системе, часто используются ключевые слова:
BINARY
BYTE
BLOB
Последовательные типы данных - используются для представления возрастающих числовых последовательностей.
SERIAL - тип данных на основе INTEGER, позволяющий сформировать уникальное значение (например, для первичного ключа). При добавлении записи СУБД автоматически присваивает полю данного типа значение, получаемое из возрастающей последовательности целых чисел.
В заключение следует сказать, что для всех типов данных имеется