SQL Update-Anweisung - Beispielabfragen zum Aktualisieren von Tabellenwerten

SQL (ausgesprochen Seequel) steht für Structured Query Language. Es handelt sich um eine stark typisierte, statische Abfragesprache (Typen werden vor der Laufzeit überprüft), die erstmals 1974 erschien (woah, 46 Jahre alt!), Aber erst 1986 veröffentlicht wurde.  

Sie denken vielleicht, dass solch ein "altes" Werkzeug seine besten Tage hinter sich hat, aber Sie wären alles andere als korrekt. Im Jahr 2019 wurde SQL im Rahmen der Scale Grid DeveloperWeek-Umfrage von 60,5% der Befragten verwendet, während NoSQL nur von 39,5% der Befragten verwendet wurde.

Um klar zu sein, wurde die SQL-Kategorie in mehrere Unterkategorien unterteilt, darunter MySQL, PostgreSQL, SQL Server usw., während die NoSQL-Kategorie in Unterkategorien unterteilt wurde, die MongoDB, Cassandra usw. enthielten.

Selbst im Jahr 2017 war laut der Umfrage des Stack Overflow Developers die zweitbeliebteste Sprache SQL (direkt hinter JavaScript). 50% der 64.000 Befragten gaben an, dass sie SQL immer noch in irgendeiner Form verwenden.

Die Popularität ist zumindest teilweise auf die Einfachheit der Sprache zurückzuführen, auf die Tatsache, dass sie unter Berücksichtigung relationaler Daten erstellt wurde und sich als zuverlässig für das Suchen, Verbinden und Filtern von Daten erwiesen hat.

Es genügt zu sagen, dass SQL nicht nur lebendig und erfolgreich ist, sondern auch in der heutigen Entwicklergemeinschaft floriert.

Nun wollen wir sehen warum!

Die lustigen Teile

SQL Server ist die bevorzugte Variante von SQL, die ich für meine täglichen Aktivitäten bei der Arbeit verwende. Daher entsprechen die folgenden Beispiele diesen Standards.  

Eine Sache, die ich häufig mache, ist das Aktualisieren mehrerer Datensätze in einer Tabelle. Jetzt könnte ich diesen einen Datensatz gleichzeitig erstellen, aber SQL gibt uns die Möglichkeit, mehrere (bei Bedarf Tausende und Abertausende) Datensätze gleichzeitig über die UPDATEAnweisung zu aktualisieren .

Die UPDATEAnweisung kann verwendet werden, um eine einzelne Spalte, einen größeren Satz von Datensätzen (unter Verwendung von Bedingungen) und / oder die gesamte Tabelle in einer Datenbank zu aktualisieren. Die Bedingung (en) können ein Boolescher Wert, eine Zeichenfolgenprüfung oder eine mathematische Sequenz sein, die in einen Booleschen Wert aufgelöst wird (größer als, kleiner als usw.).

Während es von Geschmack zu Geschmack leicht variieren kann, lautet die allgemeine Syntax wie folgt:

UPDATEtable-name

SETcolumn-name = value[, column-name=value]

[WHEREcondition]

Die Klammern ([]) oben kennzeichnen optionale Ergänzungen zur Abfrage.  

*** Es ist sehr wichtig zu beachten, dass ohne WHEREBedingung ALLE Datensätze in der Tabelle aktualisiert werden, sobald Sie die Abfrage ausführen. ***

Beispielabfragen

Als unser Datensatz werde ich diese Tabelle mit dem Namen Work_Tickets verwenden :

SalesOrderNumWorkTicketNumKundennummerKundenkontaktKosten pro EinheitIn Rechnung gestelltParentLineKeyMenge_BestelltMenge_Versandt
000613560009311250[email protected]0,00Falsch07977712.00
000613570009321251[email protected]0,00Falsch085695196,50
000613580009331252[email protected]0,00Falsch08556917.50

Einfache Abfrage ohne Bedingungen

Hier ist eine sehr einfache Aktualisierungsabfrage, mit der alle UnitCostFelder in die Nummer geändert werden 131.6152:

UPDATE Work_Tickets

SET UnitCost = 131.6152

Beachten Sie, dass es keine WHEREKlausel gibt. Daher wird jede Zeile in der Tabelle aktualisiert und unser Datensatz sieht nun folgendermaßen aus:

SalesOrderNumWorkTicketNumKundennummerKundenkontaktKosten pro EinheitIn Rechnung gestelltParentLineKeyMenge_BestelltMenge_Versandt
000613560009311250[email protected]131,6152Falsch07977712.00
000613570009321251[email protected]131,6152Falsch085695196,50
000613580009331252[email protected]131,6152Falsch08556917.50

Einfache Abfragen mit Bedingung (en)

Hier ist eine einfache Abfrage mit einer Bedingungsanweisung:

UPDATE Work_Tickets

SET Billed = true

WHERE UnitCost 0.00

Diese Abfrage aktualisiert das BilledFeld so, dass es in jeder Zeile wahr ist, die der Bedingung UnitCostungleich 0 entspricht. Nachdem wir unsere Abfrage ausgeführt haben, sieht das Dataset folgendermaßen aus:

SalesOrderNumWorkTicketNumKundennummerKundenkontaktKosten pro EinheitIn Rechnung gestelltParentLineKeyMenge_BestelltMenge_Versandt
000613560009311250[email protected]131,6152Wahr07977712.00
000613570009321251[email protected]131,6152Wahr085695196,50
000613580009331252[email protected]131,6152Wahr08556917.50

Unten finden Sie eine Abfrage, bei der wir ParentLineKeydie Zeichenfolge 000134in die Zeichenfolge ändern , in der SalesOrderNumdie WorkTicketNumbeiden Zeichenfolgen mit den angegebenen Zeichenfolgen übereinstimmen.

UPDATE Work_Tickets

SET ParentLineKey = 000134

WHERE SalesOrderNum = 00061358 and WorkTicketNumber = 000933

Der 085569 im ParentLineKeyFeld wird also durch ersetzt, 000134und unser Datensatz sieht nun folgendermaßen aus:

SalesOrderNumWorkTicketNumKundennummerKundenkontaktKosten pro EinheitIn Rechnung gestelltParentLineKeyMenge_BestelltMenge_Versandt
000613560009311250[email protected]131,6152Wahr07977712.00
000613570009321251[email protected]131,6152Wahr085695196,50
000613580009331252[email protected]131,6152Wahr00013417.50

Mehrere Felder aktualisieren

Angenommen, Sie haben einen viel größeren Datensatz als den, den wir derzeit verwenden, und Sie müssen mehrere Felder aktualisieren.  

Es wäre mühsam und nervenaufreibend, sie mit verschiedenen Update-Anweisungen zu aktualisieren. Zum Glück ist es auch möglich, mehrere Felder gleichzeitig mit einer Update-Anweisung zu aktualisieren, solange wir die Spaltennamen durch ein Komma trennen:

UPDATE Work_Tickets

SET UnitCost = 129.8511, Qty_Ordered = 72, Qty_Shipped = 72

WHERE SalesOrderNum = 00061358

Und hier ist das Ergebnis mit den aktualisierten Feldern nach dem Ausführen der Abfrage:

SalesOrderNumWorkTicketNumKundennummerKundenkontaktKosten pro EinheitIn Rechnung gestelltParentLineKeyMenge_BestelltMenge_Versandt
000613560009311250[email protected]131,6152Wahr07977712.00
000613570009321251[email protected]131,6152Wahr085695196,50
000613580009331252[email protected]129,8511Wahr0001347272

Verwenden von Update in einer Unterabfrage

The above examples are perfect if you are working with one data source. However, most of your data will not be stored in a single table. That's where using UPDATE with multiple data sources comes in handy.

The syntax for updating a column/table changes a little if we want to bring in data from another table:

UPDATEtable-name

SETcolumn-name = (SELECT column name(s)

FROM table2-name

WHERE condition(s))

[WHEREcondition]

And here are the two tables we'll be using for this query - the Work_Tickets table:

SalesOrderNumWorkTicketNumCustomer_CodeCustomer_ContactUnitCostBilledParentLineKeyQty_OrderedQty_Shipped
000613560009311250[email protected]131.6152True07977712.00
000613570009321251[email protected]131.6152True085695196.50
000613580009331252[email protected]129.8511True0001347272

and the Customer_Info table :

NameIndustryCodeAddressCityDiscountPhoneNumberEmail
Wayne EnterprisesDefense,weaponry,aerospace,enginerringNULL1631 Dark Knight WayGotham19.755556614000[email protected]
Stark IndustriesDefense,weaponry,protection12515641 Iron DrUndisclosed19.739993126156[email protected]
Acme CorpComedy,laughter,animation125224569 Smiling StToon Town17.533216549877[email protected]

The UPDATE statement with a subquery looks like this:

UPDATE Customer_Info

SET Code = (SELECT Customer_Code

FROM Work_Tickets

WHERE Work_Tickets.Customer_Contact = Customer_Info.Email)

FROM Work_Tickets

WHERE Code IS NULL

This example will update the Code field on the Customer_Info table where the email address match from both tables. And this is what our Customer_Info table looks like now:

NameIndustryCodeAddressCityDiscountPhoneNumberEmail
Wayne EnterprisesDefense,weaponry,aerospace,enginerring12501631 Dark Knight WayGotham19.755556614000[email protected]
Stark IndustriesDefense,weaponry,protection12515641 Iron DrUndisclosed19.739993126156[email protected]
Acme CorpComedy,laughter,animation125224569 Smiling StToon Town17.533216549877[email protected]

Wrapping up

I hope this article has been helpful to you in understanding how the UPDATE statement works in SQL.

You're now ready to write your own SQL UPDATE statements like a champ! After you do, I'd love for you to share them with me on social media!

Don't forget to check out my blog where I frequently post articles about web development.

While you're there why not sign up for my newsletter? You can do that at the top right of the main blog page. I like to send out interesting articles (mine and others), resources, and tools for  developers every now and then.

If you have questions about this article or just in general my DMs are open – come say hi on Twitter or any of my other social media accounts which you can find below the newsletter sign up on the main page of my blog or on my profile here at fCC :)

Have an awesome day and happy coding, friend!