MySQL连接查询


所用数据库——链接地址

一、笛卡尔积

SELECT sname,grade FROM student,sc

  • 当两张表进行连接查询的时候,没有任何条件进行限制,最终的查询结果条数是两张表记录条数的乘积
  • 如何避免笛卡尔积
    加条件进行过滤,但不会减少记录的匹配次数,只不过显示的是有效记录(效率不变)

二、连接查询的分类

  • 连接查询需要关联多个表查询(多表查询)

1. 内连接

  • 语法(SQL99):
... A (INNER) JOIN B ON 连接条件...

INNER可以省略

  • 特点:
    将两张表能够匹配上的记录查询出来,两张表没有主副之分,两张表平等

1.1 等值连接

  • 条件是等量关系,即使用等号"="比较两个表的连接列的值,相当于两表执行笛卡尔后,取两表连结列值相等的记录
    SQL92(旧,不常用):select a,b from A,B where a.x=b.x;
    SQL99(新,常用):select a,b from A (inner) join B on a.x=b.x;
  • SQL99连接查询语法使得表的连接条件与where条件分离
  • 查询学生姓名、成绩
SELECT sname,grade FROM student INNER JOIN sc ON student.sno = sc.sno

1.2 非等值连接

  • 条件是非等量关系,即使用大于号">“或小于号”<"比较两个表的连接列的值,相当于两表执行笛卡尔积后,取一个表大于或小于另一个表的连接列值的记录

1.3 自连接

  • 一张表看作两张表,使用表的别名自己连接自己
SELECT A.sname FROM student A,student B WHERE A.sno = B.sno

  • 使用别名的好处
    执行效率高
    可读性好

2. 外连接

  • 语法:
... A LEFT (OUTER) JOIN B ON 连接条件...
... A RIGHT (OUTER) JOIN B ON 连接条件...

OUTER可以省略

  • 两张表一张是主表,一张是副表,主要查询主表的数据,当副表中的数据没有和主表中的数据匹配上,副表自动模拟出null与主表匹配
  • 特点:
    主表的数据无条件的全部查询出来

2.1 左外连接

  • 左(外)连接,左表的记录将会全部表示出来,即左表是主表,而右表只会显示符合搜索条件的记录,右表记录不足的地方显示为NULL与左表匹配
  • 以左表为主表查询学生姓名、成绩
SELECT sname,grade FROM student LEFT JOIN sc ON student.sno = sc.sno

2.2 右外连接

  • 右(外)连接,右表的记录将会全部表示出来,即右表是主表,而左表只会显示符合搜索条件的记录,左表记录不足的地方显示为NULL与右表匹配
  • 以右表为主表查询学生姓名、成绩
SELECT sname,grade FROM student RIGHT JOIN sc ON student.sno = sc.sno

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jayco江柯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值