
SALESPERSON(销售人员)
Name Age Salary
| Abel | 63 | 120,000 |
| Baker | 38 | 42,000 |
| Jones | 26 | 36,000 |
| Murphy | 42 | 50,000 |
| Zenith | 59 | 118,000 |
| Kobad | 27 | 34,000 |
Number CustName SalespersonName Amount
| 100 | Abernathy Construction | Zenith | 560 |
| 200 | Abernathy Construction | Jones | 1800 |
| 300 | Manchester Lumber | Abel | 480 |
| 400 | Amalgamated Housing | Abel | 2500 |
| 500 | Abernathy Construction | Murphy | 6000 |
| 600 | Tri-city Builders | Abel | 700 |
| 700 | Manchester Lumber | Jones | 150 |
Name City Industry Type
| Abernathy Construction | Willow | B |
| Manchester Lumber | Manchester | F |
| Tri-city Builders | Memphis | B |
| Amalgamated Housing | Memphis | B |
Select distinct Ages, salary
from salespeople
(2)显示所有和ABERNATHY CONSTRUCTION有订单的Salespeople。
SELECT DISTINCT SALESPERSON.Name, SALESPERSON.Age, SALESPERSON.Salary
FROM [ORDER], SALESPERSON
WHERE [ORDER].SalespersonName = SALESPERSON.Name
AND [ORDER].CustName = 'Abernathy Construction'
(3)显示所有的和ABERNATHY CONSTRUCTION没有订单的Salespeople,按工资的升序进行排列。
SELECT DISTINCT Name, Age, Salary
FROM SALESPERSON
WHERE (Name NOT IN
(SELECT Name
FROM [ORDER] INNER JOIN
SALESPERSON ON
[ORDER].SalespersonName = SALESPERSON.Name
WHERE ([ORDER].CustName='Abernathy Construction')))
ORDER BY Salary
(4)显示所有的和ABERNATHY CONSTRUCTION有订单的Salepeople的年龄和姓名,按年龄的降序进行排列(使用子查询)。
SELECT DISTINCT Name, Age
FROM SALESPERSON
WHERE (Name IN
(SELECT SalespersonName
FROM [ORDER]
WHERE CustName LIKE 'Abernathy Construction%'))
ORDER BY Age DESC
(5)显示所有的和ABERNATHY CONSTRUCTION有订单的Salepeople的年龄和姓名,按年龄的降序进行排列(使用连接)。
SELECT DISTINCT SALESPERSON.Name, SALESPERSON.Age
FROM [ORDER]
INNER JOIN
SALESPERSON ON [ORDER].SalespersonName = SALESPERSON.Name
WHERE ([ORDER].CustName= 'Abernathy Construction')
ORDER BY SALESPERSON.Age DESC
(6)显示和在MEMPHIS中的一个客户有订单的Salespeople的年龄(使用子查询)。
(7)显示和在MEMPHIS中的一个客户有订单的Salespeople的年龄(使用连接)。
(8)写出在SALESPERSON表中添加一条记录的SQL语句,已知年龄和姓名,工资未知。
(9)创建视图view_avgamount,查询每个salesperson的订单总值。
CREATE VIEW view_avgamount(Name, Total) AS SELECT Name, SUM(Amount) FROM SALESPERSON INNER JOIN [ORDER] ON Name = SalespersonName
GROUP BY Name
(10)使用INSERT INTO语句更新view_ avgamount视图,然后再次查询该视图以及查询相关基表检查执行结果。
(11)使用UPDATE view_ avgamount更新视图,然后再次查询该视图以及查询相关基表检查更新结果。
(12)利用视图与基表结合的方法,查询salesperson的age,salary,name和订单总值。
二、思考题
1.简述为什么要使用视图查看数据?视图的优点有哪些?
视图是由SELECT语句组成的查询定义的虚拟表;
优点有:
● 简单性。视图不仅可以简化用户对数据的理解,也可以简化他们的操作。那些被经常使用的查询可以被定义为视图,从而使用户不必为以后的操作每次都指定全部的条件。
● 安全性。通过视图用户只能查询和修改他们所能见到的数据。数据库中的其他数据则既看不见也取不到。数据库授权命令可以使每个用户对数据库的检索到特定的数据库对象上,但不能授权到数据库特定行和特定的列上。通过视图,用户可以被在数据的不同子集上。
● 逻辑数据性。视图可以使应用程序和数据库表在一定程度上。如果没有视图,应用一定是建立在表上的。有了视图之后,程序可以建立在视图之上,从而程序与数据库表被视图分割开来。
2.视图是一张“虚表”,请简述视图和表的相同点和区别
1)表是实实在在得保存数据的实体,写入的数据都保存在表中,而视图是不保存数据的,也没有数据。
2)表可以建立各种触发器,可以建立索引,可以建立主健、约束等。但是视图不能建立这些对象
3)表和视图可以更新,但是视图的更新受到约束。
4)表可以建立各种触发器,可以建立索引,可以建立主健、约束等。但是视图不能建立这些对象
