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. Microsoft Office Excel

    解除合并,并复制原始值到每一个解除合并后的单元格 对齐方式 -> 合并后居中 -> 取消单元格合并 编辑 -> 查找和选择 -> 定位条件 -> 空值 输入=然后按↑选择 ...

  2. MAC使用命令行打包出ipa包-通过xcodeproj

    参考 : https://www.jianshu.com/p/32af2f71b4e5--老了,里面的一些命令现在都没有了,但可以借鉴思路 https://www.jianshu.com/p/004c ...

  3. Nginx负载均衡之TCP/UDP流

    负载均衡是指在多个后端服务器之间有效地分配网络流量. 从NGINX Plus R5[1] 版本开始可以代理和负载均衡传输控制协议(Transmission Control Protocol,TCP)通 ...

  4. python中6个序列的内置类型分别是什么,列表和元组的异同有哪些

    1.Python中6个序列的内置类型分别是什么? Python包含6中内建的序列,即列表.元组.字符串.Unicode字符串.buffer对象和 xrange 对象.序列通用的操作包括:索引.长度.组 ...

  5. (转)微信调用扫码和支付功能是都报错 the permission value is offline verifying

    原文地址:https://blog.csdn.net/qq_34794885/article/details/98504970

  6. nginx 设置http访问ftp目录内文件

    设置 nginx “403 Forbidden” 错误的原因及解决办法 原文链接 https://www.cnblogs.com/chenzc/p/4461130.html nginx 的 403 F ...

  7. [LeetCode] 181.超过经理收入的员工

    Employee表包含所有员工,他们的经理也属于员工.每个员工都有一个 Id,此外还有一列对应员工的经理的 Id. +----+-------+--------+-----------+ | Id | ...

  8. 面相对象编程 扩充之封装、访问机制、 property

    封装: 封装指的是可以将一堆属性和方法,封装到对象中 ps : 对象就好比一个 “袋子/容器”, 可以存放一堆属性和方法 ps : 存不是目的,目的是为了取,可以通过“对象” d的方式获取属性或方法 ...

  9. js 模拟window.open 打开新窗口

    为什么要去模拟window.open() 打开一个 新的窗口呢,因为有些浏览器默认会拦截 window.open, 当需要函数中打开新窗口时,接可以使用a标签去模拟打开. /** * a模拟windo ...

  10. linux内核的简单介绍

    linux的版本号分为两个部分:内核(Kernel)和发行套件(distribution)版本. 内核版本是linus领导下的开发小组开发出的系统内核的版本号,而发行套件是由其他组织或者厂家将linu ...