1,查询系统时间
select distinct getdate() from sysdatabases
//此处用了distinct关键字是为了只显示一条记录(因为系统中不可能只有一个数据库),同样也可以使用 top 1来进行限制
//对distinct来说,null值是相同的
//系统默认的是 select all sellist from yourtable //all,显示所有数据
2,查询指定百分比的数据
select top 40 percent from info //返回前40%的数据
3,在查询清单中使用表达式
select p_id ,cost,quantity ,cost*quantity as 合计 from product
4,into 语句 将表中的指定数据存入另一个新表中(可以在不同的数据库)
select * into DB1.dbo.newtable from DB2.dbo.oldtable [where]
//如果在select语句中指定了计算列(如cost*quantity),而在新表中对应的列不是计算列,而是一个实际的列,数据由执行select … into 时计算得出
//select … into语句不能与compute语句一起使用
//目标数据库可以是新表,也可以是临时表
select * into tempdb.dbo.NetTopic from Test.dbo.Topic
5, inner join… on 连接查询条件
select 员工数据表.员工标号,职位表.职位 from 员工数据表 inner join 职位表 on (员工数据表.职位编号=职位表.职位编号)
6,限定子句 where
where子句指定数据检索的条件,以限制返回数据行
where子句中的查询条件
比较运算符:<,<=,>,>=,=,>,!=,!>,!<
范围说明:
Between A and B,Not Between A and B
可选值列表: IN ,NOT IN
模式匹配:LIKE,NOT LIKE
是否为空:IS NULL ,IS NOT NUll
上述条件的逻辑组合:AND ,OR,NOT
//text,ntext,image数据类型不能与比较运算符组成查询条件
7,like关键字中的通配符
% 包含零个或多个字符的任意字符串。
WHERE title LIKE '%computer%' 将查找书籍标题中任意位置包含单词“computer”的所有书籍标题。
_(下划线) 任意单个字符(汉字需要两个 __)
WHERE au_fname LIKE '_ean' 将查找所有以 ean 结尾的四个字母的名字,例如 Dean 或 Sean。
[ ] 用于指定范围,例如[a-f],表示a到f范围内的任何单个字符
[^ ] 表示指定范围,例如[^a-f],表示a到f范围以外的任何单个字符
//对通配符的转义
1,like ‘sql#_test’ escape ‘#' 表示 sql_test字符串 ,此处的#号可以用任何的不常用的符号来做转义符,不过后面记得要有escape ‘转义符'
2,使用[]来进行说明 like ’sql[_]test’
8,汇总函数——NULL
汇总函数忽略Null
Count:Count函数将忽略对象中的空值,而Count(*)函数则将所有符合条件的记录都计算在内
Sum:忽略求和对象中的空值
Avg:忽略求和对象中的空值
Max/Min:忽略求和对象中的空值
9,子查询——多值比较all
多值比较:多行一列
父查询与多值子查询之间的比较需要用all来连接
标量值S比子查询返回集R中的每个都大时,S>ALL R 为True
All表示所有
>all,<all,<=all,>=all,<>all
<>all 等价于not in
例:找出年龄最小的学生
select * from students where age <=all(select age from students)
//另一种方法 select top 1 from students order by age
10,子查询——多值比较Some/Any(早期用Any)
父查询与多值子查询之间的比较需要用Some来连接
标量值S比子查询返回集R中的某一个大时
S>Some R 为True
>Some,<Some,=Some,<>Some,>=Some,<=Some
=Some等价于 in ,<>Some等价于 not in
例:找出不是最小年龄的学生
select * from students where age >some(select * from students)
11,子查询——存在判断Exists
Exists+子查询用来判断该子查询是否返回元组
当子查询的结果集非空时,Exists为True
当子查询的结果集为空时,Exists为False
不关心子查询的具体内容,因此用Select *
例:列出选修了C01课程的学生的学号、姓名
select sno,sname From Students Where Exists
(
select * from SC
where SC.sno=Students.sno and cno=’C01’
)
//SC为选修课程表