SQL sever教程(实验2)数据库的查询和视图+SQL查询语句(二)

上一篇只是一些基础的SQL查询语句,这篇是关于子查询,多表查询,聚合函数,视图的基础。

子查询。

1. 查找在财务部工作的雇员的情况。

  SELECT *FROM Employees WHERE DepartmentID 
	IN (SELECT DepartmentID FROM Departments WHERE Departmentname ='财务部')

子查询先产生结果集,然后主查询再去结果集里去找符合要求的字段列表去.符合要求的输出,反之则不输出.。

先找到财务部的DepartmentID,再到父(主)查询去寻找符合DepartmentID=‘1’的字段。
关于IN,EXISTS的具体用法会再写一遍博客

2. 查找财务部年龄不低于研发部雇员年龄的雇员的姓名 。

(我实在不知道用哪个子查询才能让财务部所以有的值和研发部的一名进行比较,所以就把财务部的弄了个视图,有别的方法请务必告诉我!!)
创建视图:CREATE VIEW <视图名> AS <语句>
创建一个符合语句的虚表(视图)就可以用这个视图名对虚表数据进行操作

CREATE VIEW cai_wu AS 
	SELECT Birthday FROM Employees WHERE DepartmentID='1'
SELECT Name FROM cai_wu 
	WHERE Birthday < (SELECT MIN(Birthday) FROM Employees WHERE DepartmentID='4')

3.查找比所有财务部的雇员收入都高的雇员的姓名

  SELECT *FROM Employees 
	JOIN Salary ON Employees.EmployeeID=Salary.EmployeeID
    WHERE Income>=(SELECT MAX(Income) FROM Salary ,Employees 
    	WHERE Salary.EmployeeID=Employees.EmployeeID AND DepartmentID='1')

这里有个小点可以证明是先执行子查询,再执行主查询
因为当写成

  SELECT *FROM Employees 
	JOIN Salary ON Employees.EmployeeID=Salary.EmployeeID
    WHERE Income>=(SELECT MAX(Income) FROM Salary WHERE DepartmentID='1')

时,子查询里的数据并不会因为主查询已得到的表(含有两个表信息)去筛选条件

多表查询。

1.查询每个雇员的情况及其薪水的情况(内连接)

SELECT * FROM Salary 
	JOIN Employees ON Employees.EmployeeID=Salary.EmployeeID

2.使用内连接的方法查询名字为“王林”的员工所在的部门

这是把三个表都连接起来,显然当时用WHERE时是对于前面写的所有已连接的表

SELECT Departmentname,Name FROM Employees
	JOIN Salary ON Employees.EmployeeID=Salary.EmployeeID
	JOIN Departments ON Departments.DepartmentID=Employees.DepartmentID
	WHERE Name
  • 12
    点赞
  • 63
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值