Материал: 2391

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

или

SELECT Name, Lastname, Surname FROM ADMIN_PAY.Staff, ADMIN_PAY.Pay WHERE (Staff.T_number = Pay.T_number) AND Pay_day = to_date('15-MAR-2003', 'dd-mm-yyyy') AND ((Sum_pay>=2000) AND (Sum_pay<3000));

23. Вывести НЕПОВТОРЯЮЩИЙСЯ список табельных номеров и имен сотрудников с табельными номерами 12 – 30 или с зарплатами, превысившими размер 5000 руб.:

– в VFP, MS SQL Server, Access:

SELECT DISTINCT Name, Lastname, Surname, Staff.T_number FROM Staff, Pay WHERE (Staff.T_number = Pay.T_number) AND ( (Staff.T_Number BETWEEN 12 AND 30) OR Sum_pay>5000)

– в Oracle:

SELECT DISTINCT Name, Lastname, Surname, Staff.T_number FROM

ADMIN_PAY.Staff, ADMIN_PAY.Pay WHERE (Staff.T_number =

Pay.T_number) AND ( (Staff.T_Number BETWEEN 12 AND 30) OR

Sum_pay>5000);

24. Вывести список сотрудников с датами рождения 01.01.1950 – 01.01.1960 или табельными номерами из диапазона 10 – 150 (рис. 10):

– в VFP:

SELECT Name, Lastname, Surname, Birthday, T_number FROM Staff WHERE (Birthday BETWEEN CTOD(‘01.01.1950’) AND CTOD(‘01.01.1960’)) OR (T_number>=10 AND T_number<=150)

Name

Lastname

Surname

Birthday

T_number

Василий

Михайлович

Сидоров

14.06.1954

2

Иван

Васильевич

Артемьев

05.12.1970

67

Виктор

Семенович

Ушаков

30.05.1970

11

Анна

Михайловна

Иванова

12.03.1960

15

Рис. 10. Результат запроса с несколькими условиями

– в MS SQL Server:

SELECT Name, Lastname, Surname, Birthday, T_number FROM Staff WHERE (Birthday BETWEEN '01-JAN-1950' AND '01-JAN-1960') OR (T_number>=10 AND T_number<=150)

– в Access:

SELECT Name, Lastname, Surname, Birthday, T_number FROM Staff WHERE (Birthday BETWEEN #01.01.1950# AND #01.01.1960#) OR (T_number>=10 AND T_number<=150)

28

– в Oracle:

SELECT Name, Lastname, Surname, Birthday, T_number FROM ADMIN_PAY.Staff WHERE (Birthday BETWEEN '01-JAN-1950' AND '01- JAN-1960') OR (T_number>=10 AND T_number<=150);

Многотабличные запросы (выборка из двух таблиц, выборка из трех таблиц с использованием JOIN).

25. Вывести список сотрудников, получающих одну из следующих надбавок к зарплате: ‘премию’, ‘оплату учебы’, ‘поощрение’:

– в VFP, MS SQL Server, Access:

SELECT Name, Lastname, Surname FROM Staff INNER JOIN Pay INNER JOIN Items_pay ON Pay.Code_pay = Items_pay.Code_pay ON Staff.T_number = Pay.T_number WHERE Item_pay IN('премия', 'оплата учебы', 'поощрение')

или

SELECT Name, Lastname, Surname FROM (Staff INNER JOIN Pay ON Staff.T_number = Pay.T_number) INNER JOIN Items_pay ON Pay.Code_pay = Items_pay.Code_pay WHERE Item_pay IN('премия', 'оплата учебы', 'поощрение')

– в Oracle:

SELECT Name, Lastname, Surname FROM (ADMIN_PAY.Staff INNER JOIN ADMIN_PAY.Pay ON Staff.T_number = Pay.T_number) INNER JOIN ADMIN_PAY.Items_pay ON Pay.Code_pay = Items_pay.Code_pay WHERE Item_pay IN('премия', 'оплата учебы', 'поощрение');

INNER JOIN создает объединение пары таблиц, из которого выбираются только те записи, которые содержат совпадающие значения в полях связи, указанных после ключевого слова ON.

LEFT JOIN создает объединение пары таблиц, из которого выбираются все записи из левой таблицы, а также записи из правой таблицы, значения поля связи которой совпадают со значениями поля связи левой таблицы.

RIGHT JOIN создает объединение пары таблиц, из которой выбираются все записи из правой таблицы, а также записи из левой таблицы, значения поля связи которой совпадают со значениями поля связи правой таблицы.

ON – ключевое слово, после которого указывается условие связи пары таблиц.

26. Вывести неповторяющийся список всех сотрудников, у которых размер зарплаты составил от 2000 до 3000 руб. (рис. 11):

29

– в VFP, MS SQL Server, Access:

SELECT DISTINCT Name, Lastname, Surname FROM Staff INNER JOIN Pay ON Staff.T_number = Pay.T_number WHERE (Sum_pay>=2000) AND (Sum_pay<3000)

– в Oracle:

SELECT DISTINCT Name, Lastname, Surname FROM ADMIN_PAY.Staff INNER JOIN ADMIN_PAY.Pay ON Staff.T_number = Pay.T_number WHERE (Sum_pay>=2000) AND (Sum_pay<3000);

Name

Lastname

Surname

Василий

Михайлович

Сидоров

Иван

Петрович

Иванов

Савел

Игнатьевич

Соянов

Рис. 11. Результат многотабличного запроса

27.Вывести коды зарплат, в которых была статья вычетов ‘за бездетность’:

– в VFP, MS SQL Server, Access:

SELECT Pay.Code_pay FROM Pay INNER JOIN Items_pay ON Pay.Code_pay = Items_pay.Code_pay WHERE Item_pay = 'за бездетность'

– в Oracle:

SELECT Pay.Code_pay FROM ADMIN_PAY.Pay INNER JOIN ADMIN_PAY.Items_pay ON Pay.Code_pay = Items_pay.Code_pay WHERE Item_pay = 'за бездетность';

28.Вывести неповторяющийся список всех сотрудников, в которых была в зарплате статья вычетов ‘за бездетность’:

– в VFP, MS SQL Server, Access:

SELECT DISTINCT Name, Lastname, Surname FROM Staff INNER JOIN Pay INNER JOIN Items_pay ON Pay.Code_pay = Items_pay.Code_pay ON Staff.T_number = Pay.T_number WHERE Item_pay = 'за бездетность'

– в Oracle:

SELECT DISTINCT Name, Lastname, Surname FROM ADMIN_PAY.Staff INNER JOIN ADMIN_PAY.Pay INNER JOIN ADMIN_PAY.Items_pay ON Pay.Code_pay = Items_pay.Code_pay ON Staff.T_number = Pay.T_number WHERE Item_pay = 'за бездетность';

Вычисления.

29. Вывести список сотрудников, должности и срок их работы в годах с сортировкой по уменьшению стажа (рис. 12):

30

– в VFP, Access:

SELECT Name, Lastname, Surname, Post, (Date() - Date_input)/365.25

FROM Staff ORDER BY Date_input

– в MS SQL Server:

SELECT Name, Lastname, Surname, Post, CAST((GetDate() - Date_input) AS Bigint)/365.25 FROM Staff ORDER BY Date_input

– в Oracle:

SELECT Name, Lastname, Surname, Post, (SysDate - Date_input)/365.25

FROM ADMIN_PAY.Staff ORDER BY Date_input;

Name

Lastname

Surname

Post

Exp_5

Анна

Михайловна

Иванова

Строитель

25.1061

Савел

Игнатьевич

Соянов

Строитель

24.4873

Иван

Васильевич

Артемьев

Главный инженер

6.8583

 

 

 

Начальник отдела

 

Василий

Михайлович

Сидоров

кадров

5.1006

Иван

Петрович

Иванов

Бухгалтер

4.6899

 

 

 

Специалист отдела

 

Петр

Аркадьевич

Васильков

кадров

4.0548

Виктор

Семенович

Ушаков

Бухгалтер

1.0897

Рис. 12. Результат запроса с вычислением

30. Вывести список сотрудников, у которых еще не было дня рождения в текущем году, а также вывести количество дней до их дней рождения в текущем году:

– в VFP:

SET DATE TO GERMAN

&& необходима для установки даты в формате дд.мм.гг

SELECT Name, Lastname, Surname, Post, Birthday, CTOD(str(day(Birthday))+'.'+str(month(Birthday))+'.'+str(YEAR(Date())))- DATE() FROM Staff Where CTOD (str(day(Birthday)) + ' . ' + str (month(Birthday)) + ' . ' + str (YEAR(Date())))-DATE()) >0

– в MS SQL SERVER:

SET DATEFORMAT dmy --дата в формате дд.мм.гггг

SELECT Name, Lastname, Surname, Post, Birthday,

DATEDIFF(day, getdate(), CAST(str(day(Birthday))+ '.' + str(month(Birthday)) + '.' +str(YEAR(GetDate())) AS datetime)) AS [Дней до дня рождения] FROM Staff Where DATEDIFF(day, getdate(), CAST(str(day(Birthday)) + '.' + str(month(Birthday)) + '.' + str(YEAR(GetDate())) AS datetime))>0

31

– в Oracle:

SELECT Surname, TO_NUMBER( TO_DATE( ( to_char(Birthday, 'dd')||'.'||to_char(Birthday, 'mm')||'.'||to_char(Sysdate,'yyyy') ), 'DD-MM-YYYY')- SYSDATE) FROM ADMIN_PAY.Staff WHERE TO_NUMBER( TO_DATE( ( to_char( Birthday,'dd')||'.'||to_char( Birthday,'mm')||'.'||to_char(Sysdate,'yyyy') ), 'DD-MM-YYYY')-SYSDATE) >0;

31. Вывести список всех сотрудников, их табельные номера, даты и суммы получения зарплаты на руки и зарплаты, если бы у них не брали налог ‘за бездетность’:

– в VFP, MS SQL Server, Access:

SELECT Staff.T_number, Name, Surname, Pay_day, Sum_pay, (Sum_payItem_sum) FROM Staff INNER JOIN Pay INNER JOIN Items_pay ON Pay.Code_pay = Items_pay.Code_pay ON Staff.T_number = Pay.T_number WHERE Item_pay = 'за бездетность'

– в Oracle:

SELECT Staff.T_number, Name, Surname, Pay_day, Sum_pay, (Sum_payItem_sum) FROM ADMIN_PAY.Staff INNER JOIN ADMIN_PAY.Pay INNER JOIN ADMIN_PAY.Items_pay ON Pay.Code_pay = Items_pay.Code_pay ON Staff.T_number = Pay.T_number WHERE Item_pay

='за бездетность';

Вформуле запроса стоит минус, т.к. в таблице значения налогов хранятся как отрицательные числа.

Вычисление итоговых значений с использованием агрегатных функций.

32. Вывести среднюю зарплату, которая когда-либо выдавалась на предприятии:

–в VFP, MS SQL Server, Access: SELECT AVG(Sum_pay) FROM Pay

–в Oracle:

SELECT AVG(Sum_pay) FROM ADMIN_PAY.Pay;

32

Источник: https://studfile.net/preview/16408448/