MySQL多表查询

2020-12-25  本文已影响0人  lily_5945

首先我们来了解一下表与表之间的关系:一对一、一对多、多对多。
这里我们把多表查询分为四个学习模块:连接查询、合并结果集、子查询和自然连接

一、连表查询

# 隐式内连接,使用where条件消除笛卡尔积,多个表在后面加and
select * from 表1,表2 WHERE 表1.字段 = 表2.字段;
# 显示内连接,多个表在JOIN ...ON 后面添加 JOIN ... ON,如果还有条件,直接在后面写where、and 
select * from 表1 JOIN 表2 ON 表1.字段 = 表2.字段; 
# 以下是三个表student 、score 、course  的两种方法的查询例子
select st.name,sc.score,c.name from student st, score sc, course c WHERE st.id= sc.sid AND sc.cid=c.cid;
select st.name,sc.score,c.name from student st JOIN score sc ON st.id=sc.sid JOIN course c ON sc.cid=c.cid;
select * from 表1  LEFT OUTER JOIN 表2 ON 表1.字段 = 表2.字段;  #OUTER 可省略
select * from student st LEFT OUTER JOIN score sc ON st.sid=sc.sid;
select * from 表1 RIGHT OUTER JOIN 表2 ON 表1.字段=表2.字段;  #OUTER 可省略
select * from student st RIGHT OUTER JOIN score sc ON st.sid=sc.sid;

二、子查询

select * from (select * from 表名) as 别名
select * from where 带select语句的条件

三、合并结果集

# UNION,合并时去除重复的记录
select * from 表1 UNION select * from 表2;
# UNION ALL,合并时不去除重复记录
select * from 表1 UNION ALL select * from 表2;

四、自然连接

释义:
1,连接查询会产生无用笛卡尔集,我们通常使用主外键关系来去除它,而自然连接无需你去给出主外键等式,他会自动找到这一等式。也就是说不用去写条件。

select * from 表1 NATURAL JOIN 表2;

要求:
1,两张连接的表中列名称和类型完全一致的列作为条件;
2,会去除相同的列;
3,如果有两个相同的字段名,其中一个相同的字段内容不同,则查询的数据是空的;

上一篇 下一篇

猜你喜欢

热点阅读