Access SQL. Основные понятия, лексика и синтаксис
Для извлечения данных из базы данных используется язык SQL. SQL — это язык программирования, который очень напоминает английский, но предназначен для программ управления базами данных. SQL используется в каждом запросе в Access.
Понимание принципов работы SQL помогает создавать более точные запросы и упрощает исправление запросов, которые возвращают неправильные результаты.
Это статья из цикла статей о языке SQL для Access. В ней описаны основы использования SQL для выборки данных и приведены примеры синтаксиса SQL.
В этой статье
- Что такое SQL?
- Основные предложения SQL: SELECT, FROM и WHERE
- Сортировка результатов: предложение ORDER BY
- Работа со сводными данными: предложения GROUP BY и HAVING
- Объединение результатов запроса: оператор UNION
Что такое 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
Чтобы описать набор данных с помощью SQL, необходимо написать инструкцию SELECT. Инструкция SELECT содержит полное описание набора данных, которые необходимо получить из базы данных. К ним относятся файлы со следующими элементами:
- таблицы, в которых содержатся данные;
- связи между данными из разных источников;
- поля или вычисления, на основе которых отбираются данные;
- условия отбора, которым должны соответствовать данные, включаемые в результат запроса;
- необходимость и способ сортировки.
Предложения SQL
Инструкция SQL состоит из нескольких частей, называемых предложениями. Каждое предложение в инструкции SQL имеет свое назначение. Некоторые предложения являются обязательными. В приведенной ниже таблице указаны предложения SQL, используемые чаще всего.
Предложение SQL
Обязательное
Определяет поля, которые содержат нужные данные.
Определяет таблицы, которые содержат поля, указанные в предложении SELECT.
Определяет условия отбора полей, которым должны соответствовать все записи, включаемые в результаты.
Определяет порядок сортировки результатов.
В инструкции SQL, которая содержит статистические функции, определяет поля, для которых в предложении SELECT не вычисляется сводное значение.
Только при наличии таких полей
В инструкции SQL, которая содержит статистические функции, определяет условия, применяемые к полям, для которых в предложении SELECT вычисляется сводное значение.
Термины 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 следует читать так: «Выбрать данные из полей «Адрес электронной почты» и «Компания» таблицы «Контакты», а именно те записи, в которых поле «Город» имеет значение «Ростов».
Разберем пример по предложениям, чтобы понять, как работает синтаксис SQL.
Предложение SELECT
SELECT [E-mail Address], Company
Это предложение SELECT. Оно содержит оператор (SELECT), за которым следуют два идентификатора («[Адрес электронной почты]» и «Компания»).
Если идентификатор содержит пробелы или специальные знаки (например, «Адрес электронной почты»), он должен быть заключен в прямоугольные скобки.
В предложении SELECT не нужно указывать таблицы, в которых содержатся поля, и нельзя задать условия отбора, которым должны соответствовать данные, включаемые в результаты.
В инструкции SELECT предложение SELECT всегда стоит перед предложением FROM.
Предложение FROM
Это предложение FROM. Оно содержит оператор (FROM), за которым следует идентификатор (Контакты).
В предложении FROM не указываются поля для выборки.
Предложение WHERE
Это предложение WHERE. Оно содержит оператор (WHERE), за которым следует выражение (Город=»Ростов»).
Примечание: В отличие от предложений SELECT и FROM, предложение WHERE является необязательным элементом инструкции SELECT.
С помощью предложений SELECT, FROM и WHERE можно выполнять множество действий. Дополнительные сведения об использовании этих предложений см. в следующих статьях:
- Access SQL. Предложение SELECT
- Access SQL. Предложение FROM
- Access SQL. Предложение WHERE
Сортировка результатов: ORDER BY
Как и в Microsoft Excel, в Access можно сортировать результаты запроса в таблице. Используя предложение ORDER BY, вы также можете указать способ сортировки результатов при выполнении запроса. Если используется предложение ORDER BY, оно должно находиться в конце инструкции SQL.
Предложение ORDER BY содержит список полей, для которых нужно выполнить сортировку, в том же порядке, в котором будут применена сортировка.
Предположим, например, что результаты сначала нужно отсортировать по полю «Компания» в порядке убывания, а затем, если присутствуют записи с одинаковым значением поля «Компания», — отсортировать их по полю «Адрес электронной почты» в порядке возрастания. Предложение ORDER BY будет выглядеть следующим образом:
ORDER BY Company DESC, [E-mail Address]
Примечание: По умолчанию Access сортирует значения по возрастанию (от А до Я, от наименьшего к наибольшему). Чтобы вместо этого выполнить сортировку значений по убыванию, необходимо указать ключевое слово DESC.
Дополнительные сведения о предложении ORDER BY см. в статье Предложение ORDER BY.
Работа со сводными данными: предложения GROUP BY и HAVING
Иногда возникает необходимость работы со сводными данными, такими как итоговые продажи за месяц или самые дорогие товары на складе. Для этого в предложении SELECT к полю применяется агрегатная функция. Например, если в результате выполнения запроса нужно получить количество адресов электронной почты каждой компании, предложение SELECT может выглядеть следующим образом:
SELECT COUNT([E-mail Address]), Company
Возможность использования той или иной агрегатной функции зависит от типа данных в поле и нужного выражения. Дополнительные сведения о доступных агрегатных функциях см. в статье Статистические функции 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([E-mail Address]), Company
Если вы хотите ограничить результаты запроса на основе значения функции COUNT, к этому полю нельзя применить условие отбора в предложении WHERE. Вместо него условие следует поместить в предложение HAVING. Например, если нужно, чтобы запрос возвращал строки только в том случае, если у компании есть несколько адресов электронной почты, можно использовать следующее предложение HAVING:
HAVING COUNT([E-mail Address])>1
Примечание: Запрос может включать и предложение WHERE, и предложение HAVING, при этом условия отбора для полей, которые не используются в статистических функциях, указываются в предложении WHERE, а условия для полей, которые используются в статистических функциях, — в предложении HAVING.
Дополнительные сведения о предложении HAVING см. в статье Предложение HAVING.
Объединение результатов запроса: оператор UNION
Оператор UNION используется для одновременного просмотра всех данных, возвращаемых несколькими сходными запросами на выборку, в виде объединенного набора.
Оператор UNION позволяет объединить две инструкции SELECT в одну. Объединяемые инструкции SELECT должны иметь одинаковое число и порядок выходных полей с такими же или совместимыми типами данных. При выполнении запроса данные из каждого набора соответствующих полей объединяются в одно выходное поле, поэтому выходные данные запроса имеют столько же полей, сколько и каждая инструкция SELECT по отдельности.
Примечание: В запросах на объединение числовой и текстовый типы данных являются совместимыми.
Используя оператор UNION, можно указать, должны ли в результаты запроса включаться повторяющиеся строки, если таковые имеются. Для этого следует использовать ключевое слово ALL.
Запрос на объединение двух инструкций SELECT имеет следующий базовый синтаксис:
SELECT field_1
FROM table_1
UNION [ALL]
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, которые должен знать каждый программист
Рассмотрим основные команды SQL, включая агрегатные функции и вложенные подзапросы, на примере работы с MySQL.
Основные команды SQL не ограничиваются стандартными CREATE , UPDATE и DELETE . Данная статья будет полезна тем, кто хочет освежить свои знания по SQL перед собеседованием на работу.
Обратите внимание, что в примерах используется MySQL, поэтому в конце каждого оператора ставится точка с запятой.
Примечание Вы читаете улучшенную версию некогда выпущенной нами статьи.
Настройка базы данных
Перед началом создайте БД с тестовыми данными. Для работы вам понадобится скачать два файла: DLL.sql и InsertStatements.sql. После установите MySQL, откройте терминал и войдите в консоль MySQL с помощью команды:
mysql -u root -p
Затем введите пароль и выполните следующую команду. Назовём базу данных «university»:
CREATE DATABASE university; USE university; SOURCE ; SOURCE ;
SHOW DATABASES
SQL-команда, которая отвечает за просмотр доступных баз данных.
CREATE DATABASE
Команда для создания новой базы данных.
USE
С помощью этой SQL-команды USE выбирается база данных, необходимая для дальнейшей работы с ней.
SOURCE
А SOURCE позволит выполнить сразу несколько SQL-команд, содержащихся в файле с расширением .sql.
DROP DATABASE
Стандартная SQL-команда для удаления целой базы данных.
SHOW TABLES
С помощью этой несложной команды можно увидеть все таблицы, которые доступны в базе данных.
CREATE TABLE
SQL-команда для создания новой таблицы:
CREATE TABLE ( , , PRIMARY KEY(), FOREIGN KEY() REFERENCES () );
Ограничения целостности при использовании CREATE TABLE
Может понадобиться создать ограничения для определённых столбцов в таблице. При создании таблицы можно задать следующие ограничения:
- ячейка таблицы не может иметь значение NULL ;
- первичный ключ — PRIMARY KEY(col_name1, col_name2, …) ;
- внешний ключ — FOREIGN KEY(col_namex1, …, col_namexn) REFERENCES table_name(col_namex1, …, col_namexn) .
Можно задать больше одного первичного ключа. В этом случае получится составной первичный ключ.
Пример
Создайте таблицу «instructor»:
CREATE TABLE instructor ( ID CHAR(5), name VARCHAR(20) NOT NULL, dept_name VARCHAR(20), salary NUMERIC(8,2), PRIMARY KEY (ID), FOREIGN KEY (dept_name) REFERENCES department(dept_name) );
DESCRIBE
С помощью DESCRIBE можно просмотреть различные сведения (тип значений, является ключом или нет) о столбцах таблицы.
INSERT
Команда INSERT INTO в SQL отвечает за добавление данных в таблицу:
INSERT INTO (, , , …) VALUES (, , , …);
При добавлении данных в каждый столбец таблицы не требуется указывать названия столбцов.
INSERT INTO VALUES (, , , …);
UPDATE
SQL-команда для обновления данных таблицы:
UPDATE SET = , = , . WHERE ;
DELETE
SQL-команда DELETE FROM используется для удаления данных из таблицы.
DROP TABLE
А так можно удалить всю таблицу целиком.
SELECT
Далее мы рассмотрим основные команды SQL, которые позволяют работать непосредственно с данными. К одной из таких SQL-команд относится SELECT для получения данных из выбранной таблицы:
SELECT , , … FROM ;
Следующей командой можно вывести все данные из таблицы:
SELECT * FROM ;
SELECT DISTINCT
В столбцах таблицы могут содержаться повторяющиеся данные. Используйте SELECT DISTINCT для получения только неповторяющихся данных.
SELECT DISTINCT , , … FROM ;
WHERE
Можно использовать ключевое слово WHERE в SELECT для указания условий в запросе:
SELECT , , … FROM WHERE ;
В запросе можно задавать следующие условия:
- сравнение текста;
- сравнение численных значений;
- логические операции AND (и), OR (или) и NOT (отрицание).
Пример
Попробуйте выполнить следующие команды. Обратите внимание на условия, заданные в WHERE :
SELECT * FROM course WHERE dept_name=’Comp. Sci.’; SELECT * FROM course WHERE credits>3; SELECT * FROM course WHERE dept_name='Comp. Sci.' AND credits>3;
SQL-команды: пример вывода с WHERE
GROUP BY
Оператор GROUP BY часто используется с агрегатными функциями, такими как COUNT , MAX , MIN , SUM и AVG , для группировки выходных значений.
SELECT , , … FROM GROUP BY ;
Пример
Выведем количество курсов для каждого факультета:
SELECT COUNT(course_id), dept_name FROM course GROUP BY dept_name;
SQL-команды: пример вывода с GROUP BY
HAVING
Ключевое слово HAVING было добавлено в SQL по той причине, что WHERE не может использоваться для работы с агрегатными функциями.
SELECT , , . FROM GROUP BY HAVING
Пример
Выведем список факультетов, у которых более одного курса:
SELECT COUNT(course_id), dept_name FROM course GROUP BY dept_name HAVING COUNT(course_id)>1;
SQL-команды: пример вывода с HAVING
ORDER BY
ORDER BY используется для сортировки результатов запроса по убыванию или возрастанию. ORDER BY отсортирует по возрастанию, если не будет указан способ сортировки ASC или DESC .
SELECT , , … FROM ORDER BY , , … ASC|DESC;
Пример
Выведем список курсов по возрастанию и убыванию количества кредитов:
SELECT * FROM course ORDER BY credits; SELECT * FROM course ORDER BY credits DESC;
BETWEEN
BETWEEN используется для выбора значений данных из определённого промежутка. Могут быть использованы числовые и текстовые значения, а также даты.
SELECT , , … FROM WHERE BETWEEN AND ;
Пример
Выведем список инструкторов, чья зарплата больше 50 000, но меньше 100 000:
SELECT * FROM instructor WHERE salary BETWEEN 50000 AND 100000;
LIKE
Оператор LIKE используется в WHERE , чтобы задать шаблон поиска похожего значения.
Есть два свободных оператора, которые используются в LIKE :
- % (ни одного, один или несколько символов);
- _ (один символ).
SELECT , , … FROM WHERE LIKE ;
Пример
Выведем список курсов, в имени которых содержится «to» , и список курсов, название которых начинается с «CS-» :
SELECT * FROM course WHERE title LIKE ‘%to%’; SELECT * FROM course WHERE course_id LIKE 'CS-___';
SQL-команды: пример вывода с LIKE
IN
С помощью IN можно указать несколько значений для оператора WHERE :
SELECT , , … FROM WHERE IN (, , …);
Пример
Выведем список студентов с направлений Comp. Sci., Physics и Elec. Eng.:
SELECT * FROM student WHERE dept_name IN (‘Comp. Sci.’, ‘Physics’, ‘Elec. Eng.’);
JOIN
JOIN используется для связи двух или более таблиц с помощью общих атрибутов внутри них. На изображении ниже показаны различные способы объединения в SQL. Обратите внимание на разницу между левым внешним объединением и правым внешним объединением:
SQL-команды: схема использования JOIN
SELECT , , … FROM JOIN ON = ;
Пример
Выведем список всех обязательных курсов и детали о них:
SELECT prereq.course_id, title, dept_name, credits, prereq_id FROM prereq LEFT OUTER JOIN course ON prereq.course_id=course.course_id;
SQL-команды: пример вывода с JOIN
VIEW
VIEW — это виртуальная таблица SQL, созданная в результате выполнения выражения. Она содержит строки и столбцы и очень похожа на обычную SQL-таблицу. VIEW всегда показывает самую свежую информацию из базы данных.
Создание
CREATE VIEW AS SELECT , , … FROM WHERE ;
Удаление
DROP VIEW ;
Агрегатные функции
Это не совсем основные команды SQL, однако знать их тоже желательно. Агрегатные функции используются для получения совокупного результата, относящегося к рассматриваемым данным:
- COUNT(col_name) — возвращает количество строк;
- SUM(col_name) — возвращает сумму значений в данном столбце;
- AVG(col_name) — возвращает среднее значение данного столбца;
- MIN(col_name) — возвращает наименьшее значение данного столбца;
- MAX(col_name) — возвращает наибольшее значение данного столбца.
Вложенные подзапросы
Вложенные подзапросы — это SQL-запросы, которые включают выражения SELECT , FROM и WHERE , вложенные в другой запрос.
Пример
Найдём курсы, которые преподавались осенью 2009 и весной 2010 годов:
SELECT DISTINCT course_id FROM section WHERE semester = ‘Fall’ AND year= 2009 AND course_id IN ( SELECT course_id FROM section WHERE semester = ‘Spring’ AND year= 2010 );
Оператор SQL VIEW
Оператор SQL VIEW — объект базы данных, представляющий собой представление. Представление — это виртуальная таблица, внутреннее содержимое которой определяется исходя из параметров запроса. Представления широко используются когда необходимо представить структуру базы данных в удобном для восприятия человеком виде, а так же в соображениях безопасности, предоставляя пользователям возможность обращаться к данным, но не разрешая им доступ к исходным таблицам.
Для создания представления используется оператор SQL CREATE и синтаксис выглядит следующим образом:
CREATE VIEW view_name AS SELECT column_name FROM table_name WHERE condition
Примеры оператора SQL VIEW. Имеется следующая таблица Planets :
| ID | PlanetName | Radius | SunSeason | OpeningYear | HavingRings | Opener |
| 1 | Mars | 3396 | 687 | 1659 | No | Christiaan Huygens |
| 2 | Saturn | 60268 | 10759.22 | — | Yes | — |
| 3 | Neptune | 24764 | 60190 | 1846 | Yes | John Couch Adams |
| 4 | Mercury | 2439 | 115.88 | 1631 | No | Nicolaus Copernicus |
| 5 | Venus | 6051 | 243 | 1610 | No | Galileo Galilei |
Пример 1. Используя оператор SQL VIEW создать на основе таблицы Planets представление, содержащее в себе название планеты и год ее открытия:
CREATE VIEW PlanetsView AS SELECT PlanetName, OpeningYear FROM Planets
В результате будет создано представление с названием PlanetsView которая будет содержать в себе значения столбцов PlanetName и OpeningYear
SELECT * FROM PlanetsView
| PlanetName | OpeningYear |
| Mars | 1659 |
| Saturn | — |
| Neptune | 1846 |
| Mercury | 1631 |
| Venus | 1610 |
Представление (VIEW) в T-SQL – описание и примеры использования
Приветствую всех посетителей сайта Info-Comp.ru! Сегодня мы с Вами поговорим о таких объектах Microsoft SQL Server, как «Представления», Вы узнаете, что это за объекты, для чего они нужны, а также как создавать, изменять и удалять представления на языке T-SQL.

Представление (VIEW) в Microsoft SQL Server
Представление (VIEW) – это объект базы данных Microsoft SQL Server, который хранит в себе запрос SELECT и в случае обращения к данному объекту будет возвращен результирующий набор данных, который формирует запрос, указанный в определении представления.
Иными словами, это виртуальная (логическая) таблица, она не содержит в себе данных, но к ней можно обращаться как к обычной таблице, и она будет возвращать Вам данные. Обычно такой объект называют «Вьюха».
Для чего нужны представления
Если достаточно часто в своих SQL запросах Вы используете однотипные вложенные запросы, которые возвращают табличные данные, т.е. являются производными таблицами, то для удобства и сокращения кода Вы можете сохранить такие вложенные запросы в виде представления. И затем, где Вам требуется использовать именно тот набор данных, который Вы указали в запросе, Вы будете указывать название представления, точно так же как мы указываем название таблиц, согласитесь — это очень удобно!
Таким образом, представления нужны для:
- Упрощения и сокращения кода запроса;
- Повышения читабельности кода запроса;
- Сокрытия сложности реализации задачи от пользователя;
- Обеспечения эффективных путей доступа к данным;
- Обеспечения корректности производных данных;
- Более легкого управления. Чтобы внести изменения в алгоритм, формирующий данные, которые возвращает представление, не требуется изменять код везде, где используется этот алгоритм, достаточно изменить код в одном определении представления.
Как Вы понимаете, представления мы можем использовать не только для упрощения и сокращения кода SQL запроса, а еще для повышения безопасности, сокрытия сложности реализации алгоритмов и для обеспечения корректности производных данных.
Какие бывают представления
- Пользовательские – это те, которые мы сами создаем;
- Системные – это представления, которые уже есть в SQL сервере. Они возвращают нам системную информацию.
Работа с представлениями на T-SQL
Исходные данные
Сначала нам необходимо создать тестовые данные для наших примеров.
Допустим, у нас будет таблица Goods, которая хранит некую информацию о товарах, и таблица Categories, которая хранит данные о категориях товара.
--Создание таблицы CREATE TABLE Goods ( ProductId INT IDENTITY(1,1) NOT NULL, Category INT NOT NULL, ProductName VARCHAR(100) NOT NULL, Price MONEY NULL, ); --Добавление данных в таблицу INSERT INTO Goods(Category, ProductName, Price) VALUES (1, 'Клавиатура', 30), (1, 'Монитор', 100), (2, 'Смартфон', 200); --Создание таблицы с категориями CREATE TABLE Categories ( CategoryId INT IDENTITY(1,1) NOT NULL, CategoryName VARCHAR(100) NOT NULL ); --Добавление данных в таблицу с категориями INSERT INTO Categories VALUES ('Комплектующие компьютера'), ('Мобильные устройства'); SELECT * FROM Goods; SELECT * FROM Categories;

Заметка! Всем тем, кто только начинает свое знакомство с языком SQL, рекомендую прочитать книгу «SQL код» – это самоучитель по языку SQL для начинающих программистов. В ней очень подробно рассмотрены основные конструкции языка.
Создание представлений
Представим, что нам постоянно требуется знать, сколько товаров в той или иной категории, но писать каждый раз SQL запрос на получение таких данных нам не хочется и это не очень удобно. Поэтому мы приняли решения сохранить запрос на получение таких данных в виде представления и, когда нам потребуется узнать количество товаров в категории, мы просто будем обращаться к этому представлению.
Создается представление с помощью инструкции CREATE VIEW.
Для решения нашей задачи мы можем создать следующее представление.
CREATE VIEW CountProducts AS SELECT C.CategoryName AS CategoryName, COUNT(*) AS CntProducts FROM Goods G INNER JOIN Categories C ON Category = C.CategoryId GROUP BY C.CategoryName;

После инструкции CREATE VIEW мы указали название представления, затем мы указали ключевое слово AS и только после этого мы написали запрос, результирующий набор которого и будет содержать наше представление.
Примечание! В представлении нельзя использовать секцию ORDER BY, т.е. сортировку, в случае необходимости, отсортировать данные Вы можете, когда будете обращаться к этому представлению. Использование ORDER BY возможно, только если указан оператор TOP.
Теперь, для того чтобы получить данные о количестве товаров в категории, мы можем обратиться к этому представлению, например, как к обычной таблице.
SELECT * FROM CountProducts;

Изменение представлений
А сейчас давайте допустим, что нам нужно, чтобы это представление возвращало еще и идентификатор категории, если Вы обратили внимание, то в предыдущем примере таких данных нет. Для этого используем инструкцию ALTER VIEW, которая подразумевает изменение представления.
ALTER VIEW CountProducts AS SELECT C.CategoryId, C.CategoryName AS CategoryName, COUNT(*) AS CntProducts FROM Goods G INNER JOIN Categories C ON Category = C.CategoryId GROUP BY C.CategoryId, C.CategoryName; GO SELECT * FROM CountProducts;

В данном случае мы написали инструкцию ALTER VIEW, которая говорит SQL серверу, что мы хотим изменить существующий объект, затем указали название представления, чтобы сервер мог определить, какое именно представление мы хотим изменить, после ключевого слова AS мы указали новое определение представления, т.е. измененный запрос SELECT.
Чтобы отделить инструкцию изменения представления от SQL запроса на выборку, мы написали команду GO.
Удаление представлений
Если Вам представление больше не требуется, т.е. Вы им больше не будете пользоваться, и оно не используется в других представлениях, функциях или процедурах, иными словами, на него никто не ссылается, то Вы его можете удалить, это делается с помощью инструкции DROP VIEW.
DROP VIEW CountProducts;

Теперь данного представления больше нет, и к нему Вы больше обратиться не сможете.
Обновляемые представления в Microsoft SQL Server
Кроме того, что к представлению можно обращаться и извлекать данные, представление позволяет еще и изменять данные базовой таблицы, такие представления называются «Обновляемые представления». Однако для этого необходимо выполнение следующих условий:
- Любое изменение (UPDATE, INSERT или DELETE) должно касаться столбцов только одной базовой таблицы;
- Столбцы, данные которых Вы хотите изменить, должны напрямую ссылаться на столбцы базовой таблицы, иными словами, нельзя внести изменения в столбцы, которые были сформированы в представлении, например, агрегатной функцией или другими вычислениями.
Допустим, у нас есть представление, которое возвращает список товаров. Для примера мы его назвали GoodsUpdate.
CREATE VIEW GoodsUpdate AS SELECT ProductId, Category, ProductName, Price FROM Goods; GO
И в данном случае мы можем изменить данные, хранящиеся в таблице Goods, через представление, не обращаясь к этой таблице напрямую.
SELECT * FROM GoodsUpdate; GO UPDATE GoodsUpdate SET Price = Price + 10 WHERE Category = 2; GO SELECT * FROM GoodsUpdate;

Мы видим, что данные успешно изменены.
Заметка! Для комплексного изучения языка SQL и T-SQL рекомендую пройти онлайн-курсы по T-SQL, на которых используется последовательная методика обучения и рассматриваются все объекты SQL Server и конструкции языка T-SQL.
На сегодня это все, надеюсь, материал был Вам интересен и полезен, до новых встреч!