Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Введение в СУБД MySQL.doc
Скачиваний:
34
Добавлен:
18.04.2019
Размер:
1.45 Mб
Скачать
  • Рис. 9.10.  Поиск по дате рождения

    Текущие даты

    Ранее мы видели, что текущую дату, месяц и год можно вывести с помощью аргумента CURRENT_DATE предложений DAYOFMONTH(), MONTH() и YEAR(), соответственно. То же самое можно использовать для выборки данных из таблиц.

    select e_id, birth_date

    from employee_per where

    MONTH(birth_date) = MONTH(CURRENT_DATE);

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

    Рис. 9.11.  Поиск по текущему месяцу

    Задания

    1. Вывести идентификаторы, даты рождения и адреса e-mail сотрудников, родившихся в апреле.

    2. Вывести идентификаторы, даты рождения и имена супругов сотрудников, родившихся в 1968 г., и отсортируйте записи на основе имен их супругов.

    3. Выведите идентификаторы сотрудников, родившихся в текущем месяце.

    4. Сколько в базе данных имеется уникальных годов рождения?

    5. Вывести список уникальных годов рождения и число сотрудников, родившихся в каждом таком году.

    6. Сколько сотрудников родились в каждом месяце? Выдача должна содержать названия месяцев (не номера), и записи должны быть упорядочены по убыванию по месяцам, начиная от наибольшего номера.

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

    1. mysql> select e_id, birth_date, p_email

    2. -> from employee_per

    3. -> where month(birth_date) = 4;

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

    Рис. 9.12.  Сотрудники, родившиеся в апреле

    или

    mysql> select e_id, birth_date, p_email

    -> from employee_per

    -> where MONTHNAME(birth_date) = 'April';

    Результат аналогичен рис. 9.12.

    1. mysql> select e_id, birth_date, s_name

    2. -> from employee_per where

    3. -> YEAR(birth_date) = 1968

    4. -> ORDER BY s_name;

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

    Рис. 9.13.  Сотрудники 1968 года рождения, с сортировкой по именам

    Примечание: Значение NULL показано в самом верху. Более подробно значение NULL будет рассмотрено ниже.

    1. mysql> select e_id from employee_per

    2. -> where month(birth_date) = month(current_date);

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

    Рис. 9.14.  Сотрудники родившиеся в этом месяце

    1. mysql> select distinct year(birth_date) from employee_per;

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

    Рис. 9.15.  Уникальные годы рождения

    1. mysql> select year(birth_date) as Year,

    2. -> count(*) from employee_per

    3. -> GROUP BY Year;

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

    Рис. 9.16.  Количество сотрудников, родившихся в каждом году

    1. mysql> select MONTHNAME(birth_date) AS Month,

    2. -> count(*) AS Number

    3. -> from employee_per

    4. -> GROUP BY Month

    5. -> ORDER BY Number DESC;

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

    Рис. 9.17.  Количество сотрудников, родившихся в каждом месяце

    Тип столбца Null

    В этой лекции мы уже встречались с типом NULL. Теперь рассмотрим его подробнее.

    Тип столбца NULL является специальным значением. Чтобы вставить значение NULL, удалите просто имя столбца из оператора INSERT. Столбцы содержат NULL по умолчанию, если только не определены как NOT NULL. Значение null может использоваться для целочисленных, а также текстовых или двоичных данных.

    NULL нельзя сравнивать с помощью арифметических операторов. Сравнение для NULL можно делать с помощью IS NULL или IS NOT NULL.

    select e_id, children

    from employee_per

    where children IS NOT NULL;

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

    Рис. 9.18.  Сотрудники, имеющие детей

    Приведенная выше команда выводит идентификаторы и количество детей сотрудников, у которых есть дети.

    Задания

    1. Найти и вывести идентификаторы и имена супругов всех сотрудников, которые состоят в браке.

    2. Изменить предыдущее задание так, чтобы вывод был отсортирован по именам супругов.

    3. Сколько имеется сотрудников каждого пола (мужчин и женщин)?

    4. Сколько сотрудников состоят в браке, и сколько холостых?

    5. Найдите общее число детей.

    6. Сделайте уникальные группы по количеству детей и определите число детей каждой группы. Отсортируйте вывод групп по убыванию по количеству детей.

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

    1. mysql> select e_id, s_name

    2. -> from employee_per

    3. -> where m_status = 'Y';

    4. или

    5. mysql> select e_id, s_name

    6. -> from employee_per

    7. -> where s_name IS NOT NULL;

    8. mysql> select e_id, s_name

    9. -> from employee_per

    10. -> where m_status = 'Y'

    11. -> ORDER BY s_name;

    12. mysql> select e_id, s_name

    13. -> from employee_per

    14. -> where s_name IS NOT NULL

    15. -> ORDER BY s_name;

    16. mysql> select sex, count(*)

    17. -> from employee_per

    18. -> GROUP BY sex;

    19. mysql> select m_status, count(*)

    20. -> from employee_per

    21. -> GROUP BY m_status;

    22. mysql> select sum(children) from employee_per;

    23. mysql> select children, count(*) AS

    24. -> number from employee_per

    25. -> GROUP BY children

    26. -> ORDER BY children DESC;

  • 10. Лекция: Работа со строками

  • Строковые функции

    • ASCII(строка)

    • ORD(строка)

    • BIN(N)

    • ВIT_LENGTH(строка)

    • CHAR(iV,...)

    • CHAR_LENGTH(строка)

    • CHARACTER_LENGTH(строка)

    • COMPRESS(строка_для_сжатия)

    • CONCAT(строка1, строка2, ...)

    • CONCAT_WS(разделитель, строка1, строка2, ...)

    • CONV(N, основание_начальное, основание_конечное)

    • ELT(N, строка1, строка2, строкаЗ, ...)

    • FIELD(строка, строка1, строка2, строка3, ...)

    • FIND_IN_SET(строка, список_строк)

    • HEX(Ч_или_С)

    • INSERT(строка, позиция, длина, новая_строка)

    • INSTR(строка, подстрока)

    • LEFT(строка, длина)

    • LENGTH(строка)

    • LOAD_FILE(имя_файла)

    • LOCATE(подстрока, строка)

    • LOCATE(подстрока, строка, позиция)

    • POSITION(подстрока IN строка)

    • LOWER(строка)

    • LCASE(строка)

    • LPAD(строка, длина, строка-заполнитель).

    • LTRIM(строка)

    • OCT(N)

    • QUOTE(строка)

    • REPEAT(строка, количество)

    • REPLACE(строка, строка_2, строка_3)

    • REVERSE(строка)

    • RIGHT(строка, длина)

    • RPAD(строка, длина, строка-заполнитель)

    • RTRIM(строка)

    • SOUNDEX(строка)

    • SPACE(N)

    • SUBSTRING(строка, позиция)

    • SUBSTRING(строка FROM позиция)

    • SUBSTRING(строка, позиция, длина)

    • SUBSTRING(строка FROM позиция FOR длина)

    • SUBSTRING_INDEX(строка, разделитель, количество)

    • TRIM([[BOTH | LEADING | TRAILING] [удаляемая_строка] FROM] строка)

    • UNCOMPRESS(строка_для_распаковки)

    • UNHEX(строка)

    • UPPER(строка)

    • UCASE(строка)

  • Функции сравнения строк

    • выражение LIKE шаблон [ESCAPE 'символ-отмены']

    • expr REGEXP pat

    • expr RLIKE pat

    • STRCMP(expr1,expr2)

Строковые функции

В этой лекции рассмотрим команды MySql, предназначенные для обработки строковых данных.

Ascii(строка) ord(строка)

Возвращает числовое значение первого символа строки строка. Возвращает 0, если строка является пустой. Возвращает NULL, если строка равна NULL. ASCII()работает с символами в диапазоне кодов от 0 до 255.

mysql> SELECT ASCII('2');

-> 50

mysql> SELECT ASCII(2);

-> 50

mysql> SELECT ASCII('dx');

-> 100

BIN(N)

Возвращает строковое представление двоичного значения N, где N - длинное целое (BIGINT). Это эквивалентно CONV(N, 10,2). ВозвращаетNULL, если N равно NULL.

mysql> SELECT BIN(12);

-> '1100'

ВIT_LENGTH(строка)

Возвращает длину строки строка в битах.

mysql> SELECT BIT_LENGTH('text');

-> 32

CHAR(iV,...)

Интерпретирует аргументы как целые и возвращает строку, состоящую из символов с кодами, заданными этими целыми. Значение NULLпропускаются.

mysql> SELECT CHAR(77,121,83,81,'76');

-> 'MySQL'

mysql > SELECT CHAR(77,77.3,'77.3');

-> 'МММ'

CHAR_LENGTH(строка)

CHARACTER_LENGTH(строка)

Возвращает длину строки строка, измеренную в символах. Многобайтные символы считаются как один. Это значит, что для строки, состоящей из пяти двухбайтных символов, LENGTH() вернет 10, в то время какCHAR_LENGTH('') вернет 5.

COMPRESS(строка_для_сжатия)

Сжимает строку. Эта функция требует, чтобы MySQL был скомпилирован с библиотекой поддержки сжатия, такой как zlib. В противном случае возвращаемым значением всегда будет NULL.

Содержимое сжатой строки сохраняется следующим образом:

  • Пустая строка сохраняется как пустая строка.

  • Непустая строка сохраняется как четырехбайтовая длина несжатой строки (младший байт идет первым), за которой следует сжатая строка. Если строка завершается пробелом, добавляется дополнительный символ ' . ' во избежание усечения завершающих пробелов, которое имеет место при сохранении в столбцах CHAR илиVARCHAR. (Использовать для сохранения сжатых строк столбцы CHAR или VARCHAR не рекомендуется. Взамен лучше применять столбцы BLOB).