文章目录

  • 一、 CREATE VIEW(视图)
  • 二、 连接查询
    • 2.1 inner join(内连接查询)
    • 2.2 left join(左连接)
    • 2.3 right join(右连接)
  • 三、 空值(NULL) 和 无值(’ ')
  • 四、 存储过程
    • 4.1 存储过程的优点
    • 4.2 事务和存储过程的区别
    • 4.3 创建、调用和查看存储的过程
    • 4.4 存储过程的参数
    • 4.5 存储过程的控制语句

一、 CREATE VIEW(视图)

可以被当作是虚拟表或存储查询

  1. 视图跟表格的不同是,表格中有实际储存资料,而视图是建立在表格之上的一个架构,它本身并不实际储存资料。

  2. 临时表在用户退出或同数据库的连接断开后就自动消失了,而视图不会消失。

  3. 视图不含有数据,只存储它的定义,它的用途一般可以简化复杂的查询。比如你要对几个表进行连接查询,而且还要进行统计排序等操作,写SQL语句会很麻烦的,用视图将几个表联结起来,然后对这个视图进行查询操作,就和对一个表查询一样,很方便。

作用场景:
针对不同的人(权限身份),提供不同结果集的“表”(以表格的形式展示)

功能:

简化查询结果集、灵活查询、可以针对不同用户呈现不同结果集、相对有更高的安全性,本质而言视图是一种select(结果集的呈现)

PS:视图适合于多表连接浏览时使用!不适合增、删、改
而存储过程适合于使用较频繁的SQL语句,这样可以提高执行效率!

视图和表的区别和联系:

区别:

  1. 视图是已经编译好的sql语句。而表不是

  2. 视图没有实际的物理记录。而表有。
    show table status\G

  3. 表只用物理空间而视图不占用物理空间,视图只是逻辑概念的存在,表可以及时对它进行修改,但视图只能有创建的语句来修改

  4. 视图是查看数据表的一种方法,可以查询数据表中某些字段构成的数据,只是一些SQL语句的集合。从安全的角度说,视图可以不给用户接触数据表,从而不知道表结构。

  5. 表属于全局模式中的表,是实表;视图属于局部模式的表,是虚表。

  6. 视图的建立和删除只影响视图本身,不影响对应的基本表。(但是更新视图数据,是会影响到基本表的)

联系:
视图(view)是在基本表之上建立的表,它的结构(即所定义的列)和内容(即所有数据行)都来自基本表,它依据基本表存在而存在。一个视图可以对应一个基本表,也可以对应多个基本表。视图是基本表的抽象和在逻辑意义上建立的新关系。

#格式:
create  view "视图表名"  as   "select 语句";

create view new_xue as select * from xues where score>=80;show table status\G;

示例:

多表创建视图

创建t01表
create table t01 (id int,name varchar(10),age char(10));
insert into t01 values(1,'zhangsan',20);
insert into t01 values(2,'lisi',30);
insert into t01 values(3,'wangwu',29);

create view v_kkk(id,name,score,age) as select kkk.id,kkk.name,kkk.score,t01.age from kkk,t01t01 where kkk.name=t01.name;select * from v_kkk;

update kkk set score='80' where name='lisi';select * from v_kkk;

update v_kkk set score='120' where name='wangwu';select * from kkk;

二、 连接查询

2.1 inner join(内连接查询)

只返回两个表中联结字段相等的行

select liu66.id,liu66.name from liu66 inner join qiqiqi on liu66.name=qiqiqi.name;

select * from liu66 inner join qiqiqi on liu66.name=qiqiqi.name;

2.2 left join(左连接)

返回包括左表中的所有记录和右表中联结字段相等的记录

select * from liu66 left join qiqiqi on liu66.name=qiqiqi.name;

2.3 right join(右连接)

select * from liu66 right join qiqiqi on liu66.name=qiqiqi.name;

三、 空值(NULL) 和 无值(’ ')

  1. 无值的长度为 0,不占用空间的;而 NULL 值的长度是 NULL,是占用空间的。

  2. IS NULL 或者 IS NOT NULL,是用来判断字段是不是为 NULL 或者不是 NULL,不能查出是不是无值的。

  3. 无值的判断使用=’‘或者<>’'来处理。<> 代表不等于。

  4. 在通过 count()指定字段统计有多少行数时,如果遇到 NULL 值会自动忽略掉,遇到无值会加入到记录中进行计算。

create table name(name varchar(10));insert into name values('xiaoming');
insert into name values('xiaohong');
insert into name values('xiaolan');
insert into name values('xiaohuang');
insert into name values('xiaoqin');
insert into name values('');
insert into name values('xiaowei');
select * from name ;

select length (null),length(''),length('123');

select * from name where name='';select * from name where name<>'';

四、 存储过程

  1. 存储过程是组为了完成特定功能的SQL语句集合。

  2. 存储过程在使用过程中是将常用或者复杂的工作预先使用SQL语句写好并用一个指定的名称存储起来,这个过程经编译和优化后存储在数据库服务器中。当需要使用该存储过程时,只需要调用它即可。存储过程在执行上比传统SQL速度更快、执行效率更高。

4.1 存储过程的优点

  1. 封装性

通常完成一个逻辑功能需要多条 SQL 语句,而且各个语句之间很可能传递参数,所以,编写逻辑功能相对来说稍微复杂些,而存储过程可以把这些 SQL 语句包含到一个独立的单元中,使外界看不到复杂的 SQL 语句,只需要简单调用即可达到目的。并且数据库专业人员可以随时对存储过程进行修改,而不会影响到调用它的应用程序源代码

  1. 可增强 SQL 语句的功能和灵活性

存储过程可以用流程控制语句编写,有很强的灵活性,可以完成复杂的判断和较复杂的运算。

  1. 可减少网络流量

由于存储过程是在服务器端运行的,且执行速度快,因此当客户计算机上调用该存储过程时,网络中传送的只是该调用语句,从而可降低网络负载。

  1. 提高性能

当存储过程被成功编译后,就存储在数据库服务器里了,以后客户端可以直接调用,这样所有的 SQL 语句将从服务器执行,从而提高性能。但需要说明的是,存储过程不是越多越好,过多的使用存储过程反而影响系统性能

  1. 提高数据库的安全性和数据的完整性

存储过程提高安全性的一个方案就是把它作为中间组件,存储过程里可以对某些表做相关操作,然后存储过程作为接口提供给外部程序。这样,外部程序无法直接操作数据库表,只能通过存储过程来操作对应的表,因此在一定程度上,安全性是可以得到提高的。

  1. 使数据独立

数据的独立可以达到解耦的效果,也就是说,程序可以调用存储过程,来替代执行多条的 SQL 语句。这种情况下,存储过程把数据同用户隔离开来,优点就是当数据表的结构改变时,调用表不用修改程序,只需要数据库管理者重新编写存储过程即可。

4.2 事务和存储过程的区别

事务:
是为了保证数据一致性、完整行、原子性和持久性。

存储过程:

1.简化复杂性操作
2.减小数据库资源消耗
3.可通过传参,方便、灵活的进行SQL查询类操作

4.3 创建、调用和查看存储的过程

1.创建存储过程

#格式:CREATE PROCEDURE <存储过程名> ( [过程参数[,…] ] ) <过程体>
[过程参数[,…] ] 格式
<过程名>:尽量避免与内置的函数或字段重名
<过程体>:语句
[ IN | OUT | INOUT ] <参数名><类型>

过程名 存储过程的名称,默认在当前数据库中创建。若需要在特定数据库中创建存储过程,则要在名称前面加上数据库的名称,即 db_name.sp_name。 需要注意的是,名称应当尽量避免选取与 MySQL 内置函数相同的名称,否则会发生错误。

过程参数 存储过程的参数列表。其中,<参数名>为参数名,<类型>为参数的类型(可以是任何有效的 MySQL 数据类型)。当有多个参数时,参数列表中彼此间用逗号分隔。存储过程可以没有参数(此时存储过程的名称后仍需加上一对括号),也可以有 1 个或多个参数。 MySQL 存储过程支持三种类型的参数,即输入参数、输出参数和输入/输出参数,分别用 IN、OUT 和 INOUT 三个关键字标识。其中,输入参数可以传递给一个存储过程,输出参数用于存储过程需要返回一个操作结果的情形,而输入/输出参数既可以充当输入参数也可以充当输出参数。

过程体 存储过程的主体部分,也称为存储过程体,包含在过程调用的时候必须执行的 SQL 语句。这个部分以关键字 BEGIN 开始,以关键字 END 结束 在 MySQL 中,服务器处理 SQL 语句默认是以分号作为语句结束标志的。然而,在创建存储过程时,存储过程体可能包含有多条 SQL 语句,这些 SQL 语句如果仍以分号作为语句结束符,那么 MySQL 服务器在处理时会以遇到的第一条 SQL 语句结尾处的分号作为整个程序的结束符,而不再去处理存储过程体中后面的 SQL 语句,这样显然不行。

为解决以上问题,通常使用 DELIMITER 命令将结束命令修改为其他字符。语法格式如下: delimiter $ $

$$ 是用户定义的结束符,通常这个符号可以是一些特殊的符号,如两个“?”或两个“¥”等。
当使用 DELIMITER 命令时,应该避免使用反斜杠“\”字符,因为它是 MySQL 的转义字符成功执行这条 SQL 语句后,任何命令、语句或程序的结束标志就换为两个??
mysql > delimiter ??
若希望换回默认的分号“;”作为结束标志,则在 MySQL 命令行客户端输入下列语句即可
mysql > delimiter ;
注意:delimiter 和分号“;”之间一定要有一个空格

#示例:
创建存储过程

delimiter $$                 #将语句的结束符号从分号;临时改为两个$$ (可以是自定义)
create procedure proc6()        #创建存储过程,过程名为proc, 不带参数
-> begin                        #过程体以关键字BEGIN开始
-> select * from xues;      #过程体语句(自己根据需求进行编写)
-> end $$                        #过程体以关键字END结束
delimiter ;                     #将语句的结束符号恢复为分号

2.调用存储过程

#格式:
call 过程名#示例:
call proc6

3.查看存储过程

#查看某个存储过程的具体信息(如果在指定库中,库名可以省略)
SHOW CREATE PROCEDURE [数据库.] 存储过程名;
##示例:
show create procedure hellodb.proc6\G;##示例:
show create procedure proc6\G;


4.删除存储过程

#格式:
drop procedure if exists 过程名;#示例:
drop procedure if exists proc6;

4.4 存储过程的参数

IN输入参数: 表示调用者向过程传入值(传入值可以是字面量或变量)

OUT输出参数: 表示过程向调用者传出值(可以返回多个值)(传出值只能是变量)

INOUT输入输出参数: 既表示调用者向过程传入值,又表示过程向调用者传出值(值只能是变量)

delimiter $$ create procedure proc8(in inname varchar(20))-> begin-> select * from xues where name=inname;-> end $$
delimiter ;call proc8('xuen');

4.5 存储过程的控制语句

条件控制语句 if-then-else … end if

select * from xues;delimiter $$create procedure proc6(in pro int)-> begin-> declare var int;-> set var=pro*5;-> if var>=10 then-> update xues set age=age+10;-> else-> update xues set age=age-10;-> end if;-> end $$delimiter ;
call proc6(2);select * from xues;


MySQL--高级语句相关推荐

  1. MySQL高级语句简单介绍

    文章目录 一.常用查询 1.按关键字排序 1.1 按单字段排序 1.2 条件查询 1.3 多字段排序 1.4 区间判断 1.5 查询不重复记录 2.对结果进行分组 3.限制结果条目 4.设置别名(al ...

  2. MySQL高级语句精讲

    索引目录 一.按关键字排序 1.单字段排序 2.多字段排序 3.对结果进行排序 二.对结果进行分组 1.group by分组 2.group by结合order by 三.限制结果条目 LIMIT语法 ...

  3. MySQL存储过程分支语句_mysql 高级语句--存储过程(PROCEDURE)

    mysql 高级语句 一.存储过程 1.什么是存储过程: 就是一组SQL语句集,功能强大,可以实现一些比较复杂的逻辑功能. ps:存储过程跟触发器有点类似,都是一组SQL集,但是存储过程是主动调用的, ...

  4. linux mysql select_MySQL-Select语句高级应用

    阅读目录 1.1 SELECT高级应用 1.2 select中where子句使用 1.3 select中ORDER BY子句 1.4 LIMIT子句 1.5 多表连接查询 1.6 Informatic ...

  5. MySQL高级查询语句——超详细,一篇就够了

    MySQL高级查询语句 一.MySQL进阶查询 1.1.按关键字排序--order by 1.2.对结果进行分组--group by 1.2.1.单个分组 1.2.2.分组结合order by使用 1 ...

  6. Mysql高级查询语句练习

    Mysql高级查询语句练习 DROP TABLE IF EXISTS `tblcourse`; CREATE TABLE `tblcourse` ( `CourseId` varchar(3) NOT ...

  7. MysQL高级SQL语句|进阶语句|select语句(一)【图文细解】

    MysQL高级SQL语句 一.SQL语句的概述 SELECT DISTINCT WHERE AND.OR IN BETWEEN 通配符 LIKE ORDER BY GROUP BY HAVING 二. ...

  8. MySQL高级SQL语句(终章)

    目录 一:通配符 1.1查询名字是有开头的记录 1.2查询名字里是贝和摩中间有一个字符的记录 1.3查看贝后面3个字符的名字记录 1.4通配符%和_结合使用 二:子查询 2.1相同表查询 2.2不同表 ...

  9. 数据库应用:MySQL数据库SQL高级语句与操作

    目录 一.理论 1.克隆表与清空表 2.SQL高级语句 3.SQL函数 4.SQL高级操作 5.MySQL中6种常见的约束 二.实验 1.克隆表与清空表 2.SQL高级语句 3.SQL函数 4.SQL ...

  10. 【MySQL数据库】MySQL 高级SQL 语句一

    @[TOC](MySQL 高级SQL 语句 一.MySQL 高级SQL 语句 1.1select -显示表格中一个或数个字段的所有数据记录 1.2distinct不显示重复的数据记录 1.3where ...

最新文章

  1. maven在idea的配置
  2. 单链表的创建示意图, 显示单向链表的分析
  3. Java 中的字符串(String)与C# 中字符串(string)的异同
  4. 趋势发展之人工智能,入行要趁早
  5. 算法的概念与伪代码的使用
  6. NSString删除换行符号
  7. JDBC常用接口详解
  8. 与程序员相关的CPU缓存知识
  9. 150+ Web 2.0 工具和相关资源
  10. APP渗透技巧----------逆向app破解数据包sign值实现任意数据重放添加
  11. EZX交叉编译配置、MPKG程序制作教程
  12. 物联网行业的现状与思考
  13. urule决策引擎实现增量打包部署
  14. appium自动化测试
  15. Go语言环境安装及配置
  16. 仿豆果美食tableview的展开和收缩效果
  17. windows服务器查看lls证书
  18. 盘点免费好用的5款思维导图工具
  19. Foxmail管理多个电子邮箱
  20. win10锁屏界面无法更换图片(亲测有效)

热门文章

  1. 控件注册失败原因汇集
  2. CCF-CSP:编译出错
  3. VMware ESXi安装window10方法
  4. 未来是RFID物联网的世界
  5. 失落城堡手游获取服务器信息99,《失落城堡》手游精英服资格如何获取 失落城堡手游精英服资格获取途径一览...
  6. BACnet MSTP协议485功能测试
  7. 【Java】简易视频播放器
  8. 数据可视化:FineReport公司财务报表制作
  9. mysql查询人口最多的城市_mysql-查询计数地区和区域的雇员数
  10. 网易教程python_15行Python代码实现网易云热门歌单实例教程