Компьютеры с современный мир

Основы языка запросов SQL – оператор SELECT. Основные операторы языка SQL Операторы sql описание и примеры

И над данными таблиц.

Язык SQL называют встроенным , т.к. он содержит функций полноценного языка разработки, а ориентируется на доступ к данным, вследствие чего он входит в состав средств разработки приложений. Стандарты языка SQL поддерживают языки программирования Pascal, Fortran, COBOL, С и др.

Существует 2 метода использования встроенного SQL :

  • статическое использование языка (статический SQL ) – в тексте программы содержатся вызовы функций SQL, которые включают в исполняемый модуль после компиляции.
  • динамическое использование языка (динамический SQL ) – динамическое построение вызовов функций SQL и их интерпретация. Например , можно обратиться к данным удаленной БД в процессе выполнения программы.

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

Определение 1

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

Основные операторы языка запросов SQL

Операторы языка SQL условно разделяются на 2 подъязыка :

  1. Язык определения данных DDL ;
  2. Язык манипулирования данными DML .

В таблице символом * помечены специфические операторы языка.

Рассмотрим важнейшие операторы SQL.

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

    Имя таблицы, которая создается, и имя хотя бы одного столбца (поля) являются обязательными операндами. Для имени столбца необходимо указать тип данных, которые будут в нем храниться.

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

    Пример 1

    Для создания таблицы books каталога книг, которая содержит поля:

    type – тип книги,

    name – название книги,

    price – цена книги

    оператор может выглядеть следующим образом:

    Оператор изменения структуры таблицы:

    При изменении структуры таблицы можно добавлять (ADD ), изменять (MODIFY ) или удалять (DROP ) один или несколько столбцов таблицы. Правила записи данного оператора такие же, как и для оператора CREATE TABLE . Чтобы удалить столбец указывать не нужно.

    Пример 2

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

    Оператор удаления таблицы:

    Пример 3

    Например, чтобы удалить существующую таблицу с именем books достаточно воспользоваться оператором:

    Оператор создания индекса:

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

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

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

    Оператор удаления индекса:

    Оператор создания представления:

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

    Оператор удаления представления:

    Оператор выборки записей:

    Оператор SELECT производит выборку и вычисления над данными из одной или нескольких таблиц. Результат выполнения оператора – ответная таблица, которая содержит (ALL ) или не содержит (DISTINCT ) строки, которые повторяются.

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

    Оператор изменения записей:

    Новые значения полей в записях могут не содержать значений (NULL ) или вычисляться согласно арифметическому выражению.

    Оператор вставки новых записей:

    В первой записи оператора INSERT вводятся новые записи с заданными значениями в столбцах.

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

    Оператор удаления записей:

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

Краткое описание операторов языка SQL

Работа с операторами SQL

Выбор данных

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

SELECT column-list FROM table-list

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

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

Для выбора одной колонки применяется следующий синтаксис:

SELECT CompanyName Пример выбора нескольких колонок имеет вид:

SELECT CompanyName, ContactName, ContactTitle

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

SELECT Customers.CompanyName, Shippers.CompanyName

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

Для указания имен таблиц, из которых выбираются записи, применяется ключевое слово FROM, например:

SELECT * FROM Customers

Этот запрос возвратит все поля из таблицы Customers.

Если в результирующем наборе данных нужны только поля CompanyName и ContactName, мы можем ввести следующее предложение SELECT:

SELECT CompanyName, ContactName FROM Customers

Пример запроса к более чем одной таблице приведен ниже:

SELECT Customers.CompanyName, Shippers.CompanyName FROM Customers, Shippers

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

Для фильтрации результатов, возвращаемых оператором SELECT, можно использовать предложение WHERE, синтаксис которого имеет вид:

WHERE expression1 [{AND | OR} expression2 […]]

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

SELECT * FROM Products WHERE CategoryID = 4

В предложении WHERE можно использовать различные выражения, например:

SELECT * FROM Products WHERE CategoryID = 2 AND SupplierID > 10

SELECT ProductName, UnitPrice FROM Products WHERE CategoryID = 3 OR UnitPrice < 50

SELECT ProductName, UnitPrice FROM Products WHERE Discontinued IS NOT NULL

Выражение ‘IS NOT NULL’ означает, что соответствующая колонка результирующего набора данных не может содержать пустых значений. В предложении WHERE можно использовать один из шести операторов отношений, определенных в SQL. Эти операторы приведены в табл. 1.

Таблица 1 Оператор Описание

< Меньше

<= Меньше или равно

<> Не равно

> Больше

>= Больше или равно

Помимо перечисленных выше простых операторов сравнения, можно использовать и специальные операторы сравнения, приведенные в табл. 2.

Таблица 2 Оператор Описание

ALL Применяется совместно с операторами сравнения при сравнении со списком значений

ANY Применяется совместно с операторами сравнения при сравнении со списком значений

BETWEEN Применяется при проверке нахождения значения внутри заданного интервала (включая его границы)

In Применяется для проверки наличия значения в списке

LIKE Применяется при проверке соответствия значения заданной маске

Приведем несколько примеров применения этих операторов. Для сопоставления данных с маской применяется ключевое слово LIKE:

SELECT CompanyName, ContactName FROM Customers WHERE CompanyName LIKE ‘M%’

В данной маске символ ‘%’ (процент) заменяет любую последовательность символов, а символ ‘_’ (подчеркивание) - один любой символ. Тот же самый результат может быть получен следующим способом:

SELECT CompanyName, ContactName FROM Customers WHERE CompanyName BETWEEN ‘M’ AND ‘N’

В последнем примере мы можем расширить область поиска. В частности, при поиске компаний с именами, начинающимися с букв от A до C, можно выполнить следующий оператор SELECT:

SELECT CompanyName, ContactName FROM Customers WHERE CompanyName BETWEEN ‘A’ AND ‘D’

Используя оператор LIKE, мы можем сузить диапазон поиска, применив более сложную маску для сравнения. Например, чтобы найти компании, содержащие в своем названии подстроку bl, можно применить следующий запрос:

SELECT CompanyName, ContactName FROM Customers WHERE CompanyName LIKE ‘%bl%’

Маска ‘%bl%’ показывает, что до и после искомой подстроки может быть любое количество произвольных символов.

Используя оператор IN, можно задать список значений, в котором должно содержаться значение поля:

SELECT CompanyName, ContactName FROM Customers WHERE CustomerID IN (‘ALFKI’, ‘BERGS’, ‘VINET’)

Операторы and, or и not

Мы уже рассматривали пример применения оператора AND для логических операций, связанных с требованием, чтобы запись удовлетворяла двум разным критериям. Рассмотрим следующий запрос:

SELECT CompanyName, ContactName FROM Customers WHERE CompanyName LIKE ‘S%’ AND Country = ‘USA’

Результатом выполнения этого запроса будет список заказчиков, находящихся в США, название которых начинается с буквы S.

Оператор OR позволяет выбрать записи, удовлетворяющие хотя бы одному из перечисленных условий, в то время как оператор NOT используется для исключения из набора данных записей, удовлетворяющих данному условию. Например, можно применить оператор OR для поиска всех заказчиков, либо находящихся в Калифорнии, либо имеющих название, начинающееся с буквы S (и при этом находящихся где угодно):

SELECT CompanyName, ContactName FROM Customers WHERE CompanyName LIKE ‘S%’ OR Region=’CA’

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

Теперь рассмотрим пример применения оператора NOT. Для исключения некоторых заказчиков из результирующего набора данных можно использовать запрос вида:

SELECT CompanyName, ContactName FROM Customers WHERE Country NOT IN (‘USA’, ‘UK’)

В результате выполнения этого запроса мы получим список заказчиков из всех стран, кроме США и Великобритании.

Предложение order by

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

ORDER BY column1 [{ASC | DESC}] [, column2 [{ASC | DESC}] [,…]

Например, для сортировки сотрудников по фамилии и затем по имени следует использовать следующий SQL-запрос:

SELECT LastName, FirstName, Title FROM Employees ORDER BY LastName, FirstName

Если сортировка данных требуется в убывающем порядке (например, требуется список продуктов в порядке убывания цен), используется ключевое слово DESC:

SELECT ProductName, UnitPrice FROM Products ORDER BY UnitPrice DESC

Дисциплина: Базы данных

Операторы языка SQL

Язык SQL включает в себя операторы разных катего­рий. Любой SQL-оператор состоит из зарезервированных слов и слов, опре­деляемых пользователем в соответствии с установленными синтаксическими правилами. Как и во многих языках программирования, большинство ком­понентов операторов языка не чувствительны к регистру. Исключение из этого правила как обычно составляют символьные данные, при задании ко­торых необходимо помнить о регистре и использовать тот, который необхо­дим для представления данных.

Для записи операторов в языке принят свободный формат, позволяющий посредством отступов и выравниваний придать SQL-программе более чита­бельный вид.

    каждая фраза в операторе должна начинаться с новой строки;

    начало каждой фразы должно быть выровнено с началом остальных фраз оператора;

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

    для записи операторов применяются некоторые соглашения:

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

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

    вертикальная черта "|"" указывает на необходимость выбора одного из не­скольких значений;

    фигурные скобки определяют обязательный элемент;

    квадратные скобки определяют необязательный элемент;

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

Операторы определения данных (табл.1) применяются для описания структур используемых данных. В состав этой категории входят следующие операторы: create table, drop table, alter table, create view, ALTER VIEW, DROP VIEW.

Таблица 1 . Операторы определения данных

Оператор Пояснение

create table Создать таблицу

DROP table Удалить таблицу

alter table Изменить таблицу

CREATE VIEW Создать представление

alter view Изменить представление

drop view Удалить представление

Операторы манипулирования данными, образующие следующую категорию операторов, предназначены для заполнения таблиц данными и для обновле­ния загруженной в них информации. К данной категории относятся сле­дующие операторы: delete, insert, update (табл.2).

Таблица 2 . Операторы манипулирования данными

Оператор Пояснение

Delete Удаляет одну или несколько строк, соответствующих условиям

фильтрации, из базовой таблицы

INSERT Вставляет одну строку в базовую таблицу

update Обновляет значения одного или нескольких столбцов в одной или

нескольких строках, соответствующих условиям фильтрации

Для выборки информации из базы данных предназначен язык запросов, ко­торый в языке SQL представлен одним оператором select (табл.3).

Таблица 3. Язык запросов

Оператор Пояснение

select Выбирает строки; оператор, позволяющий сформировать результирующую

таблицу, соответствующую запросу

Кроме указанных категорий операторов, назначение которых не сложно представить, прочитав пояснения в таблицах, необходимо выделить еще две: операторы управления транзакциями (табл. 4) и средства администриро­вания данных (табл. 5).

Таблиц 4. Управление транзакциями

Оператор Пояснение

commit Завершить транзакцию- завершить обработку информации,

объединенную в транзакцию

rollback Откатить транзакцию- отменить изменения, проведенные в ходе выполнения

состояние БД, пометить его для то­го, чтобы можно было в дальнейшем к нему вернуться

Таблица 5 . Администрирование данных

Оператор Пояснение

ALTER DATABASE Изменить набор основных объектов в базе данных, ограниче­ний, касающихся

всей базы данных

ALTER DBAREA Изменить ранее созданную область хранения

ALTER PASSWORD Изменить пароль для всей базы данных

CREATE DATABASE Создать новую базу данных

CREATE DBAREA Создать новую область хранения и сделать ее доступной для размещения

DROP DATABASE Удалить существующую базу данных

DROP DBAREA Удалить существующую область хранения (если в ней на на­стоящий момент не

располагаются активные данные)

GRANT Предоставить права доступа на ряд действий над некоторым объектом БД

REVOKE Лишить прав доступа к некоторому объекту или некоторым действиям над

объектом

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

Начинать знакомство с данным языком принято с рассмотрения возможно­стей языка запросов, который в языке SQL представлен одним оператором select, потому что этот мощный оператор, естественно, является и самым сложным. К тому же в дальнейшем интересно посмотреть, как его можно использовать совместно с операторами манипулирования данными.

    Оператор выбора SELECT . Формирование запросов к базе данных

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

Формат оператора select:

SELECT *|<список полей> FROM <список таблиц>

Указанный порядок следования фраз в операторе select не может быть из­менен, но не все его части являются обязательными. К обязательным пред­ложениям относятся только фразы select и from. Все остальные части опе­ратора могут быть использованы по усмотрению программиста. Пояснение:

□ Фраза select :

Наличие ключевого слова all (по умолчанию) означает, что в резуль­тирующую таблицу включаются все строки, удовлетворяющие услови­ям запроса, что может привести к появлению в результирующей таб­лице одинаковых строк;

Ключевое слово distinct предназначено для приведения таблицы в соответствие с принципами теории отношений, где предполагается отсутствие дубликатов строк;

Символ "* " определяет очень часто встречаемую ситуацию, когда в ре­зультирующий набор включаются все столбцы из исходной таблицы запроса.

□ Во фразе from задается перечень исходных таблиц запроса.

□ Во фразе where определяются условия отбора строк результата или усло­вия соединения строк исходных таблиц, подобно операции условного со­единения в реляционной алгебре. В качестве условий отбора могут быть использованы следующие предикаты:

Сравнения "= , <>, >, <, >=, <=" - для сравнения результатов вы­числения двух выражений; более сложные выражения строятся с по­мощью логических операторов AND, OR, NOT; значения выражений вычисляются в порядке, который определяется приоритетом исполь­зуемых операторов и наличием скобок в выражении;

between А and В - предикат истинен, когда вычисленное значение выражения попадает в заданный диапазон (предикат not between a and В истинен тогда, когда сравниваемое значение не попадает в заданныйинтервал);

in - предикат истинен тогда, когда сравниваемое значение входит в множество заданных значений; при этом множество значений может быть задано простым перечислением или встроенным подзапросом (предикат not in истинен тогда, когда сравниваемое значение не вхо­дит в заданное множество);

like и not like - предикаты, смысл которых противоположен, тре­буют задания шаблона, с которым сравнивается заданное значение; предикат like истинен тогда, когда сравниваемое значение соответст­вует шаблону, и ложен в противном случае;

IS null - предикат, применяющийся для выявления равенства зна­чения некоторого атрибута неопределенному значению:

    <имя атрибута> IS null - принимает значение true, если в дан­ной строке указанный атрибут имеет неопределенное значение и значение false, в противном случае;

    <имя атрибута> IS NOT null - все происходит наоборот.

exist и not exist , используемые во встроенных подзапросах.

□ Во фразе group by задается список полей группировки.

□ Во фразе having задаются предикаты-условия, накладываемые на каждую группу.

□ Во фразе order by задается список полей упорядочения результата, то есть список полей, который определяет порядок сортировки в результи­рующей таблице.

В стандарте SQL определено понятие NULL-значения, которое вызвало необхо­димость применения трехзначной логики, где все логические операции выпол­няются в соответствии с приведенной ниже таблицей истинности (табл.6).

Таблица 6 . Таблица истинности

A AND B

Т RUE

1.1. Простые запросы

Запрос 1

Вывести сведения о кафедрах университета.

Данная задача сводится к выборке и выводу информации из одной таблицы, причем выводу подлежат все ее строки и все ее столбцы:

SELECT * FROM kafedra

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

Kod kaf

Name kaf

Nom_telef

Nom_Auditoria

Col_sotr

Иванов Т.М.

Общей математики

Махов К Л.

Росс Л.Т.

Фирсов С.С.

Прикладной математики

Ляхова И.Т.

Запрос 2

Вывести номера телефонов кафедр университета.

Результат такого запроса должен содержать только два столбца: Name _ kaf и Nom _ telef , поэтому сам запрос должен выглядеть следующим образом:

SELECT Name_kaf, Nom_telef FROM kafedra

Результирующая таблица:

Name kaf Nomjelef

Физики 23-34-24

Общей математики 23-65-43

Истории 23-78-72

Графики 23-99-77

Прикладной математики 23-66-62

В сформированных выше запросах требовалось вывести все строки таблицы, указанной в предложении from. Если при выборке требуется ограничить ко­личество выводимых строк в соответствии с каким-то условием, то этого можно достичь, используя в запросе предложение where. В предложение where можно включить одно или несколько условий отбора строк.

Запрос 3

Вывести сведения о кафедре графики.

SELECT * FROM kafedra WHERE Name_kaf = "Графики"

Ответ на такой запрос будет содержать только одну строку:

Kod.kaf Name_kaf Nomjelef Nom_Auditoria Col_sotr Zav_kaf

004 Графики 23-99-77 385 18 Фирсов C.C.

Запрос 4

Вывести сведения о кафедрах университета, находящихся на первом этаже, учитывая тот факт, что номера аудиторий первого этажа лежат в диапазо­не от 1 до 99.

Запрос будет выглядеть следующим образом:

SELECT * FROM kafedra WHERE Nom_Auditoria BETWEEN 1 AND 99

Результат запроса:

Kodjcaf Name_kaf Norn lelef Norn Audit oria Coi_sotr Zavkaf

002 Общей мате- 23-65-43 003 22 Махов К.Л.

математики

В общем случае строки в результирующей таблице выводятся в неупорядоченном каким-либо образом состоянии. Просматривать и анализировать такой материал не всегда удобно. Для сортировки строк по какому-либо столбцу применяется фраза order by. Она включает список разделенных запятыми наименований столбцов, по которым требуется упорядочить вы­водимую информацию. Данная фраза должна всегда располагаться последней в операторе select и при ее наличии появляется возможность отсортировать строки по возрастанию (asc) или убыванию (desc) значений указанного столбца или комбинации указанных столбцов, независимо о" того, присутствуют эти столбцы в результирующей таблице или нет.

Запрос 5

Вывести сведения о кафедрах университета в виде, отсортированном т столбцу Name _ kaf в порядке возрастания.

Запрос будет выглядеть следующим образом:

SELECT * FROM kafedra ORDER BY Name_caf ASC

Результат данного запроса:

Kod_kaf Name_kaf Nomjelef Nom_Auditoria Col_sotr Zav kaf

004 Графики 23-Э9-77 385 18 ФирсовС.С.

003 Истории 23-78-72 465 16 Росс Л.Т.

002 Общей ма- 23-65-43 003 22 Махов К.Л.

тематики

005 Прикладной 23-66-62 028 24 Ляхова И.Т.

математики

001 Физики 23-34-24 132 25 Иванов Т.М.

Часто для улучшения наглядности выводимую информацию полезно отсор­тировать по нескольким столбцам. Для этого имена столбцов сортировки необходимо перечислить через запятую во фразе order by. При этом выво­димая таблица будет содержать строки, упорядоченные по первому указан­ному во фразе order by столбцу, а строки, имеющие равные значения в этом столбце, будут упорядочены по значениям второго столбца и т. д. слева направо.

SQL (в интерактивном режиме).

12.1. Общее представление об основных операторах языка SQL

Как уже отмечалось в "Программное обеспечение работы с современными базами данных" , все операторы языка SQL разделяются на три составные части: DDL – язык определения данных, DCL – язык управления данными, DML – язык обработки данных .

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

Операторы разграничения доступа пользователей к объектам базы данных (DCL) .

GRANT – создание в системе безопасности записи, разрешающей пользователю работать с данными или выполнять определенные операции SQL .

DENY - создание в системе безопасности записи, запрещающей доступ для определенной учетной записи.

Операторы определения данных (язык DDL) .

Соответствующие операторы предназначены для создания, удаления, изменения основных объектов модели данных реляционных СУБД : таблиц, представлений, индексов.

CREATE TABLE <имя> - создание новой таблицы в базе данных.

DROP TABLE <имя> - удаление таблицы из базы данных .

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

При выполнении аналогичных операций с представлениями или индексами в указанных операторах вместо служебного слова TABLE записывается слово VIEW ( представление ) или слово INDEX ( индекс )

Операторы манипулирования данными (язык DML) .

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

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

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

INSERT – вставка новых строк в таблицу.

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

12.2 Интерактивный режим работы с SQL (интерактивный SQL)

Соответствующий режим предусматривает непосредственную работу пользователя с базой данных по следующему алгоритму: используя прикладную программу (клиентское приложение ) или стандартную утилиту, входящую в СУБД , пользователь :

  • устанавливает соединение с БД (подтверждая наличие прав доступа);
  • вводит соответствующий оператор SQL, при необходимости в режиме диалога вводит дополнительную информацию;
  • инициирует выполнение команды.

Текст запроса поступает в

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

Введение

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

Определяют несколько категорий операторов SQL:

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

Операторы SQL для манипулирования данными

INSERT. Вставляет строки в существующую таблицу. Может использоваться как для одного значения, так и нескольких, определённых по некоему условию. Например:

имя таблицы (имя столбца 1, имя столбца 2)

VALUES (значение 1, значение 2).

Для использования оператора INSERT при нескольких значениях, применяется такой синтаксис:

имя таблицы 1 (имя столбца 1, имя столбца 2)

SELECT имя столбца 1, имя столбца 2

FROM имя таблицы 2

WHERE имя таблицы 2.имя столбца 1>2

Этот запрос выберет все данные из таблицы 2, которые больше 2 по столбцу 1 и вставит их в первую.

UPDATE. Как видно из названия, этот оператор SQL запроса обновляет данные в существующей таблице по определённому признаку.

UPDATE имя таблицы 1

SET имя столбца 2 = «Василий»

WHERE имя таблицы 1.имя столбца 1 = 1

Данная конструкция заполнит значением Василий все строки, в которых встретит цифру 1 в первом столбце.

Данные из таблицы. Можно указать какое-либо условие или же убрать все строки.

DELETE FROM имя таблицы

WHERE имя таблицы.имя столбца 1 = 1

Приведённый запрос удалит из базы все данные со значением один в первом столбце. А вот так можно очистить всю таблицу:

Оператор SELECT

Главное назначение SELECT — выборка данных по определенным условиям. Результатом его работы всегда является новая таблица с отобранными данными. Оператор MS может быть использован в массе различных запросов. Поэтому наряду с ним можно рассмотреть и другие смежные ключевые слова.

Для выбора всех данных из определённой таблицы используется знак «*».

FROM имя таблицы 1

Результатом работы данного запроса будет точная копия таблицы 1.

А здесь происходит выборка по условию WHERE, которое достаёт из таблицы 1 все значения, больше 2 в столбце 1.

FROM имя таблицы 1

WHERE имя таблицы 1.имя столбца 1 > 2

Также можно указать в выборке, что нужны только определённые столбцы.

SELECT имя таблицы 1.имя столбца 1

FROM имя таблицы 1

Результатом данного запроса будут все строки, со значениями из столбца 1. С помощью операторов MS SQL можно составить собственную таблицу, на ходу заменив, вычислив и подставив определённые значения.

имя таблицы 1.имя столбца 1

имя таблицы 1.имя столбца 2

имя таблицы 1.имя столбца 3

имя таблицы 1.имя столбца 2 * имя таблицы 1.имя столбца 3 AS SUMMA

FROM имя таблицы 1

Данный, на первый взгляд сложный запрос выполняет выборку всех значений из таблицы 1, затем создаёт новые колонки EQ и SUMMA. В первую заносит знак «+», во вторую произведение данных из столбца 2 и 3. Полученный результат можно представить в виде таблицы, для понимания как это работает:

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

имя таблицы 1.имя столбца 1

имя таблицы 1.имя столбца 2

имя таблицы 1.имя столбца 3

FROM имя таблицы 1

ORDER BY имя столбца 2

Результирующая таблица будет выглядеть таким образом:

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

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

Таблица «Сотрудники»

Таблица «Зарплата»

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

Сотрудники.Номер

Сотрудники.Имя

Зарплата.Ставка

Зарплата.Начислено

FROM Сотрудники, Зарплата

WHERE Сотрудники.Номер = Зарплата.Номер

Здесь происходит выборка из двух разных таблиц значений, объединённых по номеру. Результатом будет следующий набор данных:

Ещё немного о SELECT. Использование агрегатных функций

Один из основных операторов может производить некоторые вычисления при выборке. Для этого он использует определённые функции и формулы.

К примеру, чтобы получить количество записей из таблицы «Сотрудники», нужно использовать запрос:

SELECT COUNT (*) AS N

FROM Сотрудники

В результате получится таблица с одним значением и столбцом.

Можно применить такой запрос и посмотреть что получится:

SUM(Зарплата.Начислено) AS SUMMA

MAX(Зарплата.Начислено) AS MAX

MIN(Зарплата.Начислено) AS MIN

AVG(Зарплата.Начислено) AS SRED

FROM Зарплата

Итоговая таблица будет такой:

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

Объединение, пересечение и разности

Объединить несколько запросов в SQL

SELECT Сотрудники.Имя

FROM Сотрудники

WHERE Сотрудники.Номер = 1

SELECT Сотрудники.Имя

FROM Сотрудники, Зарплата

WHERE Зарплата.Номер = 1

При этом стоит учитывать, что при таком объединении таблицы должны быть совместимы. То есть иметь одинаковое количество столбцов.

Синтаксис оператора SELECT и порядок его обработки

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

Затем может присутствовать SQL оператор WHERE. С его помощью SELECT пробегает по всем строкам таблицы и проверяет данные на соответствие условию.

Если в запросе имеется GROUP BY, то происходит группировка значений по указанным параметрам.

Операторы для сравнения данных

Их имеется несколько типов. В SQL операторы сравнения могут проверять различные типы значений.

    «=». Обозначает, как можно догадаться, равенство двух выражений. Например, он уже использовался в примерах выше - WHERE Зарплата.Номер = 1.

    «>». Знак больше. Если значение левой части выражения больше, то возвращается логическое TRUE и условие считается выполненным.

    «<». Знак меньше. Обратный предыдущему оператор.

    Знаки «<=» и «>=». Отличается от простых операторов больше и меньше, тем, что при равенстве операндов условие также будет истинным.

LIKE

Перевести данное ключевое слово можно как «похожий». Оператор LIKE в SQL используется примерно по такому же принципу — выполняет запрос по шаблону. То есть он позволяет расширить выборку данных из базы используя регулярные выражения.

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

FROM Сотрудники

WHERE Имя LIKE `%я`

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

CASE

Данный оператор SQL Server представляет собой реализацию множественного выбора. Он напоминает конструкцию switch во многих языках программирования. Оператор CASE в SQL выполняет действие по нескольким условиям.

Например, нужно выбрать из таблицы «Зарплата» максимальное и минимальное значение.

Тогда запрос можно составить так:

FROM Зарплата

WHERE CASE WHEN SELECT MAX(Начислено) THEN Максимум

WHEN SELECT MIN(Начислено) THEN Минимум

В данном контексте система ищет максимальное и минимальное значение в столбце «Начислено». Затем с помощью END создаётся поле «итог», в которое будет заноситься «Максимум» или «Минимум» в зависимости от результата выполнения условия.

Кстати, в SQL имеется и более компактная форма CASE — COALESCE.

Операторы определения данных

Это вид позволяет проводить разнообразное изменение таблиц — создание, удаление, модификации и работу с индексами.

Первый из них, который стоит рассмотреть — CREATE TABLE. Он делает не что иное, как создаёт таблицу. Если просто набрать запрос CREATE TABLE, ничего не случится, так как нужно ещё указать несколько параметров.

Например, для создания уже знакомой таблицы «Сотрудники» нужно использовать команды:

CREATE TABLE Сотрудники

(Номер number(10) NOT NULL

Имя varchar(50) NOT NULL

Фамилия varchar(50) NOT NULL)

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

DROP TABLE

Выполняет одну простую задачу — удаление указанной таблицы. Имеет дополнительный параметр IF EXISTS. Он поглощает ошибку при удалении, если искомая таблица не существует. Пример использования:

DROP TABLE Сотрудники IF EXISTS.

CREATE INDEX

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

CREATE INDEX название_индекса

ON название_таблицы(название_столбца)

Используется данный оператор в T-SQL, Oracle, PL SQL и многих других интерпретациях технологиях.

ALTER TABLE

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

    ADD. Осуществляет добавление столбца в таблицу. Синтаксис его такой: ALTER TABLE название_таблицы ADD название_столбца тип_хранимых_данных. Может иметь параметр IF NOT EXISTS, что подавить ошибку, если создаваемый столбец уже есть;

    DROP. Удаляет столбец. Также имеет ключ IF EXISTS, без которого сгенерируется ошибка, говорящая о том, что требуемый столбец отсутствует;

    CHANGE. Служит для переименования имени поля в указанное. Пример использования: ALTER TABLE название_таблицы CHANGE старое_имя новое_имя;

    MODIFY. Данная команда поможет сменить тип и дополнительные атрибуты определённого столбца. А используется он вот так: ALTER TABLE название_таблицы MODIFY название_столбца тип_данных атрибуты;

CREATE VIEW

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

Процесс создания происходит с помощью простого запроса:

CREATE VIEW название представления AS SELECT FROM * название таблицы

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

Немного о функциях

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

    COUNT. Производит подсчёт записей или строк в конкретной таблице. В качестве параметра можно указать имя столбца, тогда данные будут взяты из него. SELECT COUNT * FROM Сотрудники;

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

    MIN и MAX. Эти функции уже использовались в этой статье. Определяют они максимальное и минимальное значения из указанного столбца;

    SUM. Все просто — функция вычисляет сумму значений столбца. Применяется исключительно для числового вида данных. Добавив в запрос параметр DISTINCT, будут суммироваться только уникальные значения;

    ROUND. Функция округления десятичных дробных чисел. В синтаксисе используется название столбца и количество знаков после запятой;

    LEN. Простая функция, вычисляющая длину значений столбца. Результатом будет новая таблица с указанием количества символов;

    NOW. Это ключевое слово используется для вычисления текущей даты и времени.

Дополнительные операторы

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

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

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

    NOT. Оператор придаёт противоположность выражению.

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

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

    UNION. Очень удобный оператор для объединения нескольких запросов. Он уже встречался среди примеров этой в этой статье. Можно вывести нужные строки из нескольких таблиц, объединив их UNION для более удобного использования. Синтаксис его такой: SELECT имя_столбца FROM имя_таблицы UNION SELECT имя_другого_столбца FROM имя_другой таблицы. В результате получится сводная таблица с объединёнными запросами.

    PRIMARY KEY. Переводится как «первичный ключ». Собственно, именно такая терминология и используется в справочных материалах. Он означает уникальный идентификатор строки. Применяется, как правило, при создании таблицы для указания поля, которое и будет содержать его.

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

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

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

    Ограничения. Если нужно получить из базы с тысячами строк всего лишь двух, то стоит использовать операторы типа LIMIT или TOP. Не нужно извлекать данные средствами языка разработки оболочки.

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

    Сортировка. Если есть возможность применять упорядочивание в запросе, то есть силами СУБД, то нужно её использовать. Это позволит значительно сэкономить на ресурсах при работе программы или сервиса.

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

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

    Типы. Для экономии места и ресурсов нужно чутко относиться к видам используемых данных. Если есть возможность воспользоваться менее «тяжёлым» для памяти типом, то надо применять именно его. Например, если известно, что в данном поле числовое значение не будет превышать 255, то зачем использовать 4-байтный INT, если есть TINYINT в 1 байт.

Заключение

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

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

В будущем аналоги, которые могли бы превзойти по функциональности и производительности SQL, вряд ли появятся, поэтому данная сфера является довольно перспективной нишей для любого программиста.

Похожие публикации