select * from a, b Discussion

select * from a, b Discussion

Today to see colleagues used the code select * from a,b where a.id=b.id, but I usually use are select * from a inner join b where a.id=b.id, then check the next, found:

1) a simple select * from a,bCartesian product

2) select * from a,b where a.id=b.idis equivalent toinner join


verification

1) create two tables

create table userinfo(
        uid int(10) not null default 0,
        report_id int(10) not null default 0,
        primary key(uid)
       ) engine=innodb default charset=utf8;

create table report(
       report_id int(10) not null default 0,
       description varchar(255) default '',
       primary key(report_id)
       ) engine=innodb default charset=utf8;



2) Insert the test data

insert into userinfo values(1,1),(2,1),(3,2),(4,6);
insert into report values(1,'第一条'),(2,'第二条'),(3,'第三条');
mysql> select * from userinfo;
+-----+-----------+
| uid | report_id |
+-----+-----------+
|   1 |         1 |
|   2 |         1 |
|   3 |         2 |
|   4 |         6 |
+-----+-----------+
4 rows in set (0.00 sec)

mysql> select * from report;
+-----------+-------------+
| report_id | description |
+-----------+-------------+
|         1 | 第一条      |
|         2 | 第二条      |
|         3 | 第三条      |
+-----------+-------------+
3 rows in set (0.00 sec)


3) Verify

Separate select * from a, b

select * from userinfo,report

result

mysql> select * from userinfo,report;
+-----+-----------+-----------+-------------+
| uid | report_id | report_id | description |
+-----+-----------+-----------+-------------+
|   1 |         1 |         1 | 第一条      |
|   1 |         1 |         2 | 第二条      |
|   1 |         1 |         3 | 第三条      |
|   2 |         1 |         1 | 第一条      |
|   2 |         1 |         2 | 第二条      |
|   2 |         1 |         3 | 第三条      |
|   3 |         2 |         1 | 第一条      |
|   3 |         2 |         2 | 第二条      |
|   3 |         2 |         3 | 第三条      |
|   4 |         6 |         1 | 第一条      |
|   4 |         6 |         2 | 第二条      |
|   4 |         6 |         3 | 第三条      |
+-----+-----------+-----------+-------------+
12 rows in set (0.00 sec)

Visible select * from a,bis the Cartesian product


Verify againselect * from a,b where a.id=b.id

mysql> select * from userinfo,report where userinfo.report_id=report.report_id;
+-----+-----------+-----------+-------------+
| uid | report_id | report_id | description |
+-----+-----------+-----------+-------------+
|   1 |         1 |         1 | 第一条      |
|   2 |         1 |         1 | 第一条      |
|   3 |         2 |         2 | 第二条      |
+-----+-----------+-----------+-------------+
3 rows in set (0.00 sec)



inner join

mysql> select * from userinfo inner join report where userinfo.report_id=report.report_id;
+-----+-----------+-----------+-------------+
| uid | report_id | report_id | description |
+-----+-----------+-----------+-------------+
|   1 |         1 |         1 | 第一条      |
|   2 |         1 |         1 | 第一条      |
|   3 |         2 |         2 | 第二条      |
+-----+-----------+-----------+-------------+
3 rows in set (0.00 sec)

mysql> select * from userinfo inner join report on userinfo.report_id=report.report_id;
+-----+-----------+-----------+-------------+
| uid | report_id | report_id | description |
+-----+-----------+-----------+-------------+
|   1 |         1 |         1 | 第一条      |
|   2 |         1 |         1 | 第一条      |
|   3 |         2 |         2 | 第二条      |
+-----+-----------+-----------+-------------+
3 rows in set (0.00 sec)

Visible is select * from a,b where a.id=b.idjust the Cartesian product made with a layer of filter, results inner jointhe same

Supplementary: inner join Mr. into a temporary table, then use on condition screening

Note: The above conclusion is only validated in mysql 5.7, other databases may not be true

Guess you like

Origin www.cnblogs.com/zzliu/p/11370272.html
Recommended