Einige allgemeine erweiterte SQL-Anweisungen in MySQL

Einige allgemeine erweiterte SQL-Anweisungen in MySQL

Erweiterte MySQL-SQL-Anweisungen

benutze kgc;
Tabelle „Standort“ erstellen (Region char(20), Store_Name char(20));
in Standortwerte einfügen ('Ost', 'Boston');
in Standortwerte einfügen ('Ost', 'New York');
in Standortwerte einfügen (,Westen‘,,Los Angeles‘);
in Standortwerte einfügen ('West', 'Houston'); 

Bildbeschreibung hier einfügen

Tabelle Store_Info erstellen (Store_Name char(20),sales int(10),Date char(10));
in Store_Info-Werte einfügen ('Los Angeles', '1500', '2020-12-05');
in Store_Info-Werte einfügen ('Houston', '250', '2020-12-07');
in Store_Info-Werte einfügen ('Los Angeles', '300', '2020-12-08');
in Store_Info-Werte einfügen ('Boston', '700', '2020-12-08'); 

Bildbeschreibung hier einfügen

WÄHLEN

---- SELECT ---- Zeigt alle Daten eines oder mehrerer Felder einer Tabelle an. Syntax: SELECT "Feld" FROM "Tabellenname";
WÄHLEN SIE Store_Name AUS Store_Info; 

Bildbeschreibung hier einfügen

UNTERSCHEIDBAR

---- DISTINCT ---- Keine doppelten Daten anzeigen Syntax: SELECT DISTINCT "Feld" FROM "Tabellenname";
Wählen Sie einen unterschiedlichen Store_Name aus Store_Info. 

Bildbeschreibung hier einfügen

WO

---- WHERE ---- Syntax für bedingte Abfragen: SELECT "Feld" FROM "Tabellenname" WHERE "Bedingung";
Wählen Sie Store_Name aus Store_Info, wobei Sales > 1000 ist. 

Bildbeschreibung hier einfügen

UND ODER

---- UND ODER ---- UND oder Syntax: SELECT "Feld" FROM "Tabellenname" WHERE "Bedingung 1" {[ANDIOR] "Bedingung 2"}+;
Wählen Sie Store_Name aus Store_Info, wobei Sales > 1000 oder (Sales < 500 und Sales > 200) lautet. 

Bildbeschreibung hier einfügen

IN

---- IN ---- Daten mit bekannten Werten anzeigen Syntax: SELECT "Feld" FROM "Tabellenname" WHERE "Feld" IN ('Wert1', 'Wert2', ...);
Wählen Sie * aus Store_Info, wo Store_Name in ('Los Angeles', 'Houston'); 

Bildbeschreibung hier einfügen

ZWISCHEN

---- ZWISCHEN ---- Zeigt Daten innerhalb von zwei Wertebereichen an. Syntax: SELECT "Feld" FROM "Tabellenname" WHERE "Feld" ZWISCHEN 'Wert 1' AND 'Wert 2';
SELECT * FROM Store_Info WHERE Datum ZWISCHEN ‚2020-12-06‘ UND ‚2020-12-10‘; 

Bildbeschreibung hier einfügen

Platzhalter

---- Platzhalter ---- Platzhalter werden normalerweise wie folgt verwendet: %: Das Prozentzeichen steht für null, ein oder mehrere Zeichen. _: Der Unterstrich steht für ein einzelnes Zeichen. 'A_Z': Alle Zeichenfolgen, die mit 'A' oder einem anderen Zeichen mit beliebigem Wert beginnen und mit 'Z' enden. Beispielsweise entsprechen sowohl „A.BZ“ als auch „A.22“ diesem Muster, „AKK2“ jedoch nicht (weil zwischen A und Z zwei Zeichen stehen und nicht nur eines).
‚ABC%‘: Alle Zeichenfolgen, die mit ‚ABC‘ beginnen. Beispielsweise entsprechen sowohl „ABCD“ als auch „ABCABC“ diesem Muster.
„%XYZ“: Alle Zeichenfolgen, die mit „XYZ“ enden. Beispielsweise entsprechen sowohl „WXYZ“ als auch „ZZXYZ“ diesem Muster.
„%AN%“: Alle Zeichenfolgen, die das Muster „AN“ enthalten. Beispielsweise passen sowohl „LOS ANGELES“ als auch „SAN FRANCISCO“ in dieses Muster.
‚_AN%‘: Alle Zeichenfolgen, deren zweiter Buchstabe ‚A‘ und deren dritter Buchstabe ‚N‘ ist. Beispielsweise passt „SAMN FRANCITSCO“ in dieses Muster, „LOS ANGELES“ jedoch nicht.
---- LIKE ---- Suchen Sie nach einem Muster, um die gewünschten Daten zu finden. Syntax: SELECT "Feld" FROM "Tabellenname" WHERE "Feld" LIKE {Muster};
SELECT * FROM Store_Info WHERE Store_Name wie '%os%';
---- ORDER BY ---- Sortieren nach Schlüsselwort Syntax: SELECT "Feld" FROM "Tabellenname" [WHERE "Bedingung"] ORDER BY "Feld" [ASC, DESC];
#ASC sortiert in aufsteigender Reihenfolge und ist die Standardsortiermethode.
#DESC sortiert in absteigender Reihenfolge.
Wählen Sie Store_Name, Sales, Date aus Store_Info aus und bestellen Sie nach Sales DESC. 

Bildbeschreibung hier einfügen

Funktion Mathematische Funktion

abs(x) #Gibt den Absolutwert von x zurück rand() #Gibt eine Zufallszahl zwischen 0 und 1 zurück mod(x,y) #Gibt den Rest nach der Division von x durch y zurück power(x,y) #Gibt x hoch y zurück round(x) #Gibt die Ganzzahl zurück, die x am nächsten liegt round(x,y) #Auf y Dezimalstellen in x gerundet sqrt(x) #Gibt die Quadratwurzel von x zurück truncate(x,y) #Gibt den auf y Dezimalstellen gekürzten Wert von x zurück ceil(×) #Gibt die kleinste Ganzzahl zurück, die größer oder gleich x ist floor(x) #Gibt die größte Ganzzahl zurück, die kleiner oder gleich x ist greatest(x1,x2...) #Gibt den größten Wert in einer Menge zurück least(x1,x2...) #Gibt den kleinsten Wert in einer Menge zurück SELECT abs(-1),rand(),mod(5,3),power(2,3),round(1.89);
Wählen Sie runden (1,8937,3), abschneiden (1,235,2), Decke (5,2), Boden (2,1), am wenigsten (1,89,3,6,1,2,1); 

Bildbeschreibung hier einfügen

Aggregatfunktionen

Aggregatfunktionen:
avg() #Gibt den Durchschnittswert der angegebenen Spalte zurück count() #Gibt die Anzahl der Nicht-NULL-Werte in der angegebenen Spalte zurück min() #Gibt den Mindestwert der angegebenen Spalte zurück max() #Gibt den Höchstwert der angegebenen Spalte zurück sum(x) #Gibt die Summe aller Werte in der angegebenen Spalte zurück SELECT avg(Sales) FROM Store_Info;

Wählen Sie Anzahl (Geschäftsname) aus Store_Info.
Wählen Sie Anzahl (DISTINCT Store_Name) aus Store_Info;

Wählen Sie max(Umsatz) aus Store_Info;
Wählen Sie min(Umsatz) aus Store_Info;

Wählen Sie Summe (Umsatz) aus Store_Info.

Wählen Sie Anzahl (DISTINCT Store_Name) aus Store_Info.
Wählen Sie Anzahl(*) aus Store_Info;
#count(*) zählt die Anzahl der Zeilen aller Spalten. Beim Zählen der Ergebnisse werden NULL-Spaltenwerte nicht ignoriert.
#count(Spaltenname) enthält nur die Anzahl der Zeilen im Spaltennamen. Beim Zählen der Ergebnisse werden Zeilen mit NULL-Spaltenwerten ignoriert. 

Bildbeschreibung hier einfügen

Zeichenfolgenfunktionen

Zeichenfolgenfunktionen:
trim() #Gibt den Wert ohne das angegebene Format zurück concat(x,y) #Verkettet die angegebenen Parameter x und y zu einem String substr(x,y) #Ruft den String beginnend an der y-ten Position im String x ab, was dieselbe Wirkung hat wie die Funktion substring() substr(x,y,z) #Ruft einen String der Länge z beginnend an der y-ten Position im String x ab length(x) #Gibt die Länge des Strings x zurück replace(x,y,z) #Ersetzt String y im String x durch String z
upper(x) #Ändert alle Buchstaben der Zeichenfolge x in Großbuchstaben lower(x) #Ändert alle Buchstaben der Zeichenfolge x in Kleinbuchstaben left(x,y) #Gibt die ersten y Zeichen der Zeichenfolge x zurück right(x,y) #Gibt die letzten y Zeichen der Zeichenfolge x zurück repeat(x,y) #Wiederholt die Zeichenfolge x y-mal space(x) #Gibt x Leerzeichen zurück strcmp (x,y) #Vergleicht x und y, der zurückgegebene Wert kann -1, 0, 1 sein
reverse(x) #Zeichenfolge x umkehren SELECT concat(Region,Store_Name) FROM Standort WHERE Store_Name = 'Boston';

#Wenn sql_mode und PIPES_AS_CONCAT eingeschaltet sind, wird „||“ als String-Verkettungsoperator und nicht als OR-Operator betrachtet, was der String-Verkettungsfunktion concat ähnelt. Dies ist die gleiche Methode, die in der Oracle-Datenbank verwendet wird. SELECT Region || ' ' || Store_Name FROM location WHERE Store_Name = 'Boston';

SELECT substr(Store_Name,3) FROM Standort WHERE Store_Name = 'Los Angeles';
SELECT substr(Store_Name,2,4) FROM Standort WHERE Store_Name = "New York";

SELECT TRIM ([ [Position] [zu entfernende Zeichenfolge] FROM ] Zeichenfolge);
#[Position]: Der Wert kann LEADING (Start), TRAILING (Ende) oder BOTH (Start und Ende) sein.
#[Zu entfernende Zeichenfolge]: Die Zeichenfolge, die vom Anfang, Ende oder beiden der Zeichenfolge entfernt werden soll. Der Standardwert ist ein Leerzeichen. SELECT TRIM(LEADING 'Ne' FROM 'New York');

Wählen Sie Region, Länge (Geschäftsname) aus Standort.

SELECT REPLACE(Region,'ast','astern')FROM Standort; 

Bildbeschreibung hier einfügen
Bildbeschreibung hier einfügen

---- GROUP BY ---- Fasst die Abfrageergebnisse der auf GROUP BY folgenden Spalten zusammen und gruppiert sie, normalerweise in Kombination mit Aggregatfunktionen. Für GROUP BY gilt ein Grundsatz: Unter allen Spalten nach SELECT müssen nach GROUP BY die Spalten erscheinen, die keine Aggregatfunktionen verwenden.

Syntax: SELECT "Spalte 1", SUM ("Spalte 2") FROM "Tabellenname" GROUP BY "Spalte 1";
Wählen Sie Store_Name, SUM(Sales) aus Store_Info GROUP BY Store_Name ORDER BY sales desc;

---- HAVING ---- wird verwendet, um den von der GROUP BY-Anweisung zurückgegebenen Datensatz zu filtern und wird normalerweise in Verbindung mit der GROUP BY-Anweisung verwendet. Die Existenz der HAVING-Anweisung gleicht den Mangel aus, dass das Schlüsselwort WHERE nicht in Verbindung mit Aggregatfunktionen verwendet werden kann. Wenn nur Funktionsspalten ausgewählt werden, ist keine GROUP BY-Klausel erforderlich.

Syntax: SELECT "Spalte 1", SUM ("Spalte 2") FROM "Tabellenname" GROUP BY "Spalte 1" HAVING (Funktionsbedingung);
Wählen Sie Store_Name, SUM(Sales) aus Store_Info aus und gruppieren Sie nach Store_Name mit SUM (Sales) > 1500.

---- Alias---- Feldalias Tabellenalias Syntax: SELECT "Tabellenalias"."Feld1" [AS] "Feldalias" FROM "Tabellenname" [AS] "Tabellenalias"
Wählen Sie A.Store_Name Store, SUM (A.Sales) "Gesamtumsatz" aus Store_Info A GROUP BY A.Store_Name;

---- Unterabfrage ---- Tabellen verbinden und eine weitere SQL-Anweisung in die WHERE-Klausel oder HAVING-Klausel einfügen. Syntax: SELECT "column1" FROM "table1" WHERE "column2" [Vergleichsoperator] #Äußere Abfrage (SELECT "column1" FROM "table2" WHERE "condition"); #Innere Abfrage kann ein symbolischer Operator sein, wie =, >, <, >=, <=; es kann auch ein Literaloperator sein, wie LIKE, IN, BETWEEN
SELECT SUM(Umsatz) FROM Store_Info WHERE Store_Name IN
(SELECT Store_Name FROM Standort WHERE Region = ‚West‘);

Wählen Sie SUM (A.Sales) aus Store_Info A, wo A.Store_Name in
(SELECT Store_Name FROM Standort B WHERE B.Store_Name = A.Store_Name); 

Bildbeschreibung hier einfügen

EXISTIERT

---- EXISTS ---- wird verwendet, um zu testen, ob die innere Abfrage Ergebnisse liefert, ähnlich wie bei einem Booleschen Wert, der wahr ist. Wenn ja, führt das System die SQL-Anweisung in der äußeren Abfrage aus. Andernfalls führt die gesamte SQL-Anweisung zu keinen Ergebnissen.
Syntax: SELECT "Feld 1" FROM "Tabelle 1" WHERE EXISTS (SELECT * FROM "Tabelle 2" WHERE "Bedingung");
Wählen Sie Summe (Umsatz) aus Store_Info, wobei „(Auswählen * aus Standort, wobei „Region = ‚West‘);“ 

Bildbeschreibung hier einfügen

Verbindungsabfrage

Standorttabelle

Bildbeschreibung hier einfügen

UPDATE Store_Info SET store_name='washington' WHERE sales=300;

Store_Info-Tabelle

Bildbeschreibung hier einfügen

Innerer Join: Gibt nur die Zeilen mit gleichen Verbindungsfeldern in zwei Tabellen zurück. Linker Join: Gibt alle Datensätze in der linken Tabelle und die Datensätze mit gleichen Verbindungsfeldern in der rechten Tabelle zurück. Rechter Join: Gibt alle Datensätze in der rechten Tabelle und die Datensätze mit gleichen Verbindungsfeldern in der linken Tabelle zurück. SELECT * FROM location A INNER JOIN Store_Info B on A.Store_Name = B.store_Name;

SELECT * FROM Standort A RIGHT JOIN Store_Info B auf A.Store_Name = B.Store_Name;

SELECT * FROM Standort A, Store_Info B WHERE A.Store_Name = B.Store_Name;

WÄHLEN SIE A.Region REGION,SUM(B.Umsatz) UMSATZ VON Standort A,Store_Info B
WO A.Store_Name = B.Store_Name GRUPPE NACH REGION; 

Bildbeschreibung hier einfügen

ANSICHT ERSTELLEN

---- ANSICHT ERSTELLEN ---- Ansichten können als virtuelle Tabellen oder gespeicherte Abfragen betrachtet werden.
Der Unterschied zwischen einer Ansicht und einer Tabelle besteht darin, dass in einer Tabelle tatsächlich Daten gespeichert werden, während eine Ansicht eine auf einer Tabelle aufbauende Struktur ist und selbst keine Daten speichert.
Temporäre Tabellen verschwinden automatisch, wenn der Benutzer die Datenbank verlässt oder die Verbindung trennt. Ansichten verschwinden jedoch nicht.
Eine Ansicht enthält keine Daten, sondern speichert nur deren Definition. Ihr Zweck besteht im Allgemeinen darin, komplexe Abfragen zu vereinfachen. Wenn Sie beispielsweise eine Join-Abfrage für mehrere Tabellen durchführen und dabei auch Operationen wie Statistiken und Sortierungen ausführen möchten, wäre das Schreiben von SQT-Anweisungen sehr mühsam. Die Verwendung einer Ansicht zum Verbinden mehrerer Tabellen und die anschließende Abfrage der Ansicht ist dasselbe wie das Abfragen einer Tabelle, was sehr praktisch ist.

Syntax: CREATE VIEW "Tabellenname anzeigen" AS "SELECT-Anweisung";
CREATE VIEW V_REGION_SALES AS SELECT A.Region REGION, SUM(B.Sales) SALES FROM Standort A
INNER JOIN Store_Info B ON A.Store_Name = B.Store_Name GROUP BY REGION;

Wählen Sie * aus V_REGION_SALES;
DROP VIEW V_REGION_SALES; 

Bildbeschreibung hier einfügen

UNION

---- UNION ---- Union, führt die Ergebnisse zweier SQL-Anweisungen zusammen, die von den beiden SQL-Anweisungen generierten Felder müssen vom gleichen Datentyp sein. UNION: Die generierten Datenwerte werden nicht wiederholt und in der Reihenfolge der Felder sortiert. Syntax: [SELECT-Anweisung 1] UNION [SELECT-Anweisung 2];

UNION ALL: Listet alle Datenwerte auf, die die Ergebnisse erzeugen, unabhängig davon, ob Duplikate vorhanden sind oder nicht. Syntax: [SELECT-Anweisung 1] UNION ALL [SELECT-Anweisung 2];

Wählen Sie Store_Name aus dem Standort aus. UNION Wählen Sie Store_Name aus dem Store_Info aus.

Wählen Sie Store_Name aus dem Standort UNION ALL aus. Wählen Sie Store_Name aus dem Store_Info; 

Bildbeschreibung hier einfügen

Schnittpunktwert

----- Schnittpunktwert---- Nehmen Sie die Schnittmenge der Ergebnisse zweier SQL-Anweisungen. SELECT A.Store_Name FROM Standort A INNER JOIN Store_Info B ON A.Store_Name = B.Store_Name;
Wählen Sie A.Store_Name aus dem Standort A INNER JOIN Store_Info B USING (Store_Name);

#Wenn eine der beiden Basistabellen keine angegebene Zeile hat und die andere Tabelle eine doppelte Zeile hat und es tatsächlich eine Schnittmenge gibt, verwenden Sie SELECT A.Store_Name FROM
(SELECT Store_Name FROM Standort UNION ALL SELECT Store_Name FROM Store_Info) A
GRUPPE NACH A.Store_Name MIT COUNT(*) > 1;

#Holen Sie sich die Schnittmenge der Ergebnisse zweier SQL-Anweisungen ohne Duplizierung SELECT A.Store_Name FRONM (SELECT B.Store_Name FROM location B INNER JOIN Store_Info C ON B.Store_Name = C.store_Name) A
GRUPPE NACH A.Store_Name;

SELECT DISTINCT A.Store_Name FROM Standort A INNER JOIN Store_Info B USING(Store_Name);

Wählen Sie DISTIMCT Store_Name aus dem Standort, wo (Store_Name) in (Wählen Sie Store_Name aus Store_Info);

Wählen Sie DISTINCT A.Store_Name aus dem Standort A LEFT JOIN Store_Info B USING (Store_Name), wobei B.Store_Name nicht NULL ist. 

Bildbeschreibung hier einfügen

Kein Schnittpunktwert

---- Keine Schnittpunkte ---- Zeigt die Ergebnisse der ersten SQL-Anweisung an. Es gibt keine Schnittpunkte mit den Ergebnissen der zweiten SQL-Anweisung und es gibt keine Duplizierung. SELECT DISTINCT Store_Name FROM location WHERE (Store_Name) NOT IN (SELECT Store_Name FROM Store_Info);

SELECT DISTINCT A.Store_Name FROM Standort A LEFT JOIN Store_Info B USING(Store_Name) WHERE B.Store_Name IS NULL; 

Bildbeschreibung hier einfügen

FALL

---- CASE ---- ist eine von SQL für die IF-THEN-ELSE-Logik verwendete Schlüsselwortsyntax:
SELECT CASE ("Feldname")
  WENN "Bedingung 1" DANN "Ergebnis 1"
  WENN „Bedingung 2“ DANN „Ergebnis 2“
  ...
  [SONST "Ergebnis N"]
  ENDE
VON "Tabellenname";

#"Bedingung" kann ein Wert oder eine Formel sein. Die ELSE-Klausel ist nicht erforderlich.

SELECT Store_Name, CASE Store_Name
  WENN 'Los Angeles' DANN Verkäufe * 2
  WENN „Boston“ DANN Verkäufe * 1,5
  ELSE Vertrieb
  ENDE
„Neue Verkäufe“,Datum
VON Store_Info;

#„Neue Verkäufe“ ist der Feldname, der für diese Spalte in CASE verwendet wird.

Tabelle erstellen Total_Sales (Name char(10),sales int(5));
INSERT INTO Total_Sales VALUES ('zhangsan',10);
INSERT INTO Total_Sales VALUES ('lisi',15);
INSERT INTO Total_Sales VALUES ('wangwu',20);
INSERT INTO Total_Sales VALUES ('zhaoliu',40);
INSERT INTO Total_Sales VALUES ('sunqi',50);
INSERT INTO Total_Sales VALUES ('zhouba',20);
INSERT INTO Total_Sales VALUES ('wujiu',30); 

Bildbeschreibung hier einfügen
Bildbeschreibung hier einfügen

1. Ranking berechnen

----Rangfolge berechnen----Tabelle selbst verknüpfen, dann die Ergebnisse der Reihe nach auflisten und die Anzahl der Zeilen vor jeder Zeile berechnen (einschließlich der Zeile selbst) SELECT A1.Name, A1.sales, COUNT(A2.sales) Rank FROM Total_sales A1,Total_sales A2
WO A1.Umsatz < A2.Umsatz 0R (A1.Umsatz = A2.Umsatz UND A1.Name = A2.Name)
GROUP BY A1.Name, A1.Umsatz ORDER BY A1.Umsatz DESC;

Zum Beispiel:
Wählen Sie A1.Name, A1.sales, count(A2.sales) Rang aus Total_Sales A1, Total_Sales A2, wobei A1.sales < A2.sales ODER (A1.sales=A2.sales und A1.Name=A2.Name) Gruppieren Sie nach A1.Name, sortieren Sie nach A1.sales absteigend;

erklären:
Wenn der Verkaufsfeldwert von A1 kleiner ist als der Verkaufsfeldwert von A2 oder wenn die Verkaufsfeldwerte der beiden Tabellen gleich sind und die Namensfeldwerte gleich sind,
Fragen Sie den Wert des Felds „Name“ von A1, den Wert des Felds „Sales“ von A1 und den Wert ungleich Null des Felds „Sales“ von A2 aus den Tabellen A1 und A2 ab. „rank“ ist ein Alias ​​und gruppiert das Feld „Name“ von A1. Sortieren Sie das Feld „Sales“ von A1 in absteigender Reihenfolge. 

Bildbeschreibung hier einfügen

2. Berechnen Sie den Median

---- Berechnen Sie den Median ----
Wählen Sie Verkäufe Mitte aus (wählen Sie A1.Name, A1.Sales, COUNT(A2.Sales) Rang aus Gesamtverkäufe A1, Gesamtverkäufe A2
WO A1.Umsatz < A2.Umsatz 0R (A1.Umsatz = A2.Umsatz UND A1.Name >= A2.Name)
GROUP BY A1.Name,A1.Sales ORDER BY A1.Sales DESC) A3
WO A3.Rank = (AUSWÄHLEN (ANZAHL(*)+1) DIV 2 AUS Gesamtumsatz);

Zum Beispiel:
Wählen Sie * aus (wählen Sie A1.Name, A1.Umsatz, Anzahl(A2.Umsatz) Rang aus Gesamtumsatz A1, Gesamtumsatz A2, wobei A1.Umsatz < A2.Umsatz ODER (A1.Umsatz=A2.Umsatz und A1.Name=A2.Name) Gruppieren nach A1.Name, Sortieren nach A1.Umsatz absteigend) A3, wobei A3.Rang = (wählen Sie (Anzahl(*)+1) DIV 2 aus Gesamtumsatz);

Wählen Sie den mittleren Umsatz aus (wählen Sie A1.Name, A1.Umsatz, Anzahl(A2.Umsatz) Rang aus Gesamtumsatz A1, Gesamtumsatz A2, wobei A1.Umsatz < A2.Umsatz ODER (A1.Umsatz=A2.Umsatz und A1.Name=A2.Name) Gruppieren nach A1.Name Sortieren nach A1.Umsatz absteigend) A3, wobei A3.Rang = (wählen Sie (Anzahl(*)+1) DIV 2 aus Gesamtumsatz);


#Jede abgeleitete Tabelle muss ihren eigenen Alias ​​haben, daher muss der Alias ​​A3 #DIV haben, das ist die Methode zur Berechnung des Quotienten in MySQL 

Bildbeschreibung hier einfügen

3. Berechnen Sie die kumulierte Summe

---- Kumulative Summen berechnen ---- Die Tabelle selbst verknüpfen, dann die Ergebnisse der Reihe nach auflisten und die Summe vor jeder Zeile berechnen (einschließlich der Zeile selbst) SELECT A1.Name, A1.Sales, SUM(A2.Sales) Sum_Total FROM Total_Sales A1, Total_Sales A2
WO A1.Umsatz < A2.Umsatz ODER (A1.Umsatz=A2.Umsatz UND A1.Name = A2.Name)
GROUP BY A1.Name,A1.Sales ORDER BY A1.Sales DESC;

Zum Beispiel:
Wählen Sie A1.*, Summe(A2.Umsatz) Summe_Umsatz aus Gesamtumsatz A1, Gesamtumsatz A2, wobei A1.Umsatz < A2.Umsatz oder (A1.Umsatz=A2.Umsatz und A1.Name=A2.Name), gruppieren Sie nach A1.Name, sortieren Sie nach A1.Umsatz, absteigend; 

Bildbeschreibung hier einfügen

4. Berechnen Sie den Gesamtprozentsatz

Zum Beispiel:
Wählen Sie A1.*, A1.sales/(Wählen Sie Summe(Umsatz) aus Gesamtumsatz) z_sum aus Gesamtumsatz A1, Gesamtumsatz A2, wobei A1.sales < A2.sales oder (A1.sales=A2.sales und A1.Name=A2.Name) Gruppieren Sie nach A1.Name;

#select sum(sales) from Total_Sales dient zum Berechnen der Summe der Feldwerte und anschließenden Teilen jeder Zeile durch die Summe, um den Prozentsatz der Summe für jede Zeile zu berechnen. 

Bildbeschreibung hier einfügen

5. Berechnen Sie den kumulierten Gesamtprozentsatz

Zum Beispiel:
Wählen Sie A1.Name, A1.Umsatz, Summe(A2.Umsatz), Summe(A2.Umsatz)/(Wählen Sie Summe(Umsatz) aus Gesamtumsatz) Z aus Gesamtumsatz A1, Gesamtumsatz A2, wobei A1.Umsatz < A2.Umsatz oder (A1.Umsatz=A2.Umsatz und A1.Name=A2.Name), gruppieren Sie nach A1.Name, sortieren Sie nach A1.Umsatz absteigend;

wähle A1.Name, A1.sales, Summe(A2.sales), TRUNCATE(Summe(A2.sales)/(wähle Summe(sales) aus Total_Sales), 2) ||'%' Z aus Total_Sales A1, Total_Sales A2, wobei A1.sales < A2.sales oder (A1.sales=A2.sales und A1.Name=A2.Name) gruppiere nach A1.Name, sortiere nach A1.sales absteigend; 

Bildbeschreibung hier einfügen

6. Der Unterschied zwischen Null und keinem Wert (' ')

1. Die Länge des Nichtwerts beträgt 0, was keinen Platz beansprucht, während die Länge des Nullwerts null ist und Platz beansprucht
2. IS NULL oder IS NOT NULL wird verwendet, um zu bestimmen, ob das Feld NULL ist oder nicht NULL. Es kann nicht bestimmen, ob es keinen Wert hat.
3. Verwenden Sie ='' oder <>'', um die Beurteilung „kein Wert“ zu verarbeiten. <> steht für ungleich
4. Wenn Sie die Anzahl der Zeilen in einem angegebenen Feld über count () zählen, werden NULL-Werte automatisch ignoriert und dem Datensatz zur Berechnung automatisch Nullwerte hinzugefügt
Zum Beispiel:
Tabelle SITE erstellen(site varchar(20));
in SITE-Werte einfügen („Nanjing“);
in SITE-Werte einfügen („Peking“);
in SITE-Werte einfügen('');
in SITE-Werte einfügen('taijin');
in SITE-Werte einfügen();
in SITE-Werte einfügen('');
wählen Sie * von SITE; 

Bildbeschreibung hier einfügen

Wählen Sie Länge (Site) von SITE;
Wählen Sie * von SITE, wobei Site NULL ist;
Wählen Sie * von SITE, wobei Site nicht NULL ist;
Wählen Sie * von SITE, wobei Site = '';
Wählen Sie * von SITE, wo Site <> ''; 

Bildbeschreibung hier einfügen

7. Regulärer Ausdruck (dasselbe wie Shell-Teil)

Übereinstimmungsmuster Beschreibung Beispiel ^ Entspricht dem Anfangszeichen des Textes '^bd' Entspricht einer Zeichenfolge, die mit bd beginnt $ Entspricht dem Endzeichen des Textes 'qn$' Entspricht einer Zeichenfolge, die mit qn endet. Entspricht jedem einzelnen Zeichen 'st' Entspricht jeder Zeichenfolge mit einem Zeichen zwischen s und t * Entspricht keinem oder mehreren der vorhergehenden Zeichen 'fo*t' Entspricht t, dem eine beliebige Anzahl von o vorangestellt ist
+ entspricht dem vorhergehenden Zeichen 1 oder mehr Mal. 'hom+' entspricht einem String, der mit ho beginnt, gefolgt von mindestens einem m. String entspricht einem String, der den angegebenen String enthält. 'clo' entspricht einem String, der clo enthält. p1|p2 entspricht p1 oder p2. 'bg|fg' entspricht bg oder fg.
[...] entspricht jedem Zeichen im Zeichensatz '[abc]' entspricht a oder b oder c
[^...] entspricht jedem Zeichen, das nicht in den Klammern steht. '[^ab]' entspricht einem String, der weder a noch b enthält. {n} entspricht dem vorherigen String n-mal. 'g{2}' entspricht einem String, der 2 gs enthält. {n,m} entspricht dem vorherigen String mindestens n-mal und höchstens m-mal. 'f{1,3}' entspricht f mindestens 1-mal und höchstens 3-mal.

Syntax: SELECT Feld FROM Tabellenname WHERE Feld REGEXP Übereinstimmungsmuster

Zum Beispiel:
Wählen Sie * aus Total_Sales, wobei Name regulärer Ausdruck '^[n]' ist;
Wählen Sie * aus Total_Sales, wobei Name regulärer Ausdruck '[n]' ist;
Wählen Sie * aus Total_Sales, wobei Name regulärer Ausdruck „Ho|Bo“ ist. 

Bildbeschreibung hier einfügen

8. Gespeicherte Prozedur (ähnlich der Shell-Funktion, Code-Wiederverwendung) Eine gespeicherte Prozedur ist eine Reihe von SQL-Anweisungen zum Ausführen einer bestimmten Funktion.

Bei der Verwendung einer gespeicherten Prozedur werden allgemeine oder komplexe Aufgaben vorab mit SQL-Anweisungen geschrieben und unter einem angegebenen Namen gespeichert. Dieser Vorgang wird kompiliert und optimiert und im Datenbankserver gespeichert. Wenn die gespeicherte Prozedur benötigt wird, muss sie nur noch aufgerufen werden. Die gespeicherte Prozedur ist in der Ausführung schneller und effizienter als herkömmliches SQL.
Vorteile gespeicherter Prozeduren
1. Nach einmaliger Ausführung wird der generierte Binärcode im Puffer gespeichert, um die Ausführungseffizienz zu verbessern
2. Eine Sammlung von SQL-Anweisungen plus Steueranweisungen, hochflexibel
3. Speichern Sie auf der Serverseite und reduzieren Sie die Netzwerklast, wenn der Client anruft
4. Kann wiederholt aufgerufen und jederzeit geändert werden, ohne den Clientaufruf zu beeinträchtigen
5. Alle Datenbankvorgänge können abgeschlossen und die Informationszugriffsrechte der Datenbank können ebenfalls gesteuert werden
Grammatik:
DELIMITER !! #Ändern Sie das Endsymbol der Anweisung vom Semikolon; um Probleme zu vermeiden, können Sie es vorübergehend anpassenCREATE PROCEDURE XXX() #Erstellen Sie eine gespeicherte Prozedur, passen Sie den Prozedurnamen an, () kann Parameter haben BEGIN #Der Prozedurkörper beginnt mit dem Schlüsselwort BEGIN select * from xxx; #Prozedurkörperanweisung END!! #Der Prozedurkörper endet mit dem Schlüsselwort ENDDELIMITER ; #Stellen Sie das Endsymbol der Anweisung auf ein Semikolon zurückcall XXX; #Rufen Sie eine gespeicherte Prozedur auf====Gespeicherte Prozedur anzeigen====
Prozedur zum Erstellen anzeigen [Datenbank.]Name der gespeicherten Prozedur; #Detaillierte Informationen zu einer gespeicherten Prozedur anzeigen Prozedur zum Erstellen anzeigen XXX;
Prozedurstatus anzeigen [wie '%XXX%'] \G
Zum Beispiel:
TRENNUNGSZEICHEN !!
PROZEDUR KIND1() ERSTELLEN
BEGINNEN
	Wählen Sie * aus Total_Sales;
ENDE!!

TRENNUNGSZEICHEN ;
Rufen Sie Art1 auf;

Prozedur zum Erstellen anzeigen KIND1\G
Prozedurstatus wie '%KIND1%' anzeigen\G 

Bildbeschreibung hier einfügen

Parameter der gespeicherten Prozedur:
IN Eingabeparameter, der angibt, dass der Aufrufer einen Wert an die Prozedur übergibt (der übergebene Wert kann ein Literal oder eine Variable sein)
OUT-Ausgabeparameter: Gibt an, dass die Prozedur einen Wert an den Anrufer übergibt (es können mehrere Werte zurückgegeben werden und der Ausgabewert kann nur eine Variable sein).
Zum Beispiel:
TRENNUNGSZEICHEN !!
ERSTELLEN SIE PROZEDUR KIND2 (IN Personen char (20))
BEGINNEN
	Wählen Sie * aus Total_Sales, wobei Name=Personen ist;                                                    
ENDE!!         

TRENNUNGSZEICHEN ;
CALL KIND2('lisi'); 

Bildbeschreibung hier einfügen

8.1. Bedingte Anweisungen in gespeicherten Prozeduren

Zum Beispiel:
TRENNUNGSZEICHEN !!
ERSTELLEN SIE PROZEDUR KIND7(IN num int(10))
BEGINNEN
Deklariere var int;
setze var=num*2;
wenn var>=10 dann
	Aktualisiere Total_Sales, setze Verkäufe=Verkäufe+1;
anders 
	Aktualisiere Total_Sales, setze Verkäufe=Verkäufe-1;
Ende wenn;
ENDE!!
TRENNUNGSZEICHEN ;

Rufen Sie KIND7 (5) auf;
Rufen Sie KIND7 (4) auf; 

Bildbeschreibung hier einfügen
Bildbeschreibung hier einfügen

8.2 While-Schleifenanweisung

Zum Beispiel:
Tabelle erstellen akg(id int);

TRENNUNGSZEICHEN !!
PROZEDUR KIND6() ERSTELLEN
BEGINNEN
Deklariere var int;
setze var=0;
während var<5
	in AKG-Werte (var) einfügen;
	setze var=var+1;
Ende während;
ENDE!!

TRENNUNGSZEICHEN ;
RUFEN SIE KIND6 AN;
wähle * aus akg; 

Bildbeschreibung hier einfügen

Dies ist das Ende dieses Artikels über erweiterte MySQL-SQL-Anweisungen. Weitere relevante erweiterte MySQL-SQL-Anweisungen finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • MySQL-Optimierung: So schreiben Sie hochwertige SQL-Anweisungen
  • Zusammenfassung der erweiterten MySQL-SQL-Anweisungen

<<:  CentOS 7.9 Installations- und Konfigurationsprozess von zabbix5.0.14

>>:  HTML-Versionsdeklaration DOCTYPE-Tag

Artikel empfehlen

Detaillierte Erklärung der drei Möglichkeiten zum Festlegen von Rahmen in HTML

Drei Möglichkeiten zum Festlegen von Rahmen in HT...

JavaScript-Grundlagen: Fehlererfassungsmechanismus

Inhaltsverzeichnis Vorwort Error-Objekt werfen ve...

Detailliertes Beispiel zum Erstellen und Löschen von Tabellen in MySQL

Der Befehl zur Tabellenerstellung erfordert: Der...

Detaillierte Erläuterung zum Einrichten des Ressourcencaches in Nginx

Ich wollte schon immer etwas über Caching lernen....

So legen Sie MySQL-Fremdschlüssel für Anfänger fest

Inhaltsverzeichnis Die Rolle von Fremdschlüsseln ...

JavaScript, um die Idee des Schlangenspiels umzusetzen

Die Implementierungsidee des Javascript-Spiels Sn...

Kompilieren Sie CPP-Dateien mit G++ in Ubuntu

Als ich die CPP-Datei zum ersten Mal mit G++ komp...

So löschen Sie die Validierungsaufforderung bei der Elementformularvalidierung

Inhaltsverzeichnis Problemszenario: Lösung: 1. Üb...

Detaillierte Erklärung der Lösung für verweigerte Berechtigungen in Linux

Zugriff verweigert: Der Grund hierfür ist: Es lie...