русс | укр

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

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

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

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


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

Підзапити з предикатом IN (Not In)


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


Запит – знайти усіх викладачів, які мають усі ті посади, що є на кафедрі №2 .

SELECT VYKLADACH.PrizvVykl, VYKLADACH.NomKaf, VYKLADACH.KodPost

FROM VYKLADACH

WHERE ((( VYKLADACH.KodPost) In (select KodPost from VYKLADACH where NomKaf=2)));

PrizvVykl NomKaf KodPost
Бандур М.М.
Сірко В.В.
Опришко Ю.Й.
Батура О.Й.
Балагура А.М.
Черно Ф.М.

 

А якщо треба, щоб в результатній таблиці не було викладачів кафедри №2, то

SELECT VYKLADACH.PrizvVykl, VYKLADACH.NomKaf, VYKLADACH.KodPost

FROM VYKLADACH

WHERE ((( VYKLADACH.NomKaf)<>2) AND (( VYKLADACH.KodPost) In (select KodPost from VYKLADACH where NomKaf=2)));

PrizvVykl NomKaf KodPost
Бандур М.М.
Сірко В.В.
Батура О.Й.

 

Запит – знайти усіх викладачів, які мають посади, яких немає на кафедрі №2 .

SELECT VYKLADACH.PrizvVykl, VYKLADACH.NomKaf, VYKLADACH.KodPost

FROM VYKLADACH

WHERE ((( VYKLADACH.KodPost) Not In (select KodPost from VYKLADACH where NomKaf=2)));

PrizvVykl NomKaf KodPost
Середа І.С.
Мунтян Р.Д.
Турчак А.Д.
Махно Н.Є.
Собчак А.О.

 

 

7.5.5 Підзапити, що починаються з операторів порівняння та ключових слів ANY або ALL

7.5.5.1 Підзапити з ключовим словом ANY

Запит : знайти посади викладачів, що більше (за кодом, а не за семантичним значенням) будь якої посади викладачів кафедри №12 (на кафедрі дві посади з кодами „01” і „03”).

SELECT VYKLADACH.PrizvVykl, VYKLADACH.NomKaf, VYKLADACH.KodPost

FROM VYKLADACH

WHERE ((( VYKLADACH.KodPost)>Any (select KodPost from VYKLADACH where NomKaf=12)));

PrizvVykl NomKaf KodPost
Бандур М.М.
Сірко В.В.
Опришко Ю.Й.
Турчак А.Д.
Батура О.Й.
Балагура А.М.
Черно Ф.М.

Як бачимо, в результат попали усі рядки, де KodPost >”01”. Змінимо оператор порівняння на “<”.



PrizvVykl NomKaf KodPost
Середа І.С.
Бандур М.М.
Мунтян Р.Д.
Сірко В.В.
Опришко Ю.Й.
Батура О.Й.
Махно Н.Є.
Собчак А.О.

Як бачимо, в результат попали усі рядки, де KodPost <”04”. Змінимо оператор порівняння на “=”.

SELECT VYKLADACH.PrizvVykl, VYKLADACH.NomKaf, VYKLADACH.KodPost

FROM VYKLADACH

WHERE ((( VYKLADACH.KodPost)=Any (select KodPost from VYKLADACH where NomKaf=12)));

PrizvVykl NomKaf KodPost
Середа І.С.
Мунтян Р.Д.
Турчак А.Д.
Махно Н.Є.
Собчак А.О.

Результат цього запиту повністю співпав би із результатом запиту з предикатом In. Покажемо це на запиті для кафедри №2 (див вище запит для цієї кафедри з предикатом In).

SELECT VYKLADACH.PrizvVykl, VYKLADACH.NomKaf, VYKLADACH.KodPost

FROM VYKLADACH

WHERE ((( VYKLADACH.KodPost) =Any (select KodPost from VYKLADACH where NomKaf=2)));

PrizvVykl NomKaf KodPost
Бандур М.М.
Сірко В.В.
Опришко Ю.Й.
Батура О.Й.
Балагура А.М.
Черно Ф.М.

Приклади.

SELECT VYKLADACH.PrizvVykl, VYKLADACH.NomKaf, VYKLADACH.KodPost

FROM VYKLADACH

WHERE ((( VYKLADACH.KodPost) <>Any (select KodPost from VYKLADACH where NomKaf=2)));

PrizvVykl NomKaf KodPost
Середа І.С.
Бандур М.М.
Мунтян Р.Д.
Сірко В.В.
Опришко Ю.Й.
Турчак А.Д.
Батура О.Й.
Балагура А.М.
Махно Н.Є.
Собчак А.О.
Черно Ф.М.

7.5.5.2 Підзапити з ключовим словом ALL

Запит : знайти посади викладачів, що більше (за кодом, а не за семантичним значенням) самої більшої (за кодом) посади викладачів кафедри №12 (на кафедрі дві посади з кодами „01” і „03”).

SELECT VYKLADACH.PrizvVykl, VYKLADACH.NomKaf, VYKLADACH.KodPost

FROM VYKLADACH

WHERE ((( VYKLADACH.KodPost)>All (select KodPost from VYKLADACH where NomKaf=12)));

PrizvVykl NomKaf KodPost
Балагура А.М.
Черно Ф.М.

 

Як що оператор порівняння змінимо на “<All”, то отримаємо пусту таблицю, оскільки посади з кодом, меншим за „01” в таблиці VYKLADACH не існує. Якщо ми зробимо аналогічний запит для кафедри №2 (там є посади з кодами “02” і “04”), то отримаємо список викладачів код посади у яких має значення “01”.

SELECT VYKLADACH.PrizvVykl, VYKLADACH.NomKaf, VYKLADACH.KodPost

FROM VYKLADACH

WHERE ((( VYKLADACH.KodPost) <All (select KodPost from VYKLADACH where NomKaf=2)));

PrizvVykl NomKaf KodPost
Середа І.С.
Мунтян Р.Д.
Махно Н.Є.
Собчак А.О.

При вживанні операторів порівняння “=All” і “<>All” отримаємо пусті таблиці, оскільки для таблиць ці оператори не визначені. Крім того, якщо внутрішній підзапит, що починається з ALL і оператора порівняння, повертає в якості одного зі своїх значень NULL, вважається, що запит у цілому завершився невдало.

Приклад. Для демонстрації вищенаведеного змінимо значення поля KodPost для викладача з номером 22 на Null (він працює на кафедрі №12, яка буде фігурувати у внутрішньому запиті), а також занесемо одне значення Null для викладача с номером 19 (він працює на кафедрі №2, яка буде оброблятися зовнішнім запитом).

UPDATE VYKLADACH SET VYKLADACH.KodPost = Null

WHERE ((( VYKLADACH.KodVykl)=22) or (( VYKLADACH.KodVykl)=19));

Тепер на кафедрі №12, на якій працює два викладача, код посади залишився тільки у одного і він дорівнює „03”, у другого – не визначений, а на кафедрі №2 із трьох викладачів у двох коди посад “02” “04”, у третього - – не визначений.

VYKLADACH
KodVykl PrizvVykl KodPost NomKaf
Черно Ф.М.
Балагура А.М.  
Опришко Ю.Й.
Батура О.Й.
Бандур М.М.
Середа І.С.
Махно Н.Є.
Сірко В.В.
Мунтян Р.Д.
Собчак А.О.  
Турчак А.Д.

Повторимо запит з використанням предикатів “>All” та “<All” (див. вище) для оновленої таблиці VYKLADACH.

SELECT VYKLADACH.PrizvVykl, VYKLADACH.NomKaf, VYKLADACH.KodPost

FROM VYKLADACH

WHERE ((( VYKLADACH.KodPost) >All (select KodPost from VYKLADACH where NomKaf=12)));

PrizvVykl NomKaf KodPost
     

Результат – пуста таблиця, хоча в таблиці VYKLADACH є посади з кодом „04”, який більше ніж „03”, але старшинство між „Null” і „04”, як і будь-яким іншим значенням коду, не визначено системою. Такий же результат отримаємо, коли замінимо предикат на “<All”, хоча в таблиці VYKLADACH є посади з кодом „01” і „02”, який менше ніж „03”, але не визначено їх порівняння з „Null”.

Повернемося до попереднього стану таблиці VYKLADACH.

UPDATE VYKLADACH SET VYKLADACH.KodPost = “01”

WHERE (( VYKLADACH.KodVykl)=22);

UPDATE VYKLADACH SET VYKLADACH.KodPost = “04”

WHERE (( VYKLADACH.KodVykl)=19));



<== предыдущая лекция | следующая лекция ==>
Приклади | Підзапити, які починаються з EXISTS або NOT EXISTS


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


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

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

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


 


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

 
 

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

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