MYSQL基础上机练习题(四) 表连接
来源:互联网 发布:什么是淘宝店铺的域名 编辑:程序博客网 时间:2024/05/17 07:49
一、实验目的:
表连接–进行多表查询
二、实验内容:
对MYSQL基础上机练习题(二)中所输入的数据连接表查询
三、题目:
- 使用连接谓词
(1)进行等值连接,查询全部员工的个人信息以及薪酬情况
(2)进行自然连接,查询全部员工的个人信息以及薪酬情况
(3) 查询工资水平在2500以上的员工号、姓名、教育、收入、支出、盈余
(4)查询工资水平在2500以上的员工号、姓名、教育、收入、支出、盈余、所属部门 - 使用JOIN连接
(1)进行等值连接,查询全部员工的个人信息以及薪酬情况
(2)进行自然连接,查询全部员工的个人信息以及薪酬情况
(3) 查询工资水平在2500以上的员工号、姓名、教育、收入、支出、盈余
(4)查询工资水平在2500以上的员工号、姓名、教育、收入、支出、盈余、所属部门
(5)查询所有员工的员工号,名字,薪酬,支出(左连接)
(6)查询所有部门的员工情况(右连接)
(7)查询所有部门的所有员工的薪酬情况(全连接)
(8)查询所有部门所有员工的名字
四、代码:
- 使用连接谓词
(1)进行等值连接,查询全部员工的个人信息以及薪酬情况
等值连接就是把两个表中有对应的行列示,对应第二大题第(1)小题的方式,出现的结果都一样
SELECT * FROM Employees, SalaryWHERE Employees.EmployeeID = Salary.EmployeeID
在这种等值连接的情况下,两个表的相同列名会同时出现
(2)进行自然连接,查询全部员工的个人信息以及薪酬情况
自然连接的情况下,两个表的相同列名不会同时出现,因此使用连接谓词时要选择性地选择列名,对应第二大题第(2)小题的方式,使用JOIN会使代码更简洁
SELECT Employees.*, InCome, OutCome, ActInComeFROM Employees, SalaryWHERE Employees.EmployeeID = Salary.EmployeeID
(3) 查询工资水平在2500以上的员工号、姓名、教育、收入、支出、盈余
使用连接谓词的时候,存在多个条件选择时,需要用AND关键词,对应第二大题第(3)小题的方式,使用JOIN会减少运算次数
SELECT Employees.EmployeeID, Name, Education, InCome, OutCome, ActInComeFROM Employees, SalaryWHERE Employees.EmployeeID = Salary.EmployeeIDAND InCome > 2500
(4)查询工资水平在2500以上的员工号、姓名、教育、收入、支出、盈余、所属部门
同上一题,多个选择条件用AND连接,但这种方式会使运算慢,对应第二大题第(4)小题的方式,使用JOIN会使运算更快
SELECT Employees.EmployeeID, Name, Education, InCome, OutCome, ActInCome, DepartmentNameFROM Employees, Salary, DepartmentsWHERE Employees.EmployeeID = Salary.EmployeeIDAND Employees.DepartmentID = Departments.DepartmentIDAND InCome > 2500
2. 使用JOIN连接
(1)进行等值连接,查询全部员工的个人信息以及薪酬情况
对应第一大题第(1)小题的方式,结果一致
SELECT * FROM Employees JOIN SalaryON Employees.EmployeeID = Salary.EmployeeID
(2)进行自然连接,查询全部员工的个人信息以及薪酬情况
对应第一大题第(2)小题的方式,NATURAL JOIN更简洁
SELECT * FROM Employees NATURAL JOIN Salary
(3) 查询工资水平在2500以上的员工号、姓名、教育、收入、支出、盈余
对应第一大题第(3)小题的代码,减少运算次数
SELECT Employees.EmployeeID, Name, Education, InCome, OutCome, ActInCome FROM Employees NATURAL JOIN SalaryWHERE InCome > 2500
(4)查询工资水平在2500以上的员工号、姓名、教育、收入、支出、盈余、所属部门
对应第一大题第(4)小题的方式,三表连接的时候代码更简洁,运算次数减少
SELECT Employees.EmployeeID, Name, Education, InCome, OutCome, ActInCome, DepartmentNameFROM Employees NATURAL JOIN Salary NATURAL JOIN DepartmentsWHERE InCome > 2500
(5)查询所有员工的员工号,名字,薪酬,支出(左连接)
为了显示左连接和右连接的区别,在Employees表中增加一行数据
增加数据后,Salary表不更新,这样会导致Salary表中没有该新增员工的数据
SELECT Employees.EmployeeID, Name, InCome, OutComeFROM Employees LEFT JOIN SalaryON Employees.EmployeeID = Salary.EmployeeID
会发现左连接会列示全部Employees(即左表)中的所有行,当Salary(即右表)中不存在对应左表的数据时,会显示NULL
(6)查询所有部门的员工情况(右连接)
为了显示左连接和右连接的区别,在Departments表中增加一行数据
增加数据后,Employees表不更新,这样会导致Employees表中没有该新增员工的数据
SELECT DepartmentName, EmployeeID, NameFROM Employees RIGHT JOIN DepartmentsON Employees.DepartmentID = Departments.DepartmentID
会发现右连接会列示全部Departments(即右表)中的所有行,当Employees(即左表)中不存在对应左表的数据时,会显示NULL
(7)查询所有部门的所有员工的薪酬情况(全连接)
全连接顾名思义,会把左右表的行全部列示,当有不对应的行时,会分别显示NULL
有两种方法选择连接的列名
第一种是使用<表名>.<列名>
SELECT DepartmentName, Name, InComeFROM Employees LEFT JOIN SalaryON Employees.EmployeeID = Salary.EmployeeID RIGHT JOIN DepartmentsON Employees.DepartmentID = Departments.DepartmentID
第二种是使用表名 USING(列名),可以少书写起码两次的列名
SELECT DepartmentName, Name, InComeFROM Employees LEFT JOIN Salary USING(EmployeeID)RIGHT JOIN Departments USING(DepartmentID)
(8)查询所有部门所有员工的名字
两表的全连接需要用UNION进行连接
SELECT DepartmentName, NameFROM EmployeesLEFT JOIN Departments USING(DepartmentID)UNIONSELECT DepartmentName, NameFROM EmployeesRIGHT JOIN Departments USING(DepartmentID)
- MYSQL基础上机练习题(四) 表连接
- MYSQL基础上机练习题(二) 数据插入、修改、删除
- MYSQL基础上机练习题(三) 数据查询
- MYSQL基础上机练习题(五) GROUP BY子句应用
- MYSQL基础上机练习题(六) 排序问题综合应用
- MYSQL基础上机练习题(一) 数据库、表、字段的创建、修改、删除
- MYSQL基础上机练习题(七)选取最大值、最小值、连续值、缺失值、重复值的综合应用
- mysql练习题四
- MySQL JOIN 多表连接(四)
- Java练习题(四)
- javascript练习题(四)
- mysql(四、连接查询)
- mysql基础篇(四)
- mysql基础篇(四)
- mysql基础综述(四)
- mysql基础---数据管理(四)
- 链表课后练习题(基础)
- 基础练习题(一)
- struts2在页面输出类型转换错误
- packageName和applicationId有什么区别(基于最新官方文档)
- HTTP Request jsession id and cookie
- struts2中通过集合接收、输出数据
- 交叉字符串的判定算法
- MYSQL基础上机练习题(四) 表连接
- 自定义注解在Spring中的应用
- Linux上 Can't connect to X11 window server using XX as the value of the DISPLAY 错误解决方法
- Ubuntu安装和运行Docker
- R-CNN
- struts2中重写框架类型转换类StrutsTypeConverter建一个时间转换工具
- Java中数据导出到Excel实例
- 权限控制 流程节点
- project facets java转成web项目