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等语句同一个批处理中只能提交一个;

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

相关推荐
Python私教26 分钟前
model中能定义字段声明不存储到数据库吗
数据库·oracle
mqiqe3 小时前
Python MySQL通过Binlog 获取变更记录 恢复数据
开发语言·python·mysql
工业甲酰苯胺3 小时前
MySQL 主从复制之多线程复制
android·mysql·adb
BestandW1shEs3 小时前
谈谈Mysql的常见基础问题
数据库·mysql
重生之Java开发工程师3 小时前
MySQL中的CAST类型转换函数
数据库·sql·mysql
教练、我想打篮球3 小时前
66 mysql 的 表自增长锁
数据库·mysql
Ljw...3 小时前
表的操作(MySQL)
数据库·mysql·表的操作
哥谭居民00013 小时前
MySQL的权限管理机制--授权表
数据库
wqq_9922502773 小时前
ssm旅游推荐系统的设计与开发
数据库·旅游