开发者社区> 游客gsgxy6yg6ydlm> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

一行SQL代码能做什么?

简介: 一行SQL代码能做什么?
+关注继续查看

最近在知乎上看到一个问题:一行代码可以做什么?答题者数万计,都是一些非常“高端”的操作,就在想一行SQL代码能做什么呢?


SQL一行代码其实有很多很多,一些常见的比如:

SELECT * FROM TableName 

INSERT INTO TableName VALUES(...) 

TRUNCATE TABLE TableName .....

这些就没什么意思了,我们来给大家看一些比较“高级”的。



1、复制表结构

SELECT * INTO Customers_bak FROM Customers WHERE 1=2;
或者
SELECT TOP 0 * INTO Customers_bak FROM Customers;


可以得到与Customers 表结构一样的Customers_bak ,而且Customers_bak 中没有数据。



2、查询表里是否存在数据

SELECT TOP 1  1  FROM Customers

结果如下:

image.png

注:第一个1是查询是否存在一条记录,第二个1就是单纯的数值1。



3、随机获取一行数据

表Customers中数据如下:

image.png

现在随机获取一行数据

SELECT TOP 1 * FROM Customers ORDER BY NEWID();

结果如下:

image.png

注:多次执行,结果会不一样



4、获取第6到10行的记录表Person数据如下:image.png

获取第6到10行数据

SELECT TOP 5 * FROM (SELECT TOP 10 * FROM Person ORDER BY ID ) a ORDER BY ID DESC

(提示:可以左右滑动代码)

结果如下:

image.png

注:如果希望是升序,可以在外面在加一层SELECT子查询对ID进行升序排序。


5、对空值赋默认值

SELECT  ISNULL(Price,0) FROM  Orders

注:Price为空值时会默认赋0



6、将日期转换成文本格式

SELECT  CONVERT(VARCHAR(10),CreateDate,120) FROM Students

注:CreateDate为带时间的完整日期格式,执行后会得到不带时间的字符串,如'2020-05-31'



7、保留2位小数

SELECT CAST(Amount as NUMERIC(18,2)) FROM Orders

注:Amount是带2位以上的小数格式,转换后的小数会四舍五入。



8、删除重复记录(除了主键不同,其他字段均相同)

表Person数据如下:

image.png

删除其中除ID以为其他都重复的记录

DELETE FROM Person WHERE ID NOT IN (SELECT MAX(ID) FROM Person GROUP BY Name,Age,Sex,Phone)

删除后结果如下:

image.png


9、查询当前数据库中的所有表名

SELECT   NAME FROM SYSOBJECTS WHERE TYPE='U'

结果如下:

image.png



10、查询某个表里的所有列名

SELECT NAME FROM SYSCOLUMNS WHERE ID=OBJECT_ID('Person')

结果如下:

image.png


11、将B表中的字段内容更新到A表

UPDATE A SET A.Name=(SELECT B.Name FROM B WHERE A.ID=B.ID)



12、获取笛卡尔积

SELECT A.*,B.* FROM A,B



13、按姓氏笔画多少排序

SELECT Name FROM Person ORDER BY Name  Collate Chinese_PRC_Stroke_CI_AS

结果如下:

image.png

注:默认是直接按姓氏拼音排序


14、延迟3秒执行查询语句

WAITFOR DELAY '0:0:3' SELECT * FROM Person

结果如下:

image.png



15、将查询结果转换为XML格式

SELECT * FROM Person WHERE ID=1 FOR XML PATH

结果如下:

image.png



16、将小数转换成百分数

SELECT CAST(CAST((0.8888*100) AS NUMERIC(18,2)) as VARCHAR(20)) + '%'

结果如下:

image.png



17、处理除数为0

SELECT ISNULL(A/NULLIF(B,0),1) FROM TABLEA
SELECT  CASE WHEN B=0 THEN 1 ELSE A/B END  FROM TABLEA

注:A为任意数值,B为0


下次想到一些好用的SQL代码再分享给大家,如果你平常也有一些好用的SQL代码,欢迎可以在留言区分享一下。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Zalando Postgres Operator 快速上手
Zalando Postgres Operator 快速上手
32 0
基础设施即代码(IAC),Zalando Postgres Operator 简介
基础设施即代码(IAC),Zalando Postgres Operator 简介
44 0
5行代码提升GBDT,提升巨大!
如果你打过kaggle应该一定都知道,大家心照不宣的表格数据竞赛的第一tricks:
20 0
sql优化的几种方式
sql优化的几种方式
54 0
x264代码剖析(十八):核心算法之滤波

x264代码剖析(十八):核心算法之滤波

 

        H.264/MPEG-4 AVC视频编码标准中,在编解码器反变换量化后,

2504 0
修改一行SQL代码 性能提升了100倍
在PostgreSQL中修改了一行不明显的代码,把(ANY(ARRAY[...]) 改成 ANY(VALUES(...))),结果查询时间从20s变为0.2s。
703 0
修改一行SQL代码 性能提升了100倍
在PostgreSQL中修改了一行不明显的代码,把(ANY(ARRAY[...]) 改成 ANY(VALUES(...))),结果查询时间从20s变为0.2s。
627 0
【导入导出】sqlldr 导入含有内嵌换行符的数据
如何加载含有内嵌换行符的数据,这里使用了使用非换行符的chr(10)来代替换行符,在加载数据时使用一个sql函数来完成该任务。load datainfile * into table deptappendfields terminated by  ','trai...
976 0
61
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载