- •Общие сведения Сведения об эумк
- •Методические рекомендации по изучению дисциплины
- •Рабочая учебная программа
- •Учреждение образования
- •«Белорусский государственный университет
- •Информатики и радиоэлектроники»
- •Пояснительная записка
- •Содержание дисциплины
- •1. Название тем лекционных занятий, их содержание, объем в часах.
- •2 Перечень тем ипр их наименование и объем в часах
- •3 Перечень тем контрольных работ их наименование и объем в часах
- •4. Курсовая работа, ее характеристика
- •Перечень тем курсовых работ
- •5. Литература
- •5.1 Основная
- •5.2 Дополнительная
- •6. Перечень компьютерных программ, наглядных и других пособий, методических указаний и материалов и технических средств обучения
- •7. Учебно-методическая карта дисциплины
- •1.1.2. Классификация субд
- •1.2. Субд начального уровня – MySql
- •1.2.1. Введение в MySql
- •1.2.2. Подготовка к работе с MySql
- •1.2.3. Создание базы данных, основы работы с таблицами MySql
- •1.2.4. Типы данных столбцов MySql
- •1.2.5. Работа с таблицами MySql
- •1.2.6. Логические операторы MySql
- •1.2.7. Команды обработки данных MySql
- •1.2.8. Математические функции MySql
- •1.2.9. Работа с датой и временем в MySql
- •1.2.10. Работа со строками в MySql
- •1.2.11. Дополнительные функции MySql
- •1.3. Субд корпоративного уровня – ms sql Server
- •1.3.1. Общая теория запросов sql
- •1.3.2. Имена в sql
- •1.3.3. Типы данных
- •1.3.4. Константы
- •1.3.5. Выражения
- •1.3.6. Встроенные функции
- •1.3.7. Отсутствующие значения (значения null)
- •1.3.8. Простые запросы sql на выборку данных
- •1.3.9. Предложение select
- •1.3.10. Предложение from
- •1.3.11. Вычисляемые столбцы
- •1.3.12. Выборка всех столбцов (инструкция select *)
- •1.3.13. Повторяющиеся строки (предикат distinct)
- •1.3.14. Отбор строк (предложение where)
- •1.3.15. Условия отбора
- •1.3.16. Составные условия отбора (операторы and, or и not)
- •1.3.17. Сортировка результатов запроса (предложение order by)
- •1.3.18. Правила выполнения однотабличных запросов
- •1.3.19. Сложные запросы
- •1.3.20. Запросы на объединение и повторяющиеся строки
- •1.3.21. Запросы на объединение и сортировка
- •1.3.22. Вложенные запросы на объединение
- •1.3.23. Многотабличные запросы на выборку
- •1.3.24. Запросы с использованием отношения предок/потомок
- •1.3.25. Запросы на выборку к трём и более таблицам
- •1.3.26. Объединение таблиц по неравенству
- •1.3.27. Особенности многотабличных запросов
- •1.3.28. Самообъединения
- •1.3.29. Производительность при обработке многотабличных запросов
- •1.3.30. Умножение таблиц
- •1.3.31. Правила выполнения многотабличных запросов на выборку
- •1.3.32. Внешнее объединение таблиц
- •1.3.33. Левое и правое внешние объединения
- •1.4. Способы взаимодействия программных средств в субд
- •1.4.1. Доступ к базе данных на стороне сервера
- •1.4.2. Доступ к базе данных на стороне клиента
- •1.5. Современные тенденции развития субд
- •1.5.1. Введение
- •1.5.2. Как предсказать тенденции развития субд
- •1.5.3. Эволюционный подход
- •1.5.4. Тенденции развития
- •1. Виртуализация ресурсов и grid-технологии
- •2. Встраивание Information Life Cycle Management (ilm) в субд
- •3. Самоуправление, самодиагностика, самолечение
- •4. Real Application Testing – механизмы промышленного тестирования версий и изменений
- •5. Совершенствование архитектур максимальной доступности
- •6. Включение измерения времени в субд
- •7. Поддержка новых типов данных (xml, rfid, Semantic Web, геном, медицина, быстрые lob и т.Д.)
- •8. Умные механизмы сжатия и дедублирования
- •9. Совершенствование методов защиты данных
- •11. Облачные вычисления (Cloud computing)
- •12. Машины баз данных
- •2.1.2. Администрирование ms sql Server
- •2.2. Повышение надёжности баз данных
- •2.2.1. Обеспечение сохранности данных в MySql
- •2.2.2. Обеспечеие сохранности данных в ms sql Server
- •2.3. Повышение производительности баз данных
- •2.3.1. Повышение производительности MySql
- •2.3.2. Повышение производительности ms sql Server
- •2.4. Повышение безопасности бд
- •2.4.1. Безопасность MySql
- •2.4.2. Безопасность ms sql Server
- •2.5. Модернизация бд в процессе эксплуатации
- •2.5.1. Расширение возможностей MySql
- •2.5.2. Распределённые базы данных
- •Указания по выбору варианта
- •Курсовое проектирование Методические указания по выполнению
- •Цель проектирования
- •Теоретические положения Основные понятия баз данных
- •Этапы проектирования базы данных
- •Модели данных
- •Нормальные формы отношений
- •Задания к выполнению курсового проекта
- •Указания по выбору варианта
- •Правила оформления выполненных заданий
- •Пример проектирования базы данных
1.2.6. Логические операторы MySql
В этой лекции мы рассмотрим, как выбрать данные на основе условий SQL, представленных с помощью булевых (логических) операторов.
AND
OR
NOT
Использовать их очень просто. Ниже показан оператор SELECT, который выводит имена сотрудников, которые получают более 70000, но меньше 90000.
SELECT f_name, l_name from employee_data
where salary > 70000 AND salary < 90000;
На рисунке приведен результат запроса.
Рисунок 1.2.6.1 – Имена сотрудников, которые получают более 70000, но меньше 90000
Давайте выведем список сотрудников, фамилии которых начинаются с буквы К или Л.
SELECT l_name from employee_data where
l_name like 'К%' OR l_name like 'Л%';
На рисунке приведен результат запроса.
Рисунок 1.2.6.2 – Сотрудники, фамилии которых начинаются с буквы К или Л
Вот более сложный пример ... список имен и возраста сотрудников, фамилии которых начинаются с К или Л, и которые младше 30 лет.
SELECT f_name, l_name , age from employee_data
where (l_name like 'К%' OR l_name like 'Л%') AND age < 30;
На рисунке приведен результат запроса.
Рисунок 1.2.6.3 – Список имен и возраста сотрудников, фамилии которых начинаются с К или Л, и которые младше 30 лет
Обратите внимание на использование скобок в представленном выше операторе. Скобки предназначены для выделения различных логических условий и удаления двусмысленностей.
Оператор NOT поможет при поиске всех сотрудников, которые не являются программистами. (Программисты включают старших программистов, программистов мультимедиа и программистов).
SELECT f_name, l_name, title from employee_data
where title NOT LIKE "%программист%";
На рисунке приведен результат запроса.
Рисунок 1.2.6.4 – Поиск всех сотрудников, которые не являются программистами
Операторы IN и BETWEEN
Чтобы найти сотрудников, которые являются разработчиками Web или системными администраторами, можно использовать оператор SELECT следующего вида:
SELECT f_name, l_name, title from
-> employee_data where
-> title = 'разработчик Web' OR
-> title = 'системный адм.';
На рисунке приведен результат запроса.
Рисунок 1.2.6.5 – Поиск сотрудников, которые являются разработчиками Web или системными администраторами
В SQL имеется более простой способ сделать это с помощью оператора IN (в множестве). Его использование не представляет никаких трудностей.
SELECT f_name, l_name, title from
-> employee_data where title
-> IN ('разработчик Web', 'системный адм.');
Использование NOT перед IN позволяет вывести данные, которые не входят в множество, определяемое условием IN. Следующий оператор выводит список сотрудников, которые не занимают должность программиста или системного администратора.
SELECT f_name, l_name, title from
-> employee_data where title NOT IN
-> ('программист', 'системный адм.');
Оператор BETWEEN используется для определения целочисленных границ. Поэтому вместо age >= 32 AND age <= 40 можно использовать age BETWEEN 32 AND 40.
select f_name, l_name, age from
-> employee_data where age BETWEEN
-> 32 AND 40;
На рисунке приведен результат запроса.
Рисунок 1.2.6.6 – Поиск сотрудников, возраст которых лежит в промежутке от 32-х до 40 лет
NOT также можно использовать вместе с BETWEEN, как в следующем операторе, который выводит сотрудников, зарплата которых меньше 90000 или больше 150000.
select f_name, l_name, salary
-> from employee_data where salary
-> NOT BETWEEN
-> 90000 AND 150000;
Упорядочивание данных
Рассмотрим вопрос о том, как можно изменить порядок вывода данных, извлеченных из таблиц MySQL, используя предложение ORDER BY оператора SELECT.
Извлекаемые до сих пор данные всегда выводились в том порядке, в котором они были сохранены в таблице. В действительности SQL позволяет сортировать извлеченные данные с помощью предложения ORDER BY. Это предложение требует имя столбца, на основе которого будут сортироваться данные. Давайте посмотрим, как можно вывести имена сотрудников с упорядоченными по алфавиту фамилиями сотрудников (в возрастающем порядке).
SELECT l_name, f_name from
employee_data ORDER BY l_name;
А вот так сотрудников можно отсортировать по возрасту.
SELECT f_name, l_name, age
from employee_data
ORDER BY age;
Предложение ORDER BY может сортировать в возрастающем порядке (ASCENDING или ASC) или в убывающем порядке (DESCENDING или DESC) в зависимости от указанного аргумента.
Чтобы вывести список сотрудников в убывающем порядке, можно использовать следующий оператор.
SELECT f_name from employee_data
ORDER by f_name DESC;
Примечание: Возрастающий порядок (ASC) используется по умолчанию.
Ограничение количества извлекаемых данных
Далее рассмотрим, как ограничить число записей, выводимых оператором SELECT.
По мере увеличения таблиц возникает необходимость вывода только подмножества данных. Это можно добиться с помощью предложения LIMIT.
Например, чтобы вывести из таблицы имена только первых пяти сотрудников, используется оператор LIMIT с аргументом равным 5.
SELECT f_name, l_name from
employee_data LIMIT 5;
На рисунке приведен результат запроса.
Рисунок 1.2.6.7 – Имена первых пяти сотрудников
Это первые пять записей таблицы.
Можно соединить оператор LIMIT с оператором ORDER BY. Таким образом, следующий оператор выведет четверых самых старых сотрудников компании.
SELECT f_name, l_name, age from
employee_data ORDER BY age
LIMIT 4;
На рисунке приведен результат запроса.
Рисунок 1.2.6.8 – Четверо самых старых сотрудников компании
Аналогично можно вывести двух самых младших сотрудников.
SELECT f_name, l_name, age from
employee_data ORDER BY age
LIMIT 2;
На рисунке приведен результат запроса.
Рисунок 1.2.6.9 – Двое самых младших сотрудников
Извлечение подмножеств
LIMIT можно использовать также для извлечения подмножества данных, используя дополнительные аргументы.
Общая форма оператора LIMIT имеет следующий вид:
SELECT (что-нибудь) from таблица LIMIT начальная строка, извлекаемое число записей;
SELECT f_name, l_name from
employee_data LIMIT 6,3;
На рисунке приведен результат запроса.
Рисунок 1.2.6.10 – Извлечение трёх строк начиная с 6-й
Будут извлечены три строки, начиная с шестой.
Ключевое слово DISTINCT
Рассмотрим теперь, как выбрать и вывести записи таблиц MySQL с помощью ключевого слова DISTINCT (РАЗЛИЧНЫЙ), использование которого исключает появление повторяющихся данных.
Чтобы вывести все должности базы данных компании, можно выполнить следующий оператор:
select title from employee_data;
На рисунке приведен результат запроса.
Рисунок 1.2.6.11 – Все должности базы данных компании
Можно видеть, что список содержит повторяющиеся данные. Предложение SQL DISTINCT выводит только уникальные данные. Вот как оно используется.
select DISTINCT title from employee_data;
На рисунке приведен результат запроса.
Рисунок 1.2.6.12 – Все должности базы данных компании без повторов
Из этого можно видеть, что в компании имеется 11 уникальных должностей.
Уникальные записи можно также отсортировать с помощью ORDER BY.
select DISTINCT age from employee_data
ORDER BY age;
На рисунке приведен результат запроса.
Рисунок 1.2.6.13 – Значения возраста сотрудников компании без повторов
DISTINCT часто используется вместе с функцией COUNT, которая будет рассмотрена далее.
Изменение записей
Команда UPDATE выполняет изменение данных в таблицах. Она имеет очень простой формат.
UPDATE имя_таблицы SET
имя_столбца_1 = значение_1,
имя_столбца_2 = значение_2,
имя_столбца_3 = значение_3, ...
[WHERE условия];
Как и все другие команды SQL можно вводить ее на одной строке или на нескольких строках.
Рассмотрим несколько примеров.
Предположим, директор увеличил свою зарплату на 20000 и надбавки на 5000. Его предыдущая зарплата была 200000, а надбавки были 50000.
UPDATE employee_data SET
salary=220000, perks=55000
WHERE title='директор';
На рисунке приведен результат запроса.
Рисунок 1.2.6.14 – Данные обновлены
Можно проверить эту операцию, выводя данные из таблицы.
select salary, perks from
employee_data WHERE
title = 'директор';
На рисунке приведен результат запроса.
Рисунок 1.2.6.15 – Данные обновлены
В действительности предыдущую зарплату знать не требуется. Можно воспользоваться арифметическими операторами. Следующий оператор сделает то же самое, при этом исходные данные знать заранее не требуется.
UPDATE employee_data SET
salary = salary + 20000,
perks = perks + 5000
WHERE title='директор';
В качестве другого примера можно попробовать изменить название должности "разработчик Web" на "программист Web".
mysql> update employee_data SET
-> title = 'программист Web'
-> WHERE title = 'разработчик Web';
На рисунке приведен результат запроса.
Рисунок 1.2.6.16 – Данные обновлены
Важно также перед выполнением изменений внимательно изучить часть оператора с условием, так как легко можно изменить не те данные. Оператор UPDATE без условий изменит все данные столбца во всех строках. Надо быть очень осторожным при внесении изменений.