Описание команд sql. Синтаксис и справка по командам sql

3.1 Общие положения

Изложенные выше механизмы РМД легли в основу языков манипулирования данными. Заметим, что крайне редко РА или РИ принимаются в качестве полной основы какого-либо языка РБД. Обычно язык основывается на некоторой смеси алгебраических и логических конструкций.

Реализация концепции операций, ориентированных на табличное представление данных, позволило создать компактный язык с небольшим набором предложений – SQL. Этот язык может использоваться как интерактивный для выполнения запросов и как встроенный для построения прикладных программ.

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

1) команды определения данных (Data Definition Commands), которые служат для создания, изменения, удаления таблиц и индексов, а также для определения схемы БД;

2) команды манипулирования данными (Data Manipulation Commands) для изменения данных (редактирование существующих данных, добавление и удаление записей);

3) команды выборки данных (Data Query Commands) для выборки существующих данных;

4) команды управления транзакциями (Transaction Control Commands) для сохранения или отката изменений в БД;

5) команды управления данными (Data Control Commands) для проверки целостности БД, предоставления и отмены привилегий на доступ к данным.

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

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

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

– звездочка (*) означает "все" и употребляется в обычном для программирования смысле, т.е. "все случаи, удовлетворяющие определению";

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

– фигурные скобки ({}) означают, что конструкции, заключенные в эти скобки, должны рассматриваться как целые синтаксические единицы; эти скобки позволяют уточнить порядок разбора синтаксических конструкций, заменяя обычные скобки, используемые в синтаксисе SQL;

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

– прямая черта (|) означает наличие выбора из двух или более возможностей; например, конструкция [термин_1 | термин_2] означает, что можно выбрать один из двух терминов (или термин_1, или термин_2); при этом термин_1 выбирается по умолчанию; отсутствие всей этой конструкции будет восприниматься как выбор термин_1;

– точка с запятой (;) завершающий элемент предложений SQL; этот знак должен присутсвовать после каждой команды;

– запятая (,) используется для разделения элементов списков;

– пробелы () могут вводиться для повышения наглядности между любыми синтаксическими конструкциями предложений SQL;

– прописные латинские буквы и символы используются для написания конструкций языка SQL и должны записываться без изменений;

– строчные буквы используются для написания конструкций, которые должны заменяться конкретными значениями, выбранными пользователем, причем для определенности отдельные слова этих конструкций связываются между собой символом подчеркивания (_);

Select является мощным средством создания запросов на выборку информации. Приведем ее предварительный Синтаксис:

Select < поля, выражения или*> From < исходные таблицы>

Where < условие отбора записей> Group By < поля для группировки>

Having < условие отбора группы> Order By < поля для сортировки>\

Рассмотрим фразы команды (не все фразы обязательны).

Select < выражение > [ < псевдоним > ][,…]

From <таблица> [<тип связи> Join <таблица> On <условие связи>]…

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

Псевдоним – задает наименование колонки (пробелы запрещены). Для связывания таблиц используется фразаJoin . Тип связи задается словами:Left / Right (в запрос входят все записи из таблицы, состоящей в запросе слева/справа),Inner (входят только записи с совпадающими ключами связи).

Пример задания базового запроса по базе строек:

SelectStroiki.Ds,Stroiki.Ss,Stroiki.Fs,Stroiki.M,Stroiki.Em,Podrjdhiki.Np,Zakazhiki.NzFROM“stroiki.DB”Stroiki

Inner Join “zakazhiki.db” Zakazhiki ON (Stroiki.Kz = Zakazhiki.Kz)

Inner Join “podrjdhiki.db” Podrjdhiki ON (Stroiki.Kp = Podrjdhiki.Kp)

В результате выполнения запроса получается совокупность колонок, в заголовках которых могут находиться имена полей. Если вас не устраивают имена, формируемые по умолчанию, то можно назначить свои (псевдонимы), указав их после слова AS. В выражении могут использоваться специальные арифметические функции, действующие «по вертикали»: среднее значение по группе(Avg ), минимальное(Min ), максимальное(Max ), сумма(Sum ), число записей в группе(Count ). Функция может иметь в качестве аргумента звездочку(Count (*)), что означает подсчет всех записей, попавших в выборку.

Where <условие отбора> - условие отбора записей в запрос. В условиях допускается использование логических операторовAnd, Or, Not и круглых скобок. В условиях, кроме любых функций Pascal, могут содержаться сле­дующие операторы SQL:

<выражение> Like <шаблон> позволяет построить условие сравне­ния по шаблону, набор символов: "_" (неопределенный символ), "%" (лю­бые символы, например: Where Ns Like "Школа%"), % (любые сим­волы из интервала от п до k, например: Like "%");

<выражение> Between <нижнее значение>And <верхнее значение> проверяет, находится ли выражение в указанном диапазоне (Where Between 0 And 1000000);

<выражение> In (<выражение>,<выражение>,...) проверяет, нахо­дится ли выражение, стоящее слева от слова IN, среди перечисленных справа от него (Where Kz In (1,2,6)).

Group By <колонка>[,<колонка>...] - задаются колонки, по которым про­изводится группирование выходных данных. Все записи таблицы, для ко­торых значения колонок совпадают, отображаются в выборке единствен­ной строкой. Группирование удобно для получения некоторых сиодных характеристик (суммы, число записей, среднее) группы.

Пример. Вывести число сотрудников, максимальную, среднюю, ми­нимальную и итоговую зарплату по подразделениям (поле Pord) по таблице SOTRUDNIKI.

Select podr, Count(*),Min (zarpl), Avg (zarpl), Max(zarpl), Sum (/nipl)

From Sotrudniki Group By podr Order By podr

Having <условие отбора группы> задает кртерий отбора сформированных в процессе выборки групп.

Order By <колонка> [Аsc/Desc] [,колонка> …] - опция, которая задаст упорядочение по возрастанию (Desc). Колонка задается номером или именем поля (Order By Кр, Kz).

Рассмотрим другие команды SQL.

Create Table < имя таблицы > (< поле > < тип поля > ,...) - созда­ние таблицы (Create Table Kadr (Tab Integer, Fam Char (30) Not Null Primary Key (Tab))). Обязательное присутствие значения в поле задается параметром Not Null. Основные типы полей в SQL в Delphi: Smalllnt (Short), Integer (Long Integer), Numeric(x,y), Float (x,y), Char (n), Data, Boolean, Time, Money, Autoinc. Для других СУБД типы полей могут быть другими.

Create View <имя представления> [(<имя столбца>,...)] As - создание представления с новыми именами столбцов (Create View NameStroek As Select Stroiki.Ns FROM Stroiki).

Alter Table <имя таблицы> {Add \ Modify \ Drop} <поле> [<тип поля>] - изменение значений полей (Update Kadr Set Oklad=1.5*Oklad Where Сех="Цех N2").

Insert Into(<список полей>) {Values (<список значений>)\ Select...} - включение новой записи или группы записей из другой таблицы.

Insert Into Zakazhiki (Kz.Nz) Values (3,"ЗИЛ1); // включение одной записи Insert Into Podrjdhiki (Kp.Np) Select KPodr, NPodr From SpravPodr Where DSozd >01.01.80; //включение группы записей из таблицы SpravPodr

Create Index <имя индекса> On <таблица> (<поле> [{dsc\esc}],...) - создание индекса (Create index indproba on stroiki (kz, kp)).

Drop Table/View <имя> - удаление таблицы/представления (Drop Table Stroiki).

Drop Index ["<имя таблицы>".]<имя индекса> - удаление индекса.

Drop Index [“<имя таблицы>".] Primary - удаление главного индекса.

Delete From < имя таблицы > - удаление записей.

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

Пример. Вывести крупные стройки со сметой выше средней по стройкам: Select * From Stroiki Where Ss > (Select Avg(Ss) From Stroiki).

История SQL

Стандарты SQL

Основные команды SQL

Обработка команд SQL сервером Oracle

Стадии выполнения команды SQL

Выполнение команды DML

Выполнение команды SELECT

Выполнение команд DDL

Литература

Все операции над данными реляционной базы данных выполняются посредством языка доступа к данным, являющимся стандартным языком для систем управления реляционными базами данных. Таким стандартным языком является SQL Structured Query Language (структурированный язык запросов).

Язык структурированных запросов SQL

История SQL

Статья Кодда в 1970 году вызвала большой поток исследований, связанных с реляционными базами данных. Для реализации реляционной модели, фирма IBM в 1974 году начала разработку большого исследовательского проекта, названного System/R. Цель этого проекта заключалась в том, чтобы доказать работоспособность реляционной модели и приобрести опыт реализации реляционной СУБД.

В 1974 – 1975 годах на первом этапе выполнения проекта System/R был создан минимальный прототип реляционной системы управления базами данных. В это же время вышла первая статья с описанием языка запросов к базе данных, названного SEQUEL – Structured English Query Language (структурированный английский язык запросов).

В 1978 – 1979 годах на втором этапе выполнения проекта полностью переделанная реализация System/R была установлена на компьютерах нескольких заказчиков фирмы IBM для опытной эксплуатации. Эта эксплуатация принесла первый опыт работы с реляционной СУБД и с языком базы данных, который был переименован в SQL – Structured Query Language (структурированный язык запросов). Несмотря на изменение названия, произношение «сиквел» сохранилось и по сегодняшний день.

В 1979 году исследовательский проект System/R закончился, и IBM сделала заключение, что реляционные базы данных не только работоспособны, но и могут служить для создания коммерческих продуктов.

Стандарты SQL

В 1982 году началась работа над официальным стандартом SQL. В 1986 году стандарт был утвержден Американским институтом национальных стандартов (American National Standards Institute – ANSI) под номером X3.135, а в 1987 году – как стандарт Международной организации по стандартам (International Standards Organization – ISO). Этот стандарт, пересмотренный в 1989 году, обычно называют стандартом «SQL-89» или «SQL1».

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

Чтобы исправить эту ситуацию, комитет ANSI создал проект более жесткого стандарта «SQL2» и «SQL3». Эти стандарты оказались более противоречивыми, чем исходный стандарт, т.к. предусматривали возможности, выходящие за рамки уже существующих программных продуктов, использующих SQL. Тем не менее, стандарт «SQL2», был окончательно принят комитетом ANSI в 1992 году.

Все существующие коммерческие продукты поддерживают, несмотря на стандарт SQL2, собственный диалект языка SQL. Однако ядро SQL стандартизировано достаточно жестко, и поставщики СУБД пытаются привести свои продукты в соответствие со стандартом.

Основные команды SQL

Итак, SQL – структурированный язык команд для взаимодействия с сервером реляционных баз данных из любого инструментального пакета или приложения. Администратор базы данных использует язык запросов для формирования и обслуживания баз данных, а пользователь – для доступа к данным.

Возможности SQL:

§ Подходит разным пользователям, включая пользователей с самым малым опытом программирования, т.к. является достаточно простым и наглядным языком

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

§ Сокращает время, необходимое для создания и сопровождения систем, т.к. является единым языком и для определения объектов, и для манипулирования данными

Несмотря на то, что Oracle SQL совместим со стандартом, некоторые свойства SQL2 не поддерживаются Oracle или отличаются от стандарта.

Команды SQL можно разделить на несколько категорий:


Команды

Описание

Язык манипулирования данными ( DML)
Запрашивают или манипулируют данными в объектах базы данных

Извлекает данные из одной или более таблиц или представлений

Добавляет новые строки в таблицу

Изменяет значения колонок в существующих строках таблицы

Удаляет строки из таблиц

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

Позволяет просмотреть план выполнения SQL-утверждения

Язык определения данных (DDL) базы данных

Определяют, изменяют определение или удаляют из словаря определение объектов базы данных

Используются для создания структур данных.

Используются для изменения структур данных.

Используются для удаления структур данных.

Изменяет имена объектов

Усекает объекты (удаляет все строки, оставляя определение объекта)

Собирает статистики об объектах, проверяет структуру объектов

Добавляет комментарии объектам в словарь данных

Команды управления транзакциями

Управляют изменениями, сделанными командами DML и группируют команды DML в одну транзакцию

Подтверждает изменения

Отменяет изменения до состояния данных на начало транзакции или до точки сохранения

Устанавливает точки сохранения, до которых можно отменить изменения

SET TRANSACTION *

Устанавливает свойства транзакции

Язык управления доступом ( DCL)

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

Предоставляет права доступа к базе данных Oracle и ее структурам

Отменяет права доступа к базе данных Oracle и ее структурам

Программный SQL

Позволяет выполнять команды SQL из программных модулей

Определяет явный курсор

Открывает курсор

Выбирает строку из курсора

Закрывает курсор

Извлекает данные из одной или более таблиц в программные переменные

EXECUTE IMMEDIATE *

Динамически выполняет оператор SQL

* - Не являются частью стандарта ANSI/ISO, но используются в СУБД Oracle

Обработка команд SQL сервером Oracle

Команды SQL проходят несколько стадий при обработке сервером Oracle. В процессе обработки задействованы различные процессы и структуры памяти Oracle (Рисунок 1).

Рисунок 1 Процессы и структуры памяти, участвующие в обработке команд SQL

· Команды SQL обрабатываются серверным процессом

· Идентичные команды SQL (дерево разбора и план выполнения) хранятся в одних и тех же разделяемых областях SQL разделяемого пула . Разделяемый пул располагается всегда в системной глобальной области . Команды SQL считаются идентичными, если:

o Их текст полностью идентичен, вплоть до регистра и количества пробелов

o Они ссылаются на одни и те же объекты

o Типы и имена используемых переменных совпадают

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

Язык SQL: классификация команд

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

— команды для построения запросов;

— команды встроенных функций и процедур;

— команды системных таблиц и триггеров;

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

— команды для работы с таблицами и данными.

Эту классификацию можно продолжать бесконечно долго, однако основные наборы команд языка SQL будут строиться именно исходя из представленных типов. Рассматривая классификацию языка, нельзя не сказать о том, что он универсален. Об этом лишний раз свидетельствует сфера его применения. Данный язык программирования и его разновидности используются не только в стандартной среде, но и в других программах, которые вы использовали, так или иначе. Можно рассматривать сферу использования SQL с точки зрения офисного программного обеспечения. Речь идет о MicrosoftAccess. Данный язык, а если говорить точнее, его разновидность MySQL, дает возможность администрировать базы данных в Интернете. Среда разработки Oracle использует команды SQL на основе своих запросов.

Применение SQL в Microsoft Access

Пакет программного обеспечения Microsoft Office считается одним из самых простых примеров использования языка программирования баз данных. Изучение данного программного продукта предусмотрено даже в школьном курсе информатики. Система управления базой данных Microsoft Access рассматривается в одиннадцатом классе. При изучении данного приложения школьники могут ознакомиться с языком разработки баз данных. Именно тогда они получают базовое понимание процесса управления базами данных.

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

SELECTPe_SurName

WHEREPe_Name = ‘Мери’;

Рассматривая синтаксис данной программы, можно сказать, что она вернет пользователю фамилию человека. В данном случае речь идет о женщине по имени Мери, имя которой хранится в базе данных Contacts. Хотя использование SQL в Access ограничено, такие простые запросы иногда сильно упрощают выполнение поставленного задания.

Использование команд SQL в Oracle

Oracle является наверное единственным серьезным конкурентом Microsoft SQL Server. Эта среда разработки и управления БД постоянно приводит к усовершенствованию функций программного продукта от компании Microsoft, поскольку конкуренция является двигателем прогресса. Команды SQL Oracle, несмотря на постоянное соперничество, повторяют SQL. Необходимо отметить, что хотя Oracle практически считается копией SQL, логика данной системы и в целом языка считается проще. При использовании определенного набора команд система Oracle не имеет такой сложной структуры. Если рассматривать возможности этих сред разработки баз данных, то у Oracle нет сложной структуры вложенных запросов. Подобная разница дает возможность во много раз ускорить работу с данными. Однако в противовес это в некоторых случаях может привести к нерациональному использованию памяти в отдельных случаях. В основном структура Oracle построена на временных таблицах и их применении. К примеру, SQL команды в данной системе строятся по аналогии со стандартами языка SQL, хотя и отличаются от него.

SELECTCONCAT(CONCAT(CONCAT(‘Сотрудник ‘, sname),

CONCAT(SUBSTR(fname, 0, 1), SUBSTR(otch, 0, 1))),

CONCAT(‘принят на работу ‘, acceptdate))

FROM employees WHERE acceptdate>to_date(‘01.01.80′,’dd.mm.yyyy’);

Такой запрос возвращает данные о сотрудниках, которые были приняты на работу в определенный промежуток времени. Хотя структура запроса и отличается от MicrosoftSQLServer, выполнение SQL-команд в этих системах похоже. Исключение составляют лишь мелкие детали.

Применение SQL в сети Internet

После появления всемирной паутины, или иначе говоря, интернета, сфера применения языка SQL была существенно расширена. В сети, как известно, хранится большой объем информации. При этом она расположена не хаотично, а размещена на серверах и сайтах по определенным критериям. За хранение информации в Интернете и других местах отвечают непосредственно базы данных. Сайты представляют собой системы управления. Сайты и их программный код, как правило, организованы на разных языках программирования. В основе баз данных лежит одна из разновидностей SQL, а именно язык создания баз данных, который ориентирован на веб-интерфейсы MySQL. Основной набор команд и синтаксис данного языка полностью копируют SQL. Однако имеются некоторые дополнения, которые и придают ему отличие от Microsoft SQL Server. Команды SQL похожи не только по синтаксису, но и по набору служебных слов. Разница заключается только в структурировании и вызове запроса. Можно рассмотреть для примера запрос для создания новой таблицы. Именно этому прежде всего и учат детей на уроках информатики.

$link = mysqli_connect(‘localhost’, «root», », ‘tester’);

if (!$link) die(«Error»);

$query = ‘create table users(

login VARCHAR(20),

password VARCHAR(20))’;

if (mysqli_query($link, $query)) echo «Таблицасоздана.»;

elseecho «Таблица не создана: «.mysqli_error();

mysqli_close($link);

Результатом выполнения такого запроса будет создание новой таблицы Users с двумя полями: логин и пароль. В данном случае синтаксис изменен под Веб. В основе лежат команды MicrosoftSQLServer.

Microsoft SQL Server: построение запросов

Одной из основных задач SQL является выборка из таблиц определенного набора данных. Для выполнения таких операций в SQL предусмотрена команда select. О ней и будет идти речь ниже. Правила построения команд довольно просты. Сама команда select в SQL строится следующим образом. Предположим, у вас имеется таблица, в которой присутствуют данные о сотруднике. Таблица имеет имя Person. Вам нужно выбрать данные о сотрудниках, дата рождения которых лежит в промежутке с первого января по первое сентября текущего года. Чтобы осуществить такую выборку необходимо выполнить команду SQL, в которой будет использоваться не только стандартная конструкция, но и примерно такое условие выбора: Select * fromPersonWhereP_BirthDay>=’01/01/2016’ andP_BirthDay<=09/01/2016’. Выполнение данной команды возвращает информацию о сотрудниках, дата рождения которых находится в заданном вами периоде. В некоторых случаях перед пользователем стоит задача вывести только ФИО сотрудника. Для этого можно построить запрос следующим образом: SelectP_Name – имя P_SurName – фамилия P_Patronimic – отчество fromPersonWhereP_BirthDay>=’01/01/2016’ andP_BirthDay<=’09/01/2016’. В данном случае речь идет только о выборе чего-либо. По сути своей он ни на что не влияет, а только предоставляет информацию в запрашиваемом виде. Если вы решили всерьез заняться изучением языка SQL, то вам придется научиться вносить изменения в базы данных, поскольку их построение без этого просто невозможно. Чуть ниже будет рассмотрено, как это делается.

Основные команды SQL для изменения информации

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

— Insert (вставить);

— Update (обновить);

— Delete (удалить).

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

Использование команды Insert

Для вставки используется команда Insert. Неправильно вставленную информацию можно всегда удалить и заново внести в базу данных. Команда Insert предназначена для вставки новых данных в таблицу. Она позволяет добавить как полный набор данных, так и выборочный. Для примера можно рассмотреть команду вставки в ранее описанную таблицу Person. Чтобы внести данные в таблицу, нужно исполнить SQL-команду, которая дает возможность вставить всю информацию в таблицу или выборочно заполнить ее.

Insertintoperson

Select ‘Иванов’,’Иван’,’Иванович’,’01/01/1990’

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

Insertintoperson(P_Name, P_SurName ,P_BerthDay)

Values (‘Джон’, ‘Джонсон’,’01/11/1988’)

Данная команда заполнит указанные ячейки. Остальные будут иметь значение null.

Команды для изменения данных

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

Update Person Set P_BirthDay = ‘10/10/1988’ where P_ID=10

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

Команды для использования встроенных функций и процедур

При помощи языка SQL можно не только построить запросы, но и создать встроенные механизмы для работы с данными. Возникают ситуации, когда необходимо использовать в теле одного запроса написанную ранее выборку. Если посудить логически, необходимо скопировать текст выборки и вставить его в нужное место. Можно обойтись и более простым решением. Давайте рассмотрим пример, когда на рабочем интерфейсе присутствует кнопка для печати отчета, например, в Excel. Данная операция будет осуществляться по мере необходимости. Для этой цели можно использовать встроенные хранимые процедуры. В данном случае команды SQL запросов заключаются в процедуру и вызываются при помощи команды SQL Exec. Предположим, что была создана специальная процедура для вывода даты рождения сотрудников с описанной ранее таблицы Person. В этом случае отсутствует необходимость писать весь запрос. Чтобы получить необходимую информацию, достаточно выполнить команду Exec и передать параметры, необходимые для выборки. В качестве примера можно рассмотреть механизм создания процедуры следующего характера:

CREATEPROCEDUREPrintPerson

@DB smalldatetime

@DE smalldatetime

SELECT * from Person

FROM HumanResources.vEmployeeDepartmentHistory

WHERE P_BerthDay>= @DB and P_BerthDay<= @DE

ANDEndDateISNULL;

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

Целостность информации. Триггеры

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

CREATE TRIGGER Person_Insert

Затем необходимо указать, для какой таблицы он применяется

Затем указываем операцию с данными. В нашем случае это будет операция изменения данных. Следующим шагом является указание переменных и таблиц.

declare @ID int. @Datesmalldatetime @nIDint. @nDatesmalldatetime

После этого объявляем курсоры для выбора данных из таблиц удаления и вставки данных

DEclare cursor C1 for select P_ID, P_BerthDay from Inserted

DEclare cursor C2 for select P_ID, P_BerthDay from deleted

if @ID = @nID and @nDate = ’01/09/2016′

sMasseges ‘Выполнить операцию невозможно. Не подходит дата’

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

— SQL SERVER: altertablePERSONdisabletriggerall(для отключения триггеров, которые были созданы для данной таблицы);

— altertablePERSONenabletriggerall (для их включения триггеров)

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

SQL - Структурированный Язык Запросов.
В данном обзоре мы рассмотрим наиболее часто встречающиеся виды SQL-запросов.
Стандарт SQL определяется ANSI (Американским Национальным Институтом Стандартов ).
SQL — это язык, ориентированный специально на реляционные базы данных.

Разделение SQL:


DDL
(Язык Определения Данных ) — так называемый Язык Описания Схемы в ANSI, состоит из команд, которые создают объекты (таблицы, индексы, просмотры, и так далее) в базе данных.
DML (Язык Манипулирования Данными ) — это набор команд, которые определяют, какие значения представлены в таблицах в любой момент времени.
DCD (Язык Управления Данными ) состоит из средств, которые определяют, разрешить ли пользователю выполнять определенные действия или нет. Они являются составными частями DDL в ANSI. Не забывайте эти имена. Это не различные языки, а разделы команд SQL сгруппированных по их функциям.

Типы данных:

SQL Server - Типы данных

Описание

bigint (int 8 )

bigint (int 8 )

binary (n)

binary (n) или image

character
(синоним char )

national character или ntext

character varying (синоним char varying varchar )

national character varying или ntext

Datetime

datetime

decimal

он же numeric

double precision

double precision

integer (int 4 ) (синоним:int )

integer (int 4 )

national character (синоним: national character , nchar )

national character

Numeric (сининимы: decimal , dec )

national character varying (синонимы: national char varying , nvarchar )

National character varying

Smalldatetime

datetime

smallint (int 2 )

smallint (int 2 )

Smallmoney

sql_variant

Больше не поддреживается

Ntext
Начиная с SQL Server 2005 не рекомендуется для использования.

Timestamp

Не поддреживается

tinyint (int 1 )

tinyint (int 1 )

Uniqueidentifier

uniqueidentifier

varbinary (n)

varbinary (n) или image

smalldatetime

datetime

smallint (int 2 )

smallint (int 2 )

smallmoney

sql_variant

Не поддерживается

timestamp

Не поддерживается

tinyint (int 1 )

tinyint (int 1 )

uniqueidentifier

uniqueidentifier

varbinary (n)

varbinary (n) или image

Таблица типов данных в SQL Server 2000

ЧТО ТАКОЕ ЗАПРОС?

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

Команда SELECT:

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

SELECT id, user_name, city, birth_day FROM users_base;

Такой запрос выведет из таблицы users_base все значения столбцов указанных через запятую после команды SELECT. Также, можно выводить все столбцы одним символом, * т.е. SELECT * FROM users_base ; - такой запрос выведет все данные из таблицы.

Структура команды SELECT:

SELECT {Имена столбцов через запятую которые необходимо вывести в запросе} FROM {имя таблицы в базе данных}
- это простейший вид запроса. Существуют дополнительные команды для удобства извлечения данных (см. далее “Функции”)

DML команды:

Значения могут быть помещены и удалены из полей, тремя командами языка DML (Язык Манипулирования Данными):
INSERT (Вставка)
UPDATE (Обновление, модификация),
DELETE (Удаление)

Команда INSERT:

INSERT INTO users_base (user_name, city, birth_day) VALUES (‘Александр’, ‘Ростов’, ’20.06.1991’);

Команда INSERT идет вместе с приставкой INTO (in to - в), далее в скобках идут имена столбцов, в которые мы должны вставить данные, далее идет команда VALUES (значения) и в скобках по очереди идут значения (обязательно нужно соблюдать очередность значений со столбцами, значения должны идти в той же очередности, как и столбцы указанные вами).

Команда UPDATE:

UPDATE users_base SET user_name = ‘Алексей’;

Команда UPDATE обновляет значения в таблице. Сначала идет сама команда UPDATE затем имя таблицы, после команда SET (установит) далее имя столбца и его значение в кавычках (кавычки ставятся в том случае если значение имеет string формат, если это числовое значение и столбец не привязан к типу данных vchar и любых других строковых типов, то кавычки не имеют смысла.)

Команда DELETE:

DELETE FROM users_base WHERE user_name = ‘Василий’;

Команда DELETE удаляет строку целиком, определяет строку по критерию WHERE (Где). В данном случае этот запрос удалил бы все строки, в которых значение столбца user_name было бы Василий. О критерии WHERE и других мы поговорим немного позже.

Критерии, функции, условия и т.п. что помогает нам в SQL:

WHERE- предложение команды SELECT и других DML команд, которое позволяет вам устанавливать предикаты, условие которых может быть или верным или неверным для любой строки таблицы. Команда извлекает только те строки из таблицы, для которых такое утверждение верно.
Пример:
SELECT id, city, birth_day FROM users_base WHERE user_name = ‘Алексей’; - такой запрос выведет только те строки, которые будут соответствовать условию WHERE, а именно все строки в которых столбец user_name имеет значение Алексей.

ORDER BY - условие для сортировки выбранных строк. Имеет 2 критерия ASC и DESC. ASC (сортировка от А до Я или от 0 до 9)

DESC (противоположно от ASC).
Пример:
SELECT id, city, birth_day FROM users_base ORDER BY user_name ASC; - такой запрос выведет значения отсортированные по столбцу user_name от А до Я (A-Z; 0-9)

Также это условие можно использовать совместно с условием WHERE.
Пример:
SELECT id, city, birth_day FROM users_base WHERE user_name = ‘Алексей’ ORDER BY id ASC;

DISTINCT (Отличный) — аргумент, который обеспечивает вас способом устранять двойные значения из вашего предложения SELECT. Т.е. если у вас имеются повторные значения в столбце, допустим, user_name то DISTINCT выведет вам только одно, например у вас в базе есть 2 человека по имени Алексей то запрос с использованием функции DISTINCT выведет вам только 1 значение, которое встретит первым...
Пример:
SELECT DISTINCT user_name FROM users_base; - такой запрос выведет нам значения всех записей в столбце user_name но они не будут повторяться, т.е. если вы имели бесконечное число повторяющихся значений, то они показаны не будут…

AND - берет два Буля (в форме A AND B) как аргументы и оценивает их по отношению к истине, верны ли они оба.
Пример:
SELECT * FROM users_base WHERE city = ‘Ростов’ AND user_name = ‘Александр’; - выведет все значения из таблицы где в одной строке встречается название города (в данном случае Ростов и имя пользователя Александр.

OR - берет два Буля (в форме A OR B) как аргументы и оценивает на правильность, верен ли один из них.

SELECT * FROM users_base WHERE city = ‘Ростов’ OR user_name = ‘Александр’; - выведет все значения из таблицы где в строке встречается название города Ростов или Имя пользователя Александр.

NOT - берет одиночный Булев (в форме NOT A) как аргументы и заменяет его значение с неверного на верное или верное на неверное.
SELECT * FROM users_base WHERE city = ‘Ростов’ OR NOT user_name = ‘Александр’; - выведет все значения из таблицы где в одной строке встретится имя города Ростов или имя пользователя не будет ровно Александр.

IN - определяет набор значений в которое данное значение может или не может быть включено.
SELECT * FROM users_base WHERE city IN (‘Владивосток’, ‘Ростов’); - такой запрос выведет все значения из таблицы в которых встретятся наименования указанных городов в столбце city

Between - похож на оператор IN. В отличии от определения по номерам из набора, как это делает IN, BETWEEN определяет диапазон, значения которого должны уменьшаться что делает предикат верным.
SELECT * FROM users_base WHERE id BETWEEN 1 AND 10; - выводит все значения из таблицы которые будут находиться в диапазоне от 1 до 10 в столбце id

COUNT - производит номера строк или не NULL значения полей, которые выбрал запрос.
SELECT COUNT (*) FROM users_base ; - выведет количество строк в данной таблице.
SELECT COUNT (DISTINCT user_name) FROM users_base ; - выведет кол-во строк с именами пользователей (не повторяющихся)

SUM - производит арифметическую сумму всех выбранных значений данного поля.
SELECT SUM (id) FROM users_base ; - выведет сумму значений всех строк столбца id.

AVG - производит усреднение всех выбранных значений данного поля.
SELECT AVG (id) FROM users_base ; - выведет среднее значение всех выбранных значений столбца id

MAX - производит наибольшее из всех выбранных значений данного поля.

MIN - производит наименьшее из всех выбранных значений данного поля.

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

CREATE TABLE users_base (id integer, user_name text, city text, birth_day datetime); - выполнение такой команды приведёт к созданию таблицы, по которой я приводил примеры… Тут всё просто, пишем команду CREATE TABLE далее имя таблицы, которую хотим создать, далее в скобках через запятую имена столбцов и их тип данных. Это стандартный вид создания таблицы в SQL. Сейчас я приведу пример создания таблиц в SQL Server 2005:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N".") AND type in (N"U"))
BEGIN
CREATE TABLE .(

NOT NULL,
NOT NULL,
NOT NULL,
PRIMARY KEY CLUSTERED
ASC


END
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N".") AND type in (N"U"))
BEGIN
CREATE TABLE .(
IDENTITY(1,1) NOT NULL,
NULL,
NULL,
PRIMARY KEY CLUSTERED
ASC
)WITH (IGNORE_DUP_KEY = OFF) ON
) ON TEXTIMAGE_ON
END
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N".") AND type in (N"U"))
BEGIN
CREATE TABLE .(
IDENTITY(1,1) NOT NULL,
NULL,
NULL,
PRIMARY KEY CLUSTERED
ASC
)WITH (IGNORE_DUP_KEY = OFF) ON
) ON
END

Синтаксис в SQL Server 2005 это уже другая тема, я просто хотел показать что я описал основы SQL программирования, до вершин вы сможете дойти сами зная основы.

При вознекновении вопросов по этой теме, пишите мне на мыло

Понравилась статья? Поделитесь ей
Наверх