MySql数据库中测试例子:
root
show databases;
use kali;
show tables;
--创建客户表
create table customer(
id int primary key auto_increment,
name varchar(10) not null,
address varchar(51) not null,
phone_number varchar(10) not null
);
insert into customer values(2,'kali','qingdao','123123123');
--创建消费表 (外键约束,fee表的customer_id为customer表的主键)
create table fee(
fee_id int primary key auto_increment,
customer_id int not null,
fee float(10),
foreign key(customer_id) references customer(id)
);
insert into fee values(2,1,'23');
customer表中的内容:
+----+------+------------+--------------+
| id | name | address | phone_number |
+----+------+------------+--------------+
| 1 | dxw | gongzhufen | 63983477 |
| 2 | kali | qingdao | 123123123 |
+----+------+------------+--------------+
fee表中的内容:
+--------+-------------+------+
| fee_id | customer_id | fee |
+--------+-------------+------+
| 1 | 1 | 1.5 |
| 2 | 1 | 23 |
+--------+-------------+------+
左连接:
select c.id,c.name,f.fee from customer as c left join fee as f on c.id=f.customer_id;
+----+------+------+
| id | name | fee |
+----+------+------+
| 1 | dxw | 1.5 |
| 1 | dxw | 23 |
| 2 | kali | NULL |
+----+------+------+
左外连接:
select c.id,c.name,f.fee from customer as c left outer join fee as f on c.id=f.customer_id;
+----+------+------+
| id | name | fee |
+----+------+------+
| 1 | dxw | 1.5 |
| 1 | dxw | 23 |
| 2 | kali | NULL |
+----+------+------+
右连接:
select c.id,c.name,f.fee from customer as c right join fee as f on c.id=f.customer_id;
+------+------+------+
| id | name | fee |
+------+------+------+
| 1 | dxw | 1.5 |
| 1 | dxw | 23 |
+------+------+------+
右外连接:
select c.id,c.name,f.fee from customer as c right outer join fee as f on c.id=f.customer_id;
+------+------+------+
| id | name | fee |
+------+------+------+
| 1 | dxw | 1.5 |
| 1 | dxw | 23 |
+------+------+------+
全连接:
select c.id,c.name,f.fee from customer as c,fee as f where c.id=f.customer_id;
select c.id,c.name,f,fee from customer as c full join fee as f on c.id=f.customer_id;(mysql中不支持全连接写法,这样在mysql中是不正确的)
+----+------+------+
| id | name | fee |
+----+------+------+
| 1 | dxw | 1.5 |
| 1 | dxw | 23 |
+----+------+------+
内连接:
--返回字段id与customer_id同时在customer表中也在fee表中。
select c.id,c.name,f.fee from customer as c inner join fee as f on c.id=f.customer_id;
+----+------+------+
| id | name | fee |
+----+------+------+
| 1 | dxw | 1.5 |
| 1 | dxw | 23 |
+----+------+------+
交叉连接:
--产生联接所涉及的表的笛卡尔积。第一个表的行数乘以第二个表的行数等于笛卡尔积结果集的大小
select c.id,c.name,f.fee from customer as c cross join fee as f;
select c.id,c.name,f.fee from customer as c,fee as f;
+----+------+------+
| id | name | fee |
+----+------+------+
| 1 | dxw | 1.5 |
| 2 | kali | 1.5 |
| 1 | dxw | 23 |
| 2 | kali | 23 |
+----+------+------+