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, позволяющий сформировать уникальное значение (например, для первичного ключа). При добавлении записи СУБД автоматически присваивает полю данного типа значение, получаемое из возрастающей последовательности целых чисел.

В заключение следует сказать, что для всех типов данных имеется