\documentclass[a4paper, 10pt]{article}
\usepackage[utf8]{inputenc}
\usepackage[english,russian]{babel}
\usepackage{fancyhdr}
\usepackage{caption}
\usepackage[left=1.5cm,right=1.5cm,top=2cm,bottom=1.5cm,bindingoffset=0cm]{geometry}

\captionsetup{labelsep=period}
\pagestyle{fancy}

\usepackage[export]{adjustbox}
\usepackage{graphicx}
\usepackage{grffile}
\graphicspath{ {img/} }


\renewcommand{\headrulewidth}{0pt}
\fancyfoot[L] {\thepage\bf}
\fancyfoot[C] {}
\begin{document}
    \begin{titlepage}
        \begin{center}
            \large
            Университет ИТМО
            \vspace{3cm}
            
            
            Кафедра вычислительной техники
            \vspace{4cm}
            
            \textsc{ \textbf{Отчёт по лабораторной работе  № 1} \\ по дисциплине: "Системы баз данных"}\\[8mm]
            
            \bigskip
        \end{center}
        \vspace{3cm}
        
        \hfill\begin{flushright}
             Студентка: \\Куклина М.Д. \\
             Группа P3301
             \vfill
             Преподаватель:\\ Беликов П.A.
        \end{flushright}
        \vfill
        \vfill
        \vfill
        \vfill
        \vfill
        \begin{center}
            Санкт-Петербург \\2016 г.
        \end{center}
    \end{titlepage}
\newpage

\section*{ Задание }
1.
    \begin{verbatim}
        select n_session.*,
               to_char(ДАТА, 'dd-mm-yyyy hh24:mi:ss') ДАТА,
               to_char(ВРЕМЯ, 'dd-mm-yyyy hh24:mi:ss') ВРЕМЯ,
               to_char(ДАТА_К, 'dd-mm-yyyy hh24:mi:ss') ДАТА_К,
               to_char(ВРЕМЯ_К, 'dd-mm-yyyy hh24:mi:ss') ВРЕМЯ_К
        from Н_СЕССИЯ n_session;
    \end{verbatim}
2.
   \begin{verbatim}
        select distinct НАИМЕНОВАНИЕ from Н_ДИСЦИПЛИНЫ;
   \end{verbatim}
3.
    \begin{verbatim}
    1) Дни:
        select to_date('01-SEP-2016', 'dd-mon-yyyy')-ДАТА_РОЖДЕНИЯ as Offset 
            from Н_ЛЮДИ where ИД=184054;
    2) Месяцы
        select months_between(to_date('01-SEP-2016', 'dd-mon-yyyy'),ДАТА_РОЖДЕНИЯ)
            from Н_ЛЮДИ where ИД=184054;
    3) Годы
        select months_between(to_date('01-SEP-2016', 'dd-mon-yyyy'),ДАТА_РОЖДЕНИЯ)/12
            from Н_ЛЮДИ where ИД=184054;
    \end{verbatim}
4.
    \begin{verbatim}
        select ФАМИЛИЯ || ' ' || substr(ИМЯ,1,1) || '. ' ||
                decode( ОТЧЕСТВО, '', '', substr(ОТЧЕСТВО,1,1)||'.')
            from Н_ЛЮДИ where to_char(ДАТА_РОЖДЕНИЯ, 'mm') = (
                    select to_char(ДАТ    А_РОЖДЕНИЯ, 'mm')
                        from Н_ЛЮДИ where ИД=184054 );
    \end{verbatim}
5.
    \begin{verbatim}
       select ФАМИЛИЯ,ИМЯ,ОТЧЕСТВО,ИД from Н_ЛЮДИ
            where rownum <= 75
                 and substr(ФАМИЛИЯ,1,3) = (
                      select substr(ФАМИЛИЯ,1,3) from Н_ЛЮДИ
                           where ИД=184054
                       )
             order by ФАМИЛИЯ desc,ИМЯ desc,ОТЧЕСТВО desc,ИД;
    \end{verbatim}
6.
    \begin{verbatim}
    a)
        select ИМЯ,ФАМИЛИЯ,ОТЧЕСТВО,ИД from Н_ЛЮДИ
            where (substr(ИМЯ,1,1) not in ( 'А', 'Б', 'З', 'К', 'У'))
                  and (substr(ОТЧЕСТВО,1,1) not in ('А', 'Б', 'З', 'К','У'));
    b)
        select ИМЯ,ФАМИЛИЯ,ОТЧЕСТВО,ИД from Н_ЛЮДИ
            where not (regexp_like(ИМЯ, '(^А)|(^Б)|(^З)|(^К)|(^У)')
                       or
                       regexp_like(ОТЧЕСТВО, '(^А)|(^Б)|(^З)|(^К)|(^У)') );

    \end{verbatim}
7.
    \begin{verbatim}
        select distinct count(ИМЯ) from Н_ЛЮДИ
            where ИМЯ = (select ИМЯ from Н_ЛЮДИ 
                            where ИД = 172421
                        )
                and /* Если необходимо исключить и человека, с которым сравниваем. */
                  ИД <> 172421; 
    \end{verbatim}
8.
    \begin{verbatim}
        select ОЦЕНКА*2 from Н_ВЕДОМОСТИ
            where ЧЛВК_ИД = 182349
                and (
                        regexp_like( ОЦЕНКА, '^[0-9]$' )
                ) and (
                        ОЦЕНКА not in ( '0', '1', '6', '7', '8', '9' ) /* Но зачем? */);
    \end{verbatim}
9.

    \begin{verbatim}
        select  Н_ЛЮДИ.ФАМИЛИЯ, sum(Н_ВЕДОМОСТИ.ОЦЕНКА)
            from Н_ВЕДОМОСТИ 
                join Н_ЛЮДИ 
                    on Н_ВЕДОМОСТИ.ЧЛВК_ИД = Н_ЛЮДИ.ИД
            where regexp_like(ОЦЕНКА, '^[2-5]')
                and ( ЧЛВК_ИД in (
                        select ИД from Н_ЛЮДИ 
                            where  ИД > 170000 and rownum <= 7 )
            )
            group by Н_ЛЮДИ.ФАМИЛИЯ;
    \end{verbatim}
10.
    \begin{verbatim}
        select * from Н_ЛЮДИ, Н_ВЕДОМОСТИ;
    \end{verbatim}
11.
    \begin{verbatim}
        select ФАМИЛИЯ, ИМЯ, ОТЧЕСТВО, СРД
                from ( 
                    select ФАМИЛИЯ,ИМЯ,ОТЧЕСТВО,Н_ЛЮДИ.ИД,avg(ОЦЕНКА) СРД
                        from Н_ЛЮДИ join Н_ВЕДОМОСТИ on Н_ЛЮДИ.ИД = Н_ВЕДОМОСТИ.ЧЛВК_ИД
                    where regexp_like(ОЦЕНКА, '^[0-9]$') 
                    group by ФАМИЛИЯ,ИМЯ,ОТЧЕСТВО,Н_ЛЮДИ.ИД
                ) t
            where t.ИД in ( 
                    select ИД from Н_ЛЮДИ
                                where ИД > 170000 
            ) and  t.СРД not in (
                    select max(СРД)
                            from ( 
                                select ФАМИЛИЯ,Н_ЛЮДИ.ИД, avg(ОЦЕНКА) СРД
                                    from Н_ЛЮДИ join Н_ВЕДОМОСТИ on Н_ЛЮДИ.ИД = Н_ВЕДОМОСТИ.ЧЛВК_ИД
                                where regexp_like(ОЦЕНКА, '^[0-9]$')
                                group by ФАМИЛИЯ,Н_ЛЮДИ.ИД
                            ) q  
                        where ( 
                                select count(ФАМИЛИЯ) from Н_ЛЮДИ 
                                        where q.ФАМИЛИЯ = ФАМИЛИЯ) > 1
                        and t.ФАМИЛИЯ = ФАМИЛИЯ
                        group by ФАМИЛИЯ
            ) and rownum <= 7
            order by ФАМИЛИЯ,ИМЯ,ОТЧЕСТВО;
    \end{verbatim}
12.
    \begin{verbatim}
        select 'Оценки 4 и 5 во всем университете', 
                to_char(round(avg(ОЦЕНКА),2)) Средняя_оценка, 
                to_char(count(ОЦЕНКА)) Количество_оценок 
            from Н_ВЕДОМОСТИ 
            where ОЦЕНКА in('4','5')
        union select 'Оценки зачёт в произвольном уч.году', 
                '-' Средняя_оценка, 
                to_char(count(ОЦЕНКА)) Количество_оценок 
            from Н_ВЕДОМОСТИ 
            where ОЦЕНКА like 'зачет' and 
                        ДАТА between to_date('01-09-2013', 'dd-mm-yyyy') and
                                        to_date('21-06-2014', 'dd-mm-yyyy') 
        union select 'Расстояние Левенштейна от 10 чел. c оценками 3,4,5',
                to_char(utl_match.edit_distance('Куклина', ФАМИЛИЯ)) Средняя_оценка,
                '-' Количество_оценок
            from Н_ЛЮДИ join Н_ВЕДОМОСТИ on Н_ЛЮДИ.ИД = Н_ВЕДОМОСТИ.ЧЛВК_ИД
            where ОЦЕНКА in ( '3', '4', '5') and rownum <= 10;
    \end{verbatim}
13.
    \begin{verbatim}
        select ФАМИЛИЯ,ИМЯ,ОТЧЕСТВО
            from Н_ЛЮДИ
            where ИД in ( 
                select ЧЛВК_ИД from Н_ВЕДОМОСТИ
                    where ОЦЕНКА in ( '3', '4' ) 
                    and ДАТА between to_date( '01-09-2015', 'dd-mm-yyyy') 
                                and to_date( '20-08-2016', 'dd-mm-yyyy') 
            )
            order by ФАМИЛИЯ, ИМЯ, ОТЧЕСТВО;
    \end{verbatim}
14.
    \begin{verbatim}

        select ФАМИЛИЯ, ИМЯ, ОТЧЕСТВО
            from Н_ЛЮДИ p
        where (
            select sum(ОЦЕНКА)
                from Н_ВЕДОМОСТИ
            where  p.ИД = Н_ВЕДОМОСТИ.ЧЛВК_ИД and regexp_like(ОЦЕНКА, '^[2-5]$')
            group by ЧЛВК_ИД
        ) >= (
            select 9 * REGEXP_COUNT(a,'9') + 8 * REGEXP_COUNT(a,'8') 
                    + 7 * REGEXP_COUNT(a,'7') + 6 * REGEXP_COUNT(a,'6') 
                    + 5 * REGEXP_COUNT(a,'5') + 4 * REGEXP_COUNT(a,'4') 
                    + 3 * REGEXP_COUNT(a,'3') + 2 * REGEXP_COUNT(a,'2') 
                    + 1 * REGEXP_COUNT(a,'1') 
                from ( select ИД a from Н_ЛЮДИ where ИД = 182349) 
        ) and ФАМИЛИЯ||ИМЯ||ОТЧЕСТВО in ( 
                select ФАМИЛИЯ||ИМЯ||ОТЧЕСТВО from Н_ЛЮДИ n
                    where ( select count(*) from Н_ЛЮДИ 
                                where n.ФАМИЛИЯ = ФАМИЛИЯ 
                                    and n.ИМЯ = ИМЯ
                                    and n.ОТЧЕСТВО = ОТЧЕСТВО 
                                group by ФАМИЛИЯ 
                    ) > 1
                group by ФАМИЛИЯ||ИМЯ||ОТЧЕСТВО
        );
    \end{verbatim}

\end{document}
