DQL基础应用(select,from,where,group
2019-08-08 本文已影响0人
新_WX
1.select语句应用
1.1.select 的执行逻辑
命令参数 | 作用 |
---|---|
select | 列1,列2 |
from | 表,指定从哪个表中取数据 |
where | 条件,匹配条件,and/or是并且/或者,between是取区间,in表示取哪些值的属性。 |
group by | 条件,分组字句+聚合函数应用 |
having | 条件,把之前的结果再次进行过滤 |
order by | 条件,将之前的结果进行排序,默认由低到高desc由高到低 |
limit | 条件,取行数,显示多少行 |
1.2.select单独使用情况
(1) select @@参数名;
SELECT @@datadir; 查询数据目录路径
SELECT @@port 查询端口号
SELECT @@socket 查询socket文件路径
SELECT @@innodb_flush_log_at_trx_commit;
SHOW VARIABLES 查询所有参数(513个)
SHOW VARIABLES LIKE '%trx%'; 模糊查询
(2) select函数();
SELECT NOW() 查看当前时间
SELECT DATABASE(); 查看当前所在数据库
SELECT USER() 查看当前用户
SELECT 16*16 计算16*16
SELECT CONCAT("hello word") 显示引号中的值
SELECT CONCAT(USER,"@",HOST) FROM mysql.user 查询user和host使用'@'符合拼接显示
2.FROM 子句应用
SELECT * FROM city 查看citi表中所用数据,全表扫描
SELECT NAME,countrycode FROM city; 查看citi表中的name列和countrycode列
from用于指定从哪个表中取数据
3. where字句应用
>>3.1 等值查询
--- 查询中国城市的信息.
SELECT * FROM city WHERE countrycode='CHN'
>>3.2 不等值查询
--- 查询ID小于10的城市信息
SELECT * FROM city WHERE population<100;
--- 查询不是中国的城市信息(尽量不使用不等于,可能不走索引)
SELECT * FROM city WHERE countrycode!='CHN';
>>3.3 模糊查询
---查询国家代号为CH打头的城市信息.
SELECT * FROM city WHERE countrycode LIKE 'CH%'
《注意:避免使用LIKE中前面带%的模糊查询》
>>3.4 逻辑连接符(and,or)
---查询中国城市人口超过500W的城市信息
SELECT * FROM city WHERE CountryCode='CHN' AND Population>5000000
---查看山东省或河北省的城市信息
SELECT * FROM city WHERE district='shangdong' OR district='hebei'
>>3.5 where 配合between and使用
---查询人口数在100W-200W区间的城市信息(包含头尾)
SELECT * FROM city WHERE Population BETWEEN 1000000 AND 2000000
>>3.6 where配合in使用
---查看山东省或河北省的城市信息
SELECT * FROM city WHERE District IN('shangdong','hebei')
《 排除:SELECT * FROM city WHERE District NOT IN('shangdong','hebei') 》
where用于匹配条件,and/or是并且/或者,between是取区间,in表示取哪些值的属性。
4. group by 分组字句+聚合函数应用
4.1 什么是分组
按照某个列进行分组
4.2 常用的聚合函数
名称 | 作用 |
---|---|
COUNT() | 计数 |
MAX() | 最大值 |
MIN() | 最小值 |
AVG() | 平均值 |
SUM() | 求和 |
GROUP_CONCAT() | 列转行 |
4.3 例子
>>统计每个国家的城市个数
SELECT CountryCode,COUNT(id) FROM city GROUP BY CountryCode
>> 统计中国,每个省的,城市个数,省总人口数
SELECT district, COUNT(NAME),SUM(population) FROM city WHERE countrycode='CHN' GROUP BY district ;
>>统计各个国家的城市名列表
SELECT countrycode ,GROUP_CONCAT(NAME) FROM city GROUP BY countrycode\G
5. having子句使用
>> 统计中国,每个省的,城市个数,省总人口数,只显示人口总数大于800w的省
SELECT district, COUNT(NAME),SUM(population)
FROM city
WHERE countrycode='CHN'
GROUP BY district
HAVING SUM(population)>8000000
having是把之前的结果再次进行过滤
6. order by子句使用
>> 将以上例子在进行排序
SELECT district, COUNT(NAME),SUM(population)
FROM city
WHERE countrycode='CHN'
GROUP BY district
HAVING SUM(population)>8000000
ORDER BY SUM(population) DESC;
>>查询中国所有城市信息,并以人口数降序排序输出
SELECT * FROM city WHERE CountryCode='CHN' ORDER BY Population DESC;
order by是将之前的结果进行排序
7. limit 应用
>>查询中国所有城市信息,并以人口降序输出,只显示前五名
SELECT * FROM city WHERE CountryCode='CHN' ORDER BY Population DESC LIMIT 5;
>>跳过N行,显示M行
LIMIT N OFFSET M
LIMIT N,M
limit是取行数,显示多少行。
8. distinct应用
>>查询所有国家代号信息(去重)
SELECT DISTINCT CountryCode FROM city;
9. union与union all(相当于and)
>>查看山东省或者河北省的
SELECT * FROM city WHERE District='shangdong' UNION ALL SELECT * FROM city WHERE district='hebei'
面试题:union和union的区别
UNION自带distinct的去重功能,UNION ALL没有去重复