多表查询
多表查询分为:内连接 外连接(左右全) 交叉连接
下面提供两个表格,供演示操作:
create table user_info(
id int(2) primary key,
user_name varchar(12) unique,
password varchar(15) not null,
real_name varchar(8) not null,
age int(3)
);
create table address(
id int(2) primary key,
user_id int(2) not null,
real_name varchar(8),
mobile char(11),
address varchar(150)
);
内连接:多个表的交集
sql语句如下:
select ui.*,addr.* from user_info ui,address addr where ui.id=addr.user_id
拆分理解:
- ui、addr是user_info和addrss的别名,
- "."是调用的意思。
- .".*"、".id",是调用的意思
- 理解这个之后,下面的就很好理解了。
所以我可以写成如下代码,依旧可以得到同样的内连接效果:
select * from user_info ,address where user_infom.id=address.user_id
外连接:(左外连接 右外连接 全外连接)
左外连接(left join)特点:
以left关键字为参照,关键字左边的表为主表,将其数据全部显示,哪怕从表没有数据
select ui.*,addr.*
from user_info ui
left join address addr on ui.id=addr.user_id
右外连接(right join)特点:
以right关键字为参照,关键字右边的表为主表,将其数据全部显示,哪怕从表没有数据
select ui.*,addr.*
from user_info ui
right join address addr on ui.id=addr.user_id
全外连接(full [outer] join)特点:
显示两表全部数据内容。但是MySQL不支持全外连接。
交叉连接
特点:左表(“cross join”关键字左边的表)中的每一行与右表(“cross join”关键字右边的表)中的所有行组合,交叉联接的结果是一个笛卡尔积。