PHP面試 MySQL的SQL語句編寫

 MySQL的SQL語句編寫

   面試題一面試

    有A表(id,sex,par,c1,c2),B(id,age,c1,c2)兩張表,其中A.id與B.id關聯,如今要求寫出一條SQL語句,將B中age>50的記錄的c1,c2更新到A表中統一記錄中的c1,c2字段中設計

    SQL語句一:update A as a,B as b set a.c1=b.c1,a.c2=b.c2 where a.id=b.id and age>50;io

    SQL語句二:update A inner join B on A.id = B.id set A.c1 = B.c1,A.c2=B.c2 where B.age >50;table

   六種關聯查詢date

    交叉鏈接(CROSS JOIN)select

      SELECT * FROM A,B(,C)  或者  SELECT  * FROM A CROSS JOIN B (CROSS JOIN C)nio

      沒有任何關聯條件,結果時笛卡爾積,結果集會很大,沒有意義,不多使用。im

    內鏈接(INNER JOIN)數據

      SELECT * FROM A,B WHERE A.id = B.id;查詢

      SELECT  FROM A INNER JOIN B ON A.id = B.id;

      多表中同時符合某種條件的數據記錄的集合

      內鏈接分爲三類

        等值鏈接:ON A.id = B.id

        不等值鏈接:ON A.id > B.id

        自鏈接:select * from a t1 inner join a t2 on t1.id = t2.pid;

    外鏈接(LEFT JOIN /  RIGHT JOIN)

      左外鏈接:LEFT OUTER JOIN ,以左表爲主,先查詢出左表,按照ON後的關聯條件匹配右表,沒有匹配到的用NULL填充,能夠簡寫成LEFT JOIN 

      右外鏈接:RIGHT OUTER  JOIN, 以右表爲主,先查詢出右表,按照ON後的關聯條件匹配左表,沒有匹配到的用null填充,能夠簡寫成RIGHT JOIN

    聯合查詢(UNION /  UNION ALL )

      select * from a union select * from b union ....

      就是把多個結果集集合中在一塊兒,union前的結果爲基準,須要注意的時聯合查詢的列數要相等,相同的記錄會合並,若是使用union all ,不會合並重復的記錄行

    全鏈接(FULL JOIN)

      MySQL不支持全鏈接

      能夠使用left join 和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語句的結果做爲另外一條SQL語句的條件

      SELECT * FROM A WHERE id in (SELECT id from B)

      根據考題要搞清楚表的結構和多表之間的關係,根據想要的結果思考使用哪一種關聯方式,一般要把查詢的列先寫出來,而後分析這些列都屬於那些表,才考慮使用關聯查詢

    面試題二

      爲了記錄足球比賽的結果,設計表以下:

            參賽隊伍表   team

字段名稱 類型 描述
teamid int 主鍵
teamName varchar(20) 隊伍名稱

            賽程表   match

字段名稱 類型 描述
matchid int 主鍵
hostTeamid int 主隊id
guestTeamid int 客隊id
matchResult varchar(20) 比賽結果
matchTime Date 比賽日期

               其中,match賽程表中的hostTeamID與guestTeamID 都和team表中的teamid關聯,查詢2006-6-1到2006-1-1之間舉行的全部比賽,而且用如下形式列出:拜仁 2:0   不萊梅 2006-6-21

           SQL語句:SELECT t1.teamName,m.matchResult,t2.teamName,m.matchTime FROM matchs as m LEFT JOIN team as t1 ON m.hostTeamid=t1.teamid LEFT JOIN team as t2 ON m.guestTeamid=t2.teamid WHERE m.matchTime BETWEEN "2006-06-01" AND "2006-07-01"; 

相關文章
相關標籤/搜索