mysql 子查询

什么是子查询

一个select语句中包含另一个完整的select语句,或两个以上SELECT。

子select可以出现在where后面,当作一个查询条件使用;或者出现在from后面,作为一个新表单供查询使用。

#创建部门表
CREATE TABLE `dept` (
  `deptno` bigint(2) NOT NULL AUTO_INCREMENT COMMENT '表示部门编号,由两位数字所组成',
  `dname` varchar(14) DEFAULT NULL COMMENT '部门名称,最多由14个字符所组成',
  `local` varchar(13) DEFAULT NULL COMMENT '部门所在的位置',
  PRIMARY KEY (`deptno`)
) ENGINE=InnoDB AUTO_INCREMENT=41 DEFAULT CHARSET=utf8;
#创建薪水级别表
CREATE TABLE `salgrade` (
  `grade` bigint(11) NOT NULL AUTO_INCREMENT COMMENT '工资等级',
  `lowSalary` int(11) DEFAULT NULL COMMENT '此等级的最低工资',
  `highSalary` int(11) DEFAULT NULL COMMENT '此等级的最高工资',
  PRIMARY KEY (`grade`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
#创建员工表
CREATE TABLE `emp` (
  `empno` int(11) NOT NULL,
  `ename` varchar(255) DEFAULT NULL,
  `job` varchar(255) DEFAULT NULL,
  `mgr` varchar(255) DEFAULT NULL,
  `hiredate` date DEFAULT NULL,
  `salary` decimal(10,0) DEFAULT NULL,
  `comm` double DEFAULT NULL,
  `deptno` int(11) DEFAULT NULL,
  PRIMARY KEY (`empno`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- 查询与项羽同一个部门员工姓名
SELECT ename,deptno from emp 
where deptno=(SELECT deptno FROM emp WHERE ename='项羽');

-- 查询刘备所属部门工资大于等于1500的员工姓名
SELECT ename,salary,deptno from emp 
WHERE deptno=(SELECT deptno from emp WHERE ename='刘备')and salary >=1500;

-- 查询工资高于30号部门所有员工信息
SELECT * from emp WHERE salary >(
SELECT max(salary) FROM emp where  deptno=30);

-- 查询工作和工资与妲己完全相同的员工信息
SELECT * from emp WHERE (job,salary)in(SELECT job,salary from emp WHERE ename='妲己');

SELECT * from emp  e right JOIN 
(SELECT job,salary from emp WHERE ename='妲己') t1 
on e.job=t1.job and e.salary=t1.salary;

-- 查询员工编号为7788的员工名称、员工工资、部门名称、部门地址
SELECT empno,ename,salary,dname,local from emp e   JOIN
(SELECT * from dept WHERE deptno=(SELECT deptno from emp WHERE empno='7788')) t1
WHERE empno='7788';

-- 查询编号为7369员工编号、姓名及经理编号、姓名
SELECT * FROM emp  WHERE empno in((
SELECT mgr from emp WHERE empno='7369'),'7369');

 

posted @ 2023-06-16 23:01  系统显示名称已被使用  阅读(26)  评论(0)    收藏  举报