MySQL - запрос одной таблицы с последовательным выбором оператора DML

MySQL - запрос одной таблицы с последовательным выбором оператора DML

Эксплуатация и обслуживание YouthO & M Youth

Описание серии статей

Статьи серии MySQL включают установку программного обеспечения, конкретное использование, резервное копирование и восстановление и т. Д., Которые в основном используются для записи личных заметок об исследованиях.Основная используемая версия MySQL - 5.7.28, а версия серверной системы - CentOS 7.5. Эта глава посвящена содержимому запроса select single table.В этой главе используется таблица city в world.sql и самостоятельно созданная таблица student, среди которых world.sql можно загрузить на официальном сайте mysql. Примечание: мировые данные - 19xx, данные не соответствуют текущим.

Структура таблицы студентов следующая:

MySQL - запрос одной таблицы с последовательным выбором оператора DML
①sno: номер студента
②sname: имя студента
③sage: возраст студента
④ssex: пол
⑤status: status

Структура таблицы города выглядит следующим образом:

MySQL - запрос одной таблицы с последовательным выбором оператора DML
①ID: порядковый номер
②Название: название города
③CountryCode: код страны
④Район: провинция / штат
⑤Население: население

О SELECT

按照传统的SQL分类,select属于DML,但是由于select作为最常用的语句,有很多人将它和show语句分为DQL。

无论select是属于DML还是DQL,它都是SQL语言里最重要、最常见的语句,可以配合where、group by、order by等一起使用。

выберите использование

0 1 используется отдельно

ВЫБРАТЬ в одиночку

① Запросить всю информацию о таблице


select * from student;

MySQL - запрос одной таблицы с последовательным выбором оператора DML
② Запросить информацию об указанном столбце


select sname from student;

MySQL - запрос одной таблицы с последовательным выбором оператора DML
③Цель расчета
MySQL - запрос одной таблицы с последовательным выбором оператора DML

0 2 где условное выражение

Формат оператора where следующий:


select 指定列1,指定列2 from 表名 where 条件;

где сравнить запрос условия суждения


Обычно используемые символы оценки сравнения включают:>,> =, <, <=, =,! =, Not, in, not in, between and и т. Д.

① Запросить информацию о строке, имя которой - yunwei


select * from student where sname='yunwei';

MySQL - запрос одной таблицы с последовательным выбором оператора DML

② Спросите имена студентов, чей уровень младше 5 лет.


select sno,sname from student where sno<5;

MySQL - запрос одной таблицы с последовательным выбором оператора DML

③ Запросить данные строки, sno которых составляет 5-10


select * from student where sno between 5 and 10;

MySQL - запрос одной таблицы с последовательным выбором оператора DML
④ Запрашивать данные с sno 5 или 7


select * from student where sno in(3,5);

MySQL - запрос одной таблицы с последовательным выбором оператора DML


总结
>、<、=、!=:大于、小于、等于、不等于

not:非、不

in、not in :在、不在

где как нечеткий запрос


① Запросите строку имени студента, столбец имени которого содержит zhang


select * from student where sname like "%zhang%";

MySQL - запрос одной таблицы с последовательным выбором оператора DML

② Запрашивайте строки, начинающиеся с символа в столбце sname


select * from student where sname like "a%";

MySQL - запрос одной таблицы с последовательным выбором оператора DML

③ Запросите строку, оканчивающуюся на i, в столбце sname


select * from student where sname like "%i";

MySQL - запрос одной таблицы с последовательным выбором оператора DML

④ Запросите столбец, вторым символом которого является h в столбце sname


select * from student where sname like "_h%";

MySQL - запрос одной таблицы с последовательным выбором оператора DML

⑤ Запросите столбец, второй символ которого не является h в столбце sname


 select * from student where sname not like "_h%";

MySQL - запрос одной таблицы с последовательным выбором оператора DML


like通配符
%:匹配零个或者多个字符

_:匹配一个字符

где логический соединитель


Символы логической связи в основном включают: и, или, объединение.

① Запросить информацию о городах с населением более 100 Вт в Китае.


select * from city where countrycode='CHN' and population>1000000;

MySQL - запрос одной таблицы с последовательным выбором оператора DML

② Запросите информацию о городах Гуандун или Гуанси.


select * from city where district='guangdong' or district='guangxi';

MySQL - запрос одной таблицы с последовательным выбором оператора DML


select * from city where district='guangxi';

MySQL - запрос одной таблицы с последовательным выбором оператора DML


总结
and:与,两个条件同时满足的数据会被选中

or:或,满足一个或一个以上的数据会被选中

union:类似或,上下两个语句满足一个即选中

0 3 группировать по


В большинстве случаев Group by необходимо использовать вместе с where. Group by в основном подходит для группировки. Group by необходимо комбинировать с функциями агрегирования. Обычно используемые функции агрегирования: max (), min (), avg (), count (), сумма (), group_concat (), DISTINCT ()

Основные этапы использования группировки по:
①Найдите условие группировки (какой столбец используется в качестве столбца группирования)
②②Используйте соответствующую функцию агрегирования (как рассчитать)

группировать по сумме


①Подсчитайте население каждой страны


select CountryCode,sum(Population) from city group by countrycode;

MySQL - запрос одной таблицы с последовательным выбором оператора DML

②Подсчитайте общую численность населения каждой провинции Китая


# 由于省的人口总数=sum(城市人口) 有重复列的为省,所以分组列应该为省
select District,sum(population) from city where countrycode='CHN' group by district;

MySQL - запрос одной таблицы с последовательным выбором оператора DML

группировать по счету


①Посчитайте количество городов в каждой стране


select CountryCode,count(district) from city group by Countrycode;

MySQL - запрос одной таблицы с последовательным выбором оператора DML

②Посчитайте количество городов в каждой провинции Китая.


select District,count(name) from city where countrycode='CHN' group by district;

MySQL - запрос одной таблицы с последовательным выбором оператора DML

0 4 имея

having与where类似,having属于后过滤,一般需要在group by + 聚合函数后,再做过滤时使用。

имея


①Статистика общей численности населения каждой провинции Китая с указанием только провинций с общей численностью населения более 500 Вт.


select District,sum(population) from city where countrycode='CHN' group by district having sum(population)>5000000;

MySQL - запрос одной таблицы с последовательным выбором оператора DML

0 5 сортировать по


order by排序,order by 排序的列 DESC 倒序 ,没有DESC为正序。

Сортировать по


①Статистика общей численности населения каждой провинции Китая, показывающая только информацию о том, что численность населения превышает 500 Вт, и отсортированная от меньшего к большему


select District,sum(population) from city where countrycode='CHN' group by district having sum(population)>5000000 order by sum(population);

MySQL - запрос одной таблицы с последовательным выбором оператора DML

0 6 ограничение на подкачку


limit分页显示结果集 一般配合order by使用,limit x -- 前x个,x,y表示开始为x,往再显示后面y个。

ограничить лимит пейджинга


①Статистика общей численности населения в каждой провинции Китая, показывающая только информацию о том, что численность населения превышает 500 Вт, и отсортированная от наибольшего к наименьшему, показывая только пять лучших


select District,sum(population) from city where countrycode='CHN' group by district having sum(population)>5000000 order by sum(population) DESC limit 5;

MySQL - запрос одной таблицы с последовательным выбором оператора DML

0 7 Псевдонимы и дедупликация


别名:给列取一个别名,有时候列名太长,可以取个简单易懂的别名做后续的处理和展示。
去重:去掉重复的值,重复的只显示一个

выберите псевдоним


给列取别名,可以在列后面直接添加一个别名,或者使用as 添加一个别名

select countrycode '国家代码',name as '城市名' from city where district='guangdong';

MySQL - запрос одной таблицы с последовательным выбором оператора DML

выберите дедупликацию


distinct是select中去重语句

① Распечатайте все коды стран, не повторяя их


select distinct(countrycode) from city;

MySQL - запрос одной таблицы с последовательным выбором оператора DML

0 8 Описание корпуса


Статистическое управление Китая, общая численность населения каждой провинции, количество городов, список названий городов.


SELECT District,SUM(Population),COUNT(id),NAME FROM world.`city` WHERE CountryCode='CHN' GROUP BY District;

Если вы сделаете то же самое, поздравляем, вы получите следующее сообщение об ошибке:


ERROR 1055 (42000): Expression #4 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'world.city.Name' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
这是什么原因呢?首先我们看看我们上面的指令想做出来的结果是怎么样的

MySQL - запрос одной таблицы с последовательным выбором оператора DML
но! MySQL не поддерживает отображение результатов "один ко многим", так что же с этим делать? В настоящее время вы можете использовать агрегатную функцию group_concat для преобразования нескольких строк данных в одну, чтобы добиться эффекта от строки к строке.
MySQL - запрос одной таблицы с последовательным выбором оператора DML

 District,SUM(Population),COUNT(id),group_concat(NAME) FROM world.`city` WHERE CountryCode='CHN' GROUP BY District;

MySQL - запрос одной таблицы с последовательным выбором оператора DML

С персональной интеллект-картой

MySQL - запрос одной таблицы с последовательным выбором оператора DML

рекомендация

отblog.51cto.com/15082392/2656068
рекомендация