mysql>select ename, sal, grade from emp, salgrade >where emp.sal between losal and hisal; +--------+---------+-------+ | ename | sal | grade | +--------+---------+-------+ | SMITH |800.00|1| | ALLEN |1600.00|3| | WARD |1250.00|2| | JONES |2975.00|4| | MARTIN |1250.00|2| | BLAKE |2850.00|4| | CLARK |2450.00|4| | SCOTT |3000.00|4| | KING |5000.00|5| | TURNER |1500.00|3| | ADAMS |1100.00|1| | JAMES |950.00|1| | FORD |3000.00|4| | MILLER |1300.00|2| +--------+---------+-------+ 14rowsinset (0.06 sec)
自连接
自连接是指在同一张表中连接查询
显示员工FORD的上级领导的编号和姓名(mgr是员工领导的编号-empno)
使用子查询:
1 2 3 4 5 6 7 8
mysql>select ename,empno from emp >where (select mgr from emp where ename='FORD')=empno; +-------+--------+ | ename | empno | +-------+--------+ | JONES |007566| +-------+--------+ 1rowinset (0.00 sec)
使用多表查询(自查询):
1 2 3 4 5 6 7 8
mysql>select leader.ename, leader.empno from emp leader,emp worker >where leader.empno=worker.mgr and worker.ename='FORD'; +-------+--------+ | ename | empno | +-------+--------+ | JONES |007566| +-------+--------+ 1rowinset (0.02 sec)
子查询
子查询是指嵌入在其他sql语句中的select语句,也叫嵌套语句
单行子查询
只返回一行记录的子查询
显示SMITH同一部门的员工
1 2 3 4 5 6 7 8 9 10 11
mysql>select*from emp where (select deptno from emp where ename='SMITH')=deptno; +--------+-------+---------+------+---------------------+---------+------+--------+ | empno | ename | job | mgr | hiredate | sal | comm | deptno | +--------+-------+---------+------+---------------------+---------+------+--------+ |007369| SMITH | CLERK |7902|1980-12-1700:00:00|800.00|NULL|20| |007566| JONES | MANAGER |7839|1981-04-0200:00:00|2975.00|NULL|20| |007788| SCOTT | ANALYST |7566|1987-04-1900:00:00|3000.00|NULL|20| |007876| ADAMS | CLERK |7788|1987-05-2300:00:00|1100.00|NULL|20| |007902| FORD | ANALYST |7566|1981-12-0300:00:00|3000.00|NULL|20| +--------+-------+---------+------+---------------------+---------+------+--------+ 5rowsinset (0.00 sec)
多行子查询
返回多行记录的子查询
in关键字:查询和10号部门的工作岗位相同的雇员的名字、岗位、工资、部门号但是不包括10自己的
1 2 3 4 5 6 7 8 9 10 11 12 13
mysql>select ename, job, deptno from emp >where job in (select job from emp where deptno=10) >and deptno<>10; +-------+---------+--------+ | ename | job | deptno | +-------+---------+--------+ | SMITH | CLERK |20| | JONES | MANAGER |20| | BLAKE | MANAGER |30| | ADAMS | CLERK |20| | JAMES | CLERK |30| +-------+---------+--------+ 5rowsinset (0.00 sec)
all关键字:显示工资比部门30的所有员工的工资高的员工的姓名、工资、部门号
1 2 3 4 5 6 7 8 9 10 11
mysql>select ename, sal, deptno from emp >where sal >all (select sal from emp where deptno=30); +-------+---------+--------+ | ename | sal | deptno | +-------+---------+--------+ | JONES |2975.00|20| | SCOTT |3000.00|20| | KING |5000.00|10| | FORD |3000.00|20| +-------+---------+--------+ 4rowsinset (0.01 sec)
any关键字:显示工资比部门30的任意员工的工资高的员工的姓名、工资、部门号(包含自己部门的员工)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
mysql>select ename, sal, deptno from emp >where sal >any(select sal from emp where deptno=30); +--------+---------+--------+ | ename | sal | deptno | +--------+---------+--------+ | ALLEN |1600.00|30| | WARD |1250.00|30| | JONES |2975.00|20| | MARTIN |1250.00|30| | BLAKE |2850.00|30| | CLARK |2450.00|10| | SCOTT |3000.00|20| | KING |5000.00|10| | TURNER |1500.00|30| | ADAMS |1100.00|20| | FORD |3000.00|20| | MILLER |1300.00|10| +--------+---------+--------+ 12rowsinset (0.01 sec)