ALTE R TABLE имя таблицы операции



SQL- структуризованный язык запросов

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

Язык SQL (Structured Query Language - структурированный язык запросов) ориентирован на операции с данными, представленными в виде логически взаимосвязанных совокупностей таблиц. Особенность предложений этого языка состоит в том, что они ориентированы в большей степени на конечный результат обработки данных, чем на процедуру этой обработки. SQL сам определяет, где находятся данные, какие индексы и даже наиболее эффективные последовательности операций следует использовать для их получения: не надо указывать эти детали в запросе к базе данных.

SQL был разработан начале 70-х годов прошлого века в отделениях фирмы IBM. И уже к 80-ым годам стал фактическим стандартом для профессиональных реляционных СУБД. К настоящему времени он используется в таких системах управления реляционными базами данных, как Oracle, INGRES, Informix, Sybase, SQLbase, Microsoft SQL Server, DB2 (СУБД самой IBM), SQL/DC, Paradox, Access,  FoxPro, dBase, Approach, MySQL, PosgreSQL и многими другими. Уже более 140 продуктов имеют в своем составе SQL-интерфейс. Можно с уверенностью сказать, что если вы собираетесь в ближайшем будущем использовать реляционные базы данных, то вам придется работать с SQL.

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

◦ операторы определения данных (определение баз данных, а также определение и уничтожение таблиц и индексов);

◦ запросы на выбор данных;

◦ предложения модификации данных (добавление, удаление и изменение данных);

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

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

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

◦ и др.

 


Data Definition Language

 

Язык определения данных (Data Definition Language или DDL) включает в себя все операторы, используемые для определения объектов реляционной базы данных, прежде всего это операторы CREATE DATABASE, DROP DATABASE, CREATE TABLE, ALTER TABLE, DROP TABLE., CREATE INDEX и DROP INDEX.

 

CREATE DATABASE

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

Оператор CREATE DATABASE создает новую базу данных с именем имя базы данных. Если база данных с таким именем уже существует, то выполнение этого оператора приводит к ошибке.

 

 

DROP DATABASE

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

Оператор DROP DATABASE удаляет базу данных с именем имя базы данных.

 

 

CREATE TABLE

CREATE [TEMPORARY] TABLE имя таблицы (определение, . . .) [предложение SELECT]

определение:

{   имя столбца тип [ NOT NULL | NULL ] [DEFAULT значение][ PRIMARY_KEY ]

|    PRIMARY KEY (столбцы)

|    UNIQUE имя индекса (столбец[(длина)],...)

|    INDEX имя индекса(столбец[(длина)],...)

|    FOREIGN KEY (columns) REFERENCES имя таблицы [ (столбцы) ]

[ ON DELETE { CASCADE | SET NULL } ] [ ON UPDATE { CASCADE | SET NULL }

]

}

Оператор CREATE TABLE создает новую таблицу с именем имя таблицы. Если указывается ключевое слово TEMPORARY, таблица существует только до конца текущего сеанса соединения или запуска оператора DROP TABLE, после чего удаляется.

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

 В качестве определения может выступать описание столбца, определение ключа или предложение FOREIGN KEY для описания внешнего ключа.

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

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

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

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

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

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

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

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

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

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

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

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

В некоторых СУБД еще существует тип данных LOGICAL, DOUBLE и ряд других.

При определении типа столбца можно определять NULL или NOT NULL, т.е. может или нет столбец содержать значения NULL. По умолчанию установлено значение NULL.

Значение по умолчанию DEFAULT должно быть константой, оно не может быть функцией или выражением. Если для данного столбца не задается никакой величины DEFAULT, то СУБД автоматически назначает ее. Если столбец может принимать NULL как допустимую величину, то по умолчанию присваивается значение NULL. Если столбец объявлен как NOT NULL, то значение по умолчанию зависит от типа столбца: для числовых типов значение по умолчанию равно 0; для типов даты и времени значение по умолчанию равно соответствующей нулевой величине для данного типа; для строковых типов значением по умолчанию является пустая строка.

PRIMARY KEY определяет столбец как первичный ключ.

UNIQUE определяет столбец как альтернативный ключ.

Предложения PRIMARY KEY и UNIQUE определяют так же и индексы, которые должны содержать уникальные значения.

Предложение INDEX дает возможность добавить индекс к создаваемой таблице.

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

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

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

В следующем примере показано создание таблицы Clients

CREATE TABLE Clients (ID_NUM INTEGER NOT NULL PRIMARY KEY,

Name CHAR(64) NOT NULL, City CHAR(32) NOT NULL,


AGE SMALLINT NOT NULL,

INDEX part_of_city (City(10)))

 

ALTER TABLE

ALTE R TABLE имя таблицы операции

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

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

AD D COLUM N описание столбца - Добавляет столбец в таблицу. Описание имеет такой же формат, как и в операторе CREATE TABLE.

ALTER TABLE Clients ADD COLUMN Phone CHAR(16)- Этот пример добавляет в таблицу Clients новый столбец Phone.

AD D PRIMAR Y KE Y (столбцы)

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

AD D UNIQU E им я индекса (столбец[(длина)],...) Добавляет индекс с уникальным значением по таблице.

AD D INDE X им я индекса (столбец[(длина)],...) Добавляет индекс таблице.

CHANG E COLUM N имя столбца описание столбца

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

DRO P PRIMAR Y KEY

Удаляет первичный ключ из таблицы.

DRO P INDE X им я индекса

Удаляет индекс из таблицы.

 

 

DROP TABLE

DROP TABLE имя таблицы [,имя таблицы]...

Удаляет указанную таблицу (или таблицы) из базы данных.

 

 

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.

 

DROP INDEX

DROP INDEX имя индекса ON имя таблицы

Оператор DROP INDEX удаляет индексы, указанные в имя индекса из таблицы имя таблицы. Пример:

DROP INDEX part_of_name ON Clients

 

Data Manipulation Language

 

Язык управления данными (Data Manipulation Language или DML) включает все операторы, которые используются для записи (хранения), изменения и поиска данных в таблицах. Основные операторы этого языка: SELECT, INSERT, UPDATE и DELETE. Оператор SELECT применяется для формирования запросов, и, возможно, является наиболее сложным из одиночных операторов SQL. Остальные операторы используются для манипулирования данными в пределах одной таблицы.

 

 

SELECT

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

Предложение SELECT может использоваться как:

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

2. элемент WHERE- или HAVING-условия, называемый «подзапрос» или «вложенный запрос».


Оператор SELECT имеет следующий формат:

SELECT [DISTINCT]

{ select_выражение

| агрегатная функция

| {имя | псевдоним } таблицы.*

| *

},...

FROM таблицы

[WHERE условие отбора строк]

[GROUP BY {{имя | псевдоним } таблицы.] имя столбца}.,.. [HAVING условие отбора групп]]

[{UNION }[ALL]

оператор select]

[ORDER BY {{столбец-результат [ASC|DESC]}.,..}

|{{положительное целое [ASC|DESC]}.,..}]

При указании ключевых слов следует точно соблюдать порядок, указанный выше. Например, предложение HAVING должно располагаться после всех выражений GROUP BY и перед всеми выражениями ORDER BY.

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

{имя | псевдоним } таблицы.* означает выборку всех столбцов из таблицы

* используется, если нужно выбрать все столбцы из всех таблиц, перечисленных в выражении FROM. Выражение select_выражение задает столбцы, из которых будет состоять новая таблица – результат выборки. Используя ключевое слово AS, select_выражению в SELECT можно присвоить псевдоним.

select_выражение [AS имя столбца]

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

{[{имя | псевдоним} таблицы.] столбец | выражение | константа }

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

Ссылки на столбцы могут задаваться в виде столбец, имя таблицы.столбец или псевдоним таблицы.столбец. Имя таблицы или псевдоним таблицы можно не указывать для ссылок на столбцы, если эти ссылки нельзя истолковать неоднозначно.

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

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

Ссылку  на  таблицу  можно  заменить  псевдонимом,  используя  имя таблицы [AS] псевдоним.


Предложение WHERE включает набор условий для отбора строк.

WHERE [NOT] условие_1 [[AND|OR][NOT] условие_2]...

где условие_1, _2 ... – одна из следующих конструкций:

выражение { = | <> | < | <= | > | >= } { значение | ( подзапрос ) }

выражение [NOT] BETWEEN значение_2 AND значение_3

выражение [NOT] IN { ( константа_1 [,константа_2]... ) | ( подзапрос ) }

выражение IS [NOT] NULL

выражение [NOT] LIKE 'шаблон' EXISTS ( подзапрос )

Выражения в WHERE строятся по тем же правилам, что и в select_выражениях.

□ Предложение GROUP BY используется для определения групп выходных строк, к которым могут применяться агрегатные функции. Если это предложение отсутствует и используются агрегатные функции, то все столбцы с именами, упомянутыми в SELECT, должны быть включены в агрегатные функции, и эти функции будут применяться ко всему набору строк, которые удовлетворяют запросу. В противном случае все столбцы списка SELECT, не вошедшие в агрегатную функцию, должны быть сгруппированы с помощью предложения GROUP BY. Все выходные строки запроса, которые сгруппированы по равенству значений столбцов, образуют единую группу. Далее к этим группам применяются агрегатные функции (SUM, COUNT, AVG, MIN или MAX), указанные во предложении SELECT, что приводит к замене всех значений группы на единственное значение (сумма, количество, среднее, минимальное или максимальное значение).

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

□ Предложение UNION включает все выходные строки каждого из запросов. Если определен параметр ALL, то сохраняются все дубликаты выходных строк, в противном случае оставляется только одна строка.

□ С помощью предложения ORDER BY можно расположить результаты одного или нескольких запросов в определенном порядке. Строки сортируются в соответствии со значениями столбцов, указанных в списке. Первый столбец имеет наивысший приоритет, второй столбец задает порядок сортировки дублируемых значений первого столбца, третий столбец вступает в действие, если совпадают значения во втором столбце, и т.д. Можно задать параметр сортировки ASC (по возрастанию, используется по умолчанию) или DESC (по убыванию) отдельно для каждого столбца. Сортировка набора символов будет осуществляться в соответствии с его упорядочивающей последовательностью. Вместо имен столбцов можно указывать целые числа. Эти числа указывают на местоположение столбца в выходных данных, так что 1 будет указывать на первый столбец, а 5 – на пятый столбец и т.д. Если выходные столбцы не имеют имен, то будут использоваться номера.

 

C l i e n t s

ID_NUM NAME CITY AGE
1809 Иванов Москва 45
1996 Петров Нижний Новгород 39
1777 Сидоров Рязань 21

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

SELECT *

FROM Clients

WHERE City = 'Тверь'

Первая строка означает "выбери все столбцы", а предложение FROM указывает на таблицу, из которой они должны быть выбраны. С помощью WHERE запрашиваем не просто конкретную строку, а все строки, которые удовлетворяют указанному условию (ассоциируются с Тверью). Не имеет никакого значения, сколько заказчиков из Твери записано в таблице - ни одного или десять тысяч. Все записи будут получены с помощью этого оператора.

Другие примеры:

□ Найти только имена заказчиков из Твери, возраст которых превышает 40 лет.

SELECT Name FROM Clients WHERE City = 'Тверь' AND Age > 40

□ Найти данные о всех заказчиках, фамилии которых начинаются на букву «И»

SELECT * FROM Clients WHERE Name LIKE 'И%'

Здесь в выражении WHERE использовалось сравнение с шаблоном 'И%'. Знак % заменяет последовательность произвольной длины любых символов.

□ Показать год рождения каждого заказчика

SELECT Name, (2005-AGE) AS BirthYear FROM Clients

Год рождения - вычисляемый столбец, для обозначения нового столбца использован псевдоним BirthYear.

□ Показать, города, где проживают заказчики.

SELECT DISTINCT City FROM Clients

□ Вычислить средний возраст заказчиков из Москвы

SELECT AVG(AGE) AS AvgAge FROM Clients WHERE City = 'Москва'

В запросе используется агрегатная функция AVG() для вычисления среднего значения в столбце AGE среди строк, где City = 'Москва'. В результате, при любом количестве заказчиков из разных городов, получится таблица, состоящая из из одной строки и одного столбца.

□ Показать, сколько заказчиков в каждом городе

SELECT City, COUNT(*) AS Client_Count FROM Clients GROUP BY City

В запросе применяется группировка. Здесь все записи из таблицы разбиваются на группы с одинаковыми названиями городов GROUP BY City, и в каждой группе вычисляется количество строк COUNT(*).

□ Показать города, где количество заказчиков не превышает 10

SELECT City, COUNT(*) AS Client_Count FROM Clients GROUP BY City HAVING COUNT(*)<=10

□ Определит количество заказчиков в каждом городе можно только с помощью группировки, поэтому ограничение на количество заказчиков можно вводить только в HAVING, а не в WHERE.

□ Найти самых молодых заказчиков

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

Здесь используется вложенный запрос (подзапрос) в условии WHERE. Подзапрос возвращает минимальный возраст среди всех заказчиков. Внешний запрос выводит данные о заказчиках, возраст которых равен минимальному.

□ Найти самых молодых и самых пожилых заказчиков

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

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

Запрос  построен  как  объединение  UNION двух  запросов.  Первый  находит  самых молодых, второй – самых пожилых заказчиков. В случае, если в таблице все заказчики одного возраста, то в получаемой выборке не будет дублирования, т.к. UNION здесь используется без ALL.

INSERT

INSERT INTO имя таблицы [(столбец_1, столбец_2,...)] VALUES (выражение_1, выражение_2,...),

или

INSERT INTO имя таблицы [(столбец_1, столбец_2,...)] SELECT ...

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

Имя таблицы - таблица, в которую должны быть внесены строки. Столбцы, для которых заданы величины в команде, указываются в списке имен столбцов.

Если не указан список столбцов для INSERT ... VALUES или INSERT ... SELECT, то величины для всех столбцов должны быть определены в списке VALUES() или в результате работы SELECT.

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

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

INSERT INTO tbl_name (col1, col2) VALUES(15, col1*2)

Но нельзя указать:

INSERT INTO tbl_name (col1, col2) VALUES(col2*2, 15)

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

Для оператора INSERT ... SELECT необходимо соблюдение следующего условия. Целевая таблица команды INSERT не должна появляться в утверждении FROM части SELECT данного запроса, поскольку в SQL запрещено производить выборку из той же таблицы, в которую производится вставка.


В следующем примере показано добавление в таблицу Clients новой строки о заказчике Бобров, 41 год, из г.Тула.

INSERT INTO Clients (ID_NUM, Name, City, Age) VALUES (1225, 'Бобров', 'Тула', 41)

 

 

UPDATE

 

UPDATE имя таблицы

SET столбец_1 = выражение_1 [,столбец_2 = выражение_2 ...] [WHERE условие отбора строк]

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

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

UPDATE Clients SET Age = Age + 1

Если в UPDATE изменяются значения нескольких столбцов, то новые значения присваиваются слева направо, т.е. сначала столбец_1 = выражение_1, потом столбец_2 = выражение_2 и т.д.

 

 

DELETE

 

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

[WHERE условие отбора строк]

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

В следующем примере из таблицы Clients удаляются записи о заказчиках из города Тула.

DELETE FROM Clients WHERE City = 'Тула'

 


Дата добавления: 2019-09-13; просмотров: 94; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!