SQL复杂查询与视图【实例】

有两个数据库,订单数据库和学生库:

        

订单数据库的各个表具体的列如下,

    

学生库的各个表具体的列如下,

于是,对这两个数据库进行查询与创建和查询视图。


1.多表查询

① 查询编号为300的客户通过的代理商的姓名和地址。

② 查询产品编号为0033、订货数量大于100的客户编号及其姓名。

③ 查询每个客户的订单,显示客户编号、客户名、订单编号及订货日期。

④ 查询所有2000年以后订货项目。

⑤ 查询提成金额为100000以上(含100000)的代理商所对应的客户。

SELECT 姓名,地址
	FROM 订单,代理商
	WHERE 客户编号='300'
	
SELECT 客户编号,姓名
	FROM 订单,代理商,订货项目
	WHERE 产品编号='0033' and 订购数量>100

SELECT 客户.客户编号,姓名,订货项目.订单编号,订货日期
	FROM 订单,订货项目,客户
select * from 订单,订货项目 where DATEPART(yy,订货日期)>2000
select 客户.姓名 from 代理商,客户 where 提成金额>=100000

2、嵌套查询

   分别用带有IN谓词的子查询和带比较运算符的子查询实现以下操作

① 查询与“刘晨”在同一个系学习的学生。

② 查询选修了课程名为“操作系统”的学生。

SELECT 学号,姓名,专业 FROM 学生信息 WHERE 专业 IN(
SELECT 专业 FROM 学生信息 WHERE 姓名='刘晨'
)
SELECT 学号,姓名,专业,课程名称 FROM 学生信息,课程信息
	WHERE 课程名称='操作系统'


3.建立视图

① 建立含有订单号及拥有该订单的客户编号和代理商号三个字段的视图。

②建立一个含有产品编号、产品库存量及产品在订量三个字段的视图。

③ 建立一个含有客户编号、客户所订的产品、该产品的订购价及该产品的描述四个字段的视图。

CREATE VIEW V1 AS
SELECT 订单编号,订单.客户编号,客户.代理商编号
FROM 订单,客户
WHERE 订单.客户编号=客户.客户编号
GO
CREATE VIEW V2 AS
SELECT 产品.产品编号,库存量,订购数量
FROM 产品,订货项目
WHERE 产品.产品编号=订货项目.产品编号
GO
CREATE VIEW V3 AS
SELECT 客户编号,产品.产品编号,价格,描述信息
FROM 产品,订单,订货项目
WHERE 客户编号=订单.客户编号
	AND 订单.订单编号=订货项目.订单编号
	AND 产品.产品编号=订货项目.产品编号

④建立一个含计算机科学系的学生及年龄不大于19岁的学生的视图。

⑤ 建立一个既选修了课程1又选修了课程2的学生视图。

CREATE VIEW V4 AS
SELECT * FROM 学生信息
WHERE DATEDIFF(YY,出生日期,GETDATE())<=19
	AND 专业='计算机科学与技术'
GO
CREATE VIEW V5 AS
SELECT 成绩信息.学号,姓名,成绩信息.课程序号
FROM 成绩信息,学生信息
WHERE 学生信息.学号=成绩信息.学号
	AND 成绩信息.课程序号='1' AND 成绩信息.课程序号='2'
GO

4.在视图基础上的查询

① 查询所有订单的客户和代理商。

② 查询编号为400的客户所订的产品以及该产品的单价。

SELECT * FROM V1
SELECT 客户编号,产品编号,价格 FROM V3 WHERE 客户编号='400'

③ 查询选修课程1的所有学生。

CREATE VIEW V6 AS
SELECT 学生信息.学号,姓名,课程序号 FROM 学生信息,成绩信息
WHERE 学生信息.学号=成绩信息.学号
	AND 课程序号='1'
GO
SELECT * FROM V6

猜你喜欢

转载自blog.csdn.net/gnosed/article/details/80485203
今日推荐