资源描述
一行SQL代码能做什么?
万计,都是一些非常
么呢?
〃高端〃的操作,就在想一行SQL代码能做什
导读:最近在知乎上看到一个问题:一行代码可以做什么?答题者数
SQL一行代码其实有很多很多,一些常见的比方:
SELECT * FROM TableNameINSERT INTO TableName VALUES(...)
TRUNCATE TABLE TableName ・・・・・这些就没什么意思了,我们来给大家看一些比拟〃高级〃的。
1.复制表结构
ELECT * INTO Customers bak FROM Customers WHERE 1=2;或者
ELECT TOP 0 * INTO Customers bak FROM Customers;可以得到与 Customers表结构一样的 Customers_bak ,而且
Customers_bak中没有数据。
2、直询表里是否存在数据
ELECT TOP 11 FROM Customers结果如下:
fieldl
1
注:第一个1是查询是否存在一条记录,第二个1就是单纯的数值103、随机获取一行数据
表Customers中数据如下:
客户ID
姓名 地址
城市 省份
1张三1集路27号上海
2李四南京路12号杭州
200000
上海市
310000
浙江省
花城大道17号
广州
510000
4马六江夏路19号
5赵七西二旗12号
武汉 430000
100000
广东省
湖北省
北京市
现在随机获取一行数据
ELECT TOP 1 * FROM Customers ORDER BY NEWID();结果如下:
客户ID
姓名
城市
省份
3
珏
花城大道17号
广州
510000
「未省
注:屡次执行,结果会不一样
4、获取第6到10行的记录表Person数据如下:
Name
Age Sex
Phone
1吕布
25男
2貂蝉
22女
3张飞
23男
4刘备
28男
5关羽
23男
6马超
20男
7赵云
20男
8黄忠
28男
9孙尚香
19女
10诸营亮
26男
11张飞
23男
12黄忠
28男
ID获取第6到10行数据
SELECT TOP 5 * FROM (SELECT TOP 10 * FROM Person ORDER BY ID
(提示:可以左右滑动代码)
结果如下:
ID Name Age Sex Phone10诸葛亮
10诸葛亮
26 男
9孙尚香
19 女
8黄忠
7赵云
6马超
28男
20男
20男
注:如果希望是升序,可以在外面在加一层SELECT子查询对ID进 行升序排序。
5、对空值赋默认值SELECT ISNULL (Price,0) FROM Orders
注:Price为空值时会默认赋06、将日期转换成文本格式
ELECT CONVERT(VARCHAR(10),CreateDate,120) FROM Students注:CreateDate为带时间的完整日期格式,执行后会得到不带时间
的字符串,如2020-05-31,7、保存2位小数
ELECT CAST(Amount as NUMERIC(18,2)) FROM Orders注:Amount是带2位以上的小数格式,转换后的小数会四舍五入。
8、删除重复记录(除了主键不同,其他字段均相同)表Person数据如下:
2貂蝉
3张飞
4刘备
5关羽
6马超
7赵云
8黄忠
9孙尚香
10诸葛亮
11张飞
12黄忠
ID Name
1吕布
2貂蝉
4刘备
5关羽
6马超
7赵云
9孙尚香
10诸葛亮
11张飞
12黄忠
Age Sex
25美
22女
28男
23男
20男
20男
19女
26男
23男
28男
Phone
ID Name Age Sex Phone
1 吕布25 男 22 女
23 男28 男
23 男20 男
20 男28 男
19 女26 男
23 男28 男
删除其中除ID以为其他都重复的记录ELETE FROM Person WHERE ID NOT IN (SELECT MAX(工D) FROM Person GROUP BY Na
删除后结果如下:
9、杳询当前数据库中的所有表名
ELECT
NAME FROM SYSOBJECTS WHERE TYPE=U结果如下:
NAME Customers Orders Products SuppliersStudent
Person10.直询某个表里的所有列名
ELECT NAME FROM SYSCOLUMNS WHERE ID=OBJECT ID( 1 Person')结果如下:
NAME
Age IDName
PhoneSex
11,将B表中的字段内容更新到A表
PDATE A SET A.Name=(SELECT B.Name FROM B WHERE A.ID=B.ID)12、获取笛卡尔积
ELECT A.*, B.* FROM A,B13、按姓氏笔画多少排序
ELECT Name FROM Person ORDER BY Name Collate Chinese PRC Stroke CI AS结果如下:
Name 马超 关羽 刘备 吕布 孙尚香 张飞 赵云 诸葛
黄忠 貂蝉注:默认是直接按姓氏拼音排序
14、延迟3秒执行直询语句WAITFOR DELAY 10:0:31 SELECT * FROM Person
结果如下:
ID Name
1吕布
2貂蝉
4刘备
5关羽
6马超
7赵云
9孙尚香
10诸葛亮
11张飞
12黄忠
Age SexPhone25 男
22 女28 男
23 男20 宪
20 男19 女
26 男23 男
Gia时间:3.065s
28 男WAITFOR DELAY '0:0:3' SELECT * FRO 只读
15 .将查询结果转换为XML格式ELECT * FROM Person WHERE ID=1 FOR XML PATH
结果如下:
XMLJ52E2B61 -18A1 -11 d1 -B105-00805F49916B<row><ID> 1 </ID> < Name> 吕布 v/Name> <Age>25</Age><Sex>^</Sex> < Phone>13500C
16 .将小数转换成百分数ELECT CAST(CAST( (0.8888*100) AS NUMERIC(18,2) ) as VARCHAR(20) ) + 1 % 1
结果如下:
fieldl88.88%
17、处理除数为0〔SELECT 工SNULL (A/NULLIF (B, 0),工)FROM
SELEC^CAS^?HEr^=^rHEr^^ELS^A/^EN^^FROrTABLE^注:A为任意数值,B为0
下次想到一些好用的SQL代码再提供给大家
展开阅读全文