mysql连接查询

Posted 张坤

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql连接查询相关的知识,希望对你有一定的参考价值。

Mysql连接查询(俗称连表查询) 分为内连接,外连接,自然连接

 

测试数据如下:

 create table student(id int primary key auto_increment,name varchar(10));

insert into student values(null,\'xiaohong\'),(null,\'xiaoming\'),(null,\'xiaoliang\');

create table score(id int primary key auto_increment,stu_id int not null, score decimal(5,2)); 

insert into score values(null,1,200.35),(null,2,300.45),(null,3,400.56);

补充:          

  decimal(10,2)中的“2”表示小数部分的位数,如果插入的值未指定小数部分或者小数部分不足两位则会自动补到2位小数,

  若插入的值小数部分超过了2为则会发生截断,截取前2位小数。

  “10”指的是整数部分加小数部分的总长度,也即插入的数字整数部分不能超过“10-2”位,否则不能成功插入,会报超出范围的错误。

 

      

 

 

内连接 

inner join/join

由于mysql默认是内连接,所以join等同于inner join 

 内连接返回的是符合连接条件并且两个表中都有对应数据存在的记录。

 如果符合条件 但是某一字段值为null,查出来的是 null

举例:

 SELECT stu.id,stu.name,s.score from student  as stu join score as s on stu.id=s.stu_id;

 

连接条件分析:

连接条件可以使用 on  using where

区别:on 是在连表查询中,任何情况下都可以使用on,而且建议使用on。

           on实在连表的过程中,根据on条件判断是否保留连表的结果。

           using 是在连表查询的字段名一致时,可以使用。如using(id)。using条件中

           使用的字段,返回结果中只有一遍。

            where是在连表操作完成后,再根据where条件进行数据过滤。效率低不建议这样。

 

外连接

外连接查询时,允许另一方存在与之不匹配的数据。外连接的连接条件不可使用where,

必须使用using和on的一种,其他都与内连接一致。

左外连接(left outer join/ left join )

左表为主表,即使右表没有与左表匹配的记录,也返回左表的记录。而右表与左表不匹配的记录将会被忽略。

 举例:

select score.score,student.name from score left join student on score.stu_id=student.id;

 

 

右外连接(right outer join / right join)
右表为主表,即使左表没有与之匹配的记录,也返回右表的记录。

举例:

select score.score ,student.name from score right join student on score.stu_id=student.id;

 

 

全外连接(full join):mysql 暂不支持,可以用union模拟实现。

自然连接

natural join (同 join)

natural left join (同 left join)

natural right join (同 right join)

自然连接会自动判断,以两个表中相同的字段为连接条件,返回查询结果。

注意:内连接不写连接条件会出现笛卡尔积的结果,应该避免这种情况,而外连接不写连接条件会报错

 

以上是关于mysql连接查询的主要内容,如果未能解决你的问题,请参考以下文章

MySQL连接查询之内连接左连接右连接自连接

MySQL连接查询

MySQL进阶 — 联合查询(外连接内连接子连接合并查询)

MySQL进阶 — 联合查询(外连接内连接子连接合并查询)

MySQL进阶 — 联合查询(外连接内连接子连接合并查询)

Mysql数据库连接查询