ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

mysql各种类型的查询的使用和总结

2021-07-06 17:54:26  阅读:148  来源: 互联网

标签:列字段 各种类型 -- mysql 查询 表名 列值 WHERE SELECT


 

文章目录

 

常见关键字使用
-- 简单查询
SELECT 列字段2 FROM 表名 WHERE 列字段1 = '列值1';

-- 别名 AS
SELECT 列字段1 AS 别名1 FROM 表名1;

-- 去重查询 DISTINCT
SELECT DISTINCT 列字段2 FROM 表名 WHERE 列字段1 = '列值1';

-- 区间查询 BETWEEN ... AND ...
SELECT 列字段2 FROM 表名 WHERE 列字段1 BETWEEN 某个列值 AND 另一个列值;
-- 区间查询 AND
SELECT 列字段2 FROM 表名 WHERE 列字段1 > 某个列值 AND 列字段1 < 另一个列值;

-- 或者关系查询 IN
SELECT * FROM 表名 WHERE 列字段1 IN ('列值1', '列值2', '列值3');
-- 或者关系查询 OR
SELECT * FROM 表名 WHERE 列字段1 = '列值1' OR 列字段2 = '列值2';

-- 升序查询(默认)ORDER BY 列字段 ASC
SELECT * FROM 表名 ORDER BY 列字段1 ASC;
-- 降序查询 ORDER BY 列字段 DESC
SELECT * FROM 表名 ORDER BY 列字段1 DESC;
-- 升序+降序查询 ORDER BY 列字段1 ASC, 列字段2 DESC
SELECT * FROM 表名 ORDER BY 列字段1 ASC, 列字段2 DESC;

-- 任意一个 ANY
SELECT * FROM 表名1 WHERE 列字段1 > ANY (SELECT 列字段1 FROM 表名1 WHERE 列字段2 = '列值2');
-- 每一个 ALL
SELECT * FROM 表名1 WHERE 列字段1 > ALL (SELECT 列字段1 FROM 表名1 WHERE 列字段2 = '列值2');

-- 显示前多少行 LIMIT,若有 order by 只能在 order by 后使用
SELECT * FROM 表名 LIMIT 0, 行号;
常用函数
-- 统计个数 COUNT
SELECT COUNT(*) FROM 表名 WHERE 列字段1 = '列值1';

-- 找到最大 MAX
SELECT MAX(列字段1) FROM 表名;
-- 找到最小 MIM
SELECT MIN(列字段1) FROM 表名;

-- 找到平均 AVG
SELECT AVG(列字段1) FROM 表名;

-- 时间格式获取年份 YEAR
SELECT YEAR(列字段1) FROM 表名;
-- 获取当前年份 NOW
SELECT YEAR(NOW());
-- 获取年龄
SELECT YEAR(NOW()) - YEAR(列字段1) FROM 表名1;
模糊匹配
-- 模糊匹配 LIKE,% 表示任意个字符
SELECT * FROM 表名1 WHERE 列字段1 NOT LIKE '某值%';
分组查询

分组查询中要注意的是,where 是在分组前进行筛选,having 是在分组后进行最终筛选,而且 where 后不能加聚合函数,但是 having 后可以加聚合函数,为什么呢?请见博主另一篇博文

-- 分组平均值 GROUP BY
SELECT 列字段1, AVG (列字段2) FROM 表名 GROUP BY 列字段1;

-- GROUP BY ... HAVING ...
SELECT 列字段1, AVG (列字段2) FROM 表名 WHERE 列字段3='列值3' GROUP BY 列字段1 HAVING 列字段1>AVG(列字段1);
多表查询
-- 简单多表查询
SELECT 列字段1, 列字段2 FROM 表1, 表2 WHERE 表1.列字段1 = 表2.列字段2;
子查询
-- 简单子查询
SELECT 列字段1 FROM 表1 WHERE 列字段2 > 
	(SELECT 列字段2 FROM 表1 WHERE 列字段3 = '列值3');
SELECT 列字段1 FROM 表1 WHERE 列字段2 > 
	(SELECT 列字段2 FROM 表2 WHERE 列字段3 = '列值3');
	
-- WHERE 子查询来替代了分组查询
SELECT * FROM 表名1 别名1 WHERE 列值1 < 
	(SELECT AVG (列值1) FROM 表名1 别名2 WHERE 别名1.列值2 = 别名2.列值2);
连接查询
-- 内连接 INNER JOIN ... ON 或者 JOIN ... ON
-- 内连接求交集
SELECT * FROM 表名1 INNER JOIN 表名2 ON 表名1.列字段1 = 表名2.列字段2;

-- 左连接 LEFT JOIN ... ON 或者 LEFT OUTER JOIN ... ON
-- 左连接即左侧全查,不管右边存不存在
SELECT * FROM 表名1 LEFT JOIN 表名2 ON 表名1.列字段1 = 表名2.列字段2;

-- 右连接 RIGHT JOIN .. ON 或者 RIGHT OUTER JOIN ... ON
-- 右连接即右侧全查,不管左边存不存在
SELECT * FROM 表名1 RIGHT JOIN 表名2 ON 表名1.列字段1 = 表名2.列字段2;

-- 全外连结,很可以 mysql 已经没有全外连接了,可以通过 UNION 联合查询的形式来替代全外连接
-- 全外连结求并集
SELECT * FROM 表名1 LEFT JOIN 表名2 ON 表名1.列字段1 = 表名2.列字段2;
UNION
SELECT * FROM 表名1 RIGHT JOIN 表名2 ON 表名1.列字段1 = 表名2.列字段2;
联合查询
-- 简单联合查询 UNION 即求并集会自动去重
SELECT * FROM 表1 WHERE 列字段1 = '列值1' UNION 
	SELECT * FROM 表1 WHERE 列字段2 = '列值2'
分页查询

可以使用 LIMIT 分页,也可以使用 LIMIT+OFFSET 分页

- 表示每页 10 行,初始位置从 0 也就是第一页第一行开始
SELECT * FROM 表1 LIMIT 0,10;

- 表示每页 10 行,初始位置从 0 也就是第一页第一行开始,OFFSET 表示初始位置
SELECT * FROM 表1 LIMIT 10 OFFSET 0;
查询注意点
  1. 聚合函数比如说 AVG() 只能在 HAVING 中使用,不能在 WHERE 中使用
  2. SELECT 列的别名不能在 WHERE 中使用,可以在 GROUP BY 后使用

 

标签:列字段,各种类型,--,mysql,查询,表名,列值,WHERE,SELECT
来源: https://blog.51cto.com/u_13281972/2993757

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有