SQL справочник
Вторник, 01 июня 2010 05:38

SQL справочник

Оцените материал
(1 Голосовать)

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

 

Наиболее часто используемым оператором 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#"

Оператор INSERT

Оператор INSERT используется для добавления записей в таблицу базы данных. Его общий формат для добавления одной записи показан ниже:

INSERT INTO TableName

[(FieldName1 [,FieldName2]...)]

VALUES (Value1 [,Value2]...)

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

Обычно все поля именуются и для них задаются значения, но это не обязательно. Те поля, имена и соответствующие значения которых указаны, вводятся в добавляемую запись, неопределенные поля добавляются, но не имеют присвоенных значений. Если имена полей не задаются, все значения присваиваются, начиная с первого поля.

Наиболее распространенный и простой способ определить новую запись состоит в указании имен всех полей и задании для каждого из них значения:

INSERT INTO MyTable

(Field1, Field2, Field3, Field4, Field5)

VALUES('a text field value', 'a memo field value', 100, 3000, #01/01/04#)

В этом примере в таблицу MyTable добавляется новая запись, содержащая пять полей. Имена полей задаются вместе со значениями присваиваемых данных, соответственно, для каждого поля. Значения для полей, которые определены как текстовые поля в таблице, должны быть помещены в одиночные кавычки (апострофы); значения для числовых полей не заключаются в одиночные кавычки; значения для полей даты/времени заключаются в символы #. Однако, вполне допустимо вставлять новую запись только с некоторыми полями, имеющими значения, если эти значения соответствуют именам полей и типам данных:

INSERT INTO MyTable

(Field1, Field5)

VALUES('a text field value', #01/01/04#)

Если вставляемое текстовое поле содержит апострофы, они должны быть заменены двойными апострофами. Смотрите обсуждение использования апострофов в значениях данных при рассмотрении оператора SELECT.

Вставка переменных в операторы INSERT

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

SQLString = "INSERT INTO Products (ItemNo, ItemName, ItemPrice, ItemQty, ItemDate)

VALUES ('$ItemNo', '$ItemName', $ItemPrice,$ItemQuantity,#$PurchaseDate#)"

Эта конструкция создает оператор INSERT следующего вида:

SQLString = "INSERT INTO Products (ItemNo, ItemName, ItemPrice, ItemQty, ItemDate)

VALUES ('AAA111', 'Software', 100.00, 15, #07/15/04#)"

Оператор DELETE

Оператор DELETE используется для удаления записей из таблицы базы данных. Обычный формат оператора для удаления одной записи показан ниже:

DELETE FROM TableName

WHERE criteria

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

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

За ключевым словом WHERE следует одно или несколько критериев выбора. Обычно запись для удаления определяют через равенство значению ее уникального "ключевого" поля.

DELETE FROM Products WHERE ItemNo = '99999'

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

=

(равно)

<>

(не равно)

<

(меньше)

>

(больше)

<=

(меньше или равно)

=>

(равно или больше)

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

DELETE FROM Products WHERE ItemQuantity = 0 AND NOT ItemType = 'Software'

В этом случае можно удалить больше одной записи. Если предложение WHERE отсутствует, удаляются все записи в таблице.

При сравнении с текстовым полем значение критерия должно быть заключено в одиночные кавычки; при тестировании числового поля значение данных в кавычки не заключается; при тестировании поля даты/времени значение критерия окружается символами #.

Если сравниваемое текстовое поле содержит апострофы, они должны быть заменены двойными апострофами. Смотрите обсуждение использования апострофов в значениях данных при рассмотрении оператора SELECT.

Как и в случае операторов SELECT и INSERT оператор DELETE обычно создается сценарием с помощью объединения литеральных строк и переменных.

SQLString = "DELETE FROM Products WHERE PurchaseDate < #$TheDate# OR (ItemQty < $TheQuantity AND ItemType = '$TheType')"

Этот код разрешается в оператор DELETE следующего вида:

SQLString = "DELETE FROM Products WHERE PurchaseDate < #07/15/02# OR (ItemQty < 10 AND ItemType = 'Software')"

Оператор UPDATE

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

UPDATE TableName

SET (FieldName1=value1 [,FieldName2=value2]...)

WHERE criteria

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

UPDATE MyTable

SET Field2 = 'new text value', Field3 = 200, Field5 = #02/02/04#

WHERE Field1 = 'KEY001'

В этом примере три поля изменяются в записи, которая определяется значением 'KEY001' в Field1 в таблице MyTable. Значения для полей, которые определяются как текстовые поля в таблице, должны заключаться в одиночные кавычки (апострофы); значения для числовых полей не заключаются в одиночные кавычки; значения для полей даты/времени заключаются в символы #.

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

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

Можно, однако, использовать для идентификации записи любые принятые условные операторы:

=

(равно)

<>

(не равно)

<

(меньше)

>

(больше)

<=

(меньше или равно)

=>

(равно или больше)

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

UPDATE Products

SET ItemQuantity = 0

WHERE ItemQuantity < 10 AND NOT ItemType = 'Software'

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

Если текстовое поле содержит апострофы, то они должны быть изменены на двойные апострофы. Смотрите обсуждение использования апострофов в значениях данных при рассмотрении оператора SELECT.

Как и в случае операторов SELECT, INSERT и DELETE, оператор UPDATE создается обычно в сценарии с помощью объединения литеральных строк и переменных.

SQLString = "UPDATE Products SET ItemQty = 0 WHERE ItemQuantity < $TheQuantity AND NOT ItemType = '$TheType'"

Этот код разрешается в оператор UPDATE следующего вида:

SQLString = "UPDATE Products SET ItemQty = 0 WHERE ItemQuantity < 10 AND NOT ItemType = 'Software'"

Встроенные функции

Математические функции

ceil(fraction) – округляет дробное число до ближайшего большего целого числа.

floor(fraction) – округляет дробное число до ближайшего меньшего целого числа.

number_format("number", "decimals", "decimal point", "thousands_sep") – возвращает форматированную версию указанного числа ("number").

pow(number, exponent) – возвращает результат возведения заданного числа number в степень exponent.

rand(min, max) – порождает случайное число из заданного диапазона.

round(fraction) – округляет дробное число до ближайшего целого числа.

sqrt(number) – возвращает квадратный корень заданного числа number.

Строковые функции

strlen(string) – определяет длину строки.

ltrim(string) – удаляет пробелы в начале строки.

rtrim(string) – удаляет пробелы в конце строки.

strpbrk(string, char) – ищет в строке string символ (char). Возвращает false или строку, начинающуюся с найденного символа.

strtoupper(string) – преобразует строку в верхний регистр.

strtolower(string) – преобразует строку в нижний регистр.

strrev(string) – записывает строку в обратном порядке.

eregi(string pattern, string subject) – выполняет независимый от регистра поиск выражения. Выполняет поиск в subject на основе регулярного выражения, заданного в pattern.

Функции ошибок

exit("message") – выводит сообщение об ошибке и прекращает выполнение текущего сценария.

die("message") – выводит сообщение об ошибке и прекращает выполнение текущего сценария.

Функция Email

mail("recipient","subject", "message", "mail headers") – посылает сообщение e-mail указанному получателю.

Функции HTTP/сеанса

header() — выводит строку заголовка HTTP, такую, как место переадресации.

setcookie("name", "value", "expire", "path", "domain", "secure") – посылает пользователю cookie.

session_start("name", "value", "expire", "path", "domain", "secure") – посылает пользователю cookie.

setcookie("name", "value", "expire", "path", "domain", "secure") – посылает пользователю cookie.

session_start() – инициализирует данные сеанса. Эта функция вызывается перед созданием новой переменной сеанса с помощью $_SESSION.

session_destroy() – разрушает все данные, зарегистрированные за текущим сеансом сценария.

Функции работы с файлами

fopen(filename, mode) — используется для открытия файла. Функция требуется имя файла filename и режим mode. Она возвращает указатель на файл, который предоставляет информацию о файле и используется в качестве ссылки.

fread(resource_handle, length) – используется для чтения содержимого файла. Читает length байтов из файла, задаваемого resource_handle. Чтение прекращается, когда будет прочитано length байтов или будет достигнут EOF (end of file). Функция требует два параметра – указатель файла, который создается при открытии файла с помощью fopen(), и длины length, определяющей объем считываемого содержимого файла.

fgetcsv(resource_handle, length, delimiter) – используется для чтения содержимого файла и анализа данных для создания массива. Данные разделяются параметром delimiter, задаваемым в функции.

filesize(filename) – возвращает размер файла. Если возникает ошибка, то функция возвращает значение false.

fclose(resource_handle) – используется для закрытия файла. Функции требуется указатель файла, созданный при открытии файла с помощью функции fopen(). Возвращает TRUE при успехе или FALSE при отказе.

fwrite(resource_handle,string) – записывает содержимое строки string в указанный поток файла. Если задан аргумент длины length, запись будет остановлена после записи length байтов или при достижении конца строки.

copy(original_filename, new_filename) – копирует содержимое файла, заданного первым параметром, в новый файл, определенный вторым параметром. Функция возвращает значение true или false.

unlink(filename) – удаляет файл, определенный параметром. Функция возвращает значение true или false.

rename($orig_filename, $new_filename) – переименовывает файл, определенный первым параметром, задавая для него имя, определенное вторым параметром. Функция возвращает значение true или false.

Функции ODBC

odbc_connect(dsn/dsn-less connection string,username,password) – эта функция используется для соединения с источником данных ODBC. Функция получает четыре параметра: имя источника данных или строку соединения без dsn, имя пользователя, пароль и необязательный параметр, задающий тип курсора. В тех случаях, где имя пользователя, пароль и тип курсора не требуются, параметры можно заменять пустой строкой – ''. id соединения, возвращаемый этой функцией, необходим другим функциям ODBC. Можно иметь одновременно открытыми несколько соединений, если они используют различные базы данных или различные имена пользователей и пароли.

odbc_exec(connection_id,SQL_query_string) – функция, используемая для выполнения оператора SQL. Функция получает два параметра: объект соединения, созданный с помощью функции odbc_connect() и оператор SQL. ВозвращаетFALSE при ошибке. Возвращает множество записей, если команда SQL была выполнена успешно.

odbc_fetch_array(recordset_name) – используется для извлечения записей или строк из множества записей, как из ассоциативного массива. Эта функция возвращает TRUE, если может вернуть строки, иначе FALSE.

odbc_num_rows(recordset_name) – возвращает число строк в множестве результатов ODBC. Функция возвращает -1, если возникает ошибка. Для операторов INSERT, UPDATE и DELETE функция odbc_num_rows() возвращает число затронутых строк. Для предложения SELECT это может быть число доступных строк. Примечание: использование функции odbc_num_rows() для определения числа доступных строк после выполнения оператора SELECT будет возвращает -1 для драйверов MS Access.

odbc_close(connection_id) – закрывает соединение с сервером базы данных, связанным с данным идентификатором соединения.

Функции MySQL

mysql_connect(MySQL server name,username,password) – открывает соединение с сервером MySQL.

mysql_select_db(database_name,connection_identifier) – выбирает базу данных, расположенную на сервере MySQL. Параметр database_name указывает на активную базу данных на сервере MySQL, которая была открыта с помощью функции mysql_connect. Параметр connection_identifier является ссылкой на текущее соединение с MySQL.

mysql_query(sql query) – посылает запрос активной в данный момент базе данных.

mysql_fetch_array(resourse result) – возвращает массив, который соответствует извлеченной строке, и перемещает внутренний указатель данных вперед.

mysql_affected_rows(resourse result) –определяет число строк, затронутых предыдущей операцией SQL.

mysql_close(link_identifier) – закрывает соединение с MySQL.

Оператор SELECT

 

Прочитано 6750 раз Последнее изменение Понедельник, 21 октября 2019 02:38