ОСНОВНЫЕ ПОНЯТИЯ И ОПРЕДЕЛЕНИЯ
Основные понятия реляционных баз данных
, |
1.1. Основные понятия реляционных баз данных 11
• |
• |
• |
• |
|
\ |
-
Ключ
v
Наименование атрибута
v
чения состоят в том, что корректным образом можно сравнивать
между собой только значения атрибутов, определенных на одном и том же домене.
\ |
|
Код_студ Имя_студ Факультет Курс
Отношения реляционной базы данных обладают следующими свой- ствами:
- 2004 Петров Химический 2
в отношениях не должно быть кортежей-дубликатов; кортежи отношений неупорядочены;
• |
• |
• |
Из этих свойств отношения вытекают следующие важные след-
//´
/
/
Попов Исторический 4
Кузнецов Физический 1
z |
ˆ |
\
ствия.
• |
имеется атрибут или набор атрибутов, позволяющий идентифи-
Отношение
\ Атрибут
цировать кортеж; другими словами, в отношении всегда есть
Значение атрибута
Рис. 1
• |
первичный ключ.
• |
|
• |
Относительно свойства реляционного отношения, касающегося отсут- ствия кортежей-дубликатов, следует сделать важное замечание. В этом пункте SQL не полностью соответствует реляционной модели. А имен- но, в отношениях, являющихся результатами запросов, SQL допускает наличие одинаковых строк. Для их устранения в запросе используется ключевое слово DISTINCT (см. ниже).
Информация в реляционных базах данных, как правило, хранится не в одной таблице-отношении, а в нескольких. При создании несколь- ких таблиц взаимосвязанной информации появляется возможность вы- полнения более сложных операций с данными, т. е. более сложной обработки данных. Для работы со связанными данными из нескольких таблиц важным является понятие так называемых внешних ключей.
Внешним ключом таблицы называется атрибут или набор атри- бутов этой таблицы, каждое значение которых в текущем состоянии таблицы всегда совпадает со значением атрибутов, являющихся клю- чом, в другой таблице. Внешние ключи используются для связывания значений атрибутов из разных таблиц. С помощью внешних ключей обеспечивается так называемая ссылочная целостность базы данных, т. е. согласованность данных, описывающих одни и те же объекты, но хранящихся в разных таблицах.
|
1.2. Отличие SQL от процедурных языков программирования
Язык SQL относится к классу непроцедурных языков программи- рования. В отличие от универсальных процедурных языков, которые также могут быть использованы для работы с базами данных, язык SQL ориентирован не на записи, а на множества.
Это означает следующее. В качестве входной информации для формулируемого на языке SQL запроса к базе данных используется множество кортежей-записей одной или нескольких таблиц-отноше- ний. В результате выполнения запроса также образуется множество кортежей результирующей таблицы-отношения. Другими словами, в SQL результатом любой операции над отношениями также является отношение. Запрос SQL задает не процедуру, т. е. последовательность действий, необходимых для получения результата, а условия, которым должны удовлетворять кортежи результирующего отношения, сформу- лированные в терминах входного отношения (входных отношений).
1.3. Интерактивный и встроенный SQL
Существуют и используются две формы языка SQL: интерактив- ный SQL и встроенный SQL.
Интерактивный SQL используется для непосредственного ввода SQL-запросов пользователем и получения результата в интерактивном режиме.
Встроенный SQL состоит из команд SQL, встроенных внутрь про- грамм, которые обычно написаны на некотором другом языке (Паскаль, С, С++ и др.). Это делает программы, написанные на таких языках, более мощными, гибкими и эффективными, обеспечивая их приме- нение для работы с данными, хранящимися в реляционных базах. При этом, однако, требуются дополнительные средства обеспечения интерфейса SQL с языком, в который он встраивается.
Данная книга посвящена интерактивному SQL, поэтому в ней не обсуждаются вопросы построения интерфейсов, позволяющих связать SQL с другими языками программирования.
1.4. Составные части SQL
И интерактивный, и встроенный SQL подразделяются на следую- щие составные части.
Язык Определения Данных — DDL (Data Definition Language): дает возможность создания, изменения и удаления различных объектов базы данных (таблиц, индексов, пользователей, привилегий и т. п.).
К числу дополнительных функций DDL могут быть отнесены сред- ства определения ограничений целостности данных, определения по- рядка структур хранения данных, описания элементов физического уровня хранения данных.
Язык Обработки Данных — DML (Data Manipulation Language): предоставляет возможность выборки информации из базы данных и ее преобразования.
Тем не менее это не два различных языка, а компоненты единого SQL.
1.5. Типы данных
В языке SQL имеются средства, позволяющие для каждого атрибута указывать тип данных, которому должны соответствовать все значения этого атрибута.
Следует отметить, что определение типов данных является той частью, в которой коммерческие реализации языка не полностью согла- суются с требованиями официального стандарта SQL. Это объясняется, в частности, желанием сделать SQL совместимым с другими языками программирования.
1.5.1. Тип данных “строка символов”. Тип данных CHARACTER или CHAR представляет символьные строки фиксированной длины. Его синтаксис имеет вид:
CHARACTER [(<длина>)] или
CHAR [(<длина>)].
Текстовые значения поля таблицы, для которого определен тип
CHAR, имеют фиксированную длину, которая определяется параметром
<длина>. Этот параметр может принимать значения от 1 до 255, т. е. строка может содержать до 255 символов. Если во вводимой в поле текстовой константе фактическое число символов меньше числа, определенного параметром <длина>, то эта константа автоматически дополняется справа пробелами до заданного числа символов. Квадрат- ные скобки указывают на то, что значение параметра <длина> может не указываться явно. В этом случае длина строки полагается равной одному символу.
Тип данных для строк переменной длины может обозначать- ся ключевыми словами VARCHAR, CHARACTER VARYING или CHAR VARYING. Он описывает текстовую строку, которая может иметь про- извольную длину до определенного конкретной реализацией SQL мак- симума (в Oracle до 2000 символов). В отличие от типа CHAR, в этом случае при вводе текстовой константы, фактическая длина которой меньше заданной, ее дополнение пробелами до заданного максималь- ного значения не производится.
Константы, имеющие тип CHARACTER или VARCHAR, в выражениях SQL заключаются в одиночные кавычки, например, ‘ <текст> ’.
Следующие предложения эквивалентны:
VARCHAR [(<длина>)], CHAR VARYING [(<длина>)], CHARACTER VARYING [(<длина>)].
Если длина строки не указана явно, она полагается равной одному символу во всех случаях.
По сравнению с типом CHAR тип данных VARCHAR позволяет более экономно использовать память, выделяемую для хранения текстовых значений, и оказывается более удобным при выполнении операций, связанных со сравнением текстовых констант.
1.5.2. Числовые типы данных. Стандартными числовыми типа- ми данных SQL являются:
− |
• |
• |
− |
• |
• |
• |
• |
DOUBLE PRECISION — такое же число, как и REAL, но точность в два раза превышает точность для REAL.
• |
NUMBER [(<точность> [, <масштаб> ])].
− |
Типы DECIMAL и NUMERIC полностью эквивалентны типу NUMBER. Синтаксис:
DECIMAL [(<точность> [, <масштаб> ])], DEC [(<точность> [, <масштаб> ])], NUMERIC [(<точность> [, <масштаб> ])].
Напоминаем, что квадратные скобки указывают на необязатель- ность заключенных в них параметров.
1.5.3. Дата и время. Представление дат и времени в SQL зависит от конкретной СУБД. В Oracle тип данных DATE используется для представления даты и времени. Наличие типа данных для хранения да- ты позволяет поддерживать специальную арифметику дат. Добавление к переменной типа DATE целого числа означает увеличение даты на соответствующее число дней, а вычитание соответствует определению более ранней даты.
Константы типа DATE записываются в зависимости от форма- та, принятого в конкретной системе. Например, ‘03.05.1999’ или ‘12/06/1989’, или ‘03-nov-1999’, или ‘03-apr-99’.
1.5.4. Неопределенные или отсутствующие данные (NULL). Для обозначения отсутствующих, пропущенных или неизвестных зна- чений атрибута в SQL используется ключевое слово NULL. Довольно часто можно встретить словосочетание “ атрибут имеет значение NULL ”. Строго говоря, NULL не является значением в обычном пони- мании, а используется именно для обозначения того факта, что дей- ствительное значение атрибута на самом деле по каким-либо причинам отсутствует. Это приводит к ряду особенностей, что следует учитывать при использовании значений атрибутов, которые могут находиться в состоянии NULL.
• |
толкования результатов отсутствующие или NULL -значения атри- бутов игнорируются.
•
|
•
•
•
Т а б л и ц а 1.1. STUDENT (Студент)
STUDENT_ID SURNAME NAME STIPEND KURS CITY BIRTHDAY UNIV_ID
1.6. Используемые термины и обозначения
Ключевые слова — это используемые в выражениях SQL слова, имеющие специальное назначение (например, они могут обозначать конкретные команды SQL). Ключевые слова нельзя использовать для других целей, к примеру, в качестве имен объектов базы данных. В книге они выделяются шрифтом: КЛЮЧЕВОЕСЛОВО.
Команды, или предложения, являются инструкциями, с помощью которых SQL обращается к базе данных. Команды состоят из несколь- ких (одной или более) логических частей, называемых предложениями. Предложения начинаются ключевым словом и состоят из ключевых слов и аргументов.
Объекты базы данных, имеющие имена (таблицы, атрибуты и др.), в книге также выделяются особым образом: ТАБЛИЦА1, АТРИБУТ_2.
| |
1.7. Учебная база данных
В приводимых в пособии примерах построения SQL-запросов и контрольных упражнениях используется база данных, состоящая из следующих таблиц.
276 Петров Антон 200 4 NULL 5/08/1987 22
55 Белкин Вадим 250 5 Воронеж 20/01/1986 10
........................
STUDENT_ID — числовой код, идентифицирующий студента (идентификатор студента),
SURNAME — фамилия студента,
NAME — имя студента,
STIPEND — стипендия, которую получает студент,
KURS — курс, на котором учится студент, CITY — город, в котором живет студент, BIRTHDAY — дата рождения студента,
UNIV_ID — идентификатор университета, в котором учится студент.
Т а б л и ц а 1.2. LECTURER (Преподаватель)
LECTURER_ID | SURNAME | NAME | CITY | UNIV_ID |
Колесников | Борис | Воронеж | ||
Никонов | Иван | Воронеж | ||
Лагутин | Павел | Москва | ||
Струков | Николай | Москва | ||
Николаев | Виктор | Воронеж | ||
Сорокин | Андрей | Орел | ||
... | ... | ... | ... | ... |
LECTURER_ID — идентификатор преподавателя,
SURNAME — фамилия преподавателя,
NAME — имя преподавателя,
CITY — город, в котором живет преподаватель,
UNIV_ID — идентификатор университета, в котором работает преподаватель.
Т а б л и ц а 1.3. SUBJECT (Предмет обучения)
SUBJ_ID | SUBJ_NAME | HOUR | SEMESTER |
Информатика | |||
Физика | |||
Математика | |||
История | |||
Английский | |||
Физкультура | |||
... | ... | ... | ... |
SUBJ_ID — идентификатор предмета обучения,
SUBJ_NAME — наименование предмета обучения,
HOUR — количество часов, отводимых на изучение предмета,
SEMESTER — семестр, в котором изучается данный предмет.
G AAgAAAAhANr+kzB6BQAANSgAAA4AAAAAAAAAAAAAAAAAOgIAAGRycy9lMm9Eb2MueG1sUEsBAi0A FAAGAAgAAAAhAKomDr68AAAAIQEAABkAAAAAAAAAAAAAAAAA4AcAAGRycy9fcmVscy9lMm9Eb2Mu eG1sLnJlbHNQSwECLQAUAAYACAAAACEA4SWSfuEAAAAKAQAADwAAAAAAAAAAAAAAAADTCAAAZHJz L2Rvd25yZXYueG1sUEsBAi0ACgAAAAAAAAAhAHrHU0tWBgAAVgYAABQAAAAAAAAAAAAAAAAA4QkA AGRycy9tZWRpYS9pbWFnZTEucG5nUEsFBgAAAAAGAAYAfAEAAGkQAAAAAA== ">
UNIV_ID |
UNIV_NAME |
RATING |
CITY |
... |
ВГМА ... |
... |
Воронеж ... |
Т а б л и ц а 1.5. EXAM_MARKS (Экзаменационные оценки)
EXAM_ID | STUDENT_ID | SUBJ_ID | MARK | EXAM_DATE |
12/01/2006 | ||||
23/01/2006 | ||||
05/01/2006 | ||||
17/06/2005 | ||||
NULL | 22/06/2005 | |||
18/01/2006 | ||||
... | ... | ... | ... | ... |
EXAM_ID — идентификатор экзамена, STUDENT_ID — идентификатор студента, SUBJ_ID — идентификатор предмета обучения, MARK — экзаменационная оценка,
EXAM_DATE — дата экзамена.
Т а б л и ц а 1.6. SUBJ_LECT
LECTURER_ID |
SUBJ_ID |
МГУ | Москва | ||||
ВГУ | Воронеж | ||||
НГУ | Новосибирск | ... | ... | ||
РГУ | Ростов | LECTURER_ID — идентификатор преподавателя, | |||
БГУ | Белгород SUBJ_ID — идентификатор предмета обучения. | ||||
ТГУ | Томск ВОПРОСЫ |
UNIV_ID — идентификатор университета, UNIV_NAME — название университета, RATING — рейтинг университета,
CITY — город, в котором расположен университет.
1. Какие поля приведенных таблиц являются первичными ключами?
2. Какие данные хранятся в столбце 2 в таблице “Предмет обуче- ния”?
3. Как по-другому называется строка? столбец?
4. Почему мы не можем запросить для просмотра первые пять строк?
Г л а в а 2
ВЫБОРКА ДАННЫХ (ОПЕРАТОР SELECT)