在MySQL中INNER JOIN、LEFT JOIN、RIGHT JOIN 和 FULL JOIN 有什么区别
你会推荐使用 datetime 还是 timestamp 字段?为什么
MyISAM 与 InnoDB,什么场景选择哪一个
问题一
在MySQL中INNER JOIN、LEFT JOIN、RIGHT JOIN 和 FULL JOIN 有什么区别?
我们有两张表:
TableA: id firstName lastName ....................................... 1 arun prasanth 2 ann antony 3 sruthy abc 6 new abc TableB: id2 age Place ................ 1 24 kerala 2 24 usa 3 25 ekm 5 24 chennai
SELECT TableA.firstName,TableA.lastName,TableB.age,TableB.Place FROM TableA INNERJOIN TableB ON TableA.id = TableB.id2;
得到的结果即为:
firstName lastName age Place .............................................. arun prasanth 24 kerala ann antony 24 usa sruthy abc 25 ekm
得到的结果有4个字段,firstName 、 lastName 、 age 、 Place,就是我们上面SQL语句SELECT的4个字段,FROM和INNER JOIN后面的两个表名就是要内连接的两张表,ON后面就是在其中寻找共同点的字段。
LEFT JOIN(左连接)
左连接查询会返回左表中所有行,无论这些行是不是有任何一行在右表中匹配。
SELECT TableA.firstName,TableA.lastName,TableB.age,TableB.Place FROM TableA LEFTJOIN TableB ON TableA.id = TableB.id2;
查询结果是:
firstName lastName age Place ............................................................. arun prasanth 24 kerala ann antony 24 usa sruthy abc 25 ekm new abc NULL NULL
SELECT TableA.firstName,TableA.lastName,TableB.age,TableB.Place FROM TableA RIGHTJOIN TableB ON TableA.id = TableB.id2;
结果集:
firstName lastName age Place ............................................................... arun prasanth 24 kerala ann antony 24 usa sruthy abc 25 ekm NULL NULL 24 chennai
FULL JOIN(全连接)
SQL语句如下:
SELECT TableA.firstName,TableA.lastName,TableB.age,TableB.Place FROM TableA FULLJOIN TableB ON TableA.id = TableB.id2;
结果集为:
firstName lastName age Place ........................................................... arun prasanth 24 kerala ann antony 24 usa sruthy abc 25 ekm new abc NULL NULL NULL NULL 24 chennai
查询结果是左连接和右连接的并集。
问题二
你会推荐使用 datetime 还是 timestamp 字段?为什么?
正如Mysql文档描述的那样——datetime的范围是“1000-01-01 00:00:00”到“9999-12-31 23:59:59”,而timestamp的范围是 '1970-01-01 00:00:01' UTC 到 '2038-01-09 03:14:07' UTC。如果不想程序在2038年出问题,从这个方面作者建议还是使用datetime。