Чтение онлайн

на главную - закладки

Жанры

Понимание SQL

Грубер Мартин

Шрифт:

COMPUTE SUM OF amt ON odate;

Столбец в предложении ON, предварительно, должен быть использован в команде BREAK.

ФУНКЦИИ

Для SQL в стандарте ANSI, вы можете применять агрегатные функции для столбцов или использовать их значения в скалярных выражениях, таких например как - comm * 100. Имеется много других полезных функций, которые вы, вероятно встречали на практике.

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

МАТЕМАТИЧЕСКИЕ ФУНКЦИИ

Эти

функции применяются для чисел.

ФУНКЦИЯ

ЗНАЧЕНИЕ

ABX(X)

Абсолютное значение из X (преобразование отрицательного или положительного значений в положительное )

CEIL (X)

X - является десятичным значением которое будет округляться сверху.

FLOOR (X)

X - является десятичным значением которое будет округляться снизу.

GREATEST(X,Y)

Возвращает большее из двух значений.

LEAST(X,Y)

Возвращает меньшее из двух значений.

MOD(X,Y)

Возвращает остаток от деления X на Y.

POWER(X,Y)

Возвращает значение X в степени Y.

ROUND(X,Y)

Цикл от X до десятичного Y. Если Y отсутствует, цикл до целого числа.

SING(X)

Возвращает минус если X < 0, или плюс если X > 0.

SQRT (X)

Возвращает квадратный корень из X.

СИМВОЛЬНЫЕ ФУНКЦИИ

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

ФУНКЦИЯ

ЗНАЧЕНИЕ

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

Поделиться:
Популярные книги

Долг

Кораблев Родион
7. Другая сторона
Фантастика:
боевая фантастика
5.56
рейтинг книги
Долг

Черный рынок

Вайс Александр
6. Фронтир
Фантастика:
боевая фантастика
космическая фантастика
космоопера
5.00
рейтинг книги
Черный рынок

Проводник

Кораблев Родион
2. Другая сторона
Фантастика:
боевая фантастика
рпг
7.41
рейтинг книги
Проводник

Пушкарь. Пенталогия

Корчевский Юрий Григорьевич
Фантастика:
альтернативная история
8.11
рейтинг книги
Пушкарь. Пенталогия

Личный аптекарь императора. Том 3

Карелин Сергей Витальевич
3. Личный аптекарь императора
Фантастика:
городское фэнтези
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Личный аптекарь императора. Том 3

Кодекс Охотника. Книга XXXV

Винокуров Юрий
35. Кодекс Охотника
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Кодекс Охотника. Книга XXXV

Мастер...

Чащин Валерий
1. Мастер
Фантастика:
героическая фантастика
попаданцы
аниме
6.50
рейтинг книги
Мастер...

Адвокат Империи 2

Карелин Сергей Витальевич
2. Адвокат империи
Фантастика:
городское фэнтези
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Адвокат Империи 2

Наследие Маозари

Панежин Евгений
1. Наследие Маозари
Фантастика:
рпг
попаданцы
аниме
5.80
рейтинг книги
Наследие Маозари

Дракон - не подарок

Суббота Светлана
2. Королевская академия Драко
Фантастика:
фэнтези
6.74
рейтинг книги
Дракон - не подарок

Метатель

Тарасов Ник
1. Метатель
Фантастика:
боевая фантастика
попаданцы
рпг
фэнтези
фантастика: прочее
постапокалипсис
5.00
рейтинг книги
Метатель

Вперед в прошлое 8

Ратманов Денис
8. Вперед в прошлое
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Вперед в прошлое 8

Камень. Книга вторая

Минин Станислав
2. Камень
Фантастика:
фэнтези
8.52
рейтинг книги
Камень. Книга вторая

Тринадцатый XIII

NikL
13. Видящий смерть
Фантастика:
городское фэнтези
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Тринадцатый XIII