- •Лекция: Введение в MySql Содержание
- •Концепции баз данных Системы управления файлами
- •Иерархические базы данных
- •Сетевые базы данных
- •Реляционные базы данных
- •Объектно-ориентированные базы данных
- •Объектно-реляционные базы данных
- •2. Лекция: Подготовка к работе с MySql Содержание
- •Инсталляция вручную
- •Компиляция программы
- •Предоставление привилегий
- •Лекция: Создание базы данных, основы работы с таблицами
- •Создание базы данных в Windows
- •Создание базы данных в Linux
- •Команда create database
- •Работа с таблицами
- •Использование базы данных
- •Создание таблицы
- •Синтаксис команды create table
- •Удаление таблиц
- •Синтаксис команды drop table
- •Лекция: Типы данных столбцов
- •Числовые типы данных
- •Типы данных даты и времени
- •Типы данных datetime, date и timestamp
- •Тип данных time
- •Тип данных year
- •Лекция: Работа с таблицами. Внесение, извлечение, поиск и удаление данных
- •Запись данных в таблицы
- •Задания
- •Возможные решения
- •Выборка данных с помощью условий
- •Операторы больше и меньше
- •Задания
- •Возможные решения
- •Предложение having
- •Задание
- •Возможное решение
- •Удаление записей из таблицы
- •Лекция: Логические операторы
- •Задания
- •Возможные решения
- •8. Лекция: Математические функции
- •9. Лекция: Работа с датой и временем
- •Особенности типа данных Date
- •Операции с датами
- •10. Лекция: Работа со строками
- •Строковые функции
- •Ascii(строка) ord(строка)
- •Concat(строка1, строка2, ...)
- •Concat_ws(разделитель, строка1, строка2, ...)
- •Conv(n, основание_начальное, основание_конечное)
- •Elt(n, строка1, строка2, строкаЗ, ...)
- •Field(строка, строка1, строка2, строка3, ...)
- •Find_in_set(строка, список_строк)
- •Substring_index(строка, разделитель, количество)
- •Trim([[both | leading | trailing] [удаляемая_строка] from] строка)
- •Uncompress(строка_для_распаковки)
- •Unhex(строка)
- •Upper(строка) ucase(строка)
- •11. Лекция: Дополнительные функции MySql
- •Битовые функции
- •Побитовое или ( | )
- •Побитовое и ( & )
- •Функции шифрования
- •Aes_encrypt(строка, строка_ключа) aes_decrypt(зашифрованная_строка, строка_ключа)
- •Decode(зашифрованная_строка, строка_пароля)
- •Encode(строка, строка_пароля)
- •Des_decrypt(зашифрованная_строка [, строка_ключа])
- •Информационные функции benchmark(количество, выражение)
- •Charset(строка)
- •Coercibility(строка)
- •Collation(строка)
- •Прочие функции
- •Get_lock(строка, таймаут)
- •Inet_aton(выражение)
- •Inet_ntoa(выражение)
- •Is_free_lock(строка)
- •Master_pos_wait(имя_журнала, позиция_в_журнале [, таймаут])
- •Release_lock(строка)
Предложение having
Чтобы вывести среднюю зарплату сотрудников в различных подразделениях (должностях), используется предложение GROUP BY, например:
select title, AVG(salary)
from employee_data
GROUP BY title;
Результат запроса приведен на рис. 5.16.
Рис. 5.16. Вывод средней зарплаты сотрудников по подразделениям
Предположим теперь, что требуется вывести только те подразделения, где средняя зарплата более 100000. Это можно сделать с помощью предложения HAVING.
select title, AVG(salary)
from employee_data
GROUP BY title
HAVING AVG(salary) > 100000;
Результат запроса приведен на рис. 5.17.
Рис. 5.17. Вывод средней зарплаты определённого диапазона по подразделениям
Задание
Вывести подразделения и средний возраст, где средний возраст больше 30.
Возможное решение
mysql> select title, AVG(age)
-> from employee_data
-> GROUP BY title
-> HAVING AVG(age) > 30;
Результат запроса приведен на рис. 5.18.
Рис. 5.18. Вывод подразделения и среднего возраста, где средний возраст больше 30 лет
Удаление записей из таблицы
Для удаления записей из таблицы можно использовать оператор DELETE.
Оператор удаления DELETE требует задания имени таблицы и необязательных условий.
DELETE from имя_таблицы [WHERE условия];
Примечание: Если никакие условия не будут заданы, то удаляются все данные в таблице.
Предположим, один из специалистов по мультимедиа 'Василий Пупкин' уволился из компании. Надо удалить его запись.
DELETE from employee_data
WHERE l_name = 'Пупкин';
Результат запроса приведен на рис. 5.19.
Рис. 5.19. Результат удаления записи из таблицы
Лекция: Логические операторы
Задания
Возможные решения
Операторы IN и BETWEEN
Задания
Возможные решения
Упорядочивание данных
Задания
Возможные решения
Ограничение количества извлекаемых данных
Извлечение подмножеств
Задания
Возможные решения
Ключевое слово DISTINCT
Задания
Возможные решения
Изменение записей
Задания
Возможные решения
В этой лекции мы рассмотрим, как выбрать данные на основе условий SQL, представленных с помощьюбулевых (логических) операторов.
AND
OR
NOT
Использовать их очень просто. Ниже показан оператор SELECT, который выводит имена сотрудников, которые получают более 70000, но меньше 90000.
SELECT f_name, l_name from employee_data
where salary > 70000 AND salary < 90000;
На рис. 6.1. приведен результат запроса.
Рис. 6.1. Имена сотрудников, которые получают более 70000, но меньше 90000
Давайте выведем список сотрудников, фамилии которых начинаются с буквы К или Л.
SELECT l_name from employee_data where
l_name like 'К%' OR l_name like 'Л%';
На рис. 6.2. приведен результат запроса.
Рис. 6.2. Сотрудники, фамилии которых начинаются с буквы К или Л
Вот более сложный пример ... список имен и возраста сотрудников, фамилии которых начинаются с К или Л, и которые младше 30 лет.
SELECT f_name, l_name , age from employee_data
where (l_name like 'К%' OR l_name like 'Л%') AND age < 30;
На рис. 6.3. приведен результат запроса.
Рис. 6.3. Список имен и возраста сотрудников, фамилии которых начинаются с К или Л, и которые младше 30 лет
Обратите внимание на использование скобок в представленном выше операторе. Скобки предназначены для выделения различных логических условий и удаления двусмысленностей.
Оператор NOT поможет при поиске всех сотрудников, которые не являются программистами. (Программисты включают старших программистов, программистов мультимедиа и программистов).
SELECT f_name, l_name, title from employee_data
where title NOT LIKE "%программист%";
На рис. 6.4. приведен результат запроса.
Рис. 6.4. Поиск всех сотрудников, которые не являются программистами
И последний пример перед упражнениями.
Показать всех сотрудников со стажем работы в компании более 3 лет, которые старше 30 лет.
select f_name, l_name from employee_data
where yos > 3 AND age > 30;
На рис. 6.5. приведен результат запроса.
Рис. 6.5. Все сотрудники, которые старше 30 лет, и имеют стаж работы более 3 лет