The Curious Engineer

All blogs / Databases

Modern SQL

modern-sql.com

SQL has evolved. Beyond the relational model. Discover it now.

Databases

Posts
183 from 15 Jun 2017 to 24 Jun 2026
Posting
monthly (9 in the last year)
Kind
personal blog
Feed
https://modern-sql.com/feed

2026 7

  1. Structured Primary Keys
  2. ORDER BY Has Come a Long Way
  3. Order-Equivalent OVER Clauses
  4. SQL Comments, Please!
  5. WITHOUT OVERLAPS Constraints
  6. F053, “OVERLAPS predicate”
  7. OVERLAPS (disambiguation)

2025 2

  1. Adieu Apache Derby, Welcome DuckDB
  2. GROUP BY ALL

2024 2

  1. … IS JSON [ARRAY|OBJECT|SCALAR]
  2. The ANY_VALUE(…) Aggregate Function

2023 1

  1. The Curious Case of the Aggregation Query

2020 2

  1. Blaze-Persistence: Use Modern SQL like native JPA
  2. Java & SQL, Stronger Together

2019 4

  1. My Interview in “The Art of PostgreSQL”
  2. Oracle DB 19c Improves JSON Standard Conformance
  3. PostgreSQL 11 Reestablishes Window Functions Leadership
  4. SQLite in 2018: A state of the art SQL dialect

2018 5

  1. What’s New in Oracle Database 18c
  2. What’s new in MariaDB 10.3
  3. PostgreSQL Standard SQL Gap Analysis
  4. One Giant Leap For SQL: MySQL 8.0 Released
  5. Standard SQL Features Where PostgreSQL Beats its Competitors

2017 1

  1. What’s New in SQL:2016

Undated 159

  1. T495,“Combined data change and retrieval”
  2. Modern SQL: Inaugural Post
  3. CRC-32 (Algorithm)
  4. CRC-32C (Algorithm, Castagnoli Polynom)
  5. E011-01, “INTEGER and SMALLINT data types (including all spellings)”
  6. E021-01, “CHARACTER data type (including all its spellings)”
  7. E021-02, “CHARACTER VARYING data type (including all its spellings)”
  8. E021-09, “TRIM function”
  9. E051-02, “GROUP BY clause”
  10. E051-04, “GROUP BY can contain columns not in <select list>”
  11. E051-06, “HAVING clause”
  12. E051-08, “Correlation names in the FROM clause”
  13. E051-09, “Rename columns in the FROM clause”
  14. E061-08, “EXISTS predicate”
  15. E071-03, “EXCEPT DISTINCT table operator”
  16. E121-02, “ORDER BY columns need not be in select list”
  17. E121-03, “Value expressions in ORDER BY clause”
  18. F261, “CASE expression”
  19. F262, “Extended CASE expression”
  20. F263, “Comma-separated predicates in simple CASE expression”
  21. F292, “UNIQUE null treatment”
  22. F302-01, “INTERSECT DISTINCT table operator” (renamed: F303)
  23. F302-02, “INTERSECT ALL table operator” (renamed: F305)
  24. F303, “INTERSECT DISTINCT table operator”
  25. F304, “EXCEPT ALL table operator”
  26. F305, “INTERSECT ALL table operator”
  27. F312, “MERGE statement”
  28. F313, “Enhanced MERGE statement”
  29. F314, “MERGE statement with DELETE branch”
  30. F421, “National character”
  31. F850, “Top-level <order by clause> in <query expression>”
  32. F851, “ORDER BY in subqueries”
  33. F855, “Nested ORDER BY in query expression”
  34. ID068, “The implicit large object length when large object length is omitted.”
  35. ID069, “The implicit character maximum length when character maximum length is omitted.”
  36. ID133, “The implicit null ordering when null ordering is not specified”
  37. IL042, “The maximum lengths for character string types and binary string types.”
  38. MD5 (Algorithm)
  39. SHA1 (Algorithm)
  40. SHA2-224 (Algorithm)
  41. SHA2-256 (Algorithm)
  42. SHA2-384 (Algorithm)
  43. SHA2-512 (Algorithm)
  44. T043, “Multiplier T”
  45. T044, “Multiplier P”
  46. T046, “CLOB data type”
  47. T054, “GREATEST and LEAST”
  48. T062, “Character length units”
  49. T071, “BIGINT data type”
  50. T081, “Optional string types maximum length”
  51. T121, “WITH (excluding RECURSIVE) in query expression”
  52. T122, “WITH (excluding RECURSIVE) in subquery”
  53. T131, “Recursive query”
  54. T151, “DISTINCT predicate”
  55. T152, “DISTINCT predicate with negation”
  56. T175, “Generated columns”
  57. T301, “Functional dependencies”
  58. T351, “Bracketed comments”
  59. T501, “Enhanced EXISTS predicate”
  60. T502, “Period predicates”
  61. T591, “UNIQUE constraints of possibly null columns”
  62. T611, “Elementary OLAP operations”
  63. T612, “Advanced OLAP operations”
  64. T614, “NTILE function”
  65. T615, “LEAD and LAG functions”
  66. T616, “Null treatment option for LEAD and LAG functions”
  67. T617, “FIRST_VALUE and LAST_VALUE functions”
  68. T620, “WINDOW clause: GROUPS option”
  69. T661, “Non-decimal integer literals”
  70. T662, “Underscores in numeric literals”
  71. T814, “Colon in JSON_OBJECT or JSON_OBJECTAGG”
  72. T821, “Basic SQL/JSON query operators”
  73. T822, “SQL/JSON: IS JSON WITH UNIQUE KEYS predicate”
  74. T833, “SQL/JSON path language: multiple subscripts”
  75. T851, “SQL/JSON: optional keywords for default syntax”
  76. BIGINT (column type)
  77. Bitwise xor (^, bitxor, ...)
  78. CASE … WHEN …, … (comma-separated)
  79. CASE … WHEN <OP> … (extended)
  80. CASE WHEN … (searched)
  81. CASE … WHEN … (simple)
  82. CAST(… AS BIGINT)
  83. CAST(… AS INT[EGER])
  84. CAST(… AS SMALLINT)
  85. COALESCE(…, …[, …]*)
  86. CUME_DIST()
  87. Cycle (recursion)
  88. DENSE_RANK()
  89. EXCEPT ALL (table operator)
  90. EXCEPT [DISTINCT] (table operator)
  91. Exception Join
  92. [not] exists (…)
  93. FIRST_VALUE(…) [RESPECT NULLS]
  94. FIRST_VALUE(…) IGNORE NULLS
  95. FIRST_VALUE(… IGNORE NULLS)
  96. FIRST_VALUE(…, 'IGNORE NULLS')
  97. GENERATED ALWAYS AS (…)
  98. GREATEST(), LEAST()
  99. HAS SUBSTRING (SQL/JSON Path Predicate)
  100. INTEGER and INT (column types)
  101. INTERSECT ALL (table operator)
  102. INTERSECT [DISTINCT] (table operator)
  103. IS DISTINCT FROM (null-safe not equals comparison)
  104. IS NOT DISTINCT FROM (null-safe equals comparison)
  105. IS (binary comparison)
  106. The ISJSON(…, <TYPE CONSTRAINT>) Function
  107. JSON_FLATTEN(…) unnest JSON arrays
  108. JSON_VALID(…)
  109. .KEYVALUE() (SQL/JSON Path Item Method)
  110. [LAST] (SQL/JSON Path Array Accessor)
  111. LAST_VALUE(…) [RESPECT NULLS]
  112. LAST_VALUE(…) IGNORE NULLS
  113. LAST_VALUE(… IGNORE NULLS)
  114. LAST_VALUE(…, 'IGNORE NULLS')
  115. Merge
  116. MINUS (table operator)
  117. MINUS ALL (table operator)
  118. [<E>, <E>, …] (SQL/JSON Path Array Accessor)
  119. NATURAL_SORT_KEY(<STRING>)
  120. NTILE()
  121. NULLIF(…, …)
  122. OVER() (empty OVER clause)
  123. OVER(… EXCLUDE CURRENT ROW)
  124. OVER(… EXCLUDE GROUP)
  125. OVER(… EXCLUDE NO OTHERS)
  126. OVER(… EXCLUDE TIES)
  127. OVER(… GROUPS BETWEEN …)
  128. OVER(ORDER BY …)
  129. OVER(PARTITION BY …)
  130. OVER(… RANGE BETWEEN …) (datetime)
  131. OVER(… RANGE BETWEEN …) (numeric)
  132. OVER(… ROWS BETWEEN …)
  133. PERCENT_RANK()
  134. QUALIFY clause (window functions)
  135. [… TO …] (SQL/JSON Path Array Accessor)
  136. Rank
  137. Rollup
  138. Row number
  139. Row number (without order by)
  140. Safe.parse json
  141. Search (recursion)
  142. Smallint (column type)
  143. Spaceship operator
  144. Trim
  145. Trim both from
  146. Trim char from
  147. Trim leading from
  148. Trim trailing from
  149. Unique nulls distinct
  150. Unique nulls not distinct
  151. Width bucket
  152. Window clause
  153. Window clause chained
  154. With (non recursive, top level)
  155. With (non recursive in subquery)
  156. With recursive (non linear)
  157. With recursive (top level)
  158. With recursive (union distinct)
  159. With recursive infinit loop guards