Лекция_4 (С.Д. Кузнецов - Презентации лекций)
Описание файла
Файл "Лекция_4" внутри архива находится в папке "С.Д. Кузнецов - Презентации лекций". PDF-файл из архива "С.Д. Кузнецов - Презентации лекций", который расположен в категории "". Всё это находится в предмете "модель данных sql" из 4 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .
Просмотр PDF-файла онлайн
Текст из PDF
Лекция 3. Предикаты раздела WHEREоператора SELECT Введение Логические выражения раздела WHERE20.05.2016Предикат сравненияПредикат betweenПредикат is nullПредикат inПредикат likeПредикат similarПредикат existsПредикат uniqueПредикат overlapsПредикат сравнения с кванторомПредикат matchПредикат is distinctЛекция 4. Предикаты раздела WHEREоператора SELECT1Введение (1) Продолжим рассматривать механизм выборки данных языка SQL –оператор SELECTЛекция целиком посвящена видам условных выражений, которыемогут содержаться в разделе WHERE оператора выборкиОпределяются и иллюстрируются на примерах запросов все видыпредикатов, специфицированных в стандарте SQL:1999.Конструкции оператора SELECT языка SQL в значительнойстепени ортогональныВ частности, выбор способа указания ссылки на таблицы в разделеFROM никак не влияет на выбор варианта формирования условиявыборки в разделе WHEREЭто полезное свойство языка позволяет нам абстрагироваться отобсуждавшегося в предыдущей лекции многообразия способовуказания ссылки на таблицу и20.05.2016сосредоточиться на возможностях формирования запросов прииспользовании различных предикатов, допускаемых стандартомSQL:1999 в логических выражениях раздела WHEREЛекция 4.
Предикаты раздела WHEREоператора SELECT2Введение (2) В стандарте SQL:1999 специфицированы 12 разновидностейпредикатов, причем некоторые из них в действительностипредставляют собой семействанапример, под общим названием предиката сравнения скрываютсяшесть видов предикатов Набор допустимых предикатов в SQL явно избыточен, но тем неменее в языке SQL имеется явная тенденция расширения этогонабора В частности, в SQL:2003 в связи с введением генератора типовмультимножеств в дополнение ко всем разновидностямпредикатов SQL:1999 появилось три новых вида предикатов:20.05.2016для проверки того, что заданное значение является элементоммультимножества (MEMBER);что одно мультимножество входит в другое мультимножество(SUBMULTISET) ичто мультимножество не содержит дубликаты (IS A SET)Лекция 4.
Предикаты раздела WHEREоператора SELECT3Введение (3) В этом курсе мы не приводим подробного описания этихвидов предикатов по нескольким причинам: введение конструктора типов мультимножеств встандарте SQL:2003 не означает, что достигнута общаяцель разработчиков стандарта SQL по обеспечениюполного набора типов коллекций;20.05.2016по всей видимости, в будущих версиях стандарта появятсядополнительные конструкторы типов коллекций, и наборвидов предикатов изменится;предикаты с мультимножествами трудно пояснять ииллюстрировать в отрыве от других объектнореляционных средств языка SQL;включение подобного материала в данную лекциюзаметно увеличило бы ее объем и затруднилопонимание более традиционных конструкцийЛекция 4.
Предикаты раздела WHEREоператора SELECT4Логические выражения разделаWHERE (1) Синтаксически логическое выражение раздела WHEREопределяется как булевское выражение(boolean_value_expression), правила построения которогообсуждались в предыдущей лекции Основой логического выражения являются предикаты Предикат позволяет специфицировать условие, результатомвычисления которого может быть true, false или unknown В языке SQL:1999 допустимы следующие предикаты:20.05.2016Лекция 4. Предикаты раздела WHEREоператора SELECT5Логические выражения разделаWHERE (2) Далее мы будем последовательно обсуждать разные видыпредикатов и приводить примеры запросов сиспользованием базы данных СЛУЖАЩИЕ-ОТДЕЛЫПРОЕКТЫ, определения таблиц которой на языке SQL былиприведены раньше Для удобства повторим структуру таблиц20.05.2016Лекция 4.
Предикаты раздела WHEREоператора SELECT6Логические выражения разделаWHERE (3)Столбцы EMP_NO, DEPT_NO и PRO_NO являются первичными ключами таблиц EMP,DEPT и PRO соответственноСтолбцы DEPT_NO и PRO_NO таблицы EMP являются внешними ключами,ссылающимися на таблицы DEPT и PRO соответственноСтолбец DEPT_MNG является внешним ключом таблицы DEPTDEPT_NO указывает на отделы, в которых работают служащие, а PRO_NO – напроекты, в которых они участвуют; оба столбца могут принимать неопределенныезначенияDEPT_MNG указывает на служащих, которые исполняют обязанности руководителейотделов; у отдела может не быть руководителя, и один служащий не может бытьруководителем двух или более отделовСтолбец PRO_MNG является внешним ключом таблицы PRO20.05.2016PRO_MNG указывает на служащих, которые являются менеджерами проектов, упроекта всегда есть менеджер, и один служащий не может быть менеджером двух илиболее проектовЛекция 4.
Предикаты раздела WHEREоператора SELECT7Логические выражения разделаWHERE (4) Предикат сравнения Этот предикат предназначен для спецификациисравнения двух строчных значений Синтаксис предиката следующий: Строки, являющиеся операндами операциисравнения, должны быть одинаковой степени Типы данных соответствующих значений строкоперандов должны быть совместимы20.05.2016Лекция 4.
Предикаты раздела WHEREоператора SELECT8Логические выражения разделаWHERE (5)Пусть X и Y обозначают соответствующие элементы строк-операндов, а xvи yv – их значенияТогда:если xv и/или yv являются неопределенными значениями, то значениеусловия X comp_op Y - unknown;в противном случае значением условия X comp_op Y является true или falseв соответствии с естественными правилами применения операциисравнения.При этом:Числа сравниваются в соответствии с правилами алгебры.Сравнение двух символьных строк производится следующим образом:20.05.2016если длина строки X не равна длине строки Y, то для выравнивания длинстрок более короткая строка расширяется символами набивки (pad symbol);если для используемого набора символов порядок сортировки явнымобразом не специфицирован, то в качестве символа набивки используетсяпробел;далее производится лексикографическое сравнение строк в соответствии спредопределенным или явно определенным порядком сортировки символовЛекция 4.
Предикаты раздела WHEREоператора SELECT9Логические выражения разделаWHERE (6)Сравнение двух битовых строк X и Y основано на сравнениисоответствующих битЕсли Xi и Yi – значения i-тых бит X и Y соответственно и если lx и lyобозначает длину в битах X и Y соответственно, то:Сравнение двух значений типа дата-время производится всоответствии с видом интервала, который получается привычитании второго значения из первогоПусть X и Y – сравниваемые значения, а H – наименее значимоеполе даты-времени X и YРезультат сравнения X comp_op Y определяется как(X – Y) H comp_ op INTERVAL (0) H20.05.2016X равно Y тогда и только тогда, когда lx = ly и Xi = Yi для всех i;X меньше Y тогда и только тогда, когда (a) lx < ly и Xi = Yi для всех iменьших или равных lx, или (b) Xi = Yi для всех i < n и Xn = 0, а Yn=1 для некоторого n меньшего или равного min (lx, ly).Два значения типа дата-время сравнимы только в том случае, еслиони содержат одинаковый набор полей даты-времениЛекция 4.
Предикаты раздела WHEREоператора SELECT10Логические выражения разделаWHERE (7)Сравнение двух значений анонимного строкового типапроизводится следующим образомПусть Rx и Ry обозначают строки-операнды, а Rxi и Ryi – i-тыеэлементы Rx и Ry соответственноВот как определяется результат сравнения Rx comp_op Ry:20.05.2016Rx = Ry есть true тогда и только тогда, когда Rxi = Ryi есть true длявсех i;Rx <> Ry есть true тогда и только тогда, когда Rxi <> Ryi есть trueдля некоторого i;Rx < Ry есть true тогда и только тогда, когда Rxi = Ryi есть true длявсех i < n, и Rxn < Ryn есть true для некоторого n;Rx > Ry есть true тогда и только тогда, когда Rxi = Ryi есть true длявсех i < n, и Rxn > Ryn есть true для некоторого n;Rx <= Ry есть true тогда и только тогда, когда Rx = Ry есть true илиRx < Ry есть true;Rx >= Ry есть true тогда и только тогда, когда Rx = Ry есть true илиRx > Ry есть true;Лекция 4. Предикаты раздела WHEREоператора SELECT11Логические выражения разделаWHERE (8)20.05.2016Rx = Ry есть false тогда и только тогда, когда Rx <>Ry есть true;Rx <> Ry есть false тогда и только тогда, когда Rx =Ry есть true;Rx < Ry есть false тогда и только тогда, когда Rx >=Ry есть true;Rx > Ry есть false тогда и только тогда, когда Rx <=Ry есть true;Rx <= Ry есть false тогда и только тогда, когда Rx >Ry есть true;Rx >= Ry есть false тогда и только тогда, когда Rx <Ry есть true;Rx comp_op Ry есть unknown тогда и только тогда,когда Rx comp_op Ry не есть true или falseЛекция 4.
Предикаты раздела WHEREоператора SELECT12Логические выражения разделаWHERE (9) Примеры запросов с использованием предикатасравнения Найти номера отделов, в которых работают служащие сфамилией 'Smith‘ Добавили спецификацию DISTINCT в раздел SELECT,потому что в одном отделе могут работать несколькослужащих с фамилией 'Smith', а их число нас в данномслучае не интересует20.05.2016Лекция 4. Предикаты раздела WHEREоператора SELECT13Логические выражения разделаWHERE (10) Если бы нас интересовало число служащих сфамилией 'Smith' в каждом отделе, где такиеслужащие работают, то следовало бы, например,написать такой запрос: В этом варианте запроса спецификация DISTINCTне требуется, поскольку20.05.2016в запросе содержится раздел GROUP BY,группировка производится в соответствии созначениями столбца EMP.DEPT_NO, истрока результата соответствует одной группеЛекция 4.
Предикаты раздела WHEREоператора SELECT14.