废话少说 直接上干货
ID | Name | Age | Sex |
1 | 约翰 | 12 | 女 |
2 | 王钢蛋 | 13 | 男 |
ID | Chinese | English | Name | Day |
1 | 90 | 100 | 约翰 | 1 |
2 | 80 | 105 | 约翰 | 4 |
3 | 98 | 120 | 王钢蛋 | 2 |
4 | 99 | 110 | 王钢蛋 | 3 |
select A.Name,A.Age,A.Sex,B.Chinese,B.English from A left join B on A.ID=B.ID where B.Day='1' ;
结果:约翰 12 女 90 100
select A.Name,A.Age,A.Sex,B.Chinese,B.English from A left join B on A.ID=B.ID and B.Day='1' ;
结果:约翰 12 女 90 100
王钢蛋 null null null
总结:
连接时用and会造成右边数据为空 where会查询整体条件的数据 不会出现右表为空的情况
查询时保证右表有数据并且只查询一条(多条的情况 只取一条)
select A.Name,B.Chinese,B.English from A left join (SELECT MAX(English)AS English,Name FROM B GROUP BY Name ) B on A.Name = B.Name;
这句话的重点在于红色部分 是将要查询的右表的值先分组取出来 并且只取了一个 使外部left join 的时候只会连接一条