reboot rep

This commit is contained in:
ada-dmitry
2024-02-15 15:29:30 +03:00
parent 2360cb388f
commit 4623603411
25 changed files with 505 additions and 99 deletions
+174
View File
@@ -0,0 +1,174 @@
-- Лабораторная работа №7 || Антипенко, Дробышевский || Вариант 4 --
-- Задание 1
-- • Создайте две таблицы: people и people_log. Первая таблица должна
-- содержать поля идентификатор (id), имя (first_name), фамилия
-- (last_name), дата рождения (birthday), текущее состояние счёта
-- (amount). Поле id – это первичный ключ. Поле amount – это
-- действительное число. Вторая таблица должна содержать поля:
-- идентификатор человека (person_id) дата операции (operation_date),
-- сумма (sum). Поле person_id должно быть ограничено, как внешний
-- ключ, ссылающийся на поле id таблицы people. Поле operation_date
-- должно позволить сохранять дату и время. Поле sum – это
-- действительное число. Заполните таблицы people и people_log
-- несколькими записями (не менее 5 на таблицу).
CREATE TABLE people (
id SERIAL PRIMARY KEY,
first_name VARCHAR(50),
last_name VARCHAR(50),
birthday DATE,
amount DECIMAL(10, 2)
);
CREATE TABLE people_log (
id SERIAL PRIMARY KEY,
person_id INTEGER REFERENCES people(id),
operation_date TIMESTAMP,
sum DECIMAL(10, 2)
);
INSERT INTO people (first_name, last_name, birthday, amount)
VALUES
('Иван', 'Иванов', '1985-05-15', 1000.50),
('Петр', 'Петров', '1990-10-20', 750.25),
('Мария', 'Сидорова', '1978-12-03', 3000.75),
('Елена', 'Козлова', '1989-08-27', 200.00),
('Алексей', 'Смирнов', '1980-04-18', 1500.00);
INSERT INTO people_log (person_id, operation_date, sum)
VALUES
(1, '2023-09-20 10:15:00', 250.00),
(3, '2023-10-01 15:30:00', 800.50),
(2, '2023-11-05 08:45:00', 100.25),
(4, '2023-11-25 12:00:00', 50.00),
(5, '2023-12-02 18:20:00', 300.00);
SELECT * FROM people;
SELECT * FROM people_log;
-- Задание 2
-- • Напишите процедуру или функцию statement_of_acount, которая на
-- основе двух параметров: даты начала периода и даты окончания
-- периода печатала бы на экран данные (operation_date и sum) трёх самых
-- крупных операций с положительной суммой, трёх самых крупных
-- операций с отрицательной суммой и данные об общем числе операций
-- и среднем значении суммы.
CREATE OR REPLACE FUNCTION statement_of_account(start_date DATE, end_date DATE) RETURNS VOID AS $$
DECLARE
pos_counter INTEGER := 0;
neg_counter INTEGER := 0;
total_sum NUMERIC := 0;
total_count INTEGER := 0;
const CONSTANT INTEGER := 3;
avg_amount NUMERIC := 0;
operation RECORD;
BEGIN
FOR operation IN (
SELECT operation_date, sum
FROM people_log
WHERE operation_date BETWEEN start_date AND end_date
ORDER BY sum
) LOOP
IF operation.sum > 0 THEN
pos_counter := pos_counter + 1;
IF pos_counter <= const THEN
RAISE INFO 'Positive: %, Sum: %', operation.operation_date, operation.sum;
END IF;
ELSE
neg_counter := neg_counter + 1;
IF neg_counter <= const THEN
RAISE INFO 'Negative: %, Sum: %', operation.operation_date, operation.sum;
END IF;
END IF;
total_sum := total_sum + operation.sum;
total_count := total_count + 1;
END LOOP;
IF total_count > 0 THEN
avg_amount := total_sum / total_count;
END IF;
RAISE INFO 'Total number of operations: %', total_count;
RAISE INFO 'Average amount of transactions: %', avg_amount;
END
$$ LANGUAGE plpgsql;
-- Задание 3
-- • Напишите процедуру или функцию account_operation, которая на
-- основе двух параметров: идентификатора человека и суммы вносит
-- изменения в таблицы people и people_log. В таблице people у человека с
-- указанным в качестве параметра идентификатором состояние счёта
-- должно измениться на указанную в качестве параметра сумму. В
-- таблицу people_log должна быть добавлена запись с указанным в
-- качестве параметра идентификатором человека, текущей датой и
-- временем и указанной в качестве параметра суммой.
CREATE OR REPLACE PROCEDURE account_operation(new_id integer, add_sum numeric) AS $$
DECLARE
m integer;
BEGIN
select into m count(operation_date) from people_log where to_char(operation_date,'DD')= to_char(now(),'DD');
if m>=3 then
UPDATE people
SET amount = amount + add_sum
WHERE id = new_id;
INSERT INTO people_log (person_id, operation_date, sum) VALUES (new_id, CURRENT_TIMESTAMP(0), add_sum);
ELSE
raise info 'Too many operations'
END $$ LANGUAGE plpgsql;
CALL account_operation(5, 1000000);
SELECT * FROM people;
SELECT * FROM people_log;
CREATE OR REPLACE FUNCTION statement_of_account(start_date DATE, end_date DATE) RETURNS VOID AS $$
DECLARE
pos_counter INTEGER := 0;
neg_counter INTEGER := 0;
total_sum NUMERIC := 0;
total_count INTEGER := 0;
const CONSTANT INTEGER := 3;
avg_amount NUMERIC := 0;
operation RECORD;
BEGIN
FOR operation IN (
SELECT operation_date, sum
FROM people_log
WHERE operation_date BETWEEN start_date AND end_date
ORDER BY sum
) LOOP
IF operation.sum > 0 THEN
pos_counter := pos_counter + 1;
IF pos_counter <= const THEN
RAISE INFO 'Positive: %, Sum: %', operation.operation_date, operation.sum;
END IF;
ELSE
neg_counter := neg_counter + 1;
IF neg_counter <= const THEN
RAISE INFO 'Negative: %, Sum: %', operation.operation_date, operation.sum;
END IF;
END IF;
total_sum := total_sum + operation.sum;
total_count := total_count + 1;
END LOOP;
IF total_count > 0 THEN
avg_amount := total_sum / total_count;
END IF;
RAISE INFO 'Total number of operations: %', total_count;
RAISE INFO 'Average amount of transactions: %', avg_amount;
END
$$ LANGUAGE plpgsql;
+99
View File
@@ -0,0 +1,99 @@
DROP TABLE people_log IF EXISTS;
DROP TABLE people IF EXISTS;
--1--
CREATE TABLE people (
id SERIAL PRIMARY KEY,
first_name VARCHAR(64),
last_name VARCHAR(64),
birthday DATE,
amount NUMERIC(10,2)
);
CREATE TABLE people_log (
person_id INTEGER REFERENCES people(id),
operation_date TIMESTAMP,
sum NUMERIC(10,2)
);
INSERT INTO people (first_name, last_name, birthday, amount)
VALUES ('Andrey', 'Ad', '2004-03-09', 1000.00),
('Sanal', 'Bat', '2004-12-15', 2000.00),
('Alex', 'Yak', '2004-08-10', 3000.00),
('Dima', 'Klev', '2004-04-25', 4000.00),
('David', 'Dav', '2001-11-30', 5000.00),
('Reno', 'G', '2004-08-28', 6000.00),
('Ilya', 'Zim', '2005-01-06', 7000.00),
('Sema', 'Akh', '2005-12-01', 8000.00);
INSERT INTO people_log ( person_id, operation_date, sum)
VALUES
(1, '2022-01-05 17:15:00', 100.00),
(2, '2022-01-06 17:30:00', 300.00),
(3, '2022-01-07 17:45:00', 300.00),
(4, '2022-01-08 18:00:00', 400.00),
(5, '2022-01-09 18:15:00', 500.00),
(6, '2022-01-10 17:15:00', -100.00),
(7, '2022-01-12 17:15:00', -400.00),
(8, '2022-01-29 17:15:00', -200.00);
SELECT * FROM people;
SELECT * FROM people_log;
--2--
CREATE OR REPLACE PROCEDURE statement_of_acount(start_date DATE, end_date DATE) AS $$
DECLARE
pos_sum RECORD;
neg_sum RECORD;
total_count INTEGER;
avg_amount NUMERIC;
BEGIN
FOR pos_sum IN (
SELECT operation_date, sum
FROM people_log
WHERE operation_date BETWEEN start_date AND end_date AND sum > 0
ORDER BY sum DESC
LIMIT 3
) LOOP
RAISE INFO 'Положительная операция: %, Сумма: %', pos_sum.operation_date, pos_sum.sum;
END LOOP;
FOR neg_sum IN (
SELECT operation_date, sum
FROM people_log
WHERE operation_date BETWEEN start_date AND end_date AND sum < 0
ORDER BY sum ASC
LIMIT 3
) LOOP
RAISE INFO 'Отрицательная операция: %, Сумма: %', neg_sum.operation_date, neg_sum.sum;
END LOOP;
SELECT COUNT(*) INTO total_count
FROM people_log
WHERE operation_date BETWEEN start_date AND end_date;
SELECT AVG(sum) INTO avg_amount
FROM people_log
WHERE operation_date BETWEEN start_date AND end_date;
RAISE INFO 'Общее количество операций: %', total_count;
RAISE INFO 'Средняя сумма операций: %', avg_amount;
END $$ LANGUAGE plpgsql;
CALL statement_of_acount('2022-01-01', '2022-11-12');
--3--
CREATE OR REPLACE PROCEDURE account_operation(new_id integer, summa numeric) AS $$
DECLARE
BEGIN
UPDATE people SET amount = amount + summa WHERE id = new_id;
INSERT INTO people_log (person_id, operation_date, sum) VALUES (new_id, CURRENT_TIMESTAMP(0), summa);
END $$ LANGUAGE plpgsql;
CALL account_operation(1, 100);
+32
View File
@@ -0,0 +1,32 @@
/* Лабораторная работа #1 || Вариант 4 || Антипенко */
CREATE table countries (
id numeric(3) PRIMARY KEY NOT NULL,
name_country varchar(64) NOT NULL
);
CREATE table schedules (
id integer PRIMARY KEY,
dt_dep timestamp without time zone NOT NULL,
dt_arr timestamp without time zone NOT NULL,
plс_of_dep varchar(2000) NOT NULL default 'Москва',
plc_of_arr varchar(2000) NOT NULL,
tpe varchar(9) NOT NULL
CHECK(tpe = 'Скорый' OR tpe = 'Фирменный' OR tpe = 'Обычный'),
cnt_stops integer CHECK(cnt_stops > 0),
id_oper numeric(3) references countries(id) not null
);
INSERT into countries VALUES
(321, 'Россия');
INSERT into schedules VALUES
(1, '1999-01-08 04:05:06', '1999-01-08 04:05:06', default, 'СПб', 'Скорый', 40, 321);
SELECT * FROM countries;
SELECT * FROM schedules;
Binary file not shown.
+307
View File
@@ -0,0 +1,307 @@
SET DateStyle TO German;
DROP TABLE IF EXISTS JOB_HISTORY;
DROP TABLE IF EXISTS DEPARTMENTS CASCADE;
DROP TABLE IF EXISTS EMPLOYEES;
DROP TABLE IF EXISTS JOBS;
DROP TABLE IF EXISTS LOCATIONS;
DROP TABLE IF EXISTS COUNTRIES;
DROP TABLE IF EXISTS REGIONS;
CREATE TABLE REGIONS
(
region_id integer PRIMARY KEY,
region_name varchar(64) NOT NULL UNIQUE
);
INSERT INTO regions
VALUES(1, 'Europe '),
(2, 'Americas '),
(3, 'Asia '),
(4, 'Middle East and Africa ');
-- DELETE FROM COUNTRIES;
CREATE TABLE COUNTRIES
(
country_id varchar(2) PRIMARY KEY,
country_name varchar(64) NOT NULL UNIQUE,
region_id integer REFERENCES REGIONS(region_id) NOT NULL
);
INSERT INTO COUNTRIES VALUES
('AR', 'Argentina', 2),
('AU', 'Australia', 3),
('BE', 'Belgium', 1),
('BR', 'Brazil', 2),
('CA', 'Canada', 2),
('CH', 'Switzerland', 1),
('CN', 'China', 3),
('DE', 'Germany', 1),
('DK', 'Denmark', 1),
('EG', 'Egypt', 4),
('FR', 'France', 1),
('IL', 'Israel', 4),
('IN', 'India', 3),
('IT', 'Italy', 1),
('JP', 'Japan', 3),
('KW', 'Kuwait', 4),
('ML', 'Malaysia', 3),
('MX', 'Mexico', 2),
('NG', 'Nigeria', 4),
('NL', 'Netherlands', 1),
('SG', 'Singapore', 3),
('UK', 'United Kingdom', 1),
('US', 'United States of America', 2),
('ZM', 'Zambia', 4),
('ZW', 'Zimbabwe', 4);
-- DELETE FROM LOCATIONS;
CREATE TABLE LOCATIONS
(
location_id integer PRIMARY KEY,
street_address varchar(64) NOT NULL,
postal_code varchar(16),
city varchar(64),
state_province varchar(64),
country_id varchar(2) REFERENCES COUNTRIES(country_id) NOT NULL
);
INSERT INTO LOCATIONS VALUES
(1000, '1297 Via Cola di Rie', '989', 'Roma', '', 'IT'),
(1100, '93091 Calle della Testa', '10934', 'Venice', '', 'IT'),
(1200, '2017 Shinjuku-ku', '1689', 'Tokyo', 'Tokyo Prefecture', 'JP'),
(1300, '9450 Kamiya-cho', '6823', 'Hiroshima', '', 'JP'),
(1400, '2014 Jabberwocky Rd', '26192', 'Southlake', 'Texas', 'US'),
(1500, '2011 Interiors Blvd', '99236', 'South San Francisco', 'California', 'US'),
(1600, '2007 Zagora St', '50090', 'South Brunswick', 'New Jersey', 'US'),
(1700, '2004 Charade Rd', '98199', 'Seattle', 'Washington', 'US'),
(1800, '147 Spadina Ave', 'M5V 2L7', 'Toronto', 'Ontario', 'CA'),
(1900, '6092 Boxwood St', 'YSW 9T2', 'Whitehorse', 'Yukon', 'CA'),
(2000, '40-5-12 Laogianggen', '190518', 'Beijing', '', 'CN'),
(2100, '1298 Vileparle (E)', '490231', 'Bombay', 'Maharashtra', 'IN'),
(2200, '12-98 Victoria Street', '2901', 'Sydney', 'New South Wales', 'AU'),
(2300, '198 Clementi North', '540198', 'Singapore', '', 'SG'),
(2400, '8204 Arthur St', '', 'London', '', 'UK'),
(2500, 'Magdalen Centre, The Oxford Science Park', 'OX9 9ZB', 'Oxford', 'Oxford', 'UK'),
(2600, '9702 Chester Road', '9629850293', 'Stretford', 'Manchester', 'UK'),
(2700, 'Schwanthalerstr. 7031', '80925', 'Munich', 'Bavaria', 'DE'),
(2800, 'Rua Frei Caneca 1360 ', '01307-002', 'Sao Paulo', 'Sao Paulo', 'BR'),
(2900, '20 Rue des Corps-Saints', '1730', 'Geneva', 'Geneve', 'CH'),
(3000, 'Murtenstrasse 921', '3095', 'Bern', 'BE', 'CH'),
(3100, 'Pieter Breughelstraat 837', '3029SK', 'Utrecht', 'Utrecht', 'NL');
-- DELETE FROM JOBS;
CREATE TABLE JOBS(
job_id varchar(16) PRIMARY KEY,
job_title varchar(64) NOT NULL UNIQUE,
min_salary numeric(8, 2) NOT NULL,
max_salary numeric(8, 2) NOT NULL
);
INSERT INTO jobs VALUES
('AD_PRES', 'President', 20080, 40000),
('AD_VP', 'Administration Vice President', 15000, 30000),
('AD_ASST', 'Administration Assistant', 3000, 6000),
('FI_MGR', 'Finance Manager', 8200, 16000),
('FI_ACCOUNT', 'Accountant', 4200, 9000),
('AC_MGR', 'Accounting Manager', 8200, 16000),
('AC_ACCOUNT', 'Public Accountant', 4200, 9000),
('SA_MAN', 'Sales Manager', 10000, 20080),
('SA_REP', 'Sales Representative', 6000, 12008),
('PU_MAN', 'Purchasing Manager', 8000, 15000),
('PU_CLERK', 'Purchasing Clerk', 2500, 5500),
('ST_MAN', 'Stock Manager', 5500, 8500),
('ST_CLERK', 'Stock Clerk', 2008, 5000),
('SH_CLERK', 'Shipping Clerk', 2500, 5500),
('IT_PROG', 'Programmer', 4000, 10000),
('MK_MAN', 'Marketing Manager', 9000, 15000),
('MK_REP', 'Marketing Representative', 4000, 9000),
('HR_REP', 'Human Resources Representative', 4000, 9000),
('PR_REP', 'Public Relations Representative', 4500, 10500);
-- DELETE FROM DEPARTMENTS;
CREATE TABLE EMPLOYEES
(
employee_id integer PRIMARY KEY,
first_name varchar(64) NOT NULL,
last_name varchar(64) NOT NULL,
email varchar(64) NOT NULL UNIQUE,
phone_integer varchar(64) NOT NULL,
hire_date timestamp NOT NULL,
job_id varchar(16) REFERENCES JOBS(job_id),
salary numeric(8, 2) NOT NULL,
commission_pct numeric(5, 2),
manager_id integer REFERENCES EMPLOYEES(employee_id),
department_id integer
);
-- DELETE FROM EMPLOYEES;
INSERT INTO employees VALUES(100, 'Steven', 'King', 'SKING', '515.123.4567', '17.06.2003', 'AD_PRES', 24000, NULL, NULL, 90);
INSERT INTO employees VALUES(101, 'Neena', 'Kochhar', 'NKOCHHAR', '515.123.4568', '21.09.2005', 'AD_VP', 17000, NULL, 100, 90);
INSERT INTO employees VALUES(102, 'Lex', 'De Haan', 'LDEHAAN', '515.123.4569', '13.01.2001', 'AD_VP', 17000, NULL, 100, 90);
INSERT INTO employees VALUES(103, 'Alexander', 'Hunold', 'AHUNOLD', '590.423.4567', '03.01.2006', 'IT_PROG', 9000, NULL, 102, 60);
INSERT INTO employees VALUES(104, 'Bruce', 'Ernst', 'BERNST', '590.423.4568', '21.05.2007', 'IT_PROG', 6000, NULL, 103, 60);
INSERT INTO employees VALUES(105, 'David', 'Austin', 'DAUSTIN', '590.423.4569', '25.06.2005', 'IT_PROG', 4800, NULL, 103, 60);
INSERT INTO employees VALUES(106, 'Valli', 'Pataballa', 'VPATABAL', '590.423.4560', '05.02.2006', 'IT_PROG', 4800, NULL, 103, 60);
INSERT INTO employees VALUES(107, 'Diana', 'Lorentz', 'DLORENTZ', '590.423.5567', '07.02.2007', 'IT_PROG', 4200, NULL, 103, 60);
INSERT INTO employees VALUES(108, 'Nancy', 'Greenberg', 'NGREENBE', '515.124.4569', '17.08.2002', 'FI_MGR', 12008, NULL, 101, 100);
INSERT INTO employees VALUES(109, 'Daniel', 'Faviet', 'DFAVIET', '515.124.4169', '16.08.2002', 'FI_ACCOUNT', 9000, NULL, 108, 100);
INSERT INTO employees VALUES(110, 'John', 'Chen', 'JCHEN', '515.124.4269', '28.09.2005', 'FI_ACCOUNT', 8200, NULL, 108, 100);
INSERT INTO employees VALUES(111, 'Ismael', 'Sciarra', 'ISCIARRA', '515.124.4369', '30.09.2005', 'FI_ACCOUNT', 7700, NULL, 108, 100);
INSERT INTO employees VALUES(112, 'Jose Manuel', 'Urman', 'JMURMAN', '515.124.4469', '07.03.2006', 'FI_ACCOUNT', 7800, NULL, 108, 100);
INSERT INTO employees VALUES(113, 'Luis', 'Popp', 'LPOPP', '515.124.4567', '07.12.2007', 'FI_ACCOUNT', 6900, NULL, 108, 100);
INSERT INTO employees VALUES(114, 'Den', 'Raphaely', 'DRAPHEAL', '515.127.4561', '07.12.2002', 'PU_MAN', 11000, NULL, 100, 30);
INSERT INTO employees VALUES(115, 'Alexander', 'Khoo', 'AKHOO', '515.127.4562', '18.05.2003', 'PU_CLERK', 3100, NULL, 114, 30);
INSERT INTO employees VALUES(116, 'Shelli', 'Baida', 'SBAIDA', '515.127.4563', '24.12.2005', 'PU_CLERK', 2900, NULL, 114, 30);
INSERT INTO employees VALUES(117, 'Sigal', 'Tobias', 'STOBIAS', '515.127.4564', '24.07.2005', 'PU_CLERK', 2800, NULL, 114, 30);
INSERT INTO employees VALUES(118, 'Guy', 'Himuro', 'GHIMURO', '515.127.4565', '15.11.2006', 'PU_CLERK', 2600, NULL, 114, 30);
INSERT INTO employees VALUES(119, 'Karen', 'Colmenares', 'KCOLMENA', '515.127.4566', '10.08.2007', 'PU_CLERK', 2500, NULL, 114, 30);
INSERT INTO employees VALUES(120, 'Matthew', 'Weiss', 'MWEISS', '650.123.1234', '18.07.2004', 'ST_MAN', 8000, NULL, 100, 50);
INSERT INTO employees VALUES(121, 'Adam', 'Fripp', 'AFRIPP', '650.123.2234', '10.04.2005', 'ST_MAN', 8200, NULL, 100, 50);
INSERT INTO employees VALUES(122, 'Payam', 'Kaufling', 'PKAUFLIN', '650.123.3234', '01.05.2003', 'ST_MAN', 7900, NULL, 100, 50);
INSERT INTO employees VALUES(123, 'Shanta', 'Vollman', 'SVOLLMAN', '650.123.4234', '10.10.2005', 'ST_MAN', 6500, NULL, 100, 50);
INSERT INTO employees VALUES(124, 'Kevin', 'Mourgos', 'KMOURGOS', '650.123.5234', '16.11.2007', 'ST_MAN', 5800, NULL, 100, 50);
INSERT INTO employees VALUES(125, 'Julia', 'Nayer', 'JNAYER', '650.124.1214', '16.07.2005', 'ST_CLERK', 3200, NULL, 120, 50);
INSERT INTO employees VALUES(126, 'Irene', 'Mikkilineni', 'IMIKKILI', '650.124.1224', '28.09.2006', 'ST_CLERK', 2700, NULL, 120, 50);
INSERT INTO employees VALUES(127, 'James', 'Landry', 'JLANDRY', '650.124.1334', '14.01.2007', 'ST_CLERK', 2400, NULL, 120, 50);
INSERT INTO employees VALUES(128, 'Steven', 'Markle', 'SMARKLE', '650.124.1434', '08.03.2008', 'ST_CLERK', 2200, NULL, 120, 50);
INSERT INTO employees VALUES(129, 'Laura', 'Bissot', 'LBISSOT', '650.124.5234', '20.08.2005', 'ST_CLERK', 3300, NULL, 121, 50);
INSERT INTO employees VALUES(130, 'Mozhe', 'Atkinson', 'MATKINSO', '650.124.6234', '30.10.2005', 'ST_CLERK', 2800, NULL, 121, 50);
INSERT INTO employees VALUES(131, 'James', 'Marlow', 'JAMRLOW', '650.124.7234', '16.02.2005', 'ST_CLERK', 2500, NULL, 121, 50);
INSERT INTO employees VALUES(132, 'TJ', 'Olson', 'TJOLSON', '650.124.8234', '10.04.2007', 'ST_CLERK', 2100, NULL, 121, 50);
INSERT INTO employees VALUES(133, 'Jason', 'Mallin', 'JMALLIN', '650.127.1934', '14.06.2004', 'ST_CLERK', 3300, NULL, 122, 50);
INSERT INTO employees VALUES(134, 'Michael', 'Rogers', 'MROGERS', '650.127.1834', '26.08.2006', 'ST_CLERK', 2900, NULL, 122, 50);
INSERT INTO employees VALUES(135, 'Ki', 'Gee', 'KGEE', '650.127.1734', '12.12.2007', 'ST_CLERK', 2400, NULL, 122, 50);
INSERT INTO employees VALUES(136, 'Hazel', 'Philtanker', 'HPHILTAN', '650.127.1634', '06.02.2008', 'ST_CLERK', 2200, NULL, 122, 50);
INSERT INTO employees VALUES(137, 'Renske', 'Ladwig', 'RLADWIG', '650.121.1234', '14.07.2003', 'ST_CLERK', 3600, NULL, 123, 50);
INSERT INTO employees VALUES(138, 'Stephen', 'Stiles', 'SSTILES', '650.121.2034', '26.10.2005', 'ST_CLERK', 3200, NULL, 123, 50);
INSERT INTO employees VALUES(139, 'John', 'Seo', 'JSEO', '650.121.2019', '12.02.2006', 'ST_CLERK', 2700, NULL, 123, 50);
INSERT INTO employees VALUES(140, 'Joshua', 'Patel', 'JPATEL', '650.121.1834', '06.04.2006', 'ST_CLERK', 2500, NULL, 123, 50);
INSERT INTO employees VALUES(141, 'Trenna', 'Rajs', 'TRAJS', '650.121.8009', '17.10.2003', 'ST_CLERK', 3500, NULL, 124, 50);
INSERT INTO employees VALUES(142, 'Curtis', 'Davies', 'CDAVIES', '650.121.2994', '29.01.2005', 'ST_CLERK', 3100, NULL, 124, 50);
INSERT INTO employees VALUES(143, 'Randall', 'Matos', 'RMATOS', '650.121.2874', '15.03.2006', 'ST_CLERK', 2600, NULL, 124, 50);
INSERT INTO employees VALUES(144, 'Peter', 'Vargas', 'PVARGAS', '650.121.2004', '09.07.2006', 'ST_CLERK', 2500, NULL, 124, 50);
INSERT INTO employees VALUES(145, 'John', 'Russell', 'JRUSSEL', '011.44.1344.429268', '01.10.2004', 'SA_MAN', 14000, '0.4', 100, 80);
INSERT INTO employees VALUES(146, 'Karen', 'Partners', 'KPARTNER', '011.44.1344.467268', '05.01.2005', 'SA_MAN', 13500, '0.3', 100, 80);
INSERT INTO employees VALUES(147, 'Alberto', 'Errazuriz', 'AERRAZUR', '011.44.1344.429278', '10.03.2005', 'SA_MAN', 12000, '0.3', 100, 80);
INSERT INTO employees VALUES(148, 'Gerald', 'Cambrault', 'GCAMBRAU', '011.44.1344.619268', '15.10.2007', 'SA_MAN', 11000, '0.3', 100, 80);
INSERT INTO employees VALUES(149, 'Eleni', 'Zlotkey', 'EZLOTKEY', '011.44.1344.429018', '29.01.2008', 'SA_MAN', 10500, '0.2', 100, 80);
INSERT INTO employees VALUES(150, 'Peter', 'Tucker', 'PTUCKER', '011.44.1344.129268', '30.01.2005', 'SA_REP', 10000, '0.3', 145, 80);
INSERT INTO employees VALUES(151, 'David', 'Bernstein', 'DBERNSTE', '011.44.1344.345268', '24.03.2005', 'SA_REP', 9500, '0.25', 145, 80);
INSERT INTO employees VALUES(152, 'Peter', 'Hall', 'PHALL', '011.44.1344.478968', '20.08.2005', 'SA_REP', 9000, '0.25', 145, 80);
INSERT INTO employees VALUES(153, 'Christopher', 'Olsen', 'COLSEN', '011.44.1344.498718', '30.03.2006', 'SA_REP', 8000, '0.2', 145, 80);
INSERT INTO employees VALUES(154, 'Nanette', 'Cambrault', 'NCAMBRAU', '011.44.1344.987668', '09.12.2006', 'SA_REP', 7500, '0.2', 145, 80);
INSERT INTO employees VALUES(155, 'Oliver', 'Tuvault', 'OTUVAULT', '011.44.1344.486508', '23.11.2007', 'SA_REP', 7000, '0.15', 145, 80);
INSERT INTO employees VALUES(156, 'Janette', 'King', 'JKING', '011.44.1345.429268', '30.01.2004', 'SA_REP', 10000, '0.35', 146, 80);
INSERT INTO employees VALUES(157, 'Patrick', 'Sully', 'PSULLY', '011.44.1345.929268', '04.03.2004', 'SA_REP', 9500, '0.35', 146, 80);
INSERT INTO employees VALUES(158, 'Allan', 'McEwen', 'AMCEWEN', '011.44.1345.829268', '01.08.2004', 'SA_REP', 9000, '0.35', 146, 80);
INSERT INTO employees VALUES(159, 'Lindsey', 'Smith', 'LSMITH', '011.44.1345.729268', '10.03.2005', 'SA_REP', 8000, '0.3', 146, 80);
INSERT INTO employees VALUES(160, 'Louise', 'Doran', 'LDORAN', '011.44.1345.629268', '15.12.2005', 'SA_REP', 7500, '0.3', 146, 80);
INSERT INTO employees VALUES(161, 'Sarath', 'Sewall', 'SSEWALL', '011.44.1345.529268', '03.11.2006', 'SA_REP', 7000, '0.25', 146, 80);
INSERT INTO employees VALUES(162, 'Clara', 'Vishney', 'CVISHNEY', '011.44.1346.129268', '11.11.2005', 'SA_REP', 10500, '0.25', 147, 80);
INSERT INTO employees VALUES(163, 'Danielle', 'Greene', 'DGREENE', '011.44.1346.229268', '19.03.2007', 'SA_REP', 9500, '0.15', 147, 80);
INSERT INTO employees VALUES(164, 'Mattea', 'Marvins', 'MMARVINS', '011.44.1346.329268', '24.01.2008', 'SA_REP', 7200, '0.1', 147, 80);
INSERT INTO employees VALUES(165, 'David', 'Lee', 'DLEE', '011.44.1346.529268', '23.02.2008', 'SA_REP', 6800, '0.1', 147, 80);
INSERT INTO employees VALUES(166, 'Sundar', 'Ande', 'SANDE', '011.44.1346.629268', '24.03.2008', 'SA_REP', 6400, '0.1', 147, 80);
INSERT INTO employees VALUES(167, 'Amit', 'Banda', 'ABANDA', '011.44.1346.729268', '21.04.2008', 'SA_REP', 6200, '0.1', 147, 80);
INSERT INTO employees VALUES(168, 'Lisa', 'Ozer', 'LOZER', '011.44.1343.929268', '11.03.2005', 'SA_REP', 11500, '0.25', 148, 80);
INSERT INTO employees VALUES(169, 'Harrison', 'Bloom', 'HBLOOM', '011.44.1343.829268', '23.03.2006', 'SA_REP', 10000, '0.2', 148, 80);
INSERT INTO employees VALUES(170, 'Tayler', 'Fox', 'TFOX', '011.44.1343.729268', '24.01.2006', 'SA_REP', 9600, '0.2', 148, 80);
INSERT INTO employees VALUES(171, 'William', 'Smith', 'WSMITH', '011.44.1343.629268', '23.02.2007', 'SA_REP', 7400, '0.15', 148, 80);
INSERT INTO employees VALUES(172, 'Elizabeth', 'Bates', 'EBATES', '011.44.1343.529268', '24.03.2007', 'SA_REP', 7300, '0.15', 148, 80);
INSERT INTO employees VALUES(173, 'Sundita', 'Kumar', 'SKUMAR', '011.44.1343.329268', '21.04.2008', 'SA_REP', 6100, '0.1', 148, 80);
INSERT INTO employees VALUES(174, 'Ellen', 'Abel', 'EABEL', '011.44.1644.429267', '11.05.2004', 'SA_REP', 11000, '0.3', 149, 80);
INSERT INTO employees VALUES(175, 'Alyssa', 'Hutton', 'AHUTTON', '011.44.1644.429266', '19.03.2005', 'SA_REP', 8800, '0.25', 149, 80);
INSERT INTO employees VALUES(176, 'Jonathon', 'Taylor', 'JTAYLOR', '011.44.1644.429265', '24.03.2006', 'SA_REP', 8600, '0.2', 149, 80);
INSERT INTO employees VALUES(177, 'Jack', 'Livingston', 'JLIVINGS', '011.44.1644.429264', '23.04.2006', 'SA_REP', 8400, '0.2', 149, 80);
INSERT INTO employees VALUES(178, 'Kimberely', 'Grant', 'KGRANT', '011.44.1644.429263', '24.05.2007', 'SA_REP', 7000, '0.15', 149, NULL);
INSERT INTO employees VALUES(179, 'Charles', 'Johnson', 'CJOHNSON', '011.44.1644.429262', '04.01.2008', 'SA_REP', 6200, '0.1', 149, 80);
INSERT INTO employees VALUES(180, 'Winston', 'Taylor', 'WTAYLOR', '650.507.9876', '24.01.2006', 'SH_CLERK', 3200, NULL, 120, 50);
INSERT INTO employees VALUES(181, 'Jean', 'Fleaur', 'JFLEAUR', '650.507.9877', '23.02.2006', 'SH_CLERK', 3100, NULL, 120, 50);
INSERT INTO employees VALUES(182, 'Martha', 'Sullivan', 'MSULLIVA', '650.507.9878', '21.06.2007', 'SH_CLERK', 2500, NULL, 120, 50);
INSERT INTO employees VALUES(183, 'Girard', 'Geoni', 'GGEONI', '650.507.9879', '03.02.2008', 'SH_CLERK', 2800, NULL, 120, 50);
INSERT INTO employees VALUES(184, 'Nandita', 'Sarchand', 'NSARCHAN', '650.509.1876', '27.01.2004', 'SH_CLERK', 4200, NULL, 121, 50);
INSERT INTO employees VALUES(185, 'Alexis', 'Bull', 'ABULL', '650.509.2876', '20.02.2005', 'SH_CLERK', 4100, NULL, 121, 50);
INSERT INTO employees VALUES(186, 'Julia', 'Dellinger', 'JDELLING', '650.509.3876', '24.06.2006', 'SH_CLERK', 3400, NULL, 121, 50);
INSERT INTO employees VALUES(187, 'Anthony', 'Cabrio', 'ACABRIO', '650.509.4876', '07.02.2007', 'SH_CLERK', 3000, NULL, 121, 50);
INSERT INTO employees VALUES(188, 'Kelly', 'Chung', 'KCHUNG', '650.505.1876', '14.06.2005', 'SH_CLERK', 3800, NULL, 122, 50);
INSERT INTO employees VALUES(189, 'Jennifer', 'Dilly', 'JDILLY', '650.505.2876', '13.08.2005', 'SH_CLERK', 3600, NULL, 122, 50);
INSERT INTO employees VALUES(190, 'Timothy', 'Gates', 'TGATES', '650.505.3876', '11.07.2006', 'SH_CLERK', 2900, NULL, 122, 50);
INSERT INTO employees VALUES(191, 'Randall', 'Perkins', 'RPERKINS', '650.505.4876', '19.12.2007', 'SH_CLERK', 2500, NULL, 122, 50);
INSERT INTO employees VALUES(192, 'Sarah', 'Bell', 'SBELL', '650.501.1876', '04.02.2004', 'SH_CLERK', 4000, NULL, 123, 50);
INSERT INTO employees VALUES(193, 'Britney', 'Everett', 'BEVERETT', '650.501.2876', '03.03.2005', 'SH_CLERK', 3900, NULL, 123, 50);
INSERT INTO employees VALUES(194, 'Samuel', 'McCain', 'SMCCAIN', '650.501.3876', '01.07.2006', 'SH_CLERK', 3200, NULL, 123, 50);
INSERT INTO employees VALUES(195, 'Vance', 'Jones', 'VJONES', '650.501.4876', '17.03.2007', 'SH_CLERK', 2800, NULL, 123, 50);
INSERT INTO employees VALUES(196, 'Alana', 'Walsh', 'AWALSH', '650.507.9811', '24.04.2006', 'SH_CLERK', 3100, NULL, 124, 50);
INSERT INTO employees VALUES(197, 'Kevin', 'Feeney', 'KFEENEY', '650.507.9822', '23.05.2006', 'SH_CLERK', 3000, NULL, 124, 50);
INSERT INTO employees VALUES(198, 'Donald', 'OConnell', 'DOCONNEL', '650.507.9833', '21.06.2007', 'SH_CLERK', 2600, NULL, 124, 50);
INSERT INTO employees VALUES(199, 'Douglas', 'Grant', 'DGRANT', '650.507.9844', '13.01.2008', 'SH_CLERK', 2600, NULL, 124, 50);
INSERT INTO employees VALUES(200, 'Jennifer', 'Whalen', 'JWHALEN', '515.123.4444', '17.09.2003', 'AD_ASST', 4400, NULL, 101, 10);
INSERT INTO employees VALUES(201, 'Michael', 'Hartstein', 'MHARTSTE', '515.123.5555', '17.02.2004', 'MK_MAN', 13000, NULL, 100, 20);
INSERT INTO employees VALUES(202, 'Pat', 'Fay', 'PFAY', '603.123.6666', '17.08.2005', 'MK_REP', 6000, NULL, 201, 20);
INSERT INTO employees VALUES(203, 'Susan', 'Mavris', 'SMAVRIS', '515.123.7777', '07.06.2002', 'HR_REP', 6500, NULL, 101, 40);
INSERT INTO employees VALUES(204, 'Hermann', 'Baer', 'HBAER', '515.123.8888', '07.06.2002', 'PR_REP', 10000, NULL, 101, 70);
INSERT INTO employees VALUES(205, 'Shelley', 'Higgins', 'SHIGGINS', '515.123.8080', '07.06.2002', 'AC_MGR', 12008, NULL, 101, 110);
INSERT INTO employees VALUES(206, 'William', 'Gietz', 'WGIETZ', '515.123.8181', '07.06.2002', 'AC_ACCOUNT', 8300, NULL, 205, 110);
CREATE TABLE DEPARTMENTS
(
department_id integer PRIMARY KEY,
department_name varchar(64) NOT NULL UNIQUE,
manager_id integer REFERENCES EMPLOYEES(employee_id),
location_id integer REFERENCES LOCATIONS(location_id)
);
INSERT INTO departments VALUES
(10, 'Administration', 200, 1700),
(20, 'Marketing', 201, 1800),
(30, 'Purchasing', 114, 1700),
(40, 'Human Resources', 203, 2400),
(50, 'Shipping', 121, 1500),
(60, 'IT', 103, 1400),
(70, 'Public Relations', 204, 2700),
(80, 'Sales', 145, 2500),
(90, 'Executive', 100, 1700),
(100, 'Finance', 108, 1700),
(110, 'Accounting', 205, 1700),
(120, 'Treasury', NULL, 1700),
(130, 'Corporate Tax', NULL, 1700),
(140, 'Control And Credit', NULL, 1700),
(150, 'Shareholder Services', NULL, 1700),
(160, 'Benefits', NULL, 1700),
(170, 'Manufacturing', NULL, 1700),
(180, 'Construction', NULL, 1700),
(190, 'Contracting', NULL, 1700),
(200, 'Operations', NULL, 1700),
(210, 'IT Support', NULL, 1700),
(220, 'NOC', NULL, 1700),
(230, 'IT Helpdesk', NULL, 1700),
(240, 'Government Sales', NULL, 1700),
(250, 'Retail Sales', NULL, 1700),
(260, 'Recruiting', NULL, 1700),
(270, 'Payroll', NULL, 1700);
ALTER TABLE EMPLOYEES ADD CONSTRAINT DE FOREIGN KEY(department_id)
REFERENCES DEPARTMENTS(department_id);
CREATE TABLE JOB_HISTORY
(
employee_id integer REFERENCES EMPLOYEES(employee_id),
start_date timestamp,
PRIMARY KEY(employee_id, start_date),
end_date timestamp,
job_id varchar(16) REFERENCES JOBS(job_id) NOT NULL,
department_id integer REFERENCES DEPARTMENTS(department_id) NOT NULL
);
INSERT INTO job_history VALUES
(102, '13.01.2001', '24.07.2006', 'IT_PROG', 60),
(101, '21.09.1997', '27.10.2001', 'AC_ACCOUNT', 110),
(101, '28.10.2001', '15.03.2005', 'AC_MGR', 110),
(201, '17.02.2004', '19.12.2007', 'MK_REP', 20),
(114, '24.03.2006', '31.12.2007', 'ST_CLERK', 50),
(122, '01.01.2007', '31.12.2007', 'ST_CLERK', 50),
(200, '17.09.1995', '17.06.2001', 'AD_ASST', 90),
(176, '24.03.2006', '31.12.2006', 'SA_REP', 80),
(176, '01.01.2007', '31.12.2007', 'SA_MAN', 80),
(200, '01.07.2002', '31.12.2006', 'AC_ACCOUNT', 90);
+21
View File
@@ -0,0 +1,21 @@
/* Лабораторная работа #2 || Вариант 1 || Гаранян, Епифанов */
SELECT
((30*20)/10)+(20*10) AS "X";
SELECT *
FROM locations
WHERE postal_code IS NOT NULL;
SELECT first_name AS "Имя", last_name AS "Фамилия",
left(upper(first_name), 3) || left(upper(last_name), 2) AS "Идентификатор"
FROM employees;
SELECT
job_id AS "Должность", max(salary) AS "Максимальная зарплата",
min(salary) AS "Минимальная зарплата",
to_char(avg(salary), '99999.00') AS "Средняя зарплата"
FROM employees
GROUP BY job_id;
+43
View File
@@ -0,0 +1,43 @@
/* Лабораторная работа #2 || Вариант 2 || Антипенко, Дробышевский */
/* Задание 1 */
SELECT
(first_name || ' ' || last_name) AS "ФИО",
to_char(salary, '9999999D99') AS "ОКЛАД",
trunc(salary*0.87) AS "Оклад минус подоходный"
FROM employees;
/* Задание 2 */
SELECT
first_name AS "Имя",
last_name AS "Фамилия",
job_id AS "Должность",
to_char(hire_date, 'DD.MM.YYYY') AS "Дата приема на работу"
FROM employees
WHERE job_id IN ('AD_PRES', 'AD_VP', 'AD_ASST')
OR hire_date BETWEEN
'1995-01-01' AND '2023-01-01'
LIMIT 5;
/* Задание 3 */
SELECT
first_name AS "Имя",
last_name AS "Фамилия",
to_char(salary, '99999D99') AS "Оклад",
to_char(hire_date, 'DD.MM.YYYY') AS "Дата приема на работу",
EXTRACT(month from age(now(), hire_date))
+ EXTRACT(year from age(now(), hire_date))*12
as "Проработано месяцев"
FROM employees;
/* Задание 4 */
SELECT
job_id AS "Должность",
trunc(MAX(salary)) AS "Максимальная зарплата",
trunc(MIN(salary)) AS "Минимальная зарплата",
trunc(AVG(salary), 2) AS "Средняя зарплата"
FROM employees
GROUP BY job_id;
Binary file not shown.
+63
View File
@@ -0,0 +1,63 @@
/* Лабораторная работа №3 | Вариант 4 | Антипенко, Дробышевский */
SELECT * FROM departments;
SELECT * FROM employees;
SELECT * FROM jobs;
/* Задание 1 */
SELECT
e.first_name AS "FIRST_NAME",
e.last_name AS "LAST_NAME",
d.department_name AS "DEPARTMENT_NAME"
FROM employees e, departments d
WHERE e.department_id = d.department_id AND d.department_name IN ('IT', 'Sales');
/* Задание 2 */
SELECT
e.first_name AS "FIRST_NAME",
e.last_name AS "LAST_NAME",
trunc(e.salary) AS "SALARY",
d.department_name AS "DEPARTMENT_NAME",
j.job_title AS "JOB_TITLE"
FROM employees e, jobs j, departments d
WHERE e.department_id = d.department_id AND e.job_id = j.job_id
AND e.salary > 10000
ORDER BY e.salary ASC;
/* Задание 3 */
SELECT
e.first_name AS "Имя",
e.last_name AS "Фамилия",
to_char(e.salary, '99999D99') AS "Оклад",
trunc(j.min_salary) AS "Мин.оклад"
FROM employees e, jobs j
WHERE e.job_id = j.job_id AND j.min_salary*1.2 >= e.salary;
/* Задание 4 */
SELECT
last_name AS "Фамилия_Р",
first_name AS "Имя",
to_char(salary, '99999D99') AS "Оклад"
FROM employees
WHERE salary > (
SELECT
AVG(salary)
FROM employees
)
ORDER BY salary ASC;
/* Задание 5 */
SELECT
e.first_name AS "Имя",
e.last_name AS "Фамилия",
e.job_id AS "Должность",
to_char(e.salary, '999999D99') AS "Оклад"
FROM employees e
/*WHERE e.job_id = j.job_id AND e.salary = j.max_salary*/
WHERE e.salary, e.job_id IN (
SELECT
max_salary,
job_id
FROM jobs
);
Binary file not shown.
+37
View File
@@ -0,0 +1,37 @@
CREATE table staff(
id integer primary key,
name varchar(64) NOT NULL,
department varchar(64) NOT NULL
);
CREATE SEQUENCE staff_id_seq
START WITH 12
CYCLE
INCREMENT BY 8
CACHE 100;
INSERT INTO staff VALUES
(nextval('staff_id_seq'), 'Ivan Makarenko', 'Director');
INSERT INTO staff
(SELECT nextval('staff_id_seq'), last_name, department_name
FROM employees e JOIN departments d ON e.department_id = d.department_id);
UPDATE staff SET department = 'Innovations department'
WHERE id < 40;
DELETE FROM staff
WHERE name ILIKE('%K%');
WITH RECURSIVE tmp AS (
SELECT employee_id, first_name, last_name, manager_id, 1 AS level
FROM employees
WHERE manager_id = 100
UNION ALL
SELECT e.employee_id, e.first_name, e.last_name, e.manager_id, t.level + 1
FROM employees e
JOIN tmp t ON e.manager_id = t.employee_id
)
SELECT first_name, last_name
FROM tmp;
+42
View File
@@ -0,0 +1,42 @@
SELECT *
FROM bd_employees
WHERE last_name ~ '^[a-zA-Z]+[-[a-zA-Z]]{0,}';
SELECT *
FROM bd_employees
WHERE department_id IN (
SELECT id
FROM bd_departments
WHERE street ~ '^[A-Za-z\s]+$'
);
SELECT last_name,
CASE WHEN phone_number LIKE '+7%'
THEN CONCAT('8', SUBSTRING(phone_number, 3))
ELSE phone_number END AS phone
FROM bd_employees;
UPDATE staff
SET department = (SELECT department_name FROM departments WHERE department_id = 60)
WHERE department in (
SELECT department_name
FROM departments
WHERE department_id in (
SELECT department_id
FROM employees
WHERE manager_id = (
SELECT employee_id
FROM employees
WHERE first_name = 'Neena' AND last_name= 'Kochhar')));
SELECT *
FROM bd_employees
WHERE LENGTH(REGEXP_REPLACE(first_name, '[^aeiouAEIOU]', '', 'g')) <= 3;
WITH tmp AS (
SELECT chr(i+96), i FROM generate_series(1,26) i)
SELECT e.last_name sum(t.i) AS name_sum
FROM db_employees e
JOIN tmp t ON t.chr = ANY(string_to_array(LOWER(e.last_name), NULL))
GROUP BY e.last_name;
+47
View File
@@ -0,0 +1,47 @@
DROP TABLE IF EXISTS bd6_departments;
DROP TABLE IF EXISTS bd6_employees;
CREATE TABLE bd6_departments(
id integer PRIMARY KEY,
name varchar(64),
postal_code varchar(6),
street varchar(64),
building varchar(16),
city varchar(32)
);
INSERT INTO bd6_departments
VALUES(10, 'Administration', '109658', 'Leningradskoe shosse', '1', 'Moscow'),
(20, 'Marketing', '107701', 'Lenina', '22a', 'Volgograd'),
(30, 'Purchasing', '109901', 'Mikluho-Maklaya', '8', 'Bryansk'),
(40, 'Human Resources', '10967', '5-ya parkovaya', '16', 'Moscow'),
(50, 'Shipping', '109659', '38 Bakinskih komissarov', '77', 'Moscow'),
(60, 'IT', '109902', 'Pervomajskaya', '33', 'Kirov');
CREATE TABLE bd6_employees(
id integer PRIMARY KEY,
last_name varchar(64) NOT NULL,
first_name varchar(64) NOT NULL,
phone_number varchar(18),
email varchar(32),
department_id integer NOT NULL,
manager_id integer,
salary_in_euro numeric(8, 2) DEFAULT 0 NOT NULL,
UNIQUE(last_name, first_name, department_id)
);
INSERT INTO bd6_employees VALUES(1, 'Radygin', 'Victor', '8-(495)-567-7788', 'vr@e.mail.mephi.ru', 10, NULL, 8000),
(2, 'Kuprijanov', 'Dmitrij', '8-(495)-567-7794', 'kd@e.mail.mephi.ru', 60, 1, 6534.33),
(3, 'Ivanov-Skladovskij', 'Ivan', '8-(495)-567-7799', 'ii1@mail.mephi.ru', 20, 1, 4404.14),
(4, 'Petrov', 'Petr', '8-(495)-567-7794', 'petrovpetr@m.gmail.ru', 60, 2, 3456.43),
(5, 'kozlov', 'Konstantin', '8-(495)-567-7794', 'kkozlov@mephi.ru', 60, 2, 2300),
(6, 'Abramov', 'Abram', '8-(495)-567-7794', 'abramova@k75.mephi.ru', 60, 2, 2200.11),
(7, 'IvanovпїЅ-SkladovskпїЅya-Petrova', 'Ivanka', '8-(495)-567-7794', 'ii2@mail.mephi.ru', 60, 4, 3756.33),
(8, 'Petrov', 'Ivan', '8-(495)-567-7799', 'petrovivan@m.gmail.ru', 20, 3, 4850),
(9, 'kozlov', 'Ivan', '8-(495)-567-7799', 'ikozlov@mephi.ru', 20, 3, 3460),
(10, 'Abramov', 'Moisej', '8-(495)-567-7794', 'abramovm@k75.mephi.ru', 60, 4, 2345),
(11, 'Petrov', 'Alex', '8-(495)-567-7799', 'petroval@m.gmail.ru', 20, 3, 2465),
(12, 'kozlov', 'Maxim', '8-(495)-567-7799', 'mkozlov@mephi.ru', 20, 3, 2788),
(13, 'Abramov', 'Isyaslav', '8-(495)-567-7738', 'abramovi@k75.mephi.ru', 30, 1, 6500);
+163
View File
@@ -0,0 +1,163 @@
DROP TABLE IF EXISTS bd6_employees;
CREATE TABLE bd6_departments(
id integer PRIMARY KEY,
name varchar(64),
postal_code varchar(6),
street varchar(64),
building varchar(16),
city varchar(32)
);
CREATE TABLE
bd6_employees (
id integer PRIMARY KEY,
last_name varchar(64) NOT NULL,
first_name varchar(64) NOT NULL,
phone_number varchar(18),
email varchar(32),
department_id integer REFERENCES bd6_departments (id) NOT NULL,
manager_id integer REFERENCES bd6_employees (id),
salary_in_euro numeric(8, 2) DEFAULT 0 NOT NULL,
UNIQUE (last_name, first_name, department_id)
);
INSERT INTO bd6_departments
VALUES(10, 'Administration', '109658', 'Leningradskoe shosse', '1', 'Moscow'),
(20, 'Marketing', '107701', 'Lenina', '22a', 'Volgograd'),
(30, 'Purchasing', '109901', 'Mikluho-Maklaya', '8', 'Bryansk'),
(40, 'Human Resources', '10967', '5-ya parkovaya', '16', 'Moscow'),
(50, 'Shipping', '109659', '38 Bakinskih komissarov', '77', 'Moscow'),
(60, 'IT', '109902', 'Pervomajskaya', '33', 'Kirov');
INSERT INTO
bd6_employees
VALUES
(
1,
'Radygin',
'Victor',
'8-(495)-567-7788',
'vr@e.mail.mephi.ru',
10,
NULL,
8000
),
(
2,
'Kuprijanov',
'Dmitrij',
'8-(495)-567-7794',
'kd@e.mail.mephi.ru',
60,
1,
6534.33
),
(
3,
'Ivanov-Skladovskij',
'Ivan',
'8-(495)-567-7799',
'ii1@mail.mephi.ru',
20,
1,
4404.14
),
(
4,
'Petrov',
'Petr',
'8-(495)-567-7794',
'petrovpetr@m.gmail.ru',
60,
2,
3456.43
),
(
5,
'kozlov',
'Konstantin',
'8-(495)-567-7794',
'kkozlov@mephi.ru',
60,
2,
2300
),
(
6,
'Abramov',
'Abram',
'8-(495)-567-7794',
'abramova@k75.mephi.ru',
60,
2,
2200.11
),
(
7,
'IvanovпїЅ-SkladovskпїЅya-Petrova',
'Ivanka',
'8-(495)-567-7794',
'ii2@mail.mephi.ru',
60,
4,
3756.33
),
(
8,
'Petrov',
'Ivan',
'8-(495)-567-7799',
'petrovivan@m.gmail.ru',
20,
3,
4850
),
(
9,
'kozlov',
'Ivan',
'8-(495)-567-7799',
'ikozlov@mephi.ru',
20,
3,
3460
),
(
10,
'Abramov',
'Moisej',
'8-(495)-567-7794',
'abramovm@k75.mephi.ru',
60,
4,
2345
),
(
11,
'Petrov',
'Alex',
'8-(495)-567-7799',
'petroval@m.gmail.ru',
20,
3,
2465
),
(
12,
'kozlov',
'Maxim',
'8-(495)-567-7799',
'mkozlov@mephi.ru',
20,
3,
2788
),
(
13,
'Abramov',
'Isyaslav',
'8-(495)-567-7738',
'abramovi@k75.mephi.ru',
30,
1,
6500
);
+49
View File
@@ -0,0 +1,49 @@
CREATE OR REPLACE PROCEDURE update_salary() AS $$
DECLARE
emp_record bd6_employees%ROWTYPE;
counter integer := 0;
min_salary bd6_employees.salary_in_euro%TYPE;
max_salary bd6_employees.salary_in_euro%TYPE;
BEGIN
-- SELECT MIN(salary_in_euro), MAX(salary_in_euro) INTO min_salary, max_salary FROM bd6_employees;
FOR emp_record IN
SELECT * FROM (SELECT * FROM bd6_employees ORDER BY salary_in_euro LIMIT 3) AS min_salaries
LOOP
DELETE FROM bd6_employees WHERE id = emp_record.id;
counter := counter + 1;
END LOOP;
FOR emp_record IN
SELECT * FROM (SELECT * FROM bd6_employees ORDER BY salary_in_euro DESC LIMIT 3) AS max_salaries
LOOP
UPDATE bd6_employees SET salary_in_euro = salary_in_euro + min_salary WHERE id = emp_record.id;
counter := counter + 1;
END LOOP;
RAISE NOTICE 'Successfully updated % bd6_employees.', counter;
END $$ LANGUAGE plpgsql;
CALL update_salary();
CREATE OR REPLACE PROCEDURE update_and_delete_salaries() AS $$
BEGIN
-- Увеличение заработной платы
WITH lowest_salaries AS (
SELECT id, salary_in_euro
FROM bd6_employees
ORDER BY salary_in_euro
LIMIT 10
), highest_salary AS (
SELECT max(salary_in_euro) AS max_salary
FROM bd6_employees
)
UPDATE bd6_employees e
SET salary_in_euro = e.salary_in_euro + ls.salary_in_euro - (SELECT max_salary FROM highest_salary)
FROM lowest_salaries ls
WHERE e.id = ls.id;
-- Удаление сотрудников
DELETE FROM bd6_employees WHERE id IN (SELECT id FROM lowest_salaries);
RAISE NOTICE 'Salaries updated and lowest paid bd6_employees deleted.';
END;
$$ LANGUAGE plpgsql;
+450
View File
@@ -0,0 +1,450 @@
/* Вариант 1 || Работа 6 || Антипенко, Дробышевский */
-- Task 1 --
/* a) Напишите запрос, используя конструкцию WITH, выбирающий
рекурсивно сотрудника с идентификатором 1 и все его подчинённых,
как прямых, так и подчинённых более низкого ранга*.
b) Напишите программу на языке PL/SQL, печатающую на экран фамилию
и имя сотрудника с идентификатором 1 и всех его подчинённых, как
прямых, так и подчинённых более низкого ранга. */
-- Пункт а)
WITH RECURSIVE tmp AS (
SELECT id, first_name, last_name, manager_id, 1 AS level
FROM bd6_employees
WHERE id = 1
UNION all
SELECT e.id, e.first_name, e.last_name, e.manager_id, t.level + 1
FROM bd6_employees e
JOIN tmp t ON e.manager_id = t.id
)
SELECT *
FROM tmp
;
-- Пункт б)
CREATE OR REPLACE PROCEDURE depa(integer) AS $$
DECLARE
d_attrs RECORD;
i integer;
l integer;
BEGIN
FOR d_attrs IN
(
SELECT id,last_name, first_name, manager_id
FROM bd6_employees
ORDER BY manager_id
)
LOOP
IF d_attrs.manager_id=$1 THEN
RAISE INFO ' % % % % ', d_attrs.first_name, d_attrs.last_name, d_attrs.id, d_attrs.manager_id;
l:= d_attrs.id;
CALL depa(l);
END IF;
END LOOP;
END $$ LANGUAGE plpgsql;
CREATE OR REPLACE PROCEDURE dep(integer) AS $$
DECLARE
d_attrs RECORD;
BEGIN
FOR d_attrs IN
(
SELECT
id,
last_name,
first_name,
manager_id
FROM bd6_employees
ORDER BY manager_id
)
LOOP
IF d_attrs.id=$1 THEN
RAISE INFO ' % % % % ', d_attrs.first_name, d_attrs.last_name, d_attrs.id, d_attrs.manager_id;
END IF;
END LOOP;
CALL depa($1);
END $$ LANGUAGE plpgsql;
CALL dep(1);
-- Task 2 --
/* Напишите программу на языке PL/SQL, выбирающую строки из таблицы
employees в порядке возрастания заработной платы (salary) и печатающие на
экран следующие данные: фамилия, имя, модифицированная заработная
плата. Модифицированная заработная плата получается следующим
образом: у первого по порядку сотрудника она округляется до сотен в
меньшую сторону, а у всех последующих сотрудников она сначала
увеличивается на остаток от округления, полученный от предыдущего
сотрудника, а затем округляется до сотен в меньшую сторону. */
UPDATE bd6_employees SET salary_in_euro = 299 WHERE id = 3;
CREATE OR REPLACE PROCEDURE print_employees() AS $$
DECLARE
current_salary INTEGER;
m_salary INTEGER;
mod_salary INTEGER := 0;
employee_rec RECORD;
BEGIN
FOR employee_rec IN
(
SELECT last_name, first_name, salary_in_euro
FROM bd6_employees
ORDER BY salary_in_euro
)
LOOP
current_salary := employee_rec.salary_in_euro;
m_salary := ((current_salary + mod_salary) / 100) * 100;
RAISE NOTICE 'Employee: % % || Modified Salary: %', employee_rec.last_name, employee_rec.first_name, m_salary;
mod_salary := mod(current_salary + mod_salary,100);
END LOOP;
END $$ LANGUAGE plpgsql;
CALL print_employees();
SELECT *
FROM bd6_employees
ORDER BY salary_in_euro;
-- Task 3 --
/* Напишите программу на языке PL/SQL, удаляющую 10 сотрудников с
самой маленькой заработной платой. При этом их заработная плата должна
добавиться 10 сотрудникам с самой большой заработной платой. Причём
самая маленькая заработная плата должна добавиться к человеку с самой
большой заработной платой. 2-я с конца заработная плата должна добавиться
к человеку со второй по размеру заработной платой и т.д. */
CREATE OR REPLACE FUNCTION rearrange_salaries() RETURNS VOID AS $$
DECLARE
salaries RECORD;
small NUMERIC[];
larg NUMERIC[];
const CONSTANT INTEGER = 3;
BEGIN
FOR salaries IN
SELECT id, salary_in_euro
FROM bd6_employees
ORDER BY salary_in_euro
LIMIT const
LOOP
small = array_append(small, (SELECT salary_in_euro FROM bd6_employees WHERE id = salaries.id));
DELETE FROM bd6_employees
WHERE id = salaries.id;
END LOOP;
FOR salaries IN
SELECT id, salary_in_euro
FROM bd6_employees
ORDER BY salary_in_euro DESC
LIMIT const
LOOP
larg = array_append(larg, (SELECT id FROM bd6_employees WHERE id = salaries.id));
END LOOP;
FOR i IN 1..const
LOOP
UPDATE bd6_employees
SET salary_in_euro = salary_in_euro + small[i]
WHERE id = larg[i];
END LOOP;
END;
$$ LANGUAGE plpgsql;
SELECT rearrange_salaries();
-- Task 4 --
/* Создайте таблицу spiral с 5 полями f1, f2, f3, f4, f5 целые числа.
Напишите программу на языке PL/SQL, заполняющую данную таблицу 1000
строк по следующему принципу:
1 2 3 4 5
10 9 8 7 6
11 12 13 14 15
20 19 18 17 16
21 22 23 24 25 */
CREATE OR REPLACE PROCEDURE f() AS $$
DECLARE d_attrs RECORD;
BEGIN
FOR d_attrs IN WITH RECURSIVE tmp AS (
SELECT 1+i*5 AS f1, 2+i*5 AS f2, 3+i*5 AS f3, 4+i*5 AS f4,5+i*5 AS f5
FROM generate_series(0,199) i)
SELECT * FROM tmp
LOOP
case
when ( mod(d_attrs.f1,2)!=0)
then RAISE INFO ' % % % % %', d_attrs.f1, d_attrs.f2, d_attrs.f3, d_attrs.f4, d_attrs.f5;
when ( mod(d_attrs.f1,2)=0)
then RAISE INFO ' % % % % %', d_attrs.f5, d_attrs.f4, d_attrs.f3, d_attrs.f2, d_attrs.f1;
end case;
END LOOP;
END $$ LANGUAGE plpgsql;
call f();
-- Task 7 from lab4 --
CREATE table staff(
id integer primary key,
name varchar(64) NOT NULL,
department varchar(64) NOT NULL
);
CREATE SEQUENCE staff_id_seq
START WITH 12
CYCLE
INCREMENT BY 8
CACHE 100;
INSERT INTO staff VALUES
(nextval('staff_id_seq'), 'Ivan Makarenko', 'Director');
INSERT INTO staff
(SELECT nextval('staff_id_seq'), last_name, department_name
FROM employees e JOIN departments d ON e.department_id = d.department_id);
UPDATE staff SET department = 'Innovations department'
WHERE id < 40;
DELETE FROM staff
WHERE name ILIKE('%K%');
CREATE VIEW dep_staff_counts AS
SELECT department, COUNT(*) AS ecount
FROM staff
GROUP BY department;
SELECT * FROM dep_staff_counts;
-- CREATE OR REPLACE PROCEDURE department_names(integer) AS $$
-- DECLARE
-- d_attrs RECORD;
-- i INTEGER;
-- l INTEGER;
-- BEGIN
-- FOR d_attrs IN
-- (
-- SELECT id,last_name, first_name, manager_id
-- FROM bd6_employees order by manager_id
-- )
-- LOOP
-- IF d_attrs.manager_id=$1 THEN
-- RAISE INFO ' % % % % ', d_attrs.first_name, d_attrs.last_name, d_attrs.id, d_attrs.manager_id;
-- l:= d_attrs.id;
-- CALL department_names(l);
-- END IF;
-- END LOOP;
-- END $$ LANGUAGE plpgsql;
-- CREATE OR REPLACE PROCEDURE department_names2(integer) AS $$
-- DECLARE d_attrs RECORD;
-- BEGIN
-- FOR d_attrs IN
-- (
-- SELECT id,last_name, first_name, manager_id
-- FROM bd6_employees
-- order by manager_id
-- )
-- LOOP
-- if d_attrs.id=$1 then
-- RAISE INFO ' % % % % ', d_attrs.first_name, d_attrs.last_name, d_attrs.id, d_attrs.manager_id;
-- end if;
-- END LOOP;
-- CALL department_names($1);
-- END $$ LANGUAGE plpgsql;
-- CALL department_names2(4);
/* Вариант 1 || Работа 6 || Антипенко, Дробышевский */
-- Task 1 --
-- Пункт а)
WITH RECURSIVE tmp AS (
SELECT id, first_name, last_name, manager_id, 1 AS level
FROM bd6_employees
WHERE id = 1
UNION all
SELECT e.id, e.first_name, e.last_name, e.manager_id, t.level + 1
FROM bd6_employees e
JOIN tmp t ON e.manager_id = t.id
)
SELECT *
FROM tmp
;
-- Пункт б)
CREATE OR REPLACE PROCEDURE depa(integer) AS $$
DECLARE
d_attrs RECORD;
i integer;
l integer;
BEGIN
FOR d_attrs IN
(
SELECT id,last_name, first_name, manager_id
FROM bd6_employees
ORDER BY manager_id
)
LOOP
IF d_attrs.manager_id=$1 THEN
RAISE INFO ' % % % % ', d_attrs.first_name, d_attrs.last_name, d_attrs.id, d_attrs.manager_id;
l:= d_attrs.id;
CALL depa(l);
END IF;
END LOOP;
END $$ LANGUAGE plpgsql;
CREATE OR REPLACE PROCEDURE dep(integer) AS $$
DECLARE
d_attrs RECORD;
BEGIN
FOR d_attrs IN
(
SELECT
id,
last_name,
first_name,
manager_id
FROM bd6_employees
ORDER BY manager_id
)
LOOP
IF d_attrs.id=$1 THEN
RAISE INFO ' % % % % ', d_attrs.first_name, d_attrs.last_name, d_attrs.id, d_attrs.manager_id;
END IF;
END LOOP;
CALL depa($1);
END $$ LANGUAGE plpgsql;
CALL dep(1);
-- Task 2 --
UPDATE bd6_employees SET salary_in_euro = 299 WHERE id = 3;
CREATE OR REPLACE PROCEDURE print_employees() AS $$
DECLARE
current_salary INTEGER;
m_salary INTEGER;
mod_salary INTEGER := 0;
employee_rec RECORD;
i INTEGER = 0;
cnt INTEGER;
BEGIN
SELECT COUNT(*) INTO cnt FROM bd6_employees;
FOR employee_rec IN
(
SELECT last_name, first_name, salary_in_euro
FROM bd6_employees
ORDER BY salary_in_euro
)
LOOP
current_salary := employee_rec.salary_in_euro;
IF cnt - 1 = i THEN
m_salary := ((current_salary) / 100) * 100 + mod_salary;
ELSE
m_salary := ((current_salary) / 100) * 100;
END IF;
RAISE NOTICE 'Employee: % % || Modified Salary: %', employee_rec.last_name, employee_rec.first_name, m_salary;
mod_salary := mod_salary + mod(current_salary, 100);
i := i+1;
END LOOP;
END $$ LANGUAGE plpgsql;
CALL print_employees();
SELECT *
FROM bd6_employees
ORDER BY salary_in_euro;
-- Task 3 --
CREATE OR REPLACE FUNCTION rearrange_salaries() RETURNS VOID AS $$
DECLARE
salaries RECORD;
small NUMERIC[];
larg NUMERIC[];
const CONSTANT INTEGER = 10;
BEGIN
FOR salaries IN
SELECT id, salary_in_euro
FROM bd6_employees
ORDER BY salary_in_euro
LIMIT const
LOOP
small = array_append(small, (SELECT salary_in_euro FROM bd6_employees WHERE id = salaries.id));
UPDATE bd6_employees SET manager_id = NULL WHERE manager_id = salaries.id;
DELETE FROM bd6_employees
WHERE id = salaries.id;
END LOOP;
FOR salaries IN
SELECT id, salary_in_euro
FROM bd6_employees
ORDER BY salary_in_euro DESC
LIMIT const
LOOP
larg = array_append(larg, (SELECT id FROM bd6_employees WHERE id = salaries.id));
END LOOP;
FOR i IN 1..const
LOOP
UPDATE bd6_employees
SET salary_in_euro = salary_in_euro + small[i]
WHERE id = larg[i];
END LOOP;
END;
$$ LANGUAGE plpgsql;
SELECT rearrange_salaries();
-- Task 4 --
CREATE OR REPLACE PROCEDURE f() AS $$
DECLARE d_attrs RECORD;
BEGIN
FOR d_attrs IN WITH RECURSIVE tmp AS (
SELECT 1+i*5 AS f1, 2+i*5 AS f2, 3+i*5 AS f3, 4+i*5 AS f4,5+i*5 AS f5
FROM generate_series(0,199) i)
SELECT * FROM tmp
LOOP
case
when ( mod(d_attrs.f1,2)!=0)
then RAISE INFO ' % % % % %', d_attrs.f1, d_attrs.f2, d_attrs.f3, d_attrs.f4, d_attrs.f5;
when ( mod(d_attrs.f1,2)=0)
then RAISE INFO ' % % % % %', d_attrs.f5, d_attrs.f4, d_attrs.f3, d_attrs.f2, d_attrs.f1;
end case;
END LOOP;
END $$ LANGUAGE plpgsql;
call f();
-- Task 7 from lab4 --
DROP VIEW IF EXISTS dep_staff_counts;
CREATE VIEW dep_staff_counts AS
SELECT department, COUNT(*) AS ecount
FROM staff
GROUP BY department;
SELECT * FROM dep_staff_counts;
+72
View File
@@ -0,0 +1,72 @@
CREATE OR REPLACE FUNCTION rearrange_salaries() RETURNS VOID AS $$
DECLARE
salaries RECORD;
small NUMERIC[];
larg NUMERIC[];
const CONSTANT INTEGER = 10;
BEGIN
FOR salaries IN
SELECT id, salary_in_euro
FROM bd6_employees
ORDER BY salary_in_euro
LIMIT const
LOOP
small = array_append(small, (SELECT salary_in_euro FROM bd6_employees WHERE id = salaries.id));
DELETE FROM bd6_employees
WHERE id = salaries.id;
END LOOP;
FOR salaries IN
SELECT id, salary_in_euro
FROM bd6_employees
ORDER BY salary_in_euro DESC
LIMIT const
LOOP
larg = array_append(larg, (SELECT id FROM bd6_employees WHERE id = salaries.id));
END LOOP;
FOR i IN 1..const
LOOP
UPDATE bd6_employees
SET salary_in_euro = salary_in_euro + small[i]
WHERE id = larg[i];
END LOOP;
END;
$$ LANGUAGE plpgsql;
SELECT rearrange_salaries();
CREATE OR REPLACE FUNCTION update_salaries() RETURNS VOID AS $$
DECLARE
max_salary_employee_id INTEGER;
min_salaries numeric[];
max_salaries numeric[];
i INTEGER;
const CONSTANT INTEGER = 10;
BEGIN
-- Получаем заработные платы последних 10 человек с самой маленькой заработной платой
SELECT array_agg(id) FROM bd6_employees
ORDER BY salary_in_euro ASC
LIMIT const INTO min_salaries;
-- Получаем заработные платы 10 первых человек с самой большой заработной платой
SELECT array_agg(id) FROM bd6_employees
ORDER BY salary_in_euro DESC
LIMIT const INTO max_salaries;
-- Добавляем заработные платы
FOR i IN 1..const LOOP
UPDATE bd6_employees
SET salary_in_euro = salary_in_euro + min_salaries[i]
WHERE id = max_salaries[i];
END LOOP;
-- Удаляем 10 человек с наименьшей заработной платой
DELETE FROM bd6_employees
WHERE id IN (SELECT unnest(min_salaries));
RAISE NOTICE 'Заработные платы обновлены и % человек удалены', const;
END;
$$ LANGUAGE plpgsql;
+104
View File
@@ -0,0 +1,104 @@
-- Task 1 --
CREATE OR REPLACE PROCEDURE molodec() AS $$
DECLARE
name1 varchar := 'Julia';
name2 varchar := 'Пустотааа';
BEGIN
RAISE INFO ' %, %, вы молодцы! ', name1, name2;
END $$ LANGUAGE plpgsql;
CALL molodec();
-- Task 2 --
CREATE OR REPLACE PROCEDURE fiiiizika() AS $$
DECLARE
velocity_kmh NUMERIC := 60;
time_seconds NUMERIC := 30;
velocity_ms NUMERIC;
distance_m NUMERIC;
train_length_m NUMERIC;
BEGIN
velocity_ms := velocity_kmh * 1000 / 3600;
distance_m := velocity_ms * time_seconds;
train_length_m := distance_m;
RAISE INFO ' % ', TRUNC(train_length_m);
END;
$$ LANGUAGE plpgsql;
CALL fiiiizika();
-- Task 3 --
CREATE OR REPLACE PROCEDURE show_city_streets() AS $$
DECLARE
city_record RECORD;
BEGIN
FOR city_record IN SELECT city, street_address FROM locations
LOOP
RAISE NOTICE 'В городе % есть улица %',
city_record.city, city_record.street_address;
END LOOP;
END;
$$ LANGUAGE plpgsql;
CALL show_city_streets();
-- Task 4 --
CREATE OR REPLACE PROCEDURE factorial(n INTEGER) AS $$
DECLARE
result INTEGER := 1;
i INTEGER := 1;
BEGIN
WHILE i <= n LOOP
result := result * i;
i := i + 1;
END LOOP;
RAISE INFO ' % ', result;
END;
$$ LANGUAGE plpgsql;
CALL factorial(10);
-- Task 5 --
CREATE OR REPLACE FUNCTION get_employees_and_managers_names()
RETURNS TABLE (employee_name TEXT, manager_name TEXT) AS $$
BEGIN
RETURN QUERY
SELECT e.first_name || ' ' || e.last_name AS employee_name,
COALESCE(m.first_name || ' ' || m.last_name, 'No manager') AS manager_name
FROM employees e
LEFT JOIN employees m ON e.manager_id = m.employee_id;
END;
$$ LANGUAGE plpgsql;
SELECT get_employees_and_managers_names();
-- Task 6 --
CREATE OR REPLACE FUNCTION binary_to_decimal(binary_num VARCHAR)
RETURNS NUMERIC AS $$
DECLARE
decimal_num NUMERIC := 0;
power NUMERIC := 0;
bit NUMERIC;
BEGIN
FOR i IN REVERSE 1..LENGTH(binary_num) LOOP
bit := CAST(SUBSTRING(binary_num FROM i FOR 1) AS NUMERIC);
decimal_num := decimal_num + (bit * (2 ^ power));
power := power + 1;
END LOOP;
RETURN decimal_num;
END;
$$ LANGUAGE plpgsql;
SELECT binary_to_decimal('101');
View File
+1
View File
@@ -0,0 +1 @@
SELECT name FROM departments
+32
View File
@@ -0,0 +1,32 @@
DROP TABLE IF EXISTS professors;
CREATE table professors(
id integer PRIMARY KEY,
first_name varchar(20) NOT NULL,
last_name varchar(20) NOT NULL,
sec_name varchar(20),
salary integer CHECK(salary <= 900000) NOT NULL,
subj varchar(20) default 'Общая практика',
work_exp integer CHECK(work_exp >= 0),
dep varchar(2)
);
INSERT into professors VALUES
(1, 'Rob', 'Ivanov', 'Ivanovich', 34000, default, 3, '75'),
(2, 'Vasiliy', 'Vasilyev', 'Vasilyevich', 874000, 'TMP', 12, 42),
(3, 'Сергей', 'Егоров', 'Артемьевич', 37879, default, 2, 33),
(4, 'Егор', 'Медведев', 'Кириллович', 34000, default, 3, '75'),
(5, 'Андрей', 'Смирнов', ' Александрович', 554000, 'TMP', 6, 72),
(6, 'Андрей', 'Егоров', 'Артемьевич', 37879, default, 2, 83),
(7, 'Rob', 'Ivanov', 'Ivanovich', 34000, default, 6, '75'),
(8, 'Vasiliy', 'Vasilyev', 'Vasilyevich', 874000, 'TMP', 12, 49),
(9, 'Петр', 'Сергеев', 'Артемьевич', 349583, default, 3, 43),
(10, 'Егор', 'Вакутагин', 'Артемьевич', 35669, default, 2, 33);
/*SELECT last_name, first_name FROM professors;*/
SELECT first_name, last_name AS last_name, first_name FROM professors;
DROP table professors;
SELECT * FROM professors;
+30
View File
@@ -0,0 +1,30 @@
CREATE table students(
id integer primary key,
f_name varchar(20) NOT NULL,
l_name varchar(20) NOT NULL,
age integer CHECK(age >= 18) NOT NULL,
grp char(7) NOT NULL,
code_spec char(8)
);
INSERT into students VALUES
(1, 'Vasya', 'Pupkin', 20, 'C21-712', '10.05.04'),
(2, 'Vasya', 'Pupkin', 20, 'C21-712', '10.05.04'),
(3, 'Ivan', 'Ivanov', 30, 'A12-456', '15.06.11'),
(4, 'Sasha', 'Smirnova', 19, 'C12-987', '11.07.08'),
(5, 'Natasha', 'Nikitina', 28, 'D21-654', '03.03.10'),
(6, 'Nikita', 'Orlov', 23, 'E11-345', '19.08.05'),
(7, 'Olga', 'Petrova', 22, 'F22-876', '22.05.12'),
(8, 'Elena', 'Efimova', 33, 'G11-234', '13.09.01');
/*SELECT f_name AS l_name, l_name AS f_name, age AS grp, grp AS age,code_spec
FROM students;*/
ALTER TABLE students ADD gender char(1);
ALTER TABLE students ADD CONSTRAINT gender SET UNIQUE;
INSERT into students VALUES
(1, 'Vasya', 'Pupkin', 20, 'C21-712', '10.05.04', 'm');
SELECT * FROM students;
+307
View File
@@ -0,0 +1,307 @@
SET DateStyle TO German;
DROP TABLE IF EXISTS JOB_HISTORY;
DROP TABLE IF EXISTS DEPARTMENTS CASCADE;
DROP TABLE IF EXISTS EMPLOYEES;
DROP TABLE IF EXISTS JOBS;
DROP TABLE IF EXISTS LOCATIONS;
DROP TABLE IF EXISTS COUNTRIES;
DROP TABLE IF EXISTS REGIONS;
CREATE TABLE REGIONS
(
region_id integer PRIMARY KEY,
region_name varchar(64) NOT NULL UNIQUE
);
INSERT INTO regions
VALUES(1, 'Europe '),
(2, 'Americas '),
(3, 'Asia '),
(4, 'Middle East and Africa ');
-- DELETE FROM COUNTRIES;
CREATE TABLE COUNTRIES
(
country_id varchar(2) PRIMARY KEY,
country_name varchar(64) NOT NULL UNIQUE,
region_id integer REFERENCES REGIONS(region_id) NOT NULL
);
INSERT INTO COUNTRIES VALUES
('AR', 'Argentina', 2),
('AU', 'Australia', 3),
('BE', 'Belgium', 1),
('BR', 'Brazil', 2),
('CA', 'Canada', 2),
('CH', 'Switzerland', 1),
('CN', 'China', 3),
('DE', 'Germany', 1),
('DK', 'Denmark', 1),
('EG', 'Egypt', 4),
('FR', 'France', 1),
('IL', 'Israel', 4),
('IN', 'India', 3),
('IT', 'Italy', 1),
('JP', 'Japan', 3),
('KW', 'Kuwait', 4),
('ML', 'Malaysia', 3),
('MX', 'Mexico', 2),
('NG', 'Nigeria', 4),
('NL', 'Netherlands', 1),
('SG', 'Singapore', 3),
('UK', 'United Kingdom', 1),
('US', 'United States of America', 2),
('ZM', 'Zambia', 4),
('ZW', 'Zimbabwe', 4);
-- DELETE FROM LOCATIONS;
CREATE TABLE LOCATIONS
(
location_id integer PRIMARY KEY,
street_address varchar(64) NOT NULL,
postal_code varchar(16),
city varchar(64),
state_province varchar(64),
country_id varchar(2) REFERENCES COUNTRIES(country_id) NOT NULL
);
INSERT INTO LOCATIONS VALUES
(1000, '1297 Via Cola di Rie', '989', 'Roma', '', 'IT'),
(1100, '93091 Calle della Testa', '10934', 'Venice', '', 'IT'),
(1200, '2017 Shinjuku-ku', '1689', 'Tokyo', 'Tokyo Prefecture', 'JP'),
(1300, '9450 Kamiya-cho', '6823', 'Hiroshima', '', 'JP'),
(1400, '2014 Jabberwocky Rd', '26192', 'Southlake', 'Texas', 'US'),
(1500, '2011 Interiors Blvd', '99236', 'South San Francisco', 'California', 'US'),
(1600, '2007 Zagora St', '50090', 'South Brunswick', 'New Jersey', 'US'),
(1700, '2004 Charade Rd', '98199', 'Seattle', 'Washington', 'US'),
(1800, '147 Spadina Ave', 'M5V 2L7', 'Toronto', 'Ontario', 'CA'),
(1900, '6092 Boxwood St', 'YSW 9T2', 'Whitehorse', 'Yukon', 'CA'),
(2000, '40-5-12 Laogianggen', '190518', 'Beijing', '', 'CN'),
(2100, '1298 Vileparle (E)', '490231', 'Bombay', 'Maharashtra', 'IN'),
(2200, '12-98 Victoria Street', '2901', 'Sydney', 'New South Wales', 'AU'),
(2300, '198 Clementi North', '540198', 'Singapore', '', 'SG'),
(2400, '8204 Arthur St', '', 'London', '', 'UK'),
(2500, 'Magdalen Centre, The Oxford Science Park', 'OX9 9ZB', 'Oxford', 'Oxford', 'UK'),
(2600, '9702 Chester Road', '9629850293', 'Stretford', 'Manchester', 'UK'),
(2700, 'Schwanthalerstr. 7031', '80925', 'Munich', 'Bavaria', 'DE'),
(2800, 'Rua Frei Caneca 1360 ', '01307-002', 'Sao Paulo', 'Sao Paulo', 'BR'),
(2900, '20 Rue des Corps-Saints', '1730', 'Geneva', 'Geneve', 'CH'),
(3000, 'Murtenstrasse 921', '3095', 'Bern', 'BE', 'CH'),
(3100, 'Pieter Breughelstraat 837', '3029SK', 'Utrecht', 'Utrecht', 'NL');
-- DELETE FROM JOBS;
CREATE TABLE JOBS(
job_id varchar(16) PRIMARY KEY,
job_title varchar(64) NOT NULL UNIQUE,
min_salary numeric(8, 2) NOT NULL,
max_salary numeric(8, 2) NOT NULL
);
INSERT INTO jobs VALUES
('AD_PRES', 'President', 20080, 40000),
('AD_VP', 'Administration Vice President', 15000, 30000),
('AD_ASST', 'Administration Assistant', 3000, 6000),
('FI_MGR', 'Finance Manager', 8200, 16000),
('FI_ACCOUNT', 'Accountant', 4200, 9000),
('AC_MGR', 'Accounting Manager', 8200, 16000),
('AC_ACCOUNT', 'Public Accountant', 4200, 9000),
('SA_MAN', 'Sales Manager', 10000, 20080),
('SA_REP', 'Sales Representative', 6000, 12008),
('PU_MAN', 'Purchasing Manager', 8000, 15000),
('PU_CLERK', 'Purchasing Clerk', 2500, 5500),
('ST_MAN', 'Stock Manager', 5500, 8500),
('ST_CLERK', 'Stock Clerk', 2008, 5000),
('SH_CLERK', 'Shipping Clerk', 2500, 5500),
('IT_PROG', 'Programmer', 4000, 10000),
('MK_MAN', 'Marketing Manager', 9000, 15000),
('MK_REP', 'Marketing Representative', 4000, 9000),
('HR_REP', 'Human Resources Representative', 4000, 9000),
('PR_REP', 'Public Relations Representative', 4500, 10500);
-- DELETE FROM DEPARTMENTS;
CREATE TABLE EMPLOYEES
(
employee_id integer PRIMARY KEY,
first_name varchar(64) NOT NULL,
last_name varchar(64) NOT NULL,
email varchar(64) NOT NULL UNIQUE,
phone_integer varchar(64) NOT NULL,
hire_date timestamp NOT NULL,
job_id varchar(16) REFERENCES JOBS(job_id),
salary numeric(8, 2) NOT NULL,
commission_pct numeric(5, 2),
manager_id integer REFERENCES EMPLOYEES(employee_id),
department_id integer
);
-- DELETE FROM EMPLOYEES;
INSERT INTO employees VALUES(100, 'Steven', 'King', 'SKING', '515.123.4567', '17.06.2003', 'AD_PRES', 24000, NULL, NULL, 90);
INSERT INTO employees VALUES(101, 'Neena', 'Kochhar', 'NKOCHHAR', '515.123.4568', '21.09.2005', 'AD_VP', 17000, NULL, 100, 90);
INSERT INTO employees VALUES(102, 'Lex', 'De Haan', 'LDEHAAN', '515.123.4569', '13.01.2001', 'AD_VP', 17000, NULL, 100, 90);
INSERT INTO employees VALUES(103, 'Alexander', 'Hunold', 'AHUNOLD', '590.423.4567', '03.01.2006', 'IT_PROG', 9000, NULL, 102, 60);
INSERT INTO employees VALUES(104, 'Bruce', 'Ernst', 'BERNST', '590.423.4568', '21.05.2007', 'IT_PROG', 6000, NULL, 103, 60);
INSERT INTO employees VALUES(105, 'David', 'Austin', 'DAUSTIN', '590.423.4569', '25.06.2005', 'IT_PROG', 4800, NULL, 103, 60);
INSERT INTO employees VALUES(106, 'Valli', 'Pataballa', 'VPATABAL', '590.423.4560', '05.02.2006', 'IT_PROG', 4800, NULL, 103, 60);
INSERT INTO employees VALUES(107, 'Diana', 'Lorentz', 'DLORENTZ', '590.423.5567', '07.02.2007', 'IT_PROG', 4200, NULL, 103, 60);
INSERT INTO employees VALUES(108, 'Nancy', 'Greenberg', 'NGREENBE', '515.124.4569', '17.08.2002', 'FI_MGR', 12008, NULL, 101, 100);
INSERT INTO employees VALUES(109, 'Daniel', 'Faviet', 'DFAVIET', '515.124.4169', '16.08.2002', 'FI_ACCOUNT', 9000, NULL, 108, 100);
INSERT INTO employees VALUES(110, 'John', 'Chen', 'JCHEN', '515.124.4269', '28.09.2005', 'FI_ACCOUNT', 8200, NULL, 108, 100);
INSERT INTO employees VALUES(111, 'Ismael', 'Sciarra', 'ISCIARRA', '515.124.4369', '30.09.2005', 'FI_ACCOUNT', 7700, NULL, 108, 100);
INSERT INTO employees VALUES(112, 'Jose Manuel', 'Urman', 'JMURMAN', '515.124.4469', '07.03.2006', 'FI_ACCOUNT', 7800, NULL, 108, 100);
INSERT INTO employees VALUES(113, 'Luis', 'Popp', 'LPOPP', '515.124.4567', '07.12.2007', 'FI_ACCOUNT', 6900, NULL, 108, 100);
INSERT INTO employees VALUES(114, 'Den', 'Raphaely', 'DRAPHEAL', '515.127.4561', '07.12.2002', 'PU_MAN', 11000, NULL, 100, 30);
INSERT INTO employees VALUES(115, 'Alexander', 'Khoo', 'AKHOO', '515.127.4562', '18.05.2003', 'PU_CLERK', 3100, NULL, 114, 30);
INSERT INTO employees VALUES(116, 'Shelli', 'Baida', 'SBAIDA', '515.127.4563', '24.12.2005', 'PU_CLERK', 2900, NULL, 114, 30);
INSERT INTO employees VALUES(117, 'Sigal', 'Tobias', 'STOBIAS', '515.127.4564', '24.07.2005', 'PU_CLERK', 2800, NULL, 114, 30);
INSERT INTO employees VALUES(118, 'Guy', 'Himuro', 'GHIMURO', '515.127.4565', '15.11.2006', 'PU_CLERK', 2600, NULL, 114, 30);
INSERT INTO employees VALUES(119, 'Karen', 'Colmenares', 'KCOLMENA', '515.127.4566', '10.08.2007', 'PU_CLERK', 2500, NULL, 114, 30);
INSERT INTO employees VALUES(120, 'Matthew', 'Weiss', 'MWEISS', '650.123.1234', '18.07.2004', 'ST_MAN', 8000, NULL, 100, 50);
INSERT INTO employees VALUES(121, 'Adam', 'Fripp', 'AFRIPP', '650.123.2234', '10.04.2005', 'ST_MAN', 8200, NULL, 100, 50);
INSERT INTO employees VALUES(122, 'Payam', 'Kaufling', 'PKAUFLIN', '650.123.3234', '01.05.2003', 'ST_MAN', 7900, NULL, 100, 50);
INSERT INTO employees VALUES(123, 'Shanta', 'Vollman', 'SVOLLMAN', '650.123.4234', '10.10.2005', 'ST_MAN', 6500, NULL, 100, 50);
INSERT INTO employees VALUES(124, 'Kevin', 'Mourgos', 'KMOURGOS', '650.123.5234', '16.11.2007', 'ST_MAN', 5800, NULL, 100, 50);
INSERT INTO employees VALUES(125, 'Julia', 'Nayer', 'JNAYER', '650.124.1214', '16.07.2005', 'ST_CLERK', 3200, NULL, 120, 50);
INSERT INTO employees VALUES(126, 'Irene', 'Mikkilineni', 'IMIKKILI', '650.124.1224', '28.09.2006', 'ST_CLERK', 2700, NULL, 120, 50);
INSERT INTO employees VALUES(127, 'James', 'Landry', 'JLANDRY', '650.124.1334', '14.01.2007', 'ST_CLERK', 2400, NULL, 120, 50);
INSERT INTO employees VALUES(128, 'Steven', 'Markle', 'SMARKLE', '650.124.1434', '08.03.2008', 'ST_CLERK', 2200, NULL, 120, 50);
INSERT INTO employees VALUES(129, 'Laura', 'Bissot', 'LBISSOT', '650.124.5234', '20.08.2005', 'ST_CLERK', 3300, NULL, 121, 50);
INSERT INTO employees VALUES(130, 'Mozhe', 'Atkinson', 'MATKINSO', '650.124.6234', '30.10.2005', 'ST_CLERK', 2800, NULL, 121, 50);
INSERT INTO employees VALUES(131, 'James', 'Marlow', 'JAMRLOW', '650.124.7234', '16.02.2005', 'ST_CLERK', 2500, NULL, 121, 50);
INSERT INTO employees VALUES(132, 'TJ', 'Olson', 'TJOLSON', '650.124.8234', '10.04.2007', 'ST_CLERK', 2100, NULL, 121, 50);
INSERT INTO employees VALUES(133, 'Jason', 'Mallin', 'JMALLIN', '650.127.1934', '14.06.2004', 'ST_CLERK', 3300, NULL, 122, 50);
INSERT INTO employees VALUES(134, 'Michael', 'Rogers', 'MROGERS', '650.127.1834', '26.08.2006', 'ST_CLERK', 2900, NULL, 122, 50);
INSERT INTO employees VALUES(135, 'Ki', 'Gee', 'KGEE', '650.127.1734', '12.12.2007', 'ST_CLERK', 2400, NULL, 122, 50);
INSERT INTO employees VALUES(136, 'Hazel', 'Philtanker', 'HPHILTAN', '650.127.1634', '06.02.2008', 'ST_CLERK', 2200, NULL, 122, 50);
INSERT INTO employees VALUES(137, 'Renske', 'Ladwig', 'RLADWIG', '650.121.1234', '14.07.2003', 'ST_CLERK', 3600, NULL, 123, 50);
INSERT INTO employees VALUES(138, 'Stephen', 'Stiles', 'SSTILES', '650.121.2034', '26.10.2005', 'ST_CLERK', 3200, NULL, 123, 50);
INSERT INTO employees VALUES(139, 'John', 'Seo', 'JSEO', '650.121.2019', '12.02.2006', 'ST_CLERK', 2700, NULL, 123, 50);
INSERT INTO employees VALUES(140, 'Joshua', 'Patel', 'JPATEL', '650.121.1834', '06.04.2006', 'ST_CLERK', 2500, NULL, 123, 50);
INSERT INTO employees VALUES(141, 'Trenna', 'Rajs', 'TRAJS', '650.121.8009', '17.10.2003', 'ST_CLERK', 3500, NULL, 124, 50);
INSERT INTO employees VALUES(142, 'Curtis', 'Davies', 'CDAVIES', '650.121.2994', '29.01.2005', 'ST_CLERK', 3100, NULL, 124, 50);
INSERT INTO employees VALUES(143, 'Randall', 'Matos', 'RMATOS', '650.121.2874', '15.03.2006', 'ST_CLERK', 2600, NULL, 124, 50);
INSERT INTO employees VALUES(144, 'Peter', 'Vargas', 'PVARGAS', '650.121.2004', '09.07.2006', 'ST_CLERK', 2500, NULL, 124, 50);
INSERT INTO employees VALUES(145, 'John', 'Russell', 'JRUSSEL', '011.44.1344.429268', '01.10.2004', 'SA_MAN', 14000, '0.4', 100, 80);
INSERT INTO employees VALUES(146, 'Karen', 'Partners', 'KPARTNER', '011.44.1344.467268', '05.01.2005', 'SA_MAN', 13500, '0.3', 100, 80);
INSERT INTO employees VALUES(147, 'Alberto', 'Errazuriz', 'AERRAZUR', '011.44.1344.429278', '10.03.2005', 'SA_MAN', 12000, '0.3', 100, 80);
INSERT INTO employees VALUES(148, 'Gerald', 'Cambrault', 'GCAMBRAU', '011.44.1344.619268', '15.10.2007', 'SA_MAN', 11000, '0.3', 100, 80);
INSERT INTO employees VALUES(149, 'Eleni', 'Zlotkey', 'EZLOTKEY', '011.44.1344.429018', '29.01.2008', 'SA_MAN', 10500, '0.2', 100, 80);
INSERT INTO employees VALUES(150, 'Peter', 'Tucker', 'PTUCKER', '011.44.1344.129268', '30.01.2005', 'SA_REP', 10000, '0.3', 145, 80);
INSERT INTO employees VALUES(151, 'David', 'Bernstein', 'DBERNSTE', '011.44.1344.345268', '24.03.2005', 'SA_REP', 9500, '0.25', 145, 80);
INSERT INTO employees VALUES(152, 'Peter', 'Hall', 'PHALL', '011.44.1344.478968', '20.08.2005', 'SA_REP', 9000, '0.25', 145, 80);
INSERT INTO employees VALUES(153, 'Christopher', 'Olsen', 'COLSEN', '011.44.1344.498718', '30.03.2006', 'SA_REP', 8000, '0.2', 145, 80);
INSERT INTO employees VALUES(154, 'Nanette', 'Cambrault', 'NCAMBRAU', '011.44.1344.987668', '09.12.2006', 'SA_REP', 7500, '0.2', 145, 80);
INSERT INTO employees VALUES(155, 'Oliver', 'Tuvault', 'OTUVAULT', '011.44.1344.486508', '23.11.2007', 'SA_REP', 7000, '0.15', 145, 80);
INSERT INTO employees VALUES(156, 'Janette', 'King', 'JKING', '011.44.1345.429268', '30.01.2004', 'SA_REP', 10000, '0.35', 146, 80);
INSERT INTO employees VALUES(157, 'Patrick', 'Sully', 'PSULLY', '011.44.1345.929268', '04.03.2004', 'SA_REP', 9500, '0.35', 146, 80);
INSERT INTO employees VALUES(158, 'Allan', 'McEwen', 'AMCEWEN', '011.44.1345.829268', '01.08.2004', 'SA_REP', 9000, '0.35', 146, 80);
INSERT INTO employees VALUES(159, 'Lindsey', 'Smith', 'LSMITH', '011.44.1345.729268', '10.03.2005', 'SA_REP', 8000, '0.3', 146, 80);
INSERT INTO employees VALUES(160, 'Louise', 'Doran', 'LDORAN', '011.44.1345.629268', '15.12.2005', 'SA_REP', 7500, '0.3', 146, 80);
INSERT INTO employees VALUES(161, 'Sarath', 'Sewall', 'SSEWALL', '011.44.1345.529268', '03.11.2006', 'SA_REP', 7000, '0.25', 146, 80);
INSERT INTO employees VALUES(162, 'Clara', 'Vishney', 'CVISHNEY', '011.44.1346.129268', '11.11.2005', 'SA_REP', 10500, '0.25', 147, 80);
INSERT INTO employees VALUES(163, 'Danielle', 'Greene', 'DGREENE', '011.44.1346.229268', '19.03.2007', 'SA_REP', 9500, '0.15', 147, 80);
INSERT INTO employees VALUES(164, 'Mattea', 'Marvins', 'MMARVINS', '011.44.1346.329268', '24.01.2008', 'SA_REP', 7200, '0.1', 147, 80);
INSERT INTO employees VALUES(165, 'David', 'Lee', 'DLEE', '011.44.1346.529268', '23.02.2008', 'SA_REP', 6800, '0.1', 147, 80);
INSERT INTO employees VALUES(166, 'Sundar', 'Ande', 'SANDE', '011.44.1346.629268', '24.03.2008', 'SA_REP', 6400, '0.1', 147, 80);
INSERT INTO employees VALUES(167, 'Amit', 'Banda', 'ABANDA', '011.44.1346.729268', '21.04.2008', 'SA_REP', 6200, '0.1', 147, 80);
INSERT INTO employees VALUES(168, 'Lisa', 'Ozer', 'LOZER', '011.44.1343.929268', '11.03.2005', 'SA_REP', 11500, '0.25', 148, 80);
INSERT INTO employees VALUES(169, 'Harrison', 'Bloom', 'HBLOOM', '011.44.1343.829268', '23.03.2006', 'SA_REP', 10000, '0.2', 148, 80);
INSERT INTO employees VALUES(170, 'Tayler', 'Fox', 'TFOX', '011.44.1343.729268', '24.01.2006', 'SA_REP', 9600, '0.2', 148, 80);
INSERT INTO employees VALUES(171, 'William', 'Smith', 'WSMITH', '011.44.1343.629268', '23.02.2007', 'SA_REP', 7400, '0.15', 148, 80);
INSERT INTO employees VALUES(172, 'Elizabeth', 'Bates', 'EBATES', '011.44.1343.529268', '24.03.2007', 'SA_REP', 7300, '0.15', 148, 80);
INSERT INTO employees VALUES(173, 'Sundita', 'Kumar', 'SKUMAR', '011.44.1343.329268', '21.04.2008', 'SA_REP', 6100, '0.1', 148, 80);
INSERT INTO employees VALUES(174, 'Ellen', 'Abel', 'EABEL', '011.44.1644.429267', '11.05.2004', 'SA_REP', 11000, '0.3', 149, 80);
INSERT INTO employees VALUES(175, 'Alyssa', 'Hutton', 'AHUTTON', '011.44.1644.429266', '19.03.2005', 'SA_REP', 8800, '0.25', 149, 80);
INSERT INTO employees VALUES(176, 'Jonathon', 'Taylor', 'JTAYLOR', '011.44.1644.429265', '24.03.2006', 'SA_REP', 8600, '0.2', 149, 80);
INSERT INTO employees VALUES(177, 'Jack', 'Livingston', 'JLIVINGS', '011.44.1644.429264', '23.04.2006', 'SA_REP', 8400, '0.2', 149, 80);
INSERT INTO employees VALUES(178, 'Kimberely', 'Grant', 'KGRANT', '011.44.1644.429263', '24.05.2007', 'SA_REP', 7000, '0.15', 149, NULL);
INSERT INTO employees VALUES(179, 'Charles', 'Johnson', 'CJOHNSON', '011.44.1644.429262', '04.01.2008', 'SA_REP', 6200, '0.1', 149, 80);
INSERT INTO employees VALUES(180, 'Winston', 'Taylor', 'WTAYLOR', '650.507.9876', '24.01.2006', 'SH_CLERK', 3200, NULL, 120, 50);
INSERT INTO employees VALUES(181, 'Jean', 'Fleaur', 'JFLEAUR', '650.507.9877', '23.02.2006', 'SH_CLERK', 3100, NULL, 120, 50);
INSERT INTO employees VALUES(182, 'Martha', 'Sullivan', 'MSULLIVA', '650.507.9878', '21.06.2007', 'SH_CLERK', 2500, NULL, 120, 50);
INSERT INTO employees VALUES(183, 'Girard', 'Geoni', 'GGEONI', '650.507.9879', '03.02.2008', 'SH_CLERK', 2800, NULL, 120, 50);
INSERT INTO employees VALUES(184, 'Nandita', 'Sarchand', 'NSARCHAN', '650.509.1876', '27.01.2004', 'SH_CLERK', 4200, NULL, 121, 50);
INSERT INTO employees VALUES(185, 'Alexis', 'Bull', 'ABULL', '650.509.2876', '20.02.2005', 'SH_CLERK', 4100, NULL, 121, 50);
INSERT INTO employees VALUES(186, 'Julia', 'Dellinger', 'JDELLING', '650.509.3876', '24.06.2006', 'SH_CLERK', 3400, NULL, 121, 50);
INSERT INTO employees VALUES(187, 'Anthony', 'Cabrio', 'ACABRIO', '650.509.4876', '07.02.2007', 'SH_CLERK', 3000, NULL, 121, 50);
INSERT INTO employees VALUES(188, 'Kelly', 'Chung', 'KCHUNG', '650.505.1876', '14.06.2005', 'SH_CLERK', 3800, NULL, 122, 50);
INSERT INTO employees VALUES(189, 'Jennifer', 'Dilly', 'JDILLY', '650.505.2876', '13.08.2005', 'SH_CLERK', 3600, NULL, 122, 50);
INSERT INTO employees VALUES(190, 'Timothy', 'Gates', 'TGATES', '650.505.3876', '11.07.2006', 'SH_CLERK', 2900, NULL, 122, 50);
INSERT INTO employees VALUES(191, 'Randall', 'Perkins', 'RPERKINS', '650.505.4876', '19.12.2007', 'SH_CLERK', 2500, NULL, 122, 50);
INSERT INTO employees VALUES(192, 'Sarah', 'Bell', 'SBELL', '650.501.1876', '04.02.2004', 'SH_CLERK', 4000, NULL, 123, 50);
INSERT INTO employees VALUES(193, 'Britney', 'Everett', 'BEVERETT', '650.501.2876', '03.03.2005', 'SH_CLERK', 3900, NULL, 123, 50);
INSERT INTO employees VALUES(194, 'Samuel', 'McCain', 'SMCCAIN', '650.501.3876', '01.07.2006', 'SH_CLERK', 3200, NULL, 123, 50);
INSERT INTO employees VALUES(195, 'Vance', 'Jones', 'VJONES', '650.501.4876', '17.03.2007', 'SH_CLERK', 2800, NULL, 123, 50);
INSERT INTO employees VALUES(196, 'Alana', 'Walsh', 'AWALSH', '650.507.9811', '24.04.2006', 'SH_CLERK', 3100, NULL, 124, 50);
INSERT INTO employees VALUES(197, 'Kevin', 'Feeney', 'KFEENEY', '650.507.9822', '23.05.2006', 'SH_CLERK', 3000, NULL, 124, 50);
INSERT INTO employees VALUES(198, 'Donald', 'OConnell', 'DOCONNEL', '650.507.9833', '21.06.2007', 'SH_CLERK', 2600, NULL, 124, 50);
INSERT INTO employees VALUES(199, 'Douglas', 'Grant', 'DGRANT', '650.507.9844', '13.01.2008', 'SH_CLERK', 2600, NULL, 124, 50);
INSERT INTO employees VALUES(200, 'Jennifer', 'Whalen', 'JWHALEN', '515.123.4444', '17.09.2003', 'AD_ASST', 4400, NULL, 101, 10);
INSERT INTO employees VALUES(201, 'Michael', 'Hartstein', 'MHARTSTE', '515.123.5555', '17.02.2004', 'MK_MAN', 13000, NULL, 100, 20);
INSERT INTO employees VALUES(202, 'Pat', 'Fay', 'PFAY', '603.123.6666', '17.08.2005', 'MK_REP', 6000, NULL, 201, 20);
INSERT INTO employees VALUES(203, 'Susan', 'Mavris', 'SMAVRIS', '515.123.7777', '07.06.2002', 'HR_REP', 6500, NULL, 101, 40);
INSERT INTO employees VALUES(204, 'Hermann', 'Baer', 'HBAER', '515.123.8888', '07.06.2002', 'PR_REP', 10000, NULL, 101, 70);
INSERT INTO employees VALUES(205, 'Shelley', 'Higgins', 'SHIGGINS', '515.123.8080', '07.06.2002', 'AC_MGR', 12008, NULL, 101, 110);
INSERT INTO employees VALUES(206, 'William', 'Gietz', 'WGIETZ', '515.123.8181', '07.06.2002', 'AC_ACCOUNT', 8300, NULL, 205, 110);
CREATE TABLE DEPARTMENTS
(
department_id integer PRIMARY KEY,
department_name varchar(64) NOT NULL UNIQUE,
manager_id integer REFERENCES EMPLOYEES(employee_id),
location_id integer REFERENCES LOCATIONS(location_id)
);
INSERT INTO departments VALUES
(10, 'Administration', 200, 1700),
(20, 'Marketing', 201, 1800),
(30, 'Purchasing', 114, 1700),
(40, 'Human Resources', 203, 2400),
(50, 'Shipping', 121, 1500),
(60, 'IT', 103, 1400),
(70, 'Public Relations', 204, 2700),
(80, 'Sales', 145, 2500),
(90, 'Executive', 100, 1700),
(100, 'Finance', 108, 1700),
(110, 'Accounting', 205, 1700),
(120, 'Treasury', NULL, 1700),
(130, 'Corporate Tax', NULL, 1700),
(140, 'Control And Credit', NULL, 1700),
(150, 'Shareholder Services', NULL, 1700),
(160, 'Benefits', NULL, 1700),
(170, 'Manufacturing', NULL, 1700),
(180, 'Construction', NULL, 1700),
(190, 'Contracting', NULL, 1700),
(200, 'Operations', NULL, 1700),
(210, 'IT Support', NULL, 1700),
(220, 'NOC', NULL, 1700),
(230, 'IT Helpdesk', NULL, 1700),
(240, 'Government Sales', NULL, 1700),
(250, 'Retail Sales', NULL, 1700),
(260, 'Recruiting', NULL, 1700),
(270, 'Payroll', NULL, 1700);
ALTER TABLE EMPLOYEES ADD CONSTRAINT DE FOREIGN KEY(department_id)
REFERENCES DEPARTMENTS(department_id);
CREATE TABLE JOB_HISTORY
(
employee_id integer REFERENCES EMPLOYEES(employee_id),
start_date timestamp,
PRIMARY KEY(employee_id, start_date),
end_date timestamp,
job_id varchar(16) REFERENCES JOBS(job_id) NOT NULL,
department_id integer REFERENCES DEPARTMENTS(department_id) NOT NULL
);
INSERT INTO job_history VALUES
(102, '13.01.2001', '24.07.2006', 'IT_PROG', 60),
(101, '21.09.1997', '27.10.2001', 'AC_ACCOUNT', 110),
(101, '28.10.2001', '15.03.2005', 'AC_MGR', 110),
(201, '17.02.2004', '19.12.2007', 'MK_REP', 20),
(114, '24.03.2006', '31.12.2007', 'ST_CLERK', 50),
(122, '01.01.2007', '31.12.2007', 'ST_CLERK', 50),
(200, '17.09.1995', '17.06.2001', 'AD_ASST', 90),
(176, '24.03.2006', '31.12.2006', 'SA_REP', 80),
(176, '01.01.2007', '31.12.2007', 'SA_MAN', 80),
(200, '01.07.2002', '31.12.2006', 'AC_ACCOUNT', 90);