Введение в СУБД MySQL

Работа с таблицами. Внесение, извлечение, поиск и удаление данных

Разбить на страницы
Показывать лекцию целиком

Запись данных в таблицы

Оператор INSERT заполняет таблицу данными. Вот общая форма INSERT.

INSERT into table_name (column1, column2, ...)
values (value1, value2...);

где table_name является именем таблицы, в которую надо внести данные; column1, column2 и т.д. являются именами столбцов, а value1, value2 и т.д. являются значениями для соответствующих столбцов.

Следующий оператор вносит первую запись в таблицу employee_data, которую мы рассматривали в лекции 3.

INSERT INTO employee_data
(f_name, l_name, title, age, yos, salary, perks, email)
values
("Михаил", "Петров", "директор", 28, 4, 200000,
50000, "misha@yandex.ru");

Как и другие операторы MySQL, эту команду можно вводить на одной строке или разместить ее на нескольких строках.

Несколько важных моментов:

  • Значениями для столбцов f_name, l_name, title и email являются текстовые строки, и они записываются в кавычках.
  • Значениями для age, yos, salary и perks являются числа (целые), и они не имеют кавычек.
  • Можно видеть, что данные заданы для всех столбцов кроме emp_id. Значение для этого столбца задает система MySQL, которая находит в столбце наибольшее значение, увеличивает его на единицу, и вставляет новое значение.
  • Если приведенная выше команда правильно введена в приглашении клиента mysql, то программа выведет сообщение об успешном выполнении, как показано на рис. 5.1.

    (рис 5.1) Ввод данных в таблицу.

    Создание дополнительных записей требует использования отдельных операторов INSERT. Чтобы облегчить эту работу можно поместить все операторы INSERT в файл здесь. Это должен быть обычный текстовый файл с оператором INSERT в каждой строке.

    Заполнение таблицы employee_data данными с помощью файла employee.dat

    В системе Windows

    1) Поместите файл в каталог c:\mysql\bin.

    2) Проверьте, что MySQL работает.

    3) Выполните команду

    mysql employees <employee.dat

    В системе Linux

    1) Перейдите в каталог с файлом данных.

    2) Выполните команду

    mysql employees <employee.dat -u username -p

    3) Введите свой пароль.

    Пусть таблица содержит теперь 21 запись (20 из файла employee.dat и одну, вставленную оператором INSERT в начале лекции).

    Запрос данных из таблицы MySQL

    Таблица employee_data содержит теперь достаточно данных, чтобы можно было начать с ней работать. Запрос данных выполняется с помощью команды MySQL SELECT. Оператор SELECT имеет следующий формат:

    SELECT имена_столбцов from имя_таблицы [WHERE ...условия];

    Часть оператора с условиями является необязательной (мы рассмотрим ее позже). По сути, требуется знать имена столбцов и имя таблицы, из которой извлекаются данные.

    Например, чтобы извлечь имена и фамилии всех сотрудников, выполните следующую команду.

    SELECT f_name, l_name from employee_data;

    Оператор приказывает MySQL вывести все данные из столбцов f_name и l_name. Результат работы оператора представлен на рис. 5.2.

    (рис 5.2) Вывод данных из таблицы

    При ближайшем рассмотрении можно заметить, что данные представлены в том порядке, в котором они были введены. Более того, последняя строка указывает число строк в таблице - 21.

    Чтобы вывести всю таблицу, можно либо ввести имена всех столбцов, либо воспользоваться упрощенной формой оператора SELECT.

    SELECT * from employee_data;

    Символ * в этом выражении означает 'ВСЕ столбцы'. Поэтому этот оператор выводит все строки всех столбцов.

    Рассмотрим ещё один пример.

    SELECT f_name, l_name, age from employee_data;

    Выборка столбцов f_name, l_name и age представлена на рис. 5.3.

    (рис 5.3) Выборка столбцов f_name, l_name и age

    Задания

    1. Напишите оператор SQL для создания новой базы данных с именем addressbook

    2. Какой оператор используется для получения информации о таблице? Как используется этот оператор?

    3. Как получить список всех баз данных, доступных в системе?

    4. Напишите оператор для записи следующих данных в таблицу employee_data

    Имя: Рудольф
       Фамилия: Курочкин
       Должность: Программист
       Возраст: 34
       Стаж работы в компании: 2
       Зарплата: 95000
       Надбавки: 17000
       email: rudolf@yandex.ru

    5. Приведите две формы оператора SELECT, которые будут выводить все данные из таблицы employee_data.

    6. Как извлечь данные столбцов f_name, email из таблицы employee_data?

    7. Напишите оператор для вывода данных из столбцов salary, perks и yos таблицы employee_data.

    8. Как узнать число строк в таблице с помощью оператора SELECT?

    9. Как извлечь данные столбцов salary, l_name из таблицы employee_data?

    Возможные решения

    1. create database addressbook;

    или

    CREATE DATABASE addressbook;

    Примечание: Операторы SQL не различают регистр символов, однако имена таблиц и имена баз данных могут различать регистр символов, в зависимости от используемой операционной системы.

    2. Оператор DESCRIBE, например:

    DESCRIBE employee_data;

    3. SHOW DATABASES; (в приглашении mysql)

    4.

    INSERT INTO employee_data
    (f_name, l_name, title, age, yos, salary, perks, email)
    values
    ("Рудольф", "Курочкин", "программист", 34, 2, 95000, 17000, "rudolf@yandex.ru");

    Примечание: Текстовые строки заключаются в кавычки.

    5. SELECT emp_id, f_name, l_name, title, age, yos, salary, perks, email from employee_data;

    или

    SELECT * from employee_data;

    Вторая форма лучше. Ее легче использовать и труднее ошибиться.

    6. Чтобы вывести данные столбцов f_name и email, используем следующий оператор.

    select f_name, email from employee_data;

    7. SELECT salary, perks, yos from employee_data;

    8. Последняя строка вывода любого оператора SELECT содержит число полученных строк. Поэтому при выводе всех данных в любом столбце (или всех столбцах), последняя строка будет указывать число строк в таблице.

    9. select salary, l_name from employee_data;

    Выборка данных с помощью условий

    Теперь более подробно рассмотрим формат оператора SELECT. Его полный формат имеет вид:

    SELECT имена_столбцов from имя_таблицы [WHERE ...условия];

    В операторе SELECT условия являются необязательными.

    Оператор SELECT без условий выводит все данные из указанных столбцов. Одним из достоинств RDBMS является возможность извлекать данные на основе определенных условий.

    Теперь перейдём к рассмотрению операторов сравнения.

    Операторы сравнения = и !=

    SELECT f_name, l_name from employee_data where f_name = 'Иван';

    Результат запроса приведен на рис. 5.4.

    (рис 5.4) Выборка столбцов с условием для поля "имя".

    Этот оператор выводит имена и фамилии всех сотрудников, которые имеют имя Иван. Отметим, что слово Иван в условии заключено в одиночные кавычки. Можно использовать также двойные кавычки. Кавычки являются обязательными, так как MySQL будет порождать ошибку при их отсутствии. Кроме того сравнения MySQL не различают регистр символов, что означает, что с равным успехом можно использовать "Иван", "иван" и даже "ИвАн".

    SELECT f_name,l_name from employee_data where title="программист";

    Результат запроса приведен на рис. 5.5.

    (рис 5.5) Выборка столбцов с условием для поля "должность"

    Выбирает имена и фамилии всех сотрудников, которые являются программистами.

    SELECT f_name, l_name from employee_data where age = 32;

    Результат запроса приведен на рис. 5.6.

    (рис 5.6) Выборка столбцов с условием для поля "возраст"

    Это список имен и фамилий всех сотрудников с возрастом 32 года. Вспомните, что тип столбца age был задан как int, поэтому кавычки вокруг 32 не требуются. Это - незначительное различие между текстовым и целочисленным типами столбцов.

    Оператор != означает 'не равно' и является противоположным оператору равенства.

    Операторы больше и меньше

    Давайте получим имена и фамилии всех сотрудников, которые старше 32 лет.

    SELECT f_name, l_name from employee_data where age > 32;

    Результат запроса приведен на рис. 5.7.

    (рис 5.7) Выборка столбцов с условием "больше" для поля "возраст"

    Попробуем найти сотрудников, которые получают зарплату больше 120000.

    SELECT f_name, l_name from employee_data where salary > 120000;

    Результат запроса приведен на рис. 5.8.

    (рис 5.8) Выборка столбцов с условием "больше" для поля "зарплата"

    Теперь перечислим всех сотрудников, которые имеют стаж работы в компании менее 3 лет.

    SELECT f_name, l_name from employee_data where yos < 3;

    Результат запроса приведен на рис. 5.9.

    (рис 5.9) Выборка столбцов с условием "меньше" для поля "стаж"

    Операторы <= и >=

    Используемые в основном с целочисленными данными операторы меньше или равно ( <= ) и больше или равно ( >= ) обеспечивают дополнительные возможности.

    select f_name, l_name, age, salary
    from employee_data where age >= 32;

    Результат запроса приведен на рис. 5.10.

    (рис 5.10) Выборка столбцов с условием "больше или равно" для поля "возраст"

    Выборка содержит имена, возраст и зарплаты сотрудников, которым больше 32 лет.

    select f_name, l_name from employee_data where yos <= 2;

    Результат запроса приведен на рис. 5.11.

    (рис 5.11) Выборка столбцов с условием "меньше или равно" для поля "стаж"

    Запрос выводит имена сотрудников, которые работают в компании не более 2 лет.

    Задания

    1. Напишите оператор SELECT для извлечения идентификационного номера сотрудников, которые старше 30 лет.

    2. Напишите оператор SELECT для извлечения имен и фамилий всех Web-разработчиков.

    3. Что выведет следующий оператор SELECT:

    SELECT * from employee_data where salary <=100000;

    4. Как вывести зарплаты и надбавки сотрудников, которые получают в качестве надбавок более 16000?

    5. Перечислите имена всех сотрудников (фамилия, а затем имя), которые занимают должность бухгалтера.

    Возможные решения

    1. select emp_id from employee_data where age > 30;

    2. select f_name, l_name from employee_data where title='Web-разработчик';

    3. Следующий оператор выводит всю информацию о сотрудниках, которые получают зарплату не больше 100000.

    SELECT * from employee_data where salary <=100000;

    4. select salary, perks from employee_data where perks > 16000;

    5. select l_name, f_name from employee_data where title = 'бухгалтер';

    Поиск текстовых данных по шаблону

    В данной части мы рассмотрим поиск текстовых данных по шаблону с помощью предложения where и оператора LIKE.

    Оператор сравнения на равенство ( = ) помогает выбрать одинаковые строки. Таким образом, чтобы перечислить имена сотрудников, которых зовут Иван, можно воспользоваться следующим оператором SELECT.

    select f_name, l_name from employee_data where f_name = "Иван";

    Результат запроса приведен на рис. 5.12.

    (рис 5.12) Результат поиска сотрудников, которых зовут Иван

    Как быть, если надо вывести данные о сотрудниках, имя которых начинается с буквы В? Язык SQL позволяет выполнить поиск строковых данных по шаблону. Для этого в предложении where используется оператор LIKE следующим образом.

    select f_name, l_name from employee_data where f_name LIKE "В%";

    Результат запроса приведен на рис. 5.13.

    (рис 5.13) Результат поиска сотрудников, имя которых начинается с буквы В

    Можно видеть, что здесь в условии вместо знака равенства используется LIKE и знак процента в шаблоне.

    Знак % действует как символ-заместитель (аналогично использованию * в системах DOS и Linux). Он заменяет собой любую последовательность символов. Таким образом "В%" обозначает все строки, которые начинаются с буквы В. Аналогично "%В" выбирает строки, которые заканчиваются символом В, а "%В%" строки, которые содержат букву В.

    Давайте выведем, например, всех сотрудников, которые имеют в названии должности строку "про".

    select f_name, l_name, title from employee_data
    where title like '%про%';

    Результат запроса приведен на рис. 5.14.

    (рис 5.14) Результат поиска сотрудников, в названии должности которых содержится строка "про"

    Перечислим всех сотрудников, имена которых заканчиваются буквой 'а'. Это очень просто сделать.

    mysql> select f_name, l_name from employee_data
    where f_name like '%a';

    Результат запроса приведен на рис. 5.15.

    (рис 5.15) Результат поиска сотрудников, имена которых заканчиваются буквой 'а'

    Задания

    1. Перечислить всех сотрудников, фамилии которых начинаются с буквы P.

    2. Вывести имена всех сотрудников в отделе продаж.

    3. Что выведет следующий оператор

    SELECT f_name, l_name, salary from
    employee_data where f_name like '%к%';

    4. Перечислить фамилии и должности всех программистов

    Возможные решения

    1. select l_name, f_name from employee_data where l_name like 'P%';

    2. select f_name, l_name from employee_data where title like '%продавец%';

    3. Этот оператор выводит имена, фамилии и заплаты всех сотрудников, у которых имя содержит букву 'к'.

    SELECT f_name, l_name, salary from employee_data where f_name like '%к%';

    4. SELECT l_name, title from employee_data where title like '%программист%';

    Предложение 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) Результат удаления записи из таблицы
    Страницы:

    Запись данных в таблицы

    Оператор INSERT заполняет таблицу данными. Вот общая форма INSERT.

    INSERT into table_name (column1, column2, ...)
    values (value1, value2...);

    где table_name является именем таблицы, в которую надо внести данные; column1, column2 и т.д. являются именами столбцов, а value1, value2 и т.д. являются значениями для соответствующих столбцов.

    Следующий оператор вносит первую запись в таблицу employee_data, которую мы рассматривали в лекции 3.

    INSERT INTO employee_data
    (f_name, l_name, title, age, yos, salary, perks, email)
    values
    ("Михаил", "Петров", "директор", 28, 4, 200000,
    50000, "misha@yandex.ru");

    Как и другие операторы MySQL, эту команду можно вводить на одной строке или разместить ее на нескольких строках.

    Несколько важных моментов:

  • Значениями для столбцов f_name, l_name, title и email являются текстовые строки, и они записываются в кавычках.
  • Значениями для age, yos, salary и perks являются числа (целые), и они не имеют кавычек.
  • Можно видеть, что данные заданы для всех столбцов кроме emp_id. Значение для этого столбца задает система MySQL, которая находит в столбце наибольшее значение, увеличивает его на единицу, и вставляет новое значение.
  • Если приведенная выше команда правильно введена в приглашении клиента mysql, то программа выведет сообщение об успешном выполнении, как показано на рис. 5.1.

    (рис 5.1) Ввод данных в таблицу.

    Создание дополнительных записей требует использования отдельных операторов INSERT. Чтобы облегчить эту работу можно поместить все операторы INSERT в файл здесь. Это должен быть обычный текстовый файл с оператором INSERT в каждой строке.

    Заполнение таблицы employee_data данными с помощью файла employee.dat

    В системе Windows

    1) Поместите файл в каталог c:\mysql\bin.

    2) Проверьте, что MySQL работает.

    3) Выполните команду

    mysql employees <employee.dat

    В системе Linux

    1) Перейдите в каталог с файлом данных.

    2) Выполните команду

    mysql employees <employee.dat -u username -p

    3) Введите свой пароль.

    Пусть таблица содержит теперь 21 запись (20 из файла employee.dat и одну, вставленную оператором INSERT в начале лекции).

    Запрос данных из таблицы MySQL

    Таблица employee_data содержит теперь достаточно данных, чтобы можно было начать с ней работать. Запрос данных выполняется с помощью команды MySQL SELECT. Оператор SELECT имеет следующий формат:

    SELECT имена_столбцов from имя_таблицы [WHERE ...условия];

    Часть оператора с условиями является необязательной (мы рассмотрим ее позже). По сути, требуется знать имена столбцов и имя таблицы, из которой извлекаются данные.

    Например, чтобы извлечь имена и фамилии всех сотрудников, выполните следующую команду.

    SELECT f_name, l_name from employee_data;

    Оператор приказывает MySQL вывести все данные из столбцов f_name и l_name. Результат работы оператора представлен на рис. 5.2.

    (рис 5.2) Вывод данных из таблицы

    При ближайшем рассмотрении можно заметить, что данные представлены в том порядке, в котором они были введены. Более того, последняя строка указывает число строк в таблице - 21.

    Чтобы вывести всю таблицу, можно либо ввести имена всех столбцов, либо воспользоваться упрощенной формой оператора SELECT.

    SELECT * from employee_data;

    Символ * в этом выражении означает 'ВСЕ столбцы'. Поэтому этот оператор выводит все строки всех столбцов.

    Рассмотрим ещё один пример.

    SELECT f_name, l_name, age from employee_data;

    Выборка столбцов f_name, l_name и age представлена на рис. 5.3.

    (рис 5.3) Выборка столбцов f_name, l_name и age

    Задания

    1. Напишите оператор SQL для создания новой базы данных с именем addressbook

    2. Какой оператор используется для получения информации о таблице? Как используется этот оператор?

    3. Как получить список всех баз данных, доступных в системе?

    4. Напишите оператор для записи следующих данных в таблицу employee_data

    Имя: Рудольф
       Фамилия: Курочкин
       Должность: Программист
       Возраст: 34
       Стаж работы в компании: 2
       Зарплата: 95000
       Надбавки: 17000
       email: rudolf@yandex.ru

    5. Приведите две формы оператора SELECT, которые будут выводить все данные из таблицы employee_data.

    6. Как извлечь данные столбцов f_name, email из таблицы employee_data?

    7. Напишите оператор для вывода данных из столбцов salary, perks и yos таблицы employee_data.

    8. Как узнать число строк в таблице с помощью оператора SELECT?

    9. Как извлечь данные столбцов salary, l_name из таблицы employee_data?

    Возможные решения

    1. create database addressbook;

    или

    CREATE DATABASE addressbook;

    Примечание: Операторы SQL не различают регистр символов, однако имена таблиц и имена баз данных могут различать регистр символов, в зависимости от используемой операционной системы.

    2. Оператор DESCRIBE, например:

    DESCRIBE employee_data;

    3. SHOW DATABASES; (в приглашении mysql)

    4.

    INSERT INTO employee_data
    (f_name, l_name, title, age, yos, salary, perks, email)
    values
    ("Рудольф", "Курочкин", "программист", 34, 2, 95000, 17000, "rudolf@yandex.ru");

    Примечание: Текстовые строки заключаются в кавычки.

    5. SELECT emp_id, f_name, l_name, title, age, yos, salary, perks, email from employee_data;

    или

    SELECT * from employee_data;

    Вторая форма лучше. Ее легче использовать и труднее ошибиться.

    6. Чтобы вывести данные столбцов f_name и email, используем следующий оператор.

    select f_name, email from employee_data;

    7. SELECT salary, perks, yos from employee_data;

    8. Последняя строка вывода любого оператора SELECT содержит число полученных строк. Поэтому при выводе всех данных в любом столбце (или всех столбцах), последняя строка будет указывать число строк в таблице.

    9. select salary, l_name from employee_data;

    Выборка данных с помощью условий

    Теперь более подробно рассмотрим формат оператора SELECT. Его полный формат имеет вид:

    SELECT имена_столбцов from имя_таблицы [WHERE ...условия];

    В операторе SELECT условия являются необязательными.

    Оператор SELECT без условий выводит все данные из указанных столбцов. Одним из достоинств RDBMS является возможность извлекать данные на основе определенных условий.

    Теперь перейдём к рассмотрению операторов сравнения.

    Операторы сравнения = и !=

    SELECT f_name, l_name from employee_data where f_name = 'Иван';

    Результат запроса приведен на рис. 5.4.

    (рис 5.4) Выборка столбцов с условием для поля "имя".

    Этот оператор выводит имена и фамилии всех сотрудников, которые имеют имя Иван. Отметим, что слово Иван в условии заключено в одиночные кавычки. Можно использовать также двойные кавычки. Кавычки являются обязательными, так как MySQL будет порождать ошибку при их отсутствии. Кроме того сравнения MySQL не различают регистр символов, что означает, что с равным успехом можно использовать "Иван", "иван" и даже "ИвАн".

    SELECT f_name,l_name from employee_data where title="программист";

    Результат запроса приведен на рис. 5.5.

    (рис 5.5) Выборка столбцов с условием для поля "должность"

    Выбирает имена и фамилии всех сотрудников, которые являются программистами.

    SELECT f_name, l_name from employee_data where age = 32;

    Результат запроса приведен на рис. 5.6.

    (рис 5.6) Выборка столбцов с условием для поля "возраст"

    Это список имен и фамилий всех сотрудников с возрастом 32 года. Вспомните, что тип столбца age был задан как int, поэтому кавычки вокруг 32 не требуются. Это - незначительное различие между текстовым и целочисленным типами столбцов.

    Оператор != означает 'не равно' и является противоположным оператору равенства.

    Операторы больше и меньше

    Давайте получим имена и фамилии всех сотрудников, которые старше 32 лет.

    SELECT f_name, l_name from employee_data where age > 32;

    Результат запроса приведен на рис. 5.7.

    (рис 5.7) Выборка столбцов с условием "больше" для поля "возраст"

    Попробуем найти сотрудников, которые получают зарплату больше 120000.

    SELECT f_name, l_name from employee_data where salary > 120000;

    Результат запроса приведен на рис. 5.8.

    (рис 5.8) Выборка столбцов с условием "больше" для поля "зарплата"

    Теперь перечислим всех сотрудников, которые имеют стаж работы в компании менее 3 лет.

    SELECT f_name, l_name from employee_data where yos < 3;

    Результат запроса приведен на рис. 5.9.

    (рис 5.9) Выборка столбцов с условием "меньше" для поля "стаж"

    Операторы <= и >=

    Используемые в основном с целочисленными данными операторы меньше или равно ( <= ) и больше или равно ( >= ) обеспечивают дополнительные возможности.

    select f_name, l_name, age, salary
    from employee_data where age >= 32;

    Результат запроса приведен на рис. 5.10.

    (рис 5.10) Выборка столбцов с условием "больше или равно" для поля "возраст"

    Выборка содержит имена, возраст и зарплаты сотрудников, которым больше 32 лет.

    select f_name, l_name from employee_data where yos <= 2;

    Результат запроса приведен на рис. 5.11.

    (рис 5.11) Выборка столбцов с условием "меньше или равно" для поля "стаж"

    Запрос выводит имена сотрудников, которые работают в компании не более 2 лет.

    Задания

    1. Напишите оператор SELECT для извлечения идентификационного номера сотрудников, которые старше 30 лет.

    2. Напишите оператор SELECT для извлечения имен и фамилий всех Web-разработчиков.

    3. Что выведет следующий оператор SELECT:

    SELECT * from employee_data where salary <=100000;

    4. Как вывести зарплаты и надбавки сотрудников, которые получают в качестве надбавок более 16000?

    5. Перечислите имена всех сотрудников (фамилия, а затем имя), которые занимают должность бухгалтера.

    Возможные решения

    1. select emp_id from employee_data where age > 30;

    2. select f_name, l_name from employee_data where title='Web-разработчик';

    3. Следующий оператор выводит всю информацию о сотрудниках, которые получают зарплату не больше 100000.

    SELECT * from employee_data where salary <=100000;

    4. select salary, perks from employee_data where perks > 16000;

    5. select l_name, f_name from employee_data where title = 'бухгалтер';

    Поиск текстовых данных по шаблону

    В данной части мы рассмотрим поиск текстовых данных по шаблону с помощью предложения where и оператора LIKE.

    Оператор сравнения на равенство ( = ) помогает выбрать одинаковые строки. Таким образом, чтобы перечислить имена сотрудников, которых зовут Иван, можно воспользоваться следующим оператором SELECT.

    select f_name, l_name from employee_data where f_name = "Иван";

    Результат запроса приведен на рис. 5.12.

    (рис 5.12) Результат поиска сотрудников, которых зовут Иван

    Как быть, если надо вывести данные о сотрудниках, имя которых начинается с буквы В? Язык SQL позволяет выполнить поиск строковых данных по шаблону. Для этого в предложении where используется оператор LIKE следующим образом.

    select f_name, l_name from employee_data where f_name LIKE "В%";

    Результат запроса приведен на рис. 5.13.

    (рис 5.13) Результат поиска сотрудников, имя которых начинается с буквы В

    Можно видеть, что здесь в условии вместо знака равенства используется LIKE и знак процента в шаблоне.

    Знак % действует как символ-заместитель (аналогично использованию * в системах DOS и Linux). Он заменяет собой любую последовательность символов. Таким образом "В%" обозначает все строки, которые начинаются с буквы В. Аналогично "%В" выбирает строки, которые заканчиваются символом В, а "%В%" строки, которые содержат букву В.

    Давайте выведем, например, всех сотрудников, которые имеют в названии должности строку "про".

    select f_name, l_name, title from employee_data
    where title like '%про%';

    Результат запроса приведен на рис. 5.14.

    (рис 5.14) Результат поиска сотрудников, в названии должности которых содержится строка "про"

    Перечислим всех сотрудников, имена которых заканчиваются буквой 'а'. Это очень просто сделать.

    mysql> select f_name, l_name from employee_data
    where f_name like '%a';

    Результат запроса приведен на рис. 5.15.

    (рис 5.15) Результат поиска сотрудников, имена которых заканчиваются буквой 'а'

    Задания

    1. Перечислить всех сотрудников, фамилии которых начинаются с буквы P.

    2. Вывести имена всех сотрудников в отделе продаж.

    3. Что выведет следующий оператор

    SELECT f_name, l_name, salary from
    employee_data where f_name like '%к%';

    4. Перечислить фамилии и должности всех программистов

    Возможные решения

    1. select l_name, f_name from employee_data where l_name like 'P%';

    2. select f_name, l_name from employee_data where title like '%продавец%';

    3. Этот оператор выводит имена, фамилии и заплаты всех сотрудников, у которых имя содержит букву 'к'.

    SELECT f_name, l_name, salary from employee_data where f_name like '%к%';

    4. SELECT l_name, title from employee_data where title like '%программист%';

    Предложение 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) Результат удаления записи из таблицы
    Вернуться к учебному плану