多表查询

mysql支持多表数据记录连接查询,连接分为内连接和外连接,实际应用考虑效率,可使用替代操作子查询。
mysql中关系数据涉及操作:内连接查询、外连接查询、子查询。

数据库对多表操作的关系运算,包括并和笛卡尔积。

实现连接查询,一种是在from中利用逗号区分多个表,在where子句中通过逻辑表达式实现匹配条件,实现表的连接;另一种是ANSI连接语法形式,使用“JOIN..ON",连接条件写在关键字ON子句中。推荐后一种。

内连接:
select field1,field2,...fieldn from tablename1 inner join tbalename2 inner join tablenamen on CONDITION
其中,表名太长,可以使用as new tablename,优化sql代码。

根据匹配情况,内连接分为:自连接、等值连接、不等连接。

自连接:连接的表是两个相同表,用例-查询学生表中和A同学同班的其他同学。
等值连接:在关键字ON后的匹配条件中通过等于关系运算符(=)来实现等值条件,用例-查询每个学生的编号、姓名、性别、年龄、班级号、班级名称、班级位置和班主任信息。
不等连接:关键字ON后的匹配条件,还可以使用">"">=""<""<="和"!+"等关系运算符。用例——查询和A不在一个班别,年龄大于A的同学的编号、姓名、性别、年龄、班级号、班级名称、班级位置、班主任信息、成绩总分。

外连接:
外连接查询会返回所操作表中至少一个表的数据记录,通过"OUTER JOIN...ON"来实现。
select field1,field2,...,fieldn LEFT|RIGHT|FULL [OUTER] JOIN table2 ON CONDITION

按照外连接关键字,外连接分为:左外连接、右外连接、全外连接。
左外连接:在新关系执行匹配条件时,以关键字LEFT JOIN左边的表未参考表,左外连接的结果包括LEFT OUTER自居中指定的左边的所有行,而不仅仅连接列所匹配的行,如果左表的某行在右表中没有匹配行,那么在相关联的结果行中,右表的所有选择列表均为空值。例如匹配所有学生所在班级,如果班级名单有缺失,则该学生班级留空,而不是无该学生。
右外连接:同理,例如取出所有班级的所有学生,把班级放右,如果多一个新开无人班班级,则结果为该班级有空值。
全外连接:打印两个表所有匹配后的数据。

posted @ 2023-07-06 00:23  我好像在哪见过你  阅读(54)  评论(0编辑  收藏  举报