以下是基础查询相关的sql代码
----查询相关
--假设存在表WechatUser
--top 10 取符合条件的10条
--as 给查询出来的字段取别名
--空格 s给表取别名
--where s.id=0 查询条件,排除掉id等于0的数据
SELECT TOP 10 id AS StuId FROM WechatUser s WHERE s.id=0
--* 查询表内所有数据
--id>1 AND id<5 取id范围在2-4
SELECT * FROM WechatUser s WHERE id>1 AND id<5
--id BETWEEN 2 AND 4 取id范围在2-4
SELECT * FROM WechatUser s WHERE id BETWEEN 2 AND 4
--IS NULL 取id为null值的
--IS NOT null 取id不为null值的
SELECT * FROM WechatUser s WHERE id IS NULL
SELECT * FROM WechatUser s WHERE id IS NOT NULL
--TOP 5 取前5条
--TOP(5) PERCENT 取前5% 这个跟表数据量有关
SELECT TOP 5 * FROM WechatUser
SELECT TOP(5) PERCENT * FROM WechatUser
--CASE WHEN 如果是这个条件 THEN 那就输出 ELSE 如果所有条件不符合就输出 END 有点像if结构的感觉
SELECT CASE WHEN id>1 THEN '合理' WHEN id=0 THEN '异常' WHEN id<1 THEN '错误' ELSE '未知' END AS '指数',id FROM WechatUser
--CASE 字段 WHEN 如果字段等于这个值 THEN 那就输出 ELSE 如果所有条件不符合就输出 END 有点像switch结构
SELECT CASE id WHEN 1 THEN '合理' WHEN 2 THEN '正常' ELSE '不知道' END AS '指数',id FROM WechatUser
--IIF(条件,'条件成立的时候输出','条件不成立的时候输出') 视图可能会用到
SELECT IIF(id>0,'大于0','小于0') FROM dbo.WechatUser
--in 筛选id=1,2,3的数据
SELECT * FROM dbo.WechatUser WHERE id IN (1,2,3)
--like 模糊查询 %匹配除null外的字符 _匹配一个字 [范围]匹配该范围内的多个用,隔开 [^范围]匹配除去这个范围的条件
--例如张% 意思就是张无忌,张***后面都是可以的,但是李张,这种就不行,因为是张开头后面任意字符
--例如张_ 意思就是张晨,张*这种是可以的,张无忌这种是不行的,张开头后面接一个任意字符
--例如[张,李]% 意思就是张***,李***都是可以的,张李开头的数据就行
--例如[^张]% 意思是只要不是张开头的数据都可以,除null
SELECT * FROM dbo.WechatUser WHERE Name LIKE '[^张]%'
--with相当于是把一个查询结果保存为了一个片段,可以将这个片段作为虚拟表,再进行查询
WITH ParUser AS (SELECT * FROM dbo.WechatUser WHERE id IN (1,2,3,4,5))
SELECT * FROM ParUser WHERE id=1
--exists 例句中其实就是相当于w1的id in (1),为什么不用in而是用exists,因为它的效率更高
SELECT * FROM dbo.WechatUser w1 WHERE EXISTS(select * FROM dbo.WechatUser w2 WHERE w1.ID=w2.ID AND w2.ID=1 )
--distinct(字段) 去除id字段中重复出现的值
SELECT DISTINCT(id) FROM dbo.WechatUser
--ORDER BY是用于给字段排序的,ASC用于升序,也是默认的 DESC用于降序 多个排序用,隔开,优先级是从左到右
SELECT * FROM dbo.WechatUser ORDER BY id ASC,Name DESC
--GROUP BY分组 相同值放一起
--例如Name 里面有张三,李四,王五,张三 查询出来就是张三,李四,王五,两个张三会分为一组
--需要注意的是查询出来的数据需要包含在group by的字段,或者是聚合函数,也就是说此时只能查name字段或者聚合函数,不能查id
--聚合函数
--MIN 求当前分组内的最小值
--MAX 求当前分组内的最大值
--SUM 求当前分组内的最总和值
--AVG 求当前分组内的最平均值
--COUNT 求当前分组内的数据数量
SELECT Name FROM dbo.WechatUser GROUP BY Name
SELECT MIN(id),MAX(id),SUM(id),AVG(id),COUNT(1) FROM dbo.WechatUser GROUP BY id
--HAVING 分组后的筛选条件,需要和GROUP BY连用,一般它可以分组之后再利用聚合函数筛选一下,常与count连用
SELECT Name FROM dbo.WechatUser GROUP BY Name HAVING COUNT(1)>1
--连接查询
--一般通过多个表链接成一张虚拟表,从而能查询多张表内的数据
--LEFT JOIN 左连接,左边那张表的数据为优先数据,会优先查出a中的数据,b中没有数据将会以null补全
--INNER JOIN 内连接,只会查询ab共同存在的数据
--RIGHT JOIN 右连接,右边那张表的数据为优先数据,会优先查出b中的数据,a中没有数据将会以null补全
--FULL JOIN 全连接,a存在,b存在,ab共同存在的数据都会查询出来
SELECT * FROM dbo.WechatUser a LEFT JOIN dbo.WechatUser b ON a.ID=b.ID
SELECT * FROM dbo.WechatUser a INNER JOIN dbo.WechatUser b ON a.ID=b.ID
SELECT * FROM dbo.WechatUser a RIGHT JOIN dbo.WechatUser b ON a.ID=b.ID
SELECT * FROM dbo.WechatUser a FULL JOIN dbo.WechatUser b ON a.ID=b.ID
--union、union all操作
--union自动去重
SELECT TOP 100 * FROM dbo.WechatUser
UNION
SELECT TOP 100 * FROM dbo.WechatUser
--union all不会自动去重
SELECT TOP 100 * FROM dbo.WechatUser
UNION all
SELECT TOP 100 * FROM dbo.WechatUser
--分组排序语法格式: 分组排序不常用,但在有些应用中可以解决很多大问题
row_number() over(partition by 分组列 order by 排序列 desc)
补充链接查询相关图例
左连接
右连接
内连接
全连接
以上就是基础查询中会遇到的一些语法啦