2022年01月18日发布mysql的内外查询分别是什么意思

大家好,今日小科来聊聊一篇关于2022年01月18日整理发布:mysql的内外查询分别是什么的文章,现在让我们往下看看吧!
Mysql的内部查询是使用条件表达式,通过设置连接条件来消除交叉连接。一些数据行的查询结果是满足连接条件的记录。外部查询首先将连接的表分为基表和引用表,然后基于基表返回满足和不满足条件的记录。
MySQL INNER JOIN:内部连接查询
INNER JOIN主要通过设置联接条件来去除查询结果中一些数据行的交叉联接。简单来说,就是用条件表达式消除一些交叉连接的数据行。
inner join使用INNER JOIN关键字连接两个表,并使用ON子句设置连接条件。如果没有连接条件,那么INNER JOIN和CROSS JOIN在语法上是等价的,可以交换。
内部连接的语法格式如下:
从表1选择字段名内部连接表2 [ON子句]语法描述如下:
字段名:要查询的字段名。
1表2:需要内部连接的表名。
inner JOIN:在INNER JOIN中可以省略INNER关键字,只使用关键字JOIN。
ON子句:用于设置内部连接的连接条件。
内部连接也可以使用WHERE子句来指定连接条件,但是内部连接.ON语法是官方的标准写法,WHERE子句在某些情况下会影响查询性能。
当联接多个表时,使用INNER JOIN或在FROM之后连续联接。
内部连接可以查询两个或多个表。为了更好的理解,我们暂时只解释两个表的连接查询。
例子
使用tb_students_info表和tb_course表之间的内部连接来查询学生的姓名和相应的课程名称。SQL语句和运行结果如下。
mysql SELECT s.name,c . course _ name FROM TB _ students _ info s INNER JOIN TB _ course c
-ON s . course _ id=c . id;
- -
|名称|课程名称|
- -
|丹妮| Java |
|绿色| MySQL |
|亨利| Java |
|简| Python |
| Jim | MySQL |
|约翰|走|
| Lily | Go |
|苏珊| C |
|托马斯| C |
|汤姆| C |
- -
集合中的10行(0.00秒)在这里的查询语句中,两个表之间的关系由INNER JOIN指定,连接条件通过on子句给出。
注意:查询多个表时,请在SELECT语句后指定字段来自哪个表。因此,在多表查询中,表名和列名写在SELECT语句之后。此外,如果表名很长,还可以为表设置一个别名,这样就可以在SELECT语句之后直接写入表的别名和列名。
MySQL左/右连接:外部连接查询
内部联接的查询结果都是满足联接条件的记录,而外部联接会先将联接的表分为基表和引用表,然后基于基表返回满足和不满足条件的记录。
外部连接可分为左外部连接和右连接。根据下面的例子分别介绍左外部连接和右连接。
左连接
外部联接,也称为左联接,使用LEFT OUTER JOIN关键字联接两个表,并使用ON子句设置联接条件。
左连接的语法格式如下:
从表1中选择字段名左外部连接表2开子句语法解释如下。
字段名:要查询的字段名。
1表2:需要左连接的表名。
LEFT OUTER JOIN:LEFT JOIN中可以省略OUTER关键字,只能使用关键字LEFT JOIN。
ON子句:用于设置左连接的连接条件不能省略。
在上面的语法中,“表1”是基表,“表2”是参考表。在左侧的连接查询中可以找到表1中的所有记录以及与表2中的连接条件相匹配的记录。如果表1中的行在表2中没有匹配的行,那么
么在返回结果中“表2”的字段值均为空值(NULL)。
例 1
在进行左连接查询之前我们先查看 tb_course 和 tb_students_info 两张表中的数据。SQL 语句和运行结果如下。
mysql> SELECT * FROM tb_course; ---- ------------- | id | course_name | ---- ------------- | 1 | Java || 2 | MySQL || 3 | Python || 4 | Go || 5 | C || 6 | HTML | ---- ------------- 6 rows in set (0.00 sec)mysql> SELECT * FROM tb_students_info; ---- -------- ------ ------ -------- ----------- | id | name | age | sex | height | course_id | ---- -------- ------ ------ -------- ----------- | 1 | Dany | 25 | 男 | 160 | 1 || 2 | Green | 23 | 男 | 158 | 2 || 3 | Henry | 23 | 女 | 185 | 1 || 4 | Jane | 22 | 男 | 162 | 3 || 5 | Jim | 24 | 女 | 175 | 2 || 6 | John | 21 | 女 | 172 | 4 || 7 | Lily | 22 | 男 | 165 | 4 || 8 | Susan | 23 | 男 | 170 | 5 || 9 | Thomas | 22 | 女 | 178 | 5 || 10 | Tom | 23 | 女 | 165 | 5 || 11 | LiMing | 22 | 男 | 180 | 7 | ---- -------- ------ ------ -------- ----------- 11 rows in set (0.00 sec)
在 tb_students_info 表和 tb_course 表中查询所有学生姓名和相对应的课程名称包括没有课程的学生SQL 语句和运行结果如下。
mysql> SELECT s.name,c.course_name FROM tb_students_info s LEFT OUTER JOIN tb_course c -> ON s.`course_id`=c.`id`; -------- ------------- | name | course_name | -------- ------------- | Dany | Java || Henry | Java || NULL | Java || Green | MySQL || Jim | MySQL || Jane | Python || John | Go || Lily | Go || Susan | C || Thomas | C || Tom | C || LiMing | NULL | -------- ------------- 12 rows in set (0.00 sec)
可以看到运行结果显示了 12 条记录name 为 LiMing 的学生目前没有课程因为对应的 tb_course 表中没有该学生的课程信息所以该条记录只取出了 tb_students_info 表中相应的值而从 tb_course 表中取出的值为 NULL。
右连接
右外连接又称为右连接右连接是左连接的反向连接。使用 RIGHT OUTER JOIN 关键字连接两个表并使用 ON 子句来设置连接条件。
右连接的语法格式如下:
SELECT <字段名> FROM <表1> RIGHT OUTER JOIN <表2> <ON子句>
语法说明如下。
字段名:需要查询的字段名称。
<表1><表2>:需要右连接的表名。
RIGHT OUTER JOIN:右连接中可以省略 OUTER 关键字只使用关键字 RIGHT JOIN。
ON 子句:用来设置右连接的连接条件不能省略。
与左连接相反右连接以“表2”为基表“表1”为参考表。右连接查询时可以查询出“表2”中的所有记录和“表1”中匹配连接条件的记录。如果“表2”的某行在“表1”中没有匹配行那么在返回结果中“表1”的字段值均为空值(NULL)。
例 2
在 tb_students_info 表和 tb_course 表中查询所有课程包括没有学生的课程SQL 语句和运行结果如下。
mysql> SELECT s.name,c.course_name FROM tb_students_info s RIGHT OUTER JOIN tb_course c -> ON s.`course_id`=c.`id`; -------- ------------- | name | course_name | -------- ------------- | Dany | Java || Green | MySQL || Henry | Java || Jane | Python || Jim | MySQL || John | Go || Lily | Go || Susan | C || Thomas | C || Tom | C || NULL | HTML | -------- ------------- 11 rows in set (0.00 sec)
可以看到结果显示了 11 条记录名称为 HTML 的课程目前没有学生因为对应的 tb_students_info 表中并没有该学生的信息所以该条记录只取出了 tb_course 表中相应的值而从 tb_students_info 表中取出的值为 NULL。
多个表左/右连接时在 ON 子句后连续使用 LEFT/RIGHT OUTER JOIN 或 LEFT/RIGHT JOIN 即可。
使用外连接查询时一定要分清需要查询的结果是需要显示左表的全部记录还是右表的全部记录然后选择相应的左连接和右连接。
这篇好文章是转载于:知行礼动
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 知行礼动
- 本文地址: /news/detail/tanhbggchb