logo
Программирование в среде Delphy / Программирование в среде Delphi

30.2. Команда select

Эта команда предназначена для выбора информации из базы данных. Результатом работы команды Select (выбор) всегда является таблица. Общая форма данной команды имеет вид

Select [Distinct] <список полей>

From <список таблиц>

[Where <условия отбора>]

[Group By <поля> [Having <условия отбора для группировки>]

[Union <другой Select>]

[Order By <поля или номера полей>];

Например, для выбора всех фамилий из таблицы TSpis можно записать команду Select следующим образом:

Select FIO From Tspis;

В результате мы получим следующую таблицу:

FIO

Иванов

Сидоренко

…….

Если вместо списка имен полей поставить символ «*» (звездочка), то в итоговую таблицу будут включены все поля таблицы.

При описании полей выбора перед каждым именем поля можно вставить текстовую константу (литерал), которая будет выступать в роли «псевдо-столбца». Например:

Select ”Фамилия”, FIO, ” получает”, OKLAD, ” рублей” From TSpis;

Теперь мы получим следующую таблицу:

FIO

OKLAD

Фамилия

Иванов

получает

300000

рублей

Фамилия

Сидоренко

получает

200000

рублей

…..

…..

…..

…..

…..

Квалификатор As

Квалификатор As позволяет при выводе итоговой таблицы изменять названия столбцов и таблиц, например:

Select FIO as Фамилия, OKLAD as Зарплата From TSpis;

Эта команда даст следующую таблицу:

Фамилия

Зарплата

Иванов

300000

Сидоренко

200000

…..

……

Агрегатные функции

Эти функции позволяют производить вычисления над значениями какого–то столбца или подсчитать число строк в таблице:

• Sum – суммирование значений столбца;

• Min – определение минимального значения в столбце;

• Max – определение максимального значения в столбце;

• Avg – определение среднего значения от значений столбца;

• First – первое значение в столбце;

• Last – последнее значение в столбце;

• StDev – оценка среднеарифметического отклонения;

• StDevp – несмещенная оценка среднеарифметического отклонения;

• Var – оценка дисперсии;

• Varp – оценка несмещенной дисперсии;

• Count – число строк в таблице.

Рассмотрим пример расчета средней зарплаты и полного числа сотрудников:

Select Avg(OKLAD) as [Средняя зарплата], Count(*) as ЧС From TSpis;

В результате выполнения этой команды получим следующую таблицу:

Средняя зарплата

ЧС

250000

2

Условия отбора строк

Отбор строк осуществляется оператором Where <предикат>. В предикате могут быть использованы следующие операции:

• = – равно;

• <> или != – не равно;

• > – больше;

• < – меньше;

• >= – больше или равно;

• <= – меньше или равно;

• Between – между;

• In – вхождение в множество значений;

• Like – похоже на что–то;

• Is Null – значение не задано;

• Exit – значение определено;

• Any – любое значение;

• All – все значения.

В операторе Where можно также использовать следующие логические операции:

• And – логическое И;

• Or – логическое ИЛИ;

• Not – логическое отрицание.

Рассмотрим несколько примеров использования оператора Where:

1. Найдем все строки, содержащие фамилию «Иванов»:

Select * From TSpis Where FIO=”Иванов”;

Значение поля можно заключать в двойные кавычки, а если в значащей строке есть специальные символы, включая пробел, то это значение нужно заключать в квадратные скобки, например, ”Иванов” или [Иванов].

2. Найдем всех сотрудников, у кого оклад лежит в заданном интервале:

Select * From TSpis Where OKLAD Between ”100000” and ”300000”;

3. Найдем всех сотрудников, у кого фамилии начинаются с букв «Ив»:

Select * From TSpis Where FIO Like ”Ив%”;

Следует отметить, что символ % (проценты) означает любую последовательность символов для стандарта ANSI–92, а для стандарта ANSI–89 следует использовать символ * (звездочка). Аналогично символ _ (подчеркивания) означает любой символ в стандарте ANSI–92, а в стандарте ANSI–89 для этих же целей используется символ ? (вопросительный знак).

4. Найти всех сотрудников с фамилиями «Иванов» или «Петров»:

Select * From TSpis Where FIO in [”Иванов”, ”Петров”];

5. Найти всех сотрудников, кому еще не установлен оклад:

Select * From TSpis Where OKLAD is Null;

Упорядочение строк

Упорядочение строк осуществляется в команде Select с помощью ключевого слова Order. Пример упорядочения строк по фамилиям сотрудников:

Select * From TSpis Order by FIO;

Связывание таблиц

Связывание таблиц производится в операторе Where команды Select по совпадению значений каких–либо двух полей в разных таблицах. Пример связывания таблиц TSpis и TDol по коду должности:

Select a.ID as Номер,

a.FIO as Фамилия,

b.NAMEDOL as Должность,

a.STAG as [Стаж работы],

a.OKLAD as Зарплата

From TSpis as a, TDol as b

Where a.CODEDOL=b.CODE;

Модификатор Distinct

Модификатор Distinct позволяет устранить дублирование строк в результирующей таблице. Например, можно узнать, сколько различных уровней зарплаты имеют сотрудники, следующим образом:

Select Distinct OKLAD as Зарплата

From TSpis Order by OKLAD;

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

Select Distinct a.FIO as Фамилия, a.DATEB as [Дата рождения]

From TSpis as a, TSpis as b

Where a.DATEB=b.DATEB and a.ID<>b.ID

Order by a.DATAB;

В этом примере мы одну и ту же таблицу TSpis обозначили как таблицу «a» и таблицу «b», что позволило найти тех сотрудников, у кого совпадают дни рождения, но разные идентификационные номера «ID». Для исключения дублирования вставлен модификатор Distinct и проведена сортировка результирующей таблицы по дате рождения.

Работа с датами

Найдем, например, всех сотрудников, родившихся с 1 апреля 1980 г. по 31 июля 1981 г,:

Select * From TSpis

Where DATEB Between ’01/04/1980’ and ’31/06/1981’;

Эта команда записана в стандарте ANSI–92. Для стандарта ANSI–89 дату нужно заключать не в апострофы, а в символы «#» (решетка).

Текущую дату можно получить, использую функцию Date() без аргументов. Для выделения части даты из поля даты, например DATEB из таблицы TSpis, можно использовать следующие функции:

Year(DATEB) – год;

Month(DATEB) – месяц;

DatePart(”q”,DATEB) – квартал;

DatePart(”y”,DATEB) – год;

DatePart(”m”,DATEB) – месяц;

DatePart(”d”,DATEB) – день.

Например, найдем всех сотрудников, родившихся в апреле:

Select FIO as Фамилия, DATEB as [Дата рождения]

From TSpis Where DatePart(”m”,DATEB)=”04”;

Команда Transform

Эта команда есть только в MS Access. Она является расширением стандарта SQL и используется для создания перекрестных таблиц. Общий вид ее следующий:

Transform <агрегатная функция>

Select <инструкция>

Pivot <заголовки столбцов> [in [<знач1, знач2, ….>]];

Названия строк образуют значения полей в операторе Select, а названия столбцов образуют значения полей указанных в операторе Pivot. Например, чтобы построить таблицу, показывающую распределение числа сотрудников по должностям (по столбцам) и стажу работы (по стокам), можно написать следующую команду:

Transform Count(*)

Select a.STAG as Стаж

From TSpis as a, TDol as b

Where a.CODEDOL=b.CODE

Pivot b.NAMEDOL;

Таблица может принять, например, следующий вид:

Стаж

Инженер

Техник

10

4

7

5

5

6