DB2 – система управления реляционными базами данных. Заданное число упорядоченных столбцов и неупорядоченные строки, страница 14

Порядок выбора условий может быть изменен использованием круглых скобок, например:

SELECT * FROM sales_person

WHERE ( town LIKE ‘Stoke%’ OR town = ‘London’ )

AND dept = 4


NULL-значения и арифметика

Правило управления NULL-значением в арифметическом выражении логически соответствует математическим правилам. Если вы берете неизвестное значение и добавляете к нему 5, логически вы получаете неизвестное значение.


EXISTS

  • EXISTS – специальный предикат; он возвращает ИСТИНА, если найдены одна или более строк удовлетворяющих подзапросу. И возвращает ЛОЖЬ, если ни одна из строк не удовлетворяет подзапросу

SELECT fname, lname, emp_no

FROM sales_person

WHERE EXISTS

(

SELECT * FROM sale

WHERE sales_person.emp_no = sp_no

)

Результат предиката – “истина”, если результирующее множество, возвращаемое подзапросом содержит хотя бы одну строку, и “ложь” – в противном случае.

Выше – пример коррелированного подзапроса.


UNION


Customers1992

 


                                                                                             MailShot

 


Customers1993

 


Предложение UNION может использоваться для объединения двух или более результирующих таблиц. Результирующие таблицы для каждого из SELECT операторов должны иметь одинаковое количество столбцов и типы данных соответствующих столбцов должны быть совместимы. При этом:

  • UNION ALL – включить и дублирующие строки
  • UNION – исключить дублирующиеся строки

Пример:

SELECT NAME, ADDRESS, PHONE FROM CUST92

UNION

SELECT NAME, ADDRESS, PHONE FROM CUST93

Результат будет содержать строки из обеих таблиц.


Пример использования SELECT в операторе INSERT

  • Подзапросы могут также использоваться для INSERT

INSERT INTO Dept (Dept_No, Dept_Name)

(

SELECT Dno, Dname

FROM NewDepts

WHERE agreed = ‘Y’

)

Вложенные подзапросы могут использоваться также для передачи данных в INSERT предложение. Каждому столбцу в списке INSERT, должен соответствовать столбец в списке SELECT. Каждая возвращаемая из SELECT строка вставляется в таблицу.

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


Алиасы таблиц

 


SELECT *

FROM sales_person, sales_person

 


?                      ?

 


Sales_Person                                            Sales_Person

 


Иногда возникает необходимость включить некоторую таблицу в запрс дважды. Самоссылающиеся соединения и коррелированные подзапросы (оба рассматриваются позднее) – типичные примеры.

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

Это имя может быть задано в предложении FROM после реального имени таблицы, например:

FROM sales_person SP1, sales_person SP2

Это имя можно затем использовать как префикс к имени столбца, что позволит системе воспринимать его как принадлежащий другой таблице, например:

SELECT SP1.sp_no ….

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

FROM Sales_Targets_1993Q1 X


Упорядочивание данных

·  По столбцу

SELECT * FROM company

ORDER BY company_no

·  По номеру столбца

SELECT sales_target, sales_target * 1.2

FROM sales_person

ORDER BY 2

Вы можете запросить упорядочивание строк результирующего множества с помощью предложения ORDER BY. Имя столбца, по которому выполняется упорядочивание может быть задано по имени или по номеру столбца в списке столбцов выборки.

Вы можете например запросить информацию из всех столбцов таблицы в возрастающем или убывающем порядке, например: