今天内容:

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

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


多表查询

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

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

内连接

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

# 隐式内连接: 无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的!

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

Mysql(三):多表查询和存储程序的更多相关文章

  1. MySQL之多表查询一 介绍 二 多表连接查询 三 符合条件连接查询 四 子查询 五 综合练习

    MySQL之多表查询 阅读目录 一 介绍 二 多表连接查询 三 符合条件连接查询 四 子查询 五 综合练习 一 介绍 本节主题 多表连接查询 复合条件连接查询 子查询 首先说一下,我们写项目一般都会建 ...

  2. MySQL之单表查询 一 单表查询的语法 二 关键字的执行优先级(重点) 三 简单查询 四 WHERE约束 五 分组查询:GROUP BY 六 HAVING过滤 七 查询排序:ORDER BY 八 限制查询的记录数:LIMIT 九 使用正则表达式查询

    MySQL之单表查询 阅读目录 一 单表查询的语法 二 关键字的执行优先级(重点) 三 简单查询 四 WHERE约束 五 分组查询:GROUP BY 六 HAVING过滤 七 查询排序:ORDER B ...

  3. Vc数据库编程基础MySql数据库的表查询功能

    Vc数据库编程基础MySql数据库的表查询功能 一丶简介 不管是任何数据库.都会有查询功能.而且是很重要的功能.上一讲知识简单的讲解了表的查询所有. 那么这次我们需要掌握的则是. 1.使用select ...

  4. Mariadb/MySQL数据库单表查询基本操作及DML语句

    Mariadb/MySQL数据库单表查询基本操作及DML语句 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一数据库及表相关概述 1>.数据库操作 创建数据库: CREATE ...

  5. day 39 MySQL之多表查询

    MySQL之多表查询   阅读目录 一 介绍 二 多表连接查询 三 符合条件连接查询 四 子查询 五 综合练习 一 介绍 本节主题 多表连接查询 复合条件连接查询 子查询 首先说一下,我们写项目一般都 ...

  6. day 38 MySQL之单表查询

    MySQL之单表查询   阅读目录 一 单表查询的语法 二 关键字的执行优先级(重点) 三 简单查询 四 WHERE约束 五 分组查询:GROUP BY 六 HAVING过滤 七 查询排序:ORDER ...

  7. mysql(三) 数据表的基本操作操作

    mysql(三) 数据表的基本操作操作 创建表,曾删改查,主键,外键,基本数据类型. 1. 创建表 create table 表名( 列名 类型 是否可以为空, 列名 类型 是否可以为空 )ENGIN ...

  8. day15(mysql 的多表查询,事务)

    mysql之多表查询 1.合并结果集 作用:合并结果集就是把两个select语句查询的结果连接到一起! /*创建表t1*/ CREATE TABLE t1( a INT PRIMARY KEY , b ...

  9. mysql数据库优化课程---11、mysql普通多表查询

    mysql数据库优化课程---11.mysql普通多表查询 一.总结 一句话总结:select user.username,user.age,class.name,class.ctime from u ...

随机推荐

  1. codevs1009 产生数

    题目描述 Description 给出一个整数 n(n<10^30) 和 k 个变换规则(k<=15). 规则: 一位数可变换成另一个一位数: 规则的右部不能为零. 例如:n=234.有规 ...

  2. kendo中需要kendo.default.min.css

    kendo中需要kendo.default.min.css,这个默认是没有加入头文件的,还是需要手动加入一下 <link href="~/Scripts/kendo/styles/ke ...

  3. P1082||T1200 同余方程 codevs|| 洛谷

     时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond   http://codevs.cn/problem/1200/||https://www.luogu.o ...

  4. Ubuntu 16.04安装Insight实现汇编的调试

    由于Ubuntu从9.04开始就把Insight从APT源中删除,所以使用APT无法安装,而且<Assembly Language Step By Step, for Linux!>此书讲 ...

  5. Ubuntu 16.04安装Synaptic Package Manager图形化APT管理工具

    安装: sudo apt-get install synaptic 启动:

  6. Effictive Java学习笔记1:创建和销毁对象

    建议1:考虑用静态工厂方法代替构造器 理由:1)静态方法有名字啊,更容易懂和理解.构造方法重载容易让人混淆,并不是好主意 2)静态工厂方法可以不必每次调用时都创建一个新对象,而公共构造函数每次调用都会 ...

  7. Open Flash Chart 简介

    http://www.ibm.com/developerworks/cn/opensource/os-cn-ecl-ofc/ Open Flash Chart(OFC)是一个开源的 Flash 图表绘 ...

  8. c++中的set_new_handler和new_handler

    当operator new申请一个内存失败的时候,它会进行如下的处理步骤:    1.如果存在客户指定的处理函数,则调用处理函数(new_handler),如果不存在则抛出一个异常. 2.继续申请内存 ...

  9. UltraEdit UE如何设置自动换行

    1如何设置Ultraedit自动换行     学过编程方面电脑知识的朋友可能都清楚,ultraedit是一款易用强大的文本编辑工具.并且打开没有Unicode签名(BOM)的UTF-8格式半角英文文件 ...

  10. JavaWeb开发环境搭建

    Tomcat 的主要配置 Tomcat:tomcat是实现了一个JavaEE标准的最小的Webserver,是Apche组织开发的,免费的server,能够在网络中直接下载. 最新的版本号应该是8的版 ...