您好!欢迎访问家园网-www.jy.wang!

家园网

sql对多个表相同列名进行查询并使用别名

网络 作者:本站 点击:

sql对多个表相同列名进行查询并使用别名

SELECT user_address.mobile AS "订单表中的电话号码",
users.mobile AS "用户收货信息表的电话号码",user_address.address
FROM user_address, users
WHERE user_address.user_id = users.user_id;

SQL 多表查询 + 别名详解


一、代码整体功能

这条 SQL 语句的作用是:从 user_address(用户地址表)和 users(用户表)中查询数据,当两个表的 user_id 相等时,显示手机号码和地址信息


二、逐部分讲解

sql

SELECT 
    user_address.mobile AS "订单表中的电话号码",
    users.mobile AS "用户收货信息表的电话号码",
    user_address.addressFROM 
    user_address, usersWHERE 
    user_address.user_id = users.user_id;


三、为什么需要表名前缀?

问题场景

两个表都有 mobile 列,如果不加表名前缀,数据库不知道要取哪个:

sql

-- ❌ 错误写法:mobile 指哪个表?SELECT mobile FROM user_address, users-- ✅ 正确写法:明确指定来源SELECT user_address.mobile, users.mobile FROM user_address, users

表名.列名 的语法

sql

表名.列名

部分

含义

示例

表名

数据表的名称

user_address

.

点号,表示"的"

user_address.mobile = "user_address 表的 mobile 列"

列名

字段名称

mobile


四、AS 别名详解

1、AS 是什么?

单词词源含义
AS古英语 eallswa(完全如此)作为、当作

在 SQL 中,AS 用于给查询结果中的列起一个临时名称

2、为什么需要别名?

不加别名时,查询结果会显示原始列名:

sql

SELECT user_address.mobile, users.mobileFROM user_address, usersWHERE user_address.user_id = users.user_id;

查询结果

text

mobile        | mobile
--------------|--------------
13812345678   | 13812345678

问题:两个列都叫 mobile,无法区分哪个是哪个!

3、使用别名后

sql

SELECT 
    user_address.mobile AS "订单表中的电话号码",
    users.mobile AS "用户收货信息表的电话号码"FROM user_address, usersWHERE user_address.user_id = users.user_id;

查询结果

text

订单表中的电话号码 | 用户收货信息表的电话号码
------------------|------------------------
13812345678       | 13812345678


五、两个表的关系

表结构示意

user_address 表(用户地址表)

user_idmobileaddress
113812345678北京市朝阳区...
213912345678上海市浦东区...

users 表(用户表)

user_idusernamemobile
1张三13812345678
2李四13912345678

连接条件

sql

WHERE user_address.user_id = users.user_id

  • 意思是:只查询两个表中 user_id 相等的记录

  • 这叫做等值连接(Equi Join)


六、可视化执行过程

360截图20260406201904083.jpg


七、AS 的词源与使用

单词词源含义
AS古英语 eallswa如同、作为

SQL 中的使用方式

写法说明示例
列名 AS "别名"标准写法,别名可带空格mobile AS "电话号码"
列名 AS 别名别名无空格时可省略引号mobile AS phone
列名 别名可省略 AS 关键字mobile phone
表名 AS 别名给表起别名user_address AS ua

省略 AS 的写法

sql

-- 以下三种写法等价SELECT user_address.mobile AS "电话号码" FROM user_address;SELECT user_address.mobile AS 电话号码 FROM user_address;SELECT user_address.mobile 电话号码 FROM user_address;


八、完整示例(带表别名)

sql

SELECT 
    ua.mobile AS "订单表中的电话号码",
    u.mobile AS "用户收货信息表的电话号码",
    ua.addressFROM 
    user_address AS ua, 
    users AS uWHERE 
    ua.user_id = u.user_id;

优点:使用表别名 ua 和 u,代码更简洁。


九、总结

概念说明示例
表名前缀区分不同表的同名列user_address.mobile
AS 别名给查询结果列起临时名称AS "订单表中的电话号码"
连接条件关联两个表的条件WHERE user_address.user_id = users.user_id
问题场景两个表都有 mobile 列,不加别名会混淆-
解决方式用 表名.列名 区分来源,用 AS 重命名输出-

一句话总结:当多个表有相同列名时,需要用 表名.列名 告诉数据库从哪个表取数据;同时用 AS 给查询结果中的列起别名,避免输出结果中出现同名的列,让数据更清晰可读


标签: