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";

PHP面试 MySQL的SQL语句编写的更多相关文章

  1. php面试专题---17、MySQL的SQL语句编写考点

    php面试专题---17.MySQL的SQL语句编写考点 一.总结 一句话总结: 注意:只写精品 1.MySQL的关联UPDATE语句? 关键UPDATE A,B:UPDATE A,B SET A.c ...

  2. 【MySQL】经典数据库SQL语句编写练习题——SQL语句扫盲

    [MySQL]数据库原理复习——SQL语言 对基本的SQL语句编写的练习题,其中的题目的答案可能会有多种书写方式. 1.题目1 1.1 关系模式 学生student:SNO:学号,SNAME:姓名,A ...

  3. php面试专题---MySQL常用SQL语句优化

    php面试专题---MySQL常用SQL语句优化 一.总结 一句话总结: 原理,万变不离其宗:其实SQL语句优化的过程中,无非就是对mysql的执行计划理解,以及B+树索引的理解,其实只要我们理解执行 ...

  4. SQL语句编写的练习(MySQL)

    SQL语句编写的练习(MySQL) 一.建表 1.学生表(Student) 学号 | 姓名 | 性别 | 出生年月 | 所在班级 create table Student( sno varchar(2 ...

  5. mysql优化sql语句

    mysql优化sql语句   常见误区   www.2cto.com   误区1:   count(1)和count(primary_key) 优于 count(*)   很多人为了统计记录条数,就使 ...

  6. Mysql 常用 SQL 语句集锦

    Mysql 常用 SQL 语句集锦 基础篇 //查询时间,友好提示 $sql = "select date_format(create_time, '%Y-%m-%d') as day fr ...

  7. Mysql 常用 SQL 语句集锦 转载(https://gold.xitu.io/post/584e7b298d6d81005456eb53)

    Mysql 常用 SQL 语句集锦 基础篇 //查询时间,友好提示 $sql = "select date_format(create_time, '%Y-%m-%d') as day fr ...

  8. MySQL数据库sql语句的一些简单优化

    1.查询条件的先后顺序 有多个查询条件时,要把效率高能更精确筛选记录的条件放在后边.因为MySQL解析sql语句是从后往前的(不知是否准确). 例: select a.*,b.* from UsrIn ...

  9. mysql下sql语句 update 字段=字段+字符串

    mysql下sql语句 update 字段=字段+字符串   mysql下sql语句令某字段值等于原值加上一个字符串 update 表明 SET 字段= 'feifei' || 字段; (postgr ...

随机推荐

  1. xunit的assert常用部分方法解释

    布尔:True(返回bool的方法或者字段) 判断是否为trueFalse(返回bool的方法或者字段) 判断是否为false 字符串(区分大小写):Equal(期待结果,实际结果) 判断输出值和期待 ...

  2. delphi vlc 安装bug 处理编译错误"0" is an invalid value for the "DebugInformation" parameter of the "DCC"

    处理编译错误"0" is an invalid value for the "DebugInformation" parameter of the "DCC" [摘要:http://blog.csdn ...

  3. COALESCE 函数作用

    用途. 将空值替换成其他值 返回第一个非空值. 任意一个不为空的值.比较有用.

  4. Python笔记(五)_内置函数BIF

    查看所有的内置函数:dir(__builtins__) abs()   获取绝对值 max()   返回给定元素中的最大值 min()   返回给定元素中的最小值 sum()   求和 reverse ...

  5. jmeter 线程组之间传递动态变化的变量值

    http://www.51testing.com/html/01/n-3725501.html https://www.jianshu.com/p/73832bae65af https://blog. ...

  6. 递归算法介绍及Java应用实战

    什么是递归算法 递归算法是把问题转化为规模缩小了的同类问题的子问题,然后递归调用函数(或过程)来表示问题的解.一个过程(或函数)直接或间接调用自己本身,这种过程(或函数)叫递归过程(或函数). 递归过 ...

  7. python第一个问题

    temp=input("请输入1到100之间内的数字:")if num > 50:    print("你妹好漂亮")else:    print(&qu ...

  8. Codeforces Breaking Good

    Breaking Good time limit per test 2 seconds memory limit per test 256 megabytes Breaking Good is a n ...

  9. .net Core在过滤器中获取 系统接口方法(以IMemoryCache 为例) 及HttpContext 获取系统接口

    public   Class  SysActionAttribute :Attribute, IActionFilter      //  Attribute  用于控制器中 特性控制,当在控制器或控 ...

  10. 一、bootstrap-fontawesome-iconpicker组件

    一.bootstrap-fontawesome-iconpicker组件 <!DOCTYPE html> <html lang="en"> <head ...