Структура языка SQL

Автор: Пользователь скрыл имя, 17 Декабря 2010 в 12:17, курсовая работа

Описание работы

Цель данной курсовой работы заключается в том, что нужно попытаться подробно рассмотреть структуру языка SQL.

Достижение таковой цели возможно при выполнении следующих задач:

- изучить нужные материалы данной темы,

- понять и расписать структуру языка SQL,

- рассмотреть операторы языка SQL,

- сделать соответствующие выводы.

Работа содержит 1 файл

структура языка SQL.doc

— 210.00 Кб (Скачать)

     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/1939",NULL)

     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.12.1946|

     4|6|петунин|кладовщик|80.0||

             . . .

     Оператор 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.dolvnost and zarplata>300

     Группировка 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

Информация о работе Структура языка SQL