一行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

结果如下:

b063838363e8c39893697578820753f9.png

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

3、随机获取一行数据

表Customers中数据如下:

7a59a01d5fba54604311535399efdc35.png

现在随机获取一行数据

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

结果如下:

03296f48346491128ea13e2fb604b1a2.png

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

4、获取第6到10行的记录

表Person数据如下:

6e47eb9de549c886e5f8136db6e33183.png

获取第6到10行数据

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

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

结果如下:

e90032505aec8d7411cbe2d497b8bff3.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数据如下:

9c064847c169f20fc30c47fd37ce8447.png

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

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

删除后结果如下:

672634c5a7556ff98a2fdf590e08fbb8.png

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

SELECT   NAME FROM SYSOBJECTS WHERE TYPE='U'

结果如下:

3a73cdb6bdaf55c518f3edecd6842c25.png

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

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

结果如下:

e03d2fd62f7c65beaf6ca9556b591ae3.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

结果如下:

c41517f78d99763c7c3db54f3a6fa436.png

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

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

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

结果如下:

897a41a381020454c0bccfc0ec246997.png

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

SELECT * FROM Person WHERE ID=1 FOR XML PATH

结果如下:

da301907da3d454a1fb0d1228010516f.png

16、将小数转换成百分数

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

结果如下:

744ad6a64d326af67ef50a04fb1fc2d0.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代码,欢迎可以在留言区分享一下。

bf3a5ffca128360fd56b962dfab834f1.gif

点击下方卡片进行关注,获取更多内容

ceb6c94d6e0294b7166c780a7ed657c6.png

点分享

1d17067d8ecef66fa81d17f6a0dc3b26.png

点收藏

3865a6846a1190a78046dd712705cd6d.png

点点赞

39fc21b79acf5655b005e0dc8a331e77.png

点在看

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值