Зык запросов баз данных
Методическое рекомендации
г. Рыбница, 2013
УДК 004.43 (075)
ББК 32.973.2-018.1я7
Я 20
Составители:
Л.К. Скодорова, доцент кафедры ПИ,
А.А. Ляху, ст. преп. кафедры ФМИ.
Рецензенты:
И.А. Павлинов, доцент кафедры прикладной информатики
А.Б. Глазов, ст. преп., кафедры физики, математики и информатики
Язык запросов баз данных: методические рекомендации/ Сост.
Л.К. Скодорова, А.А. Ляху – Рыбница, 2013. – 54 с.
Методические рекомендации предназначены для студентов IV курса специальности ПИВЭ (РФ11ДР65ПЭ) и ПОВТ и АС (РФ12ДР62ПО). В работе изложены основные предложения базового варианта SQL, позволяющие познакомиться с основными средствами манипулирования данными. Приведены примеры конструкций SQL.
УДК 004.43 (075)
ББК 32.973.2-018.1я7
Рекомендовано НМС ПГУ им. Т.Г. Шевченко
Составители: Л.К. Скодорова,
А.А. Ляху, 2010
ВВЕДЕНИЕ
Основные идеи современной информационной технологии базируются на концепции, согласно которой данные должны быть организованны в базы данных с целью адекватного отображения изменяющегося реального мира и удовлетворения информационных потребностей пользователей. Эти базы данных создаются и функционируют под управлением специальных программных комплексов, называемых системами управления базами данных (СУБД).
Увеличение объема и структурной сложности хранимых данных, расширение круга пользователей информационных систем привели к широкому распространению наиболее удобных и сравнительно простых для понимания реляционных СУБД.
Для обеспечения одновременного доступа к данным множества пользователей, нередко расположенных достаточно далеко друг от друга и от места хранения баз данных, созданы сетевые мультипользовательские версии СУБД. В них решаются специфические проблемы параллельных процессов, целостности и безопасности данных, а также санкционирования доступа.
|
Совместная работа пользователей в сетях с помощью унифицированных средств общения с базами данных возможна только при наличии стандартного языка манипулирования данными. Таким языком стал SQL, разработанный в 1974 году фирмой IBM. В 1987 году SQL стал международным стандартом баз данных, а в 1992 году вышла вторая версия этого стандарта.
Структурный язык запросов SQL основан на реляционном исчислении с переменными картежами. Язык имеет несколько стандартов.
Назначение языка SQL
Любой язык работы с базами данных должен предоставлять пользователю следующие возможности:
• создавать базы данных и таблицы с полным описанием их структуры;
• выполнять основные операции манипулирования данными, такие как вставка, модификация и удаление данных из таблиц;
• выполнять простые и сложные запросы.
Кроме того, язык работы с базами данных должен решать все указанные выше задачи при минимальных усилиях со стороны пользователя, а структура и синтаксис его команд должны быть достаточно просты и доступны для изучения. И, наконец, он должен быть универсальным, т.е. отвечать некоторому признанному стандарту, что позволит использовать один и тот же синтаксис и структуру команд при переходе от одной СУБД к другой. Язык SQL удовлетворяет практически всем этим требованиям. SQL является примером языка преобразования данных, или же языка, предназначенного для работы с таблицами с целью преобразования входных данных к требуемому выходному виду. Язык SQL, который определен стандартом ISO, имеет два основных компонента:
|
• язык DDL (Data Definition Language), предназначенный для определения структур базы данных и управления доступом к данным;
•язык DML (Data Manipulation Language), предназначенный для выборки и обновления данных.
Язык SQL относительно прост в изучении.
• Это непроцедурный язык, поэтому в нем необходимо указывать, какая информация должна быть получена, а не как ее можно получить. Иначе говоря, язык SQL не требует указания методов доступа к данным.
• Как и большинство современных языков, SQL поддерживает свободный формат записи операторов. Это означает, что при вводе отдельные элементы операторов не связаны с фиксированными позициями на экране.
• Структура команд задается набором ключевых слов, представляющих собой обычные слова английского языка, такие как CREATE TABLE (Создать таблицу), INSERT (Вставить), SELECT (Выбрать). Например:
CREATE TABLE Staff (staffNo VARCHAR(S), lName VARCHAR(15), salary DECIMAL(7,2))
INSERT INTO Staff VALUES ('SG16', 'Brown', 8300)
SELECT staffNo, IName, salary FROM Staff WHERE salary > 10000
• Язык SQL может использоваться широким кругом пользователей, включая администраторов баз данных (АБД), руководящий персонал компании, прикладных программистов и множество других конечных пользователей разных категорий.
В настоящее время для языка SQL существуют международные стандарты, формально определяющие его как стандартный язык создания и манипулирования реляционными базами данных, каковым он фактически и является.
|
Особая роль языка SQL
Язык SQL является первым и пока единственным стандартным языком работы с базами данных, который получил достаточно широкое распространение. Есть еще один стандартный язык работы с базами данных, NDL (Network Database Language), который построен на использовании сетевой модели CODASYL, но он применяется лишь в немногих разработках. Практически все крупнейшие разработчики СУБД в настоящее время создают свои продукты с использованием языка SQL либо интерфейса SQL, и большинство таких компаний участвуют в работе, по меньшей мере, одной организации, которая занимается разработкой стандартов этого языка. В SQL сделаны огромные инвестиции как со стороны разработчиков, так и со стороны пользователей. Он стал частью архитектуры приложений (например, такой как System Application Architecture (SAA) корпорации IBM), а также является стратегическим выбором многих крупных и влиятельных организаций (например, консорциума Х/Open, занятого разработкой стандартов для среды UNIX), Язык SQL также принят в качестве федерального стандарта обработки информации (Federal Information Processing Standard – FIPS), который должен соблюдаться в СУБД для получения разрешения продавать ее на территории США. Консорциум разработчиков SQL Access Group прилагает усилия по созданию расширений языка SQL, которые позволят обеспечить взаимодействие разнородных систем. Язык SQL используется в других стандартах и даже оказывает влияние на разработку многих стандартов как инструмент их определения. В качестве примера можно привести стандарты ISO "Information Resource Dictionary System" (IRDS) и "Remote Data Access" (RDA). Разработка языка вызвала определенную заинтересованность научных кругов, выразившуюся как в выработке необходимых теоретических основ, так и в подготовке успешно реализованных технических решений. Это особенно справедливо в отношении оптимизации запросов, методов распределения данных и реализации средств защиты. Начали появляться специализированные реализации языка SQL, предназначенные для новых рынков, такие как OnLine Analytical Processing (OLAP).
Используемая терминология. Стандарт ISO SQL не поддерживает таких формальных терминов, как отношение, атрибут и кортеж, вместо них применяются термины таблица, столбец и строка. В нашем обсуждении языка SQL мы в основном будем опираться на терминологию ISO. Кроме того, следует отметить, что стандарт SQL не предусматривает строгой поддержки тех определений реляционной модели данных. Например, в языке SQL допускается, что созданная в результате выполнения операции SELECT таблица может содержать повторяющиеся строки, устанавливается определенная последовательность столбцов, а пользователю разрешается сортировать строки в таблице.
Запись операторов SQL. В этом разделе кратко описана структура операторов SQL и представлена система обозначений, которая используется для определения формата различных конструкций языка SQL. Оператор SQL состоит из зарезервированных слов, а также из слов, определяемых пользователем. Зарезервированные слова являются постоянной частью языка SQL и имеют определенное значение. Их следует записывать именно так, как указано в стандарте, и нельзя разбивать на части для переноса из одной строки в другую. Слова, определяемые пользователем, задаются самим пользователем (в соответствии с определенными синтаксическими правилами) и представляют собой имена различных объектов базы данных – таблиц, столбцов, представлений, индексов и т.д. Слова в операторе размещаются в соответствии с установленными синтаксическими правилами. Хотя в стандарте это не указано, многие диалекты языка SQL требуют задания в конце оператора некоторого символа, обозначающего окончание его текста (как правило, с этой целью используется точка с запятой (;), например, системы на базе языка Pascal).
Обратите внимание: Синтаксис записи оператора SELECT зависит от используемой СУБД, например, для VFP символ (;) является признаком того, что следующая строка в тексте программы воспринимается интерпретатором, как органическое продолжение предыдущей строки. В других системах, символ переноса команды может быть другим (например, (_,) в VBA).
Большинство компонентов операторов SQL не чувствительно к регистру. Это означает, что могут использоваться любые буквы – как строчные, так и прописные. Одним важным исключением из этого правила являются символьные литералы – данные, которые должны вводиться точно так же, как были введены соответствующие им значения, хранящиеся в базе данных. Например, если в базе данных хранится значение фамилии 'SMITH', а в условии поиска указан символьный литерал 'Smith', то эта запись не будет найдена. Поскольку язык SQL имеет свободный формат, отдельные операторы SQL и их последовательности будут иметь более удобный для чтения вид при использовании отступов и выравнивания. Рекомендуется придерживаться следующих правил.
1.Каждая конструкция в операторе должна начинаться с новой строки.
2.Начало каждой конструкции должно быть обозначено таким же отступом, что и начало других конструкций оператора.
3.Если конструкция состоит из нескольких частей, каждая из них должна начинаться с новой строки с некоторым отступом относительно начала конструкции, что будет указывать на их подчиненность.
4.Прописные буквы используются для записи зарезервированных слов и должны указываться в операторах точно так же, как это будет показано.
5.Строчные буквы используются для записи слов, определяемых пользователем.
6. Вертикальная черта указывает на необходимость выбора одного из нескольких приведенных значений, например a b | с.
7.Фигурные скобки определяют обязательный элемент, например {а}.
8.Квадратные скобки определяют необязательный элемент, например [а].
9.Многоточие (...) используется для указания необязательной возможности повторения конструкции от нуля до нескольких раз, например { а b } [, с...]. Эта запись означает, что после а или b может следовать от нуля до нескольких повторений с, разделенных запятыми.
На практике для определения структуры базы данных (в основном ее таблиц) используются операторы DDL, а для заполнения этих таблиц данными и выборки из них информации с помощью запросов – операторы DML.
Манипулирование данными
Операторы языка SQL DML:
• SELECT – выборка данных из базы;
• INSERT – вставка данных в таблицу;
• UPDATE – обновление данных в таблице;
• DELETE – удаление данных из таблицы.
Рассмотрим простые запросы, затем перейдем к более сложным вариантам выборки данных, использующим функции сортировки, группирования, агрегирования, а также выполнения запроса к нескольким таблицам. В базе данных имеются следующие таблицы:
Branch (branchNo, street, city, postcode)
Staff (staffNo, fName, lName, position, sex, DOB, salary, branchNo)
PropertyForRent (propertyNo, street, city, postcode, type, rooms, rent, ownerNo, staffNo, branchNo)
Client (clientNo, fName, lName, telNo, prefType, maxRent)
PrivateOwner (ownerNo, fName, lName, address, telNo)
Viewing (clientNo, propertyNo, viewDate, comment)
Литералы. Литералы представляют собой константы, которые используются в операторах SQL. Существуют различные формы литералов для каждого типа данных, которые поддерживаются SQL. Все нечисловые значения данных всегда должны заключаться в одинарные кавычки, а все числовые данные не должны заключаться в одинарные кавычки. Ниже приведен пример использования литералов для вставки данных в таблицу.
INSERT INTO PropertyForRent (propertyNo, street, city, postcode, type, rooms, rent, ownerNo, staffNo, branchNo)
VALUES ('PA14', '16 Holhead', 'Aberdeen', 'AB7 5SU', 'House', 6, 650.00, 'C046', 'SA91', ' B007')
Значение столбца rooms является литералом целочисленного типа, а значение столбца rent – это десятичный числовой литерал. Ни один из них не должен заключаться в одинарные кавычки. Значения всех остальных столбцов представляют собой символьные строки и обязательно должны быть взяты в одинарные кавычки.
Простые запросы. Назначение оператора SELECT состоит в выборке и отображении данных одной или более таблиц базы данных. Это исключительно мощный оператор, способный выполнять действия, эквивалентные операторам реляционной алгебры выборки, проекции и соединения, причем в пределах единственной выполняемой команды. Оператор SELECT является чаще всего используемой командой языка SQL. Общий формат оператора SELECT имеет следующий вид:
SELECT [DISTINCT | ALL] { * | [columnExpression [AS newName]] [, …. ] }
FROM TableName [alias][,... ]
[WHERE condition]
[GROUP BY columnlist] [HAVING condition]
[QRDER BY columnList]
Здесь параметр columnExpression представляет собой имя столбца или выражение из нескольких имен. Параметр TableName является именем существующей в базе данных таблицы (или представления), к которой необходимо получить доступ. Необязательный параметр alias – это сокращение, устанавливаемое для имени таблицы TableName. Обработка элементов оператора SELECT выполняется в следующей последовательности.
1. FROM. Определяются имена используемой таблицы или нескольких таблиц.
2. WHERE. Выполняется фильтрация строк объекта в соответствии с заданными условиями.
3. GROUP BY. Образуются группы строк, имеющих одно и то же значение в указанном столбце.
4. HAVING. Фильтруются группы строк объекта в соответствии с указанным условием.
5. SELECT. Устанавливается, какие столбцы должны присутствовать в выходных данных.
6. ORDER BY. Определяется упорядоченность результатов выполнения оператора.
Порядок конструкций в операторе SELECT не может быть изменен. Только две конструкции оператора – SELECT и FROM – являются обязательными, все остальные конструкции могут быть опущены. Операция выборки с помощью оператора SELECT является замкнутой, в том смысле, что результат запроса к таблице также представляет собой таблицу. Существует множество вариантов использования данного оператора.
Реляционные схемы для той части учебного проекта DreamHome, в которой содержится и обрабатывается информация об аренде собственности, выглядят так:
Branch (branchNo, street, cizy, postcode)
Staff (staffNo, fName, IName, position, sex, DOB, salary, branchNo}
PropertyForRent (propertyNo, street, city, postcode, type, rooms,rent, ownerNo, staf fNo, branchNo)
Client (clientNo, fName, IName, telNo, prefType, maxRent)
PrivateOwner (ownerNo, fName, IName, address, telNo)
Viewing (clientNo, propertyNo, viewDate, comment)
Registration (cJlientNo, branchNo, staffNo, dateJoined)
Общепринятое обозначение реляционной схемы включает имя отношения, за которым (в скобках) располагаются имена атрибутов. При этом первичный ключ (обычно) подчеркивается.
Концептуальной моделью, или концептуальной схемой, называется множество всех реляционных схем базы данных.
В табл. 1-8 показан пример определения реляционной схемы.
Пример некоторого текущего состояния базы данных учебного проекта DreamHome.
Таблица Branch Таблица 1.
branchNo | street | city | postcode |
В005 | 22 Deer Rd | London | SW1 4EH |
В007 | 16 Argyll St | Aberdeen | AB23SU |
ВООЗ | 163 Main St | Glasgow | Gil 9QX |
В004 | 32 Manse Rd | Bristol | BS99 1N2 |
В002 | 56 Clover Dr | London | NW10 6EU |
Таблица Staff Таблица 2.
staffNo | fName | [Name | position | sex | DOB | salary | branchNo |
SL21 | John | White | Manager | M | l-Oct-45 | BOOS | |
SG37 | Ann | Beech | Assistant | F | lO-Nov-60 | B003 | |
SG14 | David | Ford | Supervisor | M | 24-Mar-58 | B003 | |
SA9 | Mary | Howe | Assistant | F | 19-Feb-70 | B007 | |
SG5 | Susan | Brand | Manager | F | 3-Jun-40 | BOOS | |
SL41 | Julie | Lee | Assistant | F | 13-Jun-65 | BOOS |
Таблица PropertyForRent Таблица З.
property No | street | city | postcode | type | rooms | rent |
РА14 | 16Holhead | Aberdeen | AB7 5SU | House | ||
PL94 | 6 Argyll St | London | NW2 | 'Flat | ||
PG4 | 6 Lawrence St | Glasgow | Gil 9QX | Flat | ||
PG36 | 2 Manor Rd | Glasgow | G32 4QX | Flat | ||
PG21 | 18 Dale Rd | Glasgow | G12 | House | ||
PG16 | 5 Novar Dr | Glasgow | G129AX | Flat |
Продолжение таблицы 3.
Owner No | staff No | Branch No |
C046 | SA9 | B007 |
C087 | SL41 | BOOS |
C040 | BOOS | |
C093 | G37 S | BOOS |
COS7 | SG37 | вооз |
C093 | SG14 | вооз |
Таблица Client Таблица 4.
clientNo | fName | IName | telNo | prefType | maxRent |
CR76 | John | Kfy | 0207-774-5632 | Flat | |
С056 | Aline | Stewart | 0141-848-1825 | Flat | |
CR74 | Mike | Ritchie | 01475-392178 | House | |
CR62 | Mary | Tregear | 01224-196720 | Flat |
Таблица PrivateOwner Таблица 5.
ownerNo | fName | IName | address | telNo |
С046 | Joe | Keogh | 2 Fergus Dr, Aberdeen AB2 7SX | 01224-861212 |
С087 | Carol | Parrel | 6 Achray St, Glasgow G32 9DX | 0141-357-7419 |
С040 | Tina | Murphy | 63 Well St, Glasgow G42 | 0141-943-1728 |
С093 | Tony | Shaw | 12 Park PI, Glasgow G4 OQR | 0141-225-7025 |
Таблица Viewing Таблица 6.
clientNo | propertyNo | viewDate | comment |
CR56 | РА14 | 24-May-Ol | too small |
CR76 | PG4 | 20-Apr-Ol | too remote |
CR56 | PG4 | 26-May-Ol | |
CR62 | РА14 | 14~May-01 | no dining room |
CR56 | PG36 | 28-Apr-Ol |
Блица Registration Таблица 7.
clientNo | branchNo | staffNo | dateJoined |
CR76 | В005 | SL41 | 2-Jan-Ol |
CR56 | вооз | SG37 | 11-Apr-OO |
CR74 | вооз | SG37 | 16-Nov-99 |
CR62 | В007 | SA9 | 7-Mar-OO |
Пример 1. Выборка всех столбцов и всех строк. Составьте список подробных сведений о каждом из работников.
Поскольку в приведенном выше запросе не указаны никакие ограничения, в оператор не требуется помещать конструкцию WHERE. Кроме того, необходимо выбрать все существующие в таблице столбцы. Поэтому данный запрос записывается следующим образом:
SELECT staffNo, fName, lName, position, sex, DOB, salary, branchNo FROM Staff
Поскольку выборка всех имеющихся в таблице столбцов выполнятся достаточно часто, в языке SQL определен упрощенный вариант записи значения "все столбцы" – вместо имен столбцов указывается символ звездочки (*). Приведенный ниже оператор полностью эквивалентен первому и представляет собой упрощенный вариант записи того же самого запроса:
SELECT * FROM Staff
Результат выполнения этого запроса представлен в табл. 8.
Таблица 8.
Результат выполнения запроса список подробных сведений о каждом из работников
staffNo | fName | lName | position | sex | DOB | salary | branchNo |
SL21 | John | White | Manager | M | l-Oct-45 | 30000.00 | B005 |
SG37 | Ann | Beech | Assistant | F | 10-Nov-60 | 12000.00 | B003 |
SG14 | David | Ford | Supervisor | M | 24-Mar-58 | 18000.00 | B003 |
SA9 | Mary | Howe | Assistant | F | 19-Feb-70 | 9000.00 | B007 |
SG5 | Susan | Brand | Manager | F | 3-Jun-40 | 24000.00 | B003 |
SL41 | Julie | Lee | Assistant | F | 13-Jun-65 | 9000.00 | B005 |
Пример 2. Выборка конкретных столбцов и всех строк. Создайте отчет о заработной плате всех работников с указанием только табельного номера работника (staffNo), его имени и фамилии, а также сведений о зарплате.
SELECT staffNo, fName, lName, salary FROM Staff
В этом примере на основе таблицы Staff создается новая таблица, включающая только указанные в запросе столбцы staffNo, fName, lName и salary, причем именно в этом порядке. Результат выполнения данного запроса приведен в табл. 9. Обратите внимание, что строки в результирующей таблице могут оказаться неотсортированными, если не дано специальное указание. С другой стороны, в некоторых СУБД сортировка результирующей таблицы выполняется по умолчанию с учетом значений одного или нескольких столбцов (например, в базе данных Microsoft Access сортировка этой результирующей таблицы была бы выполнена по значению первичного ключа staffNo).
Таблица 9.
Результат выполнения запроса
staffNo | fName | lName | salary |
SL21 | John | White | 30000.00 |
SG37 | Ann | Beech | 12000.00 |
SG14 | David | Ford | 18000.00 |
SA9 | Mary | Howe | 9000.00 |
SG5 | Susan | Brand | 24000.00 |
SL41 | Julie | Lee | 9000.00 |
Пример 3. Использование ключевого слова DISTINCT. Составьте список номеров всех сдаваемых в аренду объектов, осмотренных клиентами.
SELECT propertyNo FROM Viewing
Результат выполнения этого запроса представлен в табл10. Обратите внимание, что результат выполнения запроса содержит повторяющиеся значения, поскольку, в отличие от операции проекции реляционной алгебры, оператор SELECT не исключает повторяющихся значений при выполнении проекции по значениям одного или нескольких столбцов. Для удаления из результирующей таблицы повторяющихся строк используется ключевое слово DISTINCT.
Откорректированный запрос выглядит следующим образом:
SELECT DISTINCT propertyNo FROM Viewing
Результаты выполнения второго варианта запроса представлены в табл.11.
Таблица 10. Таблица 11.
propertyNo |
PA14 |
PA4 |
PA4 |
PA14 |
PG36 |
propertyNo |
PA14 |
PA4 |
PG36 |
Пример 4. Вычисляемые поля. Создайте отчет о ежемесячной зарплате всего персонала с указанием табельного номера, имени, фамилии и суммы зарплаты.
SELEC T staffNo, fName, lName, salary/12
FROM Staff
Этот запрос почти идентичен запросу из примера 2, за исключением того, что здесь требуется указать сумму не годовой, а ежемесячной зарплаты. В данном случае желаемый результат, может быть достигнут простым делением суммы зарплаты за год на 12. Результаты выполнения запроса представлены в табл. 12.
Таблица 12.
Результат выполнения запроса
staffNo | fName | lName | Exp_1 |
SL21 | John | White | 2500.00 |
SG37 | Ann | Beech | 1000.00 |
SG14 | David | Ford | 1500.00 |
SA9 | Mary | Howe | 750.00 |
SG5 | Susan | Brand | 2000.00 |
SL41 | Julie | Lee | 750.00 |
Это пример использования в запросе вычисляемого поля (иногда эти поля называют расчетными, или производными). В общем случае для создания вычисляемого поля в списке SELECT следует указать некоторое выражение языка SQL. В этих выражениях могут применяться операции сложения, вычитания, умножения и деления. При построении сложных выражений могут использоваться круглые скобки. Для получения значения вычисляемого поля могут использоваться значения из нескольких столбцов таблицы, однако тип данных тех столбцов, которые входят в арифметические выражения, обязательно должен быть цифровым. В таблице, полученной в результате выполнения запроса, четвертый столбец называется Exp_1. Обычно столбцам результирующей таблицы присваиваются имена соответствующих им столбцов исходных таблиц базы данных. Однако в данном случае это правило неприменимо, поскольку в стандарте SQL не определены правила именования производных столбцов. В одних диалектах языка SQL имена таким столбцам присваивают в соответствии с порядком их расположения в таблице (например, соl4), в других диалектах у подобного столбца имя может вовсе отсутствовать или вместо него может использоваться выражение, находящееся в списке SELECT. Стандарт ISO позволяет явным образом задавать другие имена столбцов результирующей таблицы, для чего применяется конструкция AS. При использовании этой конструкции приведенный выше оператор SELECT может быть переписан следующим образом:
SELECT staffNo, fName, lName, salary/12 AS monthlySalary
FROM Staff
В этом случае четвертый столбец результирующей таблицы будет называться monthlySalary, а не Exp_1.
Выборка строк (конструкция WHERE)
В приведенных выше примерах в результате выполнения операторов SELECT выбирались все строки указанной таблицы. Однако очень часто требуется тем или иным образом ограничить набор строк, помещаемых в результирующую таблицу запроса. Это достигается с помощью указания в запросе конструкции WHERE. Она состоит из ключевого слова WHERE, за которым следует перечень условий поиска, определяющих те строки, которые должны быть выбраны при выполнении запроса. Существует пять основных типов условий поиска (или предикатов, если пользоваться терминологией ISO).
• Сравнение. Сравниваются результаты вычисления одного выражения с результатами вычисления другого выражения.
• Диапазон. Проверяется, попадает ли результат вычисления выражения в заданный диапазон значений.
• Принадлежность к множеству. Проверяется, принадлежит ли результат вычисления выражения к заданному множеству значений.
• Соответствие шаблону. Проверяется, отвечает ли некоторое строковое значение заданному шаблону.
• Значение NULL. Проверяется, содержит ли данный столбец NULL (неопределенное значение).
Пример 5. Условие поиска путем сравнения. Перечислите весь персонал с размером заработной платы больше 10 000 фунтов стерлингов в год.
SELECT staffNo, fName, lName, position, salary
FROM Staff
WHERE salary > 10000
В этом запросе используются таблица Staff и предикат salary>10000. При выполнении запроса будет создана новая таблица, содержащая только те строки таблицы Staff, в которых значение столбца salary больше 10000 фунтов стерлингов. Результаты выполнения запроса представлены в табл. 13.
Результат выполнения запроса Таблица 13.
staffNo | fName | lName | position | salary |
SL21 | John | White | Manager | 30000.00 |
SG37 | Ann | Beech | Assistant | 12000.00 |
SG14 | David | Ford | Supervisor | 18000.00 |
SG5 | Susan | Brand | Manager | 24000.00 |
В языке SQL можно использовать простые операции сравнения, перечисленные в табл. 14.
Операции сравнения Таблица 14
Знак операции | Назначение |
= | Равно |
<> | Не равно (стандарт ISO) |
!= | Не равно (используется в некоторых диалектах) |
< | Меньше |
> | Больше |
<= | Меньше или равно |
>= | Больше или равно |
Более сложные предикаты могут быть построены с помощью логических операций AND, OR или NOT, а также с помощью скобок, используемых для определения порядка вычисления выражения (если это необходимо или желательно). Вычисление выражений в условиях выполняется по следующим правилам:
• Выражение вычисляется слева направо.
• Первыми вычисляются подвыражения в скобках.
• Операции NOT выполняются перед операциями AND и OR.
• Операции AND выполняются перед операциями OR.
Для устранения любой возможной неоднозначности рекомендуется использовать круглые скобки.