MySQL--高级语句
文章目录
- 一、 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(视图)
可以被当作是虚拟表或存储查询
视图跟表格的不同是,表格中有实际储存资料,而视图是建立在表格之上的一个架构,它本身并不实际储存资料。
临时表在用户退出或同数据库的连接断开后就自动消失了,而视图不会消失。
视图不含有数据,只存储它的定义,它的用途一般可以简化复杂的查询。比如你要对几个表进行连接查询,而且还要进行统计排序等操作,写SQL语句会很麻烦的,用视图将几个表联结起来,然后对这个视图进行查询操作,就和对一个表查询一样,很方便。
作用场景:
针对不同的人(权限身份),提供不同结果集的“表”(以表格的形式展示)
功能:
简化查询结果集、灵活查询、可以针对不同用户呈现不同结果集、相对有更高的安全性,本质而言视图是一种select(结果集的呈现)
PS:视图适合于多表连接浏览时使用!不适合增、删、改
而存储过程适合于使用较频繁的SQL语句,这样可以提高执行效率!
视图和表的区别和联系:
区别:
视图是已经编译好的sql语句。而表不是
视图没有实际的物理记录。而表有。
show table status\G表只用物理空间而视图不占用物理空间,视图只是逻辑概念的存在,表可以及时对它进行修改,但视图只能有创建的语句来修改
视图是查看数据表的一种方法,可以查询数据表中某些字段构成的数据,只是一些SQL语句的集合。从安全的角度说,视图可以不给用户接触数据表,从而不知道表结构。
表属于全局模式中的表,是实表;视图属于局部模式的表,是虚表。
视图的建立和删除只影响视图本身,不影响对应的基本表。(但是更新视图数据,是会影响到基本表的)
联系:
视图(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) 和 无值(’ ')
无值的长度为 0,不占用空间的;而 NULL 值的长度是 NULL,是占用空间的。
IS NULL 或者 IS NOT NULL,是用来判断字段是不是为 NULL 或者不是 NULL,不能查出是不是无值的。
无值的判断使用=’‘或者<>’'来处理。<> 代表不等于。
在通过 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<>'';
四、 存储过程
存储过程是组为了完成特定功能的SQL语句集合。
存储过程在使用过程中是将常用或者复杂的工作预先使用SQL语句写好并用一个指定的名称存储起来,这个过程经编译和优化后存储在数据库服务器中。当需要使用该存储过程时,只需要调用它即可。存储过程在执行上比传统SQL速度更快、执行效率更高。
4.1 存储过程的优点
- 封装性
通常完成一个逻辑功能需要多条 SQL 语句,而且各个语句之间很可能传递参数,所以,编写逻辑功能相对来说稍微复杂些,而存储过程可以把这些 SQL 语句包含到一个独立的单元中,使外界看不到复杂的 SQL 语句,只需要简单调用即可达到目的。并且数据库专业人员可以随时对存储过程进行修改,而不会影响到调用它的应用程序源代码
- 可增强 SQL 语句的功能和灵活性
存储过程可以用流程控制语句编写,有很强的灵活性,可以完成复杂的判断和较复杂的运算。
- 可减少网络流量
由于存储过程是在服务器端运行的,且执行速度快,因此当客户计算机上调用该存储过程时,网络中传送的只是该调用语句,从而可降低网络负载。
- 提高性能
当存储过程被成功编译后,就存储在数据库服务器里了,以后客户端可以直接调用,这样所有的 SQL 语句将从服务器执行,从而提高性能。但需要说明的是,存储过程不是越多越好,过多的使用存储过程反而影响系统性能
- 提高数据库的安全性和数据的完整性
存储过程提高安全性的一个方案就是把它作为中间组件,存储过程里可以对某些表做相关操作,然后存储过程作为接口提供给外部程序。这样,外部程序无法直接操作数据库表,只能通过存储过程来操作对应的表,因此在一定程度上,安全性是可以得到提高的。
- 使数据独立
数据的独立可以达到解耦的效果,也就是说,程序可以调用存储过程,来替代执行多条的 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--高级语句相关推荐
- MySQL高级语句简单介绍
文章目录 一.常用查询 1.按关键字排序 1.1 按单字段排序 1.2 条件查询 1.3 多字段排序 1.4 区间判断 1.5 查询不重复记录 2.对结果进行分组 3.限制结果条目 4.设置别名(al ...
- MySQL高级语句精讲
索引目录 一.按关键字排序 1.单字段排序 2.多字段排序 3.对结果进行排序 二.对结果进行分组 1.group by分组 2.group by结合order by 三.限制结果条目 LIMIT语法 ...
- MySQL存储过程分支语句_mysql 高级语句--存储过程(PROCEDURE)
mysql 高级语句 一.存储过程 1.什么是存储过程: 就是一组SQL语句集,功能强大,可以实现一些比较复杂的逻辑功能. ps:存储过程跟触发器有点类似,都是一组SQL集,但是存储过程是主动调用的, ...
- 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 ...
- MySQL高级查询语句——超详细,一篇就够了
MySQL高级查询语句 一.MySQL进阶查询 1.1.按关键字排序--order by 1.2.对结果进行分组--group by 1.2.1.单个分组 1.2.2.分组结合order by使用 1 ...
- Mysql高级查询语句练习
Mysql高级查询语句练习 DROP TABLE IF EXISTS `tblcourse`; CREATE TABLE `tblcourse` ( `CourseId` varchar(3) NOT ...
- MysQL高级SQL语句|进阶语句|select语句(一)【图文细解】
MysQL高级SQL语句 一.SQL语句的概述 SELECT DISTINCT WHERE AND.OR IN BETWEEN 通配符 LIKE ORDER BY GROUP BY HAVING 二. ...
- MySQL高级SQL语句(终章)
目录 一:通配符 1.1查询名字是有开头的记录 1.2查询名字里是贝和摩中间有一个字符的记录 1.3查看贝后面3个字符的名字记录 1.4通配符%和_结合使用 二:子查询 2.1相同表查询 2.2不同表 ...
- 数据库应用:MySQL数据库SQL高级语句与操作
目录 一.理论 1.克隆表与清空表 2.SQL高级语句 3.SQL函数 4.SQL高级操作 5.MySQL中6种常见的约束 二.实验 1.克隆表与清空表 2.SQL高级语句 3.SQL函数 4.SQL ...
- 【MySQL数据库】MySQL 高级SQL 语句一
@[TOC](MySQL 高级SQL 语句 一.MySQL 高级SQL 语句 1.1select -显示表格中一个或数个字段的所有数据记录 1.2distinct不显示重复的数据记录 1.3where ...
最新文章
- maven在idea的配置
- 单链表的创建示意图, 显示单向链表的分析
- Java 中的字符串(String)与C# 中字符串(string)的异同
- 趋势发展之人工智能,入行要趁早
- 算法的概念与伪代码的使用
- NSString删除换行符号
- JDBC常用接口详解
- 与程序员相关的CPU缓存知识
- 150+ Web 2.0 工具和相关资源
- APP渗透技巧----------逆向app破解数据包sign值实现任意数据重放添加
- EZX交叉编译配置、MPKG程序制作教程
- 物联网行业的现状与思考
- urule决策引擎实现增量打包部署
- appium自动化测试
- Go语言环境安装及配置
- 仿豆果美食tableview的展开和收缩效果
- windows服务器查看lls证书
- 盘点免费好用的5款思维导图工具
- Foxmail管理多个电子邮箱
- win10锁屏界面无法更换图片(亲测有效)