sql中union的用法

上周 朋友问我如何在SQL中使用UNION。

他不明白为什么 UNION 会删除重复的行。
比如5 月1 0日我告诉他2 02 3 年。
两张桌子,学生和老师。
学生有张三李四。
老师有四个,五个,四个。

使用 UNION 检查名称列。
结果就是姜三立,四王五王。
一次又一次,貌拉消失了。

他还是不相信。
我再举一个例子。
例如,2 02 3 年 6 月 1 日。
检查年龄栏。
一张桌子是1 0,2 0。
另外3 0、2 0。

Union的结果是1 0,2 0,3 0。
还在减肥。

突然说道。
“那么联合ALL呢?” 我:“2 02 3 年 6 月 1 5 日。
” “Union ALL 的结果是 1 0,2 0,3 0”。
“2 0倍”
他忘记了。
我不知道这部分。
他真的明白吗?

sql怎么把多行显示为一行

哎呀,我和你讲的那些关于SQL集成的事情都是真金白银的风险。

前年,我在上海搭建了一个电子商务平台,数据库是MySQL。
当时需要将用户输入的送货地址分为省、市、地区和详细地址,存储在一个字段中。
你不能每行保存一行,你必须将其转换为字符串。
我只是使用 CONCAT,代码很简单: SQL SELECT CONCAT(省份, '', 城市, '', 地区, '', 详细地址) AS 完整地址 来自标题;
当时我是为了省事,并没有关心分隔符。
结果,用户输入的地址中含有逗号,变成了乱码。
后来改用CONCAT_WS(连接指定分隔符),这个问题就解决了。
因此,在绑链条时,应该清楚地考虑垫片。

后来去深圳一家公司搭建ERP系统,数据库换成了SQL Server。
要求对供应商进行分组并将其产品编号放在一起。
MySQL 方法在那里立即毫无用处。
我使用STRING_AGG,代码如下: SQL 选择供应商名称,STRING_AGG(产品代码,',')作为产品代码 从订单详情 GROUP BY resources_name;
这个函数非常好用,而且还可以排序。
然而,曾几何时,数据量非常巨大,有几千万条记录,以至于运行时CPU峰值达到了9 9 %。
这一幕,啧啧。
后来数据库师傅建议我加个WHERE子句,只选择去年的数据,我就勉强应付了。
因此,当数据量很大时,你确实需要谨慎使用这些批处理功能。

后来去杭州一家大数据公司实习,接触了PostgreSQL。
他们需要将用户评论中的关键词收集为 JSON 格式,以便以后在机器学习中使用。
我只是使用 JSON_AGG: SQL SELECT user_id, JSON_AGG(关键字) AS keywords_json 来自评论 GROUP BY user_id;
结果绝对完美。
创建了一个JSON矩阵,清晰地列出了每个用户的评价关键词。
这个函数非常灵活,还可以直接定义排序、去重等,用起来真的很好玩。

正如你所看到的,这个东西依赖于数据库。
MySQL 使用 GROUP_CONCAT、SQL ServerSTRING_AGG、FORXMLPATH 或 OracleLITAGG。
PostgreSQL 上的 ARRAY_AGG 和 JSON_AGG 更好。
你要根据实际情况来选择。
不盲目使用,不然性能瓶颈来临时你就没有哭的余地了。

sql字段拼接成新字段的方法有哪些?

是的,就是这样。
不同的数据库绑定字段有各自的技巧。

Oracle:使用||直接编码,如下所示:column1 ||column2 AS new_column。

MySQL:CONCAT函数,代码如下:CONCAT(column1 ,column2 ) AS new_column。

SQLServer:使用加号+,看看这个:column1 +column2 AS new_column。

PostgreSQL:继续使用||,例如:column1 ||column2 AS new_column。

记住,绑定前检查字段类型,必须是字符数据。
不是性格类型吗?我们再谈谈这个吧。
在 SQLServer 中,您应该使用 CAST 转换,如下所示:CAST(column1 AS VARCHAR)+CAST(column2 AS VARCHAR)。

你自己看看,过程是类似的,但是你要注意细节。

SQL 字符串函数如何实现多列拼接?

使用 CONCAT 或 ||拼接多个列。
不同数据库的语法有所不同。

CONCAT实用程序具有良好的跨数据库兼容性,可以合并多个列或字符串。
语法:SELECT CONCAT(列 1 、分隔符、列。

示例: -
MySQL/PostgreSQL拼接名称 SELECT CONCAT (名字, '', 姓氏) AS full_name FROM users;
注意事项: 老版本的Oracle不支持多参数CONCAT,必须嵌套。
旧版本的 SQL Server 使用 + 代替,但必须处理 NULL。

||运算符在 PostgreSQL 和 Oracle 中常用,语法简单。
语法: SELECT 列 1 ||分隔符||第2 栏|| AS 结果_列 FROM 表名;
示例: -
PostgreSQL/Oracle 指定名称 选择名字 || '||姓氏 AS 全名 FROM 用户;
注意事项: 当列值为NULL时,结果可以为NULL,必须使用COOKE。
旧版本的 SQL Server 不支持 ||,请使用 + 或 CONCAT。

处理NULL值时,列值为NULL,会导致结果异常,必须用函数显式处理。
使用 COVENER 将默认值替换为 none(例如空字符串)。
-
CONCAT 示例 从用户中选择 CONCAT(名字, ''), '', COCO(姓氏, ''));
-
|| 选择 COALESE(col1 ,'') || ' - ' || COCO(col2 ,'') FROM 表名;数据库具体作用: SQL Server 使用 ISNULL 或 IFNULL。
Oracle 使用 NVL。
MySQL 使用 IFNULL。

添加分隔符和固定文本以提高可读性。
示例: -
CONCAT 添加前缀和分隔符。
SELECT CONCAT ('用户:', 名字, '', 姓氏, '|ID:', user_id) FROM 用户;
-
||添加后缀 选择名字 || ' (ID:' || user_id ||') 'EX 用户;
兼容性摘要: CONCAT 支持:MySQL、PostgreSQL、SQL Server (2 01 2 +)、Oracle (1 2 c+)。
支持||:PostgreSQL、Oracle、SQLite。

根据数据库: SQL Server 2 008 及以下版本:使用+进行折叠,但需要NULL处理。
Oracle 1 1 g 及更低版本:使用 CONCAT checkout 或 ||在 NVL
最佳建议: 最好使用 CONCAT 来实现跨数据库兼容性。
我们显式处理 NULL 以避免意外结果。
测试目标数据库的语法,不同数据库的语法差异很大。

你自己看看。