mysql多表查询练习

mysql多表查询练习

https://www.cnblogs.com/runnermark/p/9258140.html
练习表地址

1.having表示在聚合后再次筛选,用于group by之后

在使用having时。列需要是选出来的列,不然会报

[Err] 1054 - Unknown column 'score.course_id' in 'having clause'

下图中的score.course_id

select 
	student.sname,
	student.sid,
	score.course_id
FROM
	student
	LEFT JOIN score
	on student.sid = score.student_id
group BY
	student.sname
having
	score.course_id in(1,2)
order by student.sid

2.left join等等外连接在于from后,进行
use study_sql;
select sc.student_id,student.sname,sc.score
from score sc 
LEFT JOIN student on sc.student_id = student.sid
where sc.course_id in(1,3)
and sc.score>60
group by sc.student_id
#--加having表示将结果进一步筛选,表示两个course
having count(course_id)=2;
-- -- #----
3.模糊查询要记得like
select 
	*
-- 	count(tcid)
from
	teacher
	where tname like "李%";
	
4.case用法

case when [column] (<>=) XXX then 设定值
else 设定值
end 结束

SELECT            
    case                   -------------如果
    when sex='1' then '男' -------------sex='1',则返回值'男'
    when sex='2' then '女' -------------sex='2',则返回值'女'  
    else '其他'                 -------------其他的返回'其他’
    end                    -------------结束
from   sys_user            --------整体理解: 在sys_user表中如果sex='1',则返回值''如果sex='2',则返回值'' 否则返回'其他’


SELECT
	c.cid 班级ID,
	c.caption 班级名称,
	cg.gname 年级,
	CASE when cg.gid BETWEEN 1 and 2 then '低' 
			 when cg.gid in(3,4) then 'mid'

end as 年级级别
	
from
	class c
LEFT JOIN
	class_grade cg
on c.grade_id = cg.gid
5.解决子查询不支持limit

解决1235 - This version of MySQL doesn’t yet support ‘LIMIT & IN/ALL/ANY/SOME subquery’
原创请叫我小思
展开
出现场景:使用子查询时
这版本的 MySQL 不支持使用 LIMIT 子句的 IN/ALL/ANY/SOME 子查询
意味着下列查询不能正确的执行

select * from my_table where id in (select id from my_table limit 10)

解决方案:

select * from my_table where id in (select t.id from (select * from my_table limit 10)as t) 

再套一次查询就OK了

函数

1.LEFT(str,len) a
从左开始截取len个长度的字符

关于截取字符的语法

2.分割字符函数

SELECT
	*,
	
	SUBSTRING_INDEX(列名,'省',1)one,
	SUBSTRING_INDEX(列名,'省',-1)two
from
	表名

正数为左开始数,
负数为右
数字代表出现的次数

关于分割函数语法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值