Homepage Ralf BürgerSSEWartung > SQL Ralf Bürger SSE SQL Inhaltsverzeichnis Index Vorseite Folgeseite  
 
 

"Denken ist die schwerste Arbeit, die es gibt.
  Deshalb beschäftigen sich auch nur Wenige damit."

(Henry Ford I.)

SQL

Fehler suchen ist das Eine, Fehler beheben das Andere. Den Fehler reproduzierbar zu machen, die Fehlerursache zu lokalisieren und den Fehler endgültig auszumerzen, ohne neue einzubauen, kann durchaus sehr schwierig sein. Für das Reproduzieren des Fehlers und die Lokalisierung der Ursache ist der Zustand der Maschine ein elementarer Aspekt. Der Zustand der Software beschreibt sich aus den aktuellen Einstellungen und den dauerhaft gespeicherten Daten. Oft können Sie Fehler im Entwicklungssystem nur reproduzieren, wenn Sie exakt den gleichen Datenstand fahren wie der Kunde im Echtsystem. Aus der Differenz kann sich bereits ein Hinweis auf die Ursache ergeben. Dazu müssen Sie sehr detailliert zu Fuß in den Daten wühlen können, was eine genaue SQL-Kenntnis voraussetzt.

Da Sie nicht immer den kompletten Echtdatenbestand vom Kunden bekommen dürfen und auch der Zugang zu den Echtdaten beim Kunden vor Ort oft sehr sensibel und daher äußerst kritisch ist und der Kontakt der Entwickler zu den Administratoren und Fachbereichen des Kunden wegen der oft sehr unterschiedlichen Auffassungen nicht immer einfach ist, muss hier ggf. der Consultant, DevLead (Entwicklungsleiter) oder gar der Projektleiter ran, also jemand, der mutig und bestimmt aber dennoch sensibel und rücksichtsvoll auftritt. Diese genannten Rollen schütteln aber die Anweisungen der Datenbankabfragesprache SQL oft nicht immer so locker aus dem Ärmel (und nur zu oft auch die Entwickler nicht!), so dass hier womöglich Unsicherheiten im "operativen doing" genau dann auftreten, wenn sie gerade mit beiden Armen bis zum Ellenbogen in den Daten stecken - das ist dann ungünstig!

Daher liste ich hier einige wichtige und immer wieder nötige Anweisungen als Gedankenstütze (ich schaue selbst oft auf dieser Seite nach, die ich vorher woanders auf meiner Website hatte), ohne hier Grundlagen oder Details zu SQL erläutern zu wollen. Kurse, Infos und Foren gibt es dazu nämlich schon reichlich im Internet, schließlich ist SQL mit das Älteste, was wir heute in der IT haben ([L21], [L22]).

SELECT Dept, AVG(Salary) FROM tblEmployee GROUP BY Dept HAVING AVG(Salary) > 20000 ORDER BY AVG(Salary) DESC
SELECT idContract, SignDate FROM tblContract WHERE idSaleGroup IN (SELECT id FROM tblSaleGroup WHERE Amount > 100000)
SELECT COUNT(*) FROM "table" WHERE id>5000 AND id<10000
SELECT COUNT(*) FROM tblA a, tblB b WHERE b.idA=a.id AND b.id NOT IN (SELECT DISTINCT idB FROM tblC WHERE ...);
SELECT COUNT(*),id FROM tblA WHERE idStatus < 3 GROUP BY id HAVING COUNT(*)>1;
SELECT MAX(id) FROM "table" WHERE id<5000
Dubletten: SELECT COUNT(id), "dubcolumn" FROM "table" GROUP BY "dubcolumn" HAVING COUNT(id)>1
Fehlende: SELECT id FROM tblA a WHERE NOT EXISTS (SELECT idA FROM tblB b WHERE a.id=b.idA);
SELECT TO_CHAR("column",'dd-mm-yy hh:mi:ss') FROM "table"
INSERT INTO tbl (id, Designation, Stamp) VALUES (1,'bla',TO_DATE('21.01.2003 14:54:02','dd.mm.yyyy hh24:mi:ss'))
INSERT INTO tblA a (id, ...) SELECT seqA.NEXTVAL, ... from tblB b WHERE ...

... WHERE "condition1" AND "condition2"
... WHERE "condition1" OR "condition2"
... WHERE "column" IN ("list-of-values")
... WHERE "column" NOT IN ("list-of-values")
... WHERE "column" BETWEEN "value1" AND "value2"
... WHERE "column" IS NOT NULL

UPDATE "table" SET "column1"="value1"[,"column2"="value2"...] WHERE "column" "operator" "value"
INSERT INTO "table" ("column1", ... "columnN") VALUES ("value1", ... "valueN")
DELETE FROM "table" WHERE "column" "operator" "value" [AND|OR "column" "operator" "value"]

CREATE TABLE "table" ("column1" "data type", "column2" "data type"...)
DROP TABLE "table"
ALTER TABLE "table" ADD CONSTRAINT "name" UNIQUE ("field")
ALTER TABLE "table" DROP COLUMN "column"
ALTER TABLE "table" ADD "column" "type" <-- NOT NULLs nur bei leerer Tabelle
ALTER TABLE "table" MODIFY ("column" NOT NULL)
ALTER TABLE "table" ADD (FOREIGN KEY ("column") REFERENCES "table")

Oracle-Zeugs:

DESC "table"
CREATE SEQUENCE "tablespace"."seqname" INCREMENT BY 1 START WITH 1 MAXVALUE 1.0E28 MINVALUE 1 NOCYCLE CACHE 20 NOORDER
SELECT "seqname".NEXTVAL FROM dual;
CREATE OR REPLACE TRIGGER "triggername" BEFORE INSERT ON "table" REFERENCING NEW AS new FOR EACH ROW
   BEGIN IF :new.id IS NULL THEN SELECT "seqname".NEXTVAL INTO :new.id FROM dual; END IF; END;
SELECT "column" FROM "table" WHERE ROWNUM=1

 

  Homepage Ralf Bürger Ralf Bürger SSE SQL Konventionen/Hilfe Änderungen/Neues Inhaltsverzeichnis Index Vorseite Folgeseite Seitenanfang