文章目录
    
    
    
    数据查询
   
    
    
    基本查询
   
    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
 
