mirror of
https://github.com/ada-dmitry/DB.mephi_ada.git
synced 2026-09-23 23:50:16 +00:00
reboot rep
This commit is contained in:
@@ -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.
@@ -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);
|
||||
@@ -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;
|
||||
@@ -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.
@@ -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.
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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);
|
||||
@@ -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
|
||||
);
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
Reference in New Issue
Block a user