- •Отличие sql от процедурных языков программирования
- •Используемые термины и обозначения
- •Выборка данных с использование предложения select
- •Простейшие select-запросы
- •Операторы in, between, like, is null
- •2)Упорядочить выводимый список предметов обучения по значениям семестра, а внутри семестра по наименованию предмета.
Операторы in, between, like, is null
При задании логического условия в предложении where могут быть использованы операторы IN, BETWEEN, LIKE, IS NULL. Операторы in (равен любому из списка) и not in (не равен ни одному из списка) используются для сравнения проверяемого значения поля с заданным списком. Этот список значений указывается в скобках справа от оператора in. Построенный с использованием in предикат считается истинным, если значение поля, имя которого указано слева от in, совпадает с одним из значений, перечисленных в списке.
Предикат, построенный с использованием not in считается истинным, если значение поля не совпадает ни с одним из значений, перечисленных в списке.
Пример: получить из таблицы exam_marks сведения о студентах, имеющих оценки 9 и 10.
Select name, surname
From exam_marks
Where mark in (9,10)
Получить сведения о студентах, не имеющих ни одной оценки, равной 9 или 10:
Select name, surname
From exam_marks
Where mark not in (9,10)
Оператор Between
Используется для проверки условия вхождения значения поля в заданный интервал. Т.е. вместо списка значений атрибута этот оператор задает границы его изменения.
Пример: вывести информацию о предметах, на изучение которых отводится количество часов находящееся в пределах между 20 и 40.
Select *
From subject
Where hour between 30 and 40;
Оператор Like
Оператор Like применим только к символьным полям. Этот оператор просматривает строковые значения полей с целью определения входит ли заданная в операторе like строка в символьную строку проверяемого поля. Для выборки строковых значений по заданному образцу подстроки можно применять шаблон искомого образца строки, использующий следующие символы:
_ - определяет возможность наличия в указанном месте одного любого символа.
% - допускает присутствие в указанном месте проверяемой строки последовательности любых символов произвольной длинны.
Пример: написать запрос выбирающий информацию о студентах фамилии, которых начинаются с буквы Р.
Select *
From student
Where surname like ‘Р%’;
В случае необходимости включение в образец самих символов _ и % применяют т.н. escape символы. Например, можно задать образец поиска с помощью следующего выражения: like ‘_\_P’ escape’_\’. В этом выражении символ backslash с помощью ключевого слова escape объявляется escape-символом. Первый символ _ будет соответствовать, как и ранее любому символу проверяемой строки, однако второй символ _, следующий после символа backslash объявленного escape-символом уже будет интерпретироваться буквально как обычный символ. Замечание: рассмотренные выше операторы сравнения и операторы in, between, like нельзя использовать для проверки содержимого поля на пустое значение.
Select *
From student
Where surname is null;
Преобразование вывода и встроенные функции
В SQL реализованы операторы преобразования данных и встроенные функции, предназначенные для работы со значениями столбцов и\или константами выражений. Использование этих операторов допустимо в запросах везде, где допустимы выражения.
Числовые и символьные константы
Несмотря на то, что SQL работает с данными понятий строк и столбцов таблиц имеется возможность применения значений и выражений построенных с использованием встроенных функций, констант, имен столбцов определяемых как своего рода виртуальные столбцы. Они помещаются в списке столбцов и могут сопровождаться псевдонимами. Если в запросе вместо спецификации столбца SQL обнаруживает число, то оно интерпретируется как числовая константа. Символьные константы должны указываться в одинарных кавычках.
Пример:
Select ‘Фамилия’, surname, ‘Имя’, name, 100
From student;
Арифметические операции для преобразования числовых данных
Можно использовать следующие арифметические операции: унарный минус, плюс, минус, умножить, разделить.
Например:
Select surname, name, -(stipend*kurs)/2 as result
From student
Where kurs = 4 and stipend >0;
Операция конкатенации строк
Операция конкатенации || позволяет соединять значения двух или более столбцов символьного типа или символьных констант в одну строку. Пример:
Select surname || ‘_’|| name
From student;
Агрегирование и групповые функции
Агрегирующие функции позволяют получать из таблицы сводную информацию, выполняя операции над группой строк таблицы. Для задания в SELECT-запросе агрегирующих операций используют следующие ключевые слова:
Count – определяет количество строк или значений поля выбранных посредством запроса и не являющихся null-значениями.
Sum – вычисляет арифметическую сумму всех выбранных значений поля.
Avg – вычисляет среднее значение для всех выбранных значений поля.
Min – вычисляет наименьшее из всех выбранных значений поле.
Max – вычисляет наибольшее их всех выбранных значений поле.
В SELECT-запросе агрегирующие функции используются аналогично именам полей, при этом имена полей используются в качестве аргументов этих функций.
Пример: 1)определить среднее значение поля mark по всем записям таблицы exam_mark:
Select avg(mark)
From exam_mark;
2)Посчитать количество строк в таблице:
Select count(*)
From exam_mark;
Аргументы distinct и all позволяют соответственно исключать и включать дубликаты обрабатываемых функцией count значений.
Предложение Group by позволяет группировать записи в подмножества определяемые значениями какого-либо поля применять агрегирующие функции уже не ко всем записям таблицы, а раздельно к каждой сформированной группе.
Пример: найти максимальное значение оценки полученной в результате экзаменов каждым студентом.
Select student_id, max(mark)
From exam_mark
Group by student_id;
В конструкции Group by для группирования может быть использовано более одного столбца.
Select student_id, max(mark), subject_id
From exam_mark
Group by student_id, subject_id;
Таким образом, предложение Group be не только устанавливает столбцы, по которым осуществляется группирование, но и указывает порядок разбиения столбцов на группы.
При необходимости часть сформированных с помощью Group by групп может быть исключена с помощью предложение Having. Предложение Having определяет критерий по которому в группы следует включать выходные данные по аналогии с предложением Where? Которое осуществляет это для отдельных строк.
Пример:
Select subj_name, max(hour)
From subject
Group by subject_name
Having max(hour)>=72;
Замечание: в условии, задаваемом предложением Having, указывают только поля или выражения, которые на выходе имеют единственное значение для каждой выводимой группы.
Упорядочение выходных полей
Записи в реляционной БД не упорядочены. Однако в результате выполнения запроса данные можно упорядочить. Для этого используется оператор Order by, который позволяет упорядочивать выводимые записи в соответствии со значениями одного или нескольких выбранных столбцов. При этом можно задать возрастающую (asc) или убывающую (desc) последовательность сортировки.
Пример: 1)выбрать все данные из таблицы, упорядочив их по названию предмета.
Select *;
From subject
Order by subj_name;