Базы данных

Автор работы: Пользователь скрыл имя, 05 Сентября 2012 в 02:20, курс лекций

Описание

Банк данных – организация либо структурная единица организации, предназначенная для сбора и обработки информации о предметной области. В функции банка данных входит сбор информации о первичной области, ее обработка и хранение, а также генерация на ее основе результирующей информации. Следует отметить, что иногда технологии обработки информации, характерные для банков данных реализуются не в «чистом» виде, а как составная часть других систем, например, в задачах САПР (Систем Автоматизированного ПPоектирования).
Информация о состоянии предметной области, которая обрабатывается банком данных, накапливается и хранится в базе данных.

Работа состоит из  1 файл

Базы данных.docx

— 224.38 Кб (Скачать документ)

 Допустим, у нас гостевая книга использует для хранения информации базу данных 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).

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

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

 Подзапрос позволяет решать следующие задачи:

  • определять набор строк, добавляемый в таблицу на одно выполнение оператора INSERT;
  • определять данные, включаемые в представление, создаваемое оператором CREATE VIEW ;
  • определять значения, модифицируемые оператором UPDATE;
  • указывать одно или несколько значений во фразах WHERE и HAVING оператора SELECT;
  • определять во фразе FROM таблицу как результат выполнения подзапроса;
  • применять коррелированные подзапросы. Подзапрос называется коррелированным, если запрос, содержащийся в предикате, имеет ссылку на значение из таблицы (внешней к данному запросу), которая проверяется посредством данного предиката.

 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. они имеют одинаковое число столбцов, например, m;
  2. для всех i (i = 1, 2, ..., m) i-й столбец первой таблицы и i-й столбец второй таблицы имеют в точности одинаковый тип данных.

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

    Результат:  Продукт
 SELECT Продукт

 FROM Продукты

 WHERE Жиры = 0

 UNION

 SELECT Продукт

 FROM Соста

 WHERE БЛ = 1

 Майонез
 Лук
 Помидоры 
 Зелень
 Яблоки
 Сахар

 
 

 Из этого  простого примера видно, что избыточные дубликаты всегда исключаются из результата UNION. Поэтому, хотя в рассматриваемом  примере Помидоры, Зелень и Яблоки выбираются обеими из двух составляющих предложения SELECT, в окончательном  результате они появляются только один раз.

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

 UNION

 SELECT Продукт

 FROM Продукты

 WHERE Ca < 250

 позволяющую добавить к списку продуктов Масло, Рис, Мука и Кофе. Однако тот же результат можно получить простым изменением фразы WHERE первой части исходного запроса

Информация о работе Базы данных