Хабибулин А.
Вступление:
SQL - Структурированный Язык Запросов.
В данном обзоре мы рассмотрим наиболее часто встречающиеся виды SQL-запросов.
Стандарт SQL определяется ANSI ( Американским Национальным Институтом Стандартов ).
SQL - это язык, ориентированный специально на реляционные базы данных.
Разделение SQL:
DDL ( Язык Определения Данных ) - так называемый Язык Описания Схемы в ANSI, состоит из команд, которые создают объекты (таблицы, индексы, просмотры, и так далее) в базе данных.
DML ( Язык Манипулирования Данными ) - это набор команд, которые определяют, какие значения представлены в таблицах в любой момент времени.
DCL ( Язык Управления Данными ) состоит из средств, которые определяют, разрешить ли пользователю выполнять определенные действия или нет. Они являются составными частями DDL в ANSI. Не забывайте эти имена. Это не различные языки, а разделы команд SQL сгруппированных по их функциям.
Типы данных:
SQL Server - Типы данных |
Описание |
bigint (int 8) |
bigint (int 8) |
binary (n) |
binary (n) или image |
Bit |
bit |
character (синоним char) |
national character или ntext |
character varying (синоним char varying varchar) |
national character varying или ntext |
Datetime |
datetime |
decimal |
он же numeric |
double precision |
double precision |
Float |
float |
Image |
image |
integer (int 4) (синоним:int) |
integer (int 4) |
Money |
money |
national character (синоним: national character, nchar) |
national character |
Ntext |
ntext |
Numeric (сининимы: decimal, dec) |
numeric |
national character varying (синонимы: national char varying, nvarchar) |
National character varying |
Real |
real |
Smalldatetime |
datetime |
smallint (int 2) |
smallint (int 2) |
Smallmoney |
Money |
sql_variant |
Больше не поддреживается |
Text |
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 |
Money |
sql_variant |
Не поддерживается |
text |
Ntext |
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'[dbo].[Price]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[Price](
[ID] [int] IDENTITY(1,1) NOT NULL,
[NameElement] [text] NOT NULL,
[DateAdded] [datetime] NOT NULL,
[Description] [text] NOT NULL,
PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
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'[dbo].[Clients]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[Clients](
[ID] [int] IDENTITY(1,1) NOT NULL,
[FirstName] [text] NULL,
[LastName] [text] NULL,
PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
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'[dbo].[Orders]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[Orders](
[ID] [int] IDENTITY(1,1) NOT NULL,
[IDClient] [int] NULL,
[IDPrice] [int] NULL,
PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
END
Синтаксис в SQL Server 2005 это уже другая тема, я просто хотел показать что я описал основы SQL программирования, до вершин вы сможете дойти сами зная основы.
Ссылки по теме