SQL
文章平均质量分 69
基础
吴声子夜歌
个人学习记录
展开
-
SQL分析——常见问题十二
【代码】SQL分析——常见问题十二。原创 2023-04-06 01:27:25 · 158 阅读 · 0 评论 -
SQL分析——常见问题十一
【代码】SQL分析——常见问题十一。原创 2023-04-05 23:12:21 · 154 阅读 · 0 评论 -
SQL分析——常见问题十(日期查询)
【代码】SQL分析——常见问题十(日期查询)原创 2023-04-05 11:36:34 · 254 阅读 · 0 评论 -
SQL分析——常见问题九
【代码】SQL分析——常见问题九。原创 2023-04-05 01:09:27 · 205 阅读 · 0 评论 -
SQL分析——常见问题八
【代码】SQL分析——常见问题八。原创 2023-04-04 22:52:20 · 148 阅读 · 0 评论 -
SQL分析——使用邻接表模型在MySQL中管理分层数据
邻接表模型简介分层数据无处不在。它可以是博客类别,产品层次结构或组织结构。在MySQL中有许多方法可以管理分层数据,而邻接表模型可能是最简单的解决方案。由于其简单性,邻接列表模型是开发人员和数据库管理员非常喜欢的选择。在邻接列表模型中,每个节点都有一个指向其父节点的指针。顶层节点没有父节点。请参阅以下电子产品类别:...原创 2022-04-20 17:53:48 · 1335 阅读 · 0 评论 -
SQL分析——常见问题七
获取特定数据库中所有表的MySQL行计数要获取特定数据库mysqldemo中所有表的行数,请使用以下步骤:首先,获取数据库中的所有表名其次,构造一个SQL语句,其中包含SELECT COUNT(*) FROM table_name以分隔的所有表的所有语句UNION。第三,使用预处理语句执行SQL 语句。首先,要获取数据库的所有表名,请information_schema按以下方式从数据库中查询:SELECT table_name FROM information_schema.TABL原创 2022-04-20 00:53:38 · 297 阅读 · 0 评论 -
SQL分析——常见问题六
添加序号row_number函数简介:这 row_number()是一个排名函数,它返回一行的序号,从第一行的1开始。版本低于8.0的MySQL不支持row_number()就像Microsoft SQL Server,Oracle或PostgreSQL一样。幸运的是,MySQL提供了可用于模拟row_number()函数的会话变量 。MySQL row_number - 为每一行添加一个行号:要模拟 row_number()函数,您必须在查询中使用会话变量。以下语句从employees表原创 2022-04-20 00:25:32 · 671 阅读 · 0 评论 -
SQL语法——使用正则查询
MySQL REGEXP运算符MySQL适应Henry Spencer实现的正则表达式。MySQL允许您使用REGEXP运算符在SQL语句中匹配模式。以下说明REGEXP了WHERE 子句中运算符 的语法:SELECT column_listFROM table_nameWHERE string_column REGEXP pattern; 此语句执行 string_column对pattern的模式匹配。如果string_column匹配的值为WHERE原创 2022-04-19 23:18:25 · 2737 阅读 · 0 评论 -
SQL分析——常见问题五
删除重复数据DROP TABLE IF EXISTS contacts_test; CREATE TABLE contacts_test ( id INT PRIMARY KEY AUTO_INCREMENT, first_name VARCHAR(50) NOT NULL, last_name VARCHAR(50) NOT NULL, email VARCHAR(255) NOT NULL); INSERT INTO contacts_test (first原创 2022-04-19 23:12:17 · 549 阅读 · 0 评论 -
SQL语法——MySQL 列生成
MySQL生成列简介创建新表时,请在CREATE TABLE语句中指定表列。然后,可以使用INSERT,UPDATE和DELETE 语句直接修改表中的列数据。MySQL 5.7引入了一个名为generated column 的新功能。它被称为生成列,因为此列中的数据是基于预定义的表达式或其他列计算的。例如,具有contacts以下结构:CREATE TABLE IF NOT EXISTS contacts ( id INT AUTO_INCREMENT PRIMARY KEY, fi原创 2022-04-18 23:32:58 · 2163 阅读 · 0 评论 -
SQL语法——mysqldump 备份工具
mysqldump 备份工具MySQL GUI工具(如phpMyAdmin,SQLyog等)通常可以轻松地为备份MySQL数据库提供功能。但是,如果您的数据库很大,备份过程可能会非常慢,因为备份文件需要通过网络传输到客户端PC。结果,备份过程增加了MySQL数据库服务器的锁定和可用时间。MySQL提供了一个非常有用的工具,可以非常快速地在服务器上本地备份或转储MySQL数据库。备份文件存储在服务器的文件系统中,因此您只需在需要时下载它。备份MySQL数据库的工具是mysqldump。它位于MySQL安原创 2022-04-18 23:11:52 · 976 阅读 · 0 评论 -
SQL语法——MySQL表维护
分析表语句MySQL查询优化器是MySQL服务器的一个重要组件,它为查询创建最佳查询执行计划。对于特定的查询,查询优化器使用存储的密钥分发等因素来决定在哪些表应当你执行被连接的顺序加入,以及指标应当用于特定的表。但是,密钥分发有时可能不准确,例如,在表中进行了大量数据更改(包括插入,删除或更新)之后。如果密钥分发不准确,查询优化器可能会选择可能导致严重性能问题的错误查询执行计划。要解决此问题,可以运行ANALYZE TABLE表的语句,例如,以下语句分析示例数据库中的payments表。ANALYZ原创 2022-04-18 22:48:29 · 556 阅读 · 0 评论 -
SQL语法——MySQL访问控制系统
MySQL访问控制系统MySQL实现了一个复杂的访问控制和权限系统,允许您创建全面的访问规则来处理客户端操作并有效防止未经授权的客户端访问数据库系统。当客户端连接到服务器时,MySQL访问控制有两个阶段:连接验证:连接到MySQL数据库服务器的客户端需要有一个有效的用户名和密码。此外,客户端连接的主机必须与MySQL授权表中的主机匹配。请求验证:成功建立连接后,对于客户端发出的每个语句,MySQL会检查客户端是否具有足够的权限来执行特定语句。MySQL能够检查数据库,表和字段级别的权限。有一个原创 2022-04-18 22:37:57 · 783 阅读 · 0 评论 -
SQL语法——计划事件
MySQL事件调度程序配置MySQL使用一个称为事件调度线程的特殊线程来执行所有调度事件。可以通过执行以下命令来查看事件调度程序线程的状态:SHOW PROCESSLIST; 默认情况下,未启用事件调度程序线程。要启用和启动事件调度程序线程,需要执行以下命令:SET GLOBAL event_scheduler = ON; 现在,要查看事件调度程序线程的状态,请SHOW PROCESSLIST再次执行 命令。现在,要查看事件调度程序线程的状态,请SHOW PROCESSLIST再次执行原创 2022-04-17 21:59:45 · 971 阅读 · 0 评论 -
SQL语法——触发器
MySQL触发器简介在MySQL中,触发器是一组SQL语句,当对关联表上的数据进行更改时会自动调用这些语句。可以定义触发器在INSERT,UPDATE或DELETE语句更改数据之前或之后调用。在MySQL 5.7.2版之前,可以为每个表定义最多六个触发器。BEFORE INSERT - 在将数据插入表格之前激活。AFTER INSERT - 将数据插入表格后激活。BEFORE UPDATE - 在更新表中的数据之前激活。AFTER UPDATE - 更新表中的数据后激活。BEFORE DELE原创 2022-04-17 20:44:43 · 11335 阅读 · 0 评论 -
SQL语法——创建视图、可更新视图
CREATE VIEW语句简介CREATE [ALGORITHM = {MERGE | TEMPTABLE | UNDEFINED}]VIEW view_name [(column_list)]ASselect-statement; 视图的处理算法使用MERGE算法,MySQL首先将输入查询与SELECT定义视图的语句组合成单个查询。然后MySQL执行组合查询以返回结果集。 如果SELECT语句包含聚合函数,例如 MIN,MAX,SUM,COUNT,AVG 或DISTINCT,G原创 2022-04-16 23:04:33 · 11217 阅读 · 0 评论 -
SQL语法——存储过程游标、列表
游标MySQL游标是只读的,不可滚动且不敏感的。只读:您无法通过游标更新基础表中的数据。不可滚动:您只能按SELECT语句确定的顺序获取行。您无法以相反的顺序获取行。此外,您不能跳过行或跳转到结果集中的特定行。未定型:有两种光标:未定型游标和不敏感游标。敏感光标指向实际数据,而不敏感光标使用数据的临时副本。敏感性游标比不敏感游标执行得更快,因为它不必创建临时数据副本。但是,对来自其他连接的数据所做的任何更改都将影响敏感光标正在使用的数据,因此,如果不更新敏感光标正在使用的数据,则更安全。MySQL原创 2022-04-16 22:07:01 · 850 阅读 · 0 评论 -
SQL语法——存储过程IF语句、CASE语句、循环
IF语句语法:IF expression THEN statements;END IF; --IF expression THEN statements;ELSE else-statements;END IF;--IF expression THEN statements;ELSEIF elseif-expression THEN elseif-statements;...ELSE else-statements;END IF; 示原创 2022-04-16 21:44:11 · 7350 阅读 · 0 评论 -
SQL语法——细节问题(AUTO_INCREMENT、临时表、TRUNCATE TABLE、LOAD DATA INFILE)
AUTO_INCREMENTAUTO_INCREMENT列具有以下属性:AUTO_INCREMENT列的起始值为1,当您NULL向列中插入值或在INSERT语句中省略其值时,它会增加1 。要获取最后生成的序列号,请使用LAST_INSERT_ID() 函数。我们经常使用后续语句的最后一个插入ID,例如,将数据插入表中。最后生成的序列在会话中是唯一的。换句话说,如果另一个连接生成序列号,则可以通过连接使用LAST_INSERT_ID()函数获取序列号。如果在表中插入新行并为序列列指定值,则如果列原创 2022-04-15 22:54:43 · 1240 阅读 · 0 评论 -
SQL语法——表锁定(LOCK、UNLOCK)
MySQL 表锁定锁是与表关联的标志。MySQL允许客户端会话显式获取表锁,以防止其他会话在特定时间段内访问同一个表。客户端会话只能为自己获取或释放表锁。它无法获取或释放其他会话的表锁。CREATE TABLE tbl ( id INT NOT NULL AUTO_INCREMENT, col INT NOT NULL, PRIMARY KEY (id)) Engine = InnoDB; LOCK和UNLOCK TABLES语法以下语句显式获取表锁:LOCK TABLES tab原创 2022-04-15 21:07:16 · 7798 阅读 · 0 评论 -
SQL语法——REPLACE语句
REPLACEMySQL REPLACE语句是标准SQL的MySQL扩展。MySQL REPLACE语句的工作原理如下:如果新行已不存在,则MySQL REPLACE 语句将插入新行。如果新行已存在,则 REPLACE 语句首先删除旧行,然后插入新行。在某些情况下,REPLACE语句仅更新现有行。注意:要确定表中是否已存在新行,MySQL使用PRIMARY KEY或UNIQUE KEY 索引。如果表没有这些索引之一,则REPLACE语句等同于INSERT语句。示例CREATE TABL原创 2022-04-15 19:31:18 · 21172 阅读 · 0 评论 -
SQL语法——细节问题(UNION、INTERSECT、MINUS、INSERT、UPDATE JOIN、ON DELETE CASCADE、DELETE JOIN)
MySQL UNION和ORDER BY如果要对union的结果进行排序,请ORDER BY在最后一个SELECT语句中使用一个子句, 如以下示例所示:SELECT concat(firstName,' ',lastName) fullnameFROM employees UNION SELECT concat(contactFirstName,' ',contactLastName)FROM customersORDER BY fullname;注意:原创 2022-04-14 23:52:05 · 704 阅读 · 0 评论 -
SQL语法——CTE
CTE从版本8.0开始,MySQL简单地引入了公用表表达式功能(CTE)。公共表表达式是只存在一个单一的SQL语句例如执行范围内的一个命名的临时结果集,如:SELECT,INSERT,UPDATE,或DELETE。与派生表类似,CTE不作为对象存储,仅在执行查询期间持续存在。与派生表不同,CTE可以是自引用(递归CTE),也可以在同一查询中多次引用。此外,与派生表相比,CTE提供了更好的可读性和性能。语法:WITH cte_name (column_list) AS ( query)原创 2022-04-14 23:09:36 · 3711 阅读 · 0 评论 -
SQL语法——MySQL EXISTS与IN
MySQL EXISTS与IN要查找至少有一个销售订单的客户,可以使用IN运算符,如下所示:SELECT customerNumber, customerNameFROM customersWHERE customerNumber IN (SELECT customerNumber FROM orders); 也可以使用EXISTS运算符:SELECT customerNumber, cus原创 2022-04-14 22:59:05 · 682 阅读 · 0 评论 -
SQL语法——细节问题(DISTINCT、ORDER BY、IN、ESCAPE)
MySQL DISTINCT 和 NULL值如果字段中有NULL值并且要对该列使用DISTINCT 子句,则MySQL仅保留一个NULL值,因为DISTINCT 子句将所有NULL值视为相同的值。select state from customers;select distinct state from customers;DISTINCT语句与GROUP BY 语句distinct就是group by的一种特例,group by对结果集做了排序,而distinct没有。要注意的是 My原创 2022-04-14 21:50:20 · 771 阅读 · 0 评论 -
SQL分析——常见问题四
一、 where、having和on的区别where与having的根本区别在于:where子句在group by分组和数据汇总之前对数据行进行过滤;having子句在group by分组和数据汇总之后对数据行进行过滤;在连接查询中,where和on的主要区别在于:3. 对于内连接查询,where子句和on子句等效;4. 对于外连接查询,on子句在连接操作之前执行,where子句(逻辑上)在连接操作之后执行;二、表别名/* 假如存在以下两个表t1和t2:*/create table原创 2022-04-14 20:13:00 · 672 阅读 · 0 评论 -
SQL分析——常见问题三
一、 直播间人气create table kbjl( author_id INTEGER COMMENT '主播id', live_id INTEGER COMMENT '直播间id', live_duration INTEGER COMMENT '开播时长') COMMENT '开播记录表';insert into kbjl values (1, 1, 60),(2, 2, 120),(3, 3, 60);create table gkjl( user_id INTEGER原创 2022-04-13 18:34:58 · 543 阅读 · 0 评论 -
SQL分析——常见问题二
一、 rank()窗口函数create table F0225( requester_id int, accepter_id int, accept_date date);insert into F0225 values (1,2,'2016-06-03'),(1,3,'2016-06-08'),(2,3,'2016-06-08'),(3,4,'2016-06-09');--求出好友数最多的ID及其好友数量select t.ids id, count(*) count fr原创 2022-04-12 20:30:56 · 798 阅读 · 0 评论 -
SQL——递归CTE
简介递归公用表达式(CTE)是一个CTE,它有一个子查询,它引用CTE名称本身。语法:WITH RECURSIVE cte_name AS ( initial_query -- anchor member UNION ALL recursive_query -- 引用CTE名称的递归成员SELECT * FROM cte_name; 递归CTE由三个主要部分组成:初始查询,形成CTE结构的基本结果集。初始查询部分称为锚成员。递归查询部分是引用CTE名称的查询,因此原创 2022-04-12 00:17:09 · 2287 阅读 · 0 评论 -
SQL分析——常见问题一
一. 求解同时选修2门课程的学生create table F0215( stuId int(10) comment '学生id', cId varchar(10) comment '课程id', course int(5) comment '得分')insert into F0215 values (1, '001', 67),(1, '002', 89),(1, '003', 94),(2, '001', 95),(2, '002', 88),(2, '004', 78),(原创 2022-04-10 00:27:43 · 319 阅读 · 0 评论 -
SQL分析——近N日留存
近N日留存现有用户登录表user_active_log一份,里面有两个字段:userId(用户ID),createdTime(登录日期),需要统计近1,2,3,5,7,30日留存用户数量及留存率。思路:登录日期减去第一个日期的差值第一步:选取12月份的记录,根据用户id和登录日期去重select userId, SUBSTR(createdTime, 1, 10) a_createdTimefrom user_active_logwhere SUBSTR(createdTime, 1, 7)原创 2022-04-09 00:03:43 · 577 阅读 · 0 评论 -
SQL分析——连续N天登录
连续N天登录现有用户登录表(user_active_log)一份,里面有2个字段:userId(用户ID),createdTime(登录时间戳),需要统计2021年12月份连续登录了7天的用户数量。第一种方法思路:日期列减去一列数字得到的日期相等第一步:选取12月份的记录,根据用户id和登录日期去重select userId, SUBSTR(createdTime, 1, 10) a_createdTimefrom user_active_logwhere SUBSTR(createdTim原创 2022-04-08 23:07:43 · 1375 阅读 · 0 评论