Автор работы: Пользователь скрыл имя, 05 Сентября 2012 в 02:20, курс лекций
Банк данных – организация либо структурная единица организации, предназначенная для сбора и обработки информации о предметной области. В функции банка данных входит сбор информации о первичной области, ее обработка и хранение, а также генерация на ее основе результирующей информации. Следует отметить, что иногда технологии обработки информации, характерные для банков данных реализуются не в «чистом» виде, а как составная часть других систем, например, в задачах САПР (Систем Автоматизированного ПPоектирования).
Информация о состоянии предметной области, которая обрабатывается банком данных, накапливается и хранится в базе данных.
Допустим, у нас гостевая книга использует для хранения информации базу данных MySQL.
Таблица (с именем db_guest), содержащая данные об оставленных сообщениях, имеет следующую структуру:
id - поле содержит идентификационный уникальный номер записи;
name - поле содержит имя пользователя, оставившего сообщение;
mail - е-майл пользователя;
url - URL пользователя;
content - непосредственно, само сообщение.
15.Команда
SELECT SQL.Соединение таблиц. Вычисляемые
поля. Агрегатные функции. Группировка
записей.
Команда Select используется для запросов к базе данных с целью извлечения из нее информации.Синтаксис команды следующий:
SELECT [STRAIGHT_JOIN] [DISTINCT | ALL] select_expression,...
[FROM tables... [WHERE where_definition] [GROUP BY column,...]
[ORDER BY column [ASC | DESC], ...] HAVING full_where_definition
[LIMIT [offset,] rows] [PROCEDURE procedure_name]]
[INTO OUTFILE 'file_name'... ]
Реляционные базы данных могут быть отличным инструментом для системного администрирования. Доступ и управление реляционными базами осуществляется при помощи команд SQL (Structured Query Language, языка структурированных запросов).
SQL -
это командный язык для
Элементы
таблицы не используются для представления
отношений с другими
Большая часть SQL-операторов предназначена для работы с данными из этих строк и столбцов, обеспечивая пользователям возможность добавления, удаления, выборки, сортировки и связывания их между таблицами.
Запрос информации
Являясь системным администратором, чаще всего вы будете применять SQL-команду SELECT, которая используется для получения информации с сервера. Перед тем как говорить об этой команде, нужно заметить, что SELECT - это пропуск в мир SQL. Мы покажем только самые простые формы данной команды. Умение создавать хорошие запросы (и умение проектировать базы данных, к которым легко такие запросы строить) - это искусство, и более подробно этот вопрос рассматривается в книгах, целиком посвященных SQL и базам данных.
В самой простой форме SELECT служит для получения информации о сервере и соединении. В этом случае не нужно определять источник данных. Вот два примера:
-- оба зависят от производителя базы данных
SELECT ©sfiERVERNAME
SELECT VERSIONO.
Первый оператор возвращает имя сервера для Sybase или MS-SQL; второй - текущую версию сервера MySQL.
Создание таблицы производится командой CRTEATE TABLE.
CREATE TABLE table_name(column_name1 type, column_name2 type,...)
· table_name - имя новой таблицы;
· column_name - имена колонок (полей), которые будут присутствовать в создаваемой таблице.
· type - определяет тип создаваемой колонки.
16.Команда
SELECT SQL. Использование
подзапросов. Объединение
запросов (union)/
Команда Select используется для запросов к базе данных с целью извлечения из нее информации.Синтаксис команды следующий:
SELECT [STRAIGHT_JOIN] [DISTINCT | ALL] select_expression,...
[FROM tables... [WHERE where_definition] [GROUP BY column,...]
[ORDER BY column [ASC | DESC], ...] HAVING full_where_definition
[LIMIT [offset,] rows] [PROCEDURE procedure_name]]
[INTO OUTFILE 'file_name'... ]
Реляционные базы данных могут быть отличным инструментом для системного администрирования. Доступ и управление реляционными базами осуществляется при помощи команд SQL (Structured Query Language, языка структурированных запросов).
SQL -
это командный язык для
Элементы
таблицы не используются для представления
отношений с другими
Большая часть SQL-операторов предназначена для работы с данными из этих строк и столбцов, обеспечивая пользователям возможность добавления, удаления, выборки, сортировки и связывания их между таблицами.
Язык SQL разрешает использовать в других операторах языка DML подзапросы, которые являются внутренними запросами, определяемыми оператором SELECT.
Подзапрос - очень мощное средство языка SQL. Он позволяет строить сложные иерархии запросов, многократно выполняемые в процессе построения результирующего набора или выполнения одного из операторов изменения данных (DELETE, INSERT, UPDATE).
Условно подзапросы иногда подразделяют на три типа, каждый из которых является сужением предыдущего:
Подзапрос позволяет решать следующие задачи:
Hекоторые СУБД (например, СУБД Oracle) позволяют на основе подзапроса создавать новые таблицы с помощью оператора CREATE TABLE.
Простым примером использования подзапроса может служить следующий оператор:
SELECT * from tbl1
WHERE f2=(SELECT f2 FROM tbl2
WHERE f1=1);
В данном операторе подзапрос всегда должен возвращать единственное значение, которое будет проверяться в предикате. Если подзапрос вернет более одного значения, то СУБД выдаст сообщение об ошибке выполнения SQL-оператора.
В случае если подзапрос не выберет ни одной строки, то предикат будет равен UNKNOWN, что большинством СУБД интерпретируется как FALSE.
Стандарт определяет запись предиката в форме "значение оператор подзапрос". Однако некоторые СУБД также позволяют записывать предикат в форме, указывающей подзапрос слева от оператора сравнения.
Например:
SELECT * from tbl1 WHERE
(SELECT f2 FROM tbl2 WHERE f1=1) = f2;
Очень часто с подзапросами используются агрегирующие функции, предоставляющие возможность сформулировать условие типа "больше, чем среднее по группе".
Например:
SELECT f1,f2,f3 FROM tbl1
WHERE f2> (SELECT AVG(f2) FROM tbl1);
Если результатом подзапроса становится группа строк (это случается всегда, когда условие не гарантирует уникальности значения проверяемого предикатом внутреннего запроса), то следует использовать оператор IN, осуществляющий выбор одного значения из указываемого множества.
Например:
SELECT * from tbl1 WHERE
f2 IN (SELECT f2 FROM tbl2 WHERE f1=1);
В этом случае предикат принимает значение TRUE, если хотя бы одно из значений, возвращаемых подзапросом, удовлетворяет условию.
Однако применение оператора IN имеет и некоторые смысловые недостатки: в запросе четко не определяется, сколько строк должны быть результатом выполнения запроса. При построении отношений для реальной модели данных это может приводить к некоторой неоднозначности и зависимости от самих данных. В противном случае, если модель данных предполагает в качестве постоянного результата подзапроса наличие только одной строки и, соответственно, использует оператор сравнения =, а структура данных позволяет ввод значений, когда в результате подзапроса будет более одной строки, то при использовании такого SQL-оператора в какой-то момент времени может проявиться ошибка.
Если в запросе участвуют более двух таблиц, то для большей наглядности имена полей иногда квалифицируют именами таблиц, указывая их через точку. Стандарт позволяет не квалифицировать имя поля именем таблицы в том случае, если не возникает неоднозначности (поле сначала ищется в таблице, указанной фразой FROM текущего запроса, затем внешнего запроса и т.д.).
Очень часто вместо записи оператора SELECT с использованием подзапроса можно применять соединения. Однако на практике большинство СУБД подзапросы выполняют более эффективно. Тем не менее, при проектировании комплекса программ с критичными требованиями по быстродействию, разработчик должен проанализировать план выполнения SQL-оператора для конкретной СУБД.
Наиболее продвинутые СУБД, такие как Oracle, предоставляют ряд SQL-операторов, позволяющих оценить производительность выполнения конкретного оператора языка SQL, а также определить уровень оптимизации, применяемый для данного оператора.
Подзапрос может быть указан как в предикате, определяемом фразой WHERE, так и в предикате по группам, определяемом фразой HAVING.
Например:
SELECT avg_f1, COUNT (f2) from tbl1
GROUP BY avg_f1
HAVING avg_f1 >(SELECT f1 FROM tbl1
WHERE f3='a1');
Объединение (UNION)
В литературе [2] рассматривалась реляционная операция "Объединение", позволяющая получить отношение, состоящее из всех строк, входящих в одно или оба объединяемых отношения. Но при этом исходные отношения или их объединяемые проекции должны быть совместимыми по объединению. Для SQL это означает, что две таблицы можно объединять тогда и только тогда, когда:
Например, выдать названия продуктов, в которых нет жиров, либо входящих в состав блюда с кодом БЛ = 1:
Результат: | Продукт | |||||||
SELECT Продукт
FROM Продукты WHERE Жиры = 0 UNION SELECT Продукт FROM Соста WHERE БЛ = 1 |
|
Из этого простого примера видно, что избыточные дубликаты всегда исключаются из результата UNION. Поэтому, хотя в рассматриваемом примере Помидоры, Зелень и Яблоки выбираются обеими из двух составляющих предложения SELECT, в окончательном результате они появляются только один раз.
Предложением с UNION можно объединить любое число таблиц (проекций таблиц). Так, к предыдущему запросу можно добавить (перед точкой с запятой) конструкцию
UNION
SELECT Продукт
FROM Продукты
WHERE Ca < 250
позволяющую добавить к списку продуктов Масло, Рис, Мука и Кофе. Однако тот же результат можно получить простым изменением фразы WHERE первой части исходного запроса