平时写的SQL少则几行,多则上百行,总在想能不能一行SQL就能解决问题?虽然有点想多了,但还是有不少功能一行SQL就能搞定。
SQL一行代码其实有很多种,一些常见的比如:
SELECT * FROM TableName INSERT INTO TableName VALUES(...) TRUNCATE TABLE TableName .....
这些就没什么意思了,我们来给大家看一些比较“高级”的。
1、复制表结构
代码语言:javascript复制SELECT * INTO Customers_bak FROM Customers WHERE 1=2;
或者
SELECT TOP 0 * INTO Customers_bak FROM Customers;
可以得到与Customers 表结构一样的Customers_bak ,而且Customers_bak 中没有数据。
2、查询表里是否存在数据
代码语言:javascript复制SELECT TOP 1 1 FROM Customers
结果如下:
注:第一个1是查询是否存在一条记录,第二个1就是单纯的数值1。
3、随机获取一行数据
表Customers中数据如下:
现在随机获取一行数据
代码语言:javascript复制SELECT TOP 1 * FROM Customers ORDER BY NEWID();
结果如下:
注:多次执行,结果会不一样
4、获取第6到10行的记录
表Person数据如下:
获取第6到10行数据
代码语言:javascript复制SELECT TOP 5 * FROM (SELECT TOP 10 * FROM Person ORDER BY ID ) a ORDER BY ID DESC
(提示:可以左右滑动代码)
结果如下:
注:如果希望是升序,可以在外面在加一层SELECT子查询对ID进行升序排序。
5、对空值赋默认值
代码语言:javascript复制SELECT ISNULL(Price,0) FROM Orders
注:Price为空值时会默认赋0
6、将日期转换成文本格式
代码语言:javascript复制SELECT CONVERT(VARCHAR(10),CreateDate,120) FROM Students
注:CreateDate为带时间的完整日期格式,执行后会得到不带时间的字符串,如'2020-05-31'
7、保留2位小数
代码语言:javascript复制SELECT CAST(Amount as NUMERIC(18,2)) FROM Orders
注:Amount是带2位以上的小数格式,转换后的小数会四舍五入。
8、删除重复记录(除了主键不同,其他字段均相同)
表Person数据如下:
删除其中除ID以为其他都重复的记录
代码语言:javascript复制DELETE FROM Person WHERE ID NOT IN (SELECT MAX(ID) FROM Person GROUP BY Name,Age,Sex,Phone)
删除后结果如下:
9、查询当前数据库中的所有表名
代码语言:javascript复制SELECT NAME FROM SYSOBJECTS WHERE TYPE='U'
结果如下:
10、查询某个表里的所有列名
代码语言:javascript复制SELECT NAME FROM SYSCOLUMNS WHERE ID=OBJECT_ID('Person')
结果如下:
11、将B表中的字段内容更新到A表
代码语言:javascript复制UPDATE A SET A.Name=(SELECT B.Name FROM B WHERE A.ID=B.ID)
12、获取笛卡尔积
代码语言:javascript复制SELECT A.*,B.* FROM A,B
13、按姓氏笔画多少排序
代码语言:javascript复制SELECT Name FROM Person ORDER BY Name Collate Chinese_PRC_Stroke_CI_AS
结果如下:
注:默认是直接按姓氏拼音排序
14、延迟3秒执行查询语句
代码语言:javascript复制WAITFOR DELAY '0:0:3' SELECT * FROM Person
结果如下:
15、将查询结果转换为XML格式
代码语言:javascript复制SELECT * FROM Person WHERE ID=1 FOR XML PATH
结果如下:
16、将小数转换成百分数
代码语言:javascript复制SELECT CAST(CAST((0.8888*100) AS NUMERIC(18,2)) as VARCHAR(20)) '%'
结果如下:
17、处理除数为0
代码语言:javascript复制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?欢迎在评论区留言区分享。
·················END·················