Access SQL. Основные понятия, лексика и синтаксис. Примеры SQL запросов к базе данных MySQL

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

Но, несмотря на постоянное использование баз данных, даже для многих разработчиков программных систем остается много «белых пятен» из-за разного толкования одних и тех же терминов. Мы дадим краткое определение основных терминов баз данных перед рассмотрением языка SQL. Итак.

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

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

Тип данных - вид информации, разрешенной для хранения в отдельном столбце или строке. Это могут быть числа или текст определенного формата.

Столбец и строка - все мы работали с электронными таблицами, в которых также присутствуют строки и столбцы. Любая реляционная база данных работает с таблицами аналогичным образом. Строки иногда называют записями.

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

Что такое SQL?

SQL (англ. - язык структурированных запросов) был разработан только для работы с базами данных и в настоящий момент является стандартом для всех популярных СУБД. Синтаксис языка состоит из небольшого количества операторов и прост в изучении. Но, несмотря на внешнюю простоту, он позволяет создание sql запросов для сложных операций с БД любого размера.

С 1992 г. существует общепринятый стандарт, называемый ANSI SQL. Он определяет базовый синтаксис и функции операторов и поддерживается всеми лидерами рынка СУБД, такими как ORACLE Рассмотреть все возможности языка в одной небольшой статье невозможно, поэтому мы кратко рассмотрим только основные SQL запросы. Примеры наглядно показывают простоту и возможности языка:

  • создание баз и таблиц;
  • выборка данных;
  • добавление записей;
  • модификация и удаление информации.
Типы данных SQL

Все столбцы в таблице базы данных хранят один тип данных. Типы данных в SQL такие же, как и в других языках программирования.

Создаем таблицы и базы данных

Создавать новые базы, таблицы и другие запросы в SQL можно двумя способами:

  • Операторами SQL через консоль СУБД
  • Используя интерактивные средства администрирования, входящие в состав сервера баз данных.

Создается новая база данных оператором CREATE DATABASE ; . Как видим, синтаксис прост и лаконичен.

Таблицы внутри базы данных создаем оператором CREATE TABLE со следующими параметрами:

  • наименование таблицы
  • имена и типы данных столбцов

В качестве примера создадим таблицу Commodity со следующими столбцами:

Создаем таблицу:

CREATE TABLE Commodity

(commodity_id CHAR(15) NOT NULL,

vendor_id CHAR(15) NOT NULL,

commodity_name CHAR(254) NULL,

commodity_price DECIMAL(8,2) NULL,

commodity_desc VARCHAR(1000) NULL);

Таблица состоит из пяти столбцов. После наименования идет тип данных, столбцы разделяются запятыми. Значение столбца может принимать пустые значения (NULL) или должно быть обязательно заполнено (NOT NULL), и это определяется при создании таблицы.

Выборка данных из таблицы

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

SELECT commodity_name FROM Commodity

После оператора SELECT указываем имя столбца для получения информации, а FROM определяет таблицу.

Результатом выполнения запроса будут все строки таблицы со значениями Commodity_name в том порядке, в котором они были внесены в базу данных т.е. без всякой сортировки. Для упорядочивания результата используется дополнительный оператор ORDER BY.

Для запроса по нескольким полям перечисляем их через запятую, как в следующем примере:

SELECT commodity_id, commodity_name, commodity_price FROM Commodity

Есть возможность получить как результат запроса значение всех столбцов строки. Для этого используется знак «*»:

SELECT * FROM Commodity

  • Дополнительно SELECT поддерживает:
  • Сортировку данных (оператор ORDER BY)
  • Выбор согласно условиям (WHERE)
  • Группировку срок (GROUP BY)
Добавляем строку

Для добавления строки в таблицу используются SQL запросы с оператором INSERT. Добавление может производиться тремя способами:

  • добавляем новую целую строку;
  • часть строки;
  • результаты запроса.

Для добавления полной строки необходимо указать имя таблицы и значения столбцов (полей) новой строки. Приведем пример:

INSERT INTO Commodity VALUES("106 ", "50", "Coca-Cola", "1.68", "No Alcogol ,)

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

В случае добавления только части строки необходимо явно указать наименования столбцов, как в примере:

INSERT INTO Commodity (commodity_id, vendor_id, commodity_name)

VALUES("106 ", ‘50", "Coca-Cola",)

Мы ввели только идентификаторы товара, поставщика и его наименование, а остальные поля отставили пустыми.

Добавление результатов запроса

В основном INSERT используется для добавления строк, но может использоваться и для добавления результатов оператора SELECT.

Изменение данных

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

  • Обновляются все строки в таблице.
  • Только для определенной строки.

UPDATE состоит из трех основных элементов:

  • таблица, в которой необходимо производить изменения;
  • имена полей и их новые значения;
  • условия выбора строк для изменения.

Рассмотрим пример. Допустим, у товара с ID=106 изменилась стоимость, поэтому эту строку необходимо обновить. Пишем следующий оператор:

UPDATE Commodity SET commodity_price = "3.2" WHERE commodity_id = "106"

Мы указали имя таблицы, в нашем случае Commodity, где будет производиться обновление, затем после SET - новое значение столбца и нашли нужную запись, указав в WHERE нужное значение ID.

Для изменения нескольких столбцов после оператора SET указываются несколько пар столбец-значение, разделенных запятыми. Смотрим пример, в котором обновляется наименование и цена товара:

UPDATE Commodity SET commodity_name=’Fanta’, commodity_price = "3.2" WHERE commodity_id = "106"

Для удаления информации в столбце можно присвоить ему значение NULL, если это позволяет структура таблицы. Необходимо помнить, что NULL - это именно «никакое» значение, а не нуль в виде текста или числа. Удалим описание товара:

UPDATE Commodity SET commodity_desc = NULL WHERE commodity_id = "106"

Удаление строк

SQL запросы на удаление строк в таблице выполняются оператором DELETE. Есть два варианта использования:

  • в таблице удаляются определенные строки;
  • удаляются все строки в таблице.

Пример удаления одной строки из таблицы:

DELETE FROM Commodity WHERE commodity_id = "106"

После DELETE FROM указываем имя таблицы, в которой будут удаляться строки. Оператор WHERE содержит условие, по которому будут выбираться строки для удаления. В примере мы удаляем строку товара с ID=106. Указывать WHERE очень важно т.к. пропуск этого оператора приведт к удалению всех строк в таблице. Это относится и к изменению значения полей.

В операторе DELETE не указываются наименования столбцов и метасимволы. Он полностью удаляет строки, а удалить отдельный столбец он не может.

Использование SQL в Microsoft Access

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

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

Расширения SQL

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

Наиболее распространенные диалекты языка:

  • Oracle Database - PL/SQL
  • Interbase, Firebird - PSQL
  • Microsoft SQL Server - Transact-SQL
  • PostgreSQL - PL/pgSQL.
SQL в Интернет

СУБД MySQL распространяется под свободной лицензией GNU General Public License. Имеется коммерческая лицензия с возможностью разработки заказных модулей. Как составная часть входит в наиболее популярные сборки Интернет-серверов, таких как XAMPP, WAMP и LAMP, и является самой популярной СУБД для разработки приложений в сети Интернет.

Была разработана компанией Sun Microsystems и в настоящий момент поддерживается корпорацией Oracle. Поддерживаются базы данных размером до 64 терабайт, стандарт синтаксиса SQL:2003, репликация баз данных и облачных сервисов.

Это приложение содержит более краткое описание различных команд SQL. Цель состоит в том, чтобы дать вам быструю и точную ссылку и определение SQL. Первый раздел этого приложения определяет элементы, используемые для создания команд SQL; второй, подробности синтаксиса и предложения с кратким описанием самих команд. Далее показаны стандартные условные обозначения (они называются BNF условиями):

  • Ключевые cлова набираются в верхнем регистре.
  • SQL и другие специальные условия заключаются в угловые скобки и набираются курсивом.(< and >)
  • Необязательные части команд находятся в квадратных скобках ().
  • Многоточие (....) указывает на то что предшествующая часть команды может повторяться любое число раз.
  • Вертикальна полоса (|) означает - то, что ей предшествует может быть заменено на то что следует за ней.
  • Фигурные Скобки ({and}) указывают - все что внутри них, должно быть расценено как целое, для оценки других символов (например, вертикальных полос или эллипсов).
  • Двойное двоеточие и равняется (:: =) означают - то что следует за ними является определением того что им предшествует.

    Кроме того, мы будем использовать следующую последовательность (.,..) чтобы указывать, что предшествующее этому может повторяться любое число раз с индивидуальными событиями отделяемыми запятыми. Атрибуты которые не являются частью официального стандарта будут отмечены как (*нестандартные*) в описании.

    ОБРАТИТЕ ВНИМАНИЕ: Терминология которую мы используем здесь, не официальна терминология ANSI. Официальная терминология может вас сильно запутать, поэтому мы несколько ее упростили.

    По этой причине, мы иногда используем условия отличающиеся от ANSI, или используем те же самые условия но несколько по-другому. Например, наше определение - < predicate > отличается от используемой в ANSI комбинации стандартного определения < predicate > с < search condition >.

    SQL ЭЛЕМЕНТЫ

    Этот раздел определяет элементы команд SQL. Они разделены на две категории: Основные элементы языка , и Функциональные элементы языка .

    Основные элементы - это создаваемые блоки языка; когда SQL исследует команду, то он сначала оценивает каждый символ в тексте команды в тер- минах этих элементов. Разделители< separator > отделяют одну часть команды от другой; все что находится между разделителями < separator > обрабатывается как модуль. Основываясь на этом разделении, SQL и интерпретирует команду.

    Функциональные элементы - это разнообразные вещи отличающиеся от ключевых слов, которые могут интерпретироваться как модули. Это - части команды, отделяемые с помощью разделителей < separator >, имеющих специальное значение в SQL. Некоторые из них являются специальными для определенных команд и будут описаны вместе с этими командами по- зже, в этом приложении. Перечисленное здесь, является общими элементы для всех описываемых команд. Функциональные элементы могут определяться в терминах друг друга или даже в собственных терминах. Например, предикат < predicate >, наш последний и наиболее сложный случай, содержит предикат внутри собственного определения. Это потому, что предикат < predicate > использующий AND или OR может содержать любое число предикатов < predicate > которые могут работать автономно. Мы представляли вам предикат < predicate > в отдельной секции в этом приложении, из-за разнообразия и сложности этого функционального элемента языка. Он будет постоянно присутствовать при обсуждении других функциональных частей команд.

    ЭЛЕМЕНТЫ ЯЗЫКА БЕЙСИКА

    ЭЛЕМЕНТ ОПРЕДЕЛЕНИЕ < separator > < comment > | < space > | < newline > < comment > --< string > < newline > < space > пробел < newline > реализационно-определяемый конец символьной строки < identifier > < letter >[{< letter or digit > | < underscore}... ] < ИМЕЙТЕ ВВИДУ: Следу строгому стандарту ANSI, символы должны быть набраны в верхнем регистра, а идентификатор < identifier > не должен быть длиннее 18-ти символов. ЭЛЕМЕНТ ОПРЕДЕЛЕНИЕ < underscore > - < percent sign > % < delimiter > любое из следующих: , () < > . : = + " - | > = < = или < string > < string > [любой печатаемый текст в одиночных кавычках] Примечание: В < string >, две последовательных одиночных кавычки (" ") интерпретируются как одна ("). < SQL term > окончание, зависящее от главного языка. (*только вложенный*)

    ФУНКЦИОНАЛЬНЫЕ ЭЛЕМЕНТЫ Следующая таблица показывает функциональные элементы команд SQL и их определения: ЭЛЕМЕНТ ОПРЕДЕЛЕНИЕ < query > Предложение SELECT < subquery > Заключенное в круглых скобках предложение SELECT внутри другого условия, которое, фактически, оценивается отдельно для каждой строки-кандидата другого предложения. < value expression > < primary > | < primary > < operator > < primary > | < primary > < operator > < value expression > < operator > любое из следующих: + - / * < primary > < column name > | < literal > | < aggregate function > | < built-in constant > | < nonstandard function > < literal > < string > | < mathematical expressio ЭЛЕМЕНТ ОПРЕДЕЛЕНИЕ < built-in constant > USER | < implementation-dehned constant > < table name > < identifier > < column spec > [< table name > | < alias >.]< column name > < grouping column > < column spec > | < integer > < ordering column > < column spec > | < integer > < colconstraint > NOT NULL | UNIQUE | CHECK (< predicate >) | PRIMARY KEY | REFERENCES < table name >[(< column name >)] < tabconstraint > UNIQUE (< column list >) | CHECK (< predicate >) | PRIMARY KEY (< column list >) | FOREIGN KEY (< column list >) REFERENCES < table name >[(< column list >)] < defvalue > ЗНАЧЕНИЕ ПО УМОЛЧАНИЮ = < value expression > < data type > Допустимый тип данных (См. Приложение B для описания типов обеспечиваемых ANSI или Приложение C для других общих типов.) < size > Значение зависит от < data type >(См. Приложение B .) < cursor name > < identifier > < index name > < identifier > < synonym > < identifier >(*nonstandard*) < owner > < Authorization ID > < column list > < column spec > .,.. < value list > < value expression > .,.. < table reference > { < table name > [< alias >] } .,.. ПРЕДИКАТЫ

    Следующее определяет список различных типов предиката < predicate > описанных на следующих страницах:

    < predicate > ::=

    { < comparison predicate > | < in predicate > | < null predicate > | < between predicate > | < like predicate > | < quantified predicate > | < exists predicate > } < predicate > - это выражение, которое может быть верным, неверным, или неизвестным, за исключением < exists predicate > и < null predicate >, которые могут быть только верными или неверными.

    Будет получено неизвестно если NULL значения предотвращают вывод полученного ответа. Это будет случаться всякий раз, когда NULL значение сравнивается с любым значением. Стандартные операторы Буля - AND, OR, и NOT - могут использоваться с предикатом. NOT верно = неверно, NOT неверно = верно, а NOT неизвестно = неизвестно. Результаты AND и OR в комбинации с предикатами, показаны в следующих таблицах:

    AND AND Верно Неверно Неизвестно Верно верно неверно неизвестно Неверно неверно неверно неверно Неизвестно неизвестно неверно неизвестно OR OR Верно Неверно Неизвестно Верно верно верно верно Неверно верно неверно неизвестно Неизвестно верно неизвестно неизвестно

    Эти таблицы читаются способом наподобие таблицы умножения: вы объединяете верные, неверные, или неизвестные значения из строк с их столбцами чтобы на перекрестье получить результат. В таблице AND, например, третий столбец (Неизвестно) и первая строка (Верно) на пересечении в верхнем правом углу дают результат - неизвестно, другими словами: Верно AND Неизвестно = неизвестно. Порядок вычислений определяется круглыми скобками. Они не представляются каждый раз. NOT оценивается первым, далее AND и OR. Различные типы предикатов < predicate > рассматриваются отдельно в следующем разделе.

    < comparison predicate > (предикат сравнения)

    Синтаксис

    < value expresslon > < relational op > < value expresslon > |
    < subquery >
    < relatlonal op > :: =
    =
    | <
    | >
    | <
    | >=
    | < >

    Если либо < value expression > = NULL, либо < comparison predicate > = неизвестно; другими словами, это верно если сравнение верно или неверно если сравнение неверно.
    < relational op > имеет стандартные математические значения для числовых значений; для других типов значений, эти значения определяются конкретной реализацией.
    Оба < value expression > должны иметь сравнимые типы данных. Если подзапрос < subquery > используется, он должен содержать одно выражение < value expression > в предложении SELECT, чье значение будет заменять второе выражение < value expression > в предикате сравнения < comparision predicate >, каждый раз когда < subquery > действительно выполняется.

    < between predicate >

    Синтаксис

    < value expression > BETWEEN < value expression >
    AND < value expression >

    < between predicate > - A BETWEEN B AND C , имеет такое же значение что и < predicate > - (A >= B AND < = C). < between predicate > для которого A NOT BETWEEN B AND C, имеет такое же значение что и NOT (BETWEEN B AND C). < value expression > может быть выведено с помощью нестандартного запроса < subquery > (*nonstandard*).

    < in prediicate >

    Синтаксис

    < value expression > IN < value list > | < subquery >

    Список значений < value list > будет состоять из одного или более перечисленных значений в круглых скобках и отделяемых запятыми, которые имеют сравнимый с < value expression > тип данных. Если используется подзапрос < subquery >, он должен содержать только одно выражение < value expression > в предложении SELECT (возможно и больше, но это уже будет вне стандарта ANSI). Подзапрос < subquery > фактически, выполняется отдельно для каждой строки-кандидата основного запроса, и значения которые он выведет, будут составлять список значений < value list > для этой строки. В любом случае, предикат < in predicate > будет верен если выражение < value expression > представленное в списке значений < value list >, если не указан NOT. Фраза A NOT IN (B, C) является эквивалентом фразы NOT (A IN (B, C)).

    < like predicate >

    Синтаксис

    < charvalue > LIKE < pattern >

    < charvalue > - это любое *нестандартное* выражение < value expression > алфавитно-цифрового типа. < charvalue > может быть, в соответствии со стандартом, только определенным столбцом < column spec >. Образец < pattern > состоит из строки которая будет проверена на совпадение с < charvalue >. Символ окончания < escapechar > - это одиночный алфавитно-цифровой символ. Совпадение произойдет, если верны следующие условия:

  • Для каждого символа подчеркивания < underscore > в образце < pattern > которая не предшествует символу окончания < escapechar >, имеется один соответствующий ему символ < charvalue >.
  • Для каждого < percent sign > в образце < pattern >, который не предшествует < escapechar >, имеются нули или более соответствующие символы в < charvalue >.
  • Для каждого < escapechar > в < pattern > который не предшествует другому < escapechar >, нет никакого соответствующего символа в < charvalue >.
  • Для каждого иного символа в < pattern >, один и тот же символ устанавливается у соответствующей отметке в < charvalue >.

    Если совпадение произошло, < like predicate > - верен, если не был указан NOT. Фраза NOT LIKE "текст" - эквивалентна NOT (A LIKE "текст").

    < null predicate >

    Синтаксис

    < column spec > IS NULL

    < column spec > = IS NULL, если NULL значение представлено в этом столбце. Это сделает < null predicate > верным если не указан NULL. Фраза < column spec > IS NOT NULL, имеет тот же результат что и NOT (< column spec > IS NULL).

    < quantified predicate >

    Синтаксис

    < value expression > < relational op >
    < quantifier > < subquery >
    < quantifier > :: = ANY | ALL | SOME

    Предложение SELECT подзапроса < subquery > должно содержать одно и только одно выражение значения < value expression >. Все значения выведенные подзапросом < subquery > составляют набор результатов < result set >. < value expression > сравнивается, используя оператор связи < relational operator >, с каждым членом набора результатов < result set >. Это сравнение оценивается следующим образом:

  • Если < quantifier > = ALL, и каждый член набора результатов < result set > делает это сравнение верным, < quantified predicate > - верен.
  • Если < quantifier > = ANY, и имеется по крайней мере один член из набора результатов < result set > , который делает верным это сравнение, то < quantified predicate > является верным.
  • Если набор результатов < result set > пуст, то < quantified predicate > верен, если < quantifier > = ALL , и неверен если иначе.
  • Если < quantifier > = SOME, эффект - тот же что и для ANY.
  • Если < quantified predicate > не верен и не неверен, он - неизвестен.

    < exists predicate >

    Синтаксис:

    EXISTS (< subquery >)

    Если подзапрос < subquery > выводит одну или более строк вывода, < exists predicate > - верен; и неверен если иначе.

    SQL КОМАНДЫ

    Этот раздел подробно описывает синтаксис различных команд SQL. Это даст вам возможность быстро отыскивать команду, находить ее синтаксис и краткое описание ее работы.

    ИМЕЙТЕ ВВИДУ Команды которые начинаются словами - EXEC SQL, а также команды или предложения заканчивающиеся словом - могут использоваться только во вложенном SQL.

    BEGIN DECLARE SECTION (НАЧАЛО РАЗДЕЛА ОБЪЯВЛЕНИЙ)

    Синтаксис

    EXEC SQL BEGIN DECLARE SECTION < SQL term > < host-language variable declarations > EXEC SQL END DECLARE SECTION < SQL term >

    Эта команда создает раздел программы главного языка для объявления в ней главных переменных, которые будут использоваться во вкладываемых операторах SQL. Переменна SQLCODE должна быть включена как одна из объявляемых переменных главного языка.

    CLOSE CURSOR (ЗАКРЫТЬ КУРСОР)

    Синтаксис

    EXEC SQL CLOSE CURSOR < cursor name > < SQL term >;

    Эта команда указывает курсору закрыться, после чего ни одно значение не сможет быть выбрано из него до тех пор пока он не будет снова открыт.

    COMMIT (WORK) (ФИКСАЦИЯ (ТРАНЗАКЦИИ))

    Синтаксис

    Эта команда оставляет неизменными все изменения сделанных в базе данных, до тех пор пока начавшаяся транзакция не закончится, и не начнется новая транзакция.

    CREATE INDEX (СОЗДАТЬ ИНДЕКС)

    (*NONSTANDARD*) (НЕСТАНДАРТНО)

    Синтаксис

    CREATE INDEX < Index name >
    ON < table name > (< column list >);

    Эта команда создает эффективный маршрут с быстрым доступом для поиска строк содержащих обозначенные столбцы. Если UNIQUE - указана, таблица не сможет содержать дубликатов(двойников) значений в этих столбцах.

    CREATE SYNONYM (*NONSTANDARD*)
    (СОЗДАТЬ СИНОНИМ) (*НЕСТАНДАРТНО*)

    Синтаксис

    CREATE IPUBLICl SYNONYM < synonym > FOR
    < owner >.< table name >;

    Эта команда создает альтернативное(синоним) им для таблицы. Синоним принадлежит его создателю, а сама таблица, обычно другому пользователю. Используя синоним, его владелец может не ссылаться к таблице ее полным (включая им владельца) именем. Если PUBLIC - указан, синоним принадлежит каталогу SYSTEM и следовательно доступен всем пользователям.

    CREATE TABLE (СОЗДАТЬ ТАБЛИЦУ)

    Синтаксис

    CREATE TABLE < table name >
    ({< column name > < data type >[< size >]
    [< colconstralnt > . . .]
    [< defvalue >]} . , . . < tabconstraint > . , . .);

    Команда создает таблицу в базе данных. Эта таблица будет принадлежать ее создателю. Столбцы будут рассматриваться в поименном порядке. < data type > - определяет тип данных который будет содержать столбец. Стандарт < data type > описывается в Приложении B ; все прочие используемые типы данных < data type >, обсуждались в Приложении C . Значение размера < size > зависит от типа данных < data type >.
    < colconstraint > и < tabconstraint > налагают ограничения на значения ко торые могут быть введены в столбцу.
    < defvalue > определяет значение(по умолчанию) которое будет вставлено автоматически, если никакого другого значения не указано для этой строки. (См. Главу 17 для подробностей о самой команде CREATE TABLE иГлавы 18 И для подробностей об ограничениях и о < defvalue >).

    CREATE VIEW (СОЗДАТЬ ПРОСМОТР)

    Синтаксис

    CREATE VIEW < table name >
    AS < query >
    ;

    Просмотр обрабатывается как люба таблица в командах SQL. Когда команда ссылается на имя таблицы < table name >, запрос < query > выполняется, и его вывод соответствует содержанию таблицы указанной в этой команде.
    Некоторые просмотры могут модифицироваться, что означает, что команды модификации могут выполняться в этих просмотрах и передаваться в таблицу, на которую была ссылка в запросе < query >. Если указано предложение WITH CHECK OPTION, эта модификация должны также удовлетворять условию предиката < predicate > в запросе < query >.

    DECLARE CURSOR (ОБЪЯВИТЬ КУРСОР)

    Синтаксис

    EXEC SQL DECLARE < cursor name > CURSOR FOR
    < query >< SQL term >

    Эта команда связывает им курсора < cursor name >, с запросом < query >. Когда курсор открыт (см. OPEN CURSOR), запрос < query > выполняет ся, и его результат может быть выбран(командой FETCH) для вывода. Если курсор модифицируемый, таблица на которую ссылается запрос < query >, может получить изменение содержания с помощью операции модификации в курсоре (См. Главу 25 о модифицируемых курсорах).

    DELETE (УДАЛИТЬ)

    Синтаксис

    DELETE FROM < table name >
    { ; }
    | WHERE CURRENT OF < cursorname >< SQL term >

    Если предложение WHERE отсутствует, ВСЕ строки таблицы удаляются. Если предложение WHERE использует предикат < predicate >, строки, ко торые удовлетворяют условию этого предиката < predicate > удаляются. Если предложение WHERE имеет аргумент CURRENT OF(ТЕКУЩИЙ) в имени курсора < cursor name >, строка из таблицы < table name > на ко торую в данный момент имеется ссылка с помощью имени курсора < cursor name > будет удалена. Форма WHERE CURRENT может использоваться только во вложенном SQL, и только с модифицируемыми курсорами.

    EXEC SQL (ВЫПОЛНИТЬ SQL)

    Синтаксис

    EXEC SQL < embedded SQL command > < SQL term >

    EXEC SQL используется чтобы указывать начало всех команд SQL, вложенных в другой язык.

    FETCH (ВЫБОРКА)

    Синтаксис

    EXEC SQL FETCH < cursorname >
    INTO < host-varlable llst >< SQL term >

    FETCH принимает вывод из текущей строки запроса < query >, вставляет ее в список главных переменных < host-variable list >, и перемещает кур сор на следующую строку. Список < host-variable list > может включать переменную indicator в качестве целевой переменной (См. Главу 25 .)

    GRANT (ПЕРЕДАТЬ ПРАВА)

    Синтаксис (стандартный)

    GRANT ALL
    | {SELECT
    | INSERT
    | DELETE
    | UPDATE [(< column llst >)]
    | REFERENCES [(< column llst >)l } . , . .
    ON < table name > . , . .
    TO PUBLIC | < Authorization ID > . , . .
    ;

    Аргумент ALL(ВСЕ), с или без PRIVILEGES(ПРИВИЛЕГИИ), включает каждую привилегию в список привилегий. PUBLIC(ОБЩИЙ) включает всех существующих пользователей и всех созданных в будущем. Эта команда дает возможность передать права для выполнения действий в таблице с указанным именем. REFERENCES позволяет дать права чтобы использовать столбцы в списке столбцов < column list > как родительский ключ для внешнего ключа. Другие привилегии состоят из права выполнять команды для которых привилегии указаны их именами в таблице. UPDATE, подобен REFERENCES, и может накладывать ограничения на определенные столбцы. GRANT OPTION дает возможность передавать эти привилегии другим пользователям.

    Синтаксис (нестандартный)

    GRANT DBA
    | RESOURCE
    | CONNECT ... .
    TO < Authorization ID > . , . .
    | < privilege > . , . . }
    FROM { PUBLIC
    | < Authorization ID > . , . . };

    Привилегия < privelege > может быть любой из указанных в команде GRANT. Пользователь дающий REVOKE должен иметь те же привилегии, что и пользователь который давал GRANT. Предложение ON может быть использовано, если используется привилегия специального типа для особого объекта.

    ROLLBACK (WORK)
    (ОТКАТ) (ТРАНЗАКЦИИ)

    Синтаксис

    Команда отменяет все изменения в базе данных, сделанные в течение те- кущей транзакции. Она кроме того заканчивается текущую, и начинает новую транзакцию.

    SELECT (ВЫБОР)

    Синтаксис

    SELECT { IDISTINCT | ALL] < value expression > . , . . } / *
    FROM < table reference > . , . .

    . , . . ];

    Это предложение организует запрос и выводит значения из базы данных (см. Глава 3 - Глава 14). Применяются следующие правила:

  • Если ни ALL, ни DISTINCT - не указаны, принимается - ALL.
  • Выражение < value expression > состоит из < column spec >, агрегатной функции < aggregate funct >, нестандартной функции < nonstandard fu nction >, постоянной < constant >, или любой их комбинации с операторами в допустимых выражениях.
  • Ссылаемая таблица < table reference >, состоит из имени таблицы, включая префикс владельца если текущий пользователь не владелец, или синоним(нестандартно) для таблицы. Таблица может быть или базовой таблицей или просмотром. В принципе, псевдоним может указать, как- ой синонимом используется для таблицы только на врем текущей ко- манды. Имя таблицы или синоним должны отделяться от псевдонима одним или более разделительными знаками < separator >.
  • Если используется GROUP BY, все столбцы < column spec > используемые в предложении SELECT, должны будут использоваться как группа столбцов < grouping column >, если они не содержатся в агрегатной функции < aggregate funct >. Вся группа столбцов < grouping column > должна быть представлена среди выражений < value expressions > указанных в предложении SELECT. Для каждой отдельной комбинации значений группы столбцов < grouping column >, будет иметься одна и только одна строка вывода.
  • Если HAVING используется, предикат < predicate > применяется к каждой строке произведенной предложением GROUP BY, и те строки которые сделают этот предикат верным, будут выведены.
  • Если ORDER BY используется, вывод имеет определенную последовательность. Каждый идентификатор столбца < column identifer > ссылается к указанному < value expression > в предложении SELECT. Если это < value expression > является указанным столбцом < column spec >, < co lumn identifier > может быть таким же как < column spec >. Иначе < co lumn identifier > может быть положительным целым числом, указываю щим место где находится < value expression > в последовательности предложения SELECT. Вывод будет сформирован так чтобы помещать значения содержащиеся в < column identifier > в порядке возрастания, если DESC не указан. Имя идентификатора столбца < column identifier > стоящее первым в предложении ORDER BY будет предшествовать позже стоящим именам в определении последовательности вывода.

    Предложение SELECT оценивает каждую строку-кандидат таблицы в которой строки показаны независимо. Строка-кандидат определяется следующим образом:

  • Если только одна ссылаемая таблица < table reference > включена, каждая строка этой таблица в свою очередь является строкой-кандидатом.
  • Если более одной ссылаемой таблицы < table reference > включено, каждая строка каждой таблицы должна быть скомбинирована в свою очередь с каждой комбинацией строк из всех других таблиц. Каждая такая комбинация будет в свою очередь строкой-кандидатом.

    Каждая строка-кандидат производит значения, которые делают предикат < predicate > в предложении WHERE верным, неверным, или неизвестным. Если GROUP BY не используется, каждое < value expression > применяется в свою очередь для каждой строки-кандидата чье значение делает предикат верным, и результатом этой операции является вывод.
    Если GROUP BY используется, строки-кандидаты комбинируются, используя агрегатные функции. Если никакого предиката < predicate > не установлено, каждое выражение< value expression > применяется к каждой строке-кандидату или к каждой группе. Если указан DISTINCT, дубликаты(двойники) строк будут удалены из вывода.

    UNION (ОБЪЕДИНЕНИЕ)

    Синтаксис

    < query > {UNION < query > } . . . ;

    Вывод двух или более запросов < query > будет объединен. Каждый запрос < query > должен содержать один и тот же номер < value expression > в предложение SELECT и в таком порядке что 1.. n каждого, совместим по типу данных < data type > и размеру < size > с 1.. n всех других.

    UPDATE (МОДИФИКАЦИЯ)

    Синтаксис

    UPDATE < table name >
    SET { < column name > = < value expression > } . , . .
    {[ WHERE < predlcate >]; }
    | {
    < SQL term >]}

    UPDATE изменяет значения в каждом столбце с именем < column name > на соответствующее значение < value expression >. Если предложение WHERE использует предикат < predicate >, то только строки таблиц чьи текущие значения делают тот предикат < predicate > верным, могут быть изменены. Если WHERE использует предложение CURRENT OF, то значения в строке таблицы с именем < table name > находящиеся в курсоре с именем < cursor name > меняются. WHERE CURRENT OF пригодно для использования только во вложенном SQL, и только с модифицируемыми курсорами. При отсутствии предложения WHERE - все строки меняются.

    WHENEVER (ВСЯКИЙ РАЗ КАК)

    Синтаксис

    EXEC SQL WHENEVER < SQLcond > < actlon > < SQL term >
    < SQLcond > :: = SQLERROR | NOT FOUND | SQLWARNING
    (последнее - нестандартное)
    < action > :: = CONTINUE | GOTO < target > | GOTO < target >
    < target > :: = зависит от главного языка

  • Как узнать количество моделей ПК, выпускаемых тем или иным поставщиком? Как определить среднее значение цены на компьютеры, имеющие одинаковые технические характеристики? На эти и многие другие вопросы, связанные с некоторой статистической информацией, можно получить ответы при помощи итоговых (агрегатных) функций . Стандартом предусмотрены следующие агрегатные функции:

    Все эти функции возвращают единственное значение. При этом функции COUNT, MIN и MAX применимы к любым типам данных, в то время как SUM и AVG используются только для числовых полей. Разница между функцией COUNT(*) и COUNT() состоит в том, что вторая при подсчете не учитывает NULL-значения.

    Пример. Найти минимальную и максимальную цену на персональные компьютеры:

    Пример. Найти имеющееся в наличии количество компьютеров, выпущенных производителем А:

    Пример. Если же нас интересует количество различных моделей, выпускаемых производителем А, то запрос можно сформулировать следующим образом (пользуясь тем фактом, что в таблице Product каждая модель записывается один раз):

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

    Для того, чтобы при получении статистических показателей использовались только уникальные значения, при аргументе агрегатных функций можно использовать параметр DISTINCT . Другой параметр ALL используется по умолчанию и предполагает подсчет всех возвращаемых значений в столбце. Оператор,

    Если же нам требуется получить количество моделей ПК, производимых каждым производителем, то потребуется использовать предложение GROUP BY , синтаксически следующего после предложения WHERE .

    Предложение GROUP BY Предложение GROUP BY используется для определения групп выходных строк, к которым могут применяться агрегатные функции (COUNT, MIN, MAX, AVG и SUM) . Если это предложение отсутствует, и используются агрегатные функции, то все столбцы с именами, упомянутыми в SELECT , должны быть включены в агрегатные функции , и эти функции будут применяться ко всему набору строк, которые удовлетворяют предикату запроса. В противном случае все столбцы списка SELECT, не вошедшие в агрегатные функции, должны быть указаны в предложении GROUP BY . В результате чего все выходные строки запроса разбиваются на группы, характеризуемые одинаковыми комбинациями значений в этих столбцах. После этого к каждой группе будут применены агрегатные функции. Следует иметь в виду, что для GROUP BY все значения NULL трактуются как равные, т.е. при группировке по полю, содержащему NULL-значения, все такие строки попадут в одну группу.
    Если при наличии предложения GROUP BY , в предложении SELECT отсутствуют агрегатные функции , то запрос просто вернет по одной строке из каждой группы. Эту возможность, наряду с ключевым словом DISTINCT, можно использовать для исключения дубликатов строк в результирующем наборе.
    Рассмотрим простой пример:
    SELECT model, COUNT(model) AS Qty_model, AVG(price) AS Avg_price
    FROM PC
    GROUP BY model;

    В этом запросе для каждой модели ПК определяется их количество и средняя стоимость. Все строки с одинаковыми значениями model (номер модели) образуют группу, и на выходе SELECT вычисляются количество значений и средние значения цены для каждой группы. Результатом выполнения запроса будет следующая таблица:
    model Qty_model Avg_price
    1121 3 850.0
    1232 4 425.0
    1233 3 843.33333333333337
    1260 1 350.0

    Если бы в SELECT присутствовал столбец с датой, то можно было бы вычислять эти показатели для каждой конкретной даты. Для этого нужно добавить дату в качестве группирующего столбца, и тогда агрегатные функции вычислялись бы для каждой комбинации значений (модель−дата).

    Существует несколько определенных правил выполнения агрегатных функций :

    • Если в результате выполнения запроса не получено ни одной строки (или не одной строки для данной группы), то исходные данные для вычисления любой из агрегатных функций отсутствуют. В этом случае результатом выполнения функций COUNT будет нуль, а результатом всех других функций - NULL.
    • Аргумент агрегатной функции не может сам содержать агрегатные функции (функция от функции). Т.е. в одном запросе нельзя, скажем, получить максимум средних значений.
    • Результат выполнения функции COUNT есть целое число (INTEGER). Другие агрегатные функции наследуют типы данных обрабатываемых значений.
    • Если при выполнении функции SUM был получен результат, превышающий максимальное значение используемого типа данных, возникает ошибка .

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

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

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

    Для извлечения данных из базы данных используется язык SQL. SQL - это язык программирования, который очень напоминает английский, но предназначен для программ управления базами данных. SQL используется в каждом запросе в Access.

    Понимание принципов работы SQL помогает создавать более точные запросы и упрощает исправление запросов, которые возвращают неправильные результаты.

    Это статья из цикла статей о языке SQL для Access. В ней описаны основы использования SQL для выборки данных и приведены примеры синтаксиса SQL.

    В этой статье Что такое SQL?

    SQL - это язык программирования, предназначенный для работы с наборами фактов и отношениями между ними. В программах управления реляционными базами данных, таких как Microsoft Office Access, язык SQL используется для работы с данными. В отличие от многих языков программирования, SQL удобочитаем и понятен даже новичкам. Как и многие языки программирования, SQL является международным стандартом, признанным такими комитетами по стандартизации, как ISO и ANSI .

    На языке SQL описываются наборы данных, помогающие получать ответы на вопросы. При использовании SQL необходимо применять правильный синтаксис. Синтаксис - это набор правил, позволяющих правильно сочетать элементы языка. Синтаксис SQL основан на синтаксисе английского языка и имеет много общих элементов с синтаксисом языка Visual Basic для приложений (VBA).

    Например, простая инструкция SQL, извлекающая список фамилий контактов с именем Mary, может выглядеть следующим образом:

    SELECT Last_Name
    FROM Contacts
    WHERE First_Name = "Mary";

    Примечание: Язык SQL используется не только для выполнения операций над данными, но еще и для создания и изменения структуры объектов базы данных, например таблиц. Та часть SQL, которая используется для создания и изменения объектов базы данных, называется языком описания данных DDL. Язык DDL не рассматривается в этой статье. Дополнительные сведения см. в статье Создание и изменение таблиц или индексов с помощью запроса определения данных .

    Инструкции SELECT

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

      таблицы, в которых содержатся данные;

      связи между данными из разных источников;

      поля или вычисления, на основе которых отбираются данные;

      условия отбора, которым должны соответствовать данные, включаемые в результат запроса;

      необходимость и способ сортировки.

    Предложения SQL

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

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

    Описание

    Обязательное

    Определяет поля, которые содержат нужные данные.

    Определяет таблицы, которые содержат поля, указанные в предложении SELECT.

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

    Определяет порядок сортировки результатов.

    В инструкции SQL, которая содержит статистические функции, определяет поля, для которых в предложении SELECT не вычисляется сводное значение.

    Только при наличии таких полей

    В инструкции SQL, которая содержит статистические функции, определяет условия, применяемые к полям, для которых в предложении SELECT вычисляется сводное значение.

    Термины SQL

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

    Термин SQL

    Сопоставимая часть речи

    Определение

    Пример

    идентификатор

    существительное

    Имя, используемое для идентификации объекта базы данных, например имя поля.

    Клиенты.[НомерТелефона]

    оператор

    глагол или наречие

    Ключевое слово, которое представляет действие или изменяет его.

    константа

    существительное

    Значение, которое не изменяется, например число или NULL.

    выражение

    прилагательное

    Сочетание идентификаторов, операторов, констант и функций, предназначенное для вычисления одного значения.

    >= Товары.[Цена]

    Основные предложения SQL: SELECT, FROM и WHERE

    Общий формат инструкций SQL:

    SELECT field_1
    FROM table_1
    WHERE criterion_1
    ;

    Примечания:

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

      Каждая инструкция SELECT заканчивается точкой с запятой (;). Точка с запятой может стоять как в конце последнего предложения, так и на отдельной строке в конце инструкции SQL.

    Пример в Access

    В приведенном ниже примере показано, как в Access может выглядеть инструкция SQL для простого запроса на выборку.

    1. Предложение SELECT

    2. Предложение FROM

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

    Разберем пример по предложениям, чтобы понять, как работает синтаксис SQL.

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

    SELECT , Company

    Это предложение SELECT. Оно содержит оператор (SELECT), за которым следуют два идентификатора ("[Адрес электронной почты]" и "Компания").

    Если идентификатор содержит пробелы или специальные знаки (например, "Адрес электронной почты"), он должен быть заключен в прямоугольные скобки.

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

    В инструкции SELECT предложение SELECT всегда стоит перед предложением FROM.

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

    FROM Contacts

    Это предложение FROM. Оно содержит оператор (FROM), за которым следует идентификатор (Контакты).

    В предложении FROM не указываются поля для выборки.

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

    WHERE City="Seattle"

    Это предложение WHERE. Оно содержит оператор (WHERE), за которым следует выражение (Город="Ростов").

    С помощью предложений SELECT, FROM и WHERE можно выполнять множество действий. Дополнительные сведения об использовании этих предложений см. в следующих статьях:

    Сортировка результатов: ORDER BY

    Как и в Microsoft Excel, в Access можно сортировать результаты запроса в таблице. Используя предложение ORDER BY, вы также можете указать способ сортировки результатов при выполнении запроса. Если используется предложение ORDER BY, оно должно находиться в конце инструкции SQL.

    Предложение ORDER BY содержит список полей, для которых нужно выполнить сортировку, в том же порядке, в котором будут применена сортировка.

    Предположим, например, что результаты сначала нужно отсортировать по полю "Компания" в порядке убывания, а затем, если присутствуют записи с одинаковым значением поля "Компания", - отсортировать их по полю "Адрес электронной почты" в порядке возрастания. Предложение ORDER BY будет выглядеть следующим образом:

    ORDER BY Company DESC,

    Примечание: По умолчанию Access сортирует значения по возрастанию (от А до Я, от наименьшего к наибольшему). Чтобы вместо этого выполнить сортировку значений по убыванию, необходимо указать ключевое слово DESC.

    Дополнительные сведения о предложении ORDER BY см. в статье Предложение ORDER BY .

    Работа со сводными данными: предложения GROUP BY и HAVING

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

    Возможность использования той или иной агрегатной функции зависит от типа данных в поле и нужного выражения. Дополнительные сведения о доступных агрегатных функциях см. в статье Статистические функции SQL .

    Задание полей, которые не используются в агрегатной функции: предложение GROUP BY

    При использовании агрегатных функций обычно необходимо создать предложение GROUP BY. В предложении GROUP BY указываются все поля, к которым не применяется агрегатная функция. Если агрегатные функции применяются ко всем полям в запросе, предложение GROUP BY создавать не нужно.

    Предложение GROUP BY должно следовать сразу же за предложением WHERE или FROM, если предложение WHERE отсутствует. В предложении GROUP BY поля указываются в том же порядке, что и в предложении SELECT.

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

    GROUP BY Company

    Дополнительные сведения о предложении GROUP BY см. в статье Предложение GROUP BY .

    Ограничение агрегированных значений с помощью условий группировки: предложение HAVING

    Если необходимо указать условия для ограничения результатов, но поле, к которому их требуется применить, используется в агрегированной функции, предложение WHERE использовать нельзя. Вместо него следует использовать предложение HAVING. Предложение HAVING работает так же, как и WHERE, но используется для агрегированных данных.

    Предположим, например, что к первому полю в предложении SELECT применяется функция AVG (которая вычисляет среднее значение):

    SELECT COUNT(), Company

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

    HAVING COUNT()>1

    Примечание: Запрос может включать и предложение WHERE, и предложение HAVING, при этом условия отбора для полей, которые не используются в статистических функциях, указываются в предложении WHERE, а условия для полей, которые используются в статистических функциях, - в предложении HAVING.

    Дополнительные сведения о предложении HAVING см. в статье Предложение HAVING .

    Объединение результатов запроса: оператор UNION

    Оператор UNION используется для одновременного просмотра всех данных, возвращаемых несколькими сходными запросами на выборку, в виде объединенного набора.

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

    Примечание: В запросах на объединение числовой и текстовый типы данных являются совместимыми.

    Используя оператор UNION, можно указать, должны ли в результаты запроса включаться повторяющиеся строки, если таковые имеются. Для этого следует использовать ключевое слово ALL.

    Запрос на объединение двух инструкций SELECT имеет следующий базовый синтаксис:

    SELECT field_1
    FROM table_1
    UNION
    SELECT field_a
    FROM table_a
    ;

    Предположим, например, что имеется две таблицы, которые называются "Товары" и "Услуги". Обе таблицы содержат поля с названием товара или услуги, ценой и сведениями о гарантии, а также поле, в котором указывается эксклюзивность предлагаемого товара или услуги. Несмотря на то, что в таблицах "Продукты" и "Услуги" предусмотрены разные типы гарантий, основная информация одна и та же (предоставляется ли на отдельные продукты или услуги гарантия качества). Для объединения четырех полей из двух таблиц можно использовать следующий запрос на объединение:

    SELECT name, price, warranty_available, exclusive_offer
    FROM Products
    UNION ALL
    SELECT name, price, guarantee_available, exclusive_offer
    FROM Services
    ;

    Дополнительные сведения об объединении инструкций SELECT с помощью оператора UNION см. в статье

    SQL (ˈɛsˈkjuˈɛl; англ. structured query language - «язык структурированных запросов») - декларативный язык программирования, применяемый для создания, модификации и управления данными в реляционной базе данных.

    Соответствие стандартам SQL разных БД:

    SQL (Structured Query Language - язык структурированных запросов). SQL является, прежде всего, информационно-логическим языком, предназначенным для описания хранимых данных, для извлечения хранимых данных и для модификации данных.

    SQL не является языком программирования. В связи с усложнением язык SQL стал более языком прикладного программирования, а пользователи получили возможность использовать визуальные построители запросов.

    SQL является регистронезависимым языком. Cтроки в SQL берутся в одинарные кавычки.

    Язык SQL представляет собой совокупность операторов. Операторы SQL делятся на:

      операторы определения данных (Data Definition Language, DDL) - язык описания схемы в ANSI, состоит из команд, которые создают объекты (таблицы, индексы, просмотры, и так далее) в базе данных (CREATE, DROP, ALTER и др.).

      операторы манипуляции данными (Data Manipulation Language, DML) - это набор команд, которые определяют, какие значения представлены в таблицах в любой момент времени (INSERT, DELETE, SELECT, UPDATE и др.).

      операторы определения доступа к данным (Data Control Language, DCL) - состоит из средств, которые определяют, разрешить ли пользователю выполнять определенные действия или нет (GRANT/REVOKE , LOCK/UNLOCK).

      операторы управления транзакциями (Transaction Control Language, TCL)

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

    SELECT раздел JOIN

      Простой JOIN (=пересечение JOIN =INNER JOIN) - означает показывать только общие записи обоих таблиц. Каким образом записи считаются общими определяется полями в join- выражении. Например следующая запись: FROM t1 JOIN t2 ON t1. id = t2. id

      означает что будут показаны записи с одинаковыми id, существующие в обоих таблицах.

      LEFT JOIN (или LEFT OUTER JOIN) означает показывать все записи из левой таблицы (той, которая идет первой в join- выражении) независимо от наличия соответствующих записей в правой таблице. Если записей нет в правой таблицы устанавливается пустое значение NULL.

      RIGHT JOIN (или RIGHT OUTER JOIN) действует в противоположность LEFT JOIN - показывает все записи из правой (второй) таблицы и только совпавшие из левой (первой) таблицы.

      Другие виды JOIN объединений: MINUS - вычитание; FULL JOIN - полное объединение; CROSS JOIN - “Каждый с каждым” или операция декартова произведения.

    SELECT JOIN SUBSTRING INSERT INTO users_auth VALUES (default, "root" , MD5("root"));

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

    INSERT IGNORE INTO prices VALUES(DEFAULT, 1, 1111, "Fr", 50, 50, 1, 1)

    Команда REPLACE отличается от INSERT только тем, что если в таблице имеется запись с таким же значением в индексированном поле (unique index), как у новой записи, то старая запись удаляется перед добавлением новой.

    UPDATE < tablename> SET { | } .,. .< COLUMN name> = < VALUE expresslon> [ WHERE < predlcate> | WHERE CURRENT OF < cursor name> (* только для вложения* ) ] ; UPDATE peers SET zone= "voip" ; # обновить все строки в столбце zone таблицы peers UPDATE stat SET whp= "13x13x13" WHERE id = 1 ; UPDATE countries SET nm_ukr= ( SELECT del_countries. ukrainian FROM del_countries WHERE countries. nm_en= del_countries. english ) ;

    WordPress использование, настройка : в таблице wp_posts удалить все вхождения строки

    UPDATE wp_posts SET post_content = REPLACE (post_content, "" , "" ) ;

    DELETE FROM

    [ WHERE | WHERE CURRENT OF (*только для вложения*) ];

    DELETE FROM Peers; // удалит все содержимое таблицы Peers. DELETE FROM FinR where day Like "20120415%"; // DELETE FROM prices WHERE ratesheet_id NOT IN (SELECT id FROM ratesheets);

    ALTER

      Изменение значения по умолчанию для колонки . Чтобы установить новое значение по умолчанию для колонки, используйте команду вида: ALTER TABLE products ALTER COLUMN price SET DEFAULT 7.77 ; OR ALTER TABLE nases ALTER COLUMN zone SET DEFAULT "voip" ;

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

      ALTER TABLE products ALTER COLUMN price DROP DEFAULT ;

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

      Функция как значение по умолчанию для колонки . В этом случае столбец timetracking имеет тип данных timestamp и значит для нее значением по умолчанию можно задать встроенную функцию now() т.е. при добавлении новой строки в столбец будет записана текущая дата и время ALTER TABLE timetracking ALTER COLUMN date_wd SET DEFAULT now();

      Добавление ограничения . Чтобы добавить какое-либо ограничение, используется табличный синтаксис определения этого ограничения. Например: ALTER TABLE products ADD CHECK (name ""); ALTER TABLE products ADD CONSTRAINT some_name UNIQUE (product_no); ALTER TABLE products ADD FOREIGN KEY (product_group_id) REFERENCES product_groups;

      Чтобы добавить ограничение не-null, которое нельзя записать как ограничение на таблицу, используйте синтаксис:

      ALTER TABLE products ALTER COLUMN product_no SET NOT NULL;

      Указанное ограничение будет задействовано немедленно, так что данные в таблице перед добавлением ограничения должны ему удовлетворять.

    Функции агрегирования

    В стандартном SQL существует 5 агрегатных функций:

      COUNT - функция возвращает количество строк, которые соответствует определенным критериям.,

      SUM - возвращает сумму (общую) значений в определённом столбце. Строки столбцов со значениями NULL игнорируются функцией SUM.

      AVG - среднее значение в столбце,

    Функции агрегирования используются как имена полей в предложении запроса SELECT, но с одним исключением: имена полей применяются как аргументы. Функции SUM и AVG могут работать только с цифровыми полями. Функции COUNT, MAX, MIN работают как с цифровыми так и с символьными полями. При применении к символьным полям функции MAX и MIN могут работают с ASCII эквивалентами символов.

    SELECT Count(Books.ID) AS [Количество Книг] FROM Books;

    Использование CROUP BY позволяет применять агрегатные функции к группам записей.

    SELECT Count(Books.ID) AS [Количество Книг] FROM Books GROUP BY [Писатель];

    Представления (VIEW)

    Представление (VIEW) - объект данных который не содержит никаких данных его владельца. Это - тип таблицы, чье содержание выбирается из других таблиц с помощью выполнения запроса.

    Базовые таблицы - это таблицы, которые содержат данные. Однако имеется другой вид таблиц: - представления (VIEW). Представления - это таблицы чье содержание выбирается или получается из других таблиц. Они работают в запросах и операторах DML точно также как и основные таблицы, но не содержат никаких собственных данных. Представления - подобны окнам, через которые вы просматриваете информацию, которая фактически хранится в базовой таблице.

      Команда CREATE VIEW . Представление создается командой CREATE VIEW. Она состоит из слов CREATE VIEW (СОЗДАТЬ ПРЕДСТАВЛЕНИЕ), имени представления которое нужно создать, слова AS (КАК), и далее запроса. Создадим представление Londonstaff: CREATE VIEW Londonstaff AS SELECT * FROM Salespeople WHERE city = "London";

      Это представление используется точно так же как и любая другая таблица. Она может быть запрошена, модифицирована, вставлена в, удалена из, и соединена с, другими таблицами и представлениями. Запрос представления.