У вас вопросы?
У нас ответы:) SamZan.net

Тема 4 Основы языка SQL

Работа добавлена на сайт samzan.net:

Поможем написать учебную работу

Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 26.12.2024

Тема 4: «Основы языка SQL. Команды управления даннымиDDL. Команды манипулирования данными – DML»

Основы DDL

Следующие команды создают или удаляют базы данных, таблицы или изменяют их структуру:

CREATE DATABASE создает новую базу данных;

DROP DATABASE удаляет базу данных и любые таблицы, которые она содержит;

CREATE TABLE создает новую таблицу; p

DROP TABLE удаляет таблицу и данные, которые она содержит;

ALTER TABLE изменяет структуру существующей таблицы;

CREATE INDEX добавляет индекс к таблице;

DROP INDEX удаляет индекс из таблицы.

Чтобы создать новую базу данных, используйте команду CREATE DATABASE. Следующая команда создает базу данных mydb:

CREATE DATABASE mydb;

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

Если вы пробуете создать базу данных, а она уже существует, то произойдет ошибка. Чтобы этого не происходило, добавьте к команде IF NOT EXISTS:

CREATE DATABASE IF NOT EXISTS mydb;

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

Создавая базу данных вы не гарантированы, что сможет сразу с ней работать. Чтобы сделать новую базу данных активной, дайте команду USE:

USE mydb;

Чтобы увидеть список доступных баз данных, используйте команду SHOW DATABASES. Эта команда не будет показывать имена баз данных, к которым вы не имеете доступа. Чтобы увидеть список таблиц базы данных, используйте SHOW TABLES FROM db_name. Можно использовать команду SHOW TABLES, если db_name - имя текущей базы данных.

Если база данных вам больше не нужна, то ее можно удалить командой DROP DATABASE

DROP DATABASE mydb;

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

DROP DATABASE - радикальная команда. Вы должны использовать ее продуманно. Нет никакой команды, чтобы "отменить" DROP DATABASE. Если вы удаляете базу данных по ошибке, то восстановить ее вы можете только из своих резервных копий.

Подробнее о данных командах – в электронном курсе.

2 Основы DML. Базовый набор команд

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

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

Как определить минимальный набор операций для построения языка? Для ответа на этот вопрос обратим внимание на тот факт, что в качестве базовой структуры данных реляционной модели Эдгар Кодд выбрал отношение. Этот выбор был не случаен:

графически отношение можно представить таблицей, а именно так мы и привыкли представлять данные;

манипуляции данными отношений описаны математически, а значит предсказуемы.

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

Сейчас вы познакомитесь с базовыми командами языка SQL. В теории баз данных это не единственный язык. Аналогичный язык разрабатывала компания IBM. Благодаря этим разработкам сейчас существуют средства визуального построения SQL команд.

Язык SQL — это программная реализация реляционной алгебры и реляционного исчисления, к авторам которых относят Кодда, Лакруа и Пиро. Достаточно подробно этот вопрос рассмотрен, например, в книге Дж. Ульмана "Основы систем баз данных". Она вышла в издательстве "Финансы и статистика" в 1983 г.

Реляционные операции делят на две группы: унарные и бинарные. Первые из них описывают манипуляции с одним отношением, а вторые — не менее, чем с двумя. К унарным относят операцию проекция и выборка. С их описания мы и начнем

Как мы уже отмечали SQL — это язык, который был математически описан (предсказан).

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

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

Ее результат — это множество уникальных кортежей t ( k) отношения R с атрибутами u [ i 1], u[ i 2], ..., u [i k].

Другими словами, операция проекция позволяет отобразить вертикальное подмножество данных. То есть ту часть данных, например, отношения Lease(NLease, NTn, NOn, AdR, LDate):

1

2

1

Р-Корсакова 32/15

01.01.1997

2

3

2

Кирова 118/2

12.08.1998

3

1

3

Металлургов 56

14.05.1999

Рисунок 1 - Данные таблицы Lease

которая показывает, кто у кого арендует недвижимость (на рис.1 затенены).

Конечно, данный вид результата не столь очевиден, чтобы понять, что Иванов арендует у Ивашко, Петров у Иванова, а Сидоров у Петрова. Но придется потерпеть. Сейчас наша цель — познакомиться с языком манипуляции данными.

Примечание

Как видим результат исполнения SQL команды — множество записей (картежей). Поэтому Э. Кодд назвал теоретическую модель SQL как "реляционное исчисление с переменными-кортежами".

Выборка { t/R(t) Λ (t [ i] ϑ w)} это множество кортежей t, удовлетворяющих предикату t [ i] ϑ w.

Здесь ϑ — одна из бинарных операций, описанных ниже.

Оператор

Описание

=

Равно

<>

Не равно

>

Больше

<

Меньше

>=

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

<=

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

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

Owner(NOn, Ow, AdO)

1

Иванов

Мира 36

2

Петров

Правды 2/36

3

Ивашко

Кирова 18

Рисунок 2 - Данные таблицы Owner

На языке SQL операция выборка в данном случае записывается так:p

SELECT Ow

 FROM Owner

 WHERE AdO = 'Мира 36'


Рассмотренные нами операции унарны, то есть применимы к одному отношению.

Далее мы рассмотрим операции, которые применимы к двум таблицам.

Пересечение отношений R и S

{ t/R ( t) Λ – ( R ( t) –  S ( t))}

включает кортежи, которые принадлежат как R, так и S.p

Другими словами, пересечение — это одинаковые записи идентичных по структуре таблиц. Например, результат пересечения отношений (см. рис.3)

Tenant(NTn, Tn, AdT)

 

Owner(NOn, Ow, AdO)

1

Иванов

Мира 36

 

1

Иванов

Мира 36

2

Петров

Правды 2/36

 

2

Петров

Правды 2/36

3

Сидоров

Курская 18

 

3

Ивашко

Кирова 18

Рисунок 3 - Данные отношений Tenant и Owner

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

Иванов

Мира 36

Петров

Правды 2/36

Рисунок 4 - Результат пересечения таблицы Tenant и Owner

Разность отношений R и S, записываемая как

{ t/R ( t) Λ –  S ( t)}

представляет собой множество кортежей t, которые принадлежат R, но не принадлежат S.

Например, по данным отношений Tenant и Owner можно определить, кто из владельцев не арендует недвижимость. Это — Сидоров.

Следующая SQL команда реализует операцию разность:

SELECT Tn, AdT

 FROM Tenant

 WHERE Tn NOT IN (SELECT Ow FROM Owner)

Объединение отношений R и S, выражаемое в исчислении как

{ t/R ( t) V S ( t)}

представляет собой множество кортежей t, которые принадлежат R и кортежи отношения S, которых нет в R.

Например, по данным отношений Tenant и Owner можно составить список клиентов риелтерской конторы, как показано на рис.5:

Иванов

Мира 36

Ивашко

Кирова 18

Петров

Правды 2/36

Сидоров

Курская 18

Рисунок 5 - Список клиентов риелтерской конторы

Декартово произведение отношений R и S, которые соответственно имеют арности r и s представляет собой совокупность кортежей длиной r+s таких, что

{t(r+s)/(∃u(r))(∃v(s))(R(u)LS(ν)Lt[1]=u[i1]Λ...Λt[r+s]=ν[ s])}

Примечание

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

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

Операции соединения подразделяются на два вида — внутренние и внешние.

Так внутренние соединение отношений R и S арности r и s, соответственно

{t( r+s)/R(t)ΛS (t))}

представляет собой множество кортежей t длинны r+s, образуемых из кортежей отношений R и S, которые имеют одинаковые значения общих атрибутов.

Например, по данным отношений, приведенных на рис.6.

Rent(Type, Rn)

 

 

Realty(AdR, Type)

 

2-к. квартира

90

 

Р-Корсакова 32/15

2-к. квартира

1-к. квартира

60

 

Металлургов 56

дом

дом

1800

 

Кирова 118/2

1-к. квартира

Рисунок 6 - Данные отношений Realty и Rent

следующей SQL-командой стандарта ANSI-89

SELECT DISTINCT Rent.Rn, Realty.AdR

 FROM Rent, Realty

 WHERE Realty.Typ = Rent.Typ

можно просмотреть стоимость аренды недвижимости.

В стандарте ANSI-92 SQL-команда операции соединения содержат зарезервированное слово JOIN.

SELECT DISTINCT Rent.Rn, Realty.AdR

  FROM Rent INNER JOIN Realty

  ON Realty.Typ = Rent.Typ

90

Р-Корсакова 32/15

60

Металлургов 56

1800

Кирова 118/2

Рисунок 7 – Результат внутреннего соединения Rent и Realty

3 Расширенные возможности языка DML

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

3.1 Функции

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

В соответствие со стандартом ANSI SQL поддерживает агрегатные функции. Их применяют для определения:

суммарного значения — SUM();

среднего арифметического всех определенных значений (отличных от NULL) — AVG();

минимального значения — MIN();

максимального значения — MAX();

числа значений, которые удовлетворяют некоторому критерию — COUNT();

числа значений, отличных от NULL — COUNT(*).

Следует отметить, что функции применяют к столбцам, а не самой таблице.

Например, вычислить количество типов объектов аренды

SELECT COUNT(*)

 FROM Rent

Определить число объектов, стоимость аренды которых больше 60 у.e. можно так:

SELECT COUNT(Rn)

 FROM Rent

 WHERE Rn > 60

SQL также поддерживает строковые функции:

  •  UPPER() — преобразование букв в строчные;l
  •  LOWER() — преобразование букв в прописные;l
  •  TRIM() — удаления цепочек символов предшествующих или последующих за строкой;
  •  SUBSTRING() — выделения подстроки из строки.

Например, удалить предшествующую цепочку, которая состоит из символов '2'

SELECT TRIM(LEADING '2' from Ow)

  FROM owner

Например, вывести типы квартир

SELECT SUBSTRING(Typ FROM 1 FOR 4)

 FROM Rent

 WHERE SUBSTRING(Typ FROM 6) = 'квартира'

Данный запрос, используя функцию SUBSTRING(Typ FROM 1 FOR 4) позволяет отобразить первых 4 символа поля Typ, при условии, что все его символы в текущей записи (с 6-го до последнего) — 'квартира'.

SQL позволяет извлекать дату и время, используя функцию работы с датами:

EXTRACT (<данное> FROM <имяПоля>)

Например, необходимо извлечь значение года, которое хранится в поле LDate:

SELECT EXTRACT(YEAR FROM LDate)

 FROM Lease

Можно также извлекать месяц (MONTH), день (DAY), час (HOUR), минуты (MINUTE) и секунды (SECOND).

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

SELECT NLease

 FROM Lease

 WHERE '1999.12.31' — LDate < 365 * 2 + 1

Отметим, что допускаются следующие форматы представления даты: '1999-OCT-27', '02/27/10' и '01.10.27'. Например, получить номера договоров аренды заключенных после 1 января 2003 года:p

SELECT NLease, LDate

 FROM Lease

 WHERE LDate > '2001-JUN-01'

3.2 Операторы

Язык SQL кроме функций поддерживает арифметические операторы

Оператор

Описание

+

Сложение

-

Вычитание

Умножение

/

Деление

Например, с помощью умножения можно определить, какой будет арендная плата, если ее увеличить на 20%

SELECT 1.2*Rn AS UpRenta

 FROM Rent

Квалификатор AS присваивает название столбцу результата.

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

Язык SQL поддерживает операторы сравнения.

Оператор

Описание

=

Равно

<>

Не равно

>

Больше

<

Меньше

>=

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

<=

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

IS NULL

Не определено

LIKE

Подобно

Элементами сравнения могут быть:

  •  значение поля;
  •  строка;
  •  арифметическое выражение;
  •  агрегатная функция;
  •  встроенная функция;
  •  значение, возвращаемое подзапросом.

Примечание

Элементы сравнения должны быть сопоставимых типов.

Продемонстрируем применение оператора "не равно" на примере получения списка недвижимости, в который не входят дома:

SELECT AdR

 FROM Realty

 WHERE Typ <> "дом"

Поясним оператор IS NULL.

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

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

SELECT Typ

 FROM Rent

 WHERE Rn IS NULL

Поясним оператор LIKE.

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

Например, получить список адресов, где арендуют квартиры

SELECT AdR, Typ

 FROM Realty

 WHERE Typ LIKE "%кварт%"

Если требуется найти строку, которая содержит специальные символы (%, _), то:

с помощью ключевого слова ESCAPE определите так называемый escape-символ;

поместите его перед специальным символом, чтобы указать, что искомый символ следует а escape-символом.

Escape-символом может быть любой, никогда не появляющийся в упоминаемом столбце как информационный символ. Часто для этих целей используются символы @ и ~.

Например, получить список адресов, которые содержат _ (знак подчеркивания)

SELECT AdR, Typ

 FROM Realty

 WHERE Typ LIKE "%@_%" ESCAPE "@"

К логическим операторам относят AND, OR и NOT.

Ниже описаны условия, когда значения предикатов — "истина", при условии, что они содержат следующие операторы:

Оператор

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

AND

Связываемые этим оператором условия истинны

OR

Хотя бы одно из связываемых этим оператором условий истинно

NOT

Условие, перед которым стоит этот оператор ложно

В одном предикате логические операторы выполняются в следующем порядке: сначала выполняется оператор NOT, затем AND и только после этого оператор OR. Для изменения порядка выполнения операторов используют скобки.

Например, необходимо получить список квартир, арендная плата за которые не превышает 100 у.е.:

SELECT Typ, Rn

 FROM Rent

 WHERE (Typ LIKE "%кварт%") AND (Rn <= 100)

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

SELECT Typ

 FROM Rent

 WHERE Rn BETWEEN 50 AND 100

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

SELECT Ow

 FROM Owner

 WHERE Ow BETWEEN "Иванов" AND "Клименко"

Предикат BETWEEN с отрицанием NOT позволяет получить выборку записей, значения полей которых находятся вне границ. Например, получить список договоров аренды, которые были заключены до 1.08.01 или после 1.03.02:

SELECT NLease

 FROM Lease

 WHERE LDate NOT BETWEEN "01.08.01" AND "02.03.01"

Для работы со списками используют предикат IN. Он позволяет проверять совпадения значения выражения, с каким либо элементом списка. Например, для просмотра адресов, где проживают арендаторы "Петров" и "Сидоров" воспользуйтесь командой:

SELECT AdT

 FROM Tenant

 WHERE Tn IN ("Петров", "Сидоров"))

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

SELECT AdT

 FROM Tenant

 WHERE Tn NOT IN ("Петров", "Сидоров"))


3.3 Упорядочивание выборок

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

3.3.1 Изменение порядка строк выборки

Порядок строк выборки изменяют конструкцией:

ORDER BY <порядок_строк> [ASC/DESC]p

Способ упорядочивания определяют зарезервированные слова ASC — "по возрастанию" и DESC — "по убыванию". Способом по умолчанию является ASC.

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

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

SELECT Tn

 FROM Tenant

 ORDER BY Tn

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

SELECT Tn, AdT

 FROM Tenant

 ORDER BY 2

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

SELECT Typ, Rn

 FROM Rent

 ORDER BY Typ, 2 DESC


3.3.2 Группировка выборки

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

Например, определить суммарную годовую стоимость аренды объектов Ивановым можно следующей SQL командой:

SELECT Tenant.Tn, (SUM(12*Rent.Rn)) AS Total

 FROM Realty, Lease, Tenant, Rent

 WHERE (Tenant.Tn = 'Иванов')

   AND (Lease.NTn = Tenant.NTn)

   AND (Realty.AdR = Lease.AdR)

   AND (Rent.Typ = Realty.Typ)

 GROUP BY Tenant.Tn


3.3.3 Выборки из выборок

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

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

SELECT Tenant.Tn, (MAX(Rn)) AS Renta

 FROM Realty, Lease, Tenant, Rent

 WHERE (Tenant.NTn = Lease.NTn)

   AND (Lease.AdR = Realty.AdR)

   AND (Realty.Typ = Rent.Typ)

   GROUP BY Tenant.Tn

 HAVING MAX(Rn) > 100




1. Особенности проектирования строительных конструкций гражданских зданий
2. ТЕМА- Створення інформаційного бюлетеня і буклету
3. Тема- Жаргон молодежи
4. Безопасность жизнедеятельности
5. Педагогика и методика начального обучения
6. клинический узкий таз 2
7. Доклад про Intel
8. Александр Моисеевич Володин Пять вечеров
9. тематикалы' химияны' элементтері деген е'бегінде атом молекула жайында'ы пікірін 'ылыми ж'йе т'рінде 'сын
10. тема стала одной из немногих сфер экономики в которой переход к рыночным отношениям произошел наиболее быст
11. Туризм и сервис
12. Эти сооружения могут входить также в состав гидроузлов с глухими плотинами в качестве открытых береговых во
13. темами отдельно рассматриваются изопроцессы при которых один из основных параметров состояния остается по1
14. на тему- Найдите Шалунишку в подготовительной группе.html
15.  Файлы а Общие понятия о файлах Данные размещаемые программой в памяти компьютера исчезают при выключе
16. В соответствии с этим критерием различаются- денежные ценные бумаги т
17. проект цивилизации ~ Сионизм Безошибочны ли признанные канонами священные писания 41 СВЯЩЕННЫЙ а
18. 1190Н Т90Р Т1100 Т1180
19. Тема Ч Діккенс Життєвий і творчий шлях письменника
20. Проектування логістичної системи ТОВ METRO Csh & Crry Україна