一、语句查询数据(SELECT)
1、在SSMS中查看数据
在数据库中找到需要查看的数据表,右击——>编辑前200行,就可以查看数据表中的所有数据。
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
注意:这里的字符串 是用单引号括起来的,而不是双引号。
AS也可以用来新建临时列:
SELECT CNO AS '课程号', C_COURSE_NAME AS '课程名', 'aaa' AS bbb FROM COU
5、将查询结果保存为新表
SELECT CNO AS '课程号', C_COURSE_NAME AS '课程名', 'aaa' AS bbb
INTO new_cou
FROM COU
再查询或刷新一下即可以看到新生成的表:
6、连接字段
SELECT CNO+' '+C_COURSE_NAME AS 课程信息
FROM COU
注意:连接字段时左右两边的数据类型必须相同。
二、获取满足查询条件的语句(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
四、高级条件查询
也就是使用比较复杂的逻辑运算符进行的查询。
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 '[张李]%'
(7)查询C_TEACHER_NAME中 不 姓张或者姓李的信息:
SELECT * FROM COU WHERE C_TEACHER_NAME LIKE '[^张李]%'
5、注意
当我们作字符型字段包含一个子串的查询时最好采用“%”而不用“”,用“”的时候只在开头或者只在结尾时,而不能两端全由“*”代替任意字符的情况下。
6、定义转义字符
只有紧紧跟在转义字符后面的字符,才可以被看作为转义字符。
LIKE '%5#%' ESCAPE '#' --表示#为转义字符
LIKE '%5#%%' ESCAPE %' --表示%为转义字符,可以是5%