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. Flink水印机制(watermark)

    Flink流处理时间方式 EventTime 时间发生的时间,例如:点击网站上的某个链接的时间 IngestionTime 某个Flink节点的source operator接收到数据的时间,例如:某 ...

  2. ASP.NET开发知识总结

    1.统一异常处理 某商城采用的异常处理方式,是全局统一捕捉,统一处理 思路: 一.定义异常过滤器    实现 MyExceptionFilter : FilterAttribute,IExceptio ...

  3. xshell几个常用命令以及注意事项:

    xshell几个常用命令以及注意事项: cd .. 回到上级目录 cd xx 进入xx目录 rm xx 删除文件xx rm -rf 删除目录及其所包含的所有文件,高危命令,一定谨慎 mkdir xx ...

  4. Linux查看硬件配置

    1.查看机器所有硬件信息:dmidecode |moredmesg |more 这2个命令出来的信息都非常多,所以建议后面使用"|more"便于查看 2.查看CPU信息 方法一: ...

  5. linux查看日志中特定字符串以及前后信息内容命令

    在项目实施过程中,我们经常会查看日志,更是经常会根据某些特地字符串去查找日志内容. 下面就是日志查找命令: 1.查询字符串命令: cat fileName|grep '要查找的字符串' 实例:cat ...

  6. mysql 【常用sql】

    修改过mysql数据库字段内容默认值为当前时间 --添加CreateTime 设置默认时间 CURRENT_TIMESTAMP ALTER TABLE `table_name` ADD COLUMN ...

  7. 用u盘和iso镜像文件装win8.1系统

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/xyl295528322/article/details/37910939 原料: 1.老毛桃U盘启动 ...

  8. SqlServer表名称定义

    每一个数据表 添加一个 扩展 属性:Description  填写表描述. 查看是否所有表都添加的Sql如下: SELECT a.name AS name, g.[value] FROM sys.ta ...

  9. db2表

    生成列: CREATE TABLE t1 (c1 INT,                 c2 DOUBLE,                 c3 DOUBLE GENERATED ALWAYS ...

  10. 面试题:实现call、apply、bind

    面试题:实现call.apply.bind 实现bind module.exports = function(Tcontext, ...args) { let globalThis = typeof ...