文章目录
数据查询
基本查询
select 目标列表表达式
from 表名 或 视图名
where 条件表达式
eg:在“课程”表中查询所有学生的“课程号”和“课程名称”。
use student
go
select distinct 课程号,课程名称
from 课程
go
注意:目标列表表达式可以是:(属性列,字符串常量,算数表达式,函数)
distinct 目标属性 :去掉重复行
带有where字句的查询
(1)比较大小
where A 比较符号 B
(2)确定范围
范围内:where between …and …
范围外:where not between …and …
eg:在“课程号”表中查询“学分”在4-6之间的课程的“课程号”和“课程名称”。
use student
go
select 课程号,课程名称
from 课程
where 学分>=4 and 学分<=6
go
(3)确定集合
指定集合内:where 列名 in(‘A’,‘B’,‘C’)
指定集合外:where 列名 not in(‘A’,‘B’,‘C’)
(4)字符匹配
匹配: like 匹配串
不匹配:not like 匹配串
注意:匹配符可以结合% -使用
% | 表示任意的,表示0到无穷大的长度 |
---|---|
– | 表示单个字符 |
like | 匹配的意思(后边有匹配符号只能用like) |
is | 匹配的意思(为空只能用is,不能用=) |
= | 等于 |
>< | 不等于的意思 |
eg:在“课程”表中查询所有“课程名称”中包含“数据库”字样的课程的全部信息
use student
go
select *
from 课程
where 课程名称 like '%数据库%'
(5)涉及空值的查询
use student
go
select 课程名称,学分
from 课程
where 先修课程 is null
go
(6)多重条件的查询
and 并且
or 或
带有group by 字句的查询(分组功能)
(1)简单分组查询
select 目标列表表达式
from 表名
where 条件表达式
group by 列名
(2)带having 字句的分组查询
select 目标列表表达式
from 表名
group by 列名 having 条件表达式
eg:查询至少选修了2门课程以上的学生的学号。
use student
go
select distinct 学号
from 学生成绩
group by 学号
having count(*)>=2
go
带有order by 子句的查询(排序功能)
select 目标列表表达式
(into 新表名)
from 表名 或 视图名
where 条件表达式
order by 列名 asc 或 desc
eg:在“课程”表中查询所有“课程名称”中包含“数据库”字样的课程的全部信息,将查询结果按“课程名称”降序排列。
use student
go
select *
from 课程
where 课程名称 like '%数据库%'
order by 课程名称 DESC
go
多表查询
连接查询:
(1)内连接
select 列名
from 表1 inner join 表2 on 连接条件表达式
(2)外连接(左外连接+右外连接)
左外连接:
select 列名
from 表1 left join 表2 on 连接条件表达式
右外连接:
select 列名
from 表1 right join 表2 on 连接条件表达式
(3)交叉连接(笛卡尔积)
select 列名
from 表1 cross join 表2 on 连接条件表达式
子查询(嵌套查询功能)
集合比较运算符:
all | 全部都满足 |
---|---|
any | 满足任何一个 |
between | 在某个范围内 |
exists | 查询结果包含一些行(结果不为空) |
in | 操作数等于列表中的一个 |
not | 取值反 |
some | 有一些满足 |
子查询:将第一步查询嵌入到第二步查询的条件中(嵌套查询)
(1)无关子查询
(先执行子查询语句,得到的结果传递给父查询语句使用)
use 数据库名
select 列名
from 表格
where 列名 比较运算符(select 列名
from 表格
where 列名)
eg:查询其它系中比“管理系”的所有学生年龄都小的学生的“姓名”、“年龄”和“性别”。
use student
go
select 姓名,性别,年龄
from 学生信息
where 所在系 != '管理系' and 年龄<any(
select 年龄
from 学生信息
where 所在系 = '管理系')
go
eg:查询“赵燕”同学选修的所有课程“课程名称”、“学分”、“分数”,对结果按照“分数”升序排列。
use student
go
select 课程名称,学分,分数
from 学生成绩,课程
where 学生成绩.课程号 = 课程.课程号 and 学号 in(
select 学号
from 学生信息
where 姓名 = '赵燕')
order by 分数
go
(2)相关子查询
(子查询的执行依赖于父查询,多数情况下是因为子查询的where 子句引用了父查询的表)
(3)表数据维护的子查询
插入子查询结果
带子查询的删除语句
联合查询
(1)集合并运算(会自动去除重复)
…
…
union
…
…
(2)集合交运算
…
…
intersect
…
…
(3)集合差运算(前—后的意思)
…
…
except
…
…
输出结果选项
(1)输出前n行
use 数据库名
select top n 列名
from 表格
where 条件语句
(2)百分比输出
use 数据库名
select top n percent 列名
from 表格
where 条件语句
(3)查询结果输出到新建表中
use 数据库名
select 列名 into 新表格
from 原表格
where 条件语句
输出结果插入到另一个表中
select 目标列表表达式 into 新表名
from 表名
where 条件表达式
eg:将“学生信息”表中“计算机系”的学生的全部信息插入到“计算机系学生信息”表中。
use student
go
select *
into 计算机系学生信息
from 学生信息
where 所在系 = '计算机系'
go
eg:创建和“学生信息”表的表结构相同的“管理系学生信息”表,但该表中不包含任何记录。之后用带子查询的INSERT将“管理系”学生的全部信息插入到“管理系学生信息”表中。
use student
go
select * into 管理系学生信息
from 学生信息
where 学号 is null
go
use student --调用数据库
go
insert into 管理系学生信息
select *
from 学生信息
where 所在系 = '管理系'
go