так как нужно всегда включать в соединение двух (или нескольких)
таблиц фразу ON или USING. Это полезно, поскольку возникновение декартовых
произведений обычно нежелательно.
Но если вы хотите Создать декартово произведение, стандарт SQL/92
требует, чтобы это было явно указано в запросе с помощью ключевых слов
CROSS JOIN. В следующем примере генерируется декартово произведение
двух таблиц products и product_types, для чего используются ключевые слова
CROSS JOIN:
□ SELECT *
FROM product_types CROSS JOIN products;
Итоги
В этой главе вы узнали, как:
■ Выполнять запросы для одной или нескольких таблиц.
■ Отбирать из таблицы все столбцы, используя в запросе символ звездочки
(*).
■ Использовать внутри базы данных Oracle идентификатор строк
(rowid) для доступа к строкам.
■ Выполнять арифметические действия в операторах SQL.
■ Использовать операторы сложения и вычитания для дат.
■ Ссылаться на столбцы и таблицы, используя для этого псевдонимы.
■ Соединять столбцы в выходных данных, используя для этого оператор
конкатенации ( 11).
■ Использовать пустые значения (null) для представления неизвестных
значений.
■ Выводить на экран только различные строки, используя оператор
DISTINCT.
■ Ограничивать число отобранных строк, используя фразу WHERE.
66 Глава 2
■ Сортировать строки, используя фразу ORDER BY.
■ Выполнять внутренние, внешние и самосоединения, используя синтаксис
SQL/86 и SQL/92. В следующей главе вы ознакомитесь с
SQL*Plus.
Глава 3
Использование
SQL*Plus
Просмотр структуры таблицы
Знание структуры таблицы оказывается полезным, поскольку эту информацию
можно использовать при формулировании запроса SQL. Например,
можно уточнить, к каким именно столбцам нужно обратиться в запросе
SQL. Для просмотра структуры таблицы используется команда
DESCRIBE.
В следующем примере команда DESCRIBE используется для знакомства со
структурой таблицы customers; обратите внимание, что в конце команды
опущена точка с запятой (;):
□ SQL> DESCRIBE customers
Name N ull? Type
CUSTOMER_ID NOT NULL NUMBER(38)
FIRSTJIAME NOT NULL VARCHAR2(10)
LAST_NAME NOT NULL VARCHAR2(10)
DOB DATE
PHONE VARCHAR2(12)
Как видно из этого примера, в выходных данных команды DESCRIBE есть
три столбца, отображающих структуру таблицы базы данных:
■ Name Перечисляет имена столбцов, содержащихся в таблице. Из
приведенного выше примера видно, что в таблице customers пять
столбцов: customer_id, first_name, last_name, dob и phone.
■ Null? Указывает, могут ли в столбце храниться пустые (null) значения.
Если значение столбца равно NOT NULL, в столбце не могут храниться
пустые значения. Из примера видно, что столбцы customeг_
id, first_name, last_name не могут содержать пустых значений,
а столбцы dob и phone могут.
■ Туре Указывает тип столбца. Из примера видно, что тип столбца
customer_id - NUMBER(38), а тип first_name - VARCHAR2(10).
Вы можете сократить время на набор команды DESCRIBE, используя короткое
имя DESC (от DESC[RIBE]). В следующем примере сокращенная команда
DESC используется для просмотра структуры таблицы products:
□ SQL> DESC products
Name N ull? Type
PR0DUCT_ID NOT NULL NUMBER(38)
Использование SQL*Plus 69
PRODUCT JTPE_ID NUMBER(38)
NAME NOT NULL VARCHAR2(30)
DESCRIPTION VARCHAR2(50)
PRICE NUMBER(5, 2)
Редактирование выражений SQL
Как вы уже поняли, вводить одинаковые операторы SQL в SQITPlus повторно
крайне утомительно, но SQL/Plus хранит ранее введенные операторы
SQL в буфере. Благодаря этому, можно редактировать строки, введённые
ранее.
Некоторые команды редактирования перечисляются в следующей таблице.
Необязательная часть каждой команды отмечается с помощью квадратных
скобок; например, можно сократить команду APPEND до А.
Команда Описание
А[ PPEND] текст Добавляет текст к текущей строке
С[HANGE] / с т а - Для текущей строки изменяет на новый текст, указа! i-
рый/новый ный значением старый.
CL[EAR] BUFF[ER] Очищает все строки буфера.
DEL Удаляет текущую строку.
DEL х Удаляет строку под номером х (номера строк начинаются
с 1).
L [ IST ] Выводит все строки буфера.
L[ 1ST] х Выводит строку с номером х.
R[UN] или / Выполняет оператор, хранящийся в буфере. Для выполнения
оператора из буфера можно использовать
также символ /.
х Делает текущей строку под номером х.
Ниже даны некоторые примеры применения команд редактирования
SQITPlus. Сначала введем в SQITPlus оператор SELECT:
□ SQL> SELECT customer_id, first_name, last_name
2 FROM customers
3 WHERE customer_id = 1;