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的!
关注微信公众号,随时随地学习

Mysql(三):多表查询和存储程序的更多相关文章
- MySQL之多表查询一 介绍 二 多表连接查询 三 符合条件连接查询 四 子查询 五 综合练习
MySQL之多表查询 阅读目录 一 介绍 二 多表连接查询 三 符合条件连接查询 四 子查询 五 综合练习 一 介绍 本节主题 多表连接查询 复合条件连接查询 子查询 首先说一下,我们写项目一般都会建 ...
- MySQL之单表查询 一 单表查询的语法 二 关键字的执行优先级(重点) 三 简单查询 四 WHERE约束 五 分组查询:GROUP BY 六 HAVING过滤 七 查询排序:ORDER BY 八 限制查询的记录数:LIMIT 九 使用正则表达式查询
MySQL之单表查询 阅读目录 一 单表查询的语法 二 关键字的执行优先级(重点) 三 简单查询 四 WHERE约束 五 分组查询:GROUP BY 六 HAVING过滤 七 查询排序:ORDER B ...
- Vc数据库编程基础MySql数据库的表查询功能
Vc数据库编程基础MySql数据库的表查询功能 一丶简介 不管是任何数据库.都会有查询功能.而且是很重要的功能.上一讲知识简单的讲解了表的查询所有. 那么这次我们需要掌握的则是. 1.使用select ...
- Mariadb/MySQL数据库单表查询基本操作及DML语句
Mariadb/MySQL数据库单表查询基本操作及DML语句 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一数据库及表相关概述 1>.数据库操作 创建数据库: CREATE ...
- day 39 MySQL之多表查询
MySQL之多表查询 阅读目录 一 介绍 二 多表连接查询 三 符合条件连接查询 四 子查询 五 综合练习 一 介绍 本节主题 多表连接查询 复合条件连接查询 子查询 首先说一下,我们写项目一般都 ...
- day 38 MySQL之单表查询
MySQL之单表查询 阅读目录 一 单表查询的语法 二 关键字的执行优先级(重点) 三 简单查询 四 WHERE约束 五 分组查询:GROUP BY 六 HAVING过滤 七 查询排序:ORDER ...
- mysql(三) 数据表的基本操作操作
mysql(三) 数据表的基本操作操作 创建表,曾删改查,主键,外键,基本数据类型. 1. 创建表 create table 表名( 列名 类型 是否可以为空, 列名 类型 是否可以为空 )ENGIN ...
- day15(mysql 的多表查询,事务)
mysql之多表查询 1.合并结果集 作用:合并结果集就是把两个select语句查询的结果连接到一起! /*创建表t1*/ CREATE TABLE t1( a INT PRIMARY KEY , b ...
- mysql数据库优化课程---11、mysql普通多表查询
mysql数据库优化课程---11.mysql普通多表查询 一.总结 一句话总结:select user.username,user.age,class.name,class.ctime from u ...
随机推荐
- java8 lambda 函数式编程
package com.atguigu.java8; import java.util.ArrayList; import java.util.Comparator; import java.util ...
- [linux]centos7下解决yum install mysql-server没有可用包
第一步:安装从网上下载文件的wget命令 [root@master ~]# yum -y install wget 第二步:下载mysql的repo源 [root@master ~]# wget ht ...
- Oracle Multitenant Environment (一) About
About oracle mulittenant environment The multitenant architecture enables an Oracle database to func ...
- HR系统-人员申请单
部门在人员缺失时,须要进行人员申请, 申请会涉及到单据的建立及审核.单据建立界面例如以下:
- 百度LBS云搜索时报错 "filter:area is not filteable field, please set property in the cloud-storage
{"status":2,"message":"filter:area is not filteable field, please set prope ...
- 【转】 vsftp上传文件出现553 Could not create file解决方法
因工作需要,需要搭建一个ftp服务器,我使用ubuntu 10.04操作系统,下载vsftpdy源代码, 进行了编译,安装,然后按照INSTALL文件,创建了用户等操作. 因为时间比较紧,我采用 ...
- JavaSE入门学习10:Java修饰符
Java语言提供了非常多修饰符,主要分为下面两类: 訪问修饰符 非訪问修饰符 修饰符用来定义类.方法或者变量.通常放在语句的最前端.我们通过以下的样例来说明: <span style=" ...
- 【cocos2dx 小技巧】半透明屏蔽罩和弹出框的实现
今天介绍一下,弹出框的和屏蔽罩的小实现~ 弹出框主要用到了cocos2dx生命周期里面的OnEnter()函数,就是当Layer被addChild的时候会调用的函数(所以假设把OnEnter的代码加到 ...
- POJ 1741 Tree 树形DP(分治)
链接:id=1741">http://poj.org/problem?id=1741 题意:给出一棵树,节点数为N(N<=10000),给出N-1条边的两点和权值,给出数值k,问 ...
- sed 之 N D P
sed的N,D,P 是用于多行模式空间的命令,分别对应于n,d,p n & N: n(next)输出模式空间的内容,然后读取新的输入行,n命令不创建多行模式空间:N(Next)通过读取新的输入 ...
