MySQL5.7-连接查询、子查询、关键字顺序、存储引擎

系列文章目录

一、连接查询

连接查询会将多个表的记录横向对接,形成一整张的临时表并返回。

图片中的演示,如果有连接条件,均为左表.班级id=右表.id

  • 内连接:

    返回两个表中满足连接条件的记录。

    SELECT 字段,…… FOR 左表 INNER JOIN 右表 ON 连接条件;
    

    内连接

    多个表的连接查询:

    SELECT 字段,…… FOR 左表 INNER JOIN 右表  INNER JOIN 表 …… ON 连接条件;
    

    下面各种连接的多个表查询,也是上面这个格式。

  • 左连接:

    返回左表的所有记录和右表中满足连接条件的记录,不满足的,就用NULL补充。

    SELECT 字段,…… FOR 左表 LEFT JOIN 右表 ON 连接条件;
    

左连接

  • 右连接:

    返回右表的所有记录和左表中满足连接条件的记录,不满足的,就用NULL补充。

    SELECT 字段,…… FOR 左表 RIGHT JOIN 右表 ON 连接条件;
    

右连接

  • 全连接:

    返回左右表中所有的记录,不满足连接条件的,就用NULL补充。

    mysql不支持全连接,使用UNION连接左连接和右连接,可以实现全连接的效果。

    左连接语句 UNION 右连接语句;
    

全连接

  • 交叉连接(笛卡尔积):

    返回左表中的每一行与右表中每一行的组合。

    SELECT 字段,…… FOR 表名,……;
    

    为了避免箭头混乱,箭头只连接了右表的第一行,其他两行也是同样的道理:

    交叉连接(笛卡尔积)

二、子查询

  • 子查询的概念:

    将一个查询语句的结果当作另外一个查询语句的条件去使用。

  • 语法:

    SELECT 字段,…… FOR 表名 WHERE 表达式 操作符 (子查询)
    

    操作符可以是 IN、NOT IN、EXISTS、NOT EXISTS 等关键字。

    IN和NOT IN已经讲过,补充一下EXISTS、NOT EXISTS:

    EXISTS用于判断子查询的结果集是否为空,若子查询的结果集不为空,返回 TRUE(执行子查询外层语句),否则返回 FALSE(不执行子查询外层语句);若使用关键字 NOT,则返回的值正好相反。

  • 举例:

    使用子查询在students表和course表中查询学习Python课程的学生姓名:

    SELECT name FROM students WHERE course_id IN (SELECT id FROM tb_course WHERE course_name = 'Python');
    

三、关键字顺序

  • 关键字书写顺序:

    SELECT DISTINCT
    	字段名…… 
    FROM
    	表名 
    	连接方式 JOIN 表名 ON 连接条件 
    WHERE
    	过滤条件 
    GROUP BY
    	分组依据 
    HAVING
    	过滤条件 
    ORDER BY
    	排序依据 
    	LIMIT 数量;
    
  • 关键字执行顺序:

    FROM --> JOIN --> ON --> WHERE --> GROUP BY --> HAVING --> SELECT --> DISTINCT --> ORDER BY --> LIMIT

四、存储引擎

  • 常见存储引擎:

    • InnoDB:

      该引擎是MySQL5.5版本及之后的默认存储引擎。支持事务、外键安全性更高
      事务会在后面详细讲解。

      创建表会生成:表结构文件、表数据文件。

    • MyISAM:

      该引擎是MySQL5.5版本之前的默认存储引擎。速度比InnoDB更快,但不支持事务和外键,安全性低。

      创建表会生成:表结构文件、表数据文件、表索引文件。

    • MEMORY:

      也叫内存引擎,数据全部存放在内存中,速度快,但断电数据会丢失。主要用于临时存储

      创建表会生成:表结构文件。

    • BLACKHOLE:

      直译过来就是“黑洞”,它的特点如同其名,无论存入任何数据,都会立刻消失。使用select查询,结果永远为空。该引擎有一些高级特性,在特定的场所很有用,但暂时不做讲解。

      创建表会生成:表结构文件 。

  • 查看所有引擎:

    SHOW ENGINES;
    
  • 设置引擎:
    创建表的同时,设置引擎:

    CREATE TABLE 表名 (
        ……
        ) ENGINE = 存储引擎名称;
    

    临时修改,当前会话有效:

    SET default_storage_engine=存储引擎名称;
    

下一篇

  • 4
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

花_城

你的鼓励就是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值