Analysis of join usage in MySQL
The example database is as follows:
student table:
mysql> select * from student; +-----------+-----------+------+------+-------+ | Sno | Sname | Ssex | Sage | Sdept | +-----------+-----------+------+------+-------+ | 201215121 | 李勇 | 男 | 22 | CS | | 201215122 | 刘晨 | 女 | 19 | CS | | 201215123 | 王敏 | 女 | 18 | MA | | 201215125 | 张立 | 男 | 19 | IS | | 201215128 | 陈冬 | 男 | 18 | IS | | 201215126 | 张成民 | 男 | 18 | CS | +-----------+-----------+------+------+-------+6 rows in set (0.00 sec)
sc Table:
mysql> select * from sc; +-----------+------+-------+ | Sno | Cno | Grade | +-----------+------+-------+ | 201215121 | 1 | 92 | | 201215121 | 2 | 85 | | 201215121 | 3 | 88 | | 201215122 | 2 | 90 | | 201215122 | 3 | 80 | | 201215128 | 1 | 78 | +-----------+------+-------+6 rows in set (0.00 sec)
LEFT JOIN (left join)
The sql statement is as follows:
select * from student left join sc on student.Sno=sc.Sno;
The running results are as follows:
+-----------+-----------+------+------+-------+-----------+------+-------+ | Sno | Sname | Ssex | Sage | Sdept | Sno | Cno | Grade | +-----------+-----------+------+------+-------+-----------+------+-------+ | 201215121 | 李勇 | 男 | 22 | CS | 201215121 | 1 | 92 | | 201215121 | 李勇 | 男 | 22 | CS | 201215121 | 2 | 85 | | 201215121 | 李勇 | 男 | 22 | CS | 201215121 | 3 | 88 | | 201215122 | 刘晨 | 女 | 19 | CS | 201215122 | 2 | 90 | | 201215122 | 刘晨 | 女 | 19 | CS | 201215122 | 3 | 80 | | 201215128 | 陈冬 | 男 | 18 | IS | 201215128 | 1 | 78 | | 201215123 | 王敏 | 女 | 18 | MA | NULL | NULL | NULL | | 201215125 | 张立 | 男 | 19 | IS | NULL | NULL | NULL | | 201215126 | 张成民 | 男 | 18 | CS | NULL | NULL | NULL | +-----------+-----------+------+------+-------+-----------+------+-------+
in In this example, the left join is based on the records in the student table. The student table can be regarded as the left table, and the sc table can be regarded as the right table. The records in the left table will be fully displayed, plus the matching right table. If If there is no match on the left side, the remaining parts will be displayed as null.
USING clause
The using clause and the on clause are similar, but the results are slightly different.
For example:
mysql> select student.Sno,Sname,Grade from student left join sc on student.Sno=sc.Sno; +-----------+-----------+-------+ | Sno | Sname | Grade | +-----------+-----------+-------+ | 201215121 | 李勇 | 92 | | 201215121 | 李勇 | 85 | | 201215121 | 李勇 | 88 | | 201215122 | 刘晨 | 90 | | 201215122 | 刘晨 | 80 | | 201215128 | 陈冬 | 78 | | 201215123 | 王敏 | NULL | | 201215125 | 张立 | NULL | | 201215126 | 张成民 | NULL | +-----------+-----------+-------+ 9 rows in set (0.00 sec)
The above is equivalent to
select Sno,Sname,Grade from student left join sc using(Sno); +-----------+-----------+-------+ | Sno | Sname | Grade | +-----------+-----------+-------+ | 201215121 | 李勇 | 92 | | 201215121 | 李勇 | 85 | | 201215121 | 李勇 | 88 | | 201215122 | 刘晨 | 90 | | 201215122 | 刘晨 | 80 | | 201215128 | 陈冬 | 78 | | 201215123 | 王敏 | NULL | | 201215125 | 张立 | NULL | | 201215126 | 张成民 | NULL | +-----------+-----------+-------+
in different places, for example:
select * from student left join sc on student.Sno=sc.Sno; +-----------+-----------+------+------+-------+-----------+------+-------+ | Sno | Sname | Ssex | Sage | Sdept | Sno | Cno | Grade | +-----------+-----------+------+------+-------+-----------+------+-------+ | 201215121 | 李勇 | 男 | 22 | CS | 201215121 | 1 | 92 | | 201215121 | 李勇 | 男 | 22 | CS | 201215121 | 2 | 85 | | 201215121 | 李勇 | 男 | 22 | CS | 201215121 | 3 | 88 | | 201215122 | 刘晨 | 女 | 19 | CS | 201215122 | 2 | 90 | | 201215122 | 刘晨 | 女 | 19 | CS | 201215122 | 3 | 80 | | 201215128 | 陈冬 | 男 | 18 | IS | 201215128 | 1 | 78 | | 201215123 | 王敏 | 女 | 18 | MA | NULL | NULL | NULL | | 201215125 | 张立 | 男 | 19 | IS | NULL | NULL | NULL | | 201215126 | 张成民 | 男 | 18 | CS | NULL | NULL | NULL | +-----------+-----------+------+------+-------+-----------+------+-------+
select * from student left join sc using (sno); +-----------+-----------+------+------+-------+------+-------+ | Sno | Sname | Ssex | Sage | Sdept | Cno | Grade | +-----------+-----------+------+------+-------+------+-------+ | 201215121 | 李勇 | 男 | 22 | CS | 1 | 92 | | 201215121 | 李勇 | 男 | 22 | CS | 2 | 85 | | 201215121 | 李勇 | 男 | 22 | CS | 3 | 88 | | 201215122 | 刘晨 | 女 | 19 | CS | 2 | 90 | | 201215122 | 刘晨 | 女 | 19 | CS | 3 | 80 | | 201215128 | 陈冬 | 男 | 18 | IS | 1 | 78 | | 201215123 | 王敏 | 女 | 18 | MA | NULL | NULL | | 201215125 | 张立 | 男 | 19 | IS | NULL | NULL | | 201215126 | 张成民 | 男 | 18 | CS | NULL | NULL | +-----------+-----------+------+------+-------+------+-------+
The repeated Sno column will be output twice if the on word is used.
RIGHT JOIN (right join)
Same as LEFT JOIN, but based on the right table, for example:
select * from student right join sc using (sno); +-----------+------+-------+--------+------+------+-------+ | Sno | Cno | Grade | Sname | Ssex | Sage | Sdept | +-----------+------+-------+--------+------+------+-------+ | 201215121 | 1 | 92 | 李勇 | 男 | 22 | CS | | 201215121 | 2 | 85 | 李勇 | 男 | 22 | CS | | 201215121 | 3 | 88 | 李勇 | 男 | 22 | CS | | 201215122 | 2 | 90 | 刘晨 | 女 | 19 | CS | | 201215122 | 3 | 80 | 刘晨 | 女 | 19 | CS | | 201215128 | 1 | 78 | 陈冬 | 男 | 18 | IS | +-----------+------+-------+--------+------+------+-------+
INNER JOIN (equal join or inner join)
It will not show who it is based on, only the records that meet the conditions will be displayed
select * from student inner join sc on student.Sno=sc.Sno; +-----------+--------+------+------+-------+-----------+------+-------+ | Sno | Sname | Ssex | Sage | Sdept | Sno | Cno | Grade | +-----------+--------+------+------+-------+-----------+------+-------+ | 201215121 | 李勇 | 男 | 22 | CS | 201215121 | 1 | 92 | | 201215121 | 李勇 | 男 | 22 | CS | 201215121 | 2 | 85 | | 201215121 | 李勇 | 男 | 22 | CS | 201215121 | 3 | 88 | | 201215122 | 刘晨 | 女 | 19 | CS | 201215122 | 2 | 90 | | 201215122 | 刘晨 | 女 | 19 | CS | 201215122 | 3 | 80 | | 201215128 | 陈冬 | 男 | 18 | IS | 201215128 | 1 | 78 | +-----------+--------+------+------+-------+-----------+------+-------+
The above statement is equivalent to:
select * from student,sc where student.Sno=sc.Sno; +-----------+--------+------+------+-------+-----------+------+-------+ | Sno | Sname | Ssex | Sage | Sdept | Sno | Cno | Grade | +-----------+--------+------+------+-------+-----------+------+-------+ | 201215121 | 李勇 | 男 | 22 | CS | 201215121 | 1 | 92 | | 201215121 | 李勇 | 男 | 22 | CS | 201215121 | 2 | 85 | | 201215121 | 李勇 | 男 | 22 | CS | 201215121 | 3 | 88 | | 201215122 | 刘晨 | 女 | 19 | CS | 201215122 | 2 | 90 | | 201215122 | 刘晨 | 女 | 19 | CS | 201215122 | 3 | 80 | | 201215128 | 陈冬 | 男 | 18 | IS | 201215128 | 1 | 78 | +-----------+--------+------+------+-------+-----------+------+-------+
Extension
If you only want to retrieve some records from table A, but do not include table B
You can add a where statement after the left join
select * from student left join sc using(Sno) where sc.Sno is null; +-----------+-----------+------+------+-------+------+-------+ | Sno | Sname | Ssex | Sage | Sdept | Cno | Grade | +-----------+-----------+------+------+-------+------+-------+ | 201215123 | 王敏 | 女 | 18 | MA | NULL | NULL | | 201215125 | 张立 | 男 | 19 | IS | NULL | NULL | | 201215126 | 张成民 | 男 | 18 | CS | NULL | NULL | +-----------+-----------+------+------+-------+------+-------+
Find the difference set
#You can combine union words. Since in this example, all the ones on the right are corresponding, so the displayed result is consistent with the previous one.
select * from student left join sc using(Sno) where student.Sno is null union select * from student left join sc using(Sno) where sc.Sno is null; +-----------+-----------+------+------+-------+------+-------+ | Sno | Sname | Ssex | Sage | Sdept | Cno | Grade | +-----------+-----------+------+------+-------+------+-------+ | 201215123 | 王敏 | 女 | 18 | MA | NULL | NULL | | 201215125 | 张立 | 男 | 19 | IS | NULL | NULL | | 201215126 | 张成民 | 男 | 18 | CS | NULL | NULL | +-----------+-----------+------+------+-------+------+-------+
FULL JOIN
select * from student left join sc on student.Sno=sc.Sno union select * from student right join sc on student.Sno=sc.Sno; +-----------+-----------+------+------+-------+-----------+------+-------+ | Sno | Sname | Ssex | Sage | Sdept | Sno | Cno | Grade | +-----------+-----------+------+------+-------+-----------+------+-------+ | 201215121 | 李勇 | 男 | 22 | CS | 201215121 | 1 | 92 | | 201215121 | 李勇 | 男 | 22 | CS | 201215121 | 2 | 85 | | 201215121 | 李勇 | 男 | 22 | CS | 201215121 | 3 | 88 | | 201215122 | 刘晨 | 女 | 19 | CS | 201215122 | 2 | 90 | | 201215122 | 刘晨 | 女 | 19 | CS | 201215122 | 3 | 80 | | 201215128 | 陈冬 | 男 | 18 | IS | 201215128 | 1 | 78 | | 201215123 | 王敏 | 女 | 18 | MA | NULL | NULL | NULL | | 201215125 | 张立 | 男 | 19 | IS | NULL | NULL | NULL | | 201215126 | 张成民 | 男 | 18 | CS | NULL | NULL | NULL | +-----------+-----------+------+------+-------+-----------+------+-------+
Note: A left join B is equivalent to B right join A
mysql> select * from student left join sc using(Sno); +-----------+-----------+------+------+-------+------+-------+ | Sno | Sname | Ssex | Sage | Sdept | Cno | Grade | +-----------+-----------+------+------+-------+------+-------+ | 201215121 | 李勇 | 男 | 22 | CS | 1 | 92 | | 201215121 | 李勇 | 男 | 22 | CS | 2 | 85 | | 201215121 | 李勇 | 男 | 22 | CS | 3 | 88 | | 201215122 | 刘晨 | 女 | 19 | CS | 2 | 90 | | 201215122 | 刘晨 | 女 | 19 | CS | 3 | 80 | | 201215128 | 陈冬 | 男 | 18 | IS | 1 | 78 | | 201215123 | 王敏 | 女 | 18 | MA | NULL | NULL | | 201215125 | 张立 | 男 | 19 | IS | NULL | NULL | | 201215126 | 张成民 | 男 | 18 | CS | NULL | NULL | +-----------+-----------+------+------+-------+------+-------+ 9 rows in set (0.00 sec)mysql> select * from sc right join student using(Sno); +-----------+-----------+------+------+-------+------+-------+ | Sno | Sname | Ssex | Sage | Sdept | Cno | Grade | +-----------+-----------+------+------+-------+------+-------+ | 201215121 | 李勇 | 男 | 22 | CS | 1 | 92 | | 201215121 | 李勇 | 男 | 22 | CS | 2 | 85 | | 201215121 | 李勇 | 男 | 22 | CS | 3 | 88 | | 201215122 | 刘晨 | 女 | 19 | CS | 2 | 90 | | 201215122 | 刘晨 | 女 | 19 | CS | 3 | 80 | | 201215128 | 陈冬 | 男 | 18 | IS | 1 | 78 | | 201215123 | 王敏 | 女 | 18 | MA | NULL | NULL | | 201215125 | 张立 | 男 | 19 | IS | NULL | NULL | | 201215126 | 张成民 | 男 | 18 | CS | NULL | NULL | +-----------+-----------+------+------+-------+------+-------+
Join usage analysis in MySQL
The instance database is as follows:
student table:
mysql> select * from student; +-----------+-----------+------+------+-------+ | Sno | Sname | Ssex | Sage | Sdept | +-----------+-----------+------+------+-------+ | 201215121 | 李勇 | 男 | 22 | CS | | 201215122 | 刘晨 | 女 | 19 | CS | | 201215123 | 王敏 | 女 | 18 | MA | | 201215125 | 张立 | 男 | 19 | IS | | 201215128 | 陈冬 | 男 | 18 | IS | | 201215126 | 张成民 | 男 | 18 | CS | +-----------+-----------+------+------+-------+ 6 rows in set (0.00 sec)
sc table:
mysql> select * from sc; +-----------+------+-------+ | Sno | Cno | Grade | +-----------+------+-------+ | 201215121 | 1 | 92 | | 201215121 | 2 | 85 | | 201215121 | 3 | 88 | | 201215122 | 2 | 90 | | 201215122 | 3 | 80 | | 201215128 | 1 | 78 | +-----------+------+-------+ 6 rows in set (0.00 sec)
LEFT JOIN (left join)
##sql The statement is as follows:
select * from student left join sc on student.Sno=sc.Sno;The running result is as follows:
+-----------+-----------+------+------+-------+-----------+------+-------+ | Sno | Sname | Ssex | Sage | Sdept | Sno | Cno | Grade | +-----------+-----------+------+------+-------+-----------+------+-------+ | 201215121 | 李勇 | 男 | 22 | CS | 201215121 | 1 | 92 | | 201215121 | 李勇 | 男 | 22 | CS | 201215121 | 2 | 85 | | 201215121 | 李勇 | 男 | 22 | CS | 201215121 | 3 | 88 | | 201215122 | 刘晨 | 女 | 19 | CS | 201215122 | 2 | 90 | | 201215122 | 刘晨 | 女 | 19 | CS | 201215122 | 3 | 80 | | 201215128 | 陈冬 | 男 | 18 | IS | 201215128 | 1 | 78 | | 201215123 | 王敏 | 女 | 18 | MA | NULL | NULL | NULL | | 201215125 | 张立 | 男 | 19 | IS | NULL | NULL | NULL | | 201215126 | 张成民 | 男 | 18 | CS | NULL | NULL | NULL | +-----------+-----------+------+------+-------+-----------+------+-------+In this example, the left join is based on the records in the student table. The student table can be regarded as the left table, and the sc table can be regarded as In the right table, the records in the left table will be fully displayed, plus the matched right table. If the left table is not matched, the remaining parts will be displayed as null. USING clauseThe using clause and the on clause are similar, but the results are slightly different.
For example:
mysql> select student.Sno,Sname,Grade from student left join sc on student.Sno=sc.Sno; +-----------+-----------+-------+| Sno | Sname | Grade | +-----------+-----------+-------+| 201215121 | 李勇 | 92 | | 201215121 | 李勇 | 85 | | 201215121 | 李勇 | 88 | | 201215122 | 刘晨 | 90 | | 201215122 | 刘晨 | 80 | | 201215128 | 陈冬 | 78 | | 201215123 | 王敏 | NULL | | 201215125 | 张立 | NULL || 201215126 | 张成民 | NULL | +-----------+-----------+-------+9 rows in set (0.00 sec)The above is equivalent to
select Sno,Sname,Grade from student left join sc using(Sno); +-----------+-----------+-------+| Sno | Sname | Grade | +-----------+-----------+-------+| 201215121 | 李勇 | 92 | | 201215121 | 李勇 | 85 | | 201215121 | 李勇 | 88 | | 201215122 | 刘晨 | 90 | | 201215122 | 刘晨 | 80 | | 201215128 | 陈冬 | 78 | | 201215123 | 王敏 | NULL | | 201215125 | 张立 | NULL || 201215126 | 张成民 | NULL | +-----------+-----------+-------+in different places, for example:
select * from student left join sc on student.Sno=sc.Sno; +-----------+-----------+------+------+-------+-----------+------+-------+ | Sno | Sname | Ssex | Sage | Sdept | Sno | Cno | Grade | +-----------+-----------+------+------+-------+-----------+------+-------+ | 201215121 | 李勇 | 男 | 22 | CS | 201215121 | 1 | 92 | | 201215121 | 李勇 | 男 | 22 | CS | 201215121 | 2 | 85 | | 201215121 | 李勇 | 男 | 22 | CS | 201215121 | 3 | 88 | | 201215122 | 刘晨 | 女 | 19 | CS | 201215122 | 2 | 90 | | 201215122 | 刘晨 | 女 | 19 | CS | 201215122 | 3 | 80 | | 201215128 | 陈冬 | 男 | 18 | IS | 201215128 | 1 | 78 | | 201215123 | 王敏 | 女 | 18 | MA | NULL | NULL | NULL | | 201215125 | 张立 | 男 | 19 | IS | NULL | NULL | NULL | | 201215126 | 张成民 | 男 | 18 | CS | NULL | NULL | NULL | +-----------+-----------+------+------+-------+-----------+------+-------+
select * from student left join sc using (sno); +-----------+-----------+------+------+-------+------+-------+ | Sno | Sname | Ssex | Sage | Sdept | Cno | Grade | +-----------+-----------+------+------+-------+------+-------+ | 201215121 | 李勇 | 男 | 22 | CS | 1 | 92 | | 201215121 | 李勇 | 男 | 22 | CS | 2 | 85 | | 201215121 | 李勇 | 男 | 22 | CS | 3 | 88 | | 201215122 | 刘晨 | 女 | 19 | CS | 2 | 90 | | 201215122 | 刘晨 | 女 | 19 | CS | 3 | 80 | | 201215128 | 陈冬 | 男 | 18 | IS | 1 | 78 | | 201215123 | 王敏 | 女 | 18 | MA | NULL | NULL | | 201215125 | 张立 | 男 | 19 | IS | NULL | NULL | | 201215126 | 张成民 | 男 | 18 | CS | NULL | NULL | +-----------+-----------+------+------+-------+------+-------+The repeated Sno column will be output twice if the on word is used. RIGHT JOIN (right join)Same as LEFT JOIN, but based on the right table, for example:
select * from student right join sc using (sno); +-----------+------+-------+--------+------+------+-------+ | Sno | Cno | Grade | Sname | Ssex | Sage | Sdept | +-----------+------+-------+--------+------+------+-------+ | 201215121 | 1 | 92 | 李勇 | 男 | 22 | CS | | 201215121 | 2 | 85 | 李勇 | 男 | 22 | CS | | 201215121 | 3 | 88 | 李勇 | 男 | 22 | CS | | 201215122 | 2 | 90 | 刘晨 | 女 | 19 | CS | | 201215122 | 3 | 80 | 刘晨 | 女 | 19 | CS | | 201215128 | 1 | 78 | 陈冬 | 男 | 18 | IS | +-----------+------+-------+--------+------+------+-------+INNER JOIN (equal join or inner join)
select * from student inner join sc on student.Sno=sc.Sno; +-----------+--------+------+------+-------+-----------+------+-------+ | Sno | Sname | Ssex | Sage | Sdept | Sno | Cno | Grade | +-----------+--------+------+------+-------+-----------+------+-------+ | 201215121 | 李勇 | 男 | 22 | CS | 201215121 | 1 | 92 | | 201215121 | 李勇 | 男 | 22 | CS | 201215121 | 2 | 85 | | 201215121 | 李勇 | 男 | 22 | CS | 201215121 | 3 | 88 | | 201215122 | 刘晨 | 女 | 19 | CS | 201215122 | 2 | 90 | | 201215122 | 刘晨 | 女 | 19 | CS | 201215122 | 3 | 80 | | 201215128 | 陈冬 | 男 | 18 | IS | 201215128 | 1 | 78 | +-----------+--------+------+------+-------+-----------+------+-------+The above statement is equivalent to:
select * from student,sc where student.Sno=sc.Sno; +-----------+--------+------+------+-------+-----------+------+-------+ | Sno | Sname | Ssex | Sage | Sdept | Sno | Cno | Grade | +-----------+--------+------+------+-------+-----------+------+-------+ | 201215121 | 李勇 | 男 | 22 | CS | 201215121 | 1 | 92 | | 201215121 | 李勇 | 男 | 22 | CS | 201215121 | 2 | 85 | | 201215121 | 李勇 | 男 | 22 | CS | 201215121 | 3 | 88 | | 201215122 | 刘晨 | 女 | 19 | CS | 201215122 | 2 | 90 | | 201215122 | 刘晨 | 女 | 19 | CS | 201215122 | 3 | 80 | | 201215128 | 陈冬 | 男 | 18 | IS | 201215128 | 1 | 78 | +-----------+--------+------+------+-------+-----------+------+-------+ExtensionIf you only want to retrieve some records from table A, but do not include table B
select * from student left join sc using(Sno) where sc.Sno is null; +-----------+-----------+------+------+-------+------+-------+ | Sno | Sname | Ssex | Sage | Sdept | Cno | Grade | +-----------+-----------+------+------+-------+------+-------+ | 201215123 | 王敏 | 女 | 18 | MA | NULL | NULL | | 201215125 | 张立 | 男 | 19 | IS | NULL | NULL | | 201215126 | 张成民 | 男 | 18 | CS | NULL | NULL | +-----------+-----------+------+------+-------+------+-------+Find the difference set
select * from student left join sc using(Sno) where student.Sno is null union select * from student left join sc using(Sno) where sc.Sno is null; +-----------+-----------+------+------+-------+------+-------+ | Sno | Sname | Ssex | Sage | Sdept | Cno | Grade | +-----------+-----------+------+------+-------+------+-------+ | 201215123 | 王敏 | 女 | 18 | MA | NULL | NULL | | 201215125 | 张立 | 男 | 19 | IS | NULL | NULL | | 201215126 | 张成民 | 男 | 18 | CS | NULL | NULL | +-----------+-----------+------+------+-------+------+-------+FULL JOIN
select * from student left join sc on student.Sno=sc.Sno union select * from student right join sc on student.Sno=sc.Sno; +-----------+-----------+------+------+-------+-----------+------+-------+ | Sno | Sname | Ssex | Sage | Sdept | Sno | Cno | Grade | +-----------+-----------+------+------+-------+-----------+------+-------+ | 201215121 | 李勇 | 男 | 22 | CS | 201215121 | 1 | 92 | | 201215121 | 李勇 | 男 | 22 | CS | 201215121 | 2 | 85 | | 201215121 | 李勇 | 男 | 22 | CS | 201215121 | 3 | 88 | | 201215122 | 刘晨 | 女 | 19 | CS | 201215122 | 2 | 90 | | 201215122 | 刘晨 | 女 | 19 | CS | 201215122 | 3 | 80 | | 201215128 | 陈冬 | 男 | 18 | IS | 201215128 | 1 | 78 | | 201215123 | 王敏 | 女 | 18 | MA | NULL | NULL | NULL | | 201215125 | 张立 | 男 | 19 | IS | NULL | NULL | NULL | | 201215126 | 张成民 | 男 | 18 | CS | NULL | NULL | NULL | +-----------+-----------+------+------+-------+-----------+------+-------+Note: A left join B is equivalent to B right join A
mysql> select * from student left join sc using(Sno); +-----------+-----------+------+------+-------+------+-------+ | Sno | Sname | Ssex | Sage | Sdept | Cno | Grade | +-----------+-----------+------+------+-------+------+-------+ | 201215121 | 李勇 | 男 | 22 | CS | 1 | 92 | | 201215121 | 李勇 | 男 | 22 | CS | 2 | 85 | | 201215121 | 李勇 | 男 | 22 | CS | 3 | 88 | | 201215122 | 刘晨 | 女 | 19 | CS | 2 | 90 | | 201215122 | 刘晨 | 女 | 19 | CS | 3 | 80 | | 201215128 | 陈冬 | 男 | 18 | IS | 1 | 78 | | 201215123 | 王敏 | 女 | 18 | MA | NULL | NULL | | 201215125 | 张立 | 男 | 19 | IS | NULL | NULL | | 201215126 | 张成民 | 男 | 18 | CS | NULL | NULL | +-----------+-----------+------+------+-------+------+-------+ 9 rows in set (0.00 sec)mysql> select * from sc right join student using(Sno); +-----------+-----------+------+------+-------+------+-------+ | Sno | Sname | Ssex | Sage | Sdept | Cno | Grade | +-----------+-----------+------+------+-------+------+-------+ | 201215121 | 李勇 | 男 | 22 | CS | 1 | 92 | | 201215121 | 李勇 | 男 | 22 | CS | 2 | 85 | | 201215121 | 李勇 | 男 | 22 | CS | 3 | 88 | | 201215122 | 刘晨 | 女 | 19 | CS | 2 | 90 | | 201215122 | 刘晨 | 女 | 19 | CS | 3 | 80 | | 201215128 | 陈冬 | 男 | 18 | IS | 1 | 78 | | 201215123 | 王敏 | 女 | 18 | MA | NULL | NULL | | 201215125 | 张立 | 男 | 19 | IS | NULL | NULL | | 201215126 | 张成民 | 男 | 18 | CS | NULL | NULL | +-----------+-----------+------+------+-------+------+-------+The above is the analysis of join usage in MySQL For more related content, please pay attention to the PHP Chinese website (www.php.cn)!

MySQLhandlesconcurrencyusingamixofrow-levelandtable-levellocking,primarilythroughInnoDB'srow-levellocking.ComparedtootherRDBMS,MySQL'sapproachisefficientformanyusecasesbutmayfacechallengeswithdeadlocksandlacksadvancedfeatureslikePostgreSQL'sSerializa

MySQLhandlestransactionseffectivelyusingtheInnoDBengine,supportingACIDpropertiessimilartoPostgreSQLandOracle.1)MySQLusesREPEATABLEREADasthedefaultisolationlevel,whichcanbeadjustedtoREADCOMMITTEDforhigh-trafficscenarios.2)Itoptimizesperformancewithabu

MySQL data types are divided into numerical, date and time, string, binary and spatial types. Selecting the correct type can optimize database performance and data storage.

Best practices include: 1) Understanding the data structure and MySQL processing methods, 2) Appropriate indexing, 3) Avoid SELECT*, 4) Using appropriate JOIN types, 5) Use subqueries with caution, 6) Analyzing queries with EXPLAIN, 7) Consider the impact of queries on server resources, 8) Maintain the database regularly. These practices can make MySQL queries not only fast, but also maintainability, scalability and resource efficiency.

MySQLisbetterforspeedandsimplicity,suitableforwebapplications;PostgreSQLexcelsincomplexdatascenarioswithrobustfeatures.MySQLisidealforquickprojectsandread-heavytasks,whilePostgreSQLispreferredforapplicationsrequiringstrictdataintegrityandadvancedSQLf

MySQL processes data replication through three modes: asynchronous, semi-synchronous and group replication. 1) Asynchronous replication performance is high but data may be lost. 2) Semi-synchronous replication improves data security but increases latency. 3) Group replication supports multi-master replication and failover, suitable for high availability requirements.

The EXPLAIN statement can be used to analyze and improve SQL query performance. 1. Execute the EXPLAIN statement to view the query plan. 2. Analyze the output results, pay attention to access type, index usage and JOIN order. 3. Create or adjust indexes based on the analysis results, optimize JOIN operations, and avoid full table scanning to improve query efficiency.

Using mysqldump for logical backup and MySQLEnterpriseBackup for hot backup are effective ways to back up MySQL databases. 1. Use mysqldump to back up the database: mysqldump-uroot-pmydatabase>mydatabase_backup.sql. 2. Use MySQLEnterpriseBackup for hot backup: mysqlbackup--user=root-password=password--backup-dir=/path/to/backupbackup. When recovering, use the corresponding life


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

SecLists
SecLists is the ultimate security tester's companion. It is a collection of various types of lists that are frequently used during security assessments, all in one place. SecLists helps make security testing more efficient and productive by conveniently providing all the lists a security tester might need. List types include usernames, passwords, URLs, fuzzing payloads, sensitive data patterns, web shells, and more. The tester can simply pull this repository onto a new test machine and he will have access to every type of list he needs.

WebStorm Mac version
Useful JavaScript development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Dreamweaver Mac version
Visual web development tools

Atom editor mac version download
The most popular open source editor
