- •Типы данных столбцов
- •Пример:
- •То автоматически генерируется уникальный id (то же, если поле id вообще не указывать в команде вставки).
- •Обычно, следует выполнять select для set-столбца, используя оператор like или функцию find_in_set():
- •Но и такая форма также работает:
- •'Yyyy-mm-dd',yy-mm-dd' Например '98-12-31', "98.12.31', '98/12/31'
- •Describe messy # Описать таблицу 'messy'
- •Например, drop table people, animals, plants удалит эти три таблицы. Drop table oh_no, help_me, dont_do_it # Удалить таблицы 'oh_no', 'help_me' и 'dont_do_it'
- •Например, можно указать следующее:
- •Но нельзя указать:
- •Например:
- •Быстрая загрузка данных
- •Синтаксис оператора truncate
- •Примеры:
- •(Например, select name from people; select mydata.People.Name from people ).
- •Подзапросы -- Язык sql разрешает использовать в других операторах языка dml подзапросы, которые являются внутренними запросами, определяемыми оператором select.
- •Применение подзапросов в операторах изменения данных
- •Демонстрируется использование mysql в качестве несложного калькулятора:
- •Проверка таблицы при помощи команды describe:
- •Выборка всех данных
- •Выборка определенных строк. Выборка с условием Из таблицы можно выбрать и только нужные строки, если надо проверить правильность внесенных в дату рождения собаки Bowser изменений:
- •В условиях может указываться любой из столбцов:
- •Условия можно и комбинировать, например для того, чтобы выделить всех собак женского пола:
- •В предыдущем запросе использован оператор and. Существует еще и оператор or:
- •Операторы and и or можно использовать совместно.
- •Выборка определенных столбцов Достаточно просто перечислить имена нужных столбцов, разделив их запятыми.
- •Получить имена владельцев животных можно с помощью следующего запроса:
- •Сократить количество выводимых строк можно, воспользовавшись ключевым словом distinct - тогда будут выводиться только уникальные записи:
- •При помощи выражения where можно комбинировать выбор строк и столбцов. Например для того, чтобы загрузить даты рождения только кошек и собак, можно воспользоваться следующим запросом:
- •Сортировка строк Для этого используется выражение order by.
- •Предположим, нужно узнать, в каком возрасте животные давали приплод:
- •В этом запросе мы указываем псевдонимы имен таблицы, для обращения к столбцам и определения, к какой из таблиц относится каждая ссылка на столбец.
- •Сортировку можно проводить по нескольким столбцам сразу.
- •Отсортировать результаты по возрасту также можно при помощи выражения order by:
- •Этот запрос подсчитывает, сколько различных дней входит в данную комбинацию год/месяц, автоматически исключая дублирующиеся значения.
В этом запросе мы указываем псевдонимы имен таблицы, для обращения к столбцам и определения, к какой из таблиц относится каждая ссылка на столбец.
Для сортировки в обратном порядке к имени столбца следует добавить ключевое слово DESC (по убыванию): mysql> SELECT name, birth FROM pet ORDER BY birth DESC;
name |
birth |
Puffball |
1999-03-30 |
Chirpy |
1998-09-11 |
Whistler |
1997-12-09 |
Slim |
1996-04-29 |
Claws |
1994-03-17 |
Fluffy |
1993-02-04 |
Fang |
1990-08-27 |
Bowser |
1989-08-31 |
Buffy |
1989-05-13 |
Сортировку можно проводить по нескольким столбцам сразу.
mysql> SELECT name, species, birth FROM pet ORDER BY species, birth DESC;
name |
species |
birth |
Chirpy |
bird |
1998-09-11 |
Whistler |
bird |
1997-12-09 |
Claws |
cat |
1994-03-17 |
Fluffy |
cat |
1993-02-04 |
Fang |
dog |
1990-08-27 |
Bowser |
dog |
1989-08-31 |
Buffy |
dog |
1989-05-13 |
Puffball |
hamster |
1999-03-30 |
Slim |
snake |
1996-04-29 |
Вычисление дат
Определить возраст любого из животных в базе можно, если вычислить разницу между текущим годом и годом его рождения, а из результата вычесть единицу, если текущий день находится к началу календаря ближе, нежели день рождения животного. Приведенный ниже запрос выводит дату рождения каждого животного, его возраст и текущую дату.
mysql> SELECT name, birth, CURRENT_DATE, (YEAR(CURRENT_DATE)-YEAR(birth))
-> - (RIGHT(CURRENT_DATE,5)<RIGHT(birth,5)) AS age FROM pet;
name |
birth |
URRENT_DATE |
age |
Fluffy |
1993-02-04 |
2001-08-29 |
8 |
Claws |
1994-03-17 |
2001-08-29 |
7 |
Buffy |
1989-05-13 |
2001-08-29 |
12 |
Fang |
1990-08-27 |
2001-08-29 |
11 |
Bowser |
1989-08-31 |
2001-08-29 |
11 |
Chirpy |
1998-09-11 |
2001-08-29 |
2 |
Whistler |
1997-12-09 |
2001-08-29 |
3 |
Slim |
1996-04-29 |
2001-08-29 |
5 |
Puffball |
1999-03-30 |
2001-08-29 |
2 |
В этом примере функция YEAR() выделяет из даты год, а RIGHT() - пять крайних справа символов, представляющих календарный день (MM-DD). Часть выражения, сравнивающая даты, выдает 1 или 0, что позволяет уменьшить результат на единицу, если текущий день (CURRENT_DATE) находится к началу календаря ближе, нежели день рождения животного.
Упорядочить запрос
mysql> SELECT name, birth, CURRENT_DATE, (YEAR(CURRENT_DATE)-YEAR(birth))
-> - (RIGHT(CURRENT_DATE,5)<RIGHT(birth,5)) AS age FROM pet ORDER BY name;
name |
birth |
CURRENT_DATE |
age |
Bowser |
1989-08-31 |
2001-08-29 |
11 |
Buffy |
1989-05-13 |
2001-08-29 |
12 |
Chirpy |
1998-09-11 |
2001-08-29 |
2 |
Claws |
1994-03-17 |
2001-08-29 |
7 |
Fang |
1990-08-27 |
2001-08-29 |
11 |
Fluffy |
1993-02-04 |
2001-08-29 |
8 |
Puffball |
1999-03-30 |
2001-08-29 |
2 |
Slim |
1996-04-29 |
2001-08-29 |
5 |
Whistler |
1997-12-09 |
2001-08-29 |
3 |