一些mysql自学笔记(连接查询92语法)

进阶6:连接查询

含义:又称为多表查询,当查询的字段来自于多个表时,就会涉及到多表查询

`select * from beauty;
select * from boys;
select name,boyName from boys,beauty;`

(出现笛卡尔集错误情况)
select count() from beauty;
假设输出12行
select count(
) from boys;
假设输出4行
最终结果:12*4=48行
发生原因:没有有效的连接条件
如何避免:先加上有效的连接条件

改正:

`select * from beauty;
select * from boys;
select name,boyName from boys,beauty
where beauty.boyfriend_id = boys.id;`

分类;

按年代分类:

sql92标准:仅仅支持内连接
sql99标准【推荐】:支持内连接+外连接(左外和右外)+交叉连接
##按功能分类
内连接:等值连接、非等值连接、自连接
外连接:左外连接、右外连接、全外连接
交叉连接

一、sql92标准

1、等值连接

案例1:查询女神名和对应的男神名

`select * from beauty;
select * from boys;
select name,boyName from boys,beauty
where beauty.boyfriend_id = boys.id;`

案例2:查询员工名和对应的部门名

`select last_name,department_name
from employees,departments
where employees.department_id=departments.department_id;`

2、查询员工号、工种号、工种名(job_id有歧义,故job_id查询的时候也需要限定一下)

`select last_name,employees.job_id,job_title from employees,jobs
where employees.job_id = jobs.job_id;`

(语句过长,可为表去别名)

`select last_name,e.job_id,job_title from employees  e,jobs  j
where e.job_id = j.job_id;`

(取了别名,除了那两都要改)
(如果为表起了别名,则查询的字段就不能用原来的表名去限定)

3、两个表的顺序是否可以调换(可以)

4、可以加筛选吗?

案例:查询有奖金的员工名、部门名

`select last_name,department_name from employees e,departments d where e.
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值