网站开发用jquery吗,苏州做网站的公司哪家好,wordpress 安装500错误,网站开发源代码知识产权归属2023.9.8 相关学习笔记#xff1a;
#子查询
/*
含义#xff1a;
出现在其他语句中的select语句#xff0c;称为子查询或内查询
外部的查询语句#xff0c;称为主查询或外查询分类#xff1a;
按子查询出现的位置#xff1a;select后面#xff1a;仅仅支持标量子查询fro…2023.9.8 相关学习笔记
#子查询
/*
含义
出现在其他语句中的select语句称为子查询或内查询
外部的查询语句称为主查询或外查询分类
按子查询出现的位置select后面仅仅支持标量子查询from后面支持表子查询where或having后面★标量子查询单行 √列子查询 多行 √行子查询exists后面相关子查询表子查询
按结果集的行列数不同标量子查询结果集只有一行一列列子查询结果集只有一列多行行子查询结果集有一行多列表子查询结果集一般为多行多列*/#一、where或having后面
/*
1、标量子查询单行子查询
2、列子查询多行子查询3、行子查询多列多行特点
①子查询放在小括号内
②子查询一般放在条件的右侧
③标量子查询一般搭配着单行操作符使用列子查询一般搭配着多行操作符使用
in、any/some、all④子查询的执行优先于主查询执行主查询的条件用到了子查询的结果*/
#1.标量子查询重点
#案例1谁的工资比 Abel 高?
SELECT last_name
FROM employees
WHERE salary(SELECT salary FROM employees WHERE last_nameAbel);
#案例2返回job_id与141号员工相同salary比143号员工多的员工 姓名job_id 和工资
SELECT last_name,job_id,salary
FROM employees
WHERE job_id (SELECT job_id FROM employees WHERE employee_id141)
AND salary (SELECT salary FROM employees WHERE employee_id143);
#案例3返回公司工资最少的员工的last_name,job_id和salary
SELECT last_name,job_id,salary
FROM employees
WHERE salary(SELECT MIN(salary) FROM employees);
#案例4查询最低工资大于50号部门最低工资的部门id和其最低工资
SELECT department_id,MIN(salary)
FROM employees
GROUP BY department_id
HAVING MIN(salary)(SELECT MIN(salary) FROM employees WHERE department_id50);#2.列子查询多行子查询
#案例1返回location_id是1400或1700的部门中的所有员工姓名
SELECT last_name
FROM employees
WHERE department_id IN
(SELECT department_id
FROM departments
WHERE location_id IN (1400,1700));
#案例2返回其它工种中比job_id为‘IT_PROG’工种任一工资低的员工的员工号、姓名、job_id 以及salary
SELECT employee_id,last_name,job_id,salary
FROM employees
WHERE salary ANY
(SELECT salary
FROM employees
WHERE job_id IT_PROG)
AND job_id ! IT_PROG;
#案例3返回其它部门中比job_id为‘IT_PROG’部门所有工资都低的员工的员工号、姓名、job_id 以及salary
SELECT last_name,employee_id,job_id,salary
FROM employees
WHERE salaryALL(SELECT DISTINCT salaryFROM employeesWHERE job_id IT_PROG) AND job_idIT_PROG;#3、行子查询结果集一行多列或多行多列
#案例查询员工编号最小并且工资最高的员工信息
SELECT *
FROM employees
WHERE (employee_id,salary)
(SELECT MIN(employee_id),MAX(salary) FROM employees);#二、select后面
/*
仅仅支持标量子查询
*/#案例查询每个部门的员工个数
SELECT d.department_name,(
SELECT COUNT(*) FROM employees e WHERE e.department_id d.department_id
) 员工人数
FROM departments d;
#案例2查询员工号102的部门名
SELECT department_name
FROM departments d
INNER JOIN employees e
ON d.department_id e.department_id
WHERE employee_id 102;#三、from后面
/*
将子查询结果充当一张表要求必须起别名
*/#案例查询每个部门的平均工资的工资等级
SELECT Ag_dep.*,j.grade_level
FROM(SELECT department_id,AVG(salary) agFROM employeesGROUP BY department_id
) Ag_dep
INNER JOIN job_grades j
ON Ag_dep.ag BETWEEN lowest_sal AND highest_sal;#四、exists后面相关子查询/*
语法
exists(完整的查询语句)
结果
1或0
*/SELECT EXISTS(SELECT employee_id FROM employees WHERE salary300000);#案例1查询有员工的部门名
#用exists实现
SELECT department_name
FROM departments d
WHERE EXISTS(
SELECT *
FROM employees e
WHERE d.department_ide.department_id
);
#用in来实现
SELECT department_name
FROM departments d
WHERE d.department_id IN (
SELECT department_id
FROM employees);
#案例2查询没有女朋友的男神信息
#in实现
SELECT bo.*
FROM boys bo
WHERE bo.id NOT IN (
SELECT boyfriend_id
FROM beauty);
#exists实现
SELECT bo.*
FROM boys bo
WHERE NOT EXISTS(
SELECT boyfriend_id
FROM beauty b
WHERE bo.idb.boyfriend_id); 课后习题
#课后习题
#1.查询和Zlotkey相同部门的员工姓名和工资
SELECT last_name,salary
FROM employees
WHERE department_id (
SELECT department_id
FROM employees
WHERE last_nameZlotkey);
#2.查询工资比公司平均工资高的员工的员工号姓名和工资。
SELECT employee_id,last_name,salary
FROM employees
WHERE salary(
SELECT AVG(salary)
FROM employees);
#3.查询各部门中工资比本部门平均工资高的员工的员工号, 姓名和工资
SELECT employee_id,last_name,salary
FROM employees e
INNER JOIN (SELECT department_id,AVG(salary) agFROM employeesGROUP BY department_id
) b
ON e.department_idb.department_id
WHERE salary b.ag;
#4.查询和姓名中包含字母u的员工在相同部门的员工的员工号和姓名
SELECT employee_id,last_name
FROM employees
WHERE department_id IN(
SELECT department_id
FROM employees
WHERE last_name LIKE %u%
);
#5. 查询在部门的location_id为1700的部门工作的员工的员工号
SELECT employee_id
FROM employees
WHERE department_id IN(SELECT department_idFROM departmentsWHERE location_id1700
);
#6.查询管理者是King的员工姓名和工资
SELECT last_name,salary
FROM employees
WHERE manager_id IN (SELECT employee_idFROM employeesWHERE last_nameK_ing
);
#7.查询工资最高的员工的姓名要求first_name和last_name显示为一列列名为 姓.名
SELECT CONCAT(last_name,first_name) 姓.名
FROM employees
WHERE salary(SELECT MAX(salary)FROM employees
);