数据库
首页 > 数据库> > mysql各种类型的查询的使用和总结

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

作者:互联网

 

文章目录

 

常见关键字使用
-- 简单查询
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