Выбор записей по диапазону значений (Between).
12. Вывести список сотрудников и размеры полученных зарплат за период 01.01.2003 по 01.03.2003 (рис. 7):
– в VFP:
SELECT Name, Lastname, Surname, Sum_pay, Pay_day FROM Staff, Pay WHERE (Staff.T_number = Pay.T_number) AND Pay_day BETWEEN CTOD(‘01.01.2003’) AND CTOD(‘01.03.2003’)
Name |
Lastname |
Surname |
Sum_pay |
Pay_day |
Иван |
Петрович |
Иванов |
2544.00 |
01.01.2003 |
Иван |
Петрович |
Иванов |
4521.00 |
01.02.2003 |
Иван |
Петрович |
Иванов |
12542.00 |
01.03.2003 |
Василий |
Михайлович |
Сидоров |
1452.00 |
01.01.2003 |
Василий |
Михайлович |
Сидоров |
2145.00 |
01.02.2003 |
Василий |
Михайлович |
Сидоров |
2135.00 |
01.03.2003 |
Петр |
Аркадьевич |
Васильков |
4511.00 |
01.01.2003 |
Петр |
Аркадьевич |
Васильков |
1542.00 |
01.02.2003 |
Петр |
Аркадьевич |
Васильков |
1542.00 |
01.03.2003 |
Савел |
Игнатьевич |
Соянов |
2456.00 |
01.03.2003 |
Рис. 7. Выбор по диапазону
– в MS SQL Server:
SELECT Name, Lastname, Surname, Sum_pay FROM Staff, Pay WHERE (Staff.T_number = Pay.T_number) AND Pay_day BETWEEN '1-JAN-2003' AND '1-MAR-2003'
или
SET DATEFORMAT dmy
SELECT Name, Lastname, Surname, Sum_pay FROM Staff, Pay WHERE (Staff.T_number = Pay.T_number) AND Pay_day BETWEEN '1-01-2003' AND '1-03-2003'
– в Access:
SELECT Name, Lastname, Surname, Sum_pay FROM Staff, Pay WHERE (Staff.T_number = Pay.T_number) AND Pay_day BETWEEN #01.01.2003# AND #01.03.2003#
– в Oracle:
SELECT Name, Lastname, Surname, Sum_pay FROM ADMIN_PAY.Staff, ADMIN_PAY.Pay WHERE (Staff.T_number = Pay.T_number) AND Pay_day BETWEEN '1-JAN-2003' AND '1-MAR-2003';
или
SELECT Name, Lastname, Surname, Sum_pay FROM ADMIN_PAY.Staff, ADMIN_PAY.Pay WHERE (Staff.T_number = Pay.T_number) AND Pay_day
23
BETWEEN to_date('1-01-2003','dd-mm-yyyy') AND to_date('1-03-2003','dd- mm-yyyy');
BETWEEN – проверка на принадлежность диапазону значений. При этом проверяется, находится ли значение поля между двумя определенными значениями.
Особенности оформления дат в различных СУБД .
ВAccess дата заключается в решетки # # (формат дд.мм.гггг).
ВVFP оформляется как строка и преобразуется в формат даты с помощью функции CTOD( ).
ВMS SQL Server можно задать как строку в двойных кавычках в формате дд-мес-гггг (где месяц может быть оформлен как JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC).
13.Вывести список сотрудников, которые были устроены на работу
впериод с 12.03.2000 по 15.06.2000, и их должности:
– в VFP:
SELECT Name, Lastname, Surname, Post FROM Staff WHERE Date_input BETWEEN CTOD(‘12.03.2000’) AND CTOD(‘15.06.2000’)
– в MS SQL Server:
SELECT Name, Lastname, Surname, Post FROM Staff WHERE Date_input BETWEEN '12-MAR-2000' AND '15-JUN-2000'
– в MS Access:
SELECT Name, Lastname, Surname, Sum_day FROM Staff WHERE Date_input BETWEEN #12.03.2000# AND #15.06.2000#
– в Oracle:
SELECT Name, Lastname, Surname, Post FROM ADMIN_PAY.Staff WHERE Date_input BETWEEN to_date('12-03-2000', 'dd-mm-yyyy') AND to_date('15-06-2000', 'dd-mm-yyyy');
14. Вывести список сотрудников и их телефоны, значения которых находятся в диапазоне с 111111 по 222222:
– в VFP, MS SQL Server, Access:
SELECT Name, Lastname, Surname, Phone FROM Staff WHERE Phone BETWEEN 111111 AND 222222
– в Oracle:
SELECT Name, Lastname, Surname, Phone FROM ADMIN_PAY.Staff WHERE Phone BETWEEN 111111 AND 222222;
24
15. Вывести список сотрудников, у которых фамилия начинается на одну из букв диапазона ‘Р’ – ‘У’:
– в VFP, MS SQL Server, Access:
SELECT Name, Lastname, Surname FROM Staff WHERE Surname BETWEEN 'Р' AND 'У'
– в Oracle:
SELECT Name, Lastname, Surname FROM ADMIN_PAY.Staff WHERE
Surname BETWEEN 'Р' AND 'У';
Выбор записей по диапазону значений (In).
16. Вывести список сотрудников с должностями ‘начальник отдела кадров’, ‘специалист отдела кадров’, ‘операционист отдела кадров’:
– в VFP, MS SQL Server, Access:
SELECT Name, Lastname, Surname, Post FROM Staff WHERE Post IN('начальник отдела кадров', 'специалист отдела кадров', 'операционист отдела кадров')
– в Oracle:
SELECT Name, Lastname, Surname, Post FROM ADMIN_PAY.Staff WHERE Post IN('начальник отдела кадров', 'специалист отдела кадров', 'операционист отдела кадров');
IN( ) – проверка на членство в множестве. Вывести только те строки, у которых значение указанного поля принадлежит указанному множеству, т.е. равно одному из значений, перечисленных в IN( ).
17. Вывести список сотрудников, получающих одну из следующих надбавок к зарплате: ‘премию’, ‘оплату учебы’, ‘поощрение’:
– в VFP, MS SQL Server, Access:
SELECT Name, Lastname, Surname FROM Staff, Pay, Items_pay WHERE (Staff.T_number = Pay.T_number) AND (Pay.Code_pay = Items_pay.Code_pay) AND (Item_pay IN('премия', 'оплата учебы', 'поощрение'))
– в Oracle:
SELECT Name, Lastname, Surname FROM ADMIN_PAY.Staff,
ADMIN_PAY.Pay, ADMIN_PAY.Items_pay WHERE (Staff.T_number =
Pay.T_number) AND (Pay.Code_pay = Items_pay.Code_pay) AND (Item_pay
IN('премия', 'оплата учебы', 'поощрение'));
18. Вывести список сотрудников с табельными номерами 4, 67, 45,
77(рис. 8):
–в VFP, MS SQL Server, Access:
25
SELECT Name, Lastname, Surname, T_Number FROM Staff WHERE T_Number IN(4, 67, 45, 77)
– в Oracle:
SELECT Name, Lastname, Surname, T_Number FROM ADMIN_PAY.Staff WHERE T_Number IN(4, 67, 45, 77);
Name |
Lastname |
Surname |
T_number |
Иван |
Васильевич |
Артемьев |
67 |
Савел |
Игнатьевич |
Соянов |
4 |
Рис. 8. Список сотрудников по указанным номерам
Выбор записей с использованием Like.
19. Вывести неповторяющийся список статей в зарплате, которые начинаются на букву ‘н’:
– в MS SQL Server(регистр текста не важен):
SELECT DISTINCT Item_pay FROM Items_pay WHERE Item_pay LIKE 'н%'
– в Access:
SELECT DISTINCT Item_pay FROM Items_pay WHERE Item_pay LIKE “н*”
– в Oracle (регистр текста учитывается):
SELECT DISTINCT Item_pay FROM ADMIN_PAY.Items_pay WHERE Item_pay LIKE 'н%';
LIKE( ) – проверка на соответствие шаблону, где шаблон записывается в двойных кавычках. % или * – подстановочный знак в шаблоне, совпадающий с любой последовательностью из нуля и более символов.
_ или ? – подстановочный знак в шаблоне, совпадающий с одним любым символом на указанном месте. Пример шаблона на Access: "?нар*" – вывести все строки, у которых первый символ любой, далее обязательная последовательность нар, конец строки любой.
20. Вывести список сотрудников, отчества которых содержат сочетание букв ‘ва’:
– в VFP, MS SQL Server:
SELECT Name, Lastname, Surname FROM Staff WHERE Lastname LIKE '%ва%'
26
– в Access:
SELECT Name, Lastname, Surname FROM Staff WHERE Lastname LIKE “*ва*”
– в Oracle:
SELECT Name, Lastname, Surname FROM ADMIN_PAY.Staff WHERE Lastname LIKE '%ва%';
21. Выбрать неповторяющийся список должностей, у которых значение оканчивается на ‘ль’ (рис. 9):
– в VFP, MS SQL Server:
SELECT DISTINCT Post FROM Staff WHERE Post LIKE '%ль'
Post
Строитель
Рис. 9. Результат запроса с использованием Like
– в Access:
SELECT DISTINCT Post FROM Staff WHERE Post LIKE “*ль”
– в Oracle:
SELECT DISTINCT Post FROM ADMIN_PAY.Staff WHERE Post LIKE '%ль';
Выбор записей по нескольким условиям 22. Вывести всех сотрудников, которые получили зарплату
15.03.2003 в размере от 2000 до 3000 руб.:
– в VFP:
SELECT Name, Lastname, Surname FROM Staff, Pay WHERE (Staff.T_number = Pay.T_number) AND Pay_day = CTOD(‘15.03.2003’) AND ((Sum_pay>=2000) AND (Sum_pay<3000))
– в MS SQL Server:
SELECT Name, Lastname, Surname FROM Staff, Pay WHERE (Staff.T_number = Pay.T_number) AND Pay_day = '15-MAR-2003' AND ((Sum_pay>=2000) AND (Sum_pay<3000))
– в Access:
SELECT Name, Lastname, Surname FROM Staff, Pay WHERE (Staff.T_number = Pay.T_number) AND Pay_day = #15.03.2003# AND ((Sum_pay>=2000) AND (Sum_pay<3000))
– в Oracle:
SELECT Name, Lastname, Surname FROM ADMIN_PAY.Staff, ADMIN_PAY.Pay WHERE (Staff.T_number = Pay.T_number) AND Pay_day = '15-MAR-2003' AND ((Sum_pay>=2000) AND (Sum_pay<3000));
27