数据库查询

  • Post author:
  • Post category:其他




数据查询



基本查询

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




版权声明:本文为qq_43573718原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。