Mysql — 刷题知识点

一. 功能函数

1. 大小写转换 UCASE/LCASE (列名)

LCASE是将内容转换为小写

UCASE将内容转换为大写

CASE是条件控制语句的关键字

二、join ... on 问题

1. right join ..on

RIGHT JOIN 关键字会返回右表 (t2) 所有的行,即使在左表 (t1) 中没有匹配的行。或者更多。如果右表有某记录与左表多条记录匹配(满足 on 子句条件)则 RIGHT JOIN 结果行数多于右表。

具体来说,如果此题再加一条记录 ('1114', '张三', '2000-08-06', '男'), 则答案会是 5 。

4行

2. full join

Mysql(版本8.0.25)不支持full join,使用union连接左连接和右连接,得到全连接

三、排序

1. 最早的日期 + 分区

Rank()函数:为结果集分区中每一行分配一个排名,行等级由一加上前面的等级指定。

RANK() OVER( PARTITION BY 表达式 ##将结果集划分为分区 ORDER BY 表达式 [ASC|DESC] ##对分区内的进行排序 )

SELECT player_id, device_id

FROM (SELECT *, RANK() OVER (PARTITION BY player_id ORDER BY event_date) AS rank_date FROM gamelist) t

WHERE t.rank_date = 1;

目的是从名为 gamelist 的表中选择每个玩家的第一个事件(按照事件日期排序)。

详细解释:

  1. SELECT player_id, device_id: 这是查询语句的主体部分,指定了要从数据库中检索的列,即玩家ID和设备ID。

  2. FROM (SELECT *, RANK() OVER (PARTITION BY player_id ORDER BY event_date) AS rank_date FROM gamelist) t: 这是一个子查询,它首先对 gamelist 表中的数据进行排名,并根据 player_id 进行分区。RANK() OVER (PARTITION BY player_id ORDER BY event_date) 这部分使用窗口函数 RANK() 对每个玩家的事件按照日期进行排序并分配一个排名。子查询使用别名 t 表示。

  3. WHERE t.rank_date = 1: 这是主查询的过滤条件,它筛选出排名为1的行,即每个玩家的第一个事件。

四、存储

1. 知识点

https://www.cnblogs.com/zhoufangcheng0405/p/8028566.html

1. 创建存储过程

create procedure 过程名

@parameter [as ] 参数类型

@parameter [as ] 参数类型

。。。

as

begin

end

执行存储过程:execute 过程名

2. 触发事件

在 SQL 中,"触发器"(Trigger)是一种特殊的存储过程,它会在数据库中的特定事件发生时自动执行。这些事件可以是INSERT、UPDATE 或 DELETE操作。

建个存储过程

使用SQL语句建个存储过程proc_stu,然后以student表中的学号Stu_ID为输入参数@s_no,返回学生个人的指定信息。

CREATE PROCEDURE [stu].[proc_student]

@s_no【as】 int

AS

BEGIN

select * from stu.student where Stu_ID=@s_no

END

五、权限

1. 知识点

1.GRANT 赋于权限

常用的系统权限集合有以下三个:

CONNECT(基本的连接), RESOURCE(程序开发), DBA(数据库管理)

常用的数据对象权限有以下五个:

ALL ON 数据对象名, SELECT ON 数据对象名, UPDATE ON 数据对象名,

DELETE ON 数据对象名, INSERT ON 数据对象名, ALTER ON 数据对象名

GRANT CONNECT, RESOURCE TO 用户名;

GRANT SELECT ON 表名 TO 用户名;

GRANT SELECT, INSERT, DELETE ON表名 TO 用户名1, 用户名2;

2.REVOKE 回收权限

REVOKE CONNECT, RESOURCE FROM 用户名;

REVOKE SELECT ON 表名 FROM 用户名;

REVOKE SELECT, INSERT, DELETE ON表名 FROM 用户名1, 用户名2; ...

@'%' :任何主机的通配符,@:划分用户名和主机 , %:代表"任何"

user.*: user数据库的所有表

*.*:所有数据库的所有表

revoke ... on ... from

六、正则表达式

知识点 REGEXP ' '

MySQL 中使用 REGEXP 来操作正则表达式的匹配。

  • ^ 该符号表示匹配输入字符串的开始位置;
  • $表示匹配输入字符串的末尾位置;
  • [...] 表示匹配所包含的任意一个字符;
  • [^...]表示不能匹配括号内的任意单个字符;
  • x|y 这条竖线表示匹配x 或匹配y。

取居住地址Address以'C'或'h'开头 或以 'et' 结尾的所有数据,

SELECT * FROM persons WHERE AddressREGEXP '^[Ch]|et$';

七、 case when then用法

https://www.cnblogs.com/Richardzhu/p/3571670.html

八、插入

**普通插入(全字段):**INSERT INTO table_name VALUES (value1, value2, ...)

**普通插入(限定字段):**INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...)

**多条一次性插入:**INSERT INTO table_name (column1, column2, ...) VALUES (value1_1, value1_2, ...), (value2_1, value2_2, ...), ...

**从另一个表导入:**INSERT INTO table_name SELECT * FROM table_name2 [WHERE key=value

比如:INSERT INTO employees SELECT * FROM new_employees WHERE age >= 30;

表格插入字段不能用table,全字段可以省略字段名

九、模式

https://www.cnblogs.com/ndxsdhy/archive/2010/12/21/1912571.html

外模式是面向数据库用户或应用程序的局部数据视图;

模式并不涉及数据的物理存储细节

模式/内模式映像保证了数据库具有较高的物理独立性。

索引的组织方式是B+树索引,还是Hash索引与数据库的内模式有关

十、其他

null

在sql中若要取得NULL,则必须通过IS NULL或者IS NOT NULL进行获取,无法直接使用等号,SQL中的null不能用于比较

删除

DELETE 可用于删除表中的行数据;

DROP 一般删除表的,视图是虚拟表,本质还是从真实表中获取数据,它是在使用的时候动态的从真实表中查出来的

CLOSE 可用于关闭游标;

REVOKE 可用于收回语句或对象许可。

批处理

不能定义一个check约束后,立即在同一个批处理中使用;

修改一个表中的字段名后,不可以在同一个批处理中引用这个新字段

Create default,Create rule,Create trigger,Create procedure,Create view等语句同一个批处理中只能提交一个;

不能把规则和默认值绑定到表字段或自定义字段上之后,立即在同一个批处理中使用。

相关推荐
学地理的小胖砸35 分钟前
【Python 操作 MySQL 数据库】
数据库·python·mysql
dddaidai1231 小时前
Redis解析
数据库·redis·缓存
数据库幼崽1 小时前
MySQL 8.0 OCP 1Z0-908 121-130题
数据库·mysql·ocp
Amctwd1 小时前
【SQL】如何在 SQL 中统计结构化字符串的特征频率
数据库·sql
betazhou2 小时前
基于Linux环境实现Oracle goldengate远程抽取MySQL同步数据到MySQL
linux·数据库·mysql·oracle·ogg
lyrhhhhhhhh2 小时前
Spring 框架 JDBC 模板技术详解
java·数据库·spring
喝醉的小喵4 小时前
【mysql】并发 Insert 的死锁问题 第二弹
数据库·后端·mysql·死锁
付出不多4 小时前
Linux——mysql主从复制与读写分离
数据库·mysql
初次见面我叫泰隆4 小时前
MySQL——1、数据库基础
数据库·adb
Chasing__Dreams4 小时前
Redis--基础知识点--26--过期删除策略 与 淘汰策略
数据库·redis·缓存