В этой лекции мы уже встречались с типом NULL. Теперь рассмотрим его подробнее.
Тип столбца NULL является специальным значением. Чтобы вставить значение NULL, удалите просто имя столбца из оператора INSERT. Столбцы содержат NULL по умолчанию, если только не определены как NOT NULL. Значение null может использоваться для целочисленных, а также текстовых или двоичных данных.
NULL нельзя сравнивать с помощью арифметических операторов. Сравнение для NULL можно делать с помощью IS NULL или IS NOT NULL.
select e_id, childrenfrom employee_perwhere children IS NOT NULL;
Результат запроса представлен на рис. 9.18.
Рис. 9.18. Сотрудники, имеющие детей
Приведенная выше команда выводит идентификаторы и количество детей сотрудников, у которых есть дети.
Найти и вывести идентификаторы и имена супругов всех сотрудников, которые состоят в браке.
Изменить предыдущее задание так, чтобы вывод был отсортирован по именам супругов.
Сколько имеется сотрудников каждого пола (мужчин и женщин)?
Сколько сотрудников состоят в браке, и сколько холостых?
Найдите общее число детей.
Сделайте уникальные группы по количеству детей и определите число детей каждой группы. Отсортируйте вывод групп по убыванию по количеству детей.
1. mysql> select e_id, s_name2. -> from employee_per3. -> where m_status = 'Y';
4. или
5. mysql> select e_id, s_name6. -> from employee_per7. -> where s_name IS NOT NULL;8. mysql> select e_id, s_name9. -> from employee_per10. -> where m_status = 'Y'11. -> ORDER BY s_name;12. 13. 14. mysql> select e_id, s_name15. -> from employee_per16. -> where s_name IS NOT NULL17. -> ORDER BY s_name;18. mysql> select sex, count(*)19. -> from employee_per20. -> GROUP BY sex;21. mysql> select m_status, count(*)22. -> from employee_per23. -> GROUP BY m_status;24. mysql> select sum(children) from employee_per;25. mysql> select children, count(*) AS26. -> число from employee_per27. -> GROUP BY children28. -> ORDER BY number DESC;
В этой лекции рассмотрим команды MySql, предназначенные для обработки строковых данных.
ASCII(строка)
ORD(строка)
Возвращает числовое значение первого символа строки строка. Возвращает 0, если строка является пустой. Возвращает NULL, если строка равна NULL. ASCII() работает с символами в диапазоне кодов от 0 до 255.
Возвращает строковое представление двоичного значения 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).
CONCAT(строка1, строка2, ...)
Возвращает строку, которая состоит из сцепленных аргументов. Возвращает NULL, если любой из аргументов равен NULL. Принимает один или более аргументов. Числовой аргумент преобразуется в эквивалентную строковую форму.
CONCAT_WS означает "Concat With Separator" ("CONCAT с разделителем") и представляет собой особую форму CONCAT() . Первый аргумент - это разделитель для остальных аргументов. Разделитель добавляется между соединяемыми строками. Разделитель может быть строкой, как и остальные аргументы. Если разделитель равен NULL, результат тоже равен NULL. Функция пропускает любые аргументы NULL после разделителя.
Конвертирует числа между разными системами счисления. Возвращает строковое представление числа N, преобразованное из системы счисления с основанием основание_начальное в систему счисления с основанием основание_конечное. Возвращает NULL, если любой из аргументов равен NULL. Аргумент N интерпретируется как целое, но может указываться и как целое, и как строка. Минимальное основание системы счисления - 2, максимальное - 36. Если значение основание_конечное отрицательное, N рассматривается как целое со знаком. В противном случае N считается беззнаковым целым. CONV() работает с 64-разрядной точностью.
Возвращает строка1, если N = 1, строка2, если N = 2, и так далее. Возвращает NULL, если N меньше 1 или больше количества аргументов. ELT() - это дополнение FIELD().
Возвращает значение от 1 до N, если строка находится в списке строк список_строк, состоящего из N подстрок. Список строк - это строка, состоящая из подстрок, разделенных символом ',' . Возвращает 0, если строка не входит в список строк, или если список_строк — пустая строка.
mysql> SELECT FIND_IN_SET ('b','a,b,c,d');-> 2
HEX(Ч_или_С)
Если Ч_или_С - число, возвращает строковое представление шестнадцатеричного значения N, где N - длинное целое (BIGINT). Это эквивалентно CONV(N,10,16).
Если Ч_или_С - строка, то возвращается шестнадцатеричная строка Ч_или_С, в которой каждый символ преобразован в два шестнадцатеричных разряда.
Возвращает позицию первого вхождения подстроки подстрока в строку строка. Это то же самое, что двухаргументная форма LOCATE(), только аргументы переставлены местами.
Читает файл и возвращает его содержимое в виде строки. Файл должен находиться на сервере и к нему должен указываться полный путь. Кроме того, необходимо иметь привилегию FILE. Файл должен быть доступен по чтению всем, и иметь размер менее max_allowed_packet байт.
Если файл не существует или не может быть прочитан, функция возвращает NULL.
LOCATE(подстрока, строка)
LOCATE(подстрока, строка, позиция)
POSITION(подстрока IN строка)
Первый синтаксис возвращает позицию первого вхождения подстроки подстрока в строку строка. Второй синтаксис возвращает позицию первого вхождения подстроки подстрока в строку строка, начиная с позиции позиция. Если подстрока не входит в строку, возвращается 0.