MySQL基础(5)

6 篇文章 1 订阅

在这里插入图片描述
在这里插入图片描述

考察点:left join 左外连接查询--以左表为主,左表中的所有数据均要显示,而右表中若有与之匹配的数据,则显示,若无,此时以null填充
知识点回忆:
连接查询:
	1. 左外连接查询:left join
		左表为主(左表中的所有数据均是结果所要的,而右表中若有与之匹配的数据,则显示,若无,此时以null填充)
	2. 右外连接查询:right join
		右表为主(右表中的所有数据均是结果所要的,左表中若有与之匹配的数据,则显示,若无,此时以null填充)
		外连接的使用场景:不要滥用,题意中若出现以下字眼:eg:查询所有的xx;
	3. 内连接查询:  (inner) join  -- 使用场景:从两表/多表中筛选出满足所有条件的数据
	4. 等值连接查询: select xx from a,b where a.xx=b.xx
		 等值连接和内连接查询效果相同的,公司中通常用内连接

业务场景限制:

  1. 一个班级有多名学生,一名学生只属于一个班级

  2. 学生有可能没有成绩

题目:
  1. 查询所有人(包括没有成绩的学生)的课程分数(学号,姓名,性别,班级名称,语文分数,数学分数)

    写sql的思路:
    	1. 若涉及多表查询,先确定表有哪些(从查询的字段确定)3表联查
    SELECT 
    	stu_no,stu_name,stu_gender,class_name,chinese,math 
    FROM 
    	student s 
    JOIN 
    	class c 
    ON 
        s.class_id=c.id
    LEFT JOIN 
    	score sc 
    ON 
    	s.id=sc.stu_id
    
  2. 查询语文分数比“张三”高的学生(学号,姓名,性别,班级名称,语文分 数)–3表联查

    考点:嵌套查询(子查询)
    1. 先查询出张三的语文分数
    SELECT 
    	chinese 
    FROM 
    	student s 
    JOIN 
    	score sc 
    ON 
    	s.id=sc.stu_id 
    WHERE stu_name='张三'
        
    多表内联查的语法: 
    select xx from tableA join tableB join tableC on a.xx=b.xx and b.xx=c.xx
    
    SELECT  stu_no,stu_name,stu_gender,class_name,chinese 
    FROM 
    	student s 
    JOIN 
    	class c 
    JOIN 
        score sc
    ON 
        s.class_id=c.id 
    AND 
    	s.id=sc.stu_id 
    WHERE 
    	chinese>
    (SELECT chinese FROM student s JOIN score sc 
    ON s.id=sc.stu_id WHERE stu_name='张三')        
    总结:多表联查中带条件查询语法顺序:
    	select xx from a join b join c on a.xx=b.xx and b.xx=c.xx where xx>xx
    
  3. 查询各科都合格(分数>=60)的学生(学号,姓名,语文分数,数学分数) --2表联查

    SELECT 
    	stu_no,stu_name,chinese,math 
    FROM 
    	student s 
    JOIN 
    	score sc 
    ON 
    	s.id=sc.stu_id
    WHERE 
    	chinese>=60 
    AND 
    	math>=60
    
  4. 查询班级人数>=2的班级(班级编号,班级名称,人数)

    查询每个xx的xx --通常都会涉及到使用分组  group by 
    很多情况下,聚合函数都会和分组(group by)配合使用
    1. 需要查询出每个班级的人数    group by 班级  count(字段)
    2. 对分组后的结果再次进行筛选,使用having关键字来筛选
    
    SELECT 
    	class_id,class_name,COUNT(stu_no) cou
    FROM 
    	student s 
    JOIN 
    	class c 
    ON 
        s.class_id=c.id
    GROUP BY 
    	class_id 
    HAVING 
    	cou>=2
    

在这里插入图片描述

select match_date as '比赛日期',sum(if(Result = '胜',1,0)) as '胜',sum(if(Result = '负',1,0)) as '负' from match_record group by match_date;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值