二、数据查询语言(六)

MySQL


一、初识数据库
二、数据查询语言(一)
二、数据查询语言(二)
二、数据查询语言(三)
二、数据查询语言(四)
二、数据查询语言(五)

二、数据查询语言(六)

数据查询语言包括: 基础查询 条件查询 排序查询 分组查询 连接查询 子查询 分页查询 联合查询

前言


提示:以下是本篇文章正文内容,下面案例可供参考
且所用数据表为:可自行下载

子查询-经典案例

1. 查询和 Zlotkey 相同部门的员工姓名和工资

USE myemployees
SELECT last_name,salary,department_id
FROM employees
WHERE department_id=(
	SELECT department_id
	FROM employees
	WHERE last_name='Zlotkey');#标量子查询用=

2. 查询工资比公司平均工资高的员工的员工号,姓名和工资

SELECT AVG(salary)
FROM employees;#标量

SELECT employee_id,last_name,salary
FROM employees
WHERE salary>(
	SELECT AVG(salary)
	FROM employees);

3. 查询各部门中工资比本部门平均工资高的员工的员工号, 姓名和工资

#分两步,①先查各部门的平均工资,
SELECT AVG(salary),department_id
FROM employees
GROUP BY department_id;
#②连接①的结果集和employyees表,进行筛选
SELECT employee_id,Last_name,salary
FROM employees e
INNER JOIN (
	SELECT AVG(salary) AS ag,department_id
	FROM employees
	GROUP BY department_id
)AS ag_dep
ON e.`department_id`=ag_dep.department_id
WHERE salary>ag_dep.ag;

4. 查询和姓名中包含字母 u 的员工在相同部门的员工的员工号和姓名

#多行查询用in
#①查询姓名中包含字母u的员工的部门,②查询部门号=①中任意一个的员工号和姓名
SELECT DISTINCT department_id#使用DISTINCT去重
FROM employees
WHERE Last_name LIKE '%u%';

SELECT employee_id,last_name
FROM employees
WHERE department_id IN(
	SELECT DISTINCT department_id
	FROM employees
	WHERE Last_name LIKE '%u%');	

5. 查询在部门的 location_id 为 1700 的部门工作的员工的员工号

#第一步
SELECT DISTINCT department_id
FROM departments
WHERE location_id=1700
#结合第一步
SELECT employee_id
FROM employees
WHERE department_id IN(
	SELECT DISTINCT department_id
	FROM departments
	WHERE location_id=1700);

6. 查询管理者是 K_ing 的员工姓名和工资

SELECT last_name,salary
FROM employees
WHERE manager_id IN(
	SELECT employee_id
	FROM employees
	WHERE last_name='K_ing');

7. 查询工资最高的员工的姓名,要求 first_name 和 last_name 显示为一列,列名为 姓名

SELECT CONCAT(first_name,last_name) "姓.名"
FROM employees
WHERE salary=(
	SELECT MAX(salary)
	FROM employees);

分页查询 ※


应用场景:当要显示的数据一页显示不全,需要分页提交sql请求

语法:
	select 查询列表
	from 表
	【join type join 表2
	on 连接条件
	where 筛选条件
	group By 分组字段
	having 分组后筛选
	order by 排序的字段】
	limit offest,size;
	
	offest要显示条目的起始索引(起始索引从0开始)
	
特点:
	①limit语句放在查询语句的最后
	②公式
	要显示的页数 page, 每页的条目数

	select 查询列表
	from 表
	limit (page-1)*size,size;
	
	size=10
	page
	1	0
	2	10
	3	20

案例1:查询前五条员工信息

SELECT * FROM employees LIMIT 0,5;
SELECT * FROM employees LIMIT 5;#offset的值从第一条开始的支持省略0

案例2:查询第11到25条

SELECT * FROM employees LIMIT 10,15;

案例3:有奖金的员工信息,并且工资较高的前10名显示出来

SELECT * 
FROM employees
WHERE commission_pct IS NOT NULL
ORDER BY salary DESC LIMIT 10;

总结

期待大家和我交流,留言或者私信,一起学习,一起进步!

上一篇:MySQL分组函数——连接查询(sql92标准)


下一篇:Mysql之分页查询、联合查询、插入、更新、删除