Добавил:
t.me Инфо для ГУАП студентов от меня: https://kafaka.notion.site/99e6d9b70ca74f7baef3daea17839e5a Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Чурилов / 4 курс / Z9411_Чурилов_БазыДанных_ЛР6

.docx
Скачиваний:
4
Добавлен:
10.11.2024
Размер:
233.74 Кб
Скачать

МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ

федеральное государственное автономное образовательное учреждение высшего образования

«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ АЭРОКОСМИЧЕСКОГО ПРИБОРОСТРОЕНИЯ»

ИНСТИТУТ НЕПРЕРЫВНОГО И ДИСТАНЦИОННОГО ОБРАЗОВАНИЯ

КАФЕДРА 41

ОЦЕНКА

ПРЕПОДАВАТЕЛЬ

кандидат техн. наук

Е.Л. Турнецкая

должность, уч. степень, звание

подпись, дата

инициалы, фамилия

ОТЧЕТ О ЛАБОРАТОРНОЙ РАБОТЕ №6

Знакомство с СУБД POSTGRESQL

по курсу: БАЗЫ ДАННЫХ

РАБОТУ ВЫПОЛНИЛ

СТУДЕНТ ГР. №

Z9411

А.С.Чурилов

номер группы

подпись, дата

инициалы, фамилия

Студенческий билет № 2019/3684

Санкт-Петербург 2023

Цель работы:

Познакомиться с СУБД PostgreSQL и языком запросов SQL.

Вариант 20

Ход работы:

Переименовал базу данных postgres в students (Рисунок 1).

Рисунок 1 – Создание базы данных

Узнал свою роль (Рисунок 2).

Рисунок 2 – Просмотр пользователя

Создал и заполнил таблицы согласно методичке (Листинги 1-3, Рисунки 3-5).

Листинг 1 – Создание и заполнение таблицы jobs

CREATE TABLE jobs (

job_id varchar(10) PRIMARY KEY,

job_title varchar(35) NOT NULL,

min_salary integer,

max_salary integer);

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),

('SA_MAN', 'Sales Manager', 10000, 20080),

('PU_MAN', 'Purchasing Manager', 8000, 15000),

('PU_CLERK', 'Purchasing Clerk', 2500, 5500),

('ST_MAN', 'Stock Manager', 5500, 8500),

('ST_CLERK', 'Stock Clerk', 2008, 5000),

('IT_PROG', 'Programmer', 4000, 10000),

('MK_MAN', 'Marketing Manager', 9000, 15000),

('HR_REP', 'Human Resources Representative', 4000, 9000);

Рисунок 3 – Таблица должностей

Листинг 2 – Создание и заполнение таблицы departments

CREATE TABLE departments (

department_id integer PRIMARY KEY,

department_name varchar(30) NOT NULL,

manager_id integer);

INSERT INTO departments VALUES

(10, 'Administration', 51),

(20, 'Marketing', 52),

(30, 'Purchasing', 15),

(40, 'Human Resources', 53),

(50, 'Shipping', 22),

(60, 'IT', 4),

(80, 'Sales', 46),

(90, 'Executive', 1),

(100, 'Finance', 9);

Рисунок 4 – Таблица департаментов

Листинг 3 – Создание и заполнение таблицы employees

CREATE TABLE employees (

employee_id serial PRIMARY KEY,

first_name varchar(20) NOT NULL,

last_name varchar(25) NOT NULL,

job_id varchar(10) NOT NULL REFERENCES jobs (job_id),

salary integer,

manager_id integer,

department_id integer NOT NULL REFERENCES departments (department_id));

INSERT INTO employees (first_name, last_name, job_id, salary, manager_id, department_id)

VALUES

('Steven', 'King', 'AD_PRES', 24000, NULL, 90),

('Neena', 'Kochhar', 'AD_VP', 17000, 1, 90),

('Lex', 'De Haan', 'AD_VP', 17000, 1, 90),

('Alexander', 'Hunold', 'IT_PROG', 9000, 3, 60),

('Bruce', 'Ernst', 'IT_PROG', 6000, 4, 60),

('David', 'Austin', 'IT_PROG', 4800, 4, 60),

('Valli', 'Pataballa', 'IT_PROG', 4800, 4, 60),

('Diana', 'Lorentz', 'IT_PROG', 4200, 4, 60),

('Nancy', 'Greenberg', 'FI_MGR', 12008, 2, 100),

('Daniel', 'Faviet', 'FI_ACCOUNT', 9000, 9, 100),

('John', 'Chen', 'FI_ACCOUNT', 8200, 9, 100),

('Ismael', 'Sciarra', 'FI_ACCOUNT', 7700, 9, 100),

('Jose Manuel', 'Urman', 'FI_ACCOUNT', 7800, 9, 100),

('Luis', 'Popp', 'FI_ACCOUNT', 6900, 9, 100),

('Den', 'Raphaely', 'PU_MAN', 11000, 1, 30),

('Alexander', 'Khoo', 'PU_CLERK', 3100, 15, 30),

('Shelli', 'Baida', 'PU_CLERK', 2900, 15, 30),

('Sigal', 'Tobias', 'PU_CLERK', 2800, 15, 30),

('Guy', 'Himuro', 'PU_CLERK', 2600, 15, 30),

('Karen', 'Colmenares', 'PU_CLERK', 2500, 15, 30),

('Matthew', 'Weiss', 'ST_MAN', 8000, 1, 50),

('Adam', 'Fripp', 'ST_MAN', 8200, 1, 50),

('Payam', 'Kaufling', 'ST_MAN', 7900, 1, 50),

('Shanta', 'Vollman', 'ST_MAN', 6500, 1, 50),

('Kevin', 'Mourgos', 'ST_MAN', 5800, 1, 50),

('Julia', 'Nayer', 'ST_CLERK', 3200, 21, 50),

('Irene', 'Mikkilineni', 'ST_CLERK', 2700, 21, 50),

('James', 'Landry', 'ST_CLERK', 2400, 21, 50),

('Steven', 'Markle', 'ST_CLERK', 2200, 21, 50),

('Laura', 'Bissot', 'ST_CLERK', 3300, 22, 50),

('Mozhe', 'Atkinson', 'ST_CLERK', 2800, 22, 50),

('James', 'Marlow', 'ST_CLERK', 2500, 22, 50),

('TJ', 'Olson', 'ST_CLERK', 2100, 22, 50),

('Jason', 'Mallin', 'ST_CLERK', 3300, 23, 50),

('Michael', 'Rogers', 'ST_CLERK', 2900, 23, 50),

('Ki', 'Gee', 'ST_CLERK', 2400, 23, 50),

('Hazel', 'Philtanker', 'ST_CLERK', 2200, 23, 50),

('Renske', 'Ladwig', 'ST_CLERK', 3600, 24, 50),

('Stephen', 'Stiles', 'ST_CLERK', 3200, 24, 50),

('John', 'Seo', 'ST_CLERK', 2700, 24, 50),

('Joshua', 'Patel', 'ST_CLERK', 2500, 24, 50),

('Trenna', 'Rajs', 'ST_CLERK', 3500, 25, 50),

('Curtis', 'Davies', 'ST_CLERK', 3100, 25, 50),

('Randall', 'Matos', 'ST_CLERK', 2600, 25, 50),

('Peter', 'Vargas', 'ST_CLERK', 2500, 25, 50),

('John', 'Russell', 'SA_MAN', 14000, 1, 80),

('Karen', 'Partners', 'SA_MAN', 13500, 1, 80),

('Alberto', 'Errazuriz', 'SA_MAN', 12000, 1, 80),

('Gerald', 'Cambrault', 'SA_MAN', 11000, 1, 80),

('Eleni', 'Zlotkey', 'SA_MAN', 10500, 1, 80),

('Jennifer', 'Whalen', 'AD_ASST', 4400, 2, 10),

('Michael', 'Hartstein', 'MK_MAN', 13000, 1, 20),

('Susan', 'Mavris', 'HR_REP', 6500, 2, 40);

Рисунок 5 – Таблица работников

После установил связи между таблицами (Рисунок 6).

Рисунок 6 – Диаграмма созданной базы данных

Запрос – Найти минимальные зарплаты по отделам, но вывести только те, которые больше 10000. (Листинг 4, Рисунок 7).

Листинг 4 – Минимальные зарплаты отделов

select department_name, min(salary)

from employees e

join departments d on e.department_id=d.department_id

where salary >= 10000

group by d.department_id;

Рисунок 7 – Запрос 1

Запрос – Найти сотрудника, фамилия которого состоит более чем из одного слова (Листинг 5, Рисунок 8).

Листинг 5 – Поиск сотрудника с фамилией из нескольких слов

select* from employees where (LENGTH(first_name) - LENGTH(replace (first_name, ' ', ''))+1)>1;

Рисунок 8 – Запрос 2

Вывод:

В ходе лабораторной работы создал базу данных, а также настроил в ней связи таблиц. Новым оказалось, что после создания бд нужно было сначала создать схему, чтобы уже в нее создавать таблицы. Научился взаимодействовать со схемами, устанавливать работу с определенной, хотя возникли определенные трудности, потому что изначально игнорировалась команда использования другой схемы, но после некоторых манипуляций, таких как удаление другой схемы и перезапуск программы, все заработало. Узнал, что в бд есть различные пользователи, проверил свои права. Создал 3 таблицы согласно методическим указаниям, после чего ознакомился с простыми запросами и составил еще не сколько сложных запросов, соответствующие моему варианту. Также узнал разницу между схожими командами, которые можно использовать, такими как «Like» и «ILike», а также «where» и «having».