selectcount(1) from t_student 32239selectcount(1) from t_class 1190selectcount(1) from t_student a JOIN t_class b on a.shop_id = b.id 26941
====CROSSJOIN
交叉连接CROSSJOIN (注:crossjoin后加条件只能用where,不能用on)
如果不带WHERE条件子句,它将会返回被连接的两个表的笛卡尔积,返回结果的行数等于两个表行数的乘积;
selectcount(1) from t_student a CROSSJOIN t_class b 38364410selectcount(1) from t_student a, t_class b 38364410selectcount(1) from t_student a CROSSJOIN t_class b WHERE a.shop_id = b.id 26941
====INNERJOIN
内链接,两种方式效果一样,查询的是两边都有的数据
selectcount(1) from t_student a, t_class b where a.shop_id = b.id 26941selectcount(1) from t_student a INNERJOIN t_class b on a.shop_id = b.id 26941crossjoin是做笛卡尔积的,innerjoin是做等值连接的
====LEFTJOIN
左外连接,在内链接基础上,左边表有而右边表没有,两种方式等效;
selectcount(1) from t_student a LEFTJOIN t_class b on a.shop_id = b.id 32239selectcount(1) from t_student a LEFTOUTERJOIN t_class b on a.shop_id = b.id 32239
====RIGHTJOIN
右外连接,在内链接基础上,右边有而左边无,两种方式等效;
selectcount(1) from t_student a RIGHTJOIN t_class b on a.shop_id = b.id 27007selectcount(1) from t_student a RIGHTOUTERJOIN t_class b on a.shop_id = b.id 27007selectDISTINCTcount(1) from t_class b LEFTJOIN t_student a on a.shop_id = b.id 27007
====FULLJOIN
显示符合条件的数据行,同时显示左右不符合条件的数据行,相应的左右两边显示NULL,即显示左连接、右连接和内连接的并集
selectcount(1) from t_student a FULLJOIN t_class b on a.shop_id = b.id 32305selectcount(1) from t_student a FULLOUTERJOIN t_class b on a.shop_id = b.id 32305selectcount(1) from t_class a FULLJOIN t_student b on a.id = b.shop_id 32305FULLJOIN = LEFTJOIN + RIGHTJOIN - INNERJOINselect (32239+27007-26941) 32305