Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Лекция 1 «Введение в структурированный язык запросов SQL»



Конспект лекций

по дисциплине:

«Организация баз данных и знаний»

 

Часть 3

 

«Язык запросов SQL»

 

для студентов специальности

5.080406 – «Эксплуатация систем обработки информации и принятия решения»

 

 

Краматорск


 

 


Содержание

 

введение. 4

Лекция 1 «Введение в структурированный язык запросов SQL». 5

1 Стандарт и реализация языка SQL. 5

2 Введение в технологию клиент-сервер. 6

3 Типы команд SQL. 8

4 Преимущества языка SQL. 9

Лекция 2 «Типы данных SQL». 12

1 Классификация типов данных. 12

2 Строки. 13

3 Числа. 13

4 Логические данные. 15

5 Дата и время. 15

6 Интервалы.. 17

Лекция 3 «Проектирование таблиц базы данных». 18

1 Создание таблицы.. 18

2 Изменение таблицы.. 19

3 Удаление таблицы.. 20

4 Индексы.. 21

Лекция 4 «Поддержка целостности данных». 23

1 Ограничения для таблиц. 23

2 Внешние ключи. 24

Лекция 5 «Выполнение запросов в SQL». 27

1 Оператор SELECT. 27

2 Оператор FROM.. 28

3 Оператор WHERE. 29

3.1 Сравнение. 30

3.2 Диапазон. 31

3.3 Принадлежность множеству. 31

3.4 Соответствие шаблону. 32

3.5 Значение NULL. 33

Лекция 6 «Вычисления и подведение итогов в запросах». 35

1 Построение вычисляемых полей. 35

2 Использование итоговых функций. 36

3 Предложение GROUP BY.. 38

4 Предложение HAVING.. 40

Лекция 7 «Построение подзапросов». 42

1 Понятие подзапроса. 42

2 Использование подзапросов, возвращающих единичное значение. 43

3 Использование операций IN и NOT IN.. 45

4 Использование ключевых слов ANY и ALL. 47

5 Использование операций EXISTS и NOT EXISTS. 48

Лекция 8 «Представления». 50

1 Определение представления. 50

2 Обновление данных в представлениях. 53


Введение

 

 

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

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

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

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

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

 


Лекция 1 «Введение в структурированный язык запросов SQL»

 

План

 

1 Стандарт и реализация языка SQL

2 Введение в технологию клиент-сервер

3 Типы команд SQL

4 Преимущества языка SQL

 

 

Стандарт и реализация языка SQL

 

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

Одним из языков, появившихся в результате разработки реляционной модели данных, является язык SQL (Structured Query Language), который в настоящее время получил очень широкое распространение и фактически превратился в стандартный язык реляционных баз данных. Стандарт на язык SQL был выпущен Американским национальным институтом стандартов (ANSI) в 1986 г., а в 1987 г. Международная организация стандартов (ISO) приняла его в качестве международного. Нынешний стандарт SQL известен под названием SQL/92.

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

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

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

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

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

 

Типы команд SQL

 

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

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

Основные категории команд языка SQL:

- DDL – язык определения данных;

- DML – язык манипулирования данными;

- DQL – язык запросов;

- DCL – язык управления данными;

- команды администрирования данных;

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

Определение структур базы данных (DDL)

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

Манипулирование данными (DML)

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

Выборка данных (DQL)

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

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

Команды управления данными позволяют управлять доступом к информации, находящейся внутри базы данных. Как правило, они используются для создания объектов, связанных с доступом к данным, а также служат для контроля над распределением привилегий между пользовате­лями. Команды управления данными следующие: GRANT, REVOKE.

Команды администрирования данных

С помощью команд администрирования данных пользователь осуществляет контроль за выполняемыми действиями и анализирует операции базы данных; они также могут оказаться полезными при анализе про­изводительности системы. Не следует путать администрирование данных с администрированием базы данных, которое представляет собой общее управление базой данных и подразумевает использование команд всех уровней.

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

Существуют следующие команды, позволяющие управлять транзакциями базы данных: COMMIT, ROLLBACK, SAVEPOINT, SET TRANSACTION.

 

Преимущества языка SQL

 

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

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

Основные достоинства языка SQL заключаются в следующем:

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

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

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

- реляционная основа языка — SQL является языком реляционных БД, поэтому он стал популярным тогда, когда получила широкое распространение реляционная модель представления данных. Табличная структура реляционной БД хорошо понятна, а потому язык SQL прост для изучения;

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

- возможность программного доступа к БД — язык SQL легко использовать в приложениях, которым необходимо обращаться к базам данных. Одни и те же операторы SQL употребляются как для инте­рактивного, так и программного доступа, поэтому части программ, содержащие обращение к БД, можно вначале проверить в интерактивном режиме, а затем встраивать в программу;

- обеспечение различного представления данных — с помощью SQL можно представить такую структуру данных, что тот или иной пользователь будет видеть различные их представления. Кроме того, данные из разных частей БД могут быть скомбинированы и представлены в виде одной простой таблицы, а значит, представления пригодны для усиления защиты БД и ее настройки под конкретные требования от­дельных пользователей;

- озможность динамического изменения и расширения структуры БД — язык SQL позволяет манипулировать структурой БД, тем самым обеспечивая гибкость с точки зрения приспособленности БД к изменяющимся требованиям предметной области;

- поддержка архитектуры клиент-сервер — SQL одно из лучших средств для реализации приложений на платформе клиент-сервер. SQL служит связующим звеном между взаимодействующей с пользователем клиентской системой и серверной системой, управляющей БД, позволяя каждой из них сосредоточиться на выполнении своих функций.

Любой язык работы с базами данных должен предоставлять пользователю следующие возможности:

- создавать базы данных и таблицы с полным описанием их структуры;

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

- выполнять простые и сложные запросы, осуществляющие преобразование данных.

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

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

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

Язык SQL используется в других стандартах и даже оказывает влияние на разработку иных стандартов как инструмент определения (например, стандарт Remote Data Access, RDA). Создание языка способствовало не только выработке необходимых теоретических основ, но и подготовке успешно реализованных технических решений. Это особенно справедливо в отношении оптимизации запросов, методов распределения данных и реализации средств защиты. Начали появляться специализированные реализации языка, предназначенные для новых рынков: системы управления обработкой транзакций (OnLine Transaction Processing, OLTP) и системы оперативной аналитической обработки или системы поддержки принятия решений (OnLine Analytical Processing, OLAP). Уже известны планы дальнейших расширений стандарта, включающих поддержку распределенной обработки, объектноориентированного программирования, расширений пользователей и мультимедиа.

 


Лекция 2 «Типы данных SQL»

 

План

 

1 Классификация типов данных

2 Строки

3 Числа

4 Логические данные

5 Дата и время

6 Интервалы

 

 

Классификация типов данных

 

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

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

– строковый (символьный):

а) CHARACTER (или CHAR);

б) CHARACTER VARYING (или VARCHAR);

в) CHARACTER LARGE OBJECT (или CLOB);

– числовой:

– точные числовые типы:

а) integer;

б) smallint;

в) bigint;

г) numeric;

д) decimal;

– приблизительные числовые типы:

а) real;

б) double precision;

в) float;

– логический (булевский) – boolean;

– даты-времени:

а) date;

б) time without time zone*,

в) time with time zone;

г) timestamp without time zone;

д) timestamp with time zone;

– интервальный.

Кроме того, существуют особые типы: row (запись), array (массив) и multiset (мультимножество).

 

Строки

 

Строковые данные (последовательности символов) имеют три главных строковых типа. Для столбца таблицы можно указать тип character (n) или char (n) (строка фиксированной длины), где n — максимальное количество символов, содержащихся в строке. Если (n) не указано, то предполагается, что строка состоит из одного символа. Если в столбец типа character (n) вводится m < n символов, то оставшиеся позиции заполняются пробелами.

Тип данных CHARACTER VARYING (n) или VARCHAR (n) (строка переменной длины) применяется тогда, когда вводимые данные имеют различную длину и нежелательно дополнять их пробелами. При этом сохраняется только то количество символов, которое ввел пользователь. В данном случае указание максимального количества символов обязательно (в отличие от character).

Данные типов character и character varying могут участвовать в одних и тех же строковых операциях.

Тип данных CHARACTER LARGE OBJECT (CLOB – большой символьный объект) используется для представления очень больших символьных строк (например, статей, книг и т. п.). В некоторых СУБД данный тип называется memo, а в других – text. С дан­ными этого типа можно выполнять не все операции, предусмот­ренные для типов CHARACTER и CHARACTER VARYING. Так, их нельзя использовать в операциях сравнения, за исключением равенства и неравенства. Кроме того, столбцы этого типа не могут быть первичными и внешними ключами, а также быть объявлены как имеющие уникальные значения. Иначе говоря, при создании таблиц с помощью оператора create и объявлении столбцов типа clob нельзя использовать ключевые слова primary key, FOREIGN KEY и UNIQUE.

В следующем примере создается таблица с обычным символь­ным столбцом и столбцом типа clob, значения которого могут содержать 100 000 символов:

CREATE TABLE myTable

( FIELD1 CHARACTER (60),

FIELD2 CLOB (100000));

 

Числа

 

Числовой тип данных может быть двух видов точный и при­близительный. Точные числовые типы позволяют точно выра­зить значение числа. Некоторые величины имеют очень большой диапазон значений, и в таких случаях достаточно ограничиться некоторым приближенным их представлением с учетом техниче­ских возможностей компьютера (размеров регистра).

К точным числовым относятся следующие пять типов:

– integer – целое (без дробной части) число. Количество разрядов (точность) зависит от реализации SQL. В некоторых реализациях числа этого типа лежат в диапазоне от -2 147 483 648 до 2 147 483 647 (четырехбайтное целое число);

– smallint – малое целое число. Количество разрядов зависит от реализации SQL, но не больше количества разрядов integer в этой же реализации. В некоторых реализациях числа этого типа лежат в диапазоне от -32 768 до 32 767 (двухбайтное целое число);

– bigint – большое целое число. Количество разрядов зависит от реализации SQL и превышает количество разрядов числа типа integer;

– numeric (x, у) – число, в котором всего х разрядов (точность), из которых у разрядов (масштаб) отводится для дробной части. Если у не указано (numeric (х)), то для дробной части отводится количество разрядов, установленное в системе по умолчанию. Если не указаны ни х, ни у (numeric), тo принимаются обе эти величины, установленные по умолчанию. Например, если указан тип numerc (6, 2), то максимальное значение числа равно 9999.99;

– decimal (x, у) – десятичное число, в котором всего х разрядов, из которых у разрядов отводятся для дробной части. Если х или/и у не указаны, то принимаются значения по умолчанию. Этот тип очень похож на numeric. Отличие состоит в том, что если в decimal (х, у) указанные х и у меньше, чем допустимые реализацией SQL, то будут использоваться последние. Если х и у не указаны, то применяется система умолчаний. Например, вы задали для столбца тип decimal (6, 2). Если реализация SQL позволяет, то в этот столбец можно ввести числа, превышающие 9999.99. В отличие от decimal (х, у), тип numeric (x, у) жестко задает диапазон возможных значений числовой величины.

К приблизительным числовым типам относятся следующие три типа:

– real – вещественное число одинарной точности с плавающей разделительной точкой (эта точка «плавает», появляясь в различных местах числа). Например, 5.25, 5.257, 5.2573. Точность представления числа зависит от реализации SQL и оборудования. Например, 32-битовый компьютер дает большую точность, чем 16-битовый;

– double precision – вещественное число двойной точности с плавающей разделительной точкой. Точность представления числа зависит от реализации SQL и оборудования. Применяется для представления научных данных (например, результатов измерений) в широком диапазоне значений, т. е. как очень малых (близких к 0), так и очень больших;

– float (x) – вещественное число с плавающей разделительной точкой и минимальной точностью х, занимающее не более 8 байтов. Если компьютер может поддержать указанную точность, используя аппаратную одинарную точность, то система будет использовать арифметику одинарной точности. Если указанная точность требует арифметики с двойной точностью, то система будет использовать ее. Данный тип следует применять, если предполагается возможность переноса базы данных на другую аппаратную платформу, отличающуюся размерами регистров. Пример значения типа float: 5.318E-24 (т.е. 5.318, умноженное на 10 в степени -24). Такую же форму представления имеют и числа типа real и double precision.

При создании таблиц целочисленные типы применяются для столбцов, содержащих разного рода идентификаторы, например, номера (коды) клиентов, товаров, заказов и т. п. Разумеется, ес­ли содержимое столбца должно быть целым числом (например, количество ящиков, бутылок, штук и т. п.), то тип этого столбца естественно определить как integer, smallint или bigint.

Допустим, в таблице клиенты имеется столбец ID_клиента, со­держащий уникальные идентификаторы клиентов. Если количе­ство клиентов не превышает 32 000, то тип столбца можно опре­делить как smallint. Если в вашей таблице будут храниться сведения о сотнях тысяч клиентов, то тип столбца id_клиента следует определить как integer.

Если столбец в проектируемой таблице должен содержать числа с дробной частью, то для него можно задать какой-нибудь неце­лочисленный тип. Если вы не уверены, что применить: точные числовые типы или приблизительные, выбирайте точные (numeric, decimal). Они требуют меньше ресурсов и дают точ­ные результаты. Если в столбце предполагается хранить данные из очень широкого диапазона (и очень малые, и очень большие числа), то используйте приблизительные типы данных (float, real).

 

Логические данные

 

В SQL тип данных boolean (булевский) имеет три значения – true, false и unknown. Значение unknown (неизвестное) было введено для обозначения результата, получающегося при срав­нении со значением null (неопределенное). Если пользователь еще не ввел в ячейку таблицы никакого значения, то эта «пустая» ячейка содержит значение null, интерпретируемое как неизвестное или неопределенное значение.

Результатом любой операции сравнения true или false с null или с unknown всегда является unknown.

В SQL-выражениях логические значения заключаются в кавыч­ки, например, 'true' или 'true'

 

Дата и время

 

Тип data (дата) предназначен для хранения значений даты, эле­менты которых расположены в следующем порядке: год (4 цифры), дефис (-), месяц (2 цифры), дефис, день (2 цифры).

Таким образом, значения даты занимают 10 позиций, например,

2005-10-02.

Данные этого типа могут содержать любую дату с 0001 года по 9999 год.

Для представления времени предусмотрены два типа:

– time without time zone (время без часового пояса) предна­значен для хранения значений времени, элементы которых расположены в следующем порядке: часы, двоеточие, мину­ты, двоеточие, секунды. Часы и минуты представляются дву­мя цифрами, а секунды могут быть представлены двумя и бо­лее цифрами (если требуется дробная часть), например 18: 35: 19.547. Длина дробной части секунд зависит от реали­зации, но внутреннее представление времени должно иметь не менее 6 цифр. По умолчанию время данного типа пред­ставляют без дробной части секунд. Чтобы указать, что время должно быть представлено с л цифрами после разделитель­ной точки, достаточно использовать такой синтаксис: time without time zone (л). Например, чтобы кроме секунд ука­зывались еще и миллисекунды, следует определить тип как time without time zone (3). Длина данных рассматривае­мого типа без дробной части равна 8 символам, а с дробной частью – 9 плюс количество цифр после разделительной точки. Для задания времени без указания часового пояса с использованием установок по умолчанию можно использо­вать короткий синтаксис – time;

– time with time zone (время с часовым поясом) – такой же тип данных, как и time without time zone. Отличие заклю­чается лишь в том, что к значению времени добавляется еще и информация о разности между местным и всемирным вре­менем. Всемирное время (Universal Time Coordinated, UTC) – это время по Гринвичу, т. е. время нулевого меридиана, про­ходящего через г. Гринвич в Великобритании (Greenwich Mean Time, GMT). Значение разности между локальным и всемирным временем находится в диапазоне от -12: 59 до 13: 00. Длина данных рассматриваемого типа равна длине данных типа time without time zone плюс 6, поскольку до­полнительная информация о разности времен занимает 6 позиций (дефис, знак (+) или (-), 2 цифры для часов, двое­точие, 2 цифры для минут).

Для одновременного представления даты и времени служат сле­дующие два типа:

– timestamp without time zone (дата и время без часового пояса). Элементы данных этого типа имеют такие же характеристики, как и для данных типа date и time without time zone, за исключением одного: данные типа timestamp without time zone пo умолчанию имеют 6 цифр в дробной части секунд, а не 0, как в типе time without time zone. Для указания количества цифр в дробной части используется синтаксис timestamp without time zone (л). Если дробной части нет, то данные занимают 19 позиций: 10 позиций для даты, один пробел и 8 позиций для времени. Если определена дробная часть, то длина данных равна 20 плюс количествоцифр в дробной части секунд;

– timestamp with time zone (дата и время с часовым поясом) – такой же тип данных, как и timestamp with time zone. Отличие состоит в том, что к значению времени добавляется еще и информация о разности между местным и всемирным временем. Дополнительная информация занимает 6 позиций. Данные типа timestamp with time zone без дробной части занимают 25 позиций, с дробной частью – 26 плюс количество цифр в дробной части секунд.

Чтобы представить в SQL-выражении дату, время или дату-время, необходимо использовать функцию cast о приведения к заданному типу. Допустим, в таблице продажи имеется столбец дата типа data.

Чтобы получить сведения из этой таблицы за период после 2005-09-30, следует выполнить такой запрос:

SELECT * FROM Продажи WHERE Дата > CAST ('2005-09-30' AS DATE);

Здесь строка, содержащая дату, приводится к типу data, и полу­ченный результат участвует в операции сравнения с данными столбца Дата.

В языке SQL имеются три функции, которые возвращают теку­щие дату и время:

– current_date – возвращает текущую дату (тип date).

Например, 2005-06-18;

– current_time (число) – возвращает текущее время (тип time). Целочисленный параметр число указывает точность представления секунд.

Например, при число = 2 секунды бу­дут представлены с точностью до сотых (две цифры в дроб­ной части): 12: 39: 45.27;

– current_timestamp (число) – возвращает дату и время (тип TIMESTAMP), Например 2005-06-18 12: 39: 45.27. Целочисленный параметр число указывает точность представления секунд.

 

Интервалы

 

Интервал представляет собой разность между двумя значениями типа дата-время. SQL поддерживает два типа интервалов: год-месяц и день-время. Интервал типа год-месяц – это количество лет и месяцев между двумя датами, а интервал день-время – количество дней, часов, минут и секунд между двумя моментами в пределах одного месяца. Нельзя смешивать вычисления, ис­пользующие интервал год-день, с вычислениями, в которых ис­пользуется интервал день-время.

Интервал времени можно задать двумя способами: в виде на­чального и конечного моментов или в виде начального момента и длительности, например:

– (TIME '12: 25: 30', TIME '14: 30: 00' ) – Интервал, заданный начальным и конечным моментами;

– (TIME '12: 45: 00', INTERVAL '5' HOUR) – Интервал, заданный начальным моментом и длительностью в часах.

Чтобы задать значение типа интервал, используется такой син­таксис:

INTERVAL 'длина' YEAR | MONTH | DAY | HOUR | MINUTE | SECOND

Здесь длина – длина интервала, после которой указывается еди­ница измерения (возможные значения указаны через вертикаль­ную черту):

– YEAR – ГОД;

– month – месяц;

– day – день;

– hour – час;

– minute – минута;

– second – секунда.

Например, для задания интервала длиной 15 дней следует ис­пользовать выражение interval '15' day.


Лекция 3 «Проектирование таблиц базы данных»

 

План

 

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

2 Изменение таблицы

3 Удаление таблицы

4 Индексы

 

 

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

 

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

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

 

CREATE TABLE имя_таблицы

(имя_столбца тип_данных [NULL | NOT NULL ] [,...n])

 

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

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

Мы использовали упрощенную версию оператора CREATE TABLE стандарта SQL. Его полная версия приводится при обсуждении вопросов обеспечения целостности данных.

 

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

 

CREATE TABLE Товар

(Название VARCHAR(50) NOT NULL,

Цена MONEY NOT NULL,

Тип VARCHAR(50) NOT NULL,

Сорт VARCHAR(50),

ГородТовара VARCHAR(50))

 

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

 

CREATE TABLE Клиент

(Фирма VARCHAR(50) NOT NULL,

Фамилия VARCHAR(50) NOT NULL,

Имя VARCHAR(50) NOT NULL,

Отчество VARCHAR(50)

ГородКлиента VARCHAR(50)

Телефон CHAR(10) NOT NULL)

 

Изменение таблицы

 

Структура существующей таблицы может быть модифицирована с помощью команды ALTER TABLE, упрощенный синтаксис которой пред­ставлен ниже:

ALTER TABLE имя_таблицы

{[ADD [COLUMN] имя_столбца тип_данных [

NULL | NOT NULL ]]

| [DROP [COLUMN] имя_столбца]}

 

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

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

Тем не менее, существует способ добавления обязательных полей в существующую таблицу. Для этого необходимо:

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

- ввести в новый столбец какие-либо значения для каждой строки данных таблицы;

- убедившись, что новый столбец содержит ненулевые значения для каждой строки данных, изменить структуру таблицы, заменив атрибут этого столбца на NOT NULL.

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

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

- размер столбца может быть уменьшен только в том случае, если содержащееся в нем наибольшее значение не будет превосходить его нового размера;

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

- количество раз рядов числового типа данных может быть уменьшено только в том случае, если количество разрядов наибольшего значе­ния в соответствующем столбце не будет превосходить нового числа разрядов, определенного для этого столбца;

- количество десятичных знаков числового типа данных может быть уменьшено или увеличено;

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

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

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

 

Пример 3.3. Добавить в таблицу Клиент поле для номера расчетного счета.

 

ALTER TABLE Клиент ADD Рас_счет CHAR(2 0)

Удаление таблицы

 


Поделиться:



Популярное:

Последнее изменение этой страницы: 2016-07-13; Просмотров: 2630; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.148 с.)
Главная | Случайная страница | Обратная связь