zoukankan      html  css  js  c++  java
  • 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;

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

       六种关联查询

        交叉连接(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;

          多表中同时符合某种条件的数据记录的集合

          内连接分为三类

            等值连接: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"; 

  • 相关阅读:
    IO流(5)—缓冲流
    vue-element-admin 中文问题
    npm 下载慢解决方案
    fatal: unable to connect to github.com
    为什么有sessionStorage,localStorage等,还需要vuex
    vuex页面刷新数据丢失的解决办法
    Node中JWT的使用
    socket.io 实现长连接演示代码
    WebSocket 实现长连接演示代码
    jquery ajax上传文件
  • 原文地址:https://www.cnblogs.com/dcrq/p/11079558.html
Copyright © 2011-2022 走看看