MySQL多表连接等值连接学习



#连接查询

/*

概念:查询的字段来自于多个表

语法:

         select
字段1,字段2

         from 表1,表2

         【where 连接条件】

笛卡尔乘积:

         产生原因:没有加连接条件,导致结果为 表1 的行数*表2 的行数
分类:

         一、传统模式的多表连接

         等值连接(where)——非等值连接

 

         二、sql99推出的标准,使用join关键字实现连接

         内连接——外连接

 

         三、自连接

*/

 

#一、传统模式的多表连接

#也叫等值连接

/*

特点有

①表的顺序没有要求

②n表连接,至少需要n-1个连接条件

③一般需要为表起别名,这样可以提高语句简洁度,并且防止字段有歧义

④可以添加分组、排序、筛选,一起混合使用

*/

 

 

#①案例1:查询员工名、部门名

SELECT `last_name`,`department_name`

FROM `employees`,`departments`

WHERE
`employees`.`department_id`=`departments`.`department_id`;

 

#②为表起别名

/*

一般需要为表起别名,好处:

a、提高语句简洁度

b、防止字段有歧义,比如说 两张表中都有name字段,使用b.name 或者a.name 这样表示就没有歧义 

c、提高效率

如果已经为表起别名,则使用字段时,只能用别名限定而不能用表名限定

*/

SELECT e.`last_name`,d.`department_name`

FROM `employees` 
e,`departments` d

WHERE e.`department_id`=d.`department_id`;

 

#③添加筛选条件

#案例:查询 工资>5000的工种名和员工名、工资

SELECT job_title,last_name,salary

FROM employees e,jobs j

WHERE e.`job_id`=j.`job_id`

AND salary>5000;

 

 

 

#④添加分组和筛选

#01案例:查询每个部门的员工个数和部门名,每个部门人数大于5

SELECT COUNT(*) 个数,department_name

FROM employees e,departments d

WHERE e.`department_id`=d.`department_id`

GROUP BY e.`department_id`

HAVING 个数>5#⑤排序

#01案例:查询每个部门的员工个数和部门名,每个部门人数大于5,并按照人数倒序排序

SELECT COUNT(*) 个数,department_name

FROM employees e,departments d

WHERE e.`department_id`=d.`department_id`

GROUP BY e.`department_id`

HAVING 个数>5

ORDER BY 个数 DESC;


#⑥ 三表连接

#案例:查询员工名、部门名和所在城市

SELECT last_name,department_name,city

FROM employees e,departments d,locations l

WHERE e.`department_id`=d.`department_id`

AND d.`location_id`=l.`location_id`;



  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值