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
表名
正数为左开始数,
负数为右
数字代表出现的次数