0:00
[МУЗЫКА]
[МУЗЫКА] Здравствуйте, уважаемые слушатели!
В прошлых модулях мы с вами изучили, как создаются таблицы,
как описываются ограничения целостности, которые позволяют нам ограничивать
значение конкретных столбцов таблицы и связывать таблицы между собой,
мы рассмотрели с вами демонстрационную базу, наличие которой
позволит вам самостоятельно попробовать все те команды, которые мы изучаем.
Какие команды языка манипулирования данных мы уже знаем?
Мы уже умеем вставлять данные в таблицу при помощи оператора INSERT,
мы умеем изменять их при помощи оператора UPDATE и удалять при
помощи операторов DELETE и TRUNCATE.
Осталось научиться искать данные в таблице.
Для этого существует всего лишь один оператор, который называется SELECT,
но у него есть огромные мощности, огромные возможности, которые позволяют писать
очень сложные запросы, затрагивающие данные нескольких таблиц.
Давайте посмотрим, как пишется оператор SELECT.
При помощи оператора SELECT могут быть реализованы все операции реляционной
алгебры, изученные нами в предыдущем блоке.
Давайте рассмотрим синтаксис оператора SELECT.
Сразу после слова SELECT мы указываем ключевое слово ALL или DISTINCT,
что означает, нужно ли нам факторизовывать результат выборки.
ALL означает, что мы выводим все результаты, а DISTINCT означает,
что нам нужны только единственные строки, если в выборке оказались дубликаты.
После этого мы должны указать имена столбцов.
После ключевого слова FROM мы должны указать имена таблиц,
из которых мы будем делать выборку.
Это может быть одна таблица, а также несколько, перечисленных через запятую.
Перед этим, перед словом from, но после слова select мы должны
указать имена столбцов, которые будут участвовать в нашей выборке.
Если нам нужно выбрать все столбцы нашей таблицы или таблиц,
то мы можем ограничиться символом *, что значит «выбрать все столбцы».
Перед именами столбцов мы можем указать ключевые слова ALL или DISTINCT.
ALL считается по умолчанию, если мы опустили это ключевое слово,
и тогда будут выведены все строки, даже если среди них оказались
одинаковые в нашей выборке, что несколько противоречит строгой реляционной теории,
которая говорит, что в множестве не может быть дубликатов.
Если же мы хотим придерживаться правил теории множества и не
выводить дублирующиеся строки,
то перед именами столбцов мы должны указать ключевое слово DISTINCT.
После указания столбцов и имен таблицы мы можем указать
условие выборки: критерии, которые мы пишем после слова WEAR.
Если нам нужно группировать наши значения, то мы используем ключевое слово GROUP BY.
Ключевое слово HAVING позволяет нам наложить условия на группы,
ограничив нашу выборку теми группами, которые отвечают введенным критериям.
Итоговая выборка может быть упорядочена
по возрастанию или убыванию одного или нескольких столбцов.
Если нам нужно упорядочить результаты выборки,
то мы пишем в конце оператора SELECT ORDER BY и дальше перечисляем столбцы,
согласно значению которых мы упорядочиваем нашу выборку.
Если нам нужно ограничить результаты нашей выборки некоторым количеством элементов,
то последним словом, последним параметром в операторе SELECT может
быть слово LIMIT, после которого мы указываем необходимое количество строк.
Рассмотрим простейший пример оператора SELECT.
Из таблицы студентов мы хотим вывести все поля нашей таблицы и все строки.
Для этого мы пишем слово SELECT,
дальше перечисляем все столбцы и пишем FROM имя таблицы «студент».
Этот запрос также может быть выполнен,
если вместо имен полей мы укажем знак *, что означает «все поля».
Приведем простейший пример с переименованием.
В ходе выборки операция SELECT производится над таблицами и результатом
действия оператора SELECT также является таблица.
Откуда брать столбцы результирующей таблицы?
Обычно они совпадают с именами столбцов, которые участвуют в выборке.
Если нам нужно переименовать эти столбцы,
то новые имена столбцов мы указываем сразу после имен столбцов исходных таблиц.
Рассмотрим пример, где мы из таблицы «студент» берем информацию
и вместо STUDENT ID мы именуем столбец словом «номер зачетки».
Следующий пример покажет нам возможности факторизации,
возможности использования ключевого слова DISTINCT.
Напомню вам, что по умолчанию у нас выводятся все
строки результирующей выборки, даже если среди них оказались одинаковые.
Если мы выведем, например, номера групп из таблицы «студент»,
поскольку у нас было множество студентов, обучающихся в одной группе,
то мы увидим столько строк, сколько было студентов,
и номера групп несколько раз будут повторяться.
Если же нам нужно вывести просто номера групп без повторения,
то мы должны указать обязательно слово DISTINCT,
дальше поле GROUP NUMBER из нашей таблицы «студент», и тогда мы видим по одному
разу только перечисленные номера групп, которые присутствуют в нашей таблице.
Рассмотрим простейший пример с вычислением.
В ходе выборки из таблицы мы можем создавать вычисляемые поля.
В данном примере, который вы видите на экране,
мы берем из таблицы «студент» идентификатор студента,
его имя и из поля даты рождения мы берем только месяц,
который мы вычисляем при помощи функции MonthName В любой СУБД
есть множество встроенных функций, которые мы можем использовать в своих запросах.
Теперь остановимся подробнее на критериях выборки.
Как мы можем ограничивать нашу выборку,
указывая определенные выражения после слова WEAR?
После слова WEAR могут следовать логические выражения,
выражения на диапазон, принадлежность множеству,
равенство или неравенство незаданному значению.
То есть может или не может значение поля принимать незаданные значения?
А также мы можем использовать там достаточно сложные вложенные запросы.
Рассмотрим пример с логическим выражением.
Мы хотим найти из таблицы «студент» тех людей, у которых день рождения летом.
Для этого мы пишем критерий выборки,
где месяц рождения больше или равен 6 и меньше или равен 8.
Мы видим, что мы связали два простейших логических выражением
булевским оператором «и».
Кроме этого, логические выражения могут быть связаны оператором «или» или
оператором «или» или «не».
Рассмотрим интервальный запрос.
Простейший пример интервального запроса — выдать номера зачеток студентов,
которые получили на экзамене отметки между «3» и «5»,
то есть сдали экзамен с положительной оценкой.
Для этого мы пишем после слова WEAR слово Mark, которое соответствует полю «оценка»,
дальше ключевое слово BETWEEN и дальше мы указываем значение,
которое ограничивает нам искомый интервал.
Следующий запрос: мы хотим найти значение с
незаданным значением какого-то определенного поля.
Возьмем значения из таблицы экзаменационной ведомости,
в которых не определена аудитория.
Напомню вам, что незаданное значение символизируется словом NULL.
Для того чтобы найти такие строки, мы пишем запрос,
где в качестве критерия выборки мы пишем номер аудитории: ClassRoom is NULL.
Обратите внимание, что с нулевым значением сравнение происходит не
по оператору «=», а обязательно с использованием ключевого слова is.
IS NULL — это значит, что принимает незаданное значение, или IS NOT NULL,
что означает, что не принимает незаданное значение.
Следующий запрос, который мы рассмотрим, это запрос с использованием шаблона.
Он применяется только для строковых полей.
Например, мы хотим найти студентов, проживающих на Малом проспекте.
Как создается такой запрос?
Мы пишем после ключевого слова WEAR имя поля,
дальше используем слово LIKE и дальше мы задаем шаблон,
с помощью которого мы будем искать значение полей в таблице.
Для этого есть определенные символы, которые мы можем использовать,
задавая шаблон, процент обозначает любую последовательность символов,
в том числе пустую, подчеркивание означает один любой символ,
при этом символ обязательно должен быть задан.
Есть и другие знаки, которые можно там использовать в этом шаблоне,
но это немножко зависит от выбранной СУБД, от ее особенностей.
В данном случае, для того чтобы найти студентов,
которые проживают на Малом проспекте, мы создаем шаблон знак %,
потом искомое слово и опять знак %, это означает, что в середине
строки в любом месте искомой строки должно присутствовать заданное выражение.
Строковые выражения заключаются в кавычки.
Теперь перейдем к примеру с принадлежностью множеству.
Если мы хотим выбрать значение строк в таблице, некоторые поля которых
принадлежат определенному множеству, мы используем ключевое слово IN.
Для этого после слова WHERE мы пишем имя поля,
после этого слова IN и дальше мы в круглых скобках перечисляем множества,
в которое должно попасть значение столбца в выбранных строках.
Если это числа, то они перечисляются просто через запятую,
если это строковые данные или даты, то они заключаются в одиночные кавычки.
Теперь приведем пример, как упорядочить результаты выборки.
Для того чтобы выводить результат в определенном порядке,
мы указываем ключевое слово ORDER BY и после ORDER BY мы выводим
одно поле или несколько полей через запятую,
указывая порядок по возрастанию или по убыванию, и тогда результирующая
выборка будет упорядочена согласно указанному порядку столбцов.
На экране вы видите слайд,
на котором студенты упорядочены по именам, по алфавиту.
На следующем слайде есть пример,
когда мы ограничиваем результирующую выборку первыми пятью строками.
Для этого мы написали ключевые слова LIMIT и указали количество строк,
которые мы хотим увидеть.
Когда мы указываем столбцы, по которым мы хотим упорядочить выборку,
мы можем использовать не только имена столбцов,
но и просто их порядок таким образом, как они определены в таблице.
После имени или номера поля мы должны указывать,
по возрастанию или по убыванию упорядочивается исходная выборка.
Ключевое слово LIMIT, указанное в конце запроса,
может ограничивать количество выбираемых строк.
Итак, мы с вами рассмотрели простейший случай оператора SELECT.
Дальше мы перейдем с вами к более сложным запросам,
которые могут потребовать использования функции агрегирования,
соединения нескольких таблиц или быть выполнены при помощи вложенных запросов.