数据库查询

数据查询

基本查询

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


  • 5
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程猴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值