mysql的sql语句
理清关系 写出展示列 考虑如何用查询
足球队 比赛
select t2.hostTeamId,matchResult, t3.GuestTeamId,matchTime
from match t1
left join team t2 on t1.teamId=t2.hostTeamId ,
left join team t3 on t1.teamId=t3.GuestTeamId,
where t1.matchTime between "2006-6-1" and "2006-7-1"
mysql的关联update语句
update a,b set a.c1=b.c1 ,a.c2=b.c2 where a.id=b.id
update a inner join b on a.id=b.id set a.c1=b.c1 ,a.c2=b.c2
有A(id,sex,par,c1,c2),B(id,age,c1,c2)两张表,其中a.id与b.id关联,现在要求写出一条sql语句,将b中age>50的记录的c1,c2更新到a表中统一记录中的c1,c2字段中
update a,b set a.c1=b.c1,a.c2=b.c2 where a.id=b.id and b.age>50
update a inner join b on a.id=b.id set a.c1=b.c1 ,a.c2=b.c2 where b.age>50
mysql的关联查询语句
交叉连接 cross join
select *from a,b(,c)
或者
select* from a cross join b(cross join c)
没有任何关联条件,结果是笛卡尔积,结果集会很大,没有意义很少使用
内连接 inner join
select *from a,b where a.id=b.id
或者
select *from a inner join b on a.id=b.id
inner join可以缩写为join
select *from a join b on a.id=b.id
多表当中同时符合某种条件的数据记录的集合
分三类
等值连接 on a.id=b.id
不等值连接 on a.id>b.id
自连接
selefct * from a t1 inner join a t2 on t1.id =t2.pid
外连接 left/right outer join 简写 left join right join
一个以左表为主 ,先查询左表按照on 后的关联条件匹配 右没有匹配到用 NULL填充
一个以右表为主 ,先查询右表按照on 后的关联条件匹配 左 没有匹配到用 NULL填充
内连接 不以任何表为主 只找on 后的关联条件匹配 满足条件后展示
联合查询 union union all
select * from a union select * from b union....
就是把多个结果集集中在一起,union前的结构为基准 需要注意的是联合查询的列数要相等,相同的记录行会合并
如果使用 unionALL 不会合并重复的记录行
效率 union 高于 union all
全连接 full join mysql不支持全连接
可以使用left join 和 union 和right join联合使用
select * from a left join b on a.id=b.id union
select * from a right join b on a.id=b.id
嵌套查询
用一条 sql语句的结果 作为另一条语句的查询方案
select * from a where id in(select id from b)