Опубликован: 02.08.2007 | Доступ: свободный | Студентов: 3892 / 754 | Оценка: 4.55 / 4.39 | Длительность: 27:09:00
ISBN: 978-5-9556-0111-3
Лекция 8:

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

< Лекция 7 || Лекция 8: 123456 || Лекция 9 >

Константы, выражения, системные переменные

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

В SQL существует ряд предопределенных системных переменных, которые можно использовать в выражениях вместо имен колонок и констант. К таким переменным относятся следующие:

  • NULL - для представления неопределенных значений;
  • ROWID - (в SQLBase) внутренний системный номер строки в таблице;
  • USER - имя пользователя, активного в данный момент;
  • SYSDATETIME - системное текущее время и дата;
  • SYSDATE - системная текущая дата;
  • SYSTIME - системное текущее время;
  • SYSTIMEZONE - временной пояс, установленный в системе.

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

В этом разделе вы узнали, какие вcтроенные типы данных предоставляются проектировщику баз данных в диалектах SQL доменов в физической модели реляционной базы данных. Заметим, что наиболее распространены три из них - varchar2, number и date. Наличие такого небольшого набора типов данных может показаться недостатком, однако это не так. В Oracle типы, определенные в других СУБД и диалектах SQL, можно создать, используя определенный пользователем тип данных. Например, тип money - это тип number с двумя десятичными разрядами, а тип positive integer - тип number без десятичных разрядов и с ограничением на ввод отрицательных значений. По крайней мере, при таком положении дел вам не приходится беспокоиться об ограничениях на внутреннюю память, решая, как хранить вещественное число - с использованием типа float или типа double.

Самое главное при выборе типов данных - обеспечение непротиворечивости. Если вы определите номер шасси автомобиля в одной таблице как number(11), а в другой таблице - как varchar(15), то, когда дело дойдет до соединения этих таблиц, неприятности вам обеспечены. Напишите-ка SQL-предложение для сравнения 918273645 и "918-27-36/4/5". Да так, чтобы оно эффективно работало в предложении, выполняющем соединение!

Приложение 1 к лекции 8

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

Сотрудник как объект определяется карточкой личного учета, которая имеет весьма сложную внутреннюю структуру и которую целесообразно как теоретически, так и практически представлять совокупностью объектов, связанных в целое через ее номер (чаще всего искусственно придуманный табельный номер служащего). Аналогично, подразделение как объект определяется структурой организации и его функциями в ней. Проекты (другими словами, работы) являются объектами, которые отражают состояние деятельности организации в получении прибыли. Логическая схема базы данных приведена на рис. 8.2. Для простоты изложения большая часть атрибутов и объектов опущено - пример преследует иллюстрированные и учебные цели и не претендует на полноту представления данных.

Логическая структура учебной базы данных

Рис. 8.2. Логическая структура учебной базы данных

Определение таблиц данных приведено ниже. Таблица DEPARTAMENT содержит информацию о подразделениях организации, таблица EMPLOYEE - о служащих данной организации, таблица PROJECT - информацию о проектах, выполняемых в организации.

Таблица 8.10. Подразделение (DEPARTMENT)
Номер подразделения DEPNO (PK) Integer
Наименование DNAME char(20)
Размещение LOC char(20)
Руководитель MANAGER char(25)
Телефон PHONE CHAR(15)
Номер личной карточки
Таблица 8.11. Служащий (EMPLOYEE)
Номер личной карточки EMPNO (PK) Integer
Фамилия ENAME char(25)
Имя LNAME char(20)
Страховка SSECNO char(10)
Номер подразделения DEPNO Integer
Должность JOB char(25)
Возраст AGE Integer
Стаж HIREDATE Data
Доплаты COMM dec(9,2)
Зарплата SAL dec(9,2)
Штрафы FINE dec(9,2)
Таблица 8.12. Проекты
Шифр проекта PROJNO char(8)
Наименование PNAME char(25)
Стоимость BUDGET Number(9,2)

Литература: [11], [14], [20], [30].

< Лекция 7 || Лекция 8: 123456 || Лекция 9 >
Александра Каева
Александра Каева
Михаил Забелкин
Михаил Забелкин