多表查询练习(左外连接,右外连接,内连接查询,子连接查询)

可运行SQL文件:
/*
Navicat MySQL Data Transfer

Source Server : 练习数据库
Source Server Version : 50717
Source Host : localhost:3306
Source Database : day

Target Server Type : MYSQL
Target Server Version : 50717
File Encoding : 65001

Date: 2018-07-17 16:19:42
*/

SET FOREIGN_KEY_CHECKS=0;


– Table structure for dept


DROP TABLE IF EXISTS dept;
CREATE TABLE dept (
deptno int(11) NOT NULL,
dname varchar(50) DEFAULT NULL,
loc varchar(50) DEFAULT NULL,
PRIMARY KEY (deptno)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


– Records of dept


INSERT INTO dept VALUES (‘10’, ‘教研部’, ‘北京’);
INSERT INTO dept VALUES (‘20’, ‘学工部’, ‘上海’);
INSERT INTO dept VALUES (‘30’, ‘销售部’, ‘广州’);
INSERT INTO dept VALUES (‘40’, ‘财务部’, ‘武汉’);


– Table structure for emp


DROP TABLE IF EXISTS emp;
CREATE TABLE emp (
empno int(11) NOT NULL,
ename varchar(50) DEFAULT NULL,
job varchar(50) DEFAULT NULL,
mgr int(11) DEFAULT NULL,
hiredate date DEFAULT NULL,
sal decimal(7,2) DEFAULT NULL,
COMM decimal(7,2) DEFAULT NULL,
deptno int(11) DEFAULT NULL,
PRIMARY KEY (empno),
KEY fk_emp (mgr),
CONSTRAINT fk_emp FOREIGN KEY (mgr) REFERENCES emp (empno)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


– Records of emp


INSERT INTO emp VALUES (‘1001’, ‘甘宁’, ‘文员’, ‘1013’, ‘2000-12-17’, ‘8000.00’, null, ‘20’);
INSERT INTO emp VALUES (‘1002’, ‘黛绮丝’, ‘销售员’, ‘1006’, ‘2001-02-20’, ‘16000.00’, ‘3000.00’, ‘30’);
INSERT INTO emp VALUES (‘1003’, ‘殷天正’, ‘销售员’, ‘1006’, ‘2001-02-22’, ‘12500.00’, ‘5000.00’, ‘30’);
INSERT INTO emp VALUES (‘1004’, ‘刘备’, ‘经理’, ‘1009’, ‘2001-04-02’, ‘29750.00’, null, ‘20’);
INSERT INTO emp VALUES (‘1005’, ‘谢逊’, ‘销售员’, ‘1006’, ‘2001-09-28’, ‘12500.00’, ‘14000.00’, ‘30’);
INSERT INTO emp VALUES (‘1006’, ‘关羽’, ‘经理’, ‘1009’, ‘2001-05-01’, ‘28500.00’, null, ‘30’);
INSERT INTO emp VALUES (‘1007’, ‘张飞’, ‘经理’, ‘1009’, ‘2001-09-01’, ‘24500.00’, null, ‘10’);
INSERT INTO emp VALUES (‘1008’, ‘诸葛亮’, ‘分析师’, ‘1004’, ‘2007-04-19’, ‘30000.00’, null, ‘20’);
INSERT INTO emp VALUES (‘1009’, ‘曾阿牛’, ‘董事长’, null, ‘2001-11-17’, ‘50000.00’, null, ‘10’);
INSERT INTO emp VALUES (‘1010’, ‘韦一笑’, ‘销售员’, ‘1006’, ‘2001-09-08’, ‘15000.00’, ‘0.00’, ‘30’);
INSERT INTO emp VALUES (‘1011’, ‘周泰’, ‘文员’, ‘1008’, ‘2007-05-23’, ‘11000.00’, null, ‘20’);
INSERT INTO emp VALUES (‘1012’, ‘程普’, ‘文员’, ‘1006’, ‘2001-12-03’, ‘9500.00’, null, ‘30’);
INSERT INTO emp VALUES (‘1013’, ‘庞统’, ‘分析师’, ‘1004’, ‘2001-12-03’, ‘30000.00’, null, ‘20’);
INSERT INTO emp VALUES (‘1014’, ‘黄盖’, ‘文员’, ‘1007’, ‘2002-01-23’, ‘13000.00’, null, ‘10’);


– Table structure for salgrade


DROP TABLE IF EXISTS salgrade;
CREATE TABLE salgrade (
grade int(11) NOT NULL,
losal int(11) DEFAULT NULL,
hisal int(11) DEFAULT NULL,
PRIMARY KEY (grade)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


– Records of salgrade


INSERT INTO salgrade VALUES (‘1’, ‘7000’, ‘12000’);
INSERT INTO salgrade VALUES (‘2’, ‘12010’, ‘14000’);
INSERT INTO salgrade VALUES (‘3’, ‘14010’, ‘20000’);
INSERT INTO salgrade VALUES (‘4’, ‘20010’, ‘30000’);
INSERT INTO salgrade VALUES (‘5’, ‘30010’, ‘99990’);


– Table structure for stu


DROP TABLE IF EXISTS stu;
CREATE TABLE stu (
sid int(11) NOT NULL,
sname varchar(50) DEFAULT NULL,
age int(11) DEFAULT NULL,
gander varchar(10) DEFAULT NULL,
province varchar(50) DEFAULT NULL,
tuition int(11) DEFAULT NULL,
PRIMARY KEY (sid)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


– Records of stu


INSERT INTO stu VALUES (‘1’, ‘王永’, ‘23’, ‘男’, ‘北京’, ‘1500’);
INSERT INTO stu VALUES (‘2’, ‘张雷’, ‘25’, ‘男’, ‘辽宁’, ‘2500’);
INSERT INTO stu VALUES (‘3’, ‘李强’, ‘22’, ‘男’, ‘北京’, ‘3500’);
INSERT INTO stu VALUES (‘4’, ‘宋永合’, ‘25’, ‘男’, ‘北京’, ‘1500’);
INSERT INTO stu VALUES (‘5’, ‘叙美丽’, ‘23’, ‘女’, ‘北京’, ‘1000’);
INSERT INTO stu VALUES (‘6’, ‘陈宁’, ‘22’, ‘女’, ‘山东’, ‘2500’);
INSERT INTO stu VALUES (‘7’, ‘王丽’, ‘21’, ‘女’, ‘北京’, ‘1600’);
INSERT INTO stu VALUES (‘8’, ‘李永’, ‘23’, ‘男’, ‘北京’, ‘3500’);
INSERT INTO stu VALUES (‘9’, ‘张玲’, ‘23’, ‘女’, ‘广州’, ‘2500’);
INSERT INTO stu VALUES (‘10’, ‘啊历’, ‘18’, ‘男’, ‘山西’, ‘3500’);
INSERT INTO stu VALUES (‘11’, ‘王刚’, ‘23’, ‘男’, ‘湖北’, ‘4500’);
INSERT INTO stu VALUES (‘12’, ‘陈永’, ‘24’, ‘男’, ‘北京’, ‘1500’);
INSERT INTO stu VALUES (‘13’, ‘李雷’, ‘24’, ‘男’, ‘辽宁’, ‘2500’);
INSERT INTO stu VALUES (‘14’, ‘李沿’, ‘22’, ‘男’, ‘北京’, ‘3500’);
INSERT INTO stu VALUES (‘15’, ‘王小明’, ‘25’, ‘男’, ‘北京’, ‘1500’);
INSERT INTO stu VALUES (‘16’, ‘王小丽’, ‘23’, ‘女’, ‘北京’, ‘1000’);
INSERT INTO stu VALUES (‘17’, ‘唐宁’, ‘22’, ‘女’, ‘山东’, ‘2500’);
INSERT INTO stu VALUES (‘18’, ‘唐丽’, ‘21’, ‘女’, ‘北京’, ‘1600’);
INSERT INTO stu VALUES (‘19’, ‘啊永’, ‘23’, ‘男’, ‘北京’, ‘3500’);
INSERT INTO stu VALUES (‘20’, ‘唐玲’, ‘23’, ‘女’, ‘广州’, ‘2500’);
INSERT INTO stu VALUES (‘21’, ‘叙刚’, ‘18’, ‘男’, ‘山西’, ‘3500’);
INSERT INTO stu VALUES (‘22’, ‘王累’, ‘23’, ‘男’, ‘湖北’, ‘4500’);
INSERT INTO stu VALUES (‘23’, ‘赵安’, ‘23’, ‘男’, ‘北京’, ‘1500’);
INSERT INTO stu VALUES (‘24’, ‘关雷’, ‘25’, ‘男’, ‘辽宁’, ‘2500’);
INSERT INTO stu VALUES (‘25’, ‘李字’, ‘22’, ‘男’, ‘北京’, ‘3500’);
INSERT INTO stu VALUES (‘26’, ‘叙安国’, ‘25’, ‘男’, ‘北京’, ‘1500’);
INSERT INTO stu VALUES (‘27’, ‘陈浩难’, ‘23’, ‘女’, ‘北京’, ‘1000’);
INSERT INTO stu VALUES (‘28’, ‘陈明’, ‘22’, ‘女’, ‘山东’, ‘2500’);
INSERT INTO stu VALUES (‘29’, ‘孙丽’, ‘21’, ‘女’, ‘北京’, ‘1600’);
INSERT INTO stu VALUES (‘30’, ‘李治国’, ‘23’, ‘男’, ‘北京’, ‘3500’);
INSERT INTO stu VALUES (‘31’, ‘张娜’, ‘23’, ‘女’, ‘广州’, ‘2500’);
INSERT INTO stu VALUES (‘32’, ‘安强’, ‘18’, ‘男’, ‘山西’, ‘3500’);
INSERT INTO stu VALUES (‘33’, ‘王欢’, ‘23’, ‘男’, ‘湖北’, ‘4500’);
INSERT INTO stu VALUES (‘34’, ‘周天乐’, ‘23’, ‘男’, ‘北京’, ‘1500’);
INSERT INTO stu VALUES (‘35’, ‘关雷’, ‘25’, ‘男’, ‘辽宁’, ‘2500’);
INSERT INTO stu VALUES (‘36’, ‘吴强’, ‘22’, ‘男’, ‘北京’, ‘3500’);
INSERT INTO stu VALUES (‘37’, ‘吴合国’, ‘25’, ‘男’, ‘北京’, ‘1500’);
INSERT INTO stu VALUES (‘38’, ‘正小和’, ‘23’, ‘女’, ‘北京’, ‘1000’);
INSERT INTO stu VALUES (‘39’, ‘吴丽’, ‘22’, ‘女’, ‘山东’, ‘2500’);
INSERT INTO stu VALUES (‘40’, ‘冯含’, ‘21’, ‘女’, ‘北京’, ‘1600’);
INSERT INTO stu VALUES (‘41’, ‘陈冬’, ‘23’, ‘男’, ‘北京’, ‘3500’);
INSERT INTO stu VALUES (‘42’, ‘关玲’, ‘23’, ‘女’, ‘广州’, ‘2500’);
INSERT INTO stu VALUES (‘43’, ‘包利’, ‘18’, ‘男’, ‘山西’, ‘3500’);
INSERT INTO stu VALUES (‘44’, ‘威刚’, ‘23’, ‘男’, ‘湖北’, ‘4500’);
INSERT INTO stu VALUES (‘45’, ‘李永’, ‘23’, ‘男’, ‘北京’, ‘1500’);
INSERT INTO stu VALUES (‘46’, ‘张关雷’, ‘25’, ‘男’, ‘辽宁’, ‘2500’);
INSERT INTO stu VALUES (‘47’, ‘送小强’, ‘22’, ‘男’, ‘北京’, ‘3500’);
INSERT INTO stu VALUES (‘48’, ‘关动林’, ‘25’, ‘男’, ‘北京’, ‘1500’);
INSERT INTO stu VALUES (‘49’, ‘苏小哑’, ‘23’, ‘女’, ‘北京’, ‘1000’);
INSERT INTO stu VALUES (‘50’, ‘赵宁’, ‘22’, ‘女’, ‘山东’, ‘2500’);
INSERT INTO stu VALUES (‘51’, ‘陈丽’, ‘21’, ‘女’, ‘北京’, ‘1600’);
INSERT INTO stu VALUES (‘52’, ‘钱小刚’, ‘23’, ‘男’, ‘北京’, ‘3500’);
INSERT INTO stu VALUES (‘53’, ‘艾林’, ‘23’, ‘女’, ‘广州’, ‘2500’);
INSERT INTO stu VALUES (‘54’, ‘郭林’, ‘18’, ‘男’, ‘山西’, ‘3500’);
INSERT INTO stu VALUES (‘55’, ‘周制强’, ‘23’, ‘男’, ‘湖北’, ‘4500’);
练习题及答案:
1. 查出至少有一个员工的部门。显示部门编号、部门名称、部门位置、部门人数。*/
/*
列:部门编号、部门名称、部门位置、部门人数(分组)
列:dept、emp(部门人数没有员工表不行)
条件:没有
分组条件:人数>1

部门编号、部门名称、部门位置在dept表中都有,只有部门人数需要使用emp表,使用deptno来分组得到。
我们让dept和(emp的分组查询),这两张表进行连接查询
*/
SELECT
z.*,d.dname,d.loc
FROM dept d, (SELECT deptno, COUNT(*) cnt FROM emp GROUP BY deptno) z
WHERE z.deptno=d.deptno;

/****************************************/

  1. 列出薪金比关羽高的所有员工。*/
    /*
    列:所有
    表:emp
    条件:sal>关羽的sal,其中关羽的sal需要子查询
    */
    SELECT *
    FROM emp e
    WHERE e.sal > (SELECT sal FROM emp WHERE ename=’关羽’)

/****************************************/

  1. 列出所有员工的姓名及其直接上级的姓名。*/
    /*
    列:员工名、领导名
    表:emp、emp
    条件:领导.empno=员工.mgr

emp表中存在自身关联,即empno和mgr的关系。
我们需要让emp和emp表连接查询。因为要求是查询所有员工的姓名,所以不能用内连接,因为曾阿牛是BOSS,没有上级,内连接是查询不到它的。
*/
SELECT e.ename, IFNULL(m.ename, ‘BOSS’) AS lead
FROM emp e LEFT JOIN emp m
ON e.mgr=m.empno;

/****************************************/

  1. 列出受雇日期早于直接上级的所有员工的编号、姓名、部门名称。*/
    /*
    列:编号、姓名、部门名称
    表:emp、dept
    条件:hiredate < 领导.hiredate

emp表需要查。部门名称在dept表中,所以也需要查。领导的hiredate需要查,这说明需要两个emp和一个dept连接查询
即三个表连接查询
*/
SELECT e.empno, e.ename, d.dname
FROM emp e LEFT JOIN emp m
ON e.mgr=m.empno
LEFT JOIN dept d ON e.deptno=d.deptno
WHERE e.hiredate

猜你喜欢

转载自blog.csdn.net/qq_39380737/article/details/81083706