SQL英语术语手册,汇集SQL核心概念与现代数据库技术要点,覆盖SQL:基础术语、DDL、DML、DQL、函数、存储过程、事务、设计、高可用、优化、安全、跨库差异等12大技术领域的核心术语,可作为全栈工程师、DBA、数据分析师及SQL教学的参考指南。
一、SQL基础术语
英文术语 | 中文释义 | 技术细节 |
---|
SQL | | |
Database | | |
Table | | |
Row/Record | | |
Column/Field | | |
Schema | | |
Data Type | | |
Primary Key | | |
Foreign Key | | |
Index | | |
Constraint | | |
View | | |
Materialized View | | |
Cursor | | |
ACID Properties | | |
NULL | | |
DBMS/RDBMS | | 如MySQL, Oracle, SQL Server |
Query | | |
Statement | | |
Transaction | | |
Tuple | | |
Attribute | | |
Catalog | | |
Domain | | |
Data Dictionary | | |
Instance | | |
Connection | | |
Cursor Sensitivity | | 感知底层数据变化(SENSITIVE/INSENSITIVE) |
Savepoint | | |
Relational Algebra | | |
Cardinality | | |
Selectivity | | |
Predicate | | |
Projection | | |
Cartesian Product | | |
Degree | | |
二、数据定义语言(DDL)
命令 | 功能 | 语法示例 |
---|
CREATE DATABASE | | CREATE DATABASE SalesDB CHARSET=utf8mb4; |
CREATE TABLE | | CREATE TABLE Users (ID INT PRIMARY KEY AUTO_INCREMENT, Name VARCHAR(50) NOT NULL); |
CREATE INDEX | | CREATE INDEX idx_email ON Users(Email) USING HASH; |
CREATE VIEW | | CREATE VIEW vw_active AS SELECT id,name FROM Users WHERE active=1; |
ALTER TABLE | | ALTER TABLE Users ADD COLUMN birthdate DATE AFTER name; |
DROP TABLE | | DROP TABLE IF EXISTS TempData; |
DROP DATABASE | | DROP DATABASE ArchiveDB CASCADE; |
TRUNCATE TABLE | | |
RENAME TABLE | | MySQL:RENAME TABLE old TO new; |
COMMENT | | PostgreSQL:COMMENT ON COLUMN Users.name IS '用户全名'; |
CHECK Constraint | | CREATE TABLE Orders (Amount DECIMAL CHECK (Amount > 0)); |
DEFAULT | | CREATE TABLE Logs (ctime DATETIME DEFAULT CURRENT_TIMESTAMP); |
AUTO_INCREMENT | | |
IDENTITY | | |
SEQUENCE | | Oracle:CREATE SEQUENCE user_seq START WITH 1000 INCREMENT BY 2; |
CREATE TYPE | | PostgreSQL:CREATE TYPE currency AS (amount DECIMAL, unit VARCHAR(3)); |
ALTER INDEX | | SQL Server:ALTER INDEX idx_name ON Users REORGANIZE; |
PARTITION BY | | MySQL:CREATE TABLE Logs (...) PARTITION BY RANGE(YEAR(log_date))(...); |
TABLESPACE | | |
CREATE SYNONYM | | Oracle:CREATE SYNONYM emp FOR hr.employees; |
STORAGE PARAMETER | | PostgreSQL:CREATE TABLE bigtable (...) WITH (fillfactor=70); |
VIRTUAL COLUMN | | Oracle:CREATE TABLE Orders (total DECIMAL GENERATED ALWAYS AS (qty*price)); |
GLOBAL TEMPORARY TABLE | | |
EXTERNAL TABLE | | |
三、数据操作语言(DML)
命令 | 功能 | 语法示例 |
---|
INSERT INTO | | INSERT INTO Users VALUES (DEFAULT, 'Alice', CURDATE()); |
UPDATE | | UPDATE Products SET price=price*0.9 WHERE stock>100; |
DELETE | | DELETE FROM Logs WHERE create_time < '2023-01-01'; |
MERGE | | Oracle:
MERGE INTO target t USING source s ON (t.id=s.id)
WHEN MATCHED THEN UPDATE SET t.val=s.val
WHEN NOT MATCHED THEN INSERT VALUES (s.id,s.val); |
UPSERT | | PostgreSQL:INSERT INTO Users(id,name) VALUES (1,'Bob') ON CONFLICT (id) DO UPDATE SET name=EXCLUDED.name; |
OUTPUT Clause | | SQL Server:DELETE FROM Users OUTPUT deleted.id WHERE id=1; |
BULK INSERT | | SQL Server:BULK INSERT Employees FROM 'data.csv' WITH (FIELDTERMINATOR=','); |
INSERT IGNORE | | MySQL:INSERT IGNORE INTO UniqueIDs VALUES (1001); |
RETURNING | | PostgreSQL:UPDATE Tasks SET status='done' RETURNING task_id; |
COPY FROM | | PostgreSQL:COPY users FROM '/data/users.csv' WITH CSV HEADER; |
LOAD DATA INFILE | | MySQL:LOAD DATA LOCAL INFILE 'data.txt' INTO TABLE logs; |
SELECT INTO | | SQL Server:SELECT * INTO NewTable FROM OldTable WHERE condition; |
INSERT EXEC | | SQL Server:INSERT INTO Results EXEC spGetReport; |
FOR UPDATE | | SELECT * FROM Accounts WHERE id=100 FOR UPDATE; |
WAIT | | Oracle:SELECT * FROM Inventory WHERE qty>0 FOR UPDATE WAIT 5; |
SKIP LOCKED | | Oracle:SELECT * FROM Jobs FOR UPDATE SKIP LOCKED; |
OUTER APPLY | | SQL Server:SELECT u.name, o.total FROM Users u OUTER APPLY dbo.GetOrders(u.id) o; |
CONNECT BY | | |
四、数据查询语言(DQL)
1. 核心子句
关键字 | 用途 | 示例 |
---|
SELECT | | SELECT name, COUNT(*) FROM ... |
FROM | | FROM Employees e JOIN Departments d |
WHERE | | WHERE salary > 5000 AND dept_id IN (10,20) |
GROUP BY | | GROUP BY department HAVING SUM(sales)>100000 |
HAVING | | HAVING AVG(score) >= 80 |
ORDER BY | | ORDER BY hire_date DESC, last_name ASC |
LIMIT/OFFSET | | |
FETCH FIRST | | SQL:2011:FETCH FIRST 10 ROWS ONLY |
DISTINCT | | SELECT DISTINCT country FROM Customers |
TOP | | SQL Server:SELECT TOP 10 PERCENT * FROM ... |
TABLESAMPLE | | SELECT * FROM Sales TABLESAMPLE BERNOULLI (5) |
WITH TIES | | SQL Server:SELECT TOP 5 WITH TIES * ORDER BY price |
PIVOT | | SQL Server:SELECT * FROM (SELECT ...) src PIVOT (SUM(amount) FOR quarter IN ([Q1],[Q2])) pvt |
UNPIVOT | | SQL Server:UNPIVOT (sales FOR quarter IN (Q1,Q2,Q3)) unpvt |
FOR JSON | | SQL Server:SELECT * FROM Products FOR JSON PATH |
2. 连接操作
连接类型 | 效果 | 语法 |
---|
INNER JOIN | | FROM A INNER JOIN B ON A.id=B.ref_id |
LEFT JOIN | | FROM Users LEFT JOIN Orders ON Users.id=Orders.user_id |
RIGHT JOIN | | FROM Orders RIGHT JOIN Products ON Orders.pid=Products.id |
FULL OUTER JOIN | | Oracle:SELECT * FROM A FULL JOIN B ON A.id=B.id |
CROSS JOIN | | FROM Colors CROSS JOIN Sizes |
SELF JOIN | | SELECT e1.name, e2.name FROM Employees e1 JOIN Employees e2 ON e1.manager=e2.id |
NATURAL JOIN | | |
LATERAL JOIN | | PostgreSQL:SELECT u.name, o.total FROM Users u, LATERAL (SELECT ... WHERE user_id=u.id) o |
NON-EQUI JOIN | | FROM A JOIN B ON A.value BETWEEN B.start AND B.end |
SEMI JOIN | | |
ANTI JOIN | | |
AS OF TIMESTAMP | | Oracle:SELECT * FROM Orders AS OF TIMESTAMP SYSTIMESTAMP - INTERVAL '30' MINUTE |
MATCH_RECOGNIZE | | Oracle:SELECT * FROM Logs MATCH_RECOGNIZE (...) PATTERN (A B+) |
WITH ORDINALITY | | PostgreSQL:SELECT * FROM unnest(array['a','b']) WITH ORDINALITY |
Temporal Table | | SQL Server:FROM Orders FOR SYSTEM_TIME AS OF '2023-01-01' |
3. 高级查询
操作符/函数 | 功能 | 示例 |
---|
UNION | | SELECT city FROM Customers UNION SELECT city FROM Suppliers |
UNION ALL | | SELECT ... UNION ALL SELECT ... |
EXCEPT/MINUS | | SELECT id FROM A EXCEPT SELECT id FROM B |
INTERSECT | | SELECT id FROM FullTime INTERSECT SELECT id FROM Active |
EXISTS | | SELECT name FROM Customers c WHERE EXISTS (SELECT 1 FROM Orders o WHERE o.cust_id=c.id) |
CASE WHEN | | SELECT name, CASE WHEN age<18 THEN 'Child' ELSE 'Adult' END |
CTE (WITH) | | WITH RegionalSales AS (SELECT region, SUM(sales) total FROM ...) |
Recursive CTE | | WITH RECURSIVE OrgTree AS (SELECT id,name FROM root UNION ALL ...) |
Window Functions | | SUM(revenue) OVER (PARTITION BY dept ORDER BY date) |
LEAD/LAG | | LEAD(price,1) OVER (ORDER BY date) |
FIRST_VALUE | | FIRST_VALUE(name) OVER (PARTITION BY dept ORDER BY salary DESC) |
RANK/DENSE_RANK | | RANK() OVER (PARTITION BY class ORDER BY score DESC) |
NTILE | | NTILE(4) OVER (ORDER BY salary) AS quartile |
ROW_NUMBER | | ROW_NUMBER() OVER (PARTITION BY dept ORDER BY id) |
PERCENT_RANK | | PERCENT_RANK() OVER (ORDER BY sales) |
CUME_DIST | | CUME_DIST() OVER (ORDER BY price) |
AGGREGATE FILTER | | PostgreSQL:SUM(sales) FILTER (WHERE region='West') |
GROUPING SETS | | GROUP BY GROUPING SETS ((a,b), (a), ()) |
ROLLUP | | GROUP BY ROLLUP (year, quarter) |
CUBE | | GROUP BY CUBE (country, product) |
PIVOT/UNPIVOT | | Oracle:SELECT * FROM (SELECT ...) PIVOT (SUM(sales) FOR region IN ('East','West')) |
MODEL | | Oracle:SELECT ... MODEL DIMENSION BY (...) MEASURES (...) RULES (...) |
FLASHBACK QUERY | | Oracle:SELECT * FROM table AS OF TIMESTAMP ... |
XMLTABLE | | SELECT * FROM XMLTABLE('//book' PASSING xml_doc COLUMNS title VARCHAR(100) PATH 'title') |
JSON_TABLE | | SELECT * FROM JSON_TABLE(json_doc, '$.items[*]' COLUMNS (id PATH '$.id', name PATH '$.name')) |
FULLTEXT SEARCH | | MySQL:WHERE MATCH(title,content) AGAINST ('database' IN NATURAL LANGUAGE MODE) |
SOUNDEX | | SQL Server:WHERE SOUNDEX(name)=SOUNDEX('Smith') |
SIMILAR TO | | PostgreSQL:WHERE name SIMILAR TO 'J(oh)?n' |
REGEXP_SUBSTR | | Oracle:REGEXP_SUBSTR(phone, '\d{3}-\d{4}') |
GEOMETRY | | PostGIS:WHERE ST_Distance(point1, point2) < 1000 |
CONTAINS | | SQL Server:WHERE geometry_col.STContains(@point)=1 |
GEOGRAPHY | | SQL Server:geography::Point(47.6, -122.3, 4326) |
TOP N per Group | | SELECT * FROM (SELECT *, ROW_NUMBER() OVER (PARTITION BY dept ORDER BY salary DESC) rn FROM emp) WHERE rn<=3 |
Hierarchical Query | | Oracle:SELECT LEVEL, name FROM emp START WITH mgr_id IS NULL CONNECT BY PRIOR id=mgr_id |
GENERATE_SERIES | | PostgreSQL:SELECT * FROM generate_series(1,10) |
MATCH_RECOGNIZE | | |
TABLESAMPLE | | SELECT * FROM large_table TABLESAMPLE SYSTEM(1) |
WITH ORDINALITY | | PostgreSQL:SELECT * FROM json_array_elements('[1,2]') WITH ORDINALITY |
INTERPOLATION | | Oracle:PERIOD FOR ... WITH INTERPOLATE |
UNNEST | | PostgreSQL:SELECT * FROM unnest(ARRAY[1,2]) |
LATERAL Subquery | | SELECT u.name, p.product FROM Users u, LATERAL (SELECT product FROM Purchases WHERE user_id=u.id LIMIT 3) p |
ILIKE | | PostgreSQL:WHERE name ILIKE 'john%' |
五、函数与操作符
1. 聚合函数
函数 | 功能 | 示例 |
---|
COUNT() | | COUNT(*) |
SUM() | | SUM(quantity * price) |
AVG() | | AVG(DISTINCT score) |
MIN() | | MIN(create_time) |
MAX() | | MAX(temperature) |
GROUP_CONCAT() | | MySQL:GROUP_CONCAT(name ORDER BY id SEPARATOR ',') |
STRING_AGG() | | SQL Server:STRING_AGG(name, ',') WITHIN GROUP (ORDER BY id) |
ARRAY_AGG() | | PostgreSQL:ARRAY_AGG(email) |
JSON_ARRAYAGG() | | MySQL:JSON_ARRAYAGG(JSON_OBJECT('id',id,'name',name)) |
JSON_OBJECTAGG() | | MySQL:JSON_OBJECTAGG(dept_name: COUNT(*)) |
CORR() | | CORR(x, y) |
STDDEV() | | STDDEV_POP(salary) |
VAR() | | VAR_SAMP(price) |
BIT_AND() | | MySQL:BIT_AND(permissions) |
APPROX_COUNT_DISTINCT() | | SQL Server:APPROX_COUNT_DISTINCT(user_id) |
2. 标量函数
类型 | 函数 | 功能 |
---|
字符串 | CONCAT() | 连接:CONCAT(first, ' ', last) |
| SUBSTRING() | |
| LEFT()/RIGHT() | |
| UPPER()/LOWER() | |
| TRIM() | 去除空格:TRIM(LEADING '0' FROM phone) |
| LENGTH()/CHAR_LENGTH() | |
| REPLACE() | 替换:REPLACE(title, 'Old', 'New') |
| REVERSE() | |
| LPAD()/RPAD() | 填充:LPAD(account, 10, '0') |
| INSTR() | |
| FORMAT() | 格式化:FORMAT(12345.678, 'C') |
| SOUNDEX() | |
数值 | ROUND() | |
| TRUNCATE() | |
| ABS() | |
| CEIL()/FLOOR() | |
| MOD() | |
| POWER()/SQRT() | |
| EXP()/LOG() | |
| RAND() | |
| PI() | |
| GREATEST()/LEAST() | |
日期 | NOW()/CURRENT_TIMESTAMP | |
| CURDATE()/CURTIME() | |
| DATE_ADD()/DATE_SUB() | 日期加减:DATE_ADD(hire_date, INTERVAL 1 YEAR) |
| DATEDIFF() | 日期差:DATEDIFF(day, start, end) |
| DATEPART()/EXTRACT() | 提取部分:EXTRACT(YEAR FROM birthdate) |
| DATE_FORMAT()/TO_CHAR() | |
| STR_TO_DATE() | |
| LAST_DAY() | |
| TIMESTAMPDIFF() | |
条件 | COALESCE() | 首非空值:COALESCE(middle_name, '') |
| NULLIF() | |
| IFNULL()/ISNULL() | |
| IF() | 简单逻辑:IF(qty>100, 'High', 'Low') |
| DECODE() | |
JSON | JSON_EXTRACT() | 提取值:JSON_EXTRACT(doc, '$.address.city') |
| JSON_SET() | 设置值:JSON_SET(doc, '$.email', 'new@mail.com') |
| JSON_VALID() | |
| JSON_ARRAY() | |
| JSON_OBJECT() | |
分析 | FIRST_VALUE() | |
| PERCENT_RANK() | |
转换 | CAST() | 类型转换:CAST(price AS DECIMAL(10,2)) |
| CONVERT() | |
| TO_DATE()/TO_NUMBER() | |
六、存储过程与触发器
术语 | 功能 | 语法示例 |
---|
Stored Procedure | | CREATE PROCEDURE TransferFunds(IN from_acc INT, IN to_acc INT, IN amt DECIMAL)
BEGIN START TRANSACTION; UPDATE Accounts SET bal=bal-amt WHERE id=from_acc; UPDATE Accounts SET bal=bal+amt WHERE id=to_acc; COMMIT;
END |
Function | | PostgreSQL:
CREATE FUNCTION area(r float) RETURNS float AS $$ BEGIN RETURN 3.14*r*r; END; $$ LANGUAGE plpgsql; |
Trigger | | CREATE TRIGGER update_balance
AFTER INSERT ON Transactions
FOR EACH ROW
BEGIN UPDATE Accounts SET bal=bal+NEW.amount WHERE id=NEW.acc_id;
END |
Parameter | | IN/OUT/INOUT |
CALL | | MySQL:CALL CalculateBonus(@total); |
DECLARE | | DECLARE total_sales DECIMAL(10,2) DEFAULT 0.0; |
Cursor | | DECLARE cur CURSOR FOR SELECT ...; OPEN cur; FETCH cur INTO ...; CLOSE cur; |
Condition Handler | | DECLARE CONTINUE HANDLER FOR SQLEXCEPTION ... |
RETURN | | RETURN total_bonus; |
LOOP/WHILE | | WHILE counter < 100 DO ... END WHILE; |
IF-THEN-ELSE | | IF credit > 5000 THEN ... ELSE ... END IF; |
BEFORE Trigger | | |
AFTER Trigger | | |
INSTEAD OF Trigger | | |
ROW vs STATEMENT | | |
SIGNAL/RESIGNAL | | SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='Error'; |
RAISE | | PostgreSQL:RAISE EXCEPTION 'Invalid value: %', user_input; |
DYNAMIC SQL | | SQL Server:EXEC sp_executesql @sql; |
七、事务与锁
术语 | 功能 | 命令示例 |
---|
BEGIN TRANSACTION | | START TRANSACTION; |
COMMIT | | COMMIT; |
ROLLBACK | | ROLLBACK TO SAVEPOINT sp1; |
SAVEPOINT | | SAVEPOINT checkpoint; |
Isolation Level | | SET TRANSACTION ISOLATION LEVEL READ COMMITTED; |
READ UNCOMMITTED | | |
READ COMMITTED | | |
REPEATABLE READ | | |
SERIALIZABLE | | |
Shared Lock (S) | | |
Exclusive Lock (X) | | |
Intent Lock | | |
Key-Range Lock | | |
Deadlock | | |
Lock Timeout | | SQL Server:SET LOCK_TIMEOUT 3000; (毫秒) |
Deadlock Priority | | SET DEADLOCK_PRIORITY HIGH; |
Lock Escalation | | |
Row Versioning | | |
Snapshot Isolation | | |
Two-Phase Locking | | |
八、数据库设计与架构
术语 | 描述 | 设计原则 |
---|
ER Diagram | | |
Normalization | | |
Denormalization | | |
Entity | | |
Relationship | | |
Attribute | | |
Composite Key | | |
Surrogate Key | | |
Natural Key | | |
Referential Integrity | | |
Clustered Index | | |
Non-clustered Index | | |
Covering Index | | |
Full-Text Index | | |
Functional Dependency | | |
Star Schema | | |
Snowflake Schema | | |
Fact Table | | |
Dimension Table | | |
Slowly Changing Dimension | | |
Surrogate Key Pipeline | | |
Hierarchical Data Model | | |
Materialized Path | | |
In-Memory OLTP | | |
九、高可用与扩展
技术 | 作用 | 架构示例 |
---|
Replication | | |
Master-Slave | | |
Multi-Master | | |
Log Shipping | | |
Failover | | |
Sharding | | |
Partitioning | | |
Hot Standby | | |
CDC | | |
Table Partitioning | | |
Query Router | | |
In-Memory Database | | |
Connection Pooling | | |
Read Replica | | |
Write-Ahead Log (WAL) | | |
Logical Replication | | |
GoldenGate | | |
Delayed Replication | | |
十、执行计划与优化
术语 | 功能 | 操作命令 |
---|
EXPLAIN | | MySQL:EXPLAIN FORMAT=JSON SELECT ... |
Execution Plan | | |
Query Optimizer | | |
Cost-Based Optimizer | | |
Full Table Scan | | |
Index Scan | | |
Index Seek | | |
Key Lookup | | |
Filter/Predicate Pushdown | | |
Nested Loop Join | | |
Hash Join | | |
Merge Join | | |
Statistics | | |
Query Hint | | SQL Server:OPTION (HASH JOIN) |
Covering Index | | |
Parallel Query | | |
In-Memory OLAP | | |
Materialized View | | |
十一、安全与权限
命令 | 功能 | 示例 |
---|
GRANT | | GRANT SELECT, UPDATE ON Customers TO sales_role; |
REVOKE | | REVOKE DELETE ON Logs FROM auditor; |
CREATE USER | | CREATE USER analyst IDENTIFIED BY 'S3cur3P@ss'; |
ALTER USER | | ALTER USER scott PASSWORD EXPIRE; |
CREATE ROLE | | CREATE ROLE finance; |
SET ROLE | | |
ROW LEVEL SECURITY | | |
COLUMN ENCRYPTION | | SQL Server Always Encrypted |
DATA MASKING | | CREATE MASKING POLICY email_mask AS (val string) RETURN CASE WHEN ... |
AUDIT | | Oracle:AUDIT INSERT ANY TABLE BY ACCESS; |
TDE | | |
FIREWALL | | |
SQL INJECTION | | |
RBAC | | |
OWASP TOP 10 | | |
VIRTUAL PRIVATE DB | | |
FEDERATED AUTH | | |
PASSWORD POLICY | | |
十二、跨数据库差异速查
功能 | MySQL | SQL Server | PostgreSQL | Oracle |
---|
字符串连接 | CONCAT() | + | || | CONCAT() |
当前时间 | NOW() | GETDATE() | CURRENT_TIMESTAMP | SYSDATE |
分页查询 | LIMIT 10 OFFSET 20 | OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLY | | FETCH FIRST 10 ROWS ONLY |
正则表达式 | REGEXP '^A' | LIKE '[A-Z]%' | ~ '^A' | REGEXP_LIKE(name, '^A') |
随机行 | ORDER BY RAND() LIMIT 1 | SELECT TOP 1 * FROM Table ORDER BY NEWID() | ORDER BY RANDOM() LIMIT 1 | SELECT * FROM (SELECT * FROM Table ORDER BY DBMS_RANDOM.VALUE) WHERE ROWNUM=1 |
序列生成 | AUTO_INCREMENT | IDENTITY | CREATE SEQUENCE | SEQUENCE.NEXTVAL |
日期差 | DATEDIFF(day, d1, d2) | DATEDIFF(DAY, d1, d2) | d2 - d1 | d2 - d1 |
正则提取 | REGEXP_SUBSTR() | SUBSTRING() WITH PATINDEX | SUBSTRING() FROM 'pattern' | REGEXP_SUBSTR() |
JSON解析 | JSON_EXTRACT() | JSON_VALUE() | json_column->>'key' | JSON_TABLE() |
递归查询 | WITH RECURSIVE | WITH ... UNION ALL | WITH RECURSIVE | CONNECT BY |
时区处理 | CONVERT_TZ() | AT TIME ZONE | AT TIME ZONE | FROM_TZ() |
分区表 | PARTITION BY RANGE | PARTITION FUNCTION | | PARTITION BY RANGE |
列转行 | UNION ALL | UNPIVOT | UNNEST() | UNPIVOT |
错误处理 | DECLARE HANDLER | TRY/CATCH | EXCEPTION | EXCEPTION |
窗口函数 | | | | |
表空间 | | | | |
XML处理 | EXTRACTVALUE() | .nodes() | xpath() | XMLTABLE() |
Spatial索引 | | | | |
(表格可左右滚动)
说明:
- 技术完整性:包含SQL92/SQL:2011标准及主流数据库扩展
- 跨平台对比:覆盖MySQL、SQL Server、PostgreSQL、Oracle四大RDBMS差异
建议配合具体数据库官方文档使用,并定期关注SQL标准演进。
阅读原文:原文链接
该文章在 2025/9/1 12:07:27 编辑过