Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции2011.doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
1.86 Mб
Скачать

Обновление всех строк

Предложение WHERE в операторе UPDATЕ является необязательным. Если оно опущено, то обновляются все строки целевой таблицы. Например:

Увеличить все личные планы на пять процентов.

UPDATE SALESREPS SET QUOTA = 1.05 * QUOTA

В отличие от оператора DELETE, в котором предложение WHERE практически никогда не опускается, оператор UPDATE и без предложения WHERE выполняет полезную функцию. Он применяется в основном для общего обновления всей таблицы, что было продемонстрировано в предыдущем примере.

Контрольные вопросы

  1. Какое наибольшее основное различие между типами данных в SQL?

  2. Распознает ли ANSI тип данных DATA?

  3. Какой подраздел SQL используется чтобы помещать значения в таблицы ?

  4. Что такое — ключевое слово?

  5. Какая команда позволяет создать структуру таблицы? Объясните ее формат

  6. Объясните формат команды модификации структуры таблицы. В чем особенность ее выполнения?

  7. Какие ограничения могут накладываться на значения в столбцах?

  8. Какие ограничения могут накладываться на таблицы?

  9. Формат команды создания индекса. Какое назначение индексов

  10. Объясните различные способы использования команды занесения данных

  11. Формат команды удаления данных и особенности ее использования

  12. Команда обновления данных, ее формат и область использования

Тема 2.2 Организация запросов к базе данных.

Тема: рассмотреть понятие «запрос», способы формирования запросов в зависимости от их назначений, дополнительные функции языка SQL применяемые в запросах.

Запрос – команда, что дается программе базы данных, которая сообщает ей, чтобы она вывела отдельную информацию с таблицы в память.

Запросы обычно рассматриваются как часть языка DML. Запрос сам по себе не изменяет информацию в таблицах, а просто показывает ее пользователю.

Все запросы в SQL состоят с одиночной команды.

В самой простой форме команда SELECT просто инструктирует БД, чтобы извлечь информацию из таблицы.

Обычно, в результате выполнения запроса строки представляются в том порядке, в каком они найдены в таблице. Это не обязательно будет тот порядок, в каком они вводились или хранились.

Результатом запроса всегда является таблица с тем указанным набором столбцов и со строками соответствующими указанному условию.

1. Формирование запросов к одной таблице

Формирование запросов – основная операция языка SQL, которую называют отображением.

Операция отображения выполняется в следующей последовательности: сначала выполняется выбор горизонтального подмножества данных, которые соответствуют предикату выборки (соответствует операции реляционной алгебры - селекция), потом – вертикального подмножества данных (соответствует операции - проекция).

Формат команды выбора из одной таблицы:

SELECT [DISTINCT|ALL] <целевой список> FROM <имя таблицы> [WHERE <предикат>],

Целевой список может представлять собой:

  • имя столбца, содержащегося в таблицах перечисленных после фразы FROM;

  • константу, показывающую, что в каждой строке результатов запроса должно содержаться одно и то же значение;

  • выражение, показывающее, что СУБД должна вычислять значение, помещаемое в таблицу результатов запроса, по формуле, определенной в выражении.

Имя таблицы – имя таблицы или таблиц, из которых выбираются данные;

Предикат – условие выборки.

Наиболее простые запросы извлекают данные из столбцов, расположенных в одной таблице. Простые запросы состоят только из двух фраз SELECT и FROM.

Вычисляемые столбцы получаются, если в целевом списке указано выражение. В выражениях можно использовать скобки, знаки умножения, сложения, деления и вычитания. В вычисляемых столбцах могут использоваться только значения исходных столбцов содержащих числовые значения, иначе будет выдаваться сообщение об ошибке. Кроме этого во многих СУБД есть дополнительные встроенные математические функции, функции для работы с датой и временем, их тоже можно использовать в вычисляемых столбцах.

Пример.

SELECT G_IG, (PRICE*0,3) FROM ORDERS;

SELECT G_IG, YEAR(DAT_POST) FROM ORDERS;

Вычисляемым столбцам можно присваивать новые имена, например:

SELECT G_IG, (PRICE*0,3) AS skidka FROM ORDERS;

В выходные данные запроса SELECT можно включить числовые константы, а также текст. Следующая команда иллюстрирует эти возможности на примере предыдущего запроса:

SELECT “Стоимость заказа №”, O_ID, “составляет”, PRICE*QN_TY FROM RDERS.

Но в этом случае один и тот же комментарий будет печататься в каждой строчке выходных данных.

Примеры безусловной выборки.

  1. Выбор с таблицы GOOD информации обо всех товарах

SELECT * FROM GOOD.

Символ «*» используется для указания на все столбцы. Эта команда аналогична следующей: SELECT G_ID, G_NAME, PAR_1, PAR_2, PAR_3 FROM GOOD

Для исключения данных, что повторяются, используется ключевое слово DISTINCT.

2. Выборка номеров поставщиков, которые фигурируют в заказах на товары, имеет следующий вид:

SELECT DISTINCT S_ID FROM ORDERS.

Альтернативой DISTINCT является ключевое слово ALL. Оно включает в состав отобранного множества строк все повторения и действует по умолчанию.

Условие выборки может включать следующие операторы:

  1. арифметические (=, !=, , , , );

  2. логические (D, OR, NOT);

  3. специальные операторы: IN, BETWEEN, LIKE, IS NULL.

Порядок выполнения операторов задается скобками.

Примеры выборки с условием.

  1. Выборка всех данных о товарах высшего сорта с таблицы GOOD выполняется командой:

SELECT * FROM GOOD WHERE PAR_1=`высший сорт`.

  1. Выбор всех данных об апельсинах высшего сорта с таблицы GOOD выполнится командой:

SELECT * FROM GOOD WHERE G_NAME=`апельсин` AND PAR_1=`высший сорт`.

Правила применения специальных символов.

Оператор IN полностью определяет множество, к которому данное значение может принадлежать или не принадлежать. Если необходимо найти всех поставщиков товаров с Киева и Харькова, возможен следующий запрос:

SELECT * FROM SUPPL WHERE S_CITY=`Киев` OR S_CITY=`Харьков`.

Оператор IN позволяет выполнить этот запрос более просто:

SELECT * FROM SUPPL WHERE S_CITY IN (`Киев`, `Харьков`).

Оператор BETWEEN задает интервал принадлежности значения столбца заданным границам. Например, выбор заказов на товар с кодом «11288», выполненных поставщиком с кодом «008» в интервале от 01.08.2000г. до 05.10.2000г., выполнится командой:

SELECT * FROM ORDERS WHERE G_ID=`11288`

AND S_ID=`008` AND DAT BETWEEN {01.08.200} AND {05.10.2000}.

Выбор заказов на товары стоимостью от 10 грн. до 50 грн., сделанных поставщику с кодом «008», выполнится командой:

SELECT * FROM ORDERS WHERE S_ID=`008` AND PRICE BETWEEN 10 AND 50.

Оператор LIKE используется для поиска строк, поэтому он применяется только для столбцов из символьными данными. С этим оператором могут использоваться шаблоны.

В строке-шаблоне разрешается использовать два трафаретных символа:

  • Символ подчеркивания "_" может использоваться вместо любого единичного символа в строке-поиска,

  • Символ процента "%" может заменять набор любых символов в строке-поиска (число символов в наборе может быть от 0 и более).

Оператор LIKE часто используют для поиска имени или названия, полное написание которого неизвестно.

Например, для поиска данных о поставщике с именем, которое начинается на «А», необходимо выполнить следующее:

SELECT * FROM SUPPL WHERE S_NAME LIKE `A%`.

В этом случае будут выданы данные обо всех поставщиках с именем, которое начинается на «А».

Оператор ISNULL используется для поиска в таблице записей со значением в заданном столбце NULL (этот параметр указывается в команде создания таблицы CREATE TABLE). Например, для нахождения в таблице GOOD всех записей со значением NULL в столбце PAR_3, необходимо выполнить команду:

SELECT * FROM GOOD WHERE PAR_3 IS NULL.

Если необходимо с исходного массива исключить нулевые строки, можно использовать операторы NOT NULL. Например, вывод всех товаров, у которых атрибут PAR_3 не содержит пустых значений, будет выполнен следующим образом:

SELECT * FROM GOOD WHERE PAR_3 IS NOT NULL.

С каждым из перечисленных операторов можно применять логический оператор NOT, тогда результат запроса будет выдавать инверсные строки.