Russian Belarusian English German Japanese Ukrainian

Rashka.studio - игры и приложения для Android! Заходи, ждём тебя =)

Отбор записей из таблицы

CuBook05

Откройте новое приложение C++Builder, перенесите на форму компонент Query со страницы библиотеки DataAccess и установите его свойство DatabaseName равным dbP - базе данных Paradox. В некоторых случаях полезно изменить этот псевдоним на ib - аналогичную базу данных InterBase. Поместите на форму компонент DataSource и в его свойстве DataSet задайте Query1. Поместите также на форму компонент DBGrid и в его свойстве DataSource задайте DataSource1.
Теперь тестовое приложение для экспериментов с языком SQL готово. Операторы SQL можно писать в свойстве SQL компонента Query1, а чтобы увидеть результаты выполнения написанного оператора, надо будет устанавливать значение свойства Active компонента Query1 в true. Это надо будет делать после записи каждого нового оператора.
 
Одна из форм этого оператора имеет синтаксис:
SELECT <список имен полей> FROM <таблица> WHERE «условие отбора> ORDER BY <список имен полей>;
Элементы оператора WHERE и ORDER BY не являются обязательными. Элемент WHERE определяет условие отбора записей: отбираются только те, в которых условие выполняется. Элемент ORDER BY определяет упорядочивание возвращаемых записей.
<таблица> - это не компонент Table, а именно та таблица базы данных, из которой осуществляется отбор, например, Pers.
 
Например, оператор:
SELECT Fam, Nam, Par, Year_b FROM Pers
указывает, что следует вернуть поля Fam, Nam, Par и Year_b из таблицы Pers. Запишите его в свойстве SQL компонента Query1, установите значение свойства Active компонента Query1 в true и посмотрите результаты.
Если указать вместо списка полей символ "*", то будет означать, что требуется вернуть все поля. Например, оператор:
SELECT * FROM Pers
означает выбор всех полей.
 
В списке могут быть не только сами поля, но и любые выражения от них с арифметическими операциями +, —, *, /. После выражения может записываться псевдоним выражения в форме: AS <псевдоним>. В качестве псевдонима может фигурировать любой идентификатор, на который потом можно будет при необходимости ссылаться. Указанный псевдоним будет при отображении результатов фигурировать в заголовке таблицы.
 
Такими простыми средствами создаются аналоги вычисляемых полей, которые при использовании компонента Table требовали гораздо больших усилий и написания обработчика события OnCalcFields. Впрочем, в обработчике можно было написать сколь угодно сложную программу вычисления, что в данном случае затруднительно. Правда компонент Query, работающий в C++Builder с SQL, позволяет создавать вычисляемые поля и с помощью обработчика события OnCalcFields.
 
Ниже представлена таблица форм условия отбора, задаваемого после ключевого слова WHERE. Это условие определяет критерий, по которому отбираются записи. Оператор Select отбирает только те записи, в которых заданное условие истинно. Условие может включать имена полей (кроме вычисляемых), константы, логические выражения, содержащие арифметические операции, логические операции and, or, not и операции отношения:
Тип Значение
= равно
> больше
>= больше или равно
< меньше
<= меньше или равно
!= не равно
like наличие заданной последовательности символов
between ... and диапазон значений
in соответствие элементу множества
 
Первые шесть операций очевидны. Например, оператор:
SELECT Fam FROM Pers WHERE Sex=false and Year_b > 1960
отберет записи, относящиеся к женщинам, родившимся после 1960 года.
 
Операция Like имеет синтаксис:
<поле> LIKE '<последовательность символов>'
Эта операция применима к полям типа строк и возвращает true, если в строке встретился фрагмент, заданный в операции как <последовательность символов>. Заданным символам может предшествовать и их может завершать символ процента "%", который означает, что любое количество любых символов. Если символ процента не указан, то заданная последовательность символов должна соответствовать только целому слову. Например, условие:
Fam LIKE 'А%'
означает, что будут отобраны все записи, в которых фамилия начинается с заглавной русской буквы "А" (операция Like различает строчные и прописные символы). Условию:
Fam LIKE 'Иванов%'
будут удовлетворять фамилии «Иванов» и «Иванова», а условию:
Fam LIKE '%ван%'
кроме этих фамилий будет удовлетворять, например, фамилия «Иванников».
 
Операция between ... and имеет синтаксис:
<поле> between <значение> and <значение>
и задает для указанного поля диапазон отбираемых значений. Например, оператор:
SELECT Fam, Year_b FROM Pers WHERE Year_b BETWEEN 1960 AND 1970
отберет записи сотрудников в заданном диапазоне возраста (включая граничные значения 1960 и 1970).
 
Операция In имеет синтаксис:
<поле> in (<множество>)
и отбирает записи, в которых значение указанного поля является одним из элементов указанного множества. Например, оператор:
SELECT Fam, Year_b FROM Pers WHERE Fam IN('Иванов', 'Петров', 'Сидоров')
отберет записи сотрудников с заданными фамилиями, а оператор:
SELECT Fam, Year_b FROM pers WHERE Yearjo IN(1950,1960)
отберет записи сотрудников указанных годов рождения.
 
Элемент оператора Select, начинающийся с ключевых слов ORDER BY, определяет упорядочивание (сортировку) записей. После этих ключевых слов следует список полей, определяющих сортировку. Можно указывать только поля. Фигурирующие в списке отобранных (в списке после ключевого слова SELECT). Причем эти поля могут быть и вычисляемыми.
 
Если в списке сортировки указано только одно поле, то сортировка производится по умолчанию в порядке нарастания значений этого поля. Например, оператор:
SELECT Dep, Fam, Year_b FROM Pers ORDER BY Year_b
задает упорядочивание возвращаемых значений по нарастанию года рождения. Если желательно располагать результаты по убыванию значений, то после имени поля добавляется ключевое слово DESC:
SELECT Dep, Fam, Year_b FROM Pers ORDER BY Yearjb DESC
Если в списке после ORDER BY перечисляется несколько полей, то первое из них главное и сортировка проводится прежде всего по значениям этого поля. Записи, имеющие одинаковое значение первого поля упорядочиваются по значениям второго поля и т.д. Например, оператор:
SELECT Dep, Fam, Year_b FROM Pers ORDER BY Dep, Fam
сортирует записи прежде всего по отделам (значениям поля Dep), а внутри каждого отдела по алфавиту. Оператор:
SELECT Dep, Fam, Year_b, Sex FROM Pers ORDER BY Dep, Sex, Fam
сортирует записи по отделам, полу и алфавиту.
Если заметили ошибку, выделите фрагмент текста и нажмите Ctrl+Enter

Добавить комментарий