
- •Концепции баз данных Системы управления файлами
- •Иерархические базы данных
- •Сетевые базы данных
- •Реляционные базы данных
- •Объектно-ориентированные базы данных
- •Объектно-реляционные базы данных
- •Загрузка MySql
- •Проверка исходных требований
- •Выбор версии
- •Инсталляция с помощью менеджера пакетов RedHat Linux
- •Инсталляция в Windows
- •Инсталляция вручную
- •Компиляция программы
- •Предоставление привилегий
- •Создание базы данных в Windows
- •Создание базы данных в Linux
- •Команда create database
- •Работа с таблицами
- •Использование базы данных
- •Создание таблицы
- •Синтаксис команды create table
- •Удаление таблиц
- •Синтаксис команды drop table
- •Числовые типы данных
- •Типы данных даты и времени
- •Типы данных datetime, date и timestamp
- •Тип данных time
- •Тип данных year
- •Символьные типы данных
- •Типы данных char и varchar
- •Типы данных blob и text
- •Тип перечисления enum
- •Тип множества set
- •Выбор правильного типа данных в столбце
- •Требования к памяти для различных типов столбцов
- •Запись данных в таблицы
- •Задания
- •Возможные решения
- •Выборка данных с помощью условий
- •Операторы больше и меньше
- •Задания
- •Возможные решения
- •Поиск текстовых данных по шаблону
- •Задания
- •Возможные решения
- •Предложение having
- •Задание
- •Возможное решение
- •Удаление записей из таблицы
- •Задания
- •Возможные решения
- •Операторы in и between
- •Задания
- •Возможные решения
- •Упорядочивание данных
- •Задания
- •Возможные решения
- •Ограничение количества извлекаемых данных
- •Извлечение подмножеств
- •Задания
- •Возможные решения
- •Ключевое слово distinct
- •Задания
- •Возможные решения
- •Изменение записей
- •Задания
- •Возможные решения
- •Поиск среднего значения и суммы Суммирование значений столбца с помощью функции sum
- •Вычисление среднего значения
- •Задания
- •Возможные решения
- •Работа с датой
- •Особенности типа данных Date
- •Операции с датами
- •Определение диапазонов
- •Строковые функции
- •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(строка)
- •Битовые функции
- •Побитовое или ( | )
- •Побитовое и ( & )
- •Функции шифрования
- •Aes_encrypt(строка, строка_ключа) aes_decrypt(зашифрованная_строка, строка_ключа)
- •Decode(зашифрованная_строка, строка_пароля)
- •Encode(строка, строка_пароля)
- •Des_decrypt(зашифрованная_строка [, строка_ключа])
- •Des_encrypt(строка[, (номер_ключа | строка_ключа)])
- •Encrypt(строка [, нач])
- •Md5(строка)
- •Password(строка)
- •Информационные функции benchmark(количество, выражение)
- •Charset(строка)
- •Coercibility(строка)
- •Collation(строка)
- •Last_insert_id(выражение)
- •Прочие функции
- •Get_lock(строка, таймаут)
- •Inet_aton(выражение)
- •Inet_ntoa(выражение)
- •Is_free_lock(строка)
- •Master_pos_wait(имя_журнала, позиция_в_журнале [, таймаут])
- •Release_lock(строка)
- •Вывод данных из базы данных
- •Создаем ссылки на лету
- •Сохранение данных в базе данных
Задания
Сколько уникальных вариантов зарплаты имеется в компании? Представьте их в убывающем порядке.
Сколько различных имен имеется в базе данных?
Возможные решения
select distinct salary from
employee_data order by salary DESC;
mysql> select distinct f_name from employee_data;
Изменение записей
Команда 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='директор';
На рис. 6.15. приведен результат запроса.
Рис. 6.15. Данные обновлены
Можно проверить эту операцию, выводя данные из таблицы.
select salary, perks from
employee_data WHERE
title = 'директор';
На рис. 6.16. приведен результат запроса.
Рис. 6.16. Данные обновлены
В действительности предыдущую зарплату знать не требуется. Можно воспользоваться арифметическими операторами. Следующий оператор сделает то же самое, при этом исходные данные знать заранее не требуется.
UPDATE employee_data SET
salary = salary + 20000,
perks = perks + 5000
WHERE title='директор';
Результат запроса аналогичен рис. 6.15.
В качестве другого примера можно попробовать изменить название должности "разработчик Web" на "программист Web".
mysql> update employee_data SET
-> title = 'программист Web'
-> WHERE title = 'разработчик Web';
На рис. 6.17. приведен результат запроса.
Рис. 6.17. Данные обновлены
Важно также перед выполнением изменений внимательно изучить часть оператора с условием, так как легко можно изменить не те данные. Оператор UPDATE без условий изменит все данные столбца во всех строках. Надо быть очень осторожным при внесении изменений.
Задания
Измените фамилию Чащина на Петрова. Внесите соответствующие изменения в базу данных.
Название должности "программист мультимедиа" необходимо изменить на "специалист по мультимедиа".
Увеличьте зарплату всем сотрудниками (кроме директора) на 10000.
Возможные решения
mysql> update employee_data SET
-> l_name = 'Петрова'
-> WHERE l_name = 'Чашина';
Примечание: Если бы были еще сотрудники с фамилией Чащина, то эти записи также были бы изменены. В таком случае может помочь столбец emp_id, так как он содержит уникальные значения. Лучше использовать значение emp_id вместоl_name, как в следующем примере:
mysql> update employee_data SET
-> l_name = 'Петрова'
-> WHERE emp_id = 4;
mysql> update employee_data set
-> title = 'специалист по мультимедиа'
-> where title = 'программист мультимедиа';
mysql> update employee_data set
-> salary = salary + 10000
-> where title != 'директор';
Лекция 7.
Поиск минимального и максимального значений
В MySQL имеются встроенные функции для вычисления минимального и максимального значений.
SQL имеет 5 агрегатных функций.
MIN(): минимальное значение
MAX(): максимальное значение
SUM(): сумма значений
AVG(): среднее значений
COUNT(): подсчитывает число записей
В этом параграфе мы рассмотрим поиск минимального и максимального значений столбца.
Минимальное значение
select MIN(salary) from employee_data;
На рис. 7.1. приведен результат запроса.
Рис. 7.1. Поиск минимальной зарплаты
Максимальное значение
select MAX(salary) from employee_data;
На рис. 7.2. приведен результат запроса.
Рис. 7.2. Поиск максимальной зарплаты
Задания
Найдите минимальные надбавки.
Найдите максимальную зарплату среди всех "программистов".
Найдите возраст самого старого "продавца".
Найдите имя и фамилию самого старого сотрудника.
Возможные решения
1. mysql> select MIN(perks) from employee_data;
На рис. 7.3. приведен результат запроса.
Рис. 7.3. Минимальные надбавки
2.
mysql> select MAX(salary) from employee_data
-> where title = 'программист';
На рис. 7.4. приведен результат запроса.
Рис. 7.4. Максимальная зарплата среди программистов
3. mysql> select MAX(age) from employee_data
-> where title = 'продавец';
На рис. 7.5. приведен результат запроса.
Рис. 7.5. Возраст самого старого продавца
4. Вот один из способов сделать без использования агрегатных функций.
mysql> select f_name, l_name, age
-> from employee_data
-> order by age DESC limit 1;
На рис. 7.6. приведен результат запроса.
Рис. 7.6. Имя и фамилия самого старого сотрудника