SQL连接问题
我将连接多个具有相同列的表,是否仍有这样的设置,以便不需要特定的表前缀SQL连接问题,sql,join,Sql,Join,我将连接多个具有相同列的表,是否仍有这样的设置,以便不需要特定的表前缀 或者我被困在使用select a._id,b._id…z._id?当然,对于SQL Server,您必须指定它,以便查询不会含糊不清-恐怕被困了 否。如果列具有相同的名称,则数据库软件需要能够以某种方式区分它们 在标准SQL中,必须为列添加前缀 不过,其他SQL方言可能提供此功能。例如,在Postgresql中: create table t1(id integer not null, t1 text not null);
或者我被困在使用select a._id,b._id…z._id?当然,对于SQL Server,您必须指定它,以便查询不会含糊不清-恐怕被困了 否。如果列具有相同的名称,则数据库软件需要能够以某种方式区分它们 在标准SQL中,必须为列添加前缀 不过,其他SQL方言可能提供此功能。例如,在Postgresql中:
create table t1(id integer not null, t1 text not null);
create table t2(id integer not null, t2 text not null);
select id, t1, t2 from t1 join t2 using (id);
在这里,id不必加前缀,因为它在联接中使用。通常,是的,您必须限定每个重复的列名。我假设你不想这样做来避免额外的打字;实现这一点的一种方法是使用表别名,即
从mylongtablename a、myotherlongtablename b中选择a.id、b.id…
如果列名的限定确实有那么大的问题,您可以通过在一个或多个表周围定义一个视图并使用别名作为表名来解决。但是,这只会使查询中的逻辑更难查看,因此我当然不推荐这样做
长话短说:处理额外的键入和列名前缀;它将使您的查询在将来更易于阅读和维护。在某些RDBMS(如Oracle)中,您可以使用加入。。。使用…
表单。
例如:
select id, col1, col2 from table1 a join table2 b using (id)
几乎相当于:
select a.id, col1, col2 from table1 a join table2 b on a.id = b.id
但是:
的行为不同于加入。。。在…上。 最重要的是,不能在using()中对列使用显式前缀 在上面的示例中,您不能使用a.id或b.id。 所以,如果第三个表的列id是不相关的,那么它可能会变得更复杂 到表1和表2 id加入。。。使用
- 许多系统没有它(例如SQL Server),因此代码的可移植性较差
- 许多人(包括我)更喜欢在列中使用显式表别名 为清晰起见,避免以后编辑查询时出错。 我只是在表格中使用简短的别名,并接受它
select a.col1 , a.Col2,b.Col1,c.Col2
from tableA a
join tableB b
on a.id = b.id
join tableC c
on c.id = b.id
and c.id = a.id
2) 消除列名的歧义
3) 提高代码可重用性
4) 假设您有一个派生表,如
SELECT col1,col2
FROM (select *
from mytable
where col3 = 'somevalue') x
在这种情况下,必须使用别名
注意:-
列别名表示列的全名
e、 g.从mytable中选择平均值(col1)
它的输出为
[No Column Name]
-----------------
30
可以美化
select avg(col1) "Average" from mytable
或
输出:
Avegare
-------------
30
但是,AS关键字是可选的
希望这能让您了解为什么我们应该使用表别名您可以通过使用on而不是编写列名来节省在连接上键入的时间
SELECT a._id, b._id FROM table1 a JOIN table2 b
ON _id
在我看来,这就像是的候选人,例如:
SELECT *
FROM employee NATURAL JOIN department
有关详细信息,请参阅本文“”
引述:
自然连接关键字指定
该属性的值将
这两个表之间是匹配的
姓名相符者;非常
极少数例外情况下,这些将是
pk/fk属性,它们必须
具有匹配的数据类型(和域)
还有
警告:根据您的RDBMS,自然连接语法可能受支持,也可能不受支持。
以下是一些确实支持它的人:
SELECT a._id, b._id FROM table1 a JOIN table2 b
ON _id
SELECT *
FROM employee NATURAL JOIN department