前言:
两张表的数据相乘这是最开始的多表链接,图中 bid和id相等的数据才是有意义的其他都是无用数据
内连接有关联的数据我就给他取出来,取交集,取等值
最新的链接语法
select a.name,b,addr from a join b on a.sid=b.id
select from a left join b on a.sid=b.id ; ##这是左外链接,将左表全部的数据取出来跟右表进行匹配,匹配成功的拿出来进行显示,右表满足条件的会进行显示,不满足条件的显示 null。
select from a right join b on a.sid=b.id ##right是右表链接
写多表连接最关键的就是找到几张表之间的关联关系
第一步写多表链接的时候分析题目,找到相关表。
第二步找到关联关系
select teacher.tname,course.cname from teacher join course on teacher.tno=course.tno; ##查询每个老师教了那些课程
select student.sname,course.cname from student Join sc on student.sno=sc.sno JOIN course on sc.cno=course.cno where student.sname=’zhang3’ ## 查找张三学了那些课 三表连接
- 4. 统计每个国家的城市个数和城市名
SELECT countrycode,COUNT(id),GROUP_CONCAT(NAME) FROM city
GROUP BY countrycode; ## GROUP_CONCAT(NAME) 在有group by的查询语句中,select指定的字段要么就包含在group by语句的后面,作为分组的依据,要么就包含在聚合函数中 sql_mode 规定。
2.别名 alias 简称as
select user as ‘用户’,host as ‘主机’ from mysql.user; ## 列别名的应用 as是别名关键字可以省略
函数也可以定义别名 count() as cu
3.子查询的方式,是先执行()内部的,在执行()外的查询
select code,name ,SurfaceArea from country where code in (select CountryCode from city where Population<100); ##子查询的嵌套
4.UNION ALL 语法介绍
in, or 查询的数据重复值少的时候可以转换为 union all 进行优化
执行计划,in 是range 范围查询 扫面, union all是=值匹配 ref
但是,这种优化,对于查询条件重复值少的时候效果比较明显,改写效果可能会变差。
下面是语法示例,如何判断是否进行union all这种优化,进行压力测试,验证是否有必要优化。
#select from city WHERE CountryCode in (‘chn’,’usa’)
select from city where CountryCode = ‘chn’
union all
SELECT from city WHERE CountryCode = ‘usa’
union all 和 union 的区别 :相同点都是讲两个结果集拼接到一起,不同点,union会做去重,消耗资源比较高,union all 不会进行去重。
