08_MySQL DQL(SQL99标准)_多表连接查询中的内连接

Posted shayzhang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了08_MySQL DQL(SQL99标准)_多表连接查询中的内连接相关的知识,希望对你有一定的参考价值。

# sql99语法
/*
语法:
select 查询列表
from 表1 别名 【连接类型】
join 表2 别名
on 连接条件
【where 筛选条件】
【group by 分组】
【having 分组后筛选】
【order by 排序列表】

分类
内连接(重点): inner
外连接
左外(重点): left 【outer】
右外(类似左外) right 【outer】
全外: full 【outer】
交叉连接:cross


*/

# 一、内连接(就是把两个表的字段全部连接,表间没有顺序)
/*
select 查询列表
from 表1 别名
inner join 表2 别名 on 连接条件
inner join 表3 别名 on 连接条件
【where 筛选条件】
【group by 分组】
【having 分组后筛选】
【order by 排序列表】

分类:等值,非等值,自连接
*/


#1 等值连接
#案例1:查询员工名,部门名 【等值内连】
SELECT last_name,department_name
FROM employees AS e
INNER JOIN departments AS d
ON e.`department_id` = d.`department_id`;

#案例2:查询名字中包含e的员工名和工种名【等值内连 + 筛选】
SELECT last_name, job_title
FROM employees AS e
INNER JOIN jobs AS j
ON e.`job_id` = j.`job_id`
WHERE last_name LIKE ‘%e%‘;

#案例3:查询部门个数>3的城市名和部门个数【等值内连+分组+分组后筛选】
SELECT city,COUNT(*) AS "部门个数"
FROM departments AS d
INNER JOIN locations AS l
ON d.`location_id` = l.`location_id`
GROUP BY l.`city`
HAVING 部门个数>3;

#案例4:查询部门员工数>3的部门名称和员工个数,并降序排序
#【等值连接+分组+分组后筛选+ 排序】
SELECT department_name, COUNT(*) AS "员工个数"
FROM departments AS d
INNER JOIN employees AS e
ON d.`department_id` = e.`department_id`
GROUP BY e.`department_id`
HAVING 员工个数 > 3
ORDER BY 员工个数 DESC;

#案例5:查询员工名,部门名,工种名,并按部门名排序
#【多表等值连接+排序】
SELECT last_name, department_name, job_title
FROM employees AS e
INNER JOIN departments d ON e.`department_id` = d.`department_id`
INNER JOIN jobs AS j ON e.`job_id` = j.`job_id`
ORDER BY department_name DESC;


#2 非等值连接

#案例1:查询员工的工资级别
SELECT salary,grade_level
FROM employees AS e
INNER JOIN job_grades AS j
ON e.salary BETWEEN j.`lowest_sal` AND j.`highest_sal`;


#案例2:查询每个工资级别下员工个数》2的工资级别,并降序排列
SELECT COUNT(*), grade_level
FROM employees AS e
INNER JOIN job_grades AS j
ON e.`salary` BETWEEN j.`lowest_sal` AND j.`highest_sal`
GROUP BY grade_level
HAVING COUNT(*) > 20
ORDER BY COUNT(*) DESC;


#3 内连接中的自连接

#案例1:查询员工的名字,及其上级的名字
SELECT e.last_name, m.last_name
FROM employees AS e
INNER JOIN employees AS m
ON e.`manager_id` = m.`employee_id`
ORDER BY e.`last_name` ASC;

#案例2:查询名字中包含字符k的员工名,及其上级的名字
SELECT e.last_name, m.last_name
FROM employees AS e
INNER JOIN employees AS m
ON e.`manager_id` = m.`employee_id`
WHERE e.`last_name` LIKE ‘%k%‘
ORDER BY e.`last_name` ASC;

























































































以上是关于08_MySQL DQL(SQL99标准)_多表连接查询中的内连接的主要内容,如果未能解决你的问题,请参考以下文章

MySQL之DQL数据查询操作

第七周 Java语法总结之数据库大全_DDL_DML_DQL_约束_备份与还原_表的关系_三大范式_多表查询(内连接_外连接_子查询)_musql事务_隔离级别

mysql 如何 多表连查 按时间到排序

MySQL从入门到精通:多表查询的灵活运用_02

mysql 如何 多表连查 按时间到排序

Mysql的学习4____数据的查询