Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 这些查询和它的工作原理有什么区别?_Sql_Oracle - Fatal编程技术网

Sql 这些查询和它的工作原理有什么区别?

Sql 这些查询和它的工作原理有什么区别?,sql,oracle,Sql,Oracle,取一个示例表_name=Mybooks, 如果我们必须选择所有的书籍,查询将是这样的 select * from mybooks; 那么,什么时候以及为什么我们需要别名并像 select books.* from mybooks books; 我不明白这是如何工作的,它的用法当你的查询中有连接时,一个简单的*将导致连接中包含的所有表的所有字段。使用books.*时,结果将仅包含books表的所有字段 到目前为止,这与别名无关,这是另一个概念,即为一个表指定别名,以便可以区分具有相同名称的两个

取一个示例表_name=Mybooks,
如果我们必须选择所有的书籍,查询将是这样的

select * from mybooks;
那么,什么时候以及为什么我们需要别名并像

select books.* from mybooks books;

我不明白这是如何工作的,它的用法当你的查询中有连接时,一个简单的*将导致连接中包含的所有表的所有字段。使用books.*时,结果将仅包含books表的所有字段

到目前为止,这与别名无关,这是另一个概念,即为一个表指定别名,以便可以区分具有相同名称的两个表


这两个概念只有在具有多个表的更复杂查询时才有意义。

当查询中包含联接时,简单*将导致联接中包含的所有表的所有字段。使用books.*时,结果将仅包含books表的所有字段

到目前为止,这与别名无关,这是另一个概念,即为一个表指定别名,以便可以区分具有相同名称的两个表


这两个概念只有在使用多个表进行更复杂的查询时才有意义。

别名类似于重命名表的特定用途,使用别名的原因如下:

  • 只需使用较短的描述符
  • 您在查询中多次使用同一个表(您需要一些东西来区分它们)
  • 如果只使用一个表,则不需要别名,但没有任何东西阻止您使用别名

    示例:

  • 一个表不会增加价值,但您可以使用以下任何一个表:

    SELECT *
    FROM LongTableName
    
    -- Only if you enjoy typing
    SELECT LongTableName.*
    FROM LongTableName
    
    SELECT *
    FROM LongTableName t
    
    SELECT t.*
    FROM LongTableName t
    
  • 对于多个表:

    -- Cartesian join or cross join, at least one of the instances requires an alias
    SELECT *
    FROM LongTableName, LongTableName l
    
    -- You are forced to use the full name to refer to an "un-aliased" table
    SELECT LongTableName.Field, l.Field
    FROM LongTableName, LongTableName l
    
    -- For any other join, if only one table has an alias, like in the previous case,
    -- you will have to use the full name to refer to the other instance
    SELECT *
    FROM LongTableName
    INNER JOIN LongTableName l ON LongTableName.Field = l.Field
    
    -- Normally you simply use a short alias for both, like this
    SELECT *
    FROM LongTableName l1
    INNER JOIN LongTableName l2 ON l1.Field = l2.Field
    
    -- Only selecting some fields
    SELECT l1.PrimaryKey, l1.Field, l2.PrimaryKey, l2.Field
    FROM LongTableName l1
    INNER JOIN LongTableName l2 ON l1.Field = l2.Field
    

  • 如果在
    中选择
    需要所有已用表格中的所有字段,则只需使用
    *
    即可。但是,如果您需要从多个表中选择特定字段,您会非常喜欢使用别名。

    别名就像重命名表的特定用途,使用别名的原因如下:

  • 只需使用较短的描述符
  • 您在查询中多次使用同一个表(您需要一些东西来区分它们)
  • 如果只使用一个表,则不需要别名,但没有任何东西阻止您使用别名

    示例:

  • 一个表不会增加价值,但您可以使用以下任何一个表:

    SELECT *
    FROM LongTableName
    
    -- Only if you enjoy typing
    SELECT LongTableName.*
    FROM LongTableName
    
    SELECT *
    FROM LongTableName t
    
    SELECT t.*
    FROM LongTableName t
    
  • 对于多个表:

    -- Cartesian join or cross join, at least one of the instances requires an alias
    SELECT *
    FROM LongTableName, LongTableName l
    
    -- You are forced to use the full name to refer to an "un-aliased" table
    SELECT LongTableName.Field, l.Field
    FROM LongTableName, LongTableName l
    
    -- For any other join, if only one table has an alias, like in the previous case,
    -- you will have to use the full name to refer to the other instance
    SELECT *
    FROM LongTableName
    INNER JOIN LongTableName l ON LongTableName.Field = l.Field
    
    -- Normally you simply use a short alias for both, like this
    SELECT *
    FROM LongTableName l1
    INNER JOIN LongTableName l2 ON l1.Field = l2.Field
    
    -- Only selecting some fields
    SELECT l1.PrimaryKey, l1.Field, l2.PrimaryKey, l2.Field
    FROM LongTableName l1
    INNER JOIN LongTableName l2 ON l1.Field = l2.Field
    

  • 如果在
    中选择
    需要所有已用表格中的所有字段,则只需使用
    *
    即可。但是,如果您需要从多个表中选择特定字段,您将非常喜欢使用别名。

    您将两种情况混合在一起。关于使用别名,您已经得到了一些很好的答案。但是,这不是以不同方式编写
    select*
    的唯一方法

    如果没有别名,您可以说
    选择mybooks.*。
    -使用表名,而不是它的别名

    在某些情况下,您不需要表名,只需使用
    select*
    。但是,如果您需要添加其他列(例如,
    sysdateas DT
    ),则在
    选择*
    之后无法执行此操作。您必须使用
    select mybooks.*,SYSDATE as DT…
    -不需要别名,但必须在
    *
    前面加上表名,即使查询只引用一个表


    更常见的情况是,这种情况会发生在分析函数中,例如,
    row\u number()over…

    您将两种东西混合在一起。关于使用别名,您已经得到了一些很好的答案。但是,这不是以不同方式编写
    select*
    的唯一方法

    如果没有别名,您可以说
    选择mybooks.*。
    -使用表名,而不是它的别名

    在某些情况下,您不需要表名,只需使用
    select*
    。但是,如果您需要添加其他列(例如,
    sysdateas DT
    ),则在
    选择*
    之后无法执行此操作。您必须使用
    select mybooks.*,SYSDATE as DT…
    -不需要别名,但必须在
    *
    前面加上表名,即使查询只引用一个表


    这种情况在分析函数中更常见,例如,
    row\u number()over…

    这两个查询是等效的。。第二个表名有别名,如果需要表中的所有列(但其他列需要列alsio)@scaisEdge“其他列也需要列”请解释。我的意思是其他表也有错误。第二个符号用于例如:select books.*,u.*从mybooks as books以u身份加入用户books.key=u.key。。(但这不是你的情况)只要把书当作mybooks的昵称就行了。当您连接具有某些相同字段名的其他表时,别名非常有用。更简洁的是,
    mybadasslongtablename.field1
    还是
    t.field1
    ?这两个查询是等价的。。第二个表名有别名,如果需要表中的所有列(但其他列需要列alsio)@scaisEdge“其他列也需要列”请解释。我的意思是其他表也有错误。第二个符号用于例如:select books.*,u.*从mybooks as books以u身份加入用户books.key=u.key。。(但这不是你的情况)只要把书当作mybooks的昵称就行了。当您连接具有某些相同字段名的其他表时,别名非常有用。哪个更简洁,
    mybadasslongtablename.field1
    还是
    t.field1
    ?我没有图书表。。。。这个查询在oracle中仍然有效。。。。我需要这样做,以便将其传递给JavaEE中的ResultSet类。。。否则它将以只读格式转换。在您介绍的第二条语句中,您为名为“mybooks”的表提供了别名“books”。这意味着您可以使用“books”或“mybooks”访问最初名为mybooks的表。好的。。。。