Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Урок 10: CASE и order BY. Урок 11: числа и еще чутка о select. Таблица «sales»: select * FROM sales;. Таблица «users»: select * FROM users;




Урок 10: CASE и ORDER BY

В этой серии мы с вами поговорим о том, как расширить ключевое слово UPDATE используя выражение CASE, а также вы узнаете, как сортировать вывод команды SELECT в алфавитном порядке.

Начнем с расширения команды UPDATE. Можно использовать для уточнения различных условий выражения CASE. По прежнему я использую БД users_db и давайте посмотрим содержимое моей таблицы в этой БД.

mysql> SELECT * FROM users;  

 

id fnames_list lnames_list reputation
Peter Yan
Lola Vin
Jimmy Voode
Грег Эйтсон
Майк Гайден

 

Итак, что нам нужно сделать? Чтобы выучить выражение CASE, мы можем добавить 1 поле, которое будет называться «ранг пользователя». И в дальнейшем, будем присваивать ему этот ранг.

Давайте же попробуем.

Естественно, нам нужно добавить поле, поэтому мы пишем

mysql> ALTER TABLE users ADD COLUMN rank VARCHAR(20) NOT NULL;  

 

id fnames_list lnames_list reputation rank
Peter Yan  
Lola Vin  
Jimmy Voode  
Грег Эйтсон  
Майк Гайден  

Сейчас самое время изучить новое расширение команды UPDATE. Чтобы мы делали, если бы не использовали выражение CASE? А очень просто. Мы бы с вами писали выражения такого типа:

 

mysql> UPDATE users SET rank = 'новичок' WHERE reputation > 500; Нам пришлось бы писать, как минимум, 5 таких команд.

Поэтому давайте изучим конструкцию CASE. Итак, поехали.

mysql> UPDATE users SET rank = CASE WHEN reputation > 350 THEN 'Элита' WHEN reputation > 100 THEN 'Популярный' WHEN reputation > 0 THEN 'Пользователь' WHEN reputation = 0 THEN 'Новичок' ELSE 'Нуб' END; Что тут происходит? У нас начинается обработка каждой записи в таблице users, и просматривается репутация. Каждый раз алгоритм ищет, какое-бы значение присвоить полю rank. Смотрит первую запись и видит репутацию 500 и он начинает по всем условиям. По поводу else: Он нужен, потому что бывают ситуации, когда значение не совпадает ни с одним из условий WHEN.

 

id fnames_list lnames_list reputation rank
Peter Yan Элита
Lola Vin Популярный
Jimmy Voode Пользователь
Грег Эйтсон Новичок
Майк Гайден Пользователь

 

Но это еще не все. Теперь рассмотрим сортировку. Иногда это бывает очень полезно, потому что мы часто любим сортировать, особенно это любят делать магазины. Давайте рассмотрим, как это выглядит.

Вывод в алфавитном порядке: ORDER BY поле, поле…;

Вывод в обратном алфавитном порядке: ORDER BY поле, поле… DESC;

Нам нужно вывести имена и репутацию вместе с рангом в алфавитном порядке.

 

mysql> SELECT fnames_list, reputation, rank FROM users ORDER BY fnames_list;

Мы получаем отсортированную по именам таблицу

 

fnames_list reputation rank
Jimmy Пользователь
Lola Популярный
Peter Элита
Грег Новичок
Майк Пользователь

 

Но это еще не все. Если мне например, нужно отсортировать в обратном алфавитном порядке, то для этого мы пишем:

mysql> SELECT fnames_list, reputation, rank FROM users ORDER BY reputation DESC;

Теперь у нас есть вывод, который отсортирован по репутации.

NB: Порядок сортировки:

NULL, цифры, спецсимволы, текстовые символы

fnames_list reputation rank
Peter Элита
Lola Популярный
Jimmy Пользователь
Майк Пользователь
Грег Новичок

Урок 11: Числа и еще чутка о SELECT

Рассмотрим полезные функции для работы с числами в SQL.

Допустим у нас есть числовая последовательность: 30 31 32 82 999

  • SUM(поле) – выводит сумму всех чисел -> 1174
  • MIN/MAX(поле) – выводит мин/макс число -> 30/999
  • COUNT(поле) – выводит количество записей -> 5
  • AVG(поле) – выводит ср. арифметическое -> 234
mysql> USE users_db;  
mysql> SHOW TABLES;
Tables_in_users_db
sales
users

 

 

Таблица «sales»: SELECT * FROM sales;

id fnames_list lnames_list s_product price
Петр Радько Хлеб
Петр Радько Нарезной хлеб
Петр Радько Молоко
Николай Нивида Кола
Николай Нивида Чипсы
Аня Комарова Колбаса
Аня Комарова Арбуз
Аня Комарова Торт
Аня Комарова Жвачка

 

Таблица «users»: SELECT * FROM users;

id fnames_list lnames_list reputation rank
Peter Yan Элита
Lola Vin Популярный
Jimmy Voode Пользователь
Грег Эйтсон Новичок
Майк Гайден Пользователь

 

 

mysql> SELECT SUM(price) FROM sales; Предположим я хочу узнать, сколько всего заработал денег наш магазин. Для этого нужна функция SUM.
SUM(price)

 

mysql> SELECT MAX(price) FROM sales; Также вы можете узнать, какой продукт самый дорогой.
MAX(price)

 

mysql> SELECT fnames_list, lnames_list, s_product FROM sales WHERE price = (SELECT MAX(price) FROM sales); ИЛИ mysql> SELECT fnames_list, lnames_list, s_product FROM sales ORDER BY price;

Мы узнали самый дорогой продукт выше, а какой это продукт???

это бестолковая конструкция, можно сделать проще.

Аня Комарова Торт

 

 

Идем дальше…

 

mysql> SELECT COUNT(price) FROM sales; Функция COUNT выведет количество записей нашего поля. Однако, следует отметить, что NULL считаться не будет.

 

mysql> SELECT AVG(price) FROM sales;
48. 6667

 

Чтобы совсем закрыть эту тему и перейти к большому количеству таблиц в БД, связанных друг с другом, мы должны пройти парочку оставшихся ключевых слов.

 

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...