Δήλωση ενημέρωσης SQL - Παραδείγματα ερωτημάτων για την ενημέρωση τιμών πίνακα

Το SQL (προφέρεται Seequel) σημαίνει Δομημένη Γλώσσα Ερωτημάτων. Είναι μια έντονα δακτυλογραφημένη, στατική (οι τύποι ελέγχονται πριν από το χρόνο εκτέλεσης) γλώσσα ερώτησης που εμφανίστηκε για πρώτη φορά το 1974 (woah, 46 ετών!), Αλλά δεν κυκλοφόρησε αρχικά μέχρι το 1986  

Ίσως να σκέφτεστε ότι ένα τέτοιο «παλιό» εργαλείο έχει τις καλύτερες μέρες πίσω του, αλλά θα απέχετε πολύ από το σωστό. Το 2019, μέσω της έρευνας Scale Grid DeveloperWeek, το SQL χρησιμοποιήθηκε από το 60,5% των ερωτηθέντων, ενώ το NoSQL χρησιμοποιήθηκε μόνο από το 39,5% των ερωτηθέντων.

Για να είμαστε σαφείς, η κατηγορία SQL χωρίστηκε σε διάφορες υποκατηγορίες που περιλάμβαναν MySQL, PostgreSQL, SQL Server και ούτω καθεξής, ενώ η κατηγορία NoSQL χωρίστηκε σε υποκατηγορίες που περιείχαν MongoDB, Cassandra κ.λπ.

Ακόμα και το 2017, σύμφωνα με την έρευνα Stack Overflow Developer's, η δεύτερη πιο δημοφιλής γλώσσα που χρησιμοποιήθηκε ήταν η SQL (ακριβώς πίσω από το JavaScript) με το 50% των 64.000 ερωτηθέντων να δηλώνουν ότι εξακολουθούν να χρησιμοποιούν SQL σε κάποια μορφή.

Η δημοτικότητά του οφείλεται, τουλάχιστον εν μέρει, στην απλότητα της γλώσσας, στο γεγονός ότι δημιουργήθηκε με γνώμονα τα σχετικά δεδομένα και επειδή αποδείχθηκε ότι είναι αξιόπιστο για αναζήτηση, συμμετοχή και φιλτράρισμα δεδομένων.

Αρκεί να πούμε ότι η SQL δεν είναι μόνο ζωντανή και κλοτσιές, αλλά ευδοκιμεί στη σημερινή αναπτυξιακή κοινότητα.

Τώρα ας δούμε γιατί!

Τα διασκεδαστικά μέρη

Ο SQL Server είναι η προτιμώμενη γεύση του SQL που χρησιμοποιώ στις καθημερινές μου δραστηριότητες στην εργασία, οπότε τα παρακάτω παραδείγματα θα συμμορφώνονται με αυτά τα πρότυπα.  

Ένα πράγμα που με κάνει να κάνω πολλά είναι η ενημέρωση πολλών εγγραφών σε έναν πίνακα. Τώρα θα μπορούσα να κάνω αυτήν την εγγραφή κάθε φορά, αλλά η SQL μας δίνει τη δυνατότητα να ενημερώσουμε ταυτόχρονα πολλαπλές (χιλιάδες χιλιάδες) εγγραφές μέσω της UPDATEδήλωσης.

Η UPDATEδήλωση μπορεί να χρησιμοποιηθεί για την ενημέρωση μίας στήλης, ενός μεγαλύτερου συνόλου εγγραφών (μέσω της χρήσης συνθηκών) ή / και ολόκληρου του πίνακα σε μια βάση δεδομένων. Οι συνθήκες μπορούν να είναι ένα boolean, ένας έλεγχος συμβολοσειράς ή μια μαθηματική ακολουθία που καταλήγει σε boolean (μεγαλύτερη από, μικρότερη από, κλπ.)

Ενώ μπορεί να διαφέρει ελαφρώς από γεύση σε γεύση, η γενική σύνταξη έχει ως εξής:

UPDATEtable-name

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

[WHEREcondition]

Οι αγκύλες ([]) παραπάνω δηλώνουν προαιρετικές προσθήκες στο ερώτημα.  

*** Είναι πολύ σημαντικό να σημειωθεί ότι χωρίς μια WHEREσυνθήκη, ΟΛΕΣ οι εγγραφές στον πίνακα θα ενημερωθούν μόλις εκτελέσετε το ερώτημα. ***

Παραδείγματα ερωτημάτων

Ως σύνολο δεδομένων μας, θα χρησιμοποιώ αυτόν τον πίνακα με την ονομασία Work_Tickets :

Αριθμός πωλήσεων WorkTicketNum Κωδικός πελάτη Επικοινωνία πελατών Κόστος μονάδας Με χρέωση ParentLineKey Qty_Ordered Ποσότητα_Αποστολή
00061356 000931 1250 [email protected] 0,00 Ψευδής 079777 12.0 0
00061357 000932 1251 [email protected] 0,00 Ψευδής 085695 196.5 0
00061358 000933 1252 [email protected] 0,00 Ψευδής 085569 17.5 0

Απλό ερώτημα χωρίς όρους

Εδώ είναι ένα πολύ απλό ερώτημα ενημέρωσης που θα αλλάξει όλα τα UnitCostπεδία στον αριθμό 131.6152:

UPDATE Work_Tickets

SET UnitCost = 131.6152

Λάβετε υπόψη ότι δεν υπάρχει WHEREρήτρα, επομένως κάθε γραμμή στον πίνακα θα ενημερωθεί και το σύνολο δεδομένων μας θα έχει τώρα την εξής μορφή:

Αριθμός πωλήσεων WorkTicketNum Κωδικός πελάτη Επικοινωνία πελατών Κόστος μονάδας Με χρέωση ParentLineKey Qty_Ordered Ποσότητα_Αποστολή
00061356 000931 1250 [email protected] 131.6152 Ψευδής 079777 12.0 0
00061357 000932 1251 [email protected] 131.6152 Ψευδής 085695 196.5 0
00061358 000933 1252 [email protected] 131.6152 Ψευδής 085569 17.5 0

Απλά ερωτήματα με συνθήκες

Ακολουθεί ένα απλό ερώτημα με μια δήλωση συνθήκης:

UPDATE Work_Tickets

SET Billed = true

WHERE UnitCost 0.00

Αυτό το ερώτημα θα ενημερώσει το Billedπεδίο ώστε να είναι αληθινό σε κάθε γραμμή που ταιριάζει με την κατάσταση του UnitCostμη ίσου με το 0. Αφού εκτελέσουμε το ερώτημά μας, το σύνολο δεδομένων θα μοιάζει με αυτό:

Αριθμός πωλήσεων WorkTicketNum Κωδικός πελάτη Επικοινωνία πελατών Κόστος μονάδας Με χρέωση ParentLineKey Qty_Ordered Ποσότητα_Αποστολή
00061356 000931 1250 [email protected] 131.6152 Αληθής 079777 12.0 0
00061357 000932 1251 [email protected] 131.6152 Αληθής 085695 196.5 0
00061358 000933 1252 [email protected] 131.6152 Αληθής 085569 17.5 0

Ακολουθεί ένα ερώτημα όπου αλλάζουμε τη ParentLineKeyσυμβολοσειρά 000134όπου τα SalesOrderNumκαι τα WorkTicketNumδύο ταιριάζουν με τις δεδομένες χορδές.

UPDATE Work_Tickets

SET ParentLineKey = 000134

WHERE SalesOrderNum = 00061358 and WorkTicketNumber = 000933

Έτσι, το 085569 στο ParentLineKeyπεδίο θα αντικατασταθεί με 000134και το σύνολο δεδομένων μας μοιάζει τώρα με αυτό:

Αριθμός πωλήσεων WorkTicketNum Κωδικός πελάτη Επικοινωνία πελατών Κόστος μονάδας Με χρέωση ParentLineKey Qty_Ordered Ποσότητα_Αποστολή
00061356 000931 1250 [email protected] 131.6152 Αληθής 079777 12.0 0
00061357 000932 1251 [email protected] 131.6152 Αληθής 085695 196.5 0
00061358 000933 1252 [email protected] 131.6152 Αληθής 000134 17.5 0

Ενημέρωση πολλαπλών πεδίων

Ας υποθέσουμε ότι έχετε πολύ μεγαλύτερο σύνολο δεδομένων από αυτό που χρησιμοποιούμε αυτήν τη στιγμή και έχετε πολλά πεδία για ενημέρωση.  

Θα ήταν κουραστικό και εντυπωσιακό να τα ενημερώσετε με διαφορετικές δηλώσεις ενημέρωσης. Ευτυχώς για εμάς είναι επίσης δυνατό να ενημερώσετε πολλά πεδία ταυτόχρονα με μια δήλωση ενημέρωσης, αρκεί να διαχωρίζουμε τα ονόματα των στηλών με κόμμα:

UPDATE Work_Tickets

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

WHERE SalesOrderNum = 00061358

Και εδώ είναι το αποτέλεσμα με τα ενημερωμένα πεδία μετά την εκτέλεση του ερωτήματος:

Αριθμός πωλήσεων WorkTicketNum Κωδικός πελάτη Επικοινωνία πελατών Κόστος μονάδας Με χρέωση ParentLineKey Qty_Ordered Ποσότητα_Αποστολή
00061356 000931 1250 [email protected] 131.6152 Αληθής 079777 12.0 0
00061357 000932 1251 [email protected] 131.6152 Αληθής 085695 196.5 0
00061358 000933 1252 [email protected] 129.8511 Αληθής 000134 72 72

Χρήση της ενημέρωσης σε ένα υποερώτημα

Τα παραπάνω παραδείγματα είναι τέλεια εάν εργάζεστε με μία πηγή δεδομένων. Ωστόσο, τα περισσότερα από τα δεδομένα σας δεν θα αποθηκευτούν σε έναν μόνο πίνακα. Εκεί είναι χρήσιμο να χρησιμοποιήσετε την ΕΝΗΜΕΡΩΣΗ με πολλές πηγές δεδομένων.

Η σύνταξη για την ενημέρωση μιας στήλης / πίνακα αλλάζει λίγο εάν θέλουμε να φέρουμε δεδομένα από έναν άλλο πίνακα:

UPDATEtable-name

SETcolumn-name = (SELECT column name(s)

FROM table2-name

WHERE condition(s))

[WHEREcondition]

Και εδώ είναι οι δύο πίνακες που θα χρησιμοποιήσουμε για αυτό το ερώτημα - ο πίνακας Work_Tickets:

Αριθμός πωλήσεων WorkTicketNum Κωδικός πελάτη Επικοινωνία πελατών Κόστος μονάδας Με χρέωση ParentLineKey Qty_Ordered Ποσότητα_Αποστολή
00061356 000931 1250 [email protected] 131.6152 Αληθής 079777 12.0 0
00061357 000932 1251 [email protected] 131.6152 Αληθής 085695 196.5 0
00061358 000933 1252 [email protected] 129.8511 Αληθής 000134 72 72

και τον πίνακα Customer_Info:

Ονομα Βιομηχανία Κώδικας Διεύθυνση Πόλη Εκπτωση Τηλεφωνικό νούμερο ΗΛΕΚΤΡΟΝΙΚΗ ΔΙΕΥΘΥΝΣΗ
Wayne Επιχειρήσεις Άμυνα, όπλα, αεροδιαστημική, μηχανική ΜΗΔΕΝΙΚΟ 1631 Dark Knight Way Γκόταμ 19.75 5556614000 [email protected]
Stark Industries Άμυνα, όπλα, προστασία 1251 5641 Iron Dr Μυστικός 19.73 9993126156 [email protected]
Η Acme Corp Κωμωδία, γέλιο, κινούμενα σχέδια 1252 24569 Χαμογελαστά Αγ Toon Town 17.53 3216549877 [email protected]

Η UPDATEδήλωση με ένα ερώτημα μοιάζει με αυτό:

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

Αυτό το παράδειγμα θα ενημερώσει το πεδίο Κωδικός στον πίνακα Customer_Info όπου η διεύθυνση email αντιστοιχεί και στους δύο πίνακες. Και έτσι φαίνεται ο πίνακας Customer_Info :

Ονομα Βιομηχανία Κώδικας Διεύθυνση Πόλη Εκπτωση Τηλεφωνικό νούμερο ΗΛΕΚΤΡΟΝΙΚΗ ΔΙΕΥΘΥΝΣΗ
Wayne Επιχειρήσεις Άμυνα, όπλα, αεροδιαστημική, μηχανική 1250 1631 Dark Knight Way Γκόταμ 19.75 5556614000 [email protected]
Stark Industries Άμυνα, όπλα, προστασία 1251 5641 Iron Dr Μυστικός 19.73 9993126156 [email protected]
Η Acme Corp Κωμωδία, γέλιο, κινούμενα σχέδια 1252 24569 Χαμογελαστά Αγ Toon Town 17.53 3216549877 [email protected]

Τυλίγοντας

Ελπίζω ότι αυτό το άρθρο σας βοήθησε στην κατανόηση του τρόπου λειτουργίας της δήλωσης ΕΝΗΜΕΡΩΣΗΣ στο SQL.

Τώρα είστε έτοιμοι να γράψετε τις δικές σας δηλώσεις SQL UPDATE σαν πρωταθλητής! Αφού το κάνετε, θα ήθελα πολύ να τα μοιραστείτε μαζί μου στα κοινωνικά μέσα!

Μην ξεχάσετε να ρίξετε μια ματιά στο ιστολόγιό μου όπου δημοσιεύω συχνά άρθρα σχετικά με την ανάπτυξη ιστού.

Ενώ είστε εκεί γιατί να μην εγγραφείτε στο ενημερωτικό δελτίο μου; Μπορείτε να το κάνετε στην επάνω δεξιά γωνία της κύριας σελίδας ιστολογίου. Μου αρέσει να στέλνω ενδιαφέροντα άρθρα (δικά μου και άλλα), πόρους και εργαλεία για προγραμματιστές κάθε τόσο.

Εάν έχετε ερωτήσεις σχετικά με αυτό το άρθρο ή γενικά τα DM μου είναι ανοιχτά - έλα γεια στο Twitter ή σε οποιονδήποτε από τους άλλους λογαριασμούς μου στα μέσα κοινωνικής δικτύωσης που μπορείτε να βρείτε κάτω από το ενημερωτικό δελτίο εγγραφείτε στην κύρια σελίδα του ιστολογίου μου ή στο προφίλ μου εδώ στο fCC :)

Καλή μέρα και καλή κωδικοποίηση, φίλε!