• Mysql(三):多表查询和存储程序


    今天内容:

    多表查询(内连接 外连接 子查询)

    存储程序(存储过程 函数)


    多表查询

      同时从多张数据表中查取到需要的数据即是多表查询. 多表查询时,参与查询的表中每条数据进行组合,这种效果称为笛卡尔积 .

    顶哥说,多表查询就是将多张表的每一条数据都进行排列组合.其结果就是笛卡尔积.然后通过各种条件的限定筛选出有用的数据!!!

    内连接

    用左边表的记录去匹配右边表的记录,显示出符合条件的记录.

    # 隐式内连接: 无join 关键字 使用where指定条件
    # select * from 表1,表2 where 条件;
    
    # 显示内连接: 使用 inner join 关键字 使用on指定关联条件
    select * from 表1 [inner] join 表2  on 关联条件 where 筛选条件; 
    # where 后跟的是对结果的筛选条件

    外连接

           左外连接: 以join左边的表为主,查询其所有数据,根据关联条件查询join右边的表,将满足条件的数据查询出来.如果没有满足条件的数据则填充null. 可以理解为在内连接的基础上保证左表的数据完整性。

    # select * from 表1 left [outer] join 表2 on 关联条件 where 筛选条件;

      右外连接: 以join右边的表为主,查询其所有数据,根据关联条件查询join左边的表,将满足条件的数据查询出来.如果没有满足条件的数据则填充null. 可以理解为在内连接的基础上保证右表的数据完整性。

    # select * from 表1 rigth [outer] join 表2 on 关联条件 where 筛选条件;

    Tips: 使用外连接要分清主次, 想要全部信息的表是主!

    子查询

      从另一条查询语句查到的结果里查询就是子查询. 根据第一次查询结果不同分为:

    单一结果: select * from 表名 where (= 子查询结果)

    单列多值: select * from 表名 where (in 子查询结果)

    多列多值: select * from (子查询结果) as 别名 where ....


    存储程序

      可以看到, 连接查询语句是很复杂的.当数据表比较多的时候将会更加复杂,如果每次查询都写这么复杂的语句可真让人崩溃啊! 还好我们可以将复杂的连接查询创建为存储过程或函数.

    顶哥通过两个简单的小例子向大家介绍一下mysql中的存储过程和函数以抛砖引玉;感兴趣的同僚可以深入了解一下;

    可以简单的说,存储过程就是一条或者多条sql语句的集合,可视为批文件,但是又不仅限于批处理. 数据库中存储程序除了存储过程还有函数,可以将函数理解为有名字的一段可执行sql语句

    Mysql中创建存储过程和函数的语句分别是:

      create procedure p_name # 创建 名为 p_name的存储过程

      create function fun_name # 创建 名为 fun_name 的函数

    Tips: 存储过程使用call 语句来调用,只能用输出变量返回值. 存储过程也可调用其他 存储过程;

    函数可从 语句外调用(通过函数名),也能返回标量值;

    存储过程简单示例:

    当然这里只是简单的一条语句,也可以是很多语句的复杂组合.需要注意的是:

    "DELIMITER // " 语句的作用是将mysql的结束符设置为//, 因为mysql默认的语句结束符号是';' , 为了避免与存储过程中sql语句的结束符冲突,需要使用DELIMITER改变存储过程的结束符, 并以 "END //" 结束存储过程,定义完毕后再使用"DELIMITER;'' 恢复默认结束符(所有语句一起执行,否则不成功);

    存储函数简单示例:

     

    创建函数时同存储过程一样需要修改默认的结束符;

    这里需要注意的是指定返回类型的关键字是 returns 有s的!

    关注微信公众号,随时随地学习

  • 相关阅读:
    Understand each field of AWR [ID 884046.1]
    Linux iptables 防火墙 添加删除 端口
    SCSI 总线和协议
    How to create physical standby database with 11g RMAN DUPLICATE FROM ACTIVE DATABASE [ID 747250.1]
    How to create physical standby database with 11g RMAN DUPLICATE FROM ACTIVE DATABASE [ID 747250.1]
    Linux iptables 防火墙 添加删除 端口
    Oracle alert log 按天 存放 脚本
    文件系统 和 网络附接存储(NAS: Network Attached Storage)
    SCSI 总线和协议
    IP(Internet Protocal) 地址 说明
  • 原文地址:https://www.cnblogs.com/dintalk/p/10844490.html
Copyright © 2020-2023  润新知