SQL数据库语言基础之SqlServer条件查询、排序数据表、like模糊查询【大总结】

一、语句查询数据(SELECT)

1、在SSMS中查看数据
在数据库中找到需要查看的数据表,右击——>编辑前200行,就可以查看数据表中的所有数据。
1.1.1
2、使用查询表中指定字段的数据

SELECT * FROM COU  --查询表COU中全部字段数据
SELECT CNO, C_COURSE_NAME FROM COU  --查询2列的数据

3、查询结果中去除重复信息
在查询字段前,加入一个“DISTINCT”字段。
注意:使用DISTINCT会降低数据表的查询效率,因为它的原理是先进行排序分组,再进行相同字段的去除。

4、命名新列
在查询的字段后使用AS关键字。

SELECT CNO AS '课程号', C_COURSE_NAME AS '课程名' FROM COU

1.5.1
注意:这里的字符串 是用单引号括起来的,而不是双引号。

AS也可以用来新建临时列:

SELECT CNO AS '课程号', C_COURSE_NAME AS '课程名', 'aaa' AS bbb FROM COU

1.5.2

5、将查询结果保存为新表

SELECT CNO AS '课程号', C_COURSE_NAME AS '课程名', 'aaa' AS bbb 
INTO new_cou
FROM COU

再查询或刷新一下即可以看到新生成的表:
1.6.1

6、连接字段

SELECT CNO+'   '+C_COURSE_NAME AS 课程信息
FROM COU

1.7.1
注意:连接字段时左右两边的数据类型必须相同。

二、获取满足查询条件的语句(WHERE)

1、条件表达式
就是可以判断出确定逻辑值的表达语句,条件表达式跟在WHERE后面。

2、逻辑运算符

= 等于
>,>= 大于,大于等于
<,<= 小于,小于等于
<>, != 不等于

3、根据条件查询
根据条件可以所有相关信息、数值数据、字符数据(单引号括起来)、日期数据等。

4、按范围查询数据

--between and
SELECT *
FROM COU
WHERE CHOUR BETWEEN 30 AND 200
--等价于
SELECT *
FROM COU
WHERE CHOUR>=30 AND CHOUR<=200

5、查询NULL值(使用is null)

SELECT H_CNO FROM HOMEWORKS 
WHERE H_SCORE_1 is null

其实也可以用:

SELECT H_CNO FROM HOMEWORKS 
WHERE H_SCORE_1=null

不过往往后者查不出结果,在查询表达式中(比如where与having中),UnKnown会视为false。所以select * from 表 where 字段=null查不到正确的结果。在sql中要查询某列值为null的所有结果集时,查询条件应该这样写:select * from 表 where 字段 is null。

三、排序查询(ORDER BY)

1、排序方向
desc:降序排列,从高到低;
asc:升序排列,从低到高,是默认排序方式。

SELECT * 
FROM COU 
ORDER BY CHOUR DESC

2、按字段位置排序
只按CSCORE进行降序排列:

SELECT CNO,CSCORE,C_TEACHER_NAME
FROM COU
ORDER BY 2 DESC

3、查询前几行数据(top)
查询前3行数据:

SELECT top 3 CNO,CSCORE,C_TEACHER_NAME
FROM COU
ORDER BY 2 DESC

4、查询前百分比数据(percent)
查询前30%的数据:

SELECT top 30 percent CNO,CSCORE,C_TEACHER_NAME
FROM COU
ORDER BY 2 DESC

5、WHERE 与 ORDER BY结合使用(WHERE 在前)

SELECT * 
FROM COU
WHERE CSCORE<7
ORDER BY CSCORE DESC

4.5.1

四、高级条件查询

也就是使用比较复杂的逻辑运算符进行的查询。
1、逻辑表达词

逻辑词 作用
ALL 全部,要求比较的值需要匹配子查询中的所有值,不能单独使用,必须和比较运算符共同使用
AND 与,都真才真,允许多个条件的存在,在一个SQL语句中的WHERE子句
NOT 非,相反的逻辑运算符,它被使用如 NOT EXISTS, NOT BETWEEN, NOT IN 等,这是一个相反的运算符
OR 或,一真即真,结合SQL语句的WHERE子句中的多个条件
ANY 任何,比较的值需要匹配子查询中的任何值 ANY必须和其他的比较运算符共同使用,而且必须将比较运算符放在ANY 关键字之前
BETWEEN … AND … 介于…和…之间
EXIST 存在,是一个受限的 SELECT 语句 (不允许有 COMPUTE 子句和 INTO 关键字
IN 是否在…之内
LIKE 像,用于在 WHERE 子句中模糊筛选列中的指定模式
NOT NOT在英文中的意思是“不”,否定它之后所跟的任何条件。可以使用 NOT 操作符对 IN、BETWEEN、EXISTS子句进行取反
IS NULL IS NULL在英文中的意思是“判断为空”

2、LIKE通配符(模糊查询)

通配符 说明
* 多个字符 c*c代表cc,cBc,cbc,cabdfec等,它同于DOS命令中的通配符,代表多个字符。
% 多个字符 %c%代表agdcagd等这种方法在很多程序中要用到,主要是查询包含子串的。
[*] 特殊字符 a[]a代表aa代替*
? 单字符 b?b代表brb,bFb等,同于DOS命令中的?通配符,代表单个字符
# 单数字 k#k代表k1k,k8k,k0k,大致同上,不同的是代只能代表单个数字
_

3、范围表示
此外,还要一个可以表示字符范围的通配符:
[a-z]代表a到z的26个字母中任意一个,指定一个范围中任意一个续上;

排除 [!字符] [!a-z]代表9,0,%,*等 它只代表单个字符;

数字排除 [!数字] [!0-9]代表A,b,C,d等同上;

组合类型 字符[范围类型]字符 cc[!a-d]#代表ccF#等 可以和其它几种方式组合使用。

4、模糊查询示例(中括号[ ]表示范围,!和^表示非)
(1)查询 C_TEACHER_NAME字段中包含有“三”字的:

SELECT * FROM COU WHERE C_TEACHER_NAME LIKE '%三%'

(2)查询 C_TEACHER_NAME字段中以“甘”字开头:

SELECT * FROM COU WHERE C_TEACHER_NAME LIKE '甘%'

(3)查询 CHOUR字段中含有数字的:

SELECT * FROM COU WHERE CHOUR LIKE '%[0-9]%'

(4)查询 CNO字段中含有大写字母的信息:

SELECT * FROM COU WHERE CNO LIKE '%[A-Z]%'

(5)查询 CNO字段中不含有数字的:

SELECT * FROM COU WHERE CNO LIKE '%[!0-9]%'

(6)查询C_TEACHER_NAME中姓张或者姓李的信息:

SELECT * FROM COU WHERE C_TEACHER_NAME LIKE '[张李]%'

5.4.2

(7)查询C_TEACHER_NAME中 不 姓张或者姓李的信息:

SELECT * FROM COU WHERE C_TEACHER_NAME LIKE '[^张李]%'

5.4.3

5、注意
当我们作字符型字段包含一个子串的查询时最好采用“%”而不用“”,用“”的时候只在开头或者只在结尾时,而不能两端全由“*”代替任意字符的情况下。

6、定义转义字符
只有紧紧跟在转义字符后面的字符,才可以被看作为转义字符。

LIKE '%5#%' ESCAPE '#'  --表示#为转义字符
LIKE '%5#%%' ESCAPE %'  --表示%为转义字符,可以是5%

猜你喜欢

转载自blog.csdn.net/Viewinfinitely/article/details/121408206