Подзапросы возражающие множество строк в качестве результата


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

  • IN – эквивалетно значению любого элемента из подзапроса
  • ANY – сравнивает значение со всеми значениями из подзапроса, возвращая true если сравнение верно для любого ОДНОГО значения из списка
  • ALL – сравнивает значение со всеми значениями из подзапроса, возвращая true если сравнение верно для ВСЕХ значений из списка

Разберем свойства и методы применения каждого из операторов по отдельности.

Правильным решением задачи, является:

SELECT *

FROM emp

WHERE job in (SELECT job

FROM emp

WHERE sal> 1000)

Оператор IN – опеспечивает сравнения столбца job со всеми значениями из подзапроса. В результате данного примера выйдет столько строк, сколько будет совпадений столбца со значениями подзапроса.

Оператор ANY, как уже отмечалось ANY сравнивает значение со всеми значениями из подзапроса. При этом зависимости от знака равенства смысл оператора изменяется. Таким образом, если использовать знак равенства вместе с ANY у нас получиться эквивалент оператору IN. При этом если будет применяться знак < и ANY то будет иметь смысл меньше минимального значения из списка. Если же > и ANY то будет иметь смысл больше максимального значения из списка.

Вывидим сотрудников, чьи зарплаты больше зарплаты хотя бы одного из сотрудника отдела ANALYST.

SELECT *

FROM emp

WHERE sal> ANY (SELECT sal

FROM emp

WHERE job = 'ANALYST')

Оператор ALL, как уже отмечалось ALL сравнивает значение со всеми значениями из подзапроса. При этом зависимости от знака равенства смысл оператора изменяется. При этом если будет применяться знак < и ALL то будет иметь смысл меньше минимального значения из списка. Если же > и ALL то будет иметь смысл больше максимального значения из списка.

Вывидим сотрудников, чьи зарплаты больше зарплат ВСЕХ сотрудников отдела ANALYST.

SELECT *

FROM emp

WHERE sal> ALL (SELECT sal

FROM emp

WHERE job = 'ANALYST')

 

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

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

 

EXISTS

Оператор EXISTS берет подзапрос, как аргумент, и оценивает его как верный, если подзапрос возвращает какие-либо записи и неверный, если тот не делает этого. То есть если наш подзапрос возвращает хотя бы одну строку то - это выражение принимается за истину.

Читателю может показаться что это функция редко используемая - но такое мнение может сложится только при небольшом опыте общения с коллегами из департамента маркетинга. Иногда маркетологи придумывают ужасные условия и хотят тут же получить результат. EXIST поможет вам справиться как и с ужасными условиями так и с быстротой получение результата. Так как использование оператора EXIST увеличивает производительность выполнения отчета.



 

SELECT * FROM emp e1

WHERE EXISTS(SELECT * FROM emp e2

WHERE e1.job=e2.job

and e2.sal>=3000)

ORDER BY sal, job

 

ENAME JOB SAL DEPTNO
FORD ANALYST 3 000,00
SCOTT ANALYST 3 000,00
KING PRESIDENT 5 000,00

 

Рассмотрим, более подробно оператор EXISTS. EXISTS как мы поняли это оператор, который возвращает всего лишь два значение TRUE | FALSE. В случае если результат подзапроса возвращает хотя бы одну строку, то TRUE, иначе FALSE. Таким образом, верхний запрос возвращает всех сотрудников, если поданнойпрофесии есть хотя бы один сотрудник кто получает >= 3000.

Хотя на практике можно встретить, верхний запрос переписанный в такой вид:

SELECT ename, job, sal, deptno FROM emp e1

WHERE 0 < (SELECT COUNT(*) FROM emp e2

WHERE e1.job=e2.job

and e2.sal>=3000)

ORDER BY sal, job

ENAME JOB SAL DEPTNO
FORD ANALYST 3 000,00
SCOTT ANALYST 3 000,00
KING PRESIDENT 5 000,00

 

54 Язык SQL:основные команды определения данных.

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

Примеркоманды create table:

create table ClientInfo (FirstNamevarchar(20), LastNamevarchar(20), Address varchar(20), Phone varchar(15)

Тип varchar предназначен для хранения символов не в кодировке Unicode. Число, указываемое в скобках, определяет максимальный размер поля и может принимать значение от 1 до 8000. Если введенное значение поля меньше зарезервированного, при сохранении будет выделяться количество памяти, равное длине значения. После выполнения этого запроса в окне «Сообщения» появляется сообщение: Команды выполнены успешно.

После перезапуска ManagementStudio в списке таблиц появилась новая таблица

Итак, была создана таблица, состоящая из четырех полей типа varchar, причем для трех полей была определена максимальная длина 20 байт, а для одного - 15. Значения полей не заполнены - на это указывает величина Null.

Можно удалить созданную таблицу непосредственно в интерфейсе ManagementStudio, щелкнув правой кнопкой и выбрав «Удалить».

 


55 Представления (view), их назначение и использование.

Представление(view) – это программно создаваемая и визуально отображаемая таблица, заполняемая данными из других таблиц, временно существующая в оперативной памяти. Для создания представления используют запрос языка SQL, реализация которого обеспечивает выборку данных для представления. Для ссылки на представление используют ключевое слово VIEW. На представлении можно выполнять операции поиска, замены, удаления записей, а также выполнять SQL-запросы. Изменение данных в представлении автоматически ведет к изменению данных в тех таблицах, из которых построено представление. Представление может быть получено как результат выборки данных через соединение с удаленными компьютерами.

Важное различие между курсорами и представлениями:

1) Изменение данных в курсоре необязательно приводит к изменению данных в исходной таблице (определяется типом курсора);

2) Представление – это визуально отображаемая таблица, а курсор-нет.

Пример создания представления:

CREATESQLVIEWmyview;

AS

SELECT * FROMmytable;

Здесь создается представление с именем myview, которое заполняется данными из таблицы mytable текущей открытой БД.

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

CREATE SQL VIEW myview;

CONNECTION connect1;

AS

SELECT * FROMmytable;

Здесь необходимо использовать именованное соединение connect1, которое должно быть предварительно построено средствами VisualFoxpro.

 

 


 

Назначение и функции СУБД.

Для хранения и обработки больших объемов информации используются базы данных.

Каждая база данных хранит информацию о большом количестве объектов одинакового типа (организациях, людях, книгах и т. д.). Объекты одного типа обладают одинаковым набором свойств, поэтому база данных хранит для каждого объекта значения этих свойств.

База данных позволяет упорядоченно хранить данные о большом количестве однотипных объектов, обладающих одинаковым набором свойств.

В настоящее время широкое распространение получили компьютерные базы данных.

Создание компьютерной базы данных, а также операции поиска и сортировки выполняются специальными программами - системами управления базами данных (СУБД).

Система управления базами данных - это приложение, позволяющее создавать базы данных и осуществлять в них сортировку и поиск данных.

Базы данных удобно представлять в виде таблицы. В каждой строке таблицы размещаются значения свойств одного объекта, а каждый столбец таблицы хранит значения определенного свойства всех объектов. Столбцы табличной базы данных называют полями. Строки таблицы называются записями (т. е. это записи об объекте). Запись хранит набор значений, содержащихся в полях базы данных.

Достоинством табличного представления базы данных является возможность видеть одновременно несколько записей. Однако если база данных содержит много полей, а значения полей содержат много символов, то не очень удобно осуществлять ввод, просмотр и редактирование записей. Для поочередного ввода, просмотра и редактирования записей базы данных часто используется форма. Форма позволяет последовательно отображать записи в удобном для пользователя виде.

Базы данных могут содержать сотни и тысячи записей. Часто бывает необходимо их упорядочить, т. е. расположить в определенной последовательности. Упорядочение записей называется сортировкой.

Сортировка записей производится по какому-либо полю базы данных. Значения, содержащиеся в этом поле, располагаются в порядке возрастания или убывания. В процессе сортировки целостность записей сохраняется, т. е. строки таблицы перемещаются целиком. Также можно проводить вложенные сортировки, т. е. сортировать данные последовательно по нескольким полям.

Поиск в базах данных осуществляется с помощью фильтров и запросов. Фильтры и запросыпозволяют отбирать записи, которые удовлетворяют условиям поиска. Условия поиска записей создаются с использованием операторов сравнения (=, >, <и т. д.).










Последнее изменение этой страницы: 2016-04-06; Нарушение авторского права страницы

infopedia.su не принадлежат авторские права, размещенных материалов. Все права принадлежать их авторам. Обратная связь