一、多表联查
1.1、子查询 (外查询、内查询)
1.2、表连接查询
1.2.1 inner join(内连接):只返回两个表中联结字段相等的行
1.2.2、左连接 返回包括左表中的所有记录和右表中联结字段相等的记录
1.2.3、右连接 返回包括右表中的所有记录和左表联结字段相等的记录
二、Create View 视图
视图跟表格的不同是,表格中有实际储存数据记录,而视图是建立在表格之上的一个架构,它本身并不是实际存储数据记录。临时表在用户退出或者同数据库的连接断开后就自动消失,而视图不会消失。视图不含有数据,只存储它的定义,它的用途一般可以进行简化复杂的查询。
语法:Create view "视图表名" AS "select 语句"
Create view v_region_sales as select a.region region,sum(B.sales)sales from location A inner join Store_Info B on A.Store_Name = B.Store_name Group by REGION;
三、UNION 联集
将两个SQL语句的结果合并起来,两个SQL语句所产生的字段需要是相同的数据记录种类
2.1、UNION:生成结果的数据记录值将没有重复,且按照字段的顺序进行排序
语法:[select 语句1]union [select 语句2];
2.2、union all:生成结果的数据记录值都列出来,无论有无重复
语法:[select 语句1] union [select 语句2];
select store_name from location union select store_name from store_info;
select store_name from location union all select store_name from store_info;
四、存储过程
存储过程是一组为了完成特定功能的SQL语句集合
存储过程在使用过程中是将常用或者复杂的工作预先使用SQL语句写好并用一个指定的名称存储起来,这个过程经编译和优化后存储在数据库服务器中。当需要使用该存储过程时,只需要调用它即可。存储过程在执行上比传统SQL速度更快、执行效率更高。
4.1、存储过程的优点
- 执行一次后,会将生成的二进制代码驻留缓冲区,提高执行效率
- SQL语句加上控制语句的集合,灵活性高
- 在服务器端存储,客户端调用时,降低网络负载
- 可多次重复被调用,可随时修改,不影响客户端调用
- 可完成所有的数据库操作,也可控制数据库的信息访问权限
## 创建存储过程 ##
DELIMITER $$ #将语句的结束符号从分号;临时改为两个$$(可以是自定义)
CREATE PROCEDURE Proc() #创建存储过程,过程名为proc,不带参数
-> begin #过程体以关键字 BEGIN 开始
-> select * from store_info; #过程体语句
-> END $$ #过程体以关键字END结束
DELIMITER ; 将语句的结束符号恢复为分号
## 调用存储过程 ##
CALL Proc;
## 查看存储过程 ##
show create procedure [数据库.]存储过程名; #查看某个存储过程的具体信息
show create procedure proc;
## 存储过程的参数 ##
in 输入参数:表示调用者向过程传入值(传入值可以是字面量或变量)
out 输出参数:表示过程向调用者传出值(可以返回多个值)(传出值只能是变量)
inout 输入输出值:即表示调用者向过程传入值,又表示过程向调用者传出值