Лекция Язык sql 46 вставка одного запроса внутрь другого 68 как работает подзапрос? 68 Лекция Распределенная обработка данных Архитектура распределенной обработки данных Архитектура «файл сервер»


Скачать 1.16 Mb.
Название Лекция Язык sql 46 вставка одного запроса внутрь другого 68 как работает подзапрос? 68 Лекция Распределенная обработка данных Архитектура распределенной обработки данных Архитектура «файл сервер»
страница 7/9
Тип Лекция
rykovodstvo.ru > Руководство эксплуатация > Лекция
1   2   3   4   5   6   7   8   9

Статический язык программирования SQL


Выделяют три разновидности языка SQL: интерактивный, вложенный и встроенный.
Интерактивный SQL используется для функционирования непосредственно в БД. Встроенный SQL либо состоит из команд SQL, помещенных внутри программ, которые обычно написаны на другом языке (типа Паскаля или Си), либо включен в состав команд специально разработанного языка СУБД (язык систем dBASE, RBASE и т.п.). Это делает такие программы более мощными и эффективными. Унификация полных языков современных профессиональных СУБД достигается за счет внедрения объектно-ориентированного языка четвертого поколения 4GL. Последний позволяет организовывать циклы, условные предложения, меню, экранные формы, сложные запросы к базам данных с интерфейсом, ориентированным как на алфавитно-цифровые терминалы, так и на оконный графический интерфейс (X-Windows, MS-Windows).

Интерактивный язык SQL



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


  • Data Definition Language (DDL) — язык описания данных, позволяющий создавать, удалять и изменять БД и объекты внутри них (таблицы, представления и др.).


Операторы DDL


Оператор

Описание

CREATE DATABASE

Создание новой базы данных

DROP DATABASE

Удаление базы данных

CREATE TABLE

Добавление новой таблицы к БД

DROP TABLE

Удаление таблицы из БД

ALTER TABLE

Изменение структуры имеющейся таблицы

CREATE INDEX

Создание индекса

DROP INDEX

Удаление индекса




  • Data Manipulation Language (DML) — язык манипулирования данными, позволяющий модифицировать, добавлять и удалять данные в имеющихся объектах БД.


Операторы DML


Оператор

Описание

SELECT

Выбор данных

INSERT

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

DELETE

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

UPDATE

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




  • Data Control Languages (DCL) — язык управления данными, используемый для управления пользовательскими привилегиями, для осуществления административных функций.


Операторы DCL


Оператор

Описание

GRAND

Присвоение привилегии

REVOKE

Отмена привилегии




  • Transaction Control Language (TCL) — язык для управления изменениями, сделанными группами операторов DML.


Операторы TCL


Оператор

Описание

COMMIT

Завершение транзакции и сохранения изменений в БД

ROLLBACK

Откат транзакции и отмена изменений в БД

SET TRANSACTION

Установка параметров доступа к данным в текущей транзакции




  • Cursor Control Language (CCL) — операторы для определения курсора, подготовки операторов SQL к выполнению и некоторых других операций.


Операторы CCL


Оператор

Описание

DECLARE CURSOR

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

EXPLAIN

Описание плана запроса

OPEN CURSOR

Открытие курсора при получении результатов запроса

FETCH

Получение строки из результирующего запроса

CLOSE CURSOR

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

PREPARE

Подготовка оператора SQL для выполнения

EXECUTE

Выполнение оператора SQL

DESCRIBE

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


Кроме того, SQL предоставляет возможность выполнять в своих предложениях:

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

  • упорядочение строк и (или) столбцов при выводе содержимого таблиц на печать или экран монитора;

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

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

  • агрегирование данных: группирование данных и применение к этим группам таких операций, как среднее, сумма, максимум, минимум, число элементов и т.п.


Правила присвоения имен объектам БД





  • Должны начинаться с буквы.

  • Могут включать от 1 до 30 символов.

  • Могут содержать символы A-Z, a-z, А-Я, а-я, 0-9, _ (подчеркивание), $ и #.

  • Не могут совпадать с именем другого объекта, принадлежащего этому же пользователю.

  • Не могут совпадать с зарезервированным словом сервера базы данных.



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





  1. Начальная точка оператора — обозначает начало главной синтаксической линии для оператора. Любой элемент, появляющийся непосредственно на плавной синтаксической линии, является обязательным элементом, а любой элемент, который появляется ниже, считается необязательным элементом,

  2. Главная синтаксическая линия — определяет порядок всех обязательных и необязательных элементов для оператора.

Чтобы построить синтаксис оператора, нужно следовать по этой линии слева направо (или в направлении стрелок).

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

  2. Буквенная запись — имя значения, которое явно вводится в оператор.

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

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

  2. Необязательный элемент – любой элемент или группа элементов, которые располагаются ниже основной синтаксической линии.

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

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

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

  1. Дополнительный необязательный элемент — любой элемент или группа элементов, которые появляются ниже необязательного элемента.

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

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

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

  3. Конечная точка оператора — обозначает конец главной синтаксической линии для оператора.

  4. Начальная точка определяемого терма — обозначает начало основной синтаксической линии для определяемого терма.

  5. Конечная точка определяемого терма — обозначает конец главной синтаксической линии для определяемого терма.


Все операторы SQL имеют вид, например:
SELECT * FROM [Заказы] WHERE НОМЕР_ЗАКАЗА > 1024
Каждый оператор SQL начинается с глагола, представляющего собой ключевое слово, которое определяет, что именно делает этот оператор (SELECT, INSERT, DELETE, …). В операторе содержатся также предложения, содержащие сведения о том, над какими данными производятся операции. Каждое предложение начинается с ключевого слова, такого как FROM, WHERE и др. Структура предложения зависит от его типа: ряд предложений содержит имена таблиц или полей, некоторые могут содержать дополнительные ключевые слова, константы и выражения.

Модификация метаданных



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

Оператор CREATE DATABASE

Оператор CREATE DATABASE создает новую БД с именем имя базы данных:


CREATE DATABASE имя базы данных

[ON

{ [PRIMARY] (NAME = logical_file_name,

FILENAME = 'os_file_name'

[, SIZE = size]

[, MAXSIZE = max_size]

[, FILEGROWTH = growth_increment] )

} [,...n]

]

[LOG ON

{ ( NAME = logical_file_name,

FILENAME = 'os_file_name'

[, SIZE = size] )

} [,...n]

]

[FOR RESTORE],
где FILENAME - полный путь и имя файла для размещения БД, должен указывать на локальный диск компьютера, на котором установлен SQL Server;

SIZE - начальный размер каждого файла в Мб;

MAXSIZE - максимальный размер файла в Мб, если не указано, что размер не ограничивается;

FILEGROWTH - единица увеличения файла, указывается в Мб (по умолчанию) или в процентах (т.е. к числу добавляется %), значение 0 запрещает увеличение файла.
Если БД с таким именем уже существует, то выполнение этого оператора приводит к ошибке.
Например,
CREATE DATABASE Товарооборот

ON

PRIMARY (NAME=Товарооборот_Data,

FILENAME='c:\mssql7\data\sqlstep_data.mdf',

SIZE=5,

MAXSIZE=10,

FILEGROWTH=10% )

LOG ON (

NAME=Товарооборот_Log,

FILENAME='c:\mssql7\data\sqlstep_log.ldf',

SIZE=1,

MAXSIZE=5,

FILEGROWTH=1

)

Оператор CREATE TABLE



Для создания новой таблицы (пустой) необходимо использовать оператор CREATE TABLE, синтаксис которого имеет вид:
CREATE TABLE таблица

(столбец1 тип1 [(длина1)][CONSTRAINT

столбец-ограничение1]

[, столбец2 тип2 [(длина2)] [CONSTRAINT

столбец-ограничение2]

[, …]]

[CONSTRAINT таблица-ограничение1_

[, таблица-ограничение2 [, …]]]);
В этом операторе следует указать имя таблицы, имена полей, типы данных для них, длину (для некоторых типов полей) и, если нужно, серверные ограничения (с применением ключевого слова CONSTRAINT). Попытка создать таблицу с уже используемым именем приводит к появлению ошибки.

Например, запрос
CREATE TABLE [Пример]

(ФАМИЛИЯ varchar(50) NOT NULL,

ИМЯ varchar(50) NOT NULL,

EMail varchar(50),

ДОМАШНЯЯ_СТРАНИЦА varchar(255)

)
Мы можем расширить эту таблицу посредством добавления поля ПЕРСОНАЛЬНЫЙ_КОД, которое будет использовано как первичный ключ:
CREATE TABLE [Пример]

(ПЕРСОНАЛЬНЫЙ_КОД Integer NOT NULL PRIMARY KEY,

ФАМИЛИЯ varchar(50) NOT NULL,

ИМЯ varchar(50) NOT NULL,

EMail varchar(50),

ДОМАШНЯЯ_СТРАНИЦА varchar(255))
и указать, что комбинация полей ФАМИЛИЯ и ИМЯ должна быть уникальна:
CREATE TABLE [Пример]

(ПЕРСОНАЛЬНЫЙ_КОД Integer NOT NULL PRIMARY KEY,

ФАМИЛИЯ varchar(50) NOT NULL,

ИМЯ varchar(50) NOT NULL,

EMail varchar(50),

ДОМАШНЯЯ_СТРАНИЦА varchar(255),

CONSTRAINT SimpleConstraint UNIQUE

(ФАМИЛИЯ, ИМЯ)

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

  1. INTEGER - целое число (обычно до 10 значащих цифр и знак);

  2. SMALLINT - короткое целое (обычно до 5 значащих цифр и знак);

  3. DECIMAL(p,q) - десятичное число, имеющее p цифр (0 < p < 16) и знак; с помощью q задается число цифр справа от десятичной точки (q < p, если q = 0, оно может быть опущено);

  4. FLOAT - вещественное число с 15 значащими цифрами и целочисленным порядком, определяемым типом СУБД;

  5. CHAR(n) - символьная строка фиксированной длины из n символов (0 < n < 256);

  6. VARCHAR(n) - символьная строка переменной длины, не превышающей n символов (n > 0 и разное в разных СУБД, но не меньше 4096);

  7. DATE - дата в формате, определяемом специальной командой (по умолчанию mm/dd/yy); поля даты могут содержать только реальные даты, начинающиеся за несколько тысячелетий до н.э. и ограниченные пятым-десятым тысячелетием н.э.;

  8. TIME - время в формате, определяемом специальной командой, (по умолчанию hh.mm.ss);

  9. DATETIME - комбинация даты и времени;

  10. MONEY - деньги в формате, определяющем символ денежной единицы ($, руб, ...) и его расположение (суффикс или префикс), точность дробной части и условие для показа денежного значения.


В некоторых СУБД еще существует тип данных LOGICAL, DOUBLE и ряд других.
При определении типа столбца можно определять NULL или NOT NULL, т.е. может или нет столбец содержать значения NULL. По умолчанию установлено значение NULL.
Значение по умолчанию DEFAULT должно быть константой, оно не может быть функцией или выражением. Если для данного столбца не задается никакой величины DEFAULT, то СУБД автоматически назначает ее. Если столбец может принимать NULL как допустимую величину, то по умолчанию присваивается значение NULL. Если столбец объявлен как NOT NULL, то значение по умолчанию зависит от типа столбца: для числовых типов значение по умолчанию равно 0; для типов даты и времени значение по умолчанию равно соответствующей нулевой величине для данного типа; для строковых типов значением по умолчанию является пустая строка.
PRIMARY KEY определяет столбец как первичный ключ. UNIQUE определяет столбец как альтернативный ключ. Предложения PRIMARY KEY и UNIQUE определяют так же и индексы, которые должны содержать уникальные значения. Предложение INDEX дает возможность добавить индекс к создаваемой таблице.
SQL позволяет создавать временные таблицы, «время жизни» которых – сеанс работы БД (время от открытия до закрытия БД).
Таблица может быть глобальной, т.е. доступной всей прикладной программе, создавшей ее:
CREATE GLOBAL TEMPORARY TABLE Продавцы

(пном integer,

пимя char(10),

город char(10),

комм decimal);
Она может быть локальной, доступной только для модуля программы, в котором она была создана:
CREATE LOCAL TEMPORARY TABLE Продавцы

(пном integer,

пимя char(10),

город char(10),

комм decimal);

CREATE INDEX


CREATE [UNIQUE] INDEX имя индекса ON имя таблицы (имя столбца[(длина)],...)
Оператор CREATE INDEX дает возможность добавить индексы к существующим таблицам.
Список столбцов в форме (имя столбца_1, имя столбца_2,...) создает индекс для нескольких столбцов. Величины индексов формируются путем конкатенации величин указанных столбцов.
Предложение UNIQUE указывает, что никаким двум строкам в индексируемой таблице не позволяется принимать одно и то же значение для индексируемого столбца (или комбинации столбцов) в одно и то же время.
Для столбцов типов CHAR и VARCHAR с помощью параметра имя столбца(длина) могут создаваться индексы, для которых используется только часть. Пример, приведенный ниже, создает индекс, используя первые 10 символов столбца Name:
CREATE INDEX part_of_name ON Clients (Name(10))
Поскольку большинство имен обычно имеют отличия друг от друга в первых 10 символах, данный индекс не должен быть намного медленнее, чем созданный из столбца Name целиком. Кроме того, используя неполные столбцы для индексов, можно сделать файл индексов намного меньше, а это позволяет сэкономить место на диске и к тому же повысить скорость операций INSERT.

Оператор ALTER TABLE



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


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


ALTER TABLE таблица ADD [COLUMN] столбец тип данных

[(размер)]

[CONSTRAINT ограничение на одиночный столбец]
В запросах такого вида определяются имя таблицы, имя нового поля, его тип данных и, если нужно, размер. Помимо этого можно указать серверное ограничение, связанное с данным полем. Например, для добавления поля ТЕЛЕФОН к таблице "Пример" можно выполнить следующий запрос:
ALTER TABLE [Пример] ADD ТЕЛЕФОН varchar(30)
Столбец будет добавлен последним и со значением NULL для всех строк таблицы.


  1. Вторая разновидность оператора ALTER TABLE применяется для добавления серверных ограничений к таблице, а ее синтаксис имеет вид:


ALTER TABLE таблица ADD CONSTRAINT ограничение
Такие запросы дают возможность только добавлять индексы, позволяющие использовать соответствующие поля в качестве первичных или внешних ключей.
ALTER TABLE [Пример] ADD

CONSTRAINT SimpleConstraint UNIQUE (ФАМИЛИЯ, ИМЯ)


  1. Третья разновидность предложения ALTER TABLE применяется для удаления поля из таблицы:


ALTER TABLE таблица DROP [COLUMN] столбец
Ключевое слово COLUMN использовать не обязательно, например:
ALTER TABLE [Пример] DROP ТЕЛЕФОН


  1. Для удаления проиндексированных полей следует сначала удалить индекс. Это можно сделать с помощью четвертой разновидности предложения ALTER TABLE:


ALTER TABLE таблица DROP CONSTRAINT индекс
Пример:
ALTER TABLE [Пример] DROP CONSTRAINT Primary Key


Оператор DROP



Для удаления БД, таблиц или индексов можно использовать оператор DROP, имеющий следующие разновидности:


  1. применяется для удаления БД:


DROP DATABASE имя базы данных


  1. применяется для удаления таблицы из БД:


DROP TABLE таблица


  1. используется для удаления индекса:


DROP INDEX индекс ON таблица
Надо быть создателем таблицы, чтобы иметь возможность удалить ее.

Выбор данных



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

FROM список таблиц

[WHERE условия]

[GROUP BY выражение группировки]

[HAVING условие группы]

[ORDER BY условие на порядок следования [ASC|DESC]],
где SELECT - Список, включающий, по крайней мере, один столбец.

DISTINCT - Подавляет выборку дубликатов.

* - Выбирает все столбцы.

Список столбцов - Выбирает заданные столбцы.

Псевдоним - Дает выбранным столбцам другие заголовки.

Список таблиц - Указывает таблицы, содержащие столбцы.

WHERE - Ограничивает запрос строками, удовлетворяющими заданным условиям.

Условия - Состоит из имен столбцов, выражений, констант и операторов сравнения.

GROUP BY - Разбивает строки на группы.

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

HAVING - Вывод конкретных групп.

Условие группы - Задает условие отбора групп для вывода.

ORDER BY - Задает порядок вывода строк.

ASC - Сортирует строки в порядке возрастания; используется по умолчанию.

DESC - Сортирует строки в порядке убывания.
Операторы SELECT должны содержать слова SELECT и FROM. Другие ключевые слова, такие как WHERE или ORDER BY, являются необязательными.
Если выбор данных осуществляется из нескольких таблиц, и при этом выбираются одноименные поля из разных таблиц, следует ссылаться на имена таблиц для полной идентификации полей, включаемых в результирующий набор данных, например:
SELECT [Клиенты].НАЗВАНИЕ_Компании,
[Компании].НАЗВАНИЕ_КОМПАНИИ

FROM Клиенты, Компании

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



Для указания имен таблиц, из которых выбираются записи, применяется ключевое слово FROM, например:
SELECT * FROM [Клиенты]
Этот запрос возвратит все поля из таблицы "Клиенты".
Если в результирующем наборе данных нужны только поля НАЗВАНИЕ КОМПАНИИ и ИМЯ СОТРУДНИКА, мы можем ввести следующее предложение SELECT:
SELECT НАЗВАНИЕ_КОМПАНИИ, ИМЯ_ЗАКАЗЧИКА FROM [Клиенты]
Пример запроса более чем к одной таблице:
SELECT [Клиенты].НАЗВАНИЕ_КОМПАНИИ,
[Компании].НАЗВАНИЕ_КОМПАНИИ
FROM [Клиенты], [Компании]

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



Для фильтрации результатов, возвращаемых оператором SELECT, можно использовать предложение WHERE, синтаксис которого имеет вид:
WHERE выражение1 [{AND|OR} выражение2 […]]
Например, вместо получения полного списка продуктов можно ограничиться только теми из них, у которых значение поля КОД КАТЕГОРИИ равно 4:
SELECT * FROM [Продукты]

WHERE КОД_КАТЕГОРИИ = 4
В предложении WHERE можно использовать различные выражения, например:
SELECT * FROM [Продукты]

WHERE КОД_КАТЕГОРИИ = 2 AND КОД_ПОСТАВЩИКА > 10
или
SELECT ПРОДУКТ, ЦЕНА FROM [Продукты]

WHERE КОММЕНТАРИЙ IS NOT NULL
Выражение IS NOT NULL означает, что соответствующий столбец результирующего набора данных не может содержать пустые значения.
В предложении WHERE можно использовать один из шести операторов сравнения, определенных в SQL:
<, <=, <>, =, >, >=
Помимо перечисленных выше простых операторов сравнения можно использовать и специальные операторы сравнения, представленные в таблице:


Оператор

Описание

ALL

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

ANY

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

BETWEEN

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

IN

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

LIKE

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

IS NULL

Является неопределенным значением


Приведем несколько примеров применения этих операторов. Для сопоставления данных с маской применяется ключевое слово LIKE:
SELECT НАЗВАНИЕ_КОМПАНИИ, ИМЯ_ЗАКАЗЧИКА

FROM [Клиенты]

WHERE НАЗВАНИЕ_КОМПАНИИ LIKE 'M%'
В данной маске символ % заменяет любую последовательность символов, а символ _ - один любой символ. Тот же самый результат может быть получен следующим способом:
SELECT НАЗВАНИЕ_КОМПАНИИ, ИМЯ_ЗАКАЗЧИКА

FROM [Клиенты]

WHERE НАЗВАНИЕ_КОМПАНИИ BETWEEN 'M' AND 'N'
Используя оператор IN, можно задать список значений, в котором должно содержаться значение поля:
SELECT НАЗВАНИЕ_КОМПАНИИ, ИМЯ_ЗАКАЗЧИКА

FROM [Клиенты]

WHERE КОД_КЛИЕНТА IN ('ALFKI', 'BERGS', 'VINET')

Операторы AND, OR и NOT



Рассмотрим следующий запрос:
SELECT НАЗВАНИЕ_КОМПАНИИ, ИМЯ_ЗАКАЗЧИКА

FROM [Клиенты]

WHERE НАЗВАНИЕ_КОМПАНИИ LIKE 'С%' AND СТРАНА = 'РОССИЯ'
Результатом выполнения этого запроса будет список компаний-заказчиков, находящихся в России, название которых начинается с буквы С.
Оператор OR позволяет выбрать записи, удовлетворяющие хотя бы одному из перечисленных условий, в то время как оператор NOT используется для исключения из набора данных тех записей, которые удовлетворяют этому условию. Например, можно применять оператор OR для поиска всех компаний-заказчиков, либо находящихся в Калифорнии, либо имеющих название, начинающееся с буквы S (и при этом находящихся где угодно):
SELECT НАЗВАНИЕ_КОМПАНИИ, ИМЯ_ЗАКАЗЧИКА

FROM [Клиенты]

WHERE НАЗВАНИЕ_КОМПАНИИ LIKE 'S%' OR РЕГИОН ='CA'
В этом случае результирующий набор данных будет содержать записи, в которых значение поля НАЗВАНИЕ_КОМПАНИИ удовлетворяет первому условию, а также все записи, в которых значение поля РЕГИОН удовлетворяет второму условию.
Для исключения некоторых заказчиков из результирующего набора данных можно использовать запрос вида:
SELECT НАЗВАНИЕ_КОМПАНИИ, ИМЯ_ЗАКАЗЧИКА

FROM [Клиенты]

WHERE СТРАНА NOT IN ('USA', 'UK')
В результате выполнения этого запроса мы получим список заказчиков из всех стран, кроме США и Украины.

Предложение ORDER BY



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

[, столбец2 [{ASC|DESC}][,…]
Например, для сортировки списка сотрудников по фамилии и затем по имени следует использовать следующий SQL-запрос:
SELECT ФАМИЛИЯ, ИМЯ, ОТЧЕСТВО

FROM [Сотрудники]

ORDER BY ФАМИЛИЯ, ИМЯ
Если требуется отсортировать данные в убывающем порядке (например, необходим список продуктов в порядке убывания цен), используется ключевое слово DESC:
SELECT НАЗВАНИЕ_ПРОДУКТА, ЦЕНА

FROM [Продукты]

ORDER BY ЦЕНА DESC


Используя предложение SELECT и ключевое слово INTO, мы можем создавать новые таблицы, основанные на условии, указанном в предложении WHERE. Например:
SELECT *

INTO [Новые заказы]

FROM [Заказы]

WHERE ДАТА_ЗАКАЗА > 1/1/97
Этот запрос создаст новую таблицу "Новые заказы" и заполнит ее данными о заказах, начиная с 1 января 1997 года.

Связывание таблиц



С помощью языка SQL можно создавать запросы, позволяющие извлечь данные из нескольких таблиц. Одна из возможностей сделать это заключается в связывании таблиц по одному или нескольким полям. Без связывания таблиц в результате запроса получится набор данных, содержащий все возможные комбинации строк каждой из исходных таблиц:
SELECT НАЗВАНИЕ_ПРОДУКТА, НАЗВАНИЕ_КАТЕГОРИИ

FROM [Продукты], [Категории]
В то время как запрос
SELECT НАЗВАНИЕ_ПРОДУКТА, НАЗВАНИЕ_КАТЕГОРИИ

FROM [Продукты], [Категории]

WHERE [Продукты].КОД_КАТЕГОРИИ = [Категории].КОД_КАТЕГОРИИ
приводит к отображению списка продуктов с указанием, к какой категории принадлежит данный продукт.
В общем случае синтаксис для связывания таблиц имеет вид:
SELECT список столбцов

FROM таблица1, таблица2

WHERE таблица1.столбец1 = таблица2.столбец2
Существует несколько типов связывания таблиц. Например, следующий оператор SQL осуществляет так называемое внутреннее соединение таблиц (inner join) - в этом случае в результирующем наборе данных содержатся записи, в которых значения в связанных полях совпадают:
SELECT НАЗВАНИЕ_ПРОДУКТА, НАЗВАНИЕ_КАТЕГОРИИ

FROM [Продукты] INNER JOIN [Категории]

ON [Продукты].КОД_КАТЕГОРИИ = [Категории].КОД_КАТЕГОРИИ
Внешнее соединение (outer joins) позволяют нам включить в результат запроса все строки из одной таблицы и соответствующие им строки из другой таблицы, например:
SELECT НАЗВАНИЕ_ПРОДУКТА, НАЗВАНИЕ_КАТЕГОРИИ

FROM [Продукты] LEFT OUTER JOIN [Категории]

ON [Продукты].КОД_КАТЕГОРИИ = [Категории].КОД_КАТЕГОРИИ
Это было так называемое левое внешнее соединение (left outer join). Существуют также правые внешние соединения (right outer join), возвращающие все строки из второй (то есть правой) таблицы и соответствующие им строки из другой таблицы:
SELECT НАЗВАНИЕ_ПРОДУКТА, НАЗВАНИЕ_КАТЕГОРИИ

FROM [Продукты] RIGHT OUTER JOIN [Категории]

ON [Продукты].КОД_КАТЕГОРИИ = [Категории].КОД_КАТЕГОРИИ
Комбинируя левое и правое внешние соединения, можно получить полное внешнее соединение, возвращающее все данные из обеих таблиц:
SELECT НАЗВАНИЕ_ПРОДУКТА, НАЗВАНИЕ_КАТЕГОРИИ

FROM [Продукты] FULL OUTER JOIN [Категории]

ON [Продукты].КОД_КАТЕГОРИИ = [Категории].КОД_КАТЕГОРИИ
Для получения всех комбинаций строк из обеих таблиц можно использовать ключевое слово CROSS JOIN без указания связываемых полей:
SELECT НАЗВАНИЕ_ПРОДУКТА, НАЗВАНИЕ_КАТЕГОРИИ

FROM [Продукты] CROSS JOIN [Категории]
Если в запросе используется более трех таблиц, можно использовать вложенные соединения.

Предложение GROUP BY



Для вычисления суммарных значений на основе данных одной или нескольких таблиц можно использовать предложение GROUP BY, имеющее такой синтаксис:
GROUP BY {столбец1}[,…]
Например, запрос
SELECT [Клиенты].КОД_КЛИЕНТА,

COUNT ([Заказы].КОД_ЗАКАЗА) AS КОЛИЧЕСТВО_ЗАКАЗОВ

FROM [Клиенты] INNER JOIN [Заказы]

ON [Клиенты].КОД_КЛИЕНТА = [Заказы].КОД_ЗАКАЗА

GROUP BY [Клиенты].КОД_КЛИЕНТА

ORDER BY КОЛИЧЕСТВО_ЗАКАЗОВ DESC
связывает две таблицы, сортирует их по полю КОД_КЛИЕНТА, для каждого значения поля КОД_КЛИЕНТА создает одну строку в результирующем наборе данных и вычисляет количество значений поля КОД_ЗАКАЗА для каждого значения КОД_КЛИЕНТА.
В приведенном выше примере запроса мы использовали в предложении SELECT агрегатную функцию COUNT, вычисляющую количество значений.
В таблице дан список наиболее часто используемых агрегатных функций:


Функция

Описание

AVG

Вычисляет среднее

COUNT

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

MAX

Вычисляет наибольшее значение в столбце

MIN

Вычисляет наименьшее значение в столбце

SUM

Вычисляет сумму значений в столбце

STDEV

Вычисляет наименьшее стандартное отклонение для данного столбца

Реализация операций реляционной алгебры оператором SELECT


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

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

SELECT *

FROM Clients

WHERE City = 'Тверь'

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

SELECT DISTINCT City FROM Clients

□ Объединение двух таблиц содержит те строки, которые есть либо в первой, либо во второй, либо в обеих таблицах. Пример:

SELECT * FROM Clients WHERE Age = (SELECT MIN(Age) FROM Clients)

UNION

SELECT * FROM Clients WHERE Age = (SELECT MAX(Age) FROM Clients)

□ Пересечение двух таблиц содержит только те строки, которые есть и в первой, и во второй. Пример:

SELECT * FROM Clients WHERE Age IN (SELECT MIN(Age) FROM Clients)

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

SELECT * FROM Clients WHERE City NOT IN

(SELECT City FROM Clients GROUP BY City HAVING Count(*)<=10)

□ Декартово произведение таблиц и различные виды соединений рассмотрены ниже.

Модификация данных



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

Оператор UPDATE



Для изменения значений в одном или нескольких столбцах таблицы применяется оператор UPDATE. Синтаксис этого оператора имеет вид:
UPDATE table SET столбец1 = выражение1 [, столбец2 = выражение2] […]

[WHERE критерий]
Выражение в предложении SET может быть константой или результатом вычислений. Например, для повышения цен всех продуктов, стоимостью менее 10 долл. можно выполнить следующий запрос:
UPDATE [Продукты]

SET ЦЕНА = ЦЕНА * 1.1

WHERE ЦЕНА < 10

Оператор DELETE



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

FROM таблица

[WHERE критерий]
Предложение WHERE не является обязательным, но если забыть его включить, то из таблицы будут удалены все записи.
Например, для удаления из списка всех продуктов, которые больше не поставляются, можно выполнить следующий запрос:
DELETE

FROM [Продукты]

WHERE ПОСТАВКА = 1
Полезно использовать оператор SELECT с тем же синтаксисом, что и оператор DELETE, чтобы проверить, какие именно записи будут удалены, прежде чем действительно их удалять:
SELECT НАЗВАНИЕ_ПРОДУКТА

FROM [Продукты]

WHERE ПОСТАВКА = 1
Можно использовать в предложении WHERE более сложный критерий для определения того, какие записи должны быть удалены. Предположим, нам нужно удалить из списка клиентов тех из них, кто не имел заказов до определенной даты. Сначала для этого необходимо выполнить следующий SELECT, чтобы определить, что именно мы удаляем:
SELECT НАЗВАНИЕ_КОМПАНИИ

FROM [Клиенты]

WHERE [Клиенты].КОД_КЛИЕНТА NOT IN

(SELECT КОД_КЛИЕНТА FROM [Заказы] WHERE ДАТА_ЗАКАЗА > 01/01/96)
а затем заменить оператор SELECT на оператор DELETE:
DELETE FROM [Клиенты]

WHERE [Клиенты].КОД_КЛИЕНТА NOT IN

(SELECT КОД_КЛИЕНТА FROM [Заказы] WHERE ДАТА_ЗАКАЗА > 01/01/96)

Оператор INSERT



Для добавления записей в таблицы следует использовать оператор INSERT, синтаксис которого имеет вид:
INSERT [INTO] таблица

([список столбцов]

{VALUES ({DEFAULT|NULL|выражение}

}[…]

)
Например, для добавления нового клиента в таблицу "Клиенты" можно использовать следующий запрос:
INSERT INTO [Клиенты]

(КОД_КЛИЕНТА, НАЗВАНИЕ_КОМПАНИИ)

VALUES

('XYZFO', 'XYZ Deli')

1   2   3   4   5   6   7   8   9

Похожие:

Лекция Язык sql 46 вставка одного запроса внутрь другого 68 как работает подзапрос? 68 Лекция Распределенная обработка данных Архитектура распределенной обработки данных Архитектура «файл сервер» icon Тема Архитектура предприятия Исторические аспекты архитектуры предприятия....
Ения. Комплекс проектов совершенствования деятельности. Пути развития архитектуры предприятия. Типичные пользователи. Архитектура...
Лекция Язык sql 46 вставка одного запроса внутрь другого 68 как работает подзапрос? 68 Лекция Распределенная обработка данных Архитектура распределенной обработки данных Архитектура «файл сервер» icon План лекции Язык sql в субд. Структура команды sql. Типы данных. Выражения
База данных (БД) – это информационная модель объекта – именованная совокупность данных, отображающая состояние объектов, их свойства...
Лекция Язык sql 46 вставка одного запроса внутрь другого 68 как работает подзапрос? 68 Лекция Распределенная обработка данных Архитектура распределенной обработки данных Архитектура «файл сервер» icon Пер с англ. — М. Издательский
Архитектура системы баз данных 65 Глава Введение в реляционные базы данных 92
Лекция Язык sql 46 вставка одного запроса внутрь другого 68 как работает подзапрос? 68 Лекция Распределенная обработка данных Архитектура распределенной обработки данных Архитектура «файл сервер» icon Программа фиэб направление подготовки 230100 «Информатика и вычислительная...
Архитектура баз данных. Модели данных. Иерархические, сетевые, реляционные модели данных. Модель «сущность-связь». Уровни проектирования:...
Лекция Язык sql 46 вставка одного запроса внутрь другого 68 как работает подзапрос? 68 Лекция Распределенная обработка данных Архитектура распределенной обработки данных Архитектура «файл сервер» icon Лекция I и проблема языка и сознания лекция II 31 слово и его семантическое...
Монография представляет собой изложение курса лекций, про* читанных автором на факультете психологии Московского государственного...
Лекция Язык sql 46 вставка одного запроса внутрь другого 68 как работает подзапрос? 68 Лекция Распределенная обработка данных Архитектура распределенной обработки данных Архитектура «файл сервер» icon Лекция I и проблема языка и сознания лекция II 31 слово и его семантическое...
Монография представляет собой изложение курса лекций, про* читанных автором на факультете психологии Московского государственного...
Лекция Язык sql 46 вставка одного запроса внутрь другого 68 как работает подзапрос? 68 Лекция Распределенная обработка данных Архитектура распределенной обработки данных Архитектура «файл сервер» icon Инструкция по переносу данных по «Луч» из бд ms access в бд ms sql server Москва, 2011
По «Луч») является техническим документом Небанковской кредитной организации закрытого акционерного общества «Национальный расчетный...
Лекция Язык sql 46 вставка одного запроса внутрь другого 68 как работает подзапрос? 68 Лекция Распределенная обработка данных Архитектура распределенной обработки данных Архитектура «файл сервер» icon 1. Показать развитие и классификацию однопроцессорных архитектур...
Архитектура общая функциональная и структурная организация машины, определяющая методы кодирования данных, состав, назначение, принципы...
Лекция Язык sql 46 вставка одного запроса внутрь другого 68 как работает подзапрос? 68 Лекция Распределенная обработка данных Архитектура распределенной обработки данных Архитектура «файл сервер» icon Содержание Введение Лекция Базы данных и файловые системы Файловые системы 1 Структуры файлов
Лекция Ранние подходы к организации бд. Системы, основанные на инвертированных списках, иерархические и сетевые субд. Примеры. Сильные...
Лекция Язык sql 46 вставка одного запроса внутрь другого 68 как работает подзапрос? 68 Лекция Распределенная обработка данных Архитектура распределенной обработки данных Архитектура «файл сервер» icon Литература 58 Лекция №15 Понятия и сущность данных, информации, знаний....
Лекция № Поиск полных текстов научных документов в мировых издательских системах 33
Лекция Язык sql 46 вставка одного запроса внутрь другого 68 как работает подзапрос? 68 Лекция Распределенная обработка данных Архитектура распределенной обработки данных Архитектура «файл сервер» icon Многоканальный цифровой комплекс регистрации сигналов «фантом» руководство по эксплуатации
...
Лекция Язык sql 46 вставка одного запроса внутрь другого 68 как работает подзапрос? 68 Лекция Распределенная обработка данных Архитектура распределенной обработки данных Архитектура «файл сервер» icon Управление ит-инфраструктурой
Понятие «информационно-технологическая инфраструктура», связь с понятиями «архитектура предприятия», «архитектура информационной...
Лекция Язык sql 46 вставка одного запроса внутрь другого 68 как работает подзапрос? 68 Лекция Распределенная обработка данных Архитектура распределенной обработки данных Архитектура «файл сервер» icon Приказ о назначении ответственного лица в области обработки и защиты...
Постановление Правительства Российской Федерации от 1 ноября 2012 г. №1119 «Об утверждении требований к защите персональных данных...
Лекция Язык sql 46 вставка одного запроса внутрь другого 68 как работает подзапрос? 68 Лекция Распределенная обработка данных Архитектура распределенной обработки данных Архитектура «файл сервер» icon Лекция Предмет, задачи и методы перевода
Лекция Общая характеристика современной теории перевода. Лекция Переводческая эквивалентность
Лекция Язык sql 46 вставка одного запроса внутрь другого 68 как работает подзапрос? 68 Лекция Распределенная обработка данных Архитектура распределенной обработки данных Архитектура «файл сервер» icon Лекция Основы процесса тестирования по 3
Лекция Как протестировать неизвестную программу или наращиваемый подход к первичному функциональному тестированию по. 17
Лекция Язык sql 46 вставка одного запроса внутрь другого 68 как работает подзапрос? 68 Лекция Распределенная обработка данных Архитектура распределенной обработки данных Архитектура «файл сервер» icon Пояснительная записка Студент
Организация данных. Sql дает пользователю возможность изменять структуру представления данных, а также устанавливать отношения между...

Руководство, инструкция по применению




При копировании материала укажите ссылку © 2024
контакты
rykovodstvo.ru
Поиск