2、多表查询
MySql中的多表查询就是指查询多张表,将多张表中满足一定条件的数据查询出来,MySql中的多表查询分类其实并不多,总共就分几类:
笛卡尔积查询 外链接查询:左外连接查询,右外链接查询 内连接查询:隐式内连接查询,显示内连接查询 子查询 例:假设有两张表a,b,这两张表的关系是一对多的关系
创建a表:
create table a ( id int primary key auto_increment, name varchar(20) ) 向a表中插入几条记录:
insert into a values(1, 'aaa'); insert into a values(2, 'bbb'); insert into a values(3, 'ccc');创建b表:
create table b ( id int primary key auto_increment, name varchar(20) ) 向b表中插入几条记录:
insert into b values(1, '张三'); insert into b values(2, '李四'); insert into b values(4, '王五'); 我们在进行多表查询之前,可以分别查看一下表里的数据是否完整:
select * from a; select * from b; 笛卡尔积查询:
select * from a, b; 笛卡尔积查询是最简单的多表查询,但也是最没有用的多表查询,因为这种查询的查询结果没有多大意义,没法借鉴,而且数据是混乱重复的。之所以叫笛卡尔积,因为查询出来的结果和我们当年学习数学时候的笛卡尔的结果一下,相互穿插配对的查询效果。 结果:
1 'aaa' 1 '张三' 2 'bbb' 1 '张三' 3 'ccc' 1 '张三' 1 'aaa' 2 '李四' 2 'bbb' 2 '李四' 3 'ccc' 2 '李四' 1 'aaa' 4 '王五' 2 'bbb' 4 '王五' 3 'ccc' 4 '王五' 内连接查询:
隐式内连接:select * from a, b where a.id=b.id;显示内连接:select * from a inner join b on a.id=b.id;结果:1 'aaa' 1 '张三'2 'bbb' 2 '李四'内连接一共就这两种格式,虽然有两种格式,但是它们查询出来的结果是一模一样的,所以大家能记住一个即可,相对来说第一种用的比较多,并且第一种格式就是在原有的笛卡尔积查询的基础之上,增加了一个条件而已。
外链接查询:
左外连接:select * from a left join b on a.id=b.id;结果:1 'aaa' 1 '张三'2 'bbb' 2 '李四'3 'ccc' null null右外连接:select * from b right join a on a.id=b.id;结果:1 '张三' 1 'aaa'2 '李四' 2 'bbb'null null 3 'ccc'注:以上两种写法其实查询出来的结果也算是一样的,只不过查询出来的表的列谁在前谁在后的问题,外链接查询说白了,就是在原有的内连接查询的结果基础之上,在多查询出来一个结果,就是左外连接的左边的表里的所有数据或者右外连接表里的所有的数据,既先满足on后面的条件,然后再查询左外或者右外表里的所有的数据。上面这两种写法都是查询出所有的a表里的数据,如果想要查询所有的b表里的数据如下:
左外连接:select *from b left join a on a.id=b.id;结果:1 '张三' 1 'aaa'2 '李四' 2 'bbb'4 '王五' null null右外连接:select * from a right join b on a.id=b.id;结果:1 'aaa' 1 '张三'2 'bbb' 2 '李四'null null 4 '王五'子查询: 所谓的子查询就是指一个查询语句中又嵌套了一个查询语句。
例:
查询a表中id值为b表中名字为张三的id值的姓名:select name from a where id=(select id from b where name='张三');结果:'aaa'以上几种查询格式就是MySql中多表查询比较简单,并且不复杂的查询语句,当然,今天讲解的这几个查询也是MySql最基础入门的查询语句,在实际开发中,有很多很多复杂的查询结构,所以以后还需要大家多做一些多表查询的练习题来巩固。如果朋友们能把以上的内容掌握的话,那MySql的多表设计和多表查询也算是入门了。