Иванова |
Строитель |
12.11.1979 |
145214 |
12.03.1940 |
15 |
Рабочий |
Рис. 3. Результат запроса изменения порядка полей
5. Выбрать все поля из таблицы Pay таким образом, чтобы в результате порядок столбцов был следующим: Sum_pay, Pay_day, T_number, Code_pay:
– в VFP, MS SQL Server, Access:
SELECT Sum_pay, Pay_day, T_number, Code_pay FROM Pay
– в Oracle:
SELECT Sum_pay, Pay_day, T_number, Code_pay FROM
ADMIN_PAY.Pay;
Выбор некоторых полей из двух (трех) таблиц.
6. Вывести список фамилий, имен, отчеств сотрудников (поля Surname, Name, Lastname), а также значения их заработных плат (поле
Sum_pay) и даты получения (поле Pay_day):
– в VFP, MS SQL Server, Access:
SELECT Surname, Name, Lastname, Sum_pay, Pay_day FROM Staff, Pay WHERE Staff.T_number = Pay.T_number
– в Oracle:
SELECT Surname, Name, Lastname, Sum_pay, Pay_day FROM
ADMIN_PAY.Staff, ADMIN_PAY.Pay WHERE Staff.T_number =
Pay.T_number;
WHERE – предложение WHERE показывает, что в результаты запроса следует включать только некоторые строки. Для отбора строк, включаемых в результаты запроса, используется условие поиска, которое строится как логическое выражение, состоящее из одного или нескольких условий, объединенных логическими конструкциями типа
AND или OR.
7. Вывести табельные номера, даты получения зарплаты и ее расклад по статьям, результат отсортировать по табельному номеру сотрудника (рис. 4):
– в VFP, MS SQL Server, Access:
SELECT T_number, Pay_day, Item_pay, Item_sum FROM Pay, Items_pay WHERE Pay.Code_pay = Items_pay.Code_pay ORDER BY T_number
– в Oracle:
18
SELECT T_number, Pay_day, Item_pay, Item_sum FROM
ADMIN_PAY.Pay, ADMIN_PAY.Items_pay WHERE Pay.Code_pay =
Items_pay.Code_pay ORDER BY T_number;
19
T_Number |
Pay_day |
Item_pay |
Item_sum |
1 |
01.01.2003 |
Премия |
124.00 |
1 |
01.01.2003 |
Налог |
-451.00 |
1 |
01.01.2003 |
Оклад |
1457.00 |
1 |
01.01.2003 |
Поощрение |
4512.00 |
1 |
01.01.2003 |
Оплата учебы |
145.00 |
1 |
01.02.2003 |
Оклад |
4656.00 |
1 |
01.02.2003 |
Налог |
-415.00 |
1 |
01.02.2003 |
Поощрение |
326.00 |
1 |
01.03.2003 |
Оклад |
1654.00 |
|
|
Премия |
|
1 |
01.03.2003 |
квартальная |
1213.00 |
4 |
01.03.2003 |
За бездетность |
-154.00 |
4 |
01.03.2003 |
Оклад |
1456.00 |
4 |
01.03.2003 |
Премия разовая |
1245.00 |
4 |
01.03.2003 |
Налог подоходный |
-452.00 |
Рис. 4. Результат запроса с выбором полей из таблиц
8. Вывести список фамилий и табельных номеров сотрудников, а также значения их заработных плат и даты получения с раскладкой каждой зарплаты по статьям:
– в VFP, MS SQL Server, Access:
SELECT Surname, Staff.T_number, Sum_pay, Pay_day, Item_pay, Item_sum FROM Staff, Pay, Items_pay WHERE (Staff.T_number = Pay.T_number) AND (Pay.Code_pay = Items_pay.Code_pay)
– в Oracle:
SELECT Surname, Staff.T_number, Sum_pay, Pay_day, Item_pay,
Item_sum 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);
Если в запросе участвует несколько таблиц и в них встречаются поля с одинаковыми названиями, то обязательно рядом с полем указывать название таблицы, из которой берется поле. Например: Staff.T_number AND – "логическое И", выполняет роль объединения двух условий и возвращает результат ИСТИНА, оба условия также возвращают результат ИСТИНА. В результат запроса помещаются только те строки, которые соответствуют условиям=ИСТИНА, записанным после
ключевого слова WHERE.
Связь таблиц в запросе – несмотря на то, что в базе данных установлены связи между таблицами, при построении запроса нужно также указать правила связи между таблицами.
20
Самый простой способ связать таблицы: в условии WHERE указать условия равенства полей связи пары таблиц; если нужно объединить три и более таблиц, то нужно перечислить пары полей связи и объединить их "логическими И", как показано в примере.
Условие совпадения.
9. Вывести список сотрудников с должностью, название которой начинается на ‘главный’:
–в MS SQL Server, Access (регистр текста не важен, но пробелы слева
иколичество символов сравниваемых текстов значимы):
SELECT Surname, Name, Lastname, Post FROM Staff WHERE Post = 'главный'
Результат выполнения запроса не будет содержать ни одной строки, так как в соответствии с примером заполнения (табл. 4) нет строк с должностью 'главный' или 'Главный'. Так же будет выглядеть результат запроса в VFP с условием точного совпадения.
– в VFP с условием точного совпадения:
SET ANSI ON &&условие точного совпадения
SELECT Surname, Name, Lastname, Post FROM Staff WHERE Post = 'главный'
– в VFP с условием неточного совпадения (рис. 5):
SET ANSI OFF |
|
&&условие неточного совпадения |
|||
SELECT Surname, Name, Lastname, Post FROM Staff WHERE Post = |
|||||
'главный' |
|
|
|
|
|
|
|
|
|
|
|
|
Surname |
Name |
Lastname |
Post |
|
|
|
|
|
Главный |
|
|
Артемьев |
Иван |
Васильевич |
инженер |
|
Рис. 5. Результат запроса с условием неточного совпадения
– в Oracle (регистр текста, пробелы слева и количество символов сравниваемых текстов значимы):
SELECT Surname, Name, Lastname, Post FROM ADMIN_PAY.Staff WHERE Post = 'главный';
' … ' – для выделения в запросе строковых значений используются одинарные кавычки. Например, ‘главный’.
21
Точное несовпадение значений одного из полей.
10. Вывести список сотрудников и их должности, которые не являются служащими:
– в VFP, MS SQL Server, Access:
SELECT Surname, Name, Lastname, Post FROM Staff WHERE NOT(Type_post = 'служащий')
В MS SQL Server, если в некоторых строках в столбце Type_post будет значение NULL, то эти строки не попадут в результат выполнения запроса, хотя логика функции NOT( ) должна вернуть истину.
– в Oracle:
SELECT Surname, Name, Lastname, Post FROM ADMIN_PAY.Staff
WHERE NOT(Type_post = 'служащий');
В Oracle в отличие от MS SQL Server, если в некоторых строках в столбце Type_post будет значение NULL, эти строки попадут в результат выполнения запроса.
NOT( ) – функция "логического НЕ". В примере если условие в скобках вернет ИСТИНУ, то функция NOT( ) изменит его на противоположное ЛОЖЬ и в результат строка помещена не будет. Поэтому в запросе будут выбраны только те работники, которые не являются служащими.
11. Вывести список сотрудников, которые не являются бухгалтерами, и их даты поступления на работу (рис. 6):
– в VFP, MS SQL Server, Access:
SELECT Name, Lastname, Surname, Date_input FROM Staff WHERE NOT(Post = 'бухгалтер')
– в Oracle:
SELECT Name, Lastname, Surname, Date_input FROM
ADMIN_PAY.Staff WHERE NOT(Post = 'бухгалтер');
Name |
Lastname |
Surname |
Date_input |
Василий |
Михайлович |
Сидоров |
14.11.1999 |
Петр |
Аркадьевич |
Васильков |
30.11.2000 |
Иван |
Васильевич |
Артемьев |
10.02.1998 |
Савел |
Игнатьевич |
Соянов |
25.06.1980 |
Анна |
Михайловна |
Иванова |
12.11.1979 |
Рис. 6. Список сотрудников, не являющихся бухгалтерами
22