Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ответы(базы данных).doc
Скачиваний:
1
Добавлен:
04.08.2019
Размер:
111.1 Кб
Скачать

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

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