数据库关系表符号

我们来谈谈数据库表中的这些符号。
这是一项技术工作。
我在问答论坛上呆了很多年,看到很多初学者对此感到困惑。
关系运算符、逻辑运算符和特殊符号就像数据库中的语言。
一旦你学会了这些,你就可以像鱼在水中一样自由地查询数据。

我们先来谈谈关系运算符。
这个东西主要用来比较数据大小或者匹配关系。
例如,如果您想查找正好 1 8 岁的人,您可以使用 = 符号并写入 WHEREage=1 8 不,如果你想搜索不同的东西,使用!=或<>,但这取决于它是什么类型的数据库,Oracle只识别<>。

再举个例子,如果您想查找大于 9 0 的分数,只需键入 WHEREscore>9 0。
另一方面,如果小于 1 00,则使用 <。
如果大于等于5 且小于等于某个日期,可以使用>=和<=。
它还具有模糊匹配功能,这是查找相似数据的强大工具。
例如,如果要查找姓名中包含“张”的人,请使用 LIKE 加通配符 %,并将其写为 WHEREnameLIKE '张 %'。

逻辑运算符用于组合多个条件。
例如,如果您想要 1 8 岁,并且您的分数大于 9 0,则可以使用 AND 并编写 WHEREage=1 8 ANDscore>9 0。
另一方面,如果是在北京或上海,则使用 OR 并写入 WHEREcity='北京'ORcity='上海'。

特殊符号SQL就像语言的语法糖一样,让我们​​的话语更加标准化。
例如,当结束SQL语句时,应该使用分号;。
如果要向代码添加注释,请使用 -- 或 //。
如果表名或字段名包含特殊字符,应使用方括号[]或反引号进行标识。

但是,我必须提醒您,不同的数据库可能对符号的支持不同。
例如Oracle不支持!=,所以必须使用<>; MySQL使用%进行模糊匹配,Oracle除了%之外还识别_。

最后,我们要谈谈符号的优先级。
这是一个大问题。
括号 () 的优先级最高,其次是关系运算符,最后是逻辑运算符,NOT 的优先级高于 AND,AND 的优先级高于 OR。

毕竟,这些符号就像数据库中的注释。
掌握它们,就可以为数据查询创造优美的旋律。

如何高效拼接数据库中多对多关系表关联字段的值?

我们上周讨论过这个问题。

核心方法有3 个。

存储过程。
2 02 3 年3 月写的计划,连接A表的group_id,使用MySQL函数分割字符串。
关系表B中的查询名称。
使用GROUP_CONCAT形成字符串。
适用于 MySQL 和 PostgreSQL。
数据量不大。
但调试比较麻烦。
不跨数据库。

程序循环。
我的朋友使用Python split。
循环遍历表 B。
使用逗号拼写字符串。
数据量较小。
开发很容易。
但N+1 有严重的问题。
网络开销巨大。

中间关联表。
最推荐。
设计表C。
group_id和member_id用作外键。
检查一个 JOIN 中的所有数据。
使用 GROUP_CONCAT 进行拼写。
添加缓存。
只有Redis。
group_id 用作键。
数据量巨大。
一致性高。
符合规格。
良好的可扩展性。

总数据少于1 000? 程序循环简单且快速。

大数据量还是高并发? 中间表加缓存是最好的。
数据库不支持聚合? 查询优化后,还可以使用逐层拼法。

数据库设计时要考虑到这一点。
多对多需要中间表。
不要使用逗号来存储 ID。
第一个范式。
为中间表添加索引。
group_id 和member_id 的复合索引。

示例代码适用于中间表。
创建表member_group。
id、group_id、member_id、sort_order。
外键链接表A和表B。
唯一索引(group_id、member_id)。

问题: SELECT GROUP_CONCAT(B.name ORDER BY C.sort_order SEPARATOR ',') AS member_name FROM member_group C JOIN table_b B ON C.member_id=B.id 其中 C.group_id=1 2 3 ;
总结。
中间表加缓存是最好的。
存储过程是通用的。
临时用于程序循环。
数据库设计需要改变。

百度一下就知道页面加载了很多JS脚本。