Автор: Пользователь скрыл имя, 17 Декабря 2010 в 12:17, курсовая работа
Цель данной курсовой работы заключается в том, что нужно попытаться подробно рассмотреть структуру языка SQL.
Достижение таковой цели возможно при выполнении следующих задач:
- изучить нужные материалы данной темы,
- понять и расписать структуру языка SQL,
- рассмотреть операторы языка SQL,
- сделать соответствующие выводы.
CREATE AUDIT FOR kadry IN "/udd/moshkow/kadry.audit"
Естественно, что любой созданный в базе данных объект можно уничтожить. Надо только помнить, что операторы описания данных не откатываются назад, а потому если вы уничтожили таблицу, или базу данных то знайте, что это навсегда.
DROP VIEW poor # Уничтожается только view. С данными в табли-
# цах, на которых оно базировалось ничего не
# происходит.
DROP TABLE kadry # уничтожает таблицу вместе с данными.
DROP INDEX indkdtb
DROP SYNONYM t1
DROP DATABASE zawod # уничтожает базу вместе со всеми данными и
# системным журналом
2.4. Операторы манипуляции данными
Следующая группа операторов предназначена для манипулирования данными в таблицах. В нее входят операторы выбора (SELECT) строк из таблицы (или таблиц), уничтожения (DELETE) строк в таблице, вставки (INSERT) строк, и изменения (UPDATE) значений в существующих в таблице строках.
Оператор DELETE.
Уничтожить в таблице kadry все строки, в которых номер цеха равен 4, а фамилия кончается на буквы "ов"
DELETE FROM kadry WHERE ceh=4 AND fio MATCHES "*ов"
В результате из списков будут вычеркнуты работники 4-го цеха "Петров", "Иванов", "Сидоров" и т.п
Как видим, INFORMIX предоставляет националистически озабоченным руководителям мощные средства для воплощения в жизнь своих идей.
А этот оператор уничтожит ВСЕ строки в таблице kadry, владельцем которой является moshkow, но не саму таблицу
DELETE FROM moshkow.kadry
Простейшая форма оператора SELECT.
Первый пример находит в таблице kadry строку, в которой столбец tabnum=345 . Из этой строки берутся только три указаных столбца.
Второй пример выбирает ВСЕ строки из таблицы ceh, и все столбцы.
SELECT fio, dolvn, zarplata FROM kadry WHERE tabnom=345
SELECT * FROM ceh
SELECT kadry.fio, ceh.nameceh WHERE kadry.nomerceh=ceh.nomerceh
Третий пример выбирает фамилии работников из таблицы кадры, а названия цехов, в которых они работают, из таблицы ceh.
Оператор INSERT.
Может вставить в таблицу одну строку, если используется в форме INSERT INTO ... VALUES, а может вставить в таблицу целый набор строк, выбранных подзапросом SELECT из другой таблицы.
INSERT
INTO kadry VALUES (4,0,"Грицько",num,"10/25/
INSERT INTO customer VALUES (ps_customer.*)
# ps_customer - переменная типа RECORD - аналог структуры в языке Си. Этот оператор вставляет значения элементов записи # ps_customer в соответствующие поля таблицы customer
INSERT INTO kadry (tabnom, fio, nomerceh, dolvnostx)
SELECT 0 , fio, 4, dolvnostx FROM kadryold
WHERE nomerceh=3 AND fio IS NOT NULL
# последний оператор вставляет сразу несколько строк
Если мы хотим, чтобы при вставлении строки в столбец типа SERIAL автоматически заносилось очередное значение счетчика, нужно вставлять в этот столбец константу 0.
Если не во все столбцы вставляемой строки вносится значение (как это сделано в третьем операторе), то незаполненные столбцы заполняются значением NULL.
В операторах DELETE, UPDATE, SELECT может присутствовать WHERE предложение, в котором можно задать условия на строки, которые требуется обработать (соответственно уничтожить, изменить или выбрать). Рассмотрим примеры использования WHERE предложения.
Оператор UPDATE.
Меняет значения столбцов, в строках, удовлетворяющим WHERE условию.
UPDATE kadry SET fio="Зыкова" WHERE fio="Гирусова"
UPDATE ceh SET kod_ceha[1,4]=nameceh[5,8] WHERE
nomerceh BETWEEN 3 AND 5 OR nameceh IN ("токарный","литейный")
В таблице ceh в цехах номер 3,4,5 а так же в токарном и литейном первые четыре символа в коде цеха будут заменены на подстроку поля nameceh из той же строки.
Предложение WHERE может присутствовать в любом из операторов DELETE, UPDATE, SELECT, когда нужно задать условия на строки, которые требуется обработать (соответственно, уничтожить, изменить или выбрать). Рассмотрим структуру и примеры использования предложений WHERE.
В предложении WHERE пишется логическое условие, которое получается соединением с помощью логических операторов AND, OR и NOT элементарных сравнений типа:
выражение1 < выражение2,
выражение1 >= выражение2, и т.п.,
а так же элементарных сравнений специального вида:
column-name IS [NOT] NULL
выраж [NOT] BETWEEN выраж1 AND выраж2
выраж [NOT] IN (выраж1 , ... [, ...] )
Можно выяснить, подходит ли символьная строка под определенный шаблон, или нет. Для этого используются две операции сравнения по шаблону - LIKE и MATCHES.
симв-выражение MATCHES "шаблон"
симв-выражение LIKE "шаблон"
LIKE имеет более простой шаблон. В нем используются только два спецсимвола: (%) замещает произвольное количество символов, (_) замещает ровно один символ. Все остальные символы в шаблоне обозначают сами себя. Если мы хотим включить в шаблон % или _ отменив их специальный смысл, то перед ними надо поставить ESC символ (по умолчанию это (\)).
Допустим нам нужно выбрать из таблицы tab8 все строки, в которых символьный столбец string1 содержит символ "+" а предпоследняя буква в нем - "Ы". Оператор выборки будет выглядеть так:
SELECT * FROM tab8 WHERE string1 LIKE "%+%Ы_"
MATCHES использует такие спецсимволы шаблона: *,?,[,],^,-.
* заменяет любое количество символов
? заменяет один любой символ
[...] заменяет один символ из перечисленных в скобках
возможно указание от и до (-), и не (^)
[abH] - любой из символов a, b, H
[^d-z] - любой символ, исключая d,e,f,g, ... ,y,z
\ отменяет спецсмысл спецсимволов *,?,[,]
Если вы хотите воспользоваться спецсимволами как обычными, примените escape-char. Если escape-char="\", то \? Обозначает просто символ ?, \* обозначает просто символ *, \\ обозначает просто символ \ . Зато знак кавычки (") внутри шаблона нужно обозначать двумя кавычками ("").
Выбрать все данные о заказчиках в названии компании которых вторая буква не лежит в интервале от G до L, а третья буква c. (Кстати, коды русских букв на БЕСТЕ идут подряд, но в отличие от латинских букв, русские не упорядоченные по алфавиту.)
SELECT * FROM customer WHERE company MATCES"?[^G-L]c*"
Выбрать все данные о заказчиках в названии компании которых
присутствует вопросительный знак.
SELECT * FROM customer
WHERE company MATCHES "*Я?*" ESCAPE"Я"
В данном примере использовался ESC-символ "Я" для отмены спец смысла символа "?"
Оператор UNLOAD сбрасывает данные из таблицы в файл в печатном представлении. Каждая строка преобразуется в отдельную запись, значения из столбцов разделяются символом "|".
После выполнения оператора
UNLOAD TO "kadry19.unl" SELECT * FROM kadry
в файле kadry19.unl можно будет обнаружить следующее:
5|5|туев|завхоз|100.0|31.
4|6|петунин|кладовщик|80.
. . .
Оператор LOAD выполняет обратную операцию - считывает строки из файла и вставляет их в таблицу. Естественно, что типы и количество значений в строках файла должны соответствовать столбцам таблицы.
LOAD FROM "kadry20.unl" INSERT INTO kadry
Предложения INTO, INTO TEMP, FROM.
Выбрать все строки (нет предложения WHERE) из таблицы kadry, взять в них все столбцы (вместо перечисления столбцов стоит *), оставить только различные строки (ключевое слово UNIQUE) и поместить результат во временную таблицу (INTO TEMP) x, которая будет при этом создана с такими же столбцами, что и у kadry.
SELECT UNIQUE * FROM kadry INTO TEMP x
Выбирать можно из нескольких таблиц. При этом берутся все возможные комбинации строк из первой таблицы со второй. Предположим, что таблице tab1 6 строк а в tab2 - 7 строк. Результат нижеприведенного примера - таблица, содержащая три столбца и 7*6=42 строки.
SELECT tab1.a-tab2.b, tab1.a, tab2.b FROM tab1, tab2
Мы сейчас не будем уточнять, куда именно результирующая таблица помещается. Но использовать ее можно по разному: ее можно перегнать (INTO TEMP) во временную таблицу, ее можно отдать на обработку другому оператору (если выборку осуществлял подзапрос), для нее можно создать курсор ("буфер" с указателем на текущую строку), а можно положить ее (INTO) в простую программную переменную (если выбрано не более одной строки).
Выбранные строки можно упорядочить по возрастанию (убыванию) значения в столбце (столбцах)
SELECT a,b,c,d+e FROM tabl ORDER BY b,c
SELECT a,b,c,d+e FROM tabl ORDER BY 2,3
В ORDER BY предложении вместо имени столбца можно указывать его
порядковый номер в списке выборки (select-list). Вышеприведенные операторы эквивалентны.
Поместить значения из столбцов в переменные: (Поскольку lname используется и как имя переменной, и как имя столбца, то имя столбца предваряется знаком (@)
SELECT customer_num, @lname,city INTO cnum,lname,town
FROM customer
Агрегатные функции.
К выбранным строкам можно применять агрегатные функции COUNT(*) - количество, MAX(column) и MIN(column) - максимальное и минимальное значение в столбце, SUM(column) - сумма всех значений в столбце, AVG(column) - среднее значение в столбце.
Поместить в переменную num количество строк в таблице orders, в которых столбец customer_num равен 101:
SELECT COUNT(*) INTO num
FROM orders WHERE customer_num=101
Пример с использованием соединения таблиц. Находится среднее значение зарплаты превосходящей 300 (столбец zarplata принадлежит одной из таблиц), при условии совпадения столбцов dolvnost в двух таблицах.
SELECT AVG (zarplata) FROM table1,table2
WHERE
table1.dolvnost=table2.
Группировка GROUP BY.
Группировка используется для для "сплющивания" группы (строк) в одну. Результат запроса содержит одну строку для каждого множества строк, удовлетворяющих WHERE предложению и содержащих одно и то же значение в указанном столбце.
SELECT dolvnostx, COUNT(*), AVG(zarplata) FROM kadry
GROUP BY dolvnostx
Получить количество работающих и их среднюю зарплату по каждой должности из штатного расписания.
SELECT dolvnostx, COUNT(*), AVG(zarplata) FROM kadry GROUP BY 1
Эквивалентная запись. Предложение HAVING накладывает дополнительные условия на группу.
SELECT order_num, AVG(total_priece) FROM items