看到这里呢小伙伴应该不多少了解了些MySQL了,我就直接上自己理解的语法吧
一、聚合函数
-- 1)计数 count(列名) -- SELECT COUNT(*) FROM 表名 WHERE 条件(AS添加别名) -- 2)求和 sum(列名) -- SELECT SUM(列) FROM 表名 -- 3)平均数 SUM()/COUNT() -- 4)平均数AVG(列名)/AVG(IF NULL(列名,0)) 如果是空数据,补为0再求平均 -- 5)最大数MAX(列名)、最小数MIN(列名) -- 6)分组GROUP BY -- SELECT 列名 COUNT(*)表名 GROUP BU 列名 -- 7)HAVING再次筛选
使用中总结出WHERE与HAVING的区别在于,HAVING后面可以跟聚合函数,而WHERE不能。
二、子查询(就是一个嵌套查询 一个查询中嵌入另外一个查询 最多嵌入255条查询)
1. 相关子查询,指select嵌套,只能返回单行单列,并且依赖于主查询,最终执行n+1次;
例:
-- 创建班级表 CREATE TABLE t_class( c_id INT AUTO_INCREMENT PRIMARY KEY,-- 班级id,此列为主键 c_name VARCHAR(50) NOT NULL -- 班级名称 ); -- 创建学生表 CREATE TABLE t_student( s_id INT AUTO_INCREMENT PRIMARY KEY, -- 学生id s_name VARCHAR(50) NOT NULL, -- 学生姓名 s_sex VARCHAR(20) DEFAULT'男', -- 学生性别 s_classid INT, --学生对应班级 CONSTRAINT FOREIGN KEY (s_classid) REFERENCES t_class(c_id) -- 外键约束 ); -- 查询出有班级名称的学生的名字和对应班级编号 SELECT s_name,(SELECT c_name FROM t_class WHERE c_id=s_classid) FROM t_student;
2. 非相关子查询,子查询对主查询没有依赖,子查询只会执行一次,只会在from的时候才执行,性能较高,能独立运行,只是给主查询提供条件值;
还是接着上面创建的表,这里就不创建了,直接看语句:
-- from 嵌套 必须要给嵌套的子查询表起别名,可返回多行多列数据 -- 查询性别为女 并且姓名为张三的 SELECT * FROM (SELECT * FROM t_student WHERE s_sex='女') AS t1 WHERE t1.s_name='张三' -- where 嵌套 执行2次,子查询可以单独运行,不依赖主查询,只是给主查询提供条件值 -- 查询一班的学生有哪些 万一 t_class 的 c_id 三班==1 ,→首先找到一班的c_id → where s_classid=一班的c_id SELECT * FROM t_student WHERE s_classid=1 -- →首先找到一班的c_id select c_id from t_class where c_name='一班' SELECT * FROM t_student WHERE s_classid=(SELECT c_id FROM t_class WHERE c_name='一班') -- 返回多行单列
以上为今天所有分享,欢迎评论赐教;
如需了解更多,请进入知了堂社区:http://www.zhiliaotang.com/portal.php;