SQL多表查询(设置别名)

    技术2022-07-11  86

    多表查询(笛卡尔查询)

    跨几个表格查询信息时使用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 fromSELECT 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

    Processed: 0.012, SQL: 9