|
Программирование >> Реляционные базы данных
Мы сделали так, что третий столбец назь(вается inHours, а это название соответствует заголовку length второго столбца. Теперь каждый кортеж ответа будет иметь в своем третьем столбце константу hrs., которая оказывается элементом, связанным со значением во втором столбце. О Нечувствительность к регистру SQL нечувствителен к регистру, т.е. буква, набранная в верхнем и в нижнем регистре, считается одной и той же буквой. Например, мы пишем ключевое слово типа FROM заглавными буквами, с равным успехом его можно писать как From, from и даже как FrOm. Имена атрибутов, отношений, псевдонимов и т.д. тоже нечувствительны к регистру. SQL различает регистр только внутри кавычек, т.е. FROM отличается от from и, разумеется, от ключевого слова FROM. 5.1.2 Выбор в SQL с помощью пункта WHERE запроса SQL можно выразить оператор выбора реляционной алгебры, а тдкже .многое другое. Выражение, которое следует за WHERE, содержит условные выражения, похожие на те, что встречаются в извест ных языках С или Pascal. Выражения можно строить, сравнивг1я значения с помощью шести операторов: =, О, <, >, <= и >=. Они совпадают с операторами языка Pascal и и.меют очевад-ный смысл. Сравниваемые значения могут содержать константы и атрибуты отношения или 0Т1Юшеи11Й, упомянутых после слова FROM. Перед сравнением числовых значений к ним можно применять арифметические операции +, и т.д. Например, выражение (year - 1930) *(уеог- 1930) < 100 истинно для годов от 1930 до 1939. К строкам можно также применять оператор конкатенации ; например, foo bar имеет значение foobar. Пример 5.4. Допустим, нужно получить такой же вывод, как и в примере 5.3, но с продолжительностью фильма в часах. Тогда предложение SELECT предыдущего примера заменяется на SELECT title AS name. Iength*0.016667 AS lengthlnHours В результате получаются те же самые пары название - продолжительность, но продолжительность фильма исчисляется уже в часах и второй столбец озаглавлен атрибутом lengthlnHours. □ Пример 5.5. В качестве элемента предюжения SELECT допускается использовать константу. Это может показаться бессмысленным, но по крайней мере одно из применений константы состоит в том, чтобы вносить полезные слова в вывод SQL, появляющийся на экране. Запрос SELECT title. length*0.016667 AS length, hrs. AS InHours FROM Movie WHERE StudioName - Disney- AND year = 1990; порождает кортежи типа 2 D обдем-го принято считать, что строки хранятся в памяти в виде массивов и списков символов Как онн хранятся на самом деле - 1юпрос реализаини. ис опрелсленный ни в одном л:1нларте SQL. В примере 5.1 используется сравнение StudioName = Disney Атрибут siudiollamc отноше1и1я Movie проверяется иа предмет равенства с KOhcranToii Disney. Значением этой константы является строка. Строки в SQL обозначаются заключением нх D одинарные кавычки. Допустимы также цифровые константы, целые и реальные числа, для которых в SQL применяется обычная форма затюи типа -12.34 или 1.23Е45. Результатом сравнещт является булево значение TRUE или FALSE. Эти значения южнo комбинировать с логическими операторами AND, OR и NOT, имеющими обычные значения, как н языке Pascal. В примере 5.1 бьыо показано, как условия комбинируются с оператором AND. Пункт WHERE из этого примера является истинным, еслн и только еслн удовлетворяются оба сравнения, т.е. имя ст>дии Disney н год 1990. Приведем другие примеры запросов со сложными пунктами WHERE. Пример 5.6. СледуюииШ запрос касается черно-белых фильмов, снятых после 1970 г. SELECT title FROM Movie WHERE year > 1970 AND NOT inColor; В этом условии два булевых выражения соединены связкой AND Первое из них - простое сравнение, второе - атрибут inColor с отрицанием. Такое применение атрибута вполне уместно, так как inColor относится к булеву типу. Теперь рассмотрим запрос SELECT title FROM Movie WHERE (year > 1970 OR length < 90) AND studioName =MGM; Oh касается названий фильмов студии MGM, снятых после 1970 г. или длящихся менее 90 мин. Заметим, что сравнения можно группировать с помощью скобок, которые здесь необходимы, поскольку приоритет логических операторов в SQL определяется так же, как и в больщинстве других языков: AND сильнее OR, а NOT сильнее их обоих. □ 5.1.3 Сравнение строк Две строки равны, если они состоят из одной и той же поосдовательности символов, в SQL допустимы различные тппы строк, например массивы символов фиксированной длины и списки символов пере!иенной длины. Например, строка типа too может храниться в виде строки фиксированной длины 10 с семью дополняющими символами или в виде строки переменной длины. Предполагается, что в обоих случаях ее значения равны друг другу и исходной строке foo. При сравнении строк с помошью одного нз операторов меньше чем , например < или >=, проверяется, предшествует ли одна из них другой в лексикографическом (т.е. в словарном или алфавитном) порядке. Еслн о,- ог, .... а и 4,. bi. .... Л - две строки, то первая меньше второй, если а, < i, тн 0 = Л, и < bj или л ~ *2 н а- < 63 и Т.д. Считается также, что о flj. о < fcj, .. , Ь, , еслн п < т и 0, о о = 6 -, т.е. если первая строка является префиксом второй Представление булеанов и битовых строк В SQL булевы значения можно представить битовыми строками особого вида. Битовая строка в двоичной системе счисления представляется буквой В, за которой следует ряд нулей и единиц, заключенных в кавычки. Например, В01 V - строка из трех битов, первый из которых содержит О, а два других - I. Для записи битовых строк можно использовать также шестнадиатеричную систему счисления. В таком случае битовая строка будет представлена как буква X, за которой следует заключенная в кавычки строка, состоящая из шестнадиатеричных цифр от О до/{где буквы от а до/являются шестнадцате-ричными цифрами со значением от 10 до 15 соответственно). Например, учитывая, что каждая шестнадцатеричная цифра занимает четыре бита, X7ff -это строка из двенадцати битов, первый из которых содержит О, а одиннадцать следующих - 1. Булево значение TRUE можно представить одним битом, т.е. В1. Аналогичным образом, FALSE можно представить с помощью ВО. Пример 5.7. Допустим, мы помним, что название фильма начинается со слова Stai и второго слова, состоящего из четырех букв. Названия с такими параметрами можно узнать с помощью запроса SELECT title FROM Movie WHERE title LIKE Star Этот запрос выявляет атрибут названия фильма, имеющий значение длиной в девять символов. Первые пять символов - Star и пробел, а последние четыре могут быть любыми, так как любая последовательность из четырех символов соответствует . Результат запроса - множество полностью совпадающих по числу символов названий типа Star iVars и Star Trek. □ Пример 5.8. Допустим, нужю найти фильмы, в названиях которых есть апостроф. Это можно сделать с помощью запроса SELECT title FROM Movie WHERE title LIKE % s% Например, fodder < Too, так как первые две буквы этих строк совпадают, а третья буква строки fodder предшествует третьей букве строки foo. Верно также, что bar < bargain, поскольку первая строка является префиксом BTopoit SQL позволяет сравнивать строки на основании их совпадения с простым образцом. Формой сравнения может быть выражение J s LIKE р где s -- строка, а - образец, т.е. строка, в которой произвольно применяются специальные символы % и . Обычные символы в р соответствуют только самим себе в j, но % в р может соответствовать любой последовательности в s, состоящей из О и более символов, а в р соответствует любому символу из s. Такое выражение истинно, если и только если строка s соответствует образцу р. В силу аналогичных рассуждений выражение j NOT LIKE р истинно, если и только если строка л не соответствует образцу р-
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |