Auf welche SQL-Verbesserungen warten Sie?

Der Umgang mit SQL zeigt uns einige Einschränkungen und gibt uns die Möglichkeit, uns vorzustellen, was sein könnte.

Auf welche Verbesserungen von SQL warten Sie noch? Welches würdest du auf die Wunschliste setzen?

Ich denke, dass es nett sein kann, wenn Sie in Ihrer Antwort die database schreiben, die Ihre Feature-Anforderung fehlt.

Solutions Collecting From Web of "Auf welche SQL-Verbesserungen warten Sie?"

T-SQL-spezifisch: Eine anständige Methode zur Auswahl aus einer Ergebnismenge, die von einer gespeicherten Prozedur zurückgegeben wird und nicht in eine temporäre Tabelle eingefügt oder eine obskure function verwendet wird.

SELECT * FROM EXEC [master].[dbo].[xp_readerrorlog] 

Ich weiß, es ist völlig unrealistisch, aber ich wünschte, sie würden die Syntax von INSERT und UPDATE konsistent machen. Sprechen Sie über unnötige Nicht-Orthogonalität.

Operator zum Verwalten des datesbereichs (oder der Nummern):

 where interval(date0, date1) intersects interval(date3, date4) 

EDIT: date oder Zahlen sind natürlich gleich.

EDIT 2: Es scheint, Oracle haben etwas zu gehen, das undokumentierte OVERLAPS Prädikat. Mehr Infos hier .

Eine anständige Art, einen tree mit hierarchischen data zu führen. Oracle hat CONNECT BY aber die einfache und allgemeine Struktur des memoryns eines objects und eines selbstreferentiellen Joins zurück in die Tabelle für "Eltern" ist auf natürliche Weise schwer abzufragen.

Mehr SQL server als SQL, aber bessere Integration mit Source Control. Vorzugsweise SVN statt VSS.

Implizite Joins oder was es heißen soll (dh vordefinierte Views, die an die Tabellendefinition gebunden sind)

WÄHLEN SIE KUNDENID, SUM (C.ORDERS.LINES.VALUE) VON KUNDEN C

Ein Redesign der gesamten GROUP BY-Sache, so dass jeder Ausdruck in der SELECT-Klausel nicht in der GROUP BY-Klausel wiederholt werden muss

Etwas Unterstützung für Let Ausdrücke oder sonst legale Orte, um ein Alias ​​zu verwenden, ein bisschen mit dem GROUP BY Ding, aber ich finde andere Male, was ich hasse Oracle für mich zwingen, eine äußere select zu verwenden, nur um einen großen Ausdruck nach Alias ​​zu verweisen .

Ich würde gerne die Möglichkeit sehen, Reguläre Ausdrücke in der String-Handhabung zu verwenden.

Eine Methode zum dynamischen Angeben von Spalten / Tabellen, ohne auf die vollständige dynamische SQL zugreifen zu müssen, die in einem anderen Kontext ausgeführt wird.

Möglichkeit, Spalten basierend auf anderen Spalten ad infinitum zu definieren (einschließlich Disambiguierung).

Dies ist ein künstliches Beispiel und kein Fall der realen Welt, aber ich denke, du wirst sehen, wohin ich gehe:

 SELECT LTRIM(t1.a) AS [a.new] ,REPLICATE(' ', 20 - LEN([a.new])) + [a.new] AS [a.conformed] ,LEN([a.conformed]) as [a.length] FROM t1 INNER JOIN TABLE t2 ON [a.new] = t2.a ORDER BY [a.new] 

Anstatt von:

 SELECT LTRIM(t1.a) AS [a.new] ,REPLICATE(' ', 20 - LEN(LTRIM(t1.a))) + LTRIM(t1.a) AS [a.conformed] ,LEN(REPLICATE(' ', 20 - LEN(LTRIM(t1.a))) + LTRIM(t1.a)) as [a.length] FROM t1 INNER JOIN TABLE t2 ON LTRIM(t1.a) = t2.a ORDER BY LTRIM(t1.a) 

Jetzt, in SQL server 2005 und höher, würde ich ein CTE verwenden und in aufeinanderfolgenden Schichten aufbuild.

Ich möchte, dass die Anbieter ihr SQL tatsächlich standardisieren. Sie sind alle schuldig. Die LIMIT/OFFSET Klausel von MySQL und PostGresql ist eine gute Lösung, die niemand sonst zu tun scheint. Oracle hat eine eigene Syntax für explizite JOIN während alle anderen ANSI-92 verwenden. MySQL sollte die CONCAT() -function CONCAT() und || wie jeder andere. Und es gibt zahlreiche Klauseln und Aussagen, die außerhalb des Standards liegen und die weiter verbreitet sein könnten. MySQL REPLACE ist ein gutes Beispiel. Es gibt noch mehr, mit Fragen zum Casting und Vergleichen von Typen, Macken von Spaltentypen, Sequenzen usw. usw.

parametrisierte Reihenfolge von, wie in:

 select * from tableA order by @columName 

Unterstützung in SQL, um anzugeben, ob der Abfrageplan so optimiert werden soll, dass die ersten Zeilen schnell oder alle Zeilen schnell zurückgegeben werden.

Oracle hat das Konzept des FIRST_ROWS-Hinweises, aber ein Standardansatz in der Sprache wäre nützlich.

Automatische Denormalisierung

Aber ich träume vielleicht.

Verbesserte Pivot-Tabellen Ich würde es gerne anweisen, die Spalten automatisch anhand der in den data gefundenen Schlüssel zu erstellen.

Auf meiner Wunschliste steht eine database, die Unterabfragen in CHECK-Constraints unterstützt, ohne sich auf materialisierte Viewtricks verlassen zu müssen . Und eine database, die die "Assertions" des SQL-Standards unterstützt, dh Constraints, die sich über mehrere Tabellen erstrecken können.

Etwas anderes: Eine metadatenbezogene function, die die möglichen Werte einer gegebenen Spalte zurückgibt, wenn die Menge der möglichen Werte niedrig ist. Das heißt, wenn eine Spalte einen Fremdschlüssel zu einer anderen Spalte hat, würde sie die vorhandenen Werte in der Spalte zurückgeben, auf die Bezug genommen wird. Wenn die Spalte eine CHECK-Einschränkung wie "CHECK foo IN (1,2,3)" hat, würde sie 1,2,3 zurückgeben. Dies würde es einfacher machen, GUI-Elemente basierend auf einem Tabellenschema zu erstellen: Wenn die function eine list von zwei Werten zurückgibt, könnte der Programmierer entscheiden, dass ein Radio-Button-Widget relevant wäre – oder wenn die function z Anwendung zeigte stattdessen ein Dropdown-Widget. Etc.

UPSERT oder MERGE in PostgreSQL. Es ist das eine Feature, dessen Abwesenheit mich nur verwirrt. Postgres hat alles andere; Warum können sie ihre Handlungen nicht zusammenführen und umsetzen, selbst in begrenzter Form?

Überprüfen Sie Constraints mit Unterabfragen, ich meine etwas wie:

 CHECK ( 1 > (SELECT COUNT(*) FROM TABLE WHERE A = COLUMN)) 

Diese sind alle MS SQL server / T-SQL-spezifisch:

  1. "Natürliche" Joins basieren auf einer bestehenden Fremdschlüsselbeziehung.
  2. Verwenden Sie einfach ein gespeichertes Proc-Ergebnis als Ergebnismenge
  3. Einige andere loopskonstrukte neben while
  4. Eindeutige Einschränkungen für Nicht-NULL-Werte
  5. EXCEPT, IN, ALL-Klauseln statt LEFT | RIGHT JOIN, wo x [NOT] NULL ist
  6. Schema gebundener gespeicherter process (um # 2 zu erleichtern)
  7. Beziehungen, schemagebundene viewen usw. über mehrere databaseen hinweg

WITH Klausel für andere statementen als SELECT , bedeutet dies für UPDATE und DELETE .

Zum Beispiel:

 WITH table as ( SELECT ... ) DELETE from table2 where not exists (SELECT ...) 

Etwas, das ich REFERENCE JOIN nenne. Es verbindet zwei Tabellen miteinander, indem es die FOREIGN KEY … REFERENCES-Einschränkung zwischen ihnen implizit verwendet.

Eine relationale Algebra DIVIDE-Operator. Ich hasse es immer wieder zu überdenken, wie man alle Elemente der Tabelle a, die in Tabelle B gegeben sind, tut.

http://www.tc.umn.edu/~hause011/code/SQLexample.txt

String Agregation on Group von (In Oracle ist mit diesem Trick möglich ):

 SELECT deptno, string_agg(ename) AS employees FROM emp GROUP BY deptno; DEPTNO EMPLOYEES ---------- -------------------------------------------------- 10 CLARK,KING,MILLER 20 SMITH,FORD,ADAMS,SCOTT,JONES 30 ALLEN,BLAKE,MARTIN,TURNER,JAMES,WARD 

Weitere OOP-functionen:

  • gespeicherte Prozeduren und Benutzerfunktionen

    CREATE PROCEDURE tabellenname.spname (params) AS …

aufgerufen via

 EXECUTE spname FROM tablename WHERE conditions ORDER BY 

was implizit einen Cursor oder einen aktuellen datasatz an den SP übergibt. (ähnlich wie eingefügte und gelöschte Pseudotabellen)

  • Tabellendefinitionen mit inheritance

Tabellendefinition aus der Basistabelle abgeleitet, gemeinsame Spalten erbt etc

Btw, das ist nicht unbedingt echte OOP, sondern nur syntaktischer Zucker auf existierende Technologie, aber es würde die Entwicklung sehr vereinfachen.

Abstrakte Tabellen und Sub-Classing

 create abstract table person ( id primary key, name varchar(50) ); create table concretePerson extends person ( birth date, death date ); create table fictionalCharacter extends person ( creator int references concretePerson.id ); 

Erhöhte Unterstützung für temporäre databaseen in Sql server. Intervalle, Überlappungen usw.

Erhöhte OVER-Unterstützung in Sql server, einschließlich LAG, LEAD und TOP.

Arrays

Ich bin mir nicht sicher, was das zurückhält, aber das Fehlen von Arrays führt zu temporären Tabellen und damit verbundenen Unordnung.

Eine Art von UPGRADE-Tabelle, die es erlaubt , Änderungen an der Tabelle so vorzunehmen, dass sie wie folgt aussehen :

 CREATE OR UPGRADE TABLE ( a VARCHAR, --- ) 

Meine Wunschliste (für SQLserver)

  1. Möglichkeit, mehrere Ausführungspläne für eine gespeicherte Prozedur gleichzeitig zu speichern / zu verwenden und das System automatisch den besten gespeicherten Plan bei jeder Ausführung zu verstehen.

Derzeit gibt es einen Plan – wenn es nicht mehr optimal ist, wird es sowieso verwendet oder ein brandneues wird an seiner Stelle berechnet.

  1. Nativer UTF-8-memory

  2. databasespiegelung mit mehr als einem Standby-server und die Möglichkeit, ein Wiederherstellungsmodell zu verwenden, das sich "einfach" nähert, vorausgesetzt natürlich, dass alle server aktiv sind und die Transaktion überall festlegt.

  3. PCRE replace functionen

  4. Eine clevere Möglichkeit, Fragmente großer SQL-Abfragen, gespeicherte Match-Bedingungen, ausgewählte Bedingungen usw. wiederzuverwenden. Ähnlich wie functionen, aber tatsächlich eher wie Präprozessor-Makros implementiert.

Kommentare für Prüfbedingungen. Mit dieser function kann eine Anwendung (oder die database selbst, wenn ein Fehler auftritt) die Metadaten abfragen und diesen Kommentar abrufen, um ihn dem Benutzer anzuzeigen.

Automatisierte dba-Benachrichtigung für den Fall, dass der Optimierer einen Plan generiert, der sich vom Plan unterscheidet, mit dem die Abfrage getestet wurde.

Mit anderen Worten, jede Abfrage kann registriert werden. Zu dieser time ist der Plan gespeichert. Später, wenn die Abfrage ausgeführt wird, erhält der DBA bei einer Änderung des Plans eine Benachrichtigung, dass etwas unerwartetes aufgetreten ist.