русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Оператор SELECT


Дата добавления: 2015-07-09; просмотров: 859; Нарушение авторских прав


Оператор SELECT позволяет формировать запрос к базе данных. В результате выполнения этого оператора СУБД формирует результирующий набор (иногда также называемый набором данных). Если этот оператор был введен в интерактивном режиме взаимодействия с базой данных, то результат отображается в виде таблицы в текущем диалоговом окне. На рисунке 3.1. приведен пример выполнения оператора SELECT, извлекающего данные всех столбцов из таблицы dept.

Рис. 3.1. Выполнение оператора SELECT

Если оператор SELECT выполняется из приложения на другом языке программирования, то формируется результирующий набор, размещаемый в памяти приложения или сервера БД, а затем приложение извлекает данные из результирующего набора в свои переменные.

Оператор SELECT имеет в стандарте SQL92 следующее формальное описание:

SELECT [DISTINCT]
{ {function_agregate | expr [AS new_field_name] } .,:
| specification.*
| *
[INTO list_variable]
FROM {{ имя_таблицы [AS] [table_alias] [(field .,:)]}
| {subquery [AS] subquery_alas [(field .,:)]}
| union_table
| constructor_of_table_value
| {TABLE имя_таблицы [AS] alias [(field .,:)]}
} .,:
[WHERE condition]
[GROUP BY {{ имя_таблицы | alias }.field} .,: {COLLATE name]]
[HAVING condition]
[{ UNION | INTERSECT | EXCEPT } [ALL]
[CORRESPONDING [BY (field.,:)]]
SELECT_operator | {TABLE имя_таблицы} | constructor_of_table_value [ORDER BY] {{field_result [ASC|DESC]}.,:}
|{{ integer [ASC|DESC]}.,:} ;

Для выполнения запроса требуется привилегия SELECT на все таблицы, участвующие в запросе.

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

SELECT * FROM tbl1;



Имя поля может быть квалифицировано именем таблицы, указываемым через точку. Например:

SELECT tbl1.f1, tbl2.f1 FROM tbl1, tbl2;

Фраза FROM определяет одну или несколько таблиц или подзапросов, используемых для извлечения данных.

Фраза INTO используется только во встроенном SQL, указывая переменные, в которые записывается результат запроса. При этом формируемый результирующий набор может содержать только одну строку.

Фраза WHERE определяет условие, которому должны удовлетворять все строки, используемые для формирования результирующего набора.

Во всех операциях сравнения языка SQL применяется трехзначная логика (3VL). Предикат, указываемый фразой WHERE, может принимать одно из следующих значений: TRUE, FALSE или UNKNOWN. Значение UNKNOWN получается при сравнении значения NULL с любым другим значением, включая значение NULL.

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

Кроме стандартных операторов сравнения, таких как =, <>, >, <, >=, <= могут быть использованы следующие операторы:

  • BETWEEN - возвращает TRUE, если значение находится в указанном диапазоне. Например:

x BETWEEN y AND z

эквивалентно выражению

(x<=z) AND (x>=y);

  • IN - совпадает с одним из перечисленных в списке. Например:

x IN (a,b,c);

  • LIKE - возвращает TRUE для значений, совпадающих с указанной подстрокой символов. Например:

x LIKE 'abc';

  • IS NULL - возвращает TRUE, если значение равно NULL. Этот предикат возвращает только значение TRUE или FALSE. Например:

x IS NULL;

  • EXISTS - предикат существования, возвращающий значение TRUE, если указанный в нем подзапрос содержит хотя бы одну строку. Например:

SELECT * FROM tbl1 t_out
WHERE EXISTS (SELECT * FROM tbl1 t_in
WHERE t_in.f1= t_out.f1);

  • UNIQUE - предикат уникальности, возвращающий значение TRUE, если указанный в нем подзапрос не содержит одинаковых строк;
  • MATCH - предикат совпадения, возвращающий значение TRUE, если при частичном совпадении (указана фраза PARTIAL) все значения сравниваемой строки равны NULL или существует хотя бы одна строка подзапроса, совпадающая с сравниваемой строкой.
  • OVERLAPS - предикат перекрытия, возвращающий значение TRUE, если сравниваемый период времени перекрывает другие указанные периоды. Тип сравниваемых данных может быть DATETIME или INTERVAL (допустим только для второго значения);
  • SOME, ANY или ALL - предикаты количественного сравнения, для которых существуют следующие правила:
Вариант сравнения Предикат
SOME ANY All
Результат сравнения конструктора значений строки с каждой строкой из набора строк, полученных как подзапрос, равен TRUE TRUE TRUE TRUE
Результат выполнения подзапроса не содержит строк для сравнения FALSE FALSE TRUE
Результат сравнения конструктора значений строки с каждой строкой из набора строк, полученных как подзапрос, равен FALSE FALSE FALSE FALSE
Хотя бы один из результатов сравнения конструктора значений строки со строкой из набора строк, полученных как подзапрос, равен TRUE TRUE TRUE UNKNOWN

· Для примера обозначим строку запроса заключенной в скобки, а строки подзапроса разделенными пробелом. Так, следующий предикат вернет значение TRUE:

· (10, 1)> ANY (12, 2 0, NULL 5, 20),

· так как первая строка из подзапроса удовлетворяет условию. А предикат

· (NULL, NULL) = ANY (12, 2 NULL, NULL 5, 20)

· вернет значение UNKNOWN, так как сравнение NULL c NULL в результате дает UNKNOWN. Предикат

· (10, 1)> ALL (12, 0 0, NULL 5, 20)

· вернет значение FALSE, так как сравнение строки (10,1) с каждой строкой подзапроса возвращает значение FALSE.

 



<== предыдущая лекция | следующая лекция ==>
Определение ограничений для таблицы | Функции агрегирования


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.659 сек.