PHP是世界上最好的web语言!PHP对mysql数据库的支持也是非常好的,所以站长们几乎都或多或少接触过mysql数据库,今天讲讲Mysql数据库中联表查询Join的使用。很久以前我就讲过mysql数据库的连接、建立数据库、建立数据表、增删改查等等相关教程,个人觉得mysql的语法还是很简单的,就像对话一样。最近用到Mysql数据库中联表查询Join,写篇教程记录下。
mysql允许在SELECT, UPDATE 和 DELETE 语句中使用join 来联合多表查询。
使用JOIN
我们在TUTORIALS数据库中有两张表 tcount_tbl 和 tutorials_tbl。两张数据表数据如下:
root@host# mysql -u root -p password; Enter password:******* mysql> use TUTORIALS; Database changed mysql> SELECT * FROM tcount_tbl; +-----------------+----------------+ | tutorial_author | tutorial_count | +-----------------+----------------+ | mahran | 20 | | mahnaz | NULL | | Jen | NULL | | Gill | 20 | | John Poul | 1 | | Sanjay | 1 | +-----------------+----------------+ 6 rows in set (0.01 sec) mysql> SELECT * from tutorials_tbl; +-------------+----------------+-----------------+-----------------+ | tutorial_id | tutorial_title | tutorial_author | submission_date | +-------------+----------------+-----------------+-----------------+ | 1 | Learn PHP | John Poul | 2007-05-24 | | 2 | Learn MySQL | Abdul S | 2007-05-24 | | 3 | JAVA Tutorial | Sanjay | 2007-05-06 | +-------------+----------------+-----------------+-----------------+ 3 rows in set (0.00 sec) mysql>
接下来我们就使用MySQL的JOIN来连接以上两张表来读取tutorials_tbl表中所有tutorial_author字段在tcount_tbl表对应的tutorial_count字段值:
mysql> SELECT a.tutorial_id, a.tutorial_author, b.tutorial_count -> FROM tutorials_tbl a, tcount_tbl b -> WHERE a.tutorial_author = b.tutorial_author; +-------------+-----------------+----------------+ | tutorial_id | tutorial_author | tutorial_count | +-------------+-----------------+----------------+ | 1 | John Poul | 1 | | 3 | Sanjay | 1 | +-------------+-----------------+----------------+ 2 rows in set (0.01 sec) mysql>
使用 LEFT JOIN
MySQL left join 与 join 有所不同。 MySQL LEFT JOIN 会读取左边数据表的全部数据,即便右边表无对应数据。
root@host# mysql -u root -p password; Enter password:******* mysql> use TUTORIALS; Database changed mysql> SELECT a.tutorial_id, a.tutorial_author, b.tutorial_count -> FROM tutorials_tbl a LEFT JOIN tcount_tbl b -> ON a.tutorial_author = b.tutorial_author; +-------------+-----------------+----------------+ | tutorial_id | tutorial_author | tutorial_count | +-------------+-----------------+----------------+ | 1 | John Poul | 1 | | 2 | Abdul S | NULL | | 3 | Sanjay | 1 | +-------------+-----------------+----------------+ 3 rows in set (0.02 sec)
以上实例中使用了LEFT JOIN,该语句会读取左边的数据表tutorials_tbl
的所有选取的字段数据,即便在右侧表tcount_tbl
中没有对应的tutorial_author
字段值。
总结:不知道大家发现没有,mysql命令就像说话一样。比如下面这个查询命令:
SELECT a.`wxid`,a.`uid`,b.`lasttime`,b.`count` from qiandao as a ,qdtj as b where a.`wxid`=b.`wxid`
中文翻译一下,查询 满足 a对象的wxid字段,a对象的uid字段,b对象的lasttime字段,b对象的count字段,从 qiandao表把它当做a对象,qdtj表把它当做b对象,条件是 a对象的wxid字段值与b对象的wxid字段值相同 的所有数据。是不是很简单?实操试试吧。
评论 (0)