Конечно, вы можете выполнять более сложные запросы в системном каталоге. Объединения, например, могут быть очень удобны. Эта команда позволит вам увидеть столбцы таблиц и базовые индексы, установленные для каждого (вывод показан на Рисунке 24.9):
SELECT a.tname, a.cname, iname, cpositionFROM SYSTEMCOLUMNS a, SYSTEMINDEXES bWHERE a.tabowner = b. tabowner AND a.tname = b.tname AND a.cnumber = b.cnumberORDER BY 3 DESC, 2;
Она показывает два индекса: один - для таблицы Заказчиков и один - для таблицы Продавцов. Последний из них это одностолбцовый индекс с именем salesno в поле snum; он был помещён первым из-за сортировки по убыванию (в обратном алфавитном порядке) в столбце iname. Другой индекс, custsale, используется продавцами, чтобы отыскивать своих заказчиков. Он основывается на комбинации полей snum и cnum внутри таблицы Заказчиков с полем snum, приходящим в индексе первым, как это и показано с помощью поля cposition.
=============== SQL Execution Log ================| || SELECT a.tname, a.cname, iname, cposition || FROM SYSTEMCOLUMNS a, SYSTEMINDEXES b || WHERE a.tabowner = b.tabowner || AND a.tname = b.tname || AND a.cnumber = b.cnumber || ORDER BY 3 DESC, 2; || || ================================================= || tname cname iname cposition || ----------- ------- -------- ------------ || Salespeople sname salesno 1 || Customers cnum custsale 2 || Customers snum custsale 1 || | =================================================== Рисунок 24.9 Столбцы и их индексы
Подзапросы также могут быть использованы. Имеется способ увидеть данные столбца только для столбцов из таблиц каталога:
SELECT *FROM SYSTEMCOLUMNSWHERE tname IN(SELECT tname FROM SYSTEMCATALOG);
Для упрощения мы не будем показывать вывод этой команды, которая состоит из одного входа для каждого столбца каждой таблицы каталога. Вы могли бы поместить этот запрос в представление, назвав его, например, SYSTEMTABCOLS, для представления SYSTEMTABLES.
РЕЗЮМЕ
Итак, система SQL использует набор таблиц, называемый системным каталогом, в структуре базы данных. Эти таблицы могут запрашиваться, но не модифицироваться. Кроме того, вы можете добавлять комментарии столбцов в (и удалять их из) таблицы SYSTEMCATALOG и SYSTEMCOLUMNS.
Создание представлений в этих таблицах - превосходный способ точно определить, какая пользовательская информация может быть доступной.
Теперь, когда вы узнали о каталоге, вы завершили ваше обучение SQL в диалоговом режиме. Следующая глава этой книги расскажет вам, как SQL используется в программах, которые написаны на других языках, но которые способны извлечь пользу из возможностей SQL, взаимодействуя с его таблицами баз данных.