mysql 复杂sql 面试_PHP面试之复杂MySQL语句的编写
真題
有A(id,sex, par, cl, c2)、B(id,age,c1,c2)兩張表,其中A.id與B.id關(guān)聯(lián),現(xiàn)在要求寫出一條SQL語句,將B中age>50的記錄的c1,c2更新到A表中統(tǒng)一記錄中的c1,c2字段中。update?A,B?set?A.c1?=?B.c1,?A.c2=AB.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=AB.c2?where?B.age?>?50;
MySQL的關(guān)聯(lián)update操作
關(guān)聯(lián)更新:update?A,B?set?A.c1?=?B.c1,?A.c2=AB.c2?where?A.id=B.id#?連接update?A?inner?join?B?on?A.id=B.id?set?A.c1?=?B.c1,?A.c2=AB.c2?where??...
延伸:MySQL的關(guān)聯(lián)查詢語句
六種關(guān)聯(lián)查詢:交叉連接(cross join)
內(nèi)連接(inner join)
外連接(left join/right join)
聯(lián)合查詢(union/union all)
全連接(full join):MySQL中不支持
交叉連接(cross join)select?*?from?A,B(,C)
#?或者select?*?from?A?cross?join?B(cross?join?C)沒有任何關(guān)聯(lián)條件,結(jié)果是笛卡爾積,結(jié)果集會很大,沒有意義,很少使用。
內(nèi)連接(inner join)select?*?from?A,B?where?A.id?=?B.id
#?或者select?*?from?A?inner?join?B?on?A.id?=?B.id多表中同時符合某種條件的數(shù)據(jù)記錄的集合
分類:等值連接:on A.id = B.id
不等值連接:on A.id > B.id
自連接:select * from A T1 inner join A T2 on T1.id = T2.pidinner join可以縮寫成join。
外連接(left join/right join)
左外連接:left outer join,已左表為主,先查詢出左表,按照on后的關(guān)聯(lián)條件匹配右表,沒有匹配到的用NULL填充,可以簡寫成left join。
右外連接:right outer join,已左表為主,先查詢出右表,按照on后的關(guān)聯(lián)條件匹配左表,沒有匹配到的用NULL填充,可以簡寫成right join。
聯(lián)合查詢(union/union all)select?*?from?A?union?select?*?from?B?union?...
把多個結(jié)果集集中在一起,union前的結(jié)果為基準(zhǔn),需要注意的是聯(lián)合查詢的列數(shù)要相等,相同的記錄行會合并。
如果使用union all,不會合并重復(fù)的記錄行。
全連接(full join):MySQL中不支持
MySQL實(shí)現(xiàn)全連接,可以使用left join和 union和right join聯(lián)合使用。select?*?from?A?left?join?B?on?A.id?=B.id?union?select?*?from?A?right?join?B?on?A.id?=?B.id
嵌套查詢
建議使用,結(jié)果不好把控
用一條SQL語句的結(jié)果作為另外一條SQL語句的條件select?*?from?A?where?id?in?(select?id?from?B)
作者:openoter
鏈接:https://www.jianshu.com/p/0dbc3aa7763f
總結(jié)
以上是生活随笔為你收集整理的mysql 复杂sql 面试_PHP面试之复杂MySQL语句的编写的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql on delete关键字_M
- 下一篇: mysql 时间周期_数据库三大周期阶段