目录
一、投影查询
-- 投影查询
SELECT [ ALL | DISTINCT ] [ TOP n [ PERCENT ] ]
{ * | { { column_name | expression | IDENTITYCOL | ROWGUIDCOL }
[ [ AS ] column_alias ] | column_alias = expression } [ , ... n ] }
-- ALL:指定返回所有记录,也包括重复行,默认设置。面向的是表中的数据(行)。
-- DISTINCT:指定显示所有记录,但不包括重复行。
-- TOP n [ PERCENT ]:指定从查询结果中返回前 n行,或前 n%行。
-- * :表示所有列。
-- column_name:指定要返回的列名。
-- expression:是列名、常量、函数以及由运算符连接的列名、常量和函数的任意组合,或者是子查询。
-- column_alias:使用 AS关键字来给返回集中的字段设置别名。
本文中将以下标为列。
学生表 student
成绩表 sc
课程表 course
1、指定特定列查询
-- 查询 student表中的所有记录。
select * from student
-- 返回 student表中的学号,姓名和性别。
select sno,sname,ssex from student
-- 查看 student表中有哪些专业。
select distinct(specialty) from student
-- 查看 student表中的前 3行信息。
select top 3 * from student
-- 查看 student表中前 50%行的信息
select top 50 percent * from student
2、修改返回列名查询
在 SQL中,使用 AS关键字来修改返回集中的列名。
-- 返回 student表中所有学生的学号、姓名、性别信息,要求使用中文标题。
select sno as 学号,sname as 姓名,ssex as 性别 from student
或
select sno as '学号',sname as '姓名',ssex as '性别' from student
或
select sno '学号',sname '姓名',ssex '性别' from student
或
select '学号' = sno, '姓名' = sname, '性别' = ssex from student
3、计算值查询
在 SQL中,经常会对查询到的数据进行再次计算。
-- 查询 sc表中的数据,并将成 sc表中的成绩从100分制改成150分制。
select sno,cno,'150分制' = score*1.50 from sc
二、选择查询
1、使用关系表达式
查询条件 | 条件 |
---|---|
比较运算符 | =,>,<,>=,<=,!=,!<>(不等于),!>,!< |
确定范围 | BETWEEN AND,NOT BETWEEN AND |
确定集合 | IN,NOT IN |
字符匹配 | LIKE,NOT LIKE |
空值 | IS NULL,NOT NULL |
多重条件 | AND,OR,NOT |
-- 查看 sc表中,成绩大于等于80分的学号,课程号,成绩。
select sno,cno,score from sc
where score >= 80
2、使用逻辑表达式
逻辑运算符 | 描述 |
NOT | 非,对表达式的否定。 |
AND | 与,连接多个条件,所有的条件都成立时为真。 |
OR | 或,连接多个条件,只要有一个条件成立时,就为真。 |
-- 查看计算机专业的男生信息。
select * from student
where ssex = '男' and specialty = '计算机'
-- 查看计算机专业或男生的信息。
select * from student
where specialty = '计算机' or ssex = '男'
3、使用 BETWEEN关键字
在 SQL中,使用 BETWEEN关键字可以很方便地限制查询数据的范围。BEWTEEN表达式完全可以使用含有 >=和 <=的逻辑表达式来代替。使用 NOT BETWEEN 表达式完全可以使用含有 >和 <的逻辑表达式来代替。
语法格式
表达式 [ NOT ] BETWEEN 表达式1 AND 表达式2
-- 查看成绩在80 ~90之间的学生学号,课程号和成绩。
select * from sc
where score >=80 and score <= 90
或
select * from sc
where score between 80 and 90-- 查看成绩不在80 ~90之间的学生学号,课程号和成绩。
select * from sc
where score not between 80 and 90
4、使用 IN关键字
在 SQL中,使用 IN关键字,也是为了更方便地限制检索数据的范围。
语法格式
表达式 [ NOT ] IN (表达式1,表达式2, ..., 表达式n)
-- 查看计算机专业 和通信工程专业的学生姓名,性别和专业。
select sname,ssex,specialty from student
where specialty in ('计算机', '通信工程')
5、使用 LIKE关键字
使用 LIKE关键字查询,又叫模糊查询,LIKE关键字搜索与指定模式匹配的字符串、日期或时间值。字符串中可以包含 4种通配符的任意组合。
通配符 | 描述 |
% | 包含零个或多个字符的任意字符串。 |
_ | 任意单个字符。 |
[ ] | 代表指定范围的单个字符,[ ] 中可以是单个字符(如 [ aceg ]),也可以是字符范围(如 [ a-g ])。 |
[ ^ ] | 代表不在指定范围内的单个字符,[ ^ ] 中可以是单个字符,也可以是字符范围。 |
-- 示例
like 'ac%':返回以 'ac' 开头的任意字符串。
like '%AB':返回以 'AB' 结尾的任意字符串。
like '%AC%':返回包含 'AC' 字符的任意字符串。
like '_ab%':返回包含 'ab' 结束的三个字符的字符串。
like '[ ABC ]%':返回以 'A' ,'B', 'C' 开头的任意字符串。
like '[ A-Z ] ing%':返回4个字符串,结尾是 'ing',首字符是范围从 A到 Z。
like 'M [ ^ c]':返回以 M开始,且第二个字符不是 'c'的任意长度的字符串。
-- 示例:查询 student表中张性的学生信息。
select * from student
where sname like '张%'
6、使用 IS NULL/ NOT NULL关键字
在 WHERE子句中,不能使用比较运算符对空值进行判断,只能使用空值表达式来判断某个字段值是否为空。
语法
表达式 IS [ NOT ] NULL
-- 示例:查看所有成绩为空的学生的学号、课程号和成绩。
select sno,cno,score from sc
where score is null
7、符合条件查询
在 WHERE中,可以使用逻辑运算符把若干个搜索条件合并起来,组合成复杂的符合搜索条件。在一个 WHERE子句中,同时包含多个逻辑运算符时,其优先等级从高到底依次是:NOT、AND、OR。
-- 示例:查询 student表中,专业为计算机 和网络工程的女生的信息。
select * from student
where ssex = '女' and
( specialty = '计算机' or specialty = '网络工程' )
三、聚合函数查询
在 SQL中,提供了一系列聚合函数,这些函数把存储在数据库中的数据描述为一个整体而不是一行行孤立的记录,通过使用这些函数可以实现数据集合的汇总或是求平均值等各种运算。
函数名 | 描述 |
sum(列名) | 返回一个数字列的总和。 |
avg(列名) | 对一个数据列计算平均值。 |
min(列名) | 返回一个数字、字符串或日期列的最小值。 |
max(列名) | 返回一个数字、字符串或日期列的最大值。 |
count(列名) | 返回一个列的数据项数,条数。 |
count(*) | 返回找到的函数 |
在 SELECT中子句中,可以使用聚合函数进行运算,运算结果作为新列出现在结果集中,但此列没有列名。在聚合运算的表达式中,可以包括列名、常量以及由算术运算符连接起来的函数。
-- 示例:查看 sc表中成绩的平均值,列标题为 ‘平均值’
select '平均值' = avg(score) from sc
-- 示例:查看 student表中专业个数。
select '专业个数' = count( distinct specialty) from student
-- 示例:查看学号为 '201501001'的平均成绩和最高成绩。
select avg(score),max(score) from sc
where sno = '201602001'
一般情况下,可以在两个地方使用聚合函数,即 SELECT子句 和 HAVING子句中。