Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Vedenie_v_spetsialnost.docx
Скачиваний:
19
Добавлен:
14.04.2015
Размер:
141.36 Кб
Скачать

Ведение в язык sql

Большинство выпускаемых в настоящие время СУБД позволяют использовать для управления данными структурированный язык запросов SQL (Structured Query Language)

Язык SQL – первый и пока единственный стандартный язык для работы с БД, который получил достаточное распространение.

Язык SQL был разработан в середине 1970-х годов в компании IBM и предназначен для создания удобных и понятных пользователями запросов к реляционным базам данных.

Вскоре SQL и его аналоги были реализованы во многих реляционных СУБД.

Начиная с 1980-х годов ведётся деятельность по стандартизации языка SQL.

К настоящему времени разработано и утверждено несколько стандартов языка: SQL/89 SQL/92 SQL/99 SQL/2003

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

Особенности языка SQL.

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

  2. Переносимость. Благодаря наличию международного стандарта, тексты SQL – запросов могут быть достаточно легко перенесены из одной СУБД в другую. (Единственно, что при применении некоторых специфичных для реализации возможностей такой переносимости добиться очень трудно).

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

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

Классы инструкций языка sql(по sql/92)

Язык определения данных (DDL).

содержит команды, которые обеспечивают создание объектов базы данных и манипулирование ими.

CREATE… - создать

ALTER… - изменить

DROP… - удалить

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

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

INSERT… - добавить данные

UPDATE… - изменить данные

DELETE… - удалить данные

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

содержит команды для разрешения/ограничения доступа к данным.

GRANT… - добавить разрешение

REVOKE… – отменить разрешение

Создание и удаление базы данных

CREATE DATABASE Имя БД

создание новой базы данных

ALTER DATABASE Имя БД

изменить общие характеристики БД (кодировочную таблицу и т.д.)

DKOP DATABASE Имя БД

удалить базу данных и все её таблицы

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

CREATE TABLE Имя Таблицы(

описания поля[параметры поля],

описание поля[параметры поля],

[Общие параметры]

);

Описание поля

ИмяПоля ТипПоля[(размер)]

[PRIMARY KEY[AUTOINCREMENT] I UNIQNE ]

[NOTNULL | NULL]

[CHECK(выражение)]

[DEFAULT ЗначениеПоУмолчанию]

Часто используемые типы полей(по ANSI SQL)

Логический

BOOLEAN

Символьные

CHARACTER(N)

VARCHAR(N)

Целочисленные

SMALLINT

INTEGER

BIGINT

Дробные

FLOAT

DECIMAL(M,D)

Дата и время

DATE

TIME

TIMESTAMP

Большинство существующий СУБД по-разному осуществляют поддержку типов данных:

  • обычно отсутствует полная реализация всех стандартных типов данных;

  • реализация отдельных типов данных может отличаться от описания в стандарте;

  • типы данных могут иметь другие имена;

  • имеется поддержка дополнительных типов данных, не упомянутых в стандарте.

Общие параметры таблицы

Составной первичный ключ

PRIMARY KEY (список полей)

Внешний ключ

FOREIGN KEY (список полей)

REFERENCES таблица (список полей)

[ON DELETE {CASCADE | SET NULL | NO ACTION}]

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

Пример. База данных “Предприятие”

brigade

id_brigade INT(10) NOT NULL(PK)

name CHAR(30) NOT NULL

leader INT(10) NULL(FK)

employee

icl_employee INT(10) NOT NULL (pk)

name CNAR (30) NOT NULL

profession-icl INT(10) NULL(FK)

brigade INT(10) NULL(FK)

employeeinfo

id_employee_info INT(10) NOT NULL (PK)(FK)

address CNAR(100) NULL

Пример. Создание таблицы «Профессии»

CREATE TABLE Profession(

Id_profession INTEGER PRIMARI KEY AUTOINCREMENT,

jjbtitle CHAR(40) NOT NULL

);

или

CREATE TABLE Profession(

id_profession INTEGER PRIMARY KEY AUTOINCREMENT,

jobtitle CHAR(40) NOT NULL,

PRIMARY KEY (id_profession)

);

Пример. Создания таблицы «Бригада»

CREATE TABLE Brigade(

id_brigade INTEGER PRIMARY KEY AUTO_INCREMENT,

name CHAR(30) NOT NULL

);

Пример. Создания таблицы «Сотрудники»

CREATE TABLE Employee(

id_employee INTEGER PRIMARY KEY AUTO_INCREMENT,

name CHAR(30) NOT NULL,

profession_id INTEGER,

brigade_id INTEGER,

FOREIGN KEY (profession_id) REFERENCES Profession (id_profession),

FOREIGN KEY (brigade_id) REFERENCES Brigade (id_brigade)

);

Пример: Создания таблицы «Информация о сотруднике»

CREATE TABLE EmployeeInfo(

id_employee_info INTEGER PRIMARY KEY NOT NULL,

address CHAR(100),

FOREIGN KEY (id_employee_info) REFERENCES Employee (id_employee)

);

ДОБАВЛЕНИЕ ЗАПИСИ В ТАБЛИЦУ

INSERT INTO ИмяТаблицы (Список полей) VALUES (Список значений);

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

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

Пример.

INSERT INTO Profession (id_profession, jobtitle) VALUES (1001, “слесарь”);

INSERT INTO Brigade (id_brigade, name) VALUES (2001, “слесарная”);

INSERT INTO Employee (id_employee, name, profession_id, brigade_id) VALUES (1, «Иванов И.И.», 1001, 2001);

INSERT INTO EmployeeInfo (id_employee_info, address) VALUES (1, «ул.Ленина, д.1 кв.1»);

Изменение существующей записи

UPDATE ИмяТаблицы SET ИмяПоля=Выражение[, ...] WHERE Условие;

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

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

Пример. Назначения сотрудника с id=1 ,бригадиром бригады с id=2001

UPDATE Brigade SET leader=1 WHERE id_brigade=2001;

Удаление строк из таблицы

DELETE FROM ИмяТаблицы WHERE Условие;

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

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

Пример. Удаление сотрудника с id=17

DELETE FROM Employee WHERE id_employee=17;

Выборка данных

SELECT что

FROM откуда

WHERE Условие для записи

GROUP BY разбиение на группы

HAVING условие для групп

ORDER BY порядок сортировки

Формат предложения SELECT:

SELECT [DISTINCT | ALL] список выражений | *

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

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

Пример 1. Получить содержимое всех полей таблицы Employee

SELECT * FROM Employee;

Id_employee

name

Profession_id

Brigade_id

1

Иванов И.И.

1003

2001

2

Петров П.П.

Пример2. Получить содержимое поля name таблицы Employee

SELECT name FROM Employee;

Ключевое слово DITINCT ПОЗВОЛЯЕТ ИСКЛЮЧИТЬ из результирующего набора повторяющиеся записи:

SELECT DISTINCT profession_id FROM Employee;

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

выражение AS имя

Пример. Рассчитать премию сотрудников в размере 20% от оклада

SELECT id_employee, name, salary, salary*0.2 AS bonus FROM Employee

Формат предложения FROM:

FROM таблица [JOIN таблица2 ON условие ...]

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

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

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

Таблица. Поле.

Пример1. Получить домашние адреса сотрудников

SELECT Employee.name, EmployeeInfo.address

FROM Employee JOIN EmployeeInfo ON Employee.id_employee=EmployeeInfo.id_employee;

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

Пример 2. Получить профессии сотрудников

SELECT name, jobtitle

FROM Employee JOIN Profession ON profession_id=id_profession;

Формат предложения WHERE:

WHERE Поле ОПЕРАТОР Выражения …

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

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

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

Отношения: <, >, =, ≤, ≥, <>

Логические: AND, OR, NOT

Специальные: IN, BETWEEN, IS, LIKE, EXISTS

Оператор IN используется для сравнения поля с несколькими значениями

jobtitle IN («слесарь», «столяр, «штукатур»)

<=> jobtitle = “слесарь” OR jobtitle = “столяр” OR jobtitle = “штукатур”

Оператор BETWEEN используется для проверки, попадает ли значение поля в заданный диапазон

salary BETWEEN 700 AND 900

<=> salary ≥ 700 AND salary ≤900

Оператор IS используется для сравнения со значением NULL (т.е. проверяет, имеет ли поле значение)

brigade_id IS NULL

Оператор LIKE используется для сравнения с шаблоном строки

В шаблоне могут использоваться символы:

_ - соответствует ровно одному любому символу

% - соответствует любому количеству любых символов

Пример условия

Результат поиска

Word LIKE ‘За_ор’

Забор

Затор

Word LIKE ‘Д%нь’

День, Длинная тень

Word LIKE ‘%й’

138-й, Последний

Пример 1. Получить список сотрудников имеющих профессию «столяр»

SELECT name

FROM Employee

WHERE profession_id = 1001;

или

SELECT name

FROM Employee JOIN Profession ON profession_id = id_profession

WHERE jobtitle = ‘столяр’;

Пример 2. Получить список сотрудников , проживающих на улице Чкалова.

SELECT name

FROM Employee JOIN EmployeeInfo

ON Employee.id_employee = EmployeeInfo.id_employee

WHERE address LIKE ‘%Чкалова%’;

Формат предложение GROUP BY

GROUP BY список полей

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

С точки зрения реляционной алгебры предложение GROUP BY можно рассматривать как деление отношений.

При использовании предложения GROUP BY, предложение SELECT может содержать выражения, содержащие только

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

SELECT Brigade.name, Profession.jobtitle

FROM Employee

JOIN Brigade

ON Employee.brigade_id = Brigade.id_brigade

JOIN Profession

ON Employee.profession_id = Profession.id_profession

GROUP BY Brigade.name, Profession.jobtitle;

Итог:

name jobtitle

столярная столяр

слесарная слесарь

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

MAX (поле|выражение)

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

MIN (поле|выражение)

находит минимальное значение поля (выражения)

AVG (поле|выражение)

находит среднее значение поля (выражения)

SUM (поле|выражение)

находит сумму значения поля (выражения)

COUNT (поле|*)

находит количество непустых полей (общее количество записей)

Пример. Получить количество сотрудников в каждой бригаде.

SELECT Brigade.name, count (*) AS count

FROM Employee

JOIN Brigade ON Employee.brigade_id = Brigade.id_brigade

GROUP BY Brigade.name;

Итог:

name count

столярная 2

слесарная 2

Агрегатные функции допустимо применять без использования предложения GROUP BY. В этом случае из действие распространяется на всю таблицу.

Пример. Найти общее количество сотрудников

SELECT count (*) AS count

FROM Employee;

Итог:

count

5

Формат предложения HAVING:

HAVING условие …

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

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

Пример. Получить список бригад с заданным количеством сотрудников

SELECT Brigade.name, count (*) AS count

FROM Employee

JOIN Brigade ON Employee.brigade_id = Brigade.id_brigade

GROUP BY Brigade.name

HAVING count (*) = 2;

Итог:

name count

столярная 2

слесарная 2

Если в одном запросе встречаются и предложения WHERE, и предложение HAVING, то отбор осуществляется по следующей схеме:

  1. Из исходной таблицы выбираются записи, удовлетворяющие условию WHERE.

  2. Полученный набор записей разбивается на группы в соответствии с GROUP BY.

  3. Из групп записей выбираются те, которые удовлетворяют условию HAVING.

Формат предложения ORDER BY;

ORDER BY поле [ ASC | DESK] [ …]

Предложение ORDER BY позволяет отсортировать строки результирующего набора по значениям одного или нескольких столбцов (или выражений)

ASC – сортировка по возрастанию (по умолчанию)

DESC – сортировка по убыванию

Пример. Вывод фамилий сотрудников в алфавитном порядке

SELECT Brigade.name AS BrigadeName, Employee.name AS EmployeeName

FROM Employee JOIN Brigade ON Employee.brigade_id = Brigade.id_brigade

ORDER BY BrigadeName ASC, EmployeeName ASC.

Итог:

BrigadeName EmployeeName

слесарная Андреев А.А.

слесарная Петров П.П.

столярная Иванов И.И.

столярная Сидоров С.С.

Технология доступа к данным

Различные СУБД по-разному организуют и хранят базы данных:

- Для каждой таблицы отдельные файлы (Paradox и dBase). БД – каталог, в котором находятся файлы таблиц;

- Несколько таблиц в одном файле (MS Access и InterBase). БД – файл с путём доступа к нему.

Технологии доступа к данным решают проблему унификации доступа к различным базам данных – предоставление универсального способа доступа к разным форматам данных единым образом.

С++ Builder предлагает следующие механизмы доступа к данным:

  • BDE (IDAPI);

  • ADO; // будем рассматривать

  • dbExpress;

  • IntelBase Express.

Средства C++ Builder для работы с базами данных можно разделить на 2 вида:

  • Инструменты – специальные программы и пакеты, обеспечивающие обслуживание БД вне разрабатываемых приложений.

  • Компоненты – предназначены для создания приложений, осуществляющих операции с базами данных.

Инструменты С++ Builder для операции с БД:

BDE Administrator – утилита для настройки различных параметров BDE, настройки драйверов баз данных, создания и удаления драйверов ODBC, создания и обслуживания псевдонимов.

Database Desktop – программа предназначенная для создания и редактирования структуры и записей таблиц, а также создания, редактирования и выполнения SQL-запросов.

SQL Explorer – проводник БД, позволяющий просматривать и редактировать БД и словари данных.

SQL Monitor – программа отслеживания порядка выполнения SQL-запросов к удалённым БД.

Data Pump – программа для переноса данных (схемы базы данных и содержимого) между БД.

Компоненты для создания приложений БД в C++ Builder:

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

  • Визуальные. Используются для построения интерфейса приложения БД.

Компоненты для создания приложений БД в С++ Builder сгруппированы на следующих страницах:

Data Access – не визуальные компоненты, предназначенные для организации доступа к данным.

DataSource (источник данных)

ClientDataSet (клиентский набор данных)

DataSetProvier (провайдер набора данных)

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

Data Controls – визуальные компоненты, предназначенные для управления данными.

DBGrid (сетка или таблица)

DBNavigator (навигационный интерфейс)

DBText, DBEdit, DBMemo, DBImage, DBListBox, DBComboBox, DBCheakBox, DBRadioGroup

DBLookupListBox, DBLookupComboBox

DBRichEdit, DBCtrlGrid, DBChart

dbExpress – компоненты, предназначенные для соединения приложений для работы с БД с помощью dbExpress

SQLConnection dbExpress (соединение с сервером БД

SQLDataSet (набор данных)

SQLQuery (набор данных запроса)

SQLStoredProc (вызов хранимой процедуры сервера)

SQLTable (набор данных таблицы)

SQLMonitor (монитор выполнения SQL-запросов)

SQLClientDataSet (клиентский набор данных)

DataSnap – содержит компоненты, предназначенные для создания трёхуровневых (многоуровневых) приложений.

BDE – содержит компоненты, предназначенные для управления данными с использованием BDE.

Table

Query

StoredProc

DataBase

Session, Batch Move, UpdateSQL, NestedTable, BDEClientDataSet

ADO – компоненты, предназначенные для управления данными с использованием технологии ADO (Active Data Objects)

ADOConnection

ADOCommand

ADODataSet

ADOTable

ADOQuery

ADOStoredProc, RDSConnection

InterBase – компоненты, предназначенные для работы с сервером InterBase

IBTable, IBQuery, IBStoredProc, IBDatabase, IBTransaction, IBUpdateSQL, IBDataSet, IBSQL, IBDatabaseInfo, ...

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

DecisionCube, DecisionQuery, DecisionSource, SecisionPivor, DecisionGrid, DecisionGraph

QReport – компоненты, предназначенные для построения отчётов.

В большинстве случаев назначение компонента можно определить по префиксу:

  • DB – визуальный компонент, связан с данными и используется для построения интерфейса приложения БД

  • QR – компонент используется для построения отчётов QuickReport

  • IB – компонент предназначен для работы с сервером InterBase

При работе с БД C++ Builder дополнительно предоставляет классы исключений:

  • EDatabaseError – ошибка БД

    • EDBEEngineError – ошибка BDE

    • EDBClient – ошибка в приложении клиента

    • EUpdateError – ошибка при обновлении записей

  • EDBEditError – введённое в поле значение не соответствует типу поля

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]