Шрифт:
Интервал:
Закладка:
Ресурсы SQL
Приложение 1 содержит алфавитный список описаний внешних функций.
Используйте алфавитный указатель в конце этой книги для поиска неизвестных терминов.
Книги
Если предыдущие ваши "контакты" с SQL были минимальными, хорошая книга по SQL-92 будет бесценной. Следующий список (который не является исчерпывающим) может быть вам полезен.
Joe Celko пишет по SQL книги, предназначенные для решения проблем. Вот некоторые из них: "Joe Celko's SQL For Smarties: Advanced SQL Programming", "Joe Celko's Data and Databases: Concepts in Practice", и "Joe Celko's SQL Puzzles and Answers". Здесь описывается главным образом стандартный SQL, может быть с некоторым уклоном в Oracle.
David Rozenshtein и Tom Bondur "The Essence of SQL" - очень лаконичная книга в большей мере для начинающих.
Judith S. Bowman, Sandra Emerson, Marcy Darnovsky "The Practical SQL Handbook" - настольный справочник по стандарту SQL, получивший хорошие отзывы.
Hugh Darwen и Chris Date "A Guide to the SQL Standard" содержит все, что вам нужно знать об SQL-92, а также многое из того, о чем вы не знаете, что вы этого не знаете.
Jim Melton и Alan Simon "Understanding the New SQL: A Complete Guide" описывает SQL-89 и SQL-92. Это всеобъемлющий красиво оформленный справочник для начинающих. Включает некоторые базовые теории моделирования.
Martin Gruber "Mastering SQL" является переработанной и расширенной версией книги того же автора "Understanding SQL", которая делает стандартный SQL доступным даже для начинающих. Позволяет быстро приобрести солидные умения в разработке.[64]
Свободная поддержка SQL
По всем вопросам, связанным с SQL Firebird, присоединяйтесь к форуму поддержки Firebird на http://www.yahoogroups.com/community/firebird-support. Это добровольный список адресов электронной почты, где знающие и новые пользователи Firebird делятся своим опытом. Если вы предпочитаете интерфейс конференции, то здесь зеркально отображаются новости: news://news.atkin.com/egroups.ib-support. Вы можете послать список сообщений через зеркальную конференцию, если подпишетесь на список рассылки и будете использовать тот же адрес отправителя.
Пора дальшеЯзык манипулирования данными (DML) является подмножеством языка SQL, которое мы используем, чтобы определить наборы данных для чтения или обработки в приложениях. В следующей главе мы рассмотрим базовый синтаксис "большой четверки" операторов SQL: SELECT, INSERT, UPDATE и DELETE.
ГЛАВА 20. Запросы DML.
Приложения пользователя могут получить доступ к таблицам Firebird только одним путем - выполняя к ним запрос. По своей сущности запрос является оператором SQL, который передается на сервер. Оператор SQL является выражением, состоящим из ключевых слов, фраз и предложений на формализованном языке на базе английского. Этот язык имеет ограниченный словарь, который понятен клиентской библиотеке и серверу Firebird - а также, желательно, и человеку, который составляет такие выражения! Задачи создания, модификации и управления метаданными и данными - все без исключения - выполняются в запросах.
Строго говоря, оператор не является запросом, пока он не будет передан серверу. При этом большинство разработчиков используют термины оператор и запрос одинаково.
Все запросы DML обращаются к данным, постоянно хранящимся в базе данных в виде столбцов в таблицах. Запрос задает набор данных и одну или более операций, которые должны быть выполнены над этим набором. Он может использовать выражения для преобразования данных для поиска или сохранения или для предоставления специальных условий поиска для наборов данных.
Наборы данных
Запрос DML определяет логическую совокупность элементов данных, упорядоченных слева направо, из одного или более столбцов, называемую набором. Запрос может ограничивать спецификацию набора одной строкой или же набор может состоять из множества строк. В наборе, состоящем из множества строк, порядок столбцов в одной строке идентичен всем другим строкам в наборе.
Люди часто небрежно называют наборы "запросами". Эти слова не являются синонимами.
Таблица является набором
Таблица является набором, чья полная спецификация может быть получена из системных таблиц сервером базы данных, когда к таблице происходит обращение из запроса, полученного от клиента. Сервер Firebird выполняет свои собственные внутренние запросы к системным таблицам для получения метаданных, необходимых для выполнения клиентских запросов.
Выходные наборы
Общее использование оператора запроса, начинающегося с ключевого слова SELECT, - получение выходного набора для клиентского приложения с целью отображения данных для пользователя. Термины набор данных и набор записей являются синонимами для выходного набора. Выходной набор может содержать неупорядоченные строки или он может быть представлен как сортированный набор, в соответствии со спецификацией в предложении ORDER BY.
! ! !
ПРИМЕЧАНИЕ. Выражение "неупорядоченные строки" означает следующее. Строки таблицы хранятся без каких-либо атрибутов, и порядок неупорядоченных наборов может непредсказуемо меняться от одного запроса к другому.
. ! .
Например, следующий запрос создаст выходной набор из трех столбцов из таблицы TABLEA, содержащий каждую строку, которая соответствует условиям, указанным в предложении WHERE. Строки будут отсортированными, следовательно, строка с наименьшим значением в COL1 появится первой:
SELECT COL1, COL2, COL3 FROM TABLEA
WHERE COL3 = 'Mozart'
ORDER BY COL1;
Если не будет задано предложение WHERE, ТО набор будет содержать все строки из таблицы TABLEA, а не только те, в которых столбец COL3 будет иметь значение 'Mozart'.
Если нужны все столбцы из таблицы TABLEA, то вместо списка имен столбцов в операторе можно указать символ звездочки (*), например, оператор
SELECT * FROM TABLEA;
определяет выходной набор, состоящий из всех столбцов и всех строк таблицы TABLEA.
Кардинальное число и положение
Одним из терминов, который иногда можно встретить в отношении наборов, включая таблицы- является кардинальное число (cardinality, "мощность множества"). Оно описывает количество строк в наборе, который может быть таблицей или выходным набором. Реже можно встретить кардинальное число строки или кардинальное число значения ключа, что означает позицию строки в упорядоченном выходном наборе.
Термин, используемый для номера столбца в наборе, - положение (degree). Кроме того, вы можете встретить фразу типа положение столбца, означающую позицию столбца в порядке столбцов в наборе слева направо.
Входные наборы
Как часть SELECT ... FROM В запросе на поиск задает набор для вывода или для операции курсора, точно так же и другие операторы DML (INSERT, UPDATE и DELETE) задают входные наборы, идентифицируя данные, над которыми выполняется операция.
Входной набор запроса INSERT задает одну таблицу и упорядоченный слева направо список идентификаторов столбцов, которые получат входные значения в последующем предложении VALUES(). Предложение VALUES() должно поставлять список значений, которые в точности соответствуют порядку входного набора и типу данных его элементов.
Следующий пример определяет входной набор, состоящий из трех столбцов таблицы TABLEB. Константы в предложении VALUES о будут проверяться на присутствие трех значений и на наличие у них корректных типов данных:
INSERT INTO TABLEB(COLA, COLB, COLC)
VALUES(99, 'Christmas 2004', '2004-12-25');
Оператор INSERT имеет альтернативный синтаксис, в котором предложение VALUES о заменяется на выборку набора из одной или более других таблиц, реальных или виртуальных. Операторы INSERT подробно обсуждаются в разд. "Оператор INSERT".
Оператор UPDATE определяет свой входной набор, задавая одну таблицу и список из одного или более столбцов вместе с их значениями в предложении SET. Он идентифицирует строки, принимающие участие в операции, в предложении WHERE:
UPDATE TABLEB
SET COLB ='Labor Thanksgiving Day (Japan)',
COLC = '2002-23-11'
WHERE . . .
Операторы UPDATE подробно обсуждаются в разд. "Оператор UPDATE".
Запрос DELETE не может задавать столбцы в своем входном наборе - этот набор всегда определяется неявно * (все столбцы). Он идентифицирует строки, принимающие участие в операции, в предложении WHERE. Например, следующий запрос удалит все строки, где COLC (типа данных DATE) является датой, раньше 13 декабря 1999 г.:
DELETE FROM TABLEB
WHERE COLC < '1999-12-13';
Операторы DELETE подробно обсуждаются в разд. "Оператор DELETE".
Выходные наборы в качестве входных наборов
Сгруппированные или агрегатные запросыSQL имеет важную возможность использовать входной набор, сформированный из выходного набора, сгенерированного в том же самом запросе SELECT - предложение GROUP BY. Вместо того чтобы выходной набор из списка столбцов передавать клиенту, этот список передается на следующую стадию обработки запроса, где предложение GROUP BY приводит к объединению данных в одну или более вложенных групп. Обычно в каждой части подводится некоторый итог с помощью выражений, которые группируют (агрегируют) числовые значения на одном или более уровнях.
- Delphi. Учимся на примерах - Сергей Парижский - Программирование
- Сделай видеоигру один и не свихнись - Слава Грис - Программирование / Руководства
- Психбольница в руках пациентов - Алан Купер - Программирование