Mysql高阶语句与MySQL存储过程

这篇具有很好参考价值的文章主要介绍了Mysql高阶语句与MySQL存储过程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


Mysql高阶语句

准备环境

mysql -uroot -p
create database kgc;
use kgc;

create table location(region varchar(10),store_name char(20)); # 表一结构
create table store_info(storm_name char(20),sales int(10),date char(15)); #表二结构



# 表一数据内容
insert into location values ('East','Bostion');
insert into location values ('East','New York');
insert into location values ('West','Los Angeles');
insert into location values ('West','Houstion');

# 表二数据内容
insert into store_info values('Los Angeles',1500,'2023-01-30');
insert into store_info values('Los Angeles',300,'2023-01-30');
insert into store_info values('Houstion',200,'2023-01-30');
insert into store_info values('Bostion',700,'2023-01-30');


select * from region;
select * from fare;

一、MySQL高阶进阶SQL语句

1、select

显示表格中一个或数个字段的所有资料
语法:select 字段 from 表名

select region from store_info;

2、distinct

不显示重复的数据记录
语法:select distinct ‘字段’ from ‘表名’;

select distinct storm_name from store_info ;

3、where

有条件查询
语法:select “字段” from"表名" where ‘条件’;

select storm_name from store_info where sales > 1000;

4、and or

==**且 ,或
语法:select “字段” from “表名” where “条件1” {[and|or] “条件2”}+ ;

select sales from store_info where sales > 500 and sales < 1000;
select sales from store_info where sales > 500 or sales < 1000;

5、in

显示已知的值的数据记录
语法:select “字段” from “表名” where “字段” in (‘值1’, ‘值2’, …);

select * from store_info where storm_name in (‘Los Angeles’,‘Houston’);

6、between

显示两个值范围内的数据记录
语法:select “字段” from “表名” where “字段” between ‘值1’ and ‘值2’;

select * from store_info where date between ‘2020-12-05’ and ‘2020-12-10’;

7、通配符

通常通配符都是跟 LIKE 一起使用的

Mysql高阶语句与MySQL存储过程,mysql,数据库
Mysql高阶语句与MySQL存储过程,mysql,数据库
like:用于匹配模式来查找资料
语法:select “字段” from “表名” where “字段” like{模式};

select * from store_info where storm_name like ‘Los%’;
select storm_name from store_info where storm_name like ‘Los%’;

8、order by

按关键字排序
语法:select “字段” from “表名” [where “条件”] order by “字段”[ASC, DESC];

select sales,date,storm_name from store_info order by sales desc;

9、函数

数学函数
Mysql高阶语句与MySQL存储过程,mysql,数据库

select abs(-1), rand(), mod(5,3), power(2,3), round(1.89);

select round(1.8937,3), truncate(1.235,2), ceil(5.2), floor(2.1), least(1.89,3,6.1,2.1);

字符串函数
Mysql高阶语句与MySQL存储过程,mysql,数据库
10、group by

  • by后面的栏位的查询结果进行汇总分组,通常是结合聚合函数一起使用的
  • group by 有一个原则,就是 select 后面的所有列中,没有使用聚合函数的列,必须出现在group by后面。

语法:select 字段1,sum(字段2) from表名 group by 字段1;

select store_name,sum(sales) from store_info select 字段1,wum(字段2) from 表名 group by 字段1;

11、having

  • 用来过滤由group by语句返回的记录集,通常与group by语句联合使用。
  • having语句的存在弥补了where关键字不能与聚合函数联合使用的不足。如果被select的只有函数栏,那就不需要group by子句。

语法:select 字段1,sum(字段2) from 表名 group by 字段1 having(函数条件);

select site,count(money),sum(money),date from from group by site having sum(money) >=700;

12、别名

字段别名、表格别名

select location.store_name from location,store_info where location.store_name = store_info.store_name;

13、子查询

连接表格,在WHERE 子句或HAVING 子句中插入另一个SQL 语句

SELECT 字段1 FROM 表格1 WHERE 字段2 [比较运算符] #外查询
(SELECT 字段1 FROM 表格2 WHERE 条件) #内查询

  • 可以是符号的运算符
    例:=、>、<、>=、<=
  • 也可以是文字的运算符
    例:LIKE、IN、BETWEEN
select A.site,region from REGION AS A where A.site in
(select B.site from FARE AS B where money<2000);

select B.site,money,date from FARE AS B where site in
(select A.site from REGION AS A where region = 'north');

14、EXISTS

  • 用来测试内查询有没有产生任何结果,类似布尔值是否为真
  • 如果有的话,系统就会执行外查询中的SQL语句,若是没有,那整个SQL语句就不会产生任何结果。
语法:
SELECT 字段1 FROM 表1 WHERE EXISTS (SELECT * FROM 表2 WHERE 条件);

例:

select region from REGION where exists (select * from FARE where money = '700');

二、MySQL高阶进阶SQL语句2

环境准备

use kgc;
create table location (Region char(20),Store_Name char(20));
insert into location values('East','Boston');
insert into location values('East','New York');
insert into location values('West','Los Angeles');
insert into location values('West','Houston');


create table store_info (Store_Name char(20),Sales int(10),Date char(10));
insert into store_info values('Los Angeles','1500','2020-12-05');
insert into store_info values('Houston','250','2020-12-07');
insert into store_info values('Los Angeles','300','2020-12-08');
insert into store_info values('Boston','700','2020-12-08');


select * from location;
select * from store_Info

1、连接查询

  • 内连接 inner join: 只返回两个表中联结字段相等的行
  • 左连接 left join:返回包括左表中的所有记录和右表中联结字段相等的记录
  • 右连接 right join :返回包括右表中的所有记录和左表中联结字段相等的记录

内连接1 inner join

语法:select 字段 from 表名1 表别名1 inner join 表名2 表别名2 on 表别名1.联结字段 = 表别名2.联结字段; 

例:
select * from location A inner join store_info B on A.store_name = B.store_name ;

== 内连接2 inner join(using)函数

语法:select 字段 from 表名1 inner join 表名2 using(联结字段);

例:
select * from location inner join store_info using(store_name}; #必须保证要查询的交集字符字段名一样才可以

左连接 left join

语法:select 字段 from 表1 表别名1 left join 表2 表别名2 on 表别名1.联结字段1 = B.联结字段2 ;

例:
 select * from location A left join store_info B on A.store_name = B.store_name ;

右连接 right join

语法:select 字段 from 表1 表别名1 right join 表2 表别名2 on 表别名1.联结字段1 = 表别名2.联结字段2;

例:
select * from location A right join store_info B on A.store_name = B.store_name ;

多表查询

语法:
select 字段 from 表1,表2 where 表1.联结字段 = 表2.联结字段;

2、create view 视图

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

  • 视图跟表格的不同是,表格中有实际储存数据记录,而视图是建立在表格之上的一个架构,它本身并不实际储存数据记录。
  • 临时表在用户退出或同数据库的连接断开后就自动消失了,而视图不会消失。
  • 视图不含有数据,只存储它的定义,它的用途一般可以简化复杂的查询。比如你要对几个表进行连接查询,而且还要进行统计排序等操作,写SQL语句会很麻烦的,用视图将几个表联结起来,然后对这个视图进行查询操作,就和对一个表查询一样,很方便。
语法:create view "视图表名" AS "select 语句";

例子
create view v_aa 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;

3、union联集

将两个SQL语句的结果合并起来,两个SQL语句产生的字段需要是同样的资料种类

  • UNION:生成结果的资料值将没有重复,且按照字段的顺序进行排序。
语法:
select 语句1 union select 语句2;
  • union all:将生成结果的资料值都列出来,无论有无重复
语法:select 语句1 union all select 语句2;

4、交集值

取两个SQL语句结果的交集

  • 内连接查询
    Mysql高阶语句与MySQL存储过程,mysql,数据库
  • 左连接查询交集字符

Mysql高阶语句与MySQL存储过程,mysql,数据库

  • 右连接查询交集字符

Mysql高阶语句与MySQL存储过程,mysql,数据库

5、无交集值

显示第一个SQL语句的结果,且与第二个SQL语句没有交集的结果,还不能重复

  • 子查询无交集Mysql高阶语句与MySQL存储过程,mysql,数据库

  • 左连接查询无交集Mysql高阶语句与MySQL存储过程,mysql,数据库

  • 右连接查询无交集
    Mysql高阶语句与MySQL存储过程,mysql,数据库

6、case

是 SQL 用来做为 if-then-else之类逻辑的关键字

语法:
select case("字段名")
--> when "条件1" then "结果1"
--> when "条件2" then "结果2"
  ...
  [lese "结果N"]
  END
FROM "表名";

# "条件" 可以是一个数值或是公式。 ELSE 子句则并不是必须的。



例子:
select store_name, case store_name 
  when 'Los Angeles' then sales * 2 
  when 'Boston' then 2000
  else sales   end "New sales",date from store_Info;
 
#"New sales" 是用于 case那个字段的字段名。

7、空值(NULL) 和 无值(‘’) 的区别

  • 无值的长度为 0,不占用空间的;而 NULL 值的长度是 NULL,是占用空间的。
  • IS NULL 或者 IS NOT NULL,是用来判断字段是不是为 NULL 或者不是 NULL,不能查出是不是无值的。
  • 无值的判断使用='‘或者<>’'来处理。<> 代表不等于; !=也代表不等于。
  • 在通过 count()指定字段统计有多少行数时,如果遇到 NULL 值会自动忽略掉,遇到无值会加入到记录中进行计算。

(1)使用length函数查看字符的长度

  • null长度就为null
  • 字符1234的长度就为4
  • 空值的长度为0

select length(null), length(‘1234’), length(‘’);

(2)查看表里面字符为null的行和不为null的行

语法:
select 字段 from 表名 where 字段 is null;
select 字段 from 表名 where 字段 is not null;
例:
select  *  from cs where name is null;
select  *  from cs where name is not null;

(3)查看空值的行和不为空值的行

语法:
select 字段 from 表名 where 字段 = '';
select 字段 from 表名 where 字段 != '';
select 字段 from 表名 where 字段 <> '';
例:
select * from cs where name = '';
select  * from cs where  name <> '';
select  * from cs where  name != '';

(4)统计所有的行数和忽略为null值的行

语法:
select count(*) from 表名;
select count(name) from 表名;
例子
select count(*) from cs;
select count(name) from cs;

正则表达式
Mysql高阶语句与MySQL存储过程,mysql,数据库

语法:
select "字段" from "表名" where "字段" regexp {模式};

(1)匹配以es结尾的字符串的字段

select * from store_info where store_name regexp ‘es$’;

(2)匹配字符串里包含to的字段

select * from store_info where store_name regexp ‘to’;

(3)匹配字符串以A-G开头的字段

select * from store_info where store_name regexp ’ ^ [A-G] ’ ;

(4)匹配字符串以 HO | Bo 开头的字段

select * from store_info where store_name regexp ‘Ho|Bo’;

MySQL存储过程

存储过程的概念

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

存储过程的优点

  • 执行一次后,会将生成的二进制代码驻留缓冲区,提高执行效率
  • SQL语句加上控制语句的集合,灵活性高
  • 在服务器端存储,客户端调用时,降低网络负载
  • 可多次重复被调用,可随时修改,不影响客户端调用
  • 可完成所有的数据库操作,也可控制数据库的信息访问权限

创建存储过程

  • 执行一次后,会将生成的二进制代码驻留缓冲区,提高执行效率
  • SQL语句加上控制语句的集合,灵活性高
  • 在服务器端存储,客户端调用时,降低网络负载
  • 可多次重复被调用,可随时修改,不影响客户端调用
  • 可完成所有的数据库操作,也可控制数据库的信息访问权限

创建存储过程

语法:
delimiter $$							#将语句的结束符号从分号;临时改为两个$$(可以是自定义)
create procedure cs()					#创建存储过程,过程名为Proc,不带参数
-> begin								#过程体以关键字 begin开始
-> select * from store_info;			#过程体语句
-> end $$								#过程体以关键字 end 结束
delimiter ;								#将语句的结束符号恢复为分号


##调用存储过程##
call cs;

存储过程的参数

  • IN 输入参数:表示调用者向过程传入值(传入值可以是字面量或变量)
  • OUT 输出参数:表示过程向调用者传出值(可以返回多个值)(传出值只能是变量)
  • INOUT 输入输出参数:既表示调用者向过程传入值,又表示过程向调用者传出值(值只能是变量)

in
Mysql高阶语句与MySQL存储过程,mysql,数据库
out
Mysql高阶语句与MySQL存储过程,mysql,数据库
inout
Mysql高阶语句与MySQL存储过程,mysql,数据库

删除存储过程

  • 存储过程内容的修改方法是通过删除原有存储过程,之后再以相同的名称创建新的存储过程。如果要修改存储过程的名称,可以先删除原存储过程,再以不同的命名创建新的存储过程。
语法:
DROP PROCEDURE IF EXISTS Proc;		#仅当存在时删除,不添加 IF EXISTS 时,如果指定的过程不存在,则产生一个错误

存储过程的控制语句

  • if
  • while

if
Mysql高阶语句与MySQL存储过程,mysql,数据库
while文章来源地址https://www.toymoban.com/news/detail-538100.html

2)循环语句while ···· end while
DELIMITER $$  
CREATE PROCEDURE proc3()
-> begin 
-> declare var int(10);  
-> set var=0;  
-> while var<6 do  
-> insert into t values(var);  
-> set var=var+1;  
-> end while;  
-> end $$  

DELIMITER ;

CALL Proc3;

到了这里,关于Mysql高阶语句与MySQL存储过程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Mysql】X-DOC:Mysql数据库大量数据查询加速(定时JOB和存储过程应用案例)

    在某中台系统中,设计了大量的基础数据(维度数据、维度映射关系等)来支撑业务功能,业务表中存在大量的维度外键关联字段,其优点是可以实现前端的选择录入,数据校验,确保录入数据的准确性;缺点是在做业务报表时,需要做大量的维度关联(join)操作。 受限于

    2024年02月12日
    浏览(40)
  • 【MySQL】探索MySQL存储过程的魔力,初学者的数据库编程秘笈(内含实战SQL脚本)

    🧑‍💻作者名称:DaenCode 🎤作者简介:啥技术都喜欢捣鼓捣鼓,喜欢分享技术、经验、生活。 😎人生感悟:尝尽人生百味,方知世间冷暖。 📖所属专栏:重温MySQL MySQL存储过程作为一种服务器端的 数据库编程方式 ,提供了高效、可重用的方法来执行相对复杂的数据库操

    2024年02月15日
    浏览(68)
  • Mysql数据库实验报告--实验五 存储过程和触发器

    在这个系列会更新一些最近老师要求写的实验报告~ 大家尽量对着我的文章做一个参考,不要盲目的cv,毕竟这个对于我们以后的工作学习还是十分重要的。 从这个实验开始,就不在cmd命令行里面进行mysql数据库的操作,因为代码长度和代码的复杂性,需使用 MySQL Workbench: 双

    2024年02月09日
    浏览(60)
  • 使用MySQL存储过程提高数据库效率和可维护性

    MySQL 存储过程是一种强大的数据库功能,它允许你在数据库中存储和执行一组SQL语句,类似于编程中的函数。存储过程可以大幅提高数据库的性能、安全性和可维护性。本文将详细介绍MySQL存储过程的使用。 MySQL存储过程是一组预编译的SQL语句,它们以一个名称存储在数据库

    2024年02月08日
    浏览(47)
  • MySQL数据库——存储过程-变量(系统变量、用户定义变量、局部变量)

    目录 系统变量  1.查看系统变量  2.设置系统变量 演示示例 用户定义变量 1.赋值  2.使用 演示示例 局部变量 声明  赋值 演示示例 变量 在MySQL中变量分为三种类型: 系统变量、用户定义变量、局部变量。 系统变量是MySQL服务器提供,不是用户定义的,属于服务器层面。分为全

    2024年02月05日
    浏览(52)
  • MySQL数据库——存储过程-介绍以及基本语法(特点、创建、调用、查看、删除、示例)

    目录 介绍 特点 基本语法 创建 调用 查看 删除  示例  存储过程是 事先经过编译 并 存储在数据库 中的一段 SQL 语句的 集合 ,调用存储过程可以简化应用开发人员的很多工作,减少数据在数据库和应用服务器之间的传输,对于提高数据处理的效率是有好处的。 存储过程思想

    2024年02月06日
    浏览(67)
  • 数据库系统原理及MySQL应用教程实验七存储过程与函数的创建管理

    1. 理解存储过程和函数的概念。 2. 掌握创建存储过程和函数的方法。 3. 掌握执行存储过程和函数的方法。 4. 掌握游标的定义、使用方法。 1.验证性实验:某超市的食品管理的数据库的Food表对其操作。 2.设计性试验:学校教师管理数据库中的teacherInfo表对其操作。 三、实验步

    2024年02月03日
    浏览(53)
  • mysql高级语句之视图、连接查询与存储过程

    目录 视图 视图和表的区别 视图和表的联系 视图命令 视图特点 NULL 值 null、空值和零的区别 连接查询 内连接 左连接 右连接 存储过程 概述 简介 存储过程的优点 语法 调用存储过程 存储过程的参数 查看存储过程 查看指定存储过程信息 修改存储过程 删除存储过程 数据库中

    2024年02月10日
    浏览(46)
  • MySQL高阶语句之二

    目录 一、子查询   1.1语法  1.2select  1.3insert  1.3update  1.4delete 1.5 exists  1.6别名as 二、MySQL视图 2.1功能 2.2区别 2.3联系 2.4 创建视图(单表) 2.5 创建视图(多表) 2.6修改原表数据 2.7修改视图数据 三、NULL值 四、连接查询 4.1内连接 4.1.1语法  4.1.2实例 4.2左连接 4.3右连接  五、存

    2024年02月16日
    浏览(25)
  • MySQL高阶语句之一

    目录 模版表 一、ORDER BY语法 1.1语法  1.2升序  1.3降序  1.4多高字段排序 二、AND/OR--且/或 2.1AND 2.2OR 2.3嵌套/多条件  三、distinct 查询不重复记录 3.1语法 四、GROUP  BY语法 4.1语法  五、限制结果条目(limit) 5.1语法  5.2实验 五、设置别名(alias----as) 5.1语法 5.2实验  5.4查询

    2024年02月16日
    浏览(17)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包