今天学习SQL多表操作。多对多关系的表的建立,可以通过mysql数据库可视化管理工具来进行。在建立多对多关系的表,要先建立一个中间表,把两个表之间的主键放到中间表中,对于中间表,分别设置两个外键关联到这两个表之中。建议先建立多表之间的关系,再往表里面添加数据。
今天的难点是多表查询,涉及到的重点知识有内连接查询,外连接(左外连接,右外连接)查询,和子查询三个。
通过多表查询的练习后,个人觉得可以把多个表之间的查询看成一个整体表。因为表与表之间是有关联的,查询几个表的数据同样会得出一张大表。把N个表看成一个整体表,在逻辑上的理解会比较容易。
另外通过子查询可以把一个复杂的查询转换为多个简单的小查询再进行拼接。
一、多表联合查询:
1.交叉查询:
1).交叉查询是求多个表之间的笛卡儿积的所有情况,比如班级表classes有4个记录(数据),学生表student有9个记录,那么使用交叉查询所得到的就是36个记录。以表student为主表遍历classes表。像java中的二维数组遍历一样。
交叉查询应用少,在求所有情况才使用。理解即可。
2).格式:
(1).select * from classes cross join student;
(2).select * from classes join student;
(3).select * from student,classes;
其中corss join可以省略。
2.内连接(重点) inner join(inner 可以省略)
把两个表看作两个集合,内连接就是求两个表交集的那部分。分为两部分:
-显示内连接:在SQL中显示的调用inner join关键字
今天的难点是多表查询,涉及到的重点知识有内连接查询,外连接(左外连接,右外连接)查询,和子查询三个。
通过多表查询的练习后,个人觉得可以把多个表之间的查询看成一个整体表。因为表与表之间是有关联的,查询几个表的数据同样会得出一张大表。把N个表看成一个整体表,在逻辑上的理解会比较容易。
另外通过子查询可以把一个复杂的查询转换为多个简单的小查询再进行拼接。
一、多表联合查询:
1.交叉查询:
1).交叉查询是求多个表之间的笛卡儿积的所有情况,比如班级表classes有4个记录(数据),学生表student有9个记录,那么使用交叉查询所得到的就是36个记录。以表student为主表遍历classes表。像java中的二维数组遍历一样。
交叉查询应用少,在求所有情况才使用。理解即可。
2).格式:
(1).select * from classes cross join student;
(2).select * from classes join student;
(3).select * from student,classes;
其中corss join可以省略。
2.内连接(重点) inner join(inner 可以省略)
把两个表看作两个集合,内连接就是求两个表交集的那部分。分为两部分:
-显示内连接:在SQL中显示的调用inner join关键字