Материал: 2391

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

Окончание табл. 5

 

T_number

Code_pay

 

Pay_day

Sum_pay

 

 

 

1

 

3

 

01.03.2003

12542.00

 

 

 

2

 

4

 

01.01.2003

1452.00

 

 

 

2

 

5

 

01.02.2003

2145.00

 

 

 

2

 

6

 

01.03.2003

2135.00

 

 

 

3

 

7

 

01.01.2003

4511.00

 

 

 

3

 

8

 

01.02.2003

1542.00

 

 

 

3

 

9

 

01.03.2003

1542.00

 

 

 

4

 

10

 

01.03.2003

2456.00

 

 

 

 

 

 

 

 

 

 

Таблица 6

Пример заполнения таблицы Items_pay (фрагмент)

 

 

 

 

 

 

 

Code_pay

 

Item_pay

 

Item_sum

Code_Items

1

 

Премия

 

124.00

 

1

 

 

1

 

Налог

 

-451.00

 

2

 

 

1

 

Оклад

 

1457.00

 

3

 

 

1

Поощрение

 

4512.00

 

4

 

 

1

Оплата учебы

 

145.00

 

5

 

 

2

 

Оклад

 

4656.00

 

6

 

 

2

 

Налог

 

-415.00

 

7

 

 

2

Поощрение

 

326.00

 

8

 

 

3

 

Оклад

 

1654.00

 

9

 

 

 

 

 

Премия

 

 

 

 

 

 

3

квартальная

 

1213.00

 

10

 

 

10

За бездетность

 

-154.00

 

11

 

 

10

 

Оклад

 

1456.00

 

12

 

 

10

Премия разовая

 

1245.00

 

13

 

 

 

 

 

Налог

 

 

 

 

 

 

10

подоходный

 

-452.00

 

14

 

 

Рассмотрим возможности программного создания описанного фрагмента базы данных в разных СУБД.

В SQL Server:

CREATE DATABASE DB_pay

/*создание БД с названием DB_pay, команда выполняется отдельно от остальных, так как занимает некоторое время*/ USE DB_pay

/*сделать активной БД с названием DB_pay*/

CREATE TABLE Staff(T_number INT IDENTITY(1,1) PRIMARY KEY, Surname CHAR(25), Name CHAR(25), Lastname CHAR(25), Birthday SMALLDATETIME, Phone Numeric(13,0), Post CHAR(30),

13

Type_post CHAR(8) DEFAULT 'Служащий', Date_input

SMALLDATETIME DEFAULT Getdate())

CREATE TABLE Pay(T_number INT FOREIGN KEY

REFERENCES Staff(T_number) ON UPDATE CASCADE, Code_pay INT IDENTITY(1,1) PRIMARY KEY, Pay_day SMALLDATETIME DEFAULT Getdate(), Sum_pay Numeric(8,2))

CREATE TABLE Items_pay(Code_pay INT FOREIGN KEY

REFERENCES Pay(Code_pay), Item_pay CHAR(20) DEFAULT 'Оклад',

Item_sum Numeric(8,2), Code_Items BIGINT IDENTITY(1,1) PRIMARY

KEY)

В ORACLE:

/*Вводим набор операторов для создания администратора создаваемой БД*/

CREATE USER "ADMIN_PAY" PROFILE "DEFAULT" IDENTIFIED BY "P@ssw0rd" DEFAULT TABLESPACE "USERS"

TEMPORARY TABLESPACE "TEMP" ACCOUNT UNLOCK;

GRANT "CONNECT" TO "ADMIN_PAY" WITH ADMIN OPTION; GRANT "DBA" TO "ADMIN_PAY" WITH ADMIN OPTION;

GRANT "EXP_FULL_DATABASE" TO "ADMIN_PAY" WITH ADMIN OPTION;

/*Теперь приступаем к созданию табличного пространства программно*/

CREATE TABLESPACE "DB_PAY" LOGGING

DATAFILE 'C:\ORACLE\ORADATA\ORCL\DB_PAY.dbf' SIZE 5M EXTENT

MANAGEMENT LOCAL;

/*Теперь переопределяем ранее созданного пользователя ADMIN_PAY на работу только в табличном пространстве DB_PAY*/

ALTER USER "ADMIN_PAY" DEFAULT TABLESPACE "DB_PAY";

CREATE TABLE ADMIN_PAY.Staff (T_number NUMBER(5),

CONSTRAINT "ID_STAFF" PRIMARY KEY(T_number) USING

14

INDEX TABLESPACE "DB_PAY", Surname CHAR(25), Name CHAR(25), Lastname CHAR(25), Birthday DATE, Phone NUMBER(13,0), Post CHAR(30), Type_post CHAR(8) DEFAULT 'Служащий', Date_input DATE DEFAULT Sysdate) TABLESPACE "DB_PAY";

CREATE TABLE ADMIN_PAY.Pay(T_number NUMBER(5),

CONSTRAINT "ID_STAFF_FK" FOREIGN KEY(T_number)

REFERENCES ADMIN_PAY.Staff(T_number), Code_pay NUMBER(6),

CONSTRAINT "ID_PAY" PRIMARY KEY(Code_pay) USING INDEX

TABLESPACE "DB_PAY", Pay_day DATE DEFAULT Sysdate, Sum_pay

NUMBER(8,2)) TABLESPACE "DB_PAY";

CREATE TABLE ADMIN_PAY.Items_pay(Code_pay NUMBER(6),

CONSTRAINT "ID_PAY_FK" FOREIGN KEY(Code_pay)

REFERENCES ADMIN_PAY.Pay(Code_pay), Item_pay CHAR(20)

DEFAULT 'Оклад', Item_sum Numeric(8,2), Code_Items NUMBER(8)

PRIMARY KEY USING INDEX TABLESPACE "DB_PAY")

TABLESPACE "DB_PAY";

--создание последовательности для каждого ключевого поля

CREATE SEQUENCE ADMIN_PAY.ID_STAFF_SEQ INCREMENT BY

1 START WITH 1 MAXVALUE 99999 MINVALUE 1 NOCYCLE CACHE

20 NOORDER;

CREATE SEQUENCE ADMIN_PAY.ID_PAY_SEQ INCREMENT BY 1 START WITH 1 MAXVALUE 999999 MINVALUE 1 NOCYCLE CACHE 20 NOORDER;

CREATE SEQUENCE ADMIN_PAY.ID_ITEM_SEQ INCREMENT BY 1 START WITH 1 MAXVALUE 99999999 MINVALUE 1 NOCYCLE CACHE 20 NOORDER;

1.2. Упражнения с использованием операторов обработки данных SQL

Сортировка.

1. Вывести все сведения о сотрудниках из таблицы Staff и отсортировать результат по табельному номеру:

– в VFP, MS SQL Server, Access:

SELECT * FROM Staff ORDER BY T_number

– в Oracle:

SELECT * FROM ADMIN_PAY.Staff ORDER BY T_number;

15

SELECT – ключевое слово, обозначающее начало SQL запроса, за ним обычно следует перечень полей, информация из которых помещается в результат выполнения запроса.

* – условное обозначение, которое позволит помещать в результат запроса информацию из всех полей таблицы, в которой осуществляется поиск (в некоторых СУБД используется ключевое слово ALL).

FROM – ключевое слово, после которого указывается имя источника/ов данных (если источников несколько, то они разделяются запятыми) для выполнения запроса.

При выполнении запроса в MS SQL Server убедитесь, что БД DB_Pay активна, или выполните команду USE DB_Pay.

При выполнении запроса в Oracle перед именем таблицы обязательно указывается имя схемы, к которой принадлежит таблица. В данном примере ADMIN_PAY.

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

– в VFP, MS SQL Server, Access:

SELECT Surname, Name, Lastname, Post FROM Staff ORDER BY Post ASC, Surname DESC

– в Oracle:

SELECT Surname, Name, Lastname, Post FROM ADMIN_PAY.Staff ORDER BY Post ASC, Surname DESC;

ORDER BY – сортирует результаты запроса на основании данных, содержащихся в одном или нескольких столбцах, по умолчанию сортировка выполняется по возрастанию. Если это предложение не указано, результаты запроса не будут отсортированы.

ASC – сортировка данных по возрастанию значений поля, после которого стоит ключевое слово ASC.

DESC – сортировка данных по убыванию значений поля, после которого стоит ключевое слово DESC.

Если сортировка выполняется по нескольким полям, то порядок сортировки следующий:

–выполняется сортировка строк по первому указанному полю;

–внутри групп повторяющихся значений первого поля выполняется сортировка строк по второму полю и т.д.

16

3. Выбрать из таблицы Pay табельные номера сотрудников и даты получения зарплат и отсортировать результат по дате по убыванию (рис. 2):

– в VFP, MS SQL Server, Access:

SELECT T_number, Pay_day FROM Pay ORDER BY Pay_day DESC

– в Oracle:

SELECT T_number, Pay_day FROM ADMIN_PAY.Pay ORDER BY Pay_day DESC;

T_Number

Pay_day

1

01.03.2003

2

01.03.2003

3

01.03.2003

4

01.03.2003

1

01.02.2003

2

01.02.2003

3

01.02.2003

1

01.01.2003

2

01.01.2003

3

01.01.2003

Рис. 2. Сортировка по дате

Изменение порядка следования полей.

4. Вывести все сведения о сотрудниках из таблицы Staff таким образом, чтобы в результате порядок столбцов был следующим: Name, Lastname, Surname, Post, Date_input, Phone, Birthday, T_number, Type_post (рис. 3):

– в VFP, MS SQL Server, Access:

SELECT Name, Lastname, Surname, Post, Date_input, Phone, Birthday, T_number, Type_post FROM Staff

– в Oracle:

SELECT Name, Lastname, Surname, Post, Date_input, Phone, Birthday,

T_number, Type_post FROM ADMIN_PAY.Staff;

Surname

Post

Date_input

Phone

Birthday

T_number

Type_post

Иванов

Бухгалтер

12.04.2000

124563

12.01.1971

1

Служащий

Сидоров

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

14.11.1999

451263

14.06.1954

2

ИТР

Васильков

Специалист отдела кадров

30.11.2000

145236

14.06.1981

3

Служащий

Артемьев

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

10.02.1998

365462

05.12.1970

67

ИТР

Соянов

Строитель

25.06.1980

121212

15.05.1981

4

Рабочий

Ушаков

Бухгалтер

18.11.2003

156462

30.05.1970

11

Служащий

17

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