#show link: underline
#set page(
  header: context {
    if counter(page).get().first() == 1 [
      #align(center)[
        Санкт-Петербургский национальный исследовательский университет информационных технологий, механики и оптики
      ]
    ]
  },
  footer: context {
    if counter(page).get().first() == 1 [
      #align(center)[Санкт-Петербург \ 2025]
    ] else [
      #align(center)[#counter(page).display("1")]
    ]
  }
)


#show raw.where(block: false): box.with(
  fill: luma(240),
  inset: (x: 3pt, y: 0pt),
  outset: (y: 3pt),
  radius: 2pt,
)

#show raw.where(block: true): block.with(
  fill: luma(240),
  inset: 10pt,
  radius: 4pt,
)

// title

\
\
\
#align(center)[Факультет инфокоммуникационных технологий]
#align(center)[Направление подготовки 11.03.02]
\
\
#align(center)[Практическая работа №2]
//#align(center)[Установка и первоначальная настройка субд postgresql.]
\
\
\
\ //#align(center)[Вариант 19]
\
\
\
\
\
\
\
#align(right)[Выполнил:]
#align(right)[Дощенников Никита Андреевич]
#align(right)[Группа: К3221]
#align(right)[Проверила:]
#align(right)[Татьяна Евгеньевна Войтюк]
\
\

#pagebreak()

=== Цель работы

=== Задачи, решаемые при выполнении работы

=== Исходные данные

==== Задание 1. Описание структуры таблицы, выборка данных из таблицы, задание имен столбцов, сортировка строк с помощью предложения ORDER BY 

===== 1.1 Будет ли успешна эта команда `SELECT`?

```sql
SELECT *
FROM "EmployeesDepartments".JOB_GRADES;
```

Нет, не будет, так как для корректного выполнения данной команды, нужно добавить кавычки у `JOB_GRADES` (Рис. 1).

#align(center)[
    #figure(
      image("assets/1.png"),
      supplement: [Рис],
      caption: []
    )
]

===== 1.2 Команда SELECT содержит 4 ошибки. Укажите их.

```sql
SELECT "EMPLOYEE_ID", "LAST_NAME"
"SAL" x 12 ANNUAL SALARY
FROM "EmployeesDepartments"."EMPLOYEES"
```

- Нет запятой перед `"SAL"`.
- Использовать `*` вместо `x`.
- Неправильно задан псевдоним: нужен `AS` и, раз в псевдониме пробел, - кавычки (например `AS "ANNUAL SALARY"`).
- Неправильное название стобца: вместо `SAL` должно быть `SALARY`.

Исправленная версия: 

```sql
SELECT "EMPLOYEE_ID", "LAST_NAME", "SALARY" * 12 AS "ANNUAL SALARY"
FROM "EmployeesDepartments"."EMPLOYEES";
```

===== 1.3 Напишите запрос, который отображает структуру таблицы `DEPARTMENTS`, представленную на таблице 1. Сформируйте запрос на выборку данных из нее, результат должен соответствовать таблице 2.

// таблица 1
#align(center)[
  #figure(
    table(columns: 3)[*column_name*][*is_nullable*][*Type*][DEPARTMENT_ID][NO][smallint][DEPARTMENT_NAME][NO][character varying][MANAGER_ID][YES][integer][LOCATION_ID][YES][smallint],
    caption: [Структура таблицы `DEPARTMENTS`.],
    supplement: [Табл.]
  )
]

```sql
SELECT column_name,
       CASE WHEN is_nullable = 'YES' THEN 'YES' ELSE 'NO' END AS is_nullable,
       data_type
FROM information_schema.columns
WHERE table_name = 'DEPARTMENTS'
  AND table_schema IN ('EmployeesDepartments', 'public')
ORDER BY ordinal_position;
```

#align(center)[
  #figure(
    image("assets/2.png"),
    caption: [Результат выполнения запроса.],
    supplement: [Рис]
  )
]

// таблица 2
#align(center)[
  #figure(
    table(columns: 4)[*DEPARTMENT_ID*][*DEPARTMENT_NAME*][*MANAGER_ID*][*LOCATION_ID*][10][Administration][200][1700][20][Marketing][201][1800][50][Shipping][124][1500][60][IT][103][1400][80][Sales - Europe][149][2500][85][Sales - Americas][149][2100][90][Executive][100][1700][110][Accounting][205][1700][190][Contracting][][1700],
    caption: [Результат выполнения запроса к таблице `DEPARTMENTS`.],
    supplement: [Табл.]
  )
]

```sql
SELECT "DEPARTMENT_ID", "DEPARTMENT_NAME", "MANAGER_ID", "LOCATION_ID"
FROM "EmployeesDepartments"."DEPARTMENTS"
ORDER BY "DEPARTMENT_ID";
```

#align(center)[
  #figure(
    image("assets/3.png"),
    supplement: [Рис],
    caption: [Результат выполнения запроса.]
  )
]

===== 1.4 Напишите запрос, который отображает структуру таблицы `EMPLOYEES`, представленную в таблице 3.

#align(center)[
  #figure(
    table(columns: 3)[*Name*][*Null?*][*Type*][HIRE_DATE][NO][date][SALARY][YES][numeric][COMMISION_PCT][YES][numeric][MANAGER_ID][YES][integer][DEPARTMENT_ID][YES][smallint][EMPLOYEE_ID][NO][integer][BONUS][YES][character varying][FIRST_NAME][YES][character varying][LAST_NAME][NO][character varying][EMAIL][NO][character varying][PHONE_NUMBER][YES][character varying][JOB_ID][NO][character varying],
    caption: [Результат выполнения запроса к таблице `DEPARTMENTS`.],
    supplement: [Табл.]
  )
]

===== 1.5 Составьте запрос для вывода фамилии каждого служащего, должности, даты найма и номера. Номер служащего должен быть первым. Результат запроса должен быть схож с таблицей 4.

#align(center)[
  #figure(
    table(columns: 4)[*EMPLOYEE_ID*][*LAST_NAME*][*JOB_ID*][*HIRE_DATE*][100][King][AD_PRES][2002-06-17][101][Kochhar][AD_VP][2004-09-21][102][De Haan][AD_VP][2008-01-13][103][Hunold][IT_PROG][2005-01-03][104][Ernst][IT_PROG][2006-05-21][107][Lorentz][IT_PROG][2014-02-07][124][Mourgos][ST_MAN][2014-11-16][141][Rajs][ST_CLERK][2010-10-17][142][Davies][ST_CLERK][2012-01-29][143][Matos][ST_CLERK][2013-03-15][144][Vargas][ST_CLERK][2013-07-09][$dots$][$dots$][$dots$][$dots$],
    caption: [Часть результата выполнения запроса из пункта 1.5.],
    supplement: [Табл.]
  )
]

===== 1.6 Составьте запрос для вывода неповторяющихся должностей из таблицы EMPLOYEES, результат должен соответствовать таблице 5.

#align(center)[
  #figure(
    table(columns: 1)[*JOB_ID*][AC_ACCOUNT][AC_MGR][AD_ASST][AD_PRES][AD_VP][IT_PROG][MK_MAN][MK_REP][SA_MAN][SA_REP][SR_MK_REP][SR_SA_REP][SR_ST_CLRK][ST_CLERK][ST_MAN],
    caption: [Результат выполнения запроса для вывода неповторяющихся должностей.],
    supplement: [Табл.]
  )
]

===== 1.7 Выведите на экран фамилию, соединенную с идентификатором должности через запятую и пробел. Назовите новый столбец Employee and Title. Результат запроса должен быть схож с таблицей 6.

#align(center)[
  #figure(
    table(columns: 1)[*Employee and Title*][King, AD_PRES][Kochhar, AD_VP][De Haan, AD_VP][Hunold, IT_PROG][Ernst, IT_PROG][Lorentz, IT_PROG][Mourgos, ST_MAN][Rajs, ST_CLERK][Davies, ST_CLERK][Matos, ST_CLERK][Vargas, ST_CLERK][$dots$],
    caption: [Результат выполнения запроса для вывода фамилии, соединённой с идентификатором должности.],
    supplement: [Табл.]
  )
]

==== Задание 2. Выборка данных и изменение последовательности вывода строк, ограничение количества возвращаемых строк с помощью предложения `WHERE`, сортировка строк с помощью предложения `ORDER BY`.


===  Выполнение работы

=== Выводы и анализ результатов работы

