Опубликован: 08.05.2007 | Доступ: свободный | Студентов: 12881 / 3013 | Оценка: 4.13 / 3.77 | Длительность: 12:58:00
Дополнительный материал 2:

Справочник SQL

< Дополнительный материал 1 || Дополнительный материал 2: 123

Оператор SELECT

Системы управления базами данных предоставляют для работы с информацией в базе данных язык структурированных запросов SQL. При использовании SQL всю работу выполняет система управления базой данных. Вместо программирования серверных сценариев для доступа к таблицам или для обслуживания данных в базе данных, можно передать эту работу СУБД. Сценарий просто создает запрос SQL для СУБД, которая самостоятельно выполняет задачу. Такой метод способствует использованию трехслойных, клиент-серверных систем, где доступ к данным и обработка базы данных локализованы на сервере базы данных.

Оператор SELECT

Наиболее часто используемым оператором SQL является оператор SELECT. Как предполагает его имя, этот оператор используется для выбора записей из таблицы базы данных. Выборка может охватывать всю таблицу со всеми полями, или она может быть ограничена определенными полями определенных записей, которые соответствуют заданным критериям поиска. При желании выбранные записи можно упорядочить или отсортировать по определенным полям. Группа выбранных записей сама становится множеством записей, которое можно обрабатывать таким же образом, как и при работе со всей таблицей.

Общий формат оператора SELECT показан ниже:

SELECT  [TOP n | [PERCENT]] * | [DISTINCT] field1 [,field2]... FROM TableName
     WHERE criteria
     ORDER BY FieldName1 [ASC|DESC] [,FieldName2 [ASC|DESC] ]...

За ключевым словом SELECT следует одна или две спецификации, определяющие поля данных, которые будут выбраны из таблицы. Звездочка (*) означает, что для каждой записи будут выбраны все поля. Иначе можно определить список имен полей, разделенных запятыми, и будут выбраны только эти поля данных. Предложение FROM определяет таблицу, из которой эти записи и поля будут выбраны.

Например, оператор

SELECT * FROM MyTable

выбирает все записи из таблицы MyTable и включает все поля (*), которые составляют запись. Получаемое множество записей идентично тому, которое будет получено при открытии всей таблицы. В противоположность этому, оператор

SELECT LastName, FirstName FROM MyTable

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

Ключевое слово DISTINCT

Некоторые поля таблицы, вполне вероятно, содержат не уникальные значения данных. То есть, одно и то же значение может появляться более чем в одной записи. Чтобы извлекать только уникальные значения из этих полей, надо перед именем поля поставить ключевое слово DISTINCT. Например, следующий оператор извлекает один столбец данных, содержащий только уникальные значения в поле с именем ItemType:

SELECT DISTINCT ItemType FROM Products

Предложение WHERE

В обоих приведенных выше случаях из таблицы извлекаются все записи. Различаются только поля, которые составляют запись. Однако могут быть ситуации, когда не требуется извлекать все записи из таблицы. Может быть желательно выбрать только те записи, которые удовлетворяют определенному критерию. Для этих целей оператор SELECT предоставляет дополнительное предложение WHERE.

За ключевым словом WHERE следует один или несколько критериев выбора. Распространенный способ использования этого свойства состоит в проверке равенства, то есть поиска совпадающего значения в одном из полей записи. Например, если множество записей заказчиков обрабатывается на основе штата, в котором они расположены, то может быть желательно выбирать только те записи, где поле State содержит значение "GA". Для этого можно использовать оператор SQL,

SELECT * FROM Customers WHERE State='GA'

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

= (равно)
<> (не равно)
< (меньше)
> (больше)
<= (меньше или равно)
=> (равно или больше)

Кроме того, можно объединять критерии, используя логические операторы AND, OR и NOT для расширения или сокращения области выбора:

SELECT * FROM Customers WHERE State='GA' OR State='KY'

Отметим в этих примерах, что значения критерия выбора заключаются в одиночные кавычки (апострофы). При любом поиске в текстовых полях базы данных значение критерия должно заключаться в одиночные кавычки ( WHERE State = 'GA' ). Если тестируется числовое поле, значение данных в кавычки не заключается ( WHERE Number > 10 ). Если тестируется поле даты/времени, то значение критерия окружается символами # (WHERE TheDate > #1/1/01#).

Предложение ORDER BY

Оператор SELECT может включать также предложение ORDER BY, чтобы организовать или отсортировать извлеченное из таблицы множество записей.

Предложение ORDER BY идентифицирует имена полей, по которым сортируются записи. Если используется более одного имени поля, то сортировка происходит в том порядке, в котором появляются разделенные запятыми имена. Первое поле становится основным полем сортировки, второе поле становится промежуточным полем сортировки, а третье поле — младшим полем сортировки. Поэтому можно упорядочить имена по фамилии, затем по имени, и затем по отчеству, применяя оператор SELECT следующего вида:

SELECT * FROM Customers ORDER By LastName,FirstName,MiddleInitial

Можно также определить, будет ли упорядочивание происходить в возрастающей или убывающей последовательности, задавая ASC или DESC вслед за именем поля. По умолчанию используется возрастающий порядок ( ASC ), который можно не задавать.

SELECT * FROM Customers ORDER By LastName(DESC),FirstName(ASC),MiddleInitial

Предложение WHERE и ORDER BY являются необязательными в операторе SELECT, но также могут появляться. Однако, если применются оба, предложение WHERE должно предшествовать предложению ORDER BY.

Предикат TOP n

Если поставить перед выбранным полем TOP n, то будет возвращено n записей, которые будут находиться вверху или внизу диапазона, определенного предложением ORDER BY. При упорядочивании по возрастанию ( DESC ) извлекается верхняя часть диапазона, при упорядочивании по убыванию ( ASC ) — нижняя часть диапазона.

SELECT TOP 10 ItemName, ItemPrice FROM Products ORDER BY ItemPrice ASC

Этот оператор выбирает 10 самых дешевых продуктов из таблицы. Можно использовать также зарезервированное слово PERCENT, чтобы возвращать определенный процент записей, которые попадают в верхнюю или нижнюю часть диапазона, определенного предложением ORDER BY.

Создание строк SQL

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

SQLString = "SELECT * FROM Customers WHERE State='GA' ORDER BY LastName(DESC)"

Здесь строка символов, составляющих оператор SELECT, присваивается переменной SQLString. Затем эта переменная используется для выполнения оператора SQL.

Если оператор SELECT является особенно длинным или сложным, то можно составить его по частям, соединяя отдельные строки:

SQLString = "SELECT * FROM Customers "
SQLString &= "WHERE State='GA' OR State='KY' "
SQLString &= "ORDER BY LastName(DESC), FirstName, MiddleInitial"

или применив символ продолжения строки:

SQLString = "SELECT * FROM Customers " _
  & "WHERE State='GA' OR State='KY' " _
  & "ORDER BY LastName(DESC), FirstName, MiddleInitial"

Здесь последующие предложения соединяются, чтобы создать строку SQL (не забывая добавлять необходимые пробелы для разделения предложений).

Апострофы в текстовых полях

Текстовые значения часто содержат апострофы, например, имена (O'Reilly), притяжательный падеж ( Bill's ), сокращения ( it's ) и тому подобное. Однако оператор SQL вида

SELECT * FROM Customers WHERE LastName = 'O'Reilly'

будет вызывать ошибку, так как не разрешается кодировать апостроф внутри значения, которое само заключено в апострофы. Решение проблемы состоит в применении двойного апострофа ('') вместо любого одиночного апострофа внутри значения:

SELECT * FROM Customers WHERE LastName = 'O''Reilly'

Интегрирование данных переменной

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

SQLString = "SELECT * FROM Customers WHERE State = '$TheState'"

Если переменная TheState имеет значение "GA", то SQLString будет содержать оператор SQL:

SQLString = "SELECT * FROM Customers WHERE State = 'GA'"

Отметим, что апострофы, включенные в литеральные текстовые строки, окружают переменную, так что значение TheState равное "GA" интерпретируется как строка ( 'GA' ) в операторе SELECT.

При извлечении числовых данных апострофы не требуются:

SQLString = "SELECT * FROM Customers WHERE Age = $TheAge"

Значение переменной TheAge добавляется в конце литеральной строки, создавая оператор SELECT следующего вида:

SQLString = "SELECT * FROM Customers WHERE Age = 30"

При создании операторов, включающих дату, переменная должна быть заключена в специальные символы "#":

SQLString = "SELECT * FROM Orders WHERE OrderDate = #$TheDate#"

Получающая строка в переменной SQLString представляет оператор SELECT следующего вида:

SQLString = "SELECT * FROM Orders WHERE OrderDate = #07/15/04#"

Поэтому как общее правило, операторы SQL SELECT для трех типов данных имеют следующие общие конструкции:

SQLString = 
    "SELECT * FROM Table WHERE StringField = '$StringVariable'"
    "SELECT * FROM Table WHERE NumericField = $NumericVariable
    "SELECT * FROM Table WHERE DateField = #$DateVariable#"
< Дополнительный материал 1 || Дополнительный материал 2: 123
Максим Матросов
Максим Матросов
Наталья Джабасова
Наталья Джабасова