Добавлен: 28.11.2018

Просмотров: 2410

Скачиваний: 8

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

 

41

BETWEEN 

не

 

следует

 

путать

 

с

 

одноименными

 

функциями

 

FoxPro, 

которые

впрочем

тоже

 

можно

 

использовать

 

Группированные

 

данных

 

 
GROUP BY <

колонка

>[,<

колонка

>...] – 

задаются

 

колонки

по

 

которым

 

производится

 

группирование

 

выходных

 

данных

Все

 

записи

 

базы

для

 

которых

 

значения

 

колонок

 

совпадают

отобра

-

жаются

 

в

 

выборке

 

единственной

 

строкой

Группирование

 

удобно

 

для

 

получения

 

некоторых

 

сводных

 

характеристик

  (

сумм

коли

-

честв

группы

HAVING <

условие

 

отбора

> - 

опция

 

задает

 

критерий

 

отбора

 

данных

 

в

 

каждую

 

сформированную

 

в

 

процессе

 

выборки

 

группу

Сортировка

 

ORDER BY <

колонка

> [ASC/DESC][,<

колонка

[ASC/DESC]...] -

опция

 

задает

 

упорядочение

 

по

 

заданной

 

колон

-

ке

/

колонкам

По

 

умолчанию

 

сортировка

 

выполняется

 

по

 

возрас

-

танию

 (ASC), 

но

может

 

быть

 

задана

 

и

 

по

 

убыванию

 (DESC). 

 

Примеры

 

запросов

 

 
1. 

Выборка

 

всех

 

полей

 

из

 

базы

 KADR.DBF. 

Все

 

колонки

 

выборки

 

будут

 

иметь

 

имена

 

полей

 

базы

 

данных

SELECT * FROM kadr 
 
2. 

Вывод

 

минимального

максимального

 

и

 

среднего

 

значе

-

ний

 

поля

 SZAR

 

(

средняя

 

зарплата

). 

Колонки

 

получат

 

имена

 

MIN_SZAR, MAX_SZAR 

и

 AVG_SZAR. 

SELECT MIN(szar),MAX(szar),AVG(szar) FROM kadr 

 
3. 

Вывод

 

фамилий

 

работников

получающих

 

от

 300000 

до

 

800000 

рублей

SELECT fam FROM kadr; 

WHERE szar BETWEEN 300000 AND 800000 

 
4. 

Вывод

 

фамилий

 

всех

 

сотрудников

кроме

 

работающих

 

в

 

подразделениях

 

ОГМ

 

и

 

КБ

SELECT fam FROM kadr WHERE podr NOT IN ('

ОГМ

’, '

КБ

') 

 
5. 

Выборка

 

названий

 

всех

 

подразделений

  (

поле

 PODR) 

предприятия

 

из

 

базы

 KADR.DBF. 

Опция

 DISINST 

предотвращает

 


background image

 

42

повторный

 

вывод

 

одних

 

и

 

тех

 

же

 

названий

если

 

они

 

повторяют

-

ся

SELECT DISTINCT podr FROM kadr 

 
6. 

Выборка

 

фамилий

 (

РАМ

всех

 

мужчин

 

из

 KADR.DBF. 

SELECT fam FROM kadr WHERE pol='M' 

 
7. 

Выборка

 

всех

 

фамилий

 

и

 

табельных

 

номеров

 

из

 

KADR.DBF 

сцепленных

 

с

 

выработками

 

из

 

базы

 BRIG1.DBF 

для

 

записей

у

 

которых

 

совпадают

 

табельные

 

номера

SELECT s.fam,s.tab,t.tab,t.vir; 

FROM kadr a,brig1 t WHERE s.tab=t.tab 

Здесь

 

для

 

сокращения

 

записи

 

команды

 

базам

 KADR.DBF 

и

 

BRIG1. DBF 

заданы

 

новые

 

временные

 

имена

 S 

и

 

Т

Они

 

никакие

 

связаны

 

с

 

рабочими

 

областями

Базы

 

будут

 

открыты

 

в

 

свобод

-

ных

 

областях

 

системы

Сами

 

колонки

 

выборки

 

получат

 

имена

 

FAM, 

ТАВ

_

А

, TAB_B,VIR. 

 
8. 

Если

 

мы

 

хотим

 

задать

 

собственные

 

имена

 

колонкам

а

 

не

 

использовать

 

умолчания

нужно

 

воспользоваться

 

опцией

 AS. 

Пусть

 

нужно

 

вывести

 

фамилии

 

и

 

табельные

 

номера

 (

поля

 

FAM 

и

 TAB) 

по

 

алфавиту

 

и

 

с

 

другими

 

именами

 

колонок

 FAMILII 

и

 

TABEL. 

SELECT fam AS familii, tab AS label; 

FROM kadr ORDER BY fam

 

 
9. 

Выборка

 

фамилий

 

всех

 

родившихся

 

в

 

текущем

 

месяце

 

с

 

указанием

 

дня

  (

числа

рождения

количества

 

лет

 

и

 

премии

 

по

 

этому

 

поводу

 - 50 % 

от

 

значения

 

средней

 

зарплаты

SELECT fam, DAY (dtr),'

число

',YEAR (DATE ()) -YEAR(dtr),; 

'

лет

', '

премия

',0.5*szar FROM kadr; 

WHERE MONTH(dtr)=MONTH(DATE()) 

Колонки

 

получат

 

имена

 FAM 

и

 

от

 

ЕХР

_2 

по

 

ЕХР

_7. 

 
10. 

Вывод

 

полей

 FAM 

и

 TAB, 

отсортированных

 

по

 

полям

 

POL (

главное

 

поле

и

 FAM (

подчиненное

 

поле

в

 

базу

 

FAMTAB.DBF, 

которая

 

затем

 

открывается

 

в

 

текущей

 

области

SELECT fam, tab FROM kadr; 

ORDER BY pol,fam INTO TABL famtab

 

Чтобы

 

увидеть

 

содержимое

 

этой

 

базы

можно

например

сразу

 

ввести

 

команду

 BROWSE. 

 


background image

 

43

11. 

Вывод

 

для

 

каждого

 

табельного

 

номера

 

из

 

базы

 

KADR.DBF 

выработок

 

из

 

баз

 BRIG1.DBF 

и

 BRIG3.DBF, 

а

 

также

 

суммарной

 

выработки

 

работника

 

в

 

обеих

 

бригадах

SELECT kadr.tab,brigl.vir,brig3.vir,brigl.vir+brig3.vir; 

FROM kadr,brigl,brig3; 
WHERE kadr.tab=brigl.tab AND kadr.tab=brig3.tab 

Имеется

 

в

 

виду

что

 

работник

 

может

 

работать

 

в

 

несколь

-

ких

 

бригадах

 

в

 

течение

 

месяца

но

 

в

 

каждом

 

бригадном

 

файле

 

он

 

может

 

встретится

 

только

 

раз

 
12. 

Вывод

 

фамилий

 

всех

 

работников

работавших

 

ранее

 

в

 

конструкторском

 

бюро

 (

КБ

). 

Поиск

 

ведется

 

в

 

мемо

-

поле

 PER 

ба

-

зы

 KADR.DBF. 

SELECT fam FROM kadr WHERE per LIKE «%

КБ

%» 

 
13. 

Вывод

 

табельных

 

номеров

 

и

 

суммарной

 

выработки

 

ка

-

ждого

 

работника

 

в

 

бригаде

 

номер

 1. 

Вывод

 

осуществляется

 

в

 

порядке

 

увеличения

 

табельных

 

номеров

SELECT tab,SUM(vir) FROM brigl; 

GROUP BY tab ORDER BY tab

 

Задача

 

имеет

 

смысл

если

 

один

 

и

 

тот

 

же

 

человек

 

может

 

встречаться

 

несколько

 

раз

 

в

 

одной

 

бригаде

например

если

 

в

 

бригадном

 

файле

 

фиксируются

 

не

 

итоговые

 

выработки

а

 

все

 

наряды

 
14. 

Вывод

 

названий

 

всех

 

подразделений

количества

 

со

-

трудников

 

Значений

 

суммарной

 

заработной

 

платы

 (

фонда

 

опла

-

ты

). 

Информация

 

выводится

 

только

 

для

 

подразделений

где

 

ко

-

личество

 

сотрудников

 

больше

 

пяти

SELECT

 

podr,COUNT(*),SUM(szar); 

FROM kadr GROUP BY podr HAVING COUNT(*)>5 

 

Задание

 4 

 

Создать

 

запросы

 

и

 

результаты

 

запросов

 

сохранить

 

в

 

фай

-

лах

 DBF/

ТХТ

 

1. 

Вывести

 

сведения

 

о

 

мужчинах

родившихся

 

с

 1 

января

 

по

 1 

апреля

 

заданного

 

года

2. 

Вывести

 

фамилии

названия

 

предметов

 

и

 

оценки

 

отдельно

 

для

 

мужчин

 

и

 

женщин


background image

 

44

3. 

Вычислить

 

количество

 

студентов

имеющих

 

оценки

 2,3, 4, 5 

(

запрос

 

с

 

группировкой

 

по

 

полю

 BALL). 

4. 

Вывести

 

фамилии

оценки

 

и

 

названия

 

предметов

сгруппиро

-

вав

 

сведения

 

по

 

предметам

5. 

Вывести

 

фамилию

 

студента

имеющего

 

максимальный

 

номер

 

полиса

 

Для

 

проверки

 

представляются

 

результаты

 

запросов