MySQL - запрос одной таблицы с последовательным выбором оператора DML
Эксплуатация и обслуживание YouthO & M Youth
Описание серии статей
Статьи серии MySQL включают установку программного обеспечения, конкретное использование, резервное копирование и восстановление и т. Д., Которые в основном используются для записи личных заметок об исследованиях.Основная используемая версия MySQL - 5.7.28, а версия серверной системы - CentOS 7.5. Эта глава посвящена содержимому запроса select single table.В этой главе используется таблица city в world.sql и самостоятельно созданная таблица student, среди которых world.sql можно загрузить на официальном сайте mysql. Примечание: мировые данные - 19xx, данные не соответствуют текущим.
Структура таблицы студентов следующая:
①sno: номер студента
②sname: имя студента
③sage: возраст студента
④ssex: пол
⑤status: status
Структура таблицы города выглядит следующим образом:
①ID: порядковый номер
②Название: название города
③CountryCode: код страны
④Район: провинция / штат
⑤Население: население
О SELECT
按照传统的SQL分类,select属于DML,但是由于select作为最常用的语句,有很多人将它和show语句分为DQL。
无论select是属于DML还是DQL,它都是SQL语言里最重要、最常见的语句,可以配合where、group by、order by等一起使用。
выберите использование
0 1 используется отдельно
ВЫБРАТЬ в одиночку
① Запросить всю информацию о таблице
select * from student;
② Запросить информацию об указанном столбце
select sname from student;
③Цель расчета
0 2 где условное выражение
Формат оператора where следующий:
select 指定列1,指定列2 from 表名 where 条件;
где сравнить запрос условия суждения
Обычно используемые символы оценки сравнения включают:>,> =, <, <=, =,! =, Not, in, not in, between and и т. Д.
① Запросить информацию о строке, имя которой - yunwei
select * from student where sname='yunwei';
② Спросите имена студентов, чей уровень младше 5 лет.
select sno,sname from student where sno<5;
③ Запросить данные строки, sno которых составляет 5-10
select * from student where sno between 5 and 10;
④ Запрашивать данные с sno 5 или 7
select * from student where sno in(3,5);
总结
>、<、=、!=:大于、小于、等于、不等于
not:非、不
in、not in :在、不在
где как нечеткий запрос
① Запросите строку имени студента, столбец имени которого содержит zhang
select * from student where sname like "%zhang%";
② Запрашивайте строки, начинающиеся с символа в столбце sname
select * from student where sname like "a%";
③ Запросите строку, оканчивающуюся на i, в столбце sname
select * from student where sname like "%i";
④ Запросите столбец, вторым символом которого является h в столбце sname
select * from student where sname like "_h%";
⑤ Запросите столбец, второй символ которого не является h в столбце sname
select * from student where sname not like "_h%";
like通配符
%:匹配零个或者多个字符
_:匹配一个字符
где логический соединитель
Символы логической связи в основном включают: и, или, объединение.
① Запросить информацию о городах с населением более 100 Вт в Китае.
select * from city where countrycode='CHN' and population>1000000;
② Запросите информацию о городах Гуандун или Гуанси.
select * from city where district='guangdong' or district='guangxi';
select * from city where district='guangxi';
总结
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;
②Подсчитайте общую численность населения каждой провинции Китая
# 由于省的人口总数=sum(城市人口) 有重复列的为省,所以分组列应该为省
select District,sum(population) from city where countrycode='CHN' group by district;
группировать по счету
①Посчитайте количество городов в каждой стране
select CountryCode,count(district) from city group by Countrycode;
②Посчитайте количество городов в каждой провинции Китая.
select District,count(name) from city where countrycode='CHN' group by district;
0 4 имея
having与where类似,having属于后过滤,一般需要在group by + 聚合函数后,再做过滤时使用。
имея
①Статистика общей численности населения каждой провинции Китая с указанием только провинций с общей численностью населения более 500 Вт.
select District,sum(population) from city where countrycode='CHN' group by district having sum(population)>5000000;
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);
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;
0 7 Псевдонимы и дедупликация
别名:给列取一个别名,有时候列名太长,可以取个简单易懂的别名做后续的处理和展示。
去重:去掉重复的值,重复的只显示一个
выберите псевдоним
给列取别名,可以在列后面直接添加一个别名,或者使用as 添加一个别名
select countrycode '国家代码',name as '城市名' from city where district='guangdong';
выберите дедупликацию
distinct是select中去重语句
① Распечатайте все коды стран, не повторяя их
select distinct(countrycode) from city;
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 не поддерживает отображение результатов "один ко многим", так что же с этим делать? В настоящее время вы можете использовать агрегатную функцию group_concat для преобразования нескольких строк данных в одну, чтобы добиться эффекта от строки к строке.
District,SUM(Population),COUNT(id),group_concat(NAME) FROM world.`city` WHERE CountryCode='CHN' GROUP BY District;