摘要:本文对MySQL数据库子查询进行了详尽的总结,希望在阅读本文以后,读者可以熟练掌握MySQL数据库子查询的相关知识。
聚合函数
聚合函数对一组值执行计算,并返回单个值。 除了 COUNT 以外,聚合函数都会忽略空值。 聚合函数经常与 SELECT 语句的 GROUP BY 子句一起使用。常用的聚合函数有:
· sum(expr):求和
· avg(expr):求平均数
· count(expr):计数器,返回SELECT语句检索到的行中非NULL值的数目
· max(expr) 获取最大值
· min(expr) 获取最小值
mysql查询子句
where(条件查询)
在where条件查询中可以使用比较运算符,逻辑运算符,in,between and和模糊查询:
· 比较运算符包括:>, =, <, >=, <=, !=
· 逻辑运算符:and, or, not
· in:类似python中的in
· between and:表示在什么之间
· 模糊查询like:类似正则表达式的用法,用通配符去匹配字符,但是在这里的通配符只有两个,%匹配任意长度的任意字符,_匹配任意单个字符。
例如:
1.学生成绩为60分到90分之间的有哪些?
where scores between 60 and 90
2.查找学生姓王的学生?
where name like '王%'
group by(分组)
将查询的结果按照某个字段的值进行分组,如果需要对分组后的数据进行筛选就还需要用到having子句,而不是where子句。
例如:
查找数学英语这两门课的平均成绩大于70分的学生:(假设表scores中有数学英语成绩和姓名)
select name,avg(score) as c from scores group by(name) having c >70;
as(别名)
对于一些名字比较长的字段或者表名,我们可以给它一个比较简短且全局唯一的别名,然后通过别名去引用它(查询语句也可以做别名)。
例如:
select name,age from student as st; select avg(age) as avg_age from student;
order by(排序)
通常在处理数据或者查询数据的时候往往都需要进行排序,sql中使用order by对相应的数据进行排序,默认查询结果是按照(asc)升序排列的,要降序排列使用desc。
例如:
查询学生的成绩,并按照降序排列
select name,score from scores order by score desc;
if(判断)
if(字段,exp1,exp2) 或者 ifnull(字段,exp1,,exp2) 作用:if表达式中如果字段值为真则返回exp1的值,如果为假的话,返回exp2的值 ifnull表达式中如果字段的值为假则返回exp1的值,如果为假的话,返回exp2的值。
例如: 查询男女学生的人数(分组和聚合函数)
select if(stusex, '男', '女') as '性别', count(stusex) as '人数' from TbStudent group by stusex;
去重和显示结果条数
使用distinct(字段名)表示去除字段名中重复的项。
limit子句用来现在结果的显示条数,用法为limit [offset],N其中offset可以不设置默认为0,如果设置则表示偏移offset条信息然后显示N条信息。offset也可以单独使用。
例如:
取出成绩表中在第四个到第六个这三个人:
select name from scores limit 3,3;
子查询
· where型子查询
把内层查询结果当作外层查询的比较条件
例如:
不适用排序,找出最高分的学生姓名和成绩
select name,score from scores where score = (select max(score) from scores);
· from型子查询
把内层的查询结果供外层再次查询
例如:
不用group by,查询平均成绩大于等于90分的学生的学号和平均成绩:
select ts1.stuid,t2.avg from tbstudent ts1,(select sid,avg(score) as avg from tbsc group by(sid)) as t2 where t2.sid=ts1.stuid and t2.avg>=90;
· exists型子查询
把外层查询结果拿到内层,看内层的查询是否成立
例如:查询哪些栏目下有商品,栏目表category,商品表goods
select cat_id,cat_name from category where exists(select * from goods where goods.cat_id = category.cat_id);
联接
定义 A INNER/LEFT/RIGHT JOIN B操作中,A表被称为左表,B表被称为右表。
a) 内关联: Inner Join on 作用:仅对满足连接条件的列进行关联,其中inner可省略
b) 左外连接:Left Outer Jion on 作用:其中outer可以省略。如A LEFT JOIN B,会输出左表A中所有的数据,同时将符合ON条件的右表B中搜索出来的结果合并到左表A表中,如果A表中存在而在B表中不存在,则结果集中会将查询的B表字段值(如此处的P.PUNISHMENT字段)设置为NULL。 所以,LEFT JOIN的作用是: LEFT JOIN:从右表B中将符合ON条件的结果查询出来,合并到A表中,再作为一个结果集输出。
c) 右外连接:Right Outer Jion on 作用:其中outer可以省略,而RIGHT JOIN刚好相反,“A RIGHT JOIN B ON ……”是将符合ON条件的A表搜索结果合并到B表中,作为一个结果集输出:
本文由职坐标整理发布,更多相关知识,请关注职坐标数据库MySQL频道!
您输入的评论内容中包含违禁敏感词
我知道了
请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号