【数据库】MySQL 高级(进阶) SQL 语句

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


前提条件

location表格创建

use class;
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');

【数据库】MySQL 高级(进阶) SQL 语句

store_info表格创建

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');

【数据库】MySQL 高级(进阶) SQL 语句


一、常用查询

1. SELECT(显示查询)

显示表格中一个或数个字段的所有数据记录

SELECT "字段" FROM "表名";

例如
select Store_name from store_info;

【数据库】MySQL 高级(进阶) SQL 语句

2. DISTINCT(不重复查询)

不显示重复的数据记录

SELECT DISTINCT "字段" FROM "表名";

例如
select distinct Store_Name from store_info;

【数据库】MySQL 高级(进阶) SQL 语句

3. WHERE(有条件查询)

按照条件进行查询

SELECT "字段" FROM "表名" WHERE "条件";

例如
select distinct Store_Name from store_info where Sales > 1000;

【数据库】MySQL 高级(进阶) SQL 语句

4. AND/OR(且/或)

SELECT "字段" FROM "表名" WHERE "条件1" {[AND|OR] "条件2"} + ;

例如
select Store_Name from store_info where Sales > 1000 OR ( Sales < 500 and Sales > 200 );

【数据库】MySQL 高级(进阶) SQL 语句

5. IN (显示已知值的字段)

在已知的字段数据取值范围内取值

SELECT "字段" FROM "表名" WHERE "字段" IN ('值1', '值2', ...);

例如
select * from store_info where Store_Name in ('Los Angeles', 'Houston');

【数据库】MySQL 高级(进阶) SQL 语句
另外还有not in命令,用法一致,表示显示不在指定范围内的字段的值。

6. BETWEEN(显示两个值范围内的字段)

在两个字段数据值之间取值,包含两边字段的数据

SELECT "字段" FROM "表名" WHERE "字段"  BETWEEN '值1' AND '值2';

例如
select * from store_info where Date between '2020-12-06' and '2020-12-10';

【数据库】MySQL 高级(进阶) SQL 语句

7. 通配符的使用

通常通配符都是与like配合使用的

% :百分号表示零个、一个或多个字符

_ :下划线表示单个字符

'A_Z':所有以 'A' 起头,另一个任何值的字符,且以 'Z' 为结尾的字符串。例如,'ABZ''A2Z' 都符合这一个模式,而 'AKKZ' 并不符合 (因为在 A 和 Z 之间有两个字符,而不是一个字符)'ABC%': 所有以 'ABC' 起头的字符串。例如,'ABCD''ABCABC' 都符合这个模式。
'%XYZ': 所有以 'XYZ' 结尾的字符串。例如,'WXYZ''ZZXYZ' 都符合这个模式。
'%AN%': 所有含有 'AN'这个模式的字符串。例如,'LOS ANGELES''SAN FRANCISCO' 都符合这个模式。
'_AN%':所有第二个字母为 'A' 和第三个字母为 'N' 的字符串。例如,'SAN FRANCISCO' 符合这个模式,而 'LOS ANGELES' 则不符合这个模式。

LIKE (匹配关键字查询)

SELECT "字段" FROM "表名" WHERE "字段" LIKE {模式};

例如
select * from store_info where Store_Name like '%os%';

【数据库】MySQL 高级(进阶) SQL 语句

8. ORDER BY (按关键字排序)

SELECT "字段" FROM "表名" [WHERE “条件”] ORDER BY "字段" [ASC, DESC];
#ASC 	是按照升序进行排序的,是默认的排序方式。
#DESC 	是按降序方式进行排序。

例如
select Store_Name,Sales,Date from store_info order by Sales DESC;

【数据库】MySQL 高级(进阶) SQL 语句

二、常用函数

1. 数学函数

关键字 含义
abs(x) 返回 x 的绝对值
rand() 返回 0 到 1 的随机数
mod(x,y) 返回 x 除以 y 以后的余数
power(x,y) 返回 x 的 y 次方
round(x) 返回离 x 最近的整数
round(x,y) 保留 x 的 y 位小数四舍五入后的值
sqrt(x) 返回 x 的平方根
truncate(x,y) 返回数字 x 截断为 y 位小数的值
ceil(x) 返回大于或等于 x 的最小整数
floor(x) 返回小于或等于 x 的最大整数
greatest(x1,x2...) 返回集合中最大的值,也可以返回多个字段的最大的值
least(x1,x2…) 返回集合中最小的值,也可以返回多个字段的最小的值
select abs(-1), rand(), mod(5,3), power(2,3), round(1.89);

【数据库】MySQL 高级(进阶) SQL 语句

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

【数据库】MySQL 高级(进阶) SQL 语句

#求一组数据最大值
create table t1 (id1 int, id2 int, id3 int, id4 int);
insert into t1 values (10, 50, 30, 20);
select * from t1;
select greatest(id1,id2,id3,id4) from t1;

【数据库】MySQL 高级(进阶) SQL 语句

#求1000以内的随机整数
select round(rand() * 1000);
select truncate(rand() * 1000,0);

【数据库】MySQL 高级(进阶) SQL 语句

2. 聚合函数

关键字 含义
avg() 返回指定列的平均值
count() 返回指定列中非 NULL 值的个数
min() 返回指定列的最小值
max() 返回指定列的最大值
sum(x) 返回指定列的所有值之和
#求平均值
select avg(Sales) from store_info;

【数据库】MySQL 高级(进阶) SQL 语句

#求表中城市数量
select count(Store_Name) from store_info where Store_Name is NOT NULL;

【数据库】MySQL 高级(进阶) SQL 语句

#统计数量,进行去重
select count(DISTINCT Store_Name) from store_info;

【数据库】MySQL 高级(进阶) SQL 语句

#统计字段中最大值
select max(Sales) from store_info;

【数据库】MySQL 高级(进阶) SQL 语句

#统计字段中最小值
select min(Sales) from store_info;

【数据库】MySQL 高级(进阶) SQL 语句

#统计字段中的总和
select sum(Sales) from store_info;

【数据库】MySQL 高级(进阶) SQL 语句

3. 字符串函数

关键字 含义
trim() 返回去除指定格式的值
concat(x,y) 将提供的参数 x 和 y 拼接成一个字符串
substr(x,y) 获取从字符串 x 中的第 y 个位置开始的字符串,跟substring()函数作用相同
substr(x,y,z) 获取从字符串 x 中的第 y 个位置开始长度为 z 的字符串
length(x) 返回字符串 x 的长度
replace(x,y,z) 将字符串 z 替代字符串 x 中的字符串 y
upper(x) 将字符串 x 的所有字母变成大写字母
lower(x) 将字符串 x 的所有字母变成小写字母
left(x,y) 返回字符串 x 的前 y 个字符
right(x,y) 返回字符串 x 的后 y 个字符
repeat(x,y) 将字符串 x 重复 y 次
space(x) 返回 x 个空格
strcmp(x,y) 比较 x 和 y,返回的值可以为-1,0,1
reverse(x) 将字符串 x 反转
#输出指定一个字段中某一部分
#命令行
i='123456789'
echo ${i:3:4}

【数据库】MySQL 高级(进阶) SQL 语句

#字段替换
#命令行操作
i='123456789'
echo $i | tr '456' 'abc'

【数据库】MySQL 高级(进阶) SQL 语句

#大小写字母替换
#命令行操作
echo abc123xyz | tr 'a-z' 'A-Z'

【数据库】MySQL 高级(进阶) SQL 语句

#字段拼接
select concat(Region, Store_Name) from location where Store_Name = 'Boston';

【数据库】MySQL 高级(进阶) SQL 语句

#如sql_mode开启开启了PIPES_AS_CONCAT,"||"视为字符串的连接操作符而非或运算符,
#和字符串的拼接函数Concat相类似,这和Oracle数据库使用方法一样的
select Region || ' ' || Store_Name from location where Store_Name = 'Boston';

【数据库】MySQL 高级(进阶) SQL 语句

select substr(Store_Name,5) from location where Store_Name = 'Los Angeles';
select substr(Store_Name,3,4) from location where Store_Name = 'New York';

【数据库】MySQL 高级(进阶) SQL 语句

SELECT TRIM ([ [位置] [要移除的字符串] FROM ] 字符串);
#[位置]:的值可以为 LEADING (起头), TRAILING (结尾), BOTH (起头及结尾)。 
#[要移除的字符串]:从字串的起头、结尾,或起头及结尾移除的字符串。缺省时为空格。

例如
select trim(leading 'New ' from 'New York');
select trim(leading 'Los' from (select store_name from location where store_name = 'Los Angeles'));

【数据库】MySQL 高级(进阶) SQL 语句

select replace(Region, 'ast', 'astern')from location;

【数据库】MySQL 高级(进阶) SQL 语句

三、查询与函数

1. GROUP BY(汇总分组)

对GROUP BY后面的栏位的查询结果进行汇总分组,通常是结合聚合函数一起使用的。

GROUP BY有一个原则,就是 SELECT 后面的所有列中,没有使用聚合函数的列,必须出现在GROUP BY后面。

SELECT "字段1", SUM("字段2") FROM "表名" GROUP BY "字段1";

例如
#对分组的总和进行降序排序
select Store_Name,sum(Sales) from store_info group by Store_Name order by sales desc;

【数据库】MySQL 高级(进阶) SQL 语句

2. HAVING (过滤返回值)

用来过滤由 GROUP BY 语句返回的记录集,通常与 GROUP BY 语句联合使用。

HAVING 语句的存在弥补了 WHERE 关键字不能与聚合函数联合使用的不足。

SELECT "字段1", SUM("字段2") FROM "表格名" GROUP BY "字段1" HAVING (函数条件);

例如
select Store_Name, SUM(Sales) from store_info group by Store_Name having SUM(Sales) > 1500;

【数据库】MySQL 高级(进阶) SQL 语句

3. 别名(字段别名 表格别名)

SELECT "表格別名"."字段1" [AS] "字段別名" FROM "表格名" [AS] "表格別名";

例如
select A.Store_Name Store, SUM(A.Sales) "Total Sales" from store_info A group by A.Store_Name;
select Store_Name,sum(Sales) as "Total Sales" from store_info  group by Store_Name;

【数据库】MySQL 高级(进阶) SQL 语句

4. 子查询

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

SELECT "字段1" FROM "表格1" WHERE "字段2" [比较运算符] 				#外查询
(SELECT "字段1" FROM "表格2" WHERE "条件");						   #内查询
#内查询优先级高于外查询

#可以是符号的运算符,例如 =、>、<、>=、<= ;也可以是文字的运算符,例如 LIKE、IN、BETWEEN
例如
#查询两个表交集的城市
select * from location where store_name in (select store_name from store_info);

#查询在location表中西部城市的销售总和
select sum(sales) from store_info where store_name in (select store_name from location where region = 'West');

#通过多表查询,查询两个表中有交集的值
select sum(A.Sales) from store_info A where A.Store_Name in (select Store_Name from location B where B.Store_Name = A.Store_Name);

【数据库】MySQL 高级(进阶) SQL 语句

5. EXISTS(类查询)

用来测试内查询有没有产生任何结果,类似布尔值是否为真。

如果有的话,系统就会执行外查询中的SQL语句。若是没有的话,那整个 SQL 语句就不会产生任何结果。

SELECT "字段1" FROM "表格1" WHERE EXISTS (SELECT * FROM "表格2" WHERE "条件");
例如
#判断是否有西部城市,有的话就计算销售和
,如果没有就输出NULL
select SUM(Sales) from store_info where exists (select * from location where Region = 'West');

【数据库】MySQL 高级(进阶) SQL 语句

四、连接查询

1. 表连接

表连接方式 含义
inner join(内连接) 只返回两个表中联结字段相等的行
left join(左连接) 返回包括左表中的所有记录和右表中联结字段相等的记录,不相等的行则返回null
right join(右连接) 返回包括右表中的所有记录和左表中联结字段相等的记录,不相等的行则返回null
#内连接
select * from location A inner join store_info B on A.Store_Name = B.Store_Name ;
select * from location A inner join store_info B using(Store_Name);
#其中using需要在两张表有同名情况下使用

【数据库】MySQL 高级(进阶) SQL 语句

#右连接
select * from location A RIGHT JOIN store_info B on A.Store_Name = B.Store_Name ;

【数据库】MySQL 高级(进阶) SQL 语句

#多表查询
select * from location A, store_info B where A.store_name = B.store_name;
#效率略低于inner用法

【数据库】MySQL 高级(进阶) SQL 语句

#对分表查询进行分组、排序
select region,sum(B.sales) from location A, store_info B where A.store_name = B.store_name group by region order by sum(B.sales) desc;

【数据库】MySQL 高级(进阶) SQL 语句

2. CREATE VIEW(视图)

视图跟表格的不同是,表格中有实际储存数据记录,而视图是建立在表格之上的一个架构,它本身并不实际储存数据记录。临时表在用户退出或同数据库的连接断开后就自动消失了,而视图不会消失。

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

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;

SELECT * FROM V_REGION_SALES;
DROP VIEW V_REGION_SALES;

【数据库】MySQL 高级(进阶) SQL 语句

3. UNION(联集)

将两个sql语句的结果合并起来,两个sql语句所产生的字段需要是同样的数据记录种类。

#union生成结果的数据记录值将没有重复,且按照字段的顺序进行排序
[SELECT 语句 1] UNION [SELECT 语句 2];

例如
select Store_Name from location union select Store_Name from store_info;

【数据库】MySQL 高级(进阶) SQL 语句

#union all:将生成结果的数据记录值都列出来,无论有无重复
语法:[SELECT 语句 1] UNION ALL [SELECT 语句 2];

例如
select Store_Name from location union all select Store_Name from store_info;

【数据库】MySQL 高级(进阶) SQL 语句

4. 交集

取两个SQL语句结果的交集

#内连接
select [distinct] A.字段 from 左表 A inner join 右表 B on A.字段 = B.字段;
select A.字段 from 左表 A inner join 右表 B using(同名字段);

例如
SELECT A.Store_Name FROM location A INNER JOIN store_info B ON A.Store_Name = B.Store_Name;
SELECT A.Store_Name FROM location A INNER JOIN store_info B USING(Store_Name);

【数据库】MySQL 高级(进阶) SQL 语句

#左连接
select B.字段 from 左表 A left join 右表 B on A字段 = B.字段 where B.字段 is not null;
#右连接
select A.字段 from 左表 A right join 右表 B on A.字段 = B.字段 where A字段 is not null;

例如
select B.store_name from location A left join store_info B on A.store_name = B.store_name where B.store_name is not null;
select A.store_name from location A right join store_info B on A.store_name = B.store_name where A.store_name is not null;

【数据库】MySQL 高级(进阶) SQL 语句

#查询两表相同字段
select A.字段 from 左表 A,右表 B where A.字段 = B.字段;

例如
select B.store_name from location A, store_info B where A.store_name = B.store_name;
select A.store_name from location A, store_info B where A.store_name = B.store_name;

【数据库】MySQL 高级(进阶) SQL 语句

#子查询
select 字段 from 左表 where 字段 in (select 字段 from 右表);

例如
select store_name from location where store_name in (select store_name from store_info);

【数据库】MySQL 高级(进阶) SQL 语句

#去重查询
select distinct B.store_name from location A inner join store_info B using(store_name);
select B.store_name from location A inner join store_info B using(store_name) group by store_name;

【数据库】MySQL 高级(进阶) SQL 语句

5. 无交集

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

#单表无交集查询
#子查询
select distinct store_Name from location where (store_name) not in (select Store_Name from store_info);

【数据库】MySQL 高级(进阶) SQL 语句

#单表无交集查询
#右连接
select B.store_name from location A right join store_info B on A.store_name = B.store_name where A.store_name is null;

#左连接
select A.store_name from location A left join store_info B on A.store_name = B.store_name where ere B.store_name is null;

【数据库】MySQL 高级(进阶) SQL 语句

#多表无交集查询
#视图方式
create view V XXX as select 字段 from 左表 union all select 字段 from 右表;
select 字段 from V_XXX qroup by 字段 having count(字段) = 1;

例如
create view V_union as select  store_name from location union all select store_name from store_info;
select * from V_union;
select store_name from  V_union group by store_name having count(store_name) = 1;

【数据库】MySQL 高级(进阶) SQL 语句

#多表无交集查询
#派生表:将select语句作为一张表来处理


例如
select A.store_name from (select distinct store_name from location union all select distinct store_name from store_info) A group by A.store_name having count(A.store_name) = 1;

【数据库】MySQL 高级(进阶) SQL 语句

#多表无交集查询
#若查询之前其中一个表中有重复值,需要在建视图之前进行查重
create view V_union as select distinct store_name from location union all select distinct store_name from store_info;
select * from V_union;
select store_name from V_union group by store_name having count(store_name) = 1;

【数据库】MySQL 高级(进阶) SQL 语句

五、其他用法

1. CASE

case 是 sql 语句用来 IF-THEN-ELSE 之类逻辑的关键字

SELECT CASE ("字段名")
  WHEN "条件1" THEN "结果1"
  WHEN "条件2" THEN "结果2"
  ...
  [ELSE "结果N"]
  END
FROM "表名";

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


例如
mysql> 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;
#then可以对查询结果进行指定数值

【数据库】MySQL 高级(进阶) SQL 语句

2. NULL 值

2.1 空值(NULL)和无值(“ ”)的区别

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

2.2 查询空值与非空值

#计算长度
select length(null), length('1234'), length('1'), length('');

【数据库】MySQL 高级(进阶) SQL 语句

#指定字段去统计
select count(name) from t2;
select count(*) from t2;

【数据库】MySQL 高级(进阶) SQL 语句

3. 正则表达式

匹配模式 描述 实例
^ 匹配文本的开始字符 ^bd 匹配以 bd 开头的字符串
$ 匹配文本的结束字符 qn$ 匹配以 qn 结尾的字符串
. 匹配任何单个字符 s.t 匹配任何 s 和 t 之间有一个字符的字符串
* 匹配零个或多个在它前面的字符 fo*t 匹配 t 前面有任意个 o
+ 匹配前面的字符 1 次或多次 hom+匹配以 ho 开头,后面至少一个m 的字符串
字符串 匹配包含指定的字符串 clo 匹配含有 clo 的字符串
`p1 p2` 匹配 p1 或 p2
[...] 匹配字符集合中的任意一个字符 [abc] 匹配 a 或者 b 或者 c
[^...] 匹配不在括号中的任何字符 [^ab] 匹配不包含 a 或者 b 的字符串
{n} 匹配前面的字符串 n 次 g{2} 匹配含有 2 个 g 的字符串
{n,m} 匹配前面的字符串至少 n 次,至多m 次 f{1,3} 匹配 f 最少 1 次,最多 3 次
SELECT "字段" FROM "表名" WHERE "字段" REGEXP {模式};
	
例如
SELECT * FROM store_info WHERE Store_Name REGEXP 'os';
SELECT * FROM store_info WHERE Store_Name REGEXP '^[A-G]';
SELECT * FROM store_info WHERE Store_Name REGEXP 'Ho|Bo';

【数据库】MySQL 高级(进阶) SQL 语句

六、存储过程

1. 存储过程概念

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

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

2. 存储过程的优点

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

简单来说:存储过程就是sql语句的脚本。

3. 存储过程相关操作

3.1 创建存储过程

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

【数据库】MySQL 高级(进阶) SQL 语句

创建过程需要数据库的支持,可以进入某个数据库创建或者create procdure 库名.proc()

3.2 调用存储过程

call proc;

【数据库】MySQL 高级(进阶) SQL 语句

3.3 查看存储过程

show create procedure [数据库.]存储过程名;		#查看某个存储过程的具体信息

例如
show create procedure proc;					#查询存储过程内的具体信息
show procedure status like '%proc%' \G	#模糊查询某个存储过程

【数据库】MySQL 高级(进阶) SQL 语句

3.4 存储过程的参数

参数 含义
IN (输入参数) 表示调用者向过程传入值(传入值可以是字面量或变量)
OUT (输出参数) 表示过程向调用者传出值(可以返回多个值)(传出值只能是变量)
INOUT (输入输出参数) 既表示调用者向过程传入值,又表示过程向调用者传出值(值只能是变量)
delimiter $$
create procedure proc1(in input_name char(10))		
-> begin					
-> select * from store_info where store_name = input_name;
-> end $$					
delimiter ;					

call proc1('Boston');

【数据库】MySQL 高级(进阶) SQL 语句

delimiter $$
create procedure proc2(in input_name char(10), out outsales int)
-> begin
-> select sales into outsales from store_info where store_name = input_name;
-> end $$
delimiter ;
call proc2('Boston', @out_sales);					#输出的值只能赋给变量
select @out_sales;

【数据库】MySQL 高级(进阶) SQL 语句

delimiter $$
create procedure proc3(inout insales char(10))
-> begin
-> select sales into insales from store_info where store_name = insales;
-> end $$
delimiter ;
set @inout_sales='Boston';
call proc3(@inout_sales);
select @inout_sales;

【数据库】MySQL 高级(进阶) SQL 语句

3.5 删除存储过程

存储过程内容的修改方法是通过删除原有存储过程,之后再以相同的名称创建新的存储过程。如果要修改存储过程的名称,可以先删除原存储过程,再以不同的命名创建新的存储过程。

drop procedure if exists proc;		
#仅当存在时删除,不添加 IF EXISTS 时,如果指定的过程不存在,则产生一个错误

【数据库】MySQL 高级(进阶) SQL 语句

3.6 控制语句

条件语句
if-then-else ···· end if 

例如
create table game (name varchar(10), sex char(2), team char(3));
desc game;
insert into game values ('小红','女','女子组');
insert into game values ('小白','男','男子组');
select * from  game;

delimiter $$
create procedure proc4(in input_name varchar(10), in in_sex char(2))
 -> begin
 -> if in_sex = '男' then
 -> insert into game value (input_name, in_sex, '男子组');
 -> else
 -> insert into game value (input_name, in_sex, '女子组');
 -> end if;
 -> end$$
delimiter ;

call proc4('小绿','男');
call proc4('小黄','女');
select * from  game;

【数据库】MySQL 高级(进阶) SQL 语句

循环语句
while ···· end while

例如
create table t (id int(10));
insert into t values(10);
DELIMITER $$  
CREATE PROCEDURE proc5()
-> 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 proc5;

【数据库】MySQL 高级(进阶) SQL 语句

总结

1. sql 语句中 HAVING 的用法

  having 对 group by 分组后的结果根据条件进行过滤筛选。

2. mysql数据库有几种表连接

表连接方式 含义
inner join(内连接) 只返回两个表中联结字段相等的行
left join(左连接) 返回包括左表中的所有记录和右表中联结字段相等的记录
right join(右连接 返回包括右表中的所有记录和左表中联结字段相等的记录

3. view视图表是否能更改数据

  如果视图表保存的字段是原表字段,那么数据可以被修改。

  如果字段是通过函数(聚合函数、group by)处理过的字段,那么数据不能被修改。文章来源地址https://www.toymoban.com/news/detail-493420.html

4. 创建存储过程的步骤

  • 先用delimiter临时修改sql语句的结束符;
  • 使用create procedure [库名.]存储过程名() 创建存储过程;
  • 再用delimiter把sql语句的结束符改回分号;
  • 使用call [库名.]存储过程名调用存储过程。

到了这里,关于【数据库】MySQL 高级(进阶) SQL 语句的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • MySQL数据库——高级查询语句

    数据库是用来存储数据,更新,查询数据的工具,而查询数据是一个数据库最为核心的功能,数据库是用来承载信息,而信息是用来分析和查看的。所以掌握更为精细化的查询方式是很有必要的。本文将围绕数据的高级查询语句展开。 1.指定指字段进行查询——SELECT 语法:

    2024年02月11日
    浏览(94)
  • 数据库应用:MySQL高级语句(一)

    目录 一、理论 1.常用查询 2.函数 3.进阶查询 二、实验 1.普通查询 2.函数 3.进阶查询 三、问题 1.MySQL || 运算符不生效 四、总结 常用查询包括:增、删、改、查; 对 MySQL 数据库的查询,除了基本的查询外,有时候需要对查询的结果集进行处理。 (1)selelct select,显示表格中

    2024年02月17日
    浏览(88)
  • 数据库 SQL高级查询语句:聚合查询,多表查询,连接查询

    创建Students和Courses表 直接查询 设置别名查询 设置条件查询 使用COUNT(*) 和 COUNT(StudentID)是一样的效果,因为StudentID是主键,每行记录的主键都不同。另外我们在聚合查询中还是能使用WHERE子句的,比如我们要 查找年龄大于20岁的学生数量 ,可使用以下SQL语句: 函数 说明 SUM

    2024年02月09日
    浏览(127)
  • 【MySQL】数据库SQL语句之DML

    目录 前言: 一.DML添加数据 1.1给指定字段添加数据 1.2给全部字段添加数据 1.3批量添加数据 二.DML修改数据 三.DML删除数据 四.结尾   时隔一周,啊苏今天来更新啦,简单说说这周在做些什么吧,上课、看书、放松等,哈哈哈,所以博客就这样被搁了。   今天感觉不错,给大

    2024年02月08日
    浏览(68)
  • MySQL 高级(进阶) SQL 语句

     创建两表以供使用   ---- SELECT ----显示表格中一个或数个字段的所有数据记录 ---- DISTINCT ----不显示重复的数据记录 ---- WHERE ----有条件查询 ---- AND OR ----且 或 ---- IN ----显示已知的值的数据记录 ---- BETWEEN ----显示两个值范围内的数据记录(包含边界值) ---- 通配符 ----通常通配

    2024年02月10日
    浏览(51)
  • MySQL高级(进阶)SQL语句

    #显示一个字段或者多个字段的所有内容 SELECT “字段” FROM 表名 ; #distinct对字段去重查询 (最好只对单个字段进行去重) SELECT DISTINCT 字段名 FROM 表名 #where 有条件查询 SELECT “字段” FROM 表名 WHERE 条件(例如:sales =!= 100); #and or 查看多个条件 SELECT “字段” FROM 表名 WHE

    2024年02月05日
    浏览(43)
  • MySQL相关的SQL语句、数据库、数据表、字段、类型

    1、 SQL 语句不区分大小写。 SQL语句 用途 描述 mysql -u root -p 连接 MySQL 在命令行窗口中输入 mysql -u root -p 命令,回车,然后输入 MySQL 密码(不要忘记了密码,找回麻烦),再回车就连接上 MySQL 了。最初都是使用 root 用户登录,工作中不能一直使用 root 用户登录。因为 root 权限太

    2024年02月13日
    浏览(95)
  • MySQL 高级(进阶) SQL 语句二

    MYSQL数据库中的三种连接: inner join(内连接):只返回两个表中联结字段相等的行(有交集的值) left join(左连接):返回包括左表中的所有记录和右表中联结字段相等的记录 right join(右连接):返回包括右表中的所有记录和左表中联结字段相等的记录 注:oracle数据库支持 outer

    2024年02月07日
    浏览(44)
  • MySQL数据库中的索引(含SQL语句)

    假设有一张表,表中有100万条数据,这100万条数据在硬盘上是存储在数据页上的,一页数据大小为16k。存储100万条数据那么就需要数据页,假设其中有一条数据是“id为7900”的,那么如果要查询这条数据,其中SQL是SELECT * FROM 表名 WHERE id = 7900。在执行这条SQL语句的时候,MyS

    2024年02月02日
    浏览(80)
  • mysql,用sql语句,建立学生-课程数据库基本表

    学生表 学号 姓名 年龄 性别 院系 Student Sno Sname Sage Ssex Sdept 课程表 课程号 课程名 先行课 学分 Course Cno Cname Cpno Ccredit 选课表 学号 课程号 成绩 SC Sno Cno Grade 注意创建表的时候要注意它的字段名,类型,长度,约束条件,取值范围要合适,大小写符号要正确,中文逗号,分号

    2024年02月08日
    浏览(58)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包