【问题标题】:Wildcards in sqlsql中的通配符
【发布时间】:2013-02-09 10:02:34
【问题描述】:

通配符在 sql 中是如何工作的。如果我这样做 select * from table 它会给出所有字段。但是如果我这样做select a* from table 它会出错。它不应该给出所有以a开头的字段吗? 我有点困惑。

【问题讨论】:

  • 不。这不是它的工作原理。唯一的规则是* 表示表中的所有列。

标签: sql database select


【解决方案1】:

您可以使用 a.*,其中 a 是表的名称。例如在

select a.* from a left join b on a.id = b.id 

您将只返回 a 中的字段,而不返回 b 中的字段

【讨论】:

    【解决方案2】:

    如果要在 SQL 中使用通配符,您需要使用 LIKE 键入要过滤的列。

    SELECT * 
    FROM table
    WHERE column_name LIKE 'a%';
    

    这将为您提供该列上以“a”开头的所有内容。

    如果您不想要所有列,则必须在查询中明确给出您想要的每一列的名称。

    SELECT LastName, FirstName, Address 
    FROM table
    

    因此,如果您想要所有以“a”开头的字段,则必须在 SELECT 语句中命名所有以“a”开头的字段。

    希望这会有所帮助。

    【讨论】:

    • 这不能回答 OP 的问题!
    • @fastcodejava 我输入的是“SQL 中的通配符”问题,而不是问题的原因。我确实改变了答案。
    【解决方案3】:

    SELECT * FROM tableName 字面意思是“从 tableName 中选择所有列”。

    Philip Graham 在他要求使用 a.* 时的回答是正确的

    通配符可帮助您搜索不确定的字符串。这些几乎总是与LIKE 关键字一起使用并放入WHERE 子句或搜索CASE 语句。

    有两个通配符 - % 和 _。

    % 用于查找任何长度为 0 或更长的字符串。 例如,

    SELECT firstName
      FROM persons
     WHERE UPPER(firstName) LIKE 'J%'
    

    这将从persons 表中返回名字以字母J 开头的所有firstName。这将返回“Jason”、“James”、“Josh”、“Jessica”等等。

    请注意,UPPER 函数用于消除区分大小写。

    接下来,您可以使用_ 字符来查找是否存在单个字符。

    SELECT firstName
      FROM persons
     WHERE UPPER(firstName) LIKE 'J_M__'
    

    这将返回“James”、“Jimmy”、“Jamos”、“Jxmx”并过滤掉任何“Jason”、“Jaguar”等。

    更多信息请点击here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-08
      • 2018-05-15
      • 1970-01-01
      相关资源
      最近更新 更多