face18 mysql的sql语句

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)

你可能感兴趣的:(face18 mysql的sql语句)