Mysql笔记之(七)连接查询

含义:多表查询,当查询字段来自多个表时,就会用到连接查询

笛卡尔乘积现象:表1 有m行,表2 有n行,结果m*n行
发生原因:没有有效的连接条件
避免原因:添加有效的连接条件

分类:
1.按年份分类:sql92标准(仅支持内连接),sql99标准【推荐】(支持内连接、左外连接、右外连接、交叉连接)
2.外连接:左外连接,右外连接,全外连接
3.交叉连接

select * from beauty;

#12行

select * from boys;

#4行

select name,boyName from boys,beauty;   

#48行,相当于用第一张表每一行的内容去匹配第二张每一条,最终结果是第一张表的行数乘以第二张表的行数(笛卡尔乘积现象),结果是不对的

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

一、sql92连接

<1>等值连接

1.等值连接介绍

/*
(1)多表的等值连接为多表的交集
(2)n表连接至少需要n-1个连接条件
(3)多表连接的顺序没有要求
(4)一般需要为表起别名
(5)可以搭配之前所学的语句,比如排序、分组、筛选
*/

#例1.查询女神名和对应的男神名

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.为表起别名

/*
提高语句的简洁度
区分多个重名字段
注意:若为表起了别名,则查询字段就不能使用原来的表名去限定
*/
#例:查询员工名,工种号,工种名

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

#select语句中的job_id需要用employees来限定,不然会导致歧义
#若表名比较长,反复调用麻烦,可为表起别名

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

3.两个表的顺序可以调换

#例:查询员工名,工种号,工种名

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

4.可以加筛选

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

select last_name,department_name
from employees e,departments d
where e.department_id=d.department_id 
and e.commission_pct is not null
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值