SQL多表查询(设置别名)

多表查询(笛卡尔查询)

跨几个表格查询信息时使用SELECT * FROM <表1> <表2>

这种多表查询又称笛卡尔查询,使用笛卡尔查询时要非常小心,由于结果集是目标表的行数乘积,对两个各自有100行记录的表进行笛卡尔查询将返回1万条记录,对两个各自有1万行记录的表进行笛卡尔查询将返回1亿条记录。

问题:下面是全部的表格,现在需要查询老师和课程的信息?
在这里插入图片描述

select * from teacher,course;

在这里插入图片描述
两个表原本为3* 3和2* 3,相乘后得到5*9的表格。结果集的列数是两表的列数之和,行数是两表的行数之积。

列别名

students.idcourse.c_idcourse.c_name 列设置别名为sidcidcname;并且别名还可以在查询过程中继续使用,减少输入的时间。

先看看列名是不是修改了:

SELECT
    student.s_id sid,
    student.s_name ,
    student.s_sex,
    course.c_id cid,
    course.c_name cname
FROM Student, course;

部分结果输出:

  • 有三列名称更新为sidcidcname ;没有设置的名字和性别两列依旧显示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

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值