取样本table_name = Mybooks,
如果我们必须选择查询的所有书籍
select * from mybooks;
那么我们何时以及为什么需要别名并进行类似
的查询select books.* from mybooks books;
我不明白这是如何运作的及其使用
答案 0 :(得分:2)
别名就像重命名表的特定用法一样,使用它的原因是:
如果您只使用一个表,则不需要别名,但没有什么可以阻止您使用别名。
示例:
一张桌子没有增值,但你可以选择其中任何一个:
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
中您想要使用所有已使用的表中的所有字段,则只需使用*
即可完成。但是如果你需要从几个表中选择特定的字段,你会非常感谢有别名。
答案 1 :(得分:2)
你把两件事混在一起。您已经有一些关于使用别名的好答案。但是,这不是以不同方式编写import java.util.*;
public static int solution(String S) {
if (S.isEmpty()) return 1;
if (S.length() % 2 == 1) return 0; // the length cannot be an odd number.
// in time complexity this decreases from O(n) to O(1).
// this Map avoid the ugly "switch case"
Map<Character, Character> map = new HashMap<Character, Character>();
map.put('}', '{');
map.put(')', '(');
map.put(']', '[');
Stack<Character> stack = new Stack<Character>();
for (Character c : S.toCharArray()) {
if (map.containsKey(c)) {
if (!stack.isEmpty() && map.get(c) == stack.peek()) {
stack.pop();
} else {
return 0;
}
} else {
stack.push(c);
}
}
return stack.isEmpty() ? 1 : 0;
}
的唯一方法。
如果没有别名,您可以说select *
- 使用表名,而不是别名。
在某些情况下,您不需要表名,只能使用select mybooks.* ...
。但是,如果您需要添加其他列 - 例如select *
,则无法在SYSDATE as DT
之后执行此操作。您必须使用select *
- 不需要别名,但您必须在select mybooks.*, SYSDATE as DT ...
前加上表名,即使查询仅引用一个表。
更常见的情况是分析函数会发生这种情况,例如*
答案 2 :(得分:0)
当您在查询中加入时,一个简单的*将导致连接中包含的所有表的所有字段。使用书籍时。*结果将仅包含书籍表的所有字段。
这与别名到目前为止没有任何关系,这是另一个概念,你给表一个别名,以便你可以区分两个同名的表。
只有当您有多个表的复杂查询时,这两个概念才有意义。