我有一个简单的问题。我想列出我们可以使用关键字星号(或星号)* 的所有场景。
我只知道这些场景:
Select * from Customers;
Select Count(*) from Customers;
Select Customers.quantity * Customers.price from Customers;
Run Code Online (Sandbox Code Playgroud)
我在互联网上搜索了所有内容,但没有找到任何其他用例。
此外,我们可以在选择查询中将 * 与列一起使用的场景。
编辑:好的,因为@Lucas Eder 要求知道我的用例,这里是。我有一个接受 SQL 查询并将其存储在数据库中的程序。在存储之前,它会验证不允许创建select *和Count(*)查询。除此之外,它应该允许所有其他查询。所以这就是我想知道其他使用场景的原因,*以便我可以将它们列入白名单。
Luk*_*der 14
有趣的问题!
以下是jOOQ对各种 SQL 方言的了解(查看其来源):
重复你的(有一些评论):
-- Unqualified asterisk
SELECT * FROM t;
-- Unqualified asterisk with useful Google BigQuery extension
SELECT * EXCEPT (a, b) FROM t
-- Asterisk in COUNT
SELECT COUNT(*) FROM t;
-- Multiplication operator for numbers
SELECT a * b FROM t;
-- Multiplication operator for intervals / numbers
SELECT INTERVAL 1 DAY * 3 FROM t;
Run Code Online (Sandbox Code Playgroud)
其他情况 jOOQ 知道:
-- Qualified asterisk
SELECT t.* FROM t;
-- Multiline comment syntax
SELECT /* important column */ a FROM t;
-- Oracle hint syntax
SELECT /*+FIRST_ROWS*/ a FROM t;
-- Old SQL Server outer join syntax (no longer supported)
SELECT * FROM t, u WHERE t *= u;
-- Oracle precision / scale wildcard
CREATE TABLE t (a NUMBER(*), b NUMBER(*, 2));
-- PostgreSQL syntax for case insensitive pattern matching (ILIKE)
-- (there are many more operators)
SELECT 'abc' ~~* 'A%'
Run Code Online (Sandbox Code Playgroud)
我知道的其他情况:
-- MATCH_RECOGNIZE pattern matching
SELECT * FROM t MATCH_RECOGNIZE ( ... PATTERN X Y* Z ... )
-- Oracle 21c's projecting everything into JSON
SELECT JSON_OBJECT(*) FROM t
Run Code Online (Sandbox Code Playgroud)
字符串文字内容,也被指定和解析:
-- Regular expressions (the asterisk is in a string literal, but it's still worth noting)
SELECT regexp_replace(a, 'a*', '') FROM t;
-- Similar predicate (again, it's in a string literal but the format is specified)
SELECT 'abc' SIMILAR TO 'a*'
-- JSON Path contents (there are quite a few possible asterisks here)
SELECT JSON_QUERY(col, '$.*') FROM t;
-- XPath contents
SELECT XMLQUERY('/x/*' PASSING t.xmldoc) FROM t
Run Code Online (Sandbox Code Playgroud)
深奥的案例:
ISO/IEC 9075-2:2016(E) SQL 标准在 21.6 <embedded SQL Fortran program> [原文如此!]
<Fortran 类型规范> ::= CHARACTER [ <星号> <字符长度> ] [ CHARACTER SET [ IS ] <字符集规范> ]
是的。你自找的!