当前位置:网站首页 > SQL数据库编程 > 正文

sql文件是什么样的(sql文件是什么意思)



最近整理我手写的笔记, 其中有不少内容随着时代的变化, 用得越来越少了, 抑或是电子化了发到了我的博文中。然而我发现我当年学习的 SQL 笔记, 只电子化了特别基础和简单的 , 后面还有一些躺在纸上。既然有点时间, 那我就把那些内容也都整理一下发上来吧。

另外注意的是, 部分内容是标准 SQL 规范的内容, 和 MySQL 并不一定一致。

查询数据使用 , 其一般格式为:

查询经过计算的值:

效果是输出两列: 名字和年龄。可以指定输出列的名字, 如:

在字符匹配中, 只能用 和 两种通配符, 分别表示 “任意长度字符” 和 “一个 8 位字符”。比如查找姓李的学生:

SELECT 后的对象中, SQL 支持插入函数, 进行结果的运算:

聚合函数也经常配合 使用。比如统计选修课大于 3 门的学生信息:

等值与非等值连接查询

这里主要是在 WHERE 语句中的语句部份, 一般来说该部份的格式为:

比如:

如果某一个列名只在一个表出现, 那么可以省略表名。

外连接

对于被过滤条件舍弃掉的结果, 仍要以 NULL 显示出来的话, 那么就使用所谓的 外连接 模式, 如:

SELECT 出来的结果, 可以作为另一句 SELECT 的源, 这就是嵌套查询, 如:

括号内的语句不能使用 语句

如果被嵌套的子句(称为 内查询)的结果只有一个值时, 可以使用比较运算符, 如:

如果子查询返回多个数字值, 也可以使用一个操作: (有些 DB 用 )或 :

如: 查询其他系中臂计算机起任一学生年龄小的学生信息:

但聚合函数的效率高于 /

同级的 SELECT 语句, 可以取集合操作:

如果在每个类型后面加上 则变为无符号整型。比如 表示 uint8

浮点数分别是 和 , 实际上在 MySQL 场景中, 不太建议使用浮点数, 也不太需要使用。

定点数是 , 其中 m 表示数据总长, d 表示小数点后的位数。

现在推荐使用的只有 了, 其中 m 表示秒后小数点位数。但是这个字段的时区收到多种配置的影响, 如果有比较准确的时间计算要求, 不太建议使用, 只建议作为参考。

这里拿我们业务一条语句做分析

看外层结构, 这其实是一个经典的 的句式, 其中的 FROM 就是本 JOIN 的语法所在: 将相对应的表中的部份列组合成了一个临时的新表。

AS 语句作为一个临时重命名列名的功能, 在各个位置均可以使用。

另外看一个较为简化的 JOIN:

ON 指定了取 JOIN 的条件, 对于 JOIN (INNER JOIN), 使用 ON 与在外层加一个 WHERE 的效果是相同的。

但对于 LEFT JOIN 和 RIGHT JOIN 就要注意, ON 和 WHERE 的影响范围会有不同。

当效果相同时, 建议优先使用 ON。

JOIN 是左右取并集, LEFT JOIN 是左全集右并集, RIGHT JOIN 是左并集右全集。

参考资料:

如果不利用 unique 规则的话, 只用一条 SQL 语句只能做到后半句。这里我们使用 , 用一条语句来作为例子:

其中第二行是需要插入的值, 括号部份就是查重条件。

不过上面的语句其实也还是有一点缺陷的, 下面是进一步优化的结果, 还是直接用我们业务中的一个语句来说明

上面的语句中, 以下部份

是为了防止不同列的数据值相等, 而导致出现 错误。说实话这个格式的逻辑我分析不出来, 只知道按模式套进去就行。

当然更为合适的方法是使用 unique 值来控制, 也就是:

参考资料:

我们都知道用 和 来查看, 但是这两种方法都看不带字段的注释。这里记录另一个方法, 用于查阅更多的表信息:

但是这个表中很多字段对我们来说可能用处不大, 下面是我个人觉得最有用的几个字段, 与 语法的各个列关联起来:

这个问题经常出现在我们使用 MySQL 当作消息队列来使用的场景下。比如假设我们有一个表来表示定时任务:

那么从数据库中取一条记录的语句便为:

但是上面的语句是无法获得 id 的, 因为可能会有多条数据都满足 WHERE 条件, 并且有多个 client 可能同时执行, 从而锁定了满足同一个条件的多条语句。

解决方法, 可以在表中加入一个 uuid 字段, 每次执行的时候都 update 一个唯一 id, 如果更新数量大于 0 的话再 select 就行。如果实在是没法改, 那么也有另一个方法, 就是用 MySQL 的临时变量功能, 例:

可以看到, 这个操作需要四条语句, 效率比较低。需要注意的是:

参考资料:

重命名表

复制一整个表

前面提到的可以用该方法来实现 “不存在则插入, 存在则更新” 的功能, 但是这条语句会遇到两个问题:

原因: InnoDB 重的 默认等于 1, 这个模式下为了有更高的并发性能导致的(具体看参考资料)

这个问题有以下的几种解决思路:

参考资料:

参考资料:

基本上我们都会要求使用 , 但是实际上还有更加详细的。总体而言, 可以参考以下指导:

一般来说不使用 和 。注意, 没有 "utf8mb4_unicode_cs"

参考资料:

本文章采用 进行许可。

原作者: , 原文发布于, 也是的博客。欢迎转载, 但请注明出处。

原作者: , 欢迎转载, 但请注明出处。

原文标题: 《SQL 稍复杂一点语法的学习笔记》

发布日期: 2024-10-26

原文链接: 。

到此这篇sql文件是什么样的(sql文件是什么意思)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • 增删改查sql语句语法(增删改查对应的sql语法)2025-07-07 19:54:08
  • mysql建立主外键关系(mysql怎么建立主外键关系)2025-07-07 19:54:08
  • sql文件(sql文件在哪个位置)2025-07-07 19:54:08
  • pymssql连接数据库 报错(pymssql连接数据库错误20009)2025-07-07 19:54:08
  • mysql主键重复会覆盖还是?(mysql主键重复怎么解决)2025-07-07 19:54:08
  • mysql主键和索引(mysql主键索引叶子结点)2025-07-07 19:54:08
  • sql文件转换成csv显示不全(sqlplus导出csv文件)2025-07-07 19:54:08
  • mysql主键自增语句(mysql主键自增2)2025-07-07 19:54:08
  • sqluldr2 字符集(sqluldr2字符集)2025-07-07 19:54:08
  • sqlldr 命令(sqlldr命令中密码带有特殊字符)2025-07-07 19:54:08
  • 全屏图片