Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Лекция 6. Составные условия отбора (AND OR NOT)




Составные условия отбора (AND OR NOT)

 

Для образования сложных условий отбора данных рассмотренные выше предикаты могут объединяться с использованием логических операций (AND OR NOT).

Т.к. в SQL принята трехзначная логика рассмотрим таблицы истинности этих операций для различных сочетаний аргументов.

AND T F Null
T T F U
F F F F
Null U F U

 

OR T F Null
T T T T
F T F U
Null T U U

 

NOT T F Null
  F T U

 

Агрегатные функции в предложении select

 

Агрегатные функции применяются для обобщения значений 1-го поля, они дают единственное значение для целой группы строк таблицы.

 

Функции: COUNT() - определяет количество строк или значений поля, выбранных посредством запроса и не являющихся NULL - значениями.

COUNT(*) - общее количество строк, включая строки являющиеся NULL - значениями.

 

SUM(<имя поля>) - вычисляет арифметическую сумму всех выбранных значений данного поля.

 

AVG(<имя поля>) - вычисляет среднее значение для всех выбранных значений данного поля.

 

MAX(<имя поля>) - вычисляет наибольшее из всех выбранных значений данного поля.

 

MIN(<имя поля>) - вычисляет наименьшее для всех выбранных значений данного поля.

 

Функции агрегирования используются как имена полей в предложении SELECT, имена столбцов таблиц используются как аргументы этих функций.

Функции AVG, SUM работают только с числовыми типами данных. Функции COUNT, MAX, MIN могут использовать числовые и символьные поля в качестве аргументов. В случае применения MIN или MAX к символьным полям MIN выбирает 1-е значение (наименьшее) в соответствии с алфавитным порядком, MAX - последнее(наибольшее) значение в соответствии с алфавитным порядком.

 

EX:

Найти суммарный вес всех деталей:

SELECT SUM(Weight) From Parts

 

 

Агрегатные функции и Null значения

 

 

Использование множества таблиц в одном запросе.

 

На лаб. раб. мы рассматривали запросы выбирающие информация из нескольких таблиц.

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

Операция такого рода называется соединением (Join) и является одной из самых мощных операций для рел. баз данных.

При операции соединения таблицы перечисляются через запятую в предложении запроса FROM.

Предикат запроса может ссылаться на любой столбец любой из соединяемых таблиц и, следовательно, может использоваться для установления связей между ними. Обычно предикат сравнивает значения в столбцах различных таблиц для определения истинности условия WHERE.

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

Наиболее часто встречающимся примером эквисоединения может служить операция соединения таблиц посредством ссылочной целостности.

Но в операции соединения могут участвовать любые столбцы различных таблиц (и даже одной и той же таблицы) не обязательно связанных отношением “предок - потомок”.

Выполнение операции соединения – декартово произведение.

 

Столбцами таблицы произведения являются все столбцы первой таблицы, за которыми следуют все столбцы второй таблицы.

 

Объединенную таблицу образуют пары тех строк из различных таблиц, у которых в связанных столбцах содержаться одинаковые значения. Если пара отсутствует (соответствующие значение еще не присвоено, т.е. имеет значение NULL), то стандартное SQL – объединение может привести к потере информации.

Рассмотренное объединение иногда называют внутренним объединением таблиц.

 

Внешнее соединение

 

В стандарте SQL 89 определено только внутренне соединение.

 

Построение внешнего объединения(объединения “сохраняющего информацию”)

1. Создать внутреннее соединение двух таблиц обычным образом.

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

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

4. Результирующая таблица является внешним объединением двух таблиц.

 

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

Левое внешнее объединение

Выполнить пункты 1 и 2, пункт 3 пропустить.(т.е. попадают в рез-т все несвязанные строки из левой таблицы). Обозначается *=.

 

Правое внешнее объединение

Выполнить пункты 1 и 3, пункт 2 пропустить. (т.е. попадают в рез-т все несвязанные строки из правой таблицы). Обозначается =*.

 

*=*

 

В sql2

 

Select * from tabl inner Join tabl2

On tabl.col1 = tabl2.col2

 

Или

 

Select * from tabl inner Join tbl2

Using (col1, col2)

 

 

Естественное соединение

 

Select * from tabl Natural Inner Join tbl2

 

 

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

 

 

Вложенные запросы

 

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

Пример:

Выбор всех записей в которых поле “имя”=<значение>

Старый вариант - использовался в лаб. работе

if!empty(thisform.combo2.value)

select nam

locate for nam_val = alltrim(thisform.combo2.value)

w_n_num=n_num

else

w_n_num=0

endif

 

select test_lb.uniq_id,fam.f_val as family, nam.nam_val as nam, otc.otc_val as otc,;

street.s_val as street, test_lb.bldn as bld, test_lb.bldn_kor as bld_k,;

test_lb.appr as appr, test_lb.telef as tel;

from test_lb, fam, nam, otc, street;

where nam.n_num=test_lb.name_ AND;

fam.f_num=test_lb.fam AND;

street.s_num=test_lb.street AND;

otc.otc_n=test_lb.sndname AND;

nam.n_num=w_n_num;

INTO table test

 

 

Новый вариант - с подзапросом:

 

select test_lb.uniq_id,fam.f_val as family, nam.nam_val as nam, otc.otc_val as otc,;

street.s_val as street, test_lb.bldn as bld, test_lb.bldn_kor as bld_k,;

test_lb.appr as appr, test_lb.telef as tel;

from test_lb, fam, nam, otc, street;

where nam.n_num=test_lb.name_ AND;

fam.f_num=test_lb.fam AND;

street.s_num=test_lb.street AND;

otc.otc_n=test_lb.sndname AND;

nam.n_num = (SELECT n_num

FROM Nam

WHERE Nam_val =‘Иван’);

INTO table test

 

Чтобы оценить внешний (основной) подзапрос, SQL должен оценить внутренний запрос в предложении WHERE. Эта оценка осуществляется так, как будто внутренний запрос является одиночным:

Просматриваются все строки таблицы Nam и выбираются строки для которых значение поля Nam_val=‘Иван’ для таких строк выбирается значение поля n_num. Выбранной оказывается одна строка.

Выбранное значение подставляется в предикат основного запроса. Затем основной запрос выполняется как обычный.

Преимущества: - сработает при изменении номера, более гибкий (годится для всех имен);

 




Поделиться с друзьями:


Дата добавления: 2015-06-25; Просмотров: 443; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




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