跨几个表格查询信息时使用SELECT * FROM <表1> <表2>
这种多表查询又称笛卡尔查询,使用笛卡尔查询时要非常小心,由于结果集是目标表的行数乘积,对两个各自有100行记录的表进行笛卡尔查询将返回1万条记录,对两个各自有1万行记录的表进行笛卡尔查询将返回1亿条记录。
问题:下面是全部的表格,现在需要查询老师和课程的信息?
select * from teacher,course;两个表原本为3* 3和2* 3,相乘后得到5*9的表格。结果集的列数是两表的列数之和,行数是两表的行数之积。
将students.id、course.c_id、course.c_name 列设置别名为sid、cid、cname;并且别名还可以在查询过程中继续使用,减少输入的时间。
先看看列名是不是修改了:
SELECT student.s_id sid, student.s_name , student.s_sex, course.c_id cid, course.c_name cname FROM Student, course;部分结果输出:
有三列名称更新为sid、cid、cname ;没有设置的名字和性别两列依旧显示s_name、s_sex;结果集是目标表的行数乘积:从第一个赵雷的信息可以看出,前面三列值不变(01,赵雷,男);后面两列列出了三个不同科目的信息。 再看看定义了别名之后,别名是否可以使用,我们接着上面的例子,在前面加上select sid from,后面补上 as a,即将上面找到的结果表格当场名字为a的临时表格。 select sid from (SELECT student.s_id sid, student.s_name , student.s_sex, course.c_id cid, course.c_name cname FROM Student, course) as a;;返回结果:表格a中的sid这列。
注意,多表查询时,要使用表名.列名这样的方式来引用列和设置别名,这样就避免了结果集的列名重复问题。但是,用表名.列名这种方式列举两个表的所有列实在是很麻烦,所以SQL还允许给表设置一个别名,让我们在投影查询中引用起来稍微简洁一点:
SELECT s.s_id sid, s.s_name , s.s_sex, c.c_id cid, c.c_name cname FROM student s, course c;最后面定义 students 别名为s, classes别名为c。
注意! 改了别名后就不能使用原来的名字,否则可能返回说找不到表格。
SELECT student.s_id sid, student.s_name , student.s_sex, course.c_id cid, course.c_name cname FROM students s, course c;参考教程: https://www.liaoxuefeng.com/wiki/1177760294764384/1179664013849760