Выбрать главу

так как нужно всегда включать в соединение двух (или нескольких)

таблиц фразу 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;