KnigaRead.com/

Мартин Грубер - Понимание SQL

На нашем сайте KnigaRead.com Вы можете абсолютно бесплатно читать книгу онлайн Мартин Грубер, "Понимание SQL" бесплатно, без регистрации.
Перейти на страницу:

Эти функции могут быть применены для строк текста, либо из столбцов текстовых типов данных, либо из строк литерных текстов, или же комбинация из этих двух.


ФУНКЦИЯ

ЗНАЧЕНИЕ

LEFT(<string>,X)

Возвращает крайние левые(старшие) символы X из строки.

RICHT(<string>,X)

Возвращает символы X младшего разряда из строки

ASCII(<string>)

Возвращает код ASCII которым представляется строка в памяти компьютера.

CHR(<ASCIIcode>)

Возвращает принтерные символы кода ASCII.

VALUE(<string>)

Возвращает математическое значение для строки. Считается что строка имеет тип CHAR или VARCHAR, но состоит из чисел. VALUE('3') произведет число 3 типа INTEGER.

UPPER(<string>)

Преобразует все символы строки в символы верхнего регистра.

LOWER(<string>)

Преобразует все символы строки в символы нижнего регистра.

INlTCAP(<string>)

Преобразует символы строки в заглавные буквы. В некоторых реализациях может иметь название - PROPER.

LENGTH(<string>)

Возвращает число символов в строке.

<string>||<string>

Объединяет две строки в выводе, так чтобы после первой немедленно следовала вторая. (значек || называется оператором сцепления).

LPAD(<string >,X,'*')

Дополняет строку слева звездочками '*', или любым другим указанным символом, с колличестве, определяемом X.

RPAD(<string>,X, ")

То же самое что и LPAD, за исключением того, что дополнение делается справа.

SUBSTR(<string >,X,Y)

Извлекает Y символов из строки начиная с позиции X.


ФУНКЦИИ ДАТЫ И ВРЕМЕНИ

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


ФУНКЦИЯ

ЗНАЧЕНИЕ

DAY(<date>)

Извлекает день месяца из даты. Подобные же функции существуют для MONTH(МЕСЯЦ), YEAR(ГОД), HOUR(ЧАСЫ), SECOND(СЕКУНДЫ) и так далее.

WEEKDAY(<date>)

Извлекает день недели из даты.


ДРУГИЕ ФУНКЦИИ

Эта функция может быть применена к любому типу данных.


ФУНКЦИЯ

ЗНАЧЕНИЕ

NVL(<column>,<value>)

NVL (NULL Значение) будет меняться на значение <value> каждое NULL значение найденое в столбце <column>. Если полученное значение <column > не=NULL, NVL ничего не делает.


INTERSECT И MINUS

Команда UNION, как вы уже видели в Главе 14, может объединить два запроса, обьединив их вывод в один. Два других обычно имеющихся способа объединения отдельных запросов - это INTERSECT(Плюс) и MINUS(Минус). INTERSECT выводит только строки произведенные обоими перекресными запросами, в то время как MINUS выводит строки которые производятся одним запросом, но не другим. Следовательно, следующие два запроса


SELECT *

FROM Salespeople

WHERE city='London'


INTERSECT


SELECT *

FROM Salespeople

WHERE 'London' IN

(SELECT city

FROM Customers

WHERE Customers.snum=

Salespeople.snum);


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


SELECT *

FROM Salespeople

WHERE city='London'


MINUS


SELECT *

FROM Salespeople

WHERE 'London' IN

(SELECT sity

FROM Customers

WHERE Customers.snum=

Salespeople.snum);


удалит строки выбранные вторым запросом из вывода первого, и таким образом будут выводены все продавцы в Лондоне которые не имели там заказчиков. MINUS иногда еще называют DIFFERENCE (ОТЛИЧИЕ)


АВТОМАТИЧЕСКИЕ ВНЕШНИЕ ОБЬЕДИНЕНИЯ

В Главе 14, мы обсуждали внешнее обьединение и показывали вам как выполнять его используя команду UNION. Некоторые программы базы данных имеют более непосредственный способ выполнения внешних обьединений. В некоторых реализациях, вводимый знак " + " после предиката, может выводить строки которые удовлетворяют условию также как и строки которые ему не удовлетворяют. В условии предиката может содержаться поле совпадающее для обеих таблиц, и NULL значения будут вставлены там, где такого совпадения не будет найдено. Например, предположим вы хотите видеть ваших продавцов и соответствующих им заказчиков, не исключая тех продавцов которым не назначено ни одного заказчика (хотя такого нет в наших типовых таблицах, но в действительности это возможно ) :


SELECT a.snum, sname, cname

FROM Salespeople a, Customers b

WHEREa.snum=b.snum(+);


Это является эквивалентом следующего объединения (UNION):


SELECT a.snum, sname, cname

FROM Salespeople a, Customers b

WHERE a.snum=b.snum


UNION


SELECT snum, sname, '_ _ _ _ _ _ _ _ _ _'

FROM Salespeople

WHERE snum NOT IN

(SELECT snum

FROM Customers);


Мы считаем что подчеркивания будут отображены NULL значениями( см. команду FORMAT ранее в этом приложении где описывалось отображение NULL значениями).

ОТСЛЕЖИВАНИЕ ДЕЙСТВИЙ

Ваша SQL реализация - достаточна хороша, если она доступна многим пользователями, чтобы обеспечивать для них некий способ слежения за действиями выполняемыми в базе данных. Имеются две основные формы чтобы делать это:


Journaling(Протоколирование) и Auditing(Ревизия).


Эти формы отличаются по назначению. Journaling, пименяется с целью защиты ваших данных, при разрушении вашей системы. Сначала Вы используете реализационно-зависимую процедуру чтобы архивировать текущее содержание вашей базы данных, поэтому копия ее содержания где-нибудь будет сохранена. Затем вы просматриваете протокол изменений сделанных в базе данных. Он сохраняется в некоторой области памяти, но не в главной памяти базы данных а желательно на отдельном устройстве, и содержит список всех команд которые произвели изменения в структуре или в содержании базы данных. Если у вас вдруг появились проблемы и текущее содержание вашей базы данных оказалось нарушенным, вы можете повторно выполнить все изменения зарегистрированные в протоколе на резервной копии вашей базы данных, и снова привести вашу базу данных в состояние которое было до момента последней записи в протокол. Типичной командой чтобы начать протоколирование, будет следующяя:


SET JOURNAL ON;


Auditing используется c целью защиты. Она следит за тем, кто и какие действия выполнял в базе данных, и сохраняет эту информацию в таблице доступной только очень немногим высоко привилегированным пользователям. Конечно, вы редко будете прибегать к процедуре ревизии, потому что очень скоро она займет много памяти и вам будет сложно работать в вашей базе данных. Но вы можете устанавливать ревизию для определенных пользователей, определенных действий или определенных объектов данных.

Имеется такая форма команды AUDIT:


AUDIT INSERT ON Salespeople BY Diane;


Или предложение ON или предложение BY могут быть исключены, устанавливая ревизию, либо всех объектов или всех пользователей, соответственно. Применвние AUDIT ALL, вместо AUDIT INSERT, приведет к отслеживанию всех действий Diane в таблице Продавцов.

Приложение D. СИНТАКСИС И КОМАНДА ССЫЛКИ


ЭТО ПРИЛОЖЕНИЕ СОДЕРЖИТ БОЛЕЕ КРАТКОЕ описание различных команд SQL.

Цель состоит в том, чтобы дать вам быструю и точную ссылку и определение SQL. Первый раздел этого приложения определяет элементы, используемые для создания команд SQL; второй, подробности синтаксиса и предложения с кратким описанием самих команд. Далее показаны стандартные условные обозначения (они называются BNF условиями):

* Ключевые cлова набираются в верхнем регистре.

* SQL и другие специальные условия заключаются в угловые скобки и набираются курсивом (<and> ).

* Необязательные части команд находятся в квадратных скобках ([and]).

* Многоточие (.... ) указывает на то что предшествующая часть команды может повторяться любое число раз.

* Вертикальная полоса (| ) означает - то, что ей предшествует может быть заменено на то что следует за ней.

* Фигурные Скобки ({and} ) указывают - все что внутри них, должно быть расценено как целое, для оценки других символов (например, вертикальных полос или эллипсов ).

* Двойное двоеточие и равняется (::=) означают - то что следует за ними является определением того что им предшествует.


Кроме того, мы будем использовать следующую последовательность (.,..) чтобы указывать, что предшествующее этому может повторяться любое число раз с индивидуальными событиями отделяемыми запятыми. Атрибуты которые не являются частью официального стандарта будут отмечены как (*нестандартные*) в описании.

ОБРАТИТЕ ВНИМАНИЕ: Терминология которую мы используем здесь, не официальная терминология ANSI. Официальная терминология может вас сильно запутать, поэтому мы несколько ее упростили.

Перейти на страницу:
Прокомментировать
Подтвердите что вы не робот:*