Εισαγωγή στη σύνταξη. Δήλωση SQL INSERT INTO SELECT. Παραδείγματα ερωτήματος sql INSERT INTO σε μια βάση δεδομένων MySQL

Χρησιμοποιώντας SQL, μπορείτε να αντιγράψετε πληροφορίες από έναν πίνακα σε άλλο.

Η πρόταση INSERT INTO SELECT αντιγράφει δεδομένα από έναν πίνακα και τα εισάγει σε έναν υπάρχοντα πίνακα.

Δήλωση SQL INSERT INTO SELECT,

Η πρόταση INSERT INTO SELECT επιλέγει δεδομένα από έναν πίνακα και τα εισάγει σε έναν υπάρχοντα πίνακα. Τυχόν υπάρχουσες σειρές στον πίνακα προορισμού δεν αλλάζουν.

SQL INSERT INTO SELECT, Σύνταξη

Μπορούμε να αντιγράψουμε όλες τις στήλες από τον έναν πίνακα στον άλλο, υπάρχοντα πίνακα:

ΕΙΣΑΓΩΓΗ ΣΤΟ πίνακας 2
ΕΠΙΛΟΓΗ * ΑΠΟ Τραπέζι 1;

Ή μπορούμε να αντιγράψουμε μόνο τις στήλες που θέλουμε σε έναν άλλο υπάρχοντα πίνακα:

ΕΙΣΑΓΩΓΗ ΣΤΟ πίνακας 2
(όνομα_στήλης)
ΕΠΙΛΕΓΩ όνομα(α) στήλης
ΑΠΟ Τραπέζι 1;

Επίδειξη έκδοσης της βάσης δεδομένων

Σε αυτό το σεμινάριο θα χρησιμοποιήσουμε τη γνωστή βάση δεδομένων Northwind.

Ακολουθεί μια επιλογή από τον πίνακα "Πελάτες":

ταυτότητα χρήστηΌνομα πελάτηΤο άτομο επικοινωνίαςΔιεύθυνσηπόληΤΑΧΥΔΡΟΜΙΚΟΣ ΚΩΔΙΚΟΣΜια χώρα
1 Alfreds Futterkiste Μαρία Άντερς Obere Str. 57 Βερολίνο 12209 Γερμανία
2 Ana Trujillo Emparedados y helados Άνα Τρουχίγιο Avda. de la Constitucion 2222 Μεξικό D.F. 05021 Μεξικό
3 Antonio Moreno Taqueria Αντόνιο Μορένο Ματάδερος 2312 Μεξικό D.F. 05023 Μεξικό

Και η επιλογή από τον πίνακα "Προμηθευτές":

SQL INSERT INTO SELECT, Παραδείγματα

Αντιγραφή μόνο μερικών στηλών από "Προμηθευτές" σε "Πελάτες":

Αντιγραφή μόνο Γερμανών προμηθευτών στους «Πελάτες».

Το ερώτημα sql INSERT INTO έχει νόημα όταν έχει δημιουργηθεί ένας πίνακας βάσης δεδομένων. Δηλαδή, ο πίνακας υπάρχει, έχει όνομα, δημιουργεί γραμμές και στήλες. ο πίνακας δημιουργείται από τον τελεστή: , ο πίνακας τροποποιείται από τον τελεστή .

sql ερώτημα INSERT INTO - σύνταξη ερωτήματος

Το ερώτημα sql INSERT INTO έχει την ακόλουθη σύνταξη:

INSERT INTO table_name (σε παρένθεση, εάν χρειάζεται, εισαγάγετε μια λίστα στηλών όπου θέλετε να εισαγάγετε δεδομένα) VALUES εισαγόμενα δεδομένα1, εισαγωγή δεδομένων2, εισαγόμενα δεδομένα3.

Μπορείτε να εισαγάγετε μια επιλογή IGNORE μεταξύ INSERT και INTRO. Δεν απαιτείται. Απαιτείται για την προστασία των πρωτευόντων κλειδιών κατά την επεξεργασία ενός πίνακα. Διαφορετικά, εάν συμβεί διπλασιασμός των πρωτευόντων κλειδιών κατά την επεξεργασία, τότε κατά την εισαγωγή της επιλογής IGNORE, η πρώτη σειρά με το πρωτεύον κλειδί θα παραμείνει στον πίνακα που επεξεργάζεται.Τα άλλα κύρια κλειδιά θα διαγραφούν. Από προεπιλογή, παραλείπουμε αυτήν την επιλογή.

Υπάρχουν προαιρετικές επιλογές LOW_PRIORITY και DELAYED. Καθορίζουν τις προτεραιότητες για την προσθήκη πληροφοριών στη βάση δεδομένων. Το πρώτο καθορίζει την αναμονή για την κυκλοφορία της βάσης δεδομένων, το δεύτερο σημαίνει την αποθήκευση πληροφοριών στην προσωρινή μνήμη.

Η γραμμή στο ερώτημα: INSERT με τη φράση VALUES θα σας επιτρέψει να προσθέσετε μία μόνο γραμμή στον πίνακα της βάσης δεδομένων. Η ρήτρα VALUES περιέχει τις τιμές αυτών των δεδομένων.

Μπορούν να καθοριστούν υποερωτήματα αντί για τη φράση VALUES. Το INSERT με ένα δευτερεύον ερώτημα προσθέτει τις σειρές που επιστρέφονται από το υποερώτημα στον πίνακα. Ο διακομιστής βάσης δεδομένων επεξεργάζεται το υποερώτημα και εισάγει όλες τις επιστρεφόμενες σειρές στον πίνακα. Ο διακομιστής δεν εισάγει σειρές εκτός εάν τις επιλέξει το δευτερεύον ερώτημα.

  • subquery_1 - ένα δευτερεύον ερώτημα που επεξεργάζεται ο διακομιστής με τον ίδιο τρόπο όπως η προβολή
  • Το subquery_2 είναι ένα δευτερεύον ερώτημα που επιστρέφει σειρές που έχουν εισαχθεί στον πίνακα. Η λίστα αυτού του υποερωτήματος πρέπει να έχει τον ίδιο αριθμό στηλών με τη λίστα στηλών INSERT.

Τα δευτερεύοντα ερωτήματα πρακτικά δεν χρησιμοποιούνται σε μια βάση δεδομένων MySQL.

Παραδείγματα ερωτήματος sql INSERT INTO σε μια βάση δεδομένων MySQL

Εισάγουμε νέες σειρές στη βάση δεδομένων MySQL χρησιμοποιώντας την εντολή INSERT INTRO.

Πρώτο παράδειγμα.

Εισαγάγετε νέες σειρές στον πίνακα_όνομα πίνακα.

INSERT INTO table_name VALUES ('2','145','1','name');

Αυτό σημαίνει ότι θέλουμε να εισαγάγουμε τις τιμές 2,145,1, name στις στήλες του πίνακα table_name. Δεδομένου ότι οι στήλες δεν καθορίζονται, οι τιμές συμπληρώνονται σε όλες τις στήλες του πίνακα.

Παράδειγμα δύο.

Εισαγάγετε πληροφορίες στις απαιτούμενες (καθορισμένες) στήλες του πίνακα όνομα_τραπέζης.

INSERT INTO table_name (client_customer, client_subclient, client_mail) VALUES ('name1','subname1',' [email προστατευμένο]"), ("όνομα2", "υποόνομα2"," [email προστατευμένο]"), ("όνομα 3", "υποόνομα 3", (" [email προστατευμένο]′);

Ο Igor Serov ειδικά για τον ιστότοπο "".

Τελευταία ενημέρωση: 13/07/2017

Για να προσθέσετε δεδομένα, χρησιμοποιήστε την εντολή INSERT, η οποία έχει την ακόλουθη επίσημη σύνταξη:

INSERT table_name [(column_list)] VALUES (τιμή1, τιμή2, ... τιμήN)

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

Για παράδειγμα, ας υποθέσουμε ότι η ακόλουθη βάση δεδομένων είχε δημιουργηθεί προηγουμένως:

ΔΗΜΙΟΥΡΓΙΑ ΒΑΣΗΣ ΔΕΔΟΜΕΝΩΝ productsdb; GO USE productsdb; ΔΗΜΙΟΥΡΓΙΑ ΠΙΝΑΚΑ προϊόντων (Αναγνωριστικό INT IDENTITY PRIMARY KEY, Όνομα προϊόντος NVARCHAR(30) NOT NULL, Κατασκευαστής NVARCHAR(20) NOT NULL, ProductCount INT ΠΡΟΕΠΙΛΟΓΗ 0, Τιμή ΧΡΗΜΑ ΟΧΙ NULL)

Ας προσθέσουμε μια γραμμή σε αυτήν χρησιμοποιώντας την εντολή INSERT:

INSERT Products VALUES ("iPhone 7", "Apple", 5, 52000)

Μετά την επιτυχή εκτέλεση στο SQL Server Management Studio, στο πεδίο μηνύματος θα πρέπει να εμφανιστεί το μήνυμα "1 γραμμή(ες) επηρεάζεται:

Αξίζει να ληφθεί υπόψη ότι οι τιμές για τις στήλες σε παρένθεση μετά τη λέξη-κλειδί VALUES μεταβιβάζονται με τη σειρά με την οποία δηλώνονται. Για παράδειγμα, στην παραπάνω δήλωση CREATE TABLE, μπορείτε να δείτε ότι η πρώτη στήλη είναι Id. Αλλά επειδή το χαρακτηριστικό IDENTITY έχει καθοριστεί για αυτό, η τιμή αυτής της στήλης δημιουργείται αυτόματα και μπορεί να παραλειφθεί. Η δεύτερη στήλη αντιπροσωπεύει το Όνομα προϊόντος, επομένως η πρώτη τιμή, η συμβολοσειρά "iPhone 7", θα μεταβιβαστεί σε αυτήν τη στήλη. Η δεύτερη τιμή - η συμβολοσειρά "Apple" θα μεταβιβαστεί στην τρίτη στήλη Κατασκευαστής και ούτω καθεξής. Δηλαδή, οι τιμές μεταβιβάζονται στις στήλες ως εξής:

    Όνομα προϊόντος: "iPhone 7"

    Κατασκευαστής: "Apple"

Επίσης, κατά την εισαγωγή τιμών, μπορείτε να καθορίσετε τις άμεσες στήλες στις οποίες θα προστεθούν οι τιμές:

INSERT INTO Προϊόντα (Όνομα προϊόντος, Τιμή, Κατασκευαστής) ΤΙΜΕΣ ("iPhone 6S", 41000, "Apple")

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

    Όνομα προϊόντος: "iPhone 6S"

    Κατασκευαστής: "Apple"

Για μη καθορισμένες στήλες (σε αυτήν την περίπτωση ProductCount), θα προστεθεί μια προεπιλεγμένη τιμή εάν έχει καθοριστεί το χαρακτηριστικό DEFAULT ή μια τιμή NULL. Ωστόσο, οι μη καθορισμένες στήλες πρέπει να είναι μηδενικές ή να έχουν ένα χαρακτηριστικό ΠΡΟΕΠΙΛΟΓΗ.

Μπορούμε επίσης να προσθέσουμε πολλές γραμμές ταυτόχρονα:

INSERT INTO Products VALUES ("iPhone 6", "Apple", 3, 36000), ("Galaxy S8", "Samsung", 2, 46000), ("Galaxy S8 Plus", "Samsung", 1, 56000)

Σε αυτήν την περίπτωση, τρεις σειρές θα προστεθούν στον πίνακα.

Επίσης, κατά την προσθήκη, μπορούμε να καθορίσουμε ότι η στήλη θα πρέπει να έχει μια προεπιλεγμένη τιμή χρησιμοποιώντας τη λέξη-κλειδί DEFAULT ή μια τιμή NULL:

INSERT INTO Products (ProductName, Manufacturer, ProductCount, Price) ΤΙΜΕΣ ("Mi6", "Xiaomi", DEFAULT, 28000)

Σε αυτήν την περίπτωση, θα χρησιμοποιηθεί η προεπιλεγμένη τιμή για τη στήλη ProductCount (αν έχει οριστεί, αν δεν είναι, τότε NULL).

Εάν όλες οι στήλες έχουν ένα χαρακτηριστικό DEFAULT που καθορίζει μια προεπιλεγμένη τιμή ή είναι μηδενικές, μπορείτε να εισαγάγετε προεπιλεγμένες τιμές για όλες τις στήλες:

ΕΙΣΑΓΩΓΗ ΠΡΟΕΠΙΛΟΓΗΜΕΝΩΝ ΤΙΜΩΝ ΣΤΑ Προϊόντα

Αν όμως πάρουμε τον πίνακα Προϊόντα, τότε μια τέτοια εντολή θα αποτύχει με σφάλμα, αφού πολλά πεδία δεν έχουν το χαρακτηριστικό DEFAULT και ταυτόχρονα δεν επιτρέπουν την τιμή NULL.

Τι είναι το INSERT INTO;

Ο κύριος στόχος των συστημάτων βάσεων δεδομένων είναι η αποθήκευση δεδομένων στους πίνακες. Τα δεδομένα παρέχονται συνήθως από προγράμματα εφαρμογών που εκτελούνται πάνω από τη βάση δεδομένων. Προς το σκοπό αυτό, η SQL έχει την εντολή INSERT που χρησιμοποιείται για την αποθήκευση δεδομένων σε έναν πίνακα. ο Η εντολή INSERT δημιουργεί μια νέα σειράστον πίνακα για την αποθήκευση δεδομένων.

Βασική σύνταξη

Ας δούμε τη βασική σύνταξη της εντολής SQL INSERT που φαίνεται παρακάτω.

INSERT INTO `table_name`(στήλη_1,στήλη_2,...) VALUES (τιμή_1,τιμή_2,...);

  • ΕΙΣΑΓΩΓΗ ΣΤΟ "όνομα_πίνακα".είναι η εντολή που λέει στον διακομιστή MySQL να προσθέσει νέα σειρά σε έναν πίνακα με το όνομα `table_name`.
  • (στήλη_1,στήλη_2,...)καθορίζει τις στήλες που θα ενημερωθούν στη νέα σειρά
  • VALUES (τιμή_1,τιμή_2,...)καθορίζει τις τιμές που θα προστεθούν στη νέα σειρά

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

  • Τύποι δεδομένων συμβολοσειράς- όλες οι τιμές συμβολοσειράς θα πρέπει να περικλείονται σε μονά εισαγωγικά.
  • Αριθμητικοί τύποι δεδομένων- όλες οι αριθμητικές τιμές θα πρέπει να παρέχονται απευθείας χωρίς να περικλείονται σε μονά ή διπλά εισαγωγικά.
  • Τύποι δεδομένων ημερομηνίας- εσωκλείστε τις τιμές ημερομηνίας σε μονά εισαγωγικά με τη μορφή "ΕΕΕΕ-ΜΜ-ΗΗ".

Παράδειγμα:

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

Πλήρη ονόματα Ημερομηνια γεννησης γένος Φυσική διεύθυνση ταχυδρομική διεύθυνση Αριθμός επαφής Διεύθυνση ηλεκτρονικού ταχυδρομείου
Λέοναρντ Χόφστανττερ Αρσενικός Ξυλοκόπο 0845738767
Σέλντον Κούπερ Αρσενικός Ξυλοκόπο 0976736763
Rajesh Koothrappali Αρσενικός Fairview 0938867763
Λέσλι Γουίνκλ 14/02/1984 Αρσενικός 0987636553
Χάουαρντ Γούλοβιτς 24/08/1981 Αρσενικός South Park ταχυδρομείο Κουτί 4563 0987786553

Ας" ΕΙΣΑΓΕΤΕ δεδομένα ένα προς ένα. Θα ξεκινήσουμε με τον Leonard Hofstadter. Θα αντιμετωπίσουμε τον αριθμό επικοινωνίας ως έναν αριθμητικό τύπο δεδομένων και δεν θα περικλείουμε τον αριθμό σε μεμονωμένα εισαγωγικά.

INSERT INTO `members` (`full_names`,`gender`,`physical_address`,`contact_number`) ΤΙΜΕΣ ("Leonard Hofstadter","Male","Woodcrest",0845738767);

Η εκτέλεση της παραπάνω δέσμης ενεργειών αφαιρεί το 0 από τον αριθμό επικοινωνίας του Leonard. Αυτό συμβαίνει επειδή η τιμή θα αντιμετωπίζεται ως αριθμητική τιμή και το μηδέν (0) στην αρχή απορρίπτεται επειδή δεν είναι σημαντικό.

Προκειμένου να αποφευχθούν τέτοια προβλήματα, η τιμή πρέπει να περικλείεται σε μονά εισαγωγικά όπως φαίνεται παρακάτω -

INSERT INTO `members` (`full_names`,`gender`,`physical_address`,`contact_number`) ΤΙΜΕΣ ("Sheldon Cooper","Male","Woodcrest", "0976736763");

Στην παραπάνω περίπτωση, το μηδέν(0) δεν θα απορριφθεί

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

Το ερώτημα που φαίνεται παρακάτω δείχνει το παραπάνω σημείο.

INSERT INTO `members` (`contact_number`,`gender`,`full_names`,`physical_address`)VALUES ("0938867763","Male","Rajesh Koothrappali","Woodcrest");

Τα παραπάνω ερωτήματα παρέλειψαν τη στήλη ημερομηνίας γέννησης, Από προεπιλογή, η MySQL θα εισάγει NULL τιμές σε στήλες που παραλείπονται στο ερώτημα INSERT.

Ας εισαγάγουμε τώρα το αρχείο για τη Leslie που έχει την ημερομηνία γέννησης. Η τιμή ημερομηνίας θα πρέπει να περικλείεται σε μονά εισαγωγικά χρησιμοποιώντας τη μορφή "ΕΕΕΕ-ΜΜ-ΗΗ".

INSERT INTO "members" ("πλήρη_ονόματα", "ημερομηνία_γέννησης", "φύλο", "φυσική_διεύθυνση", "αριθμός_επαφής") ΤΙΜΕΣ ("Leslie Winkle","1984-02-14","Male","Woodcrest"," 0987636553");

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

INSERT INTO "members" VALUES (9,"Howard Wolowitz","Male","1981-08-24","SouthPark","P.O. Box 4563", "0987786553", "lwolowitzemail.me");

Ας χρησιμοποιήσουμε τώρα την πρόταση SELECT για να προβάλουμε όλες τις σειρές στον πίνακα μελών. SELECT * FROM `members`;

αριθμός μέλουςπλήρη_ονόματαγένοςΗμερομηνια γεννησηςφυσική_διεύθυνσηταχυδρομική διεύθυνσηcontact_numberΗΛΕΚΤΡΟΝΙΚΗ ΔΙΕΥΘΥΝΣΗ
1 Τζάνετ ΤζόουνςΘηλυκός21-07-1980 Οικόπεδο First Street No. 4Ιδιωτική τσάντα0759 253 542 Αυτή η διεύθυνση ηλεκτρονικού ταχυδρομείου προστατεύεται από κακόβουλη χρήση. Χρειάζεται να ενεργοποιήσετε την JavaScript για να τη δείτε.
2 Τζάνετ Σμιθ ΤζόουνςΘηλυκός23-06-1980 Melrose 123ΜΗΔΕΝΙΚΟΜΗΔΕΝΙΚΟΑυτή η διεύθυνση ηλεκτρονικού ταχυδρομείου προστατεύεται από κακόβουλη χρήση. Χρειάζεται να ενεργοποιήσετε την JavaScript για να τη δείτε.
3 Ρόμπερτ ΦιλΑρσενικός12-07-1989 3η Οδός 34ΜΗΔΕΝΙΚΟ12345 Αυτή η διεύθυνση ηλεκτρονικού ταχυδρομείου προστατεύεται από κακόβουλη χρήση. Χρειάζεται να ενεργοποιήσετε την JavaScript για να τη δείτε.
4 Γκλόρια ΟυίλιαμςΘηλυκός14-02-1984 2η οδός 23ΜΗΔΕΝΙΚΟΜΗΔΕΝΙΚΟΜΗΔΕΝΙΚΟ
5 Λέοναρντ ΧόφστανττερΑρσενικόςΜΗΔΕΝΙΚΟΞυλοκόποΜΗΔΕΝΙΚΟ845738767 ΜΗΔΕΝΙΚΟ
6 Σέλντον ΚούπερΑρσενικόςΜΗΔΕΝΙΚΟΞυλοκόποΜΗΔΕΝΙΚΟ976736763 ΜΗΔΕΝΙΚΟ
7 Rajesh KoothrappaliΑρσενικόςΜΗΔΕΝΙΚΟΞυλοκόποΜΗΔΕΝΙΚΟ938867763 ΜΗΔΕΝΙΚΟ
8 Λέσλι ΓουίνκλΑρσενικός14-02-1984 ΞυλοκόποΜΗΔΕΝΙΚΟ987636553 ΜΗΔΕΝΙΚΟ
9 Χάουαρντ ΓούλοβιτςΑρσενικός24-08-1981 SouthParkταχυδρομείο Κουτί 4563987786553 Αυτή η διεύθυνση ηλεκτρονικού ταχυδρομείου προστατεύεται από κακόβουλη χρήση. Χρειάζεται να ενεργοποιήσετε την JavaScript για να τη δείτε.

Παρατηρήστε ότι ο αριθμός επικοινωνίας για τον Leonard Hofstadter έχει αφαιρέσει το μηδέν (0) από τον αριθμό επικοινωνίας. Τα άλλα τηλέφωνα επικοινωνίας δεν έχουν πέσει το μηδέν (0) στην αρχή.

Εισαγωγή σε πίνακα από άλλο πίνακα

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

INSERT INTO table_1 SELECT * FROM table_2;

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

ΔΗΜΙΟΥΡΓΙΑ ΠΙΝΑΚΑΣ `categories_archive` (`category_id` int(11) AUTO_INCREMENT, `category_name` varchar(150) DEFAULT NULL, `remarks` varchar(500) DEFAULT NULL, PRIMARY KEY (`category_id`)

Εκτελέστε το παραπάνω σενάριο για να δημιουργήσετε τον πίνακα.

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

INSERT INTO `categories_archive` SELECT * FROM `categories`;

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

Το ερώτημα που φαίνεται παρακάτω δείχνει τη χρήση του.

INSERT INTO `categories_archive`(category_id,category_name,remarks) ΕΠΙΛΕΞΤΕ το αναγνωριστικό_κατηγορίας,όνομα_κατηγορίας,παρατηρήσεις ΑΠΟ "κατηγορίες";

Εκτέλεση του ερωτήματος SELECT

ΕΠΙΛΕΞΤΕ * ΑΠΟ "Αρχείο_κατηγοριών".

δίνει τα ακόλουθα αποτελέσματα που φαίνονται παρακάτω.

κατηγορία_αναγνωριστικόόνομα κατηγορίαςπαρατηρήσεις
1 ΚωμωδίαΤαινίες με χιούμορ
2 ΡομαντικόςΙστορίες αγάπης
3 ΕποςΙστορίες αρχαίες ταινίες
4 ΦρίκηΜΗΔΕΝΙΚΟ
5 Επιστημονική φαντασίαΜΗΔΕΝΙΚΟ
6 Εντυπωσιακό έργοΜΗΔΕΝΙΚΟ
7 ΔράσηΜΗΔΕΝΙΚΟ
8 Ρομαντική κωμωδίαΜΗΔΕΝΙΚΟ
9 Κοινουμενα σχεδιαΜΗΔΕΝΙΚΟ
10 Κοινουμενα σχεδιαΜΗΔΕΝΙΚΟ

Περίληψη

  • Η εντολή INSERT χρησιμοποιείται για την προσθήκη νέων δεδομένων σε έναν πίνακα
  • Οι τιμές ημερομηνίας και συμβολοσειράς θα πρέπει να περικλείονται σε μονά εισαγωγικά.
  • Οι αριθμητικές τιμές δεν χρειάζεται να περικλείονται σε εισαγωγικά.
  • Η εντολή INSERT μπορεί επίσης να χρησιμοποιηθεί για την εισαγωγή δεδομένων από έναν πίνακα σε έναν άλλο.

Εκτός από τη δήλωση SELECT που συζητήθηκε προηγουμένως, η γλώσσα χειρισμού δεδομένων (DML) περιέχει τρεις άλλες δηλώσεις: INSERT, UPDATE και DELETE. Όπως η πρόταση SELECT, αυτές οι τρεις δηλώσεις λειτουργούν είτε σε πίνακες είτε σε προβολές. Αυτό το άρθρο εξετάζει τη δήλωση INSERT και οι άλλες δύο δηλώσεις εξετάζονται στο επόμενο άρθρο.

INSERT δήλωσηεισάγει σειρές (ή μέρη σειρών) σε έναν πίνακα. Υπάρχουν δύο διαφορετικές μορφές αυτής της εντολής:

INSERT tab_name [(col_list)] ΠΡΟΕΠΙΛΟΓΙΚΕΣ ΤΙΜΕΣ | ΤΙΜΕΣ (( ΠΡΟΕΠΙΛΟΓΗ | NULL | έκφραση ) [ ,...n]) INSERT INTO tab_name | view_name [(col_list)] (select_statement | execute_statement) Συντακτικές συμβάσεις

Η πρώτη μορφή της εντολής σάς επιτρέπει να εισαγάγετε μια σειρά (ή μέρος της) στον πίνακα. Και η δεύτερη μορφή της πρότασης INSERT σάς επιτρέπει να εισαγάγετε σε έναν πίνακα το σύνολο αποτελεσμάτων μιας πρότασης SELECT ή μιας αποθηκευμένης διαδικασίας που εκτελείται από μια πρόταση EXECUTE. Η αποθηκευμένη διαδικασία πρέπει να επιστρέψει δεδομένα που θα εισαχθούν στον πίνακα. Όταν χρησιμοποιείται με μια πρόταση INSERT, μια δήλωση SELECT μπορεί να επιλέξει τιμές από διαφορετικό ή τον ίδιο πίνακα στον οποίο εισάγονται τα δεδομένα, εφόσον οι τύποι δεδομένων των αντίστοιχων στηλών είναι συμβατοί.

Και για τις δύο φόρμες, ο τύπος δεδομένων κάθε τιμής που έχει εισαχθεί πρέπει να είναι συμβατός με τον τύπο δεδομένων της αντίστοιχης στήλης πίνακα. Όλες οι συμβολοσειρές και τα προσωρινά δεδομένα πρέπει να περικλείονται σε εισαγωγικά. Οι αριθμητικές τιμές δεν χρειάζεται να περικλείονται σε εισαγωγικά.

Εισαγωγή μιας μόνο σειράς

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

Παράμετρος DEFAULT VALUESεισάγει τις προεπιλεγμένες τιμές για όλες τις στήλες. Οι στήλες με τον τύπο δεδομένων TIMESTAMP ή την ιδιότητα IDENTITY εισάγονται από προεπιλογή με τιμές που δημιουργούνται αυτόματα από το σύστημα. Για στήλες άλλων τύπων δεδομένων, εισάγεται η αντίστοιχη μη μηδενική προεπιλεγμένη τιμή εάν είναι διαθέσιμη ή NULL διαφορετικά. Εάν μια στήλη δεν επιτρέπει μηδενικές τιμές και δεν έχει οριστεί μια προεπιλεγμένη τιμή, η δήλωση INSERT αποτυγχάνει και εμφανίζεται ένα μήνυμα.

Το παρακάτω παράδειγμα εισάγει γραμμές στον πίνακα Employee στη βάση δεδομένων SampleDb, καταδεικνύοντας τη χρήση μιας δήλωσης INSERT για την εισαγωγή ενός μικρού όγκου δεδομένων στη βάση δεδομένων:

ΧΡΗΣΗ SampleDb; INSERT INTO Employee VALUES (34990, "Andrey", "Batonov", "d1"); INSERT INTO Employee VALUES (38640, "Alexey", "Vasin", "d3");

Υπάρχουν δύο διαφορετικοί τρόποιεισαγωγή τιμών σε νέα γραμμή. Η δήλωση INSERT στο παρακάτω παράδειγμα χρησιμοποιεί ρητά τη λέξη-κλειδί NULL και εισάγει μια τιμή NULL στην αντίστοιχη στήλη:

ΧΡΗΣΗ SampleDb; INSERT INTO Employee VALUES (34991, "Andrey", "Batonov", NULL);

Για να εισαγάγετε τιμές σε ορισμένες (αλλά όχι όλες) στήλες ενός πίνακα, συνήθως χρειάζεται να προσδιορίσετε ρητά αυτές τις στήλες. Οι μη καθορισμένες στήλες πρέπει είτε να επιτρέπουν τιμές NULL είτε να έχουν οριστεί μια προεπιλεγμένη τιμή.

ΧΡΗΣΗ SampleDb; INSERT INTO Employee(Id, FirstName, LastName) VALUES (34992, "Andrey", "Batonov");

Τα δύο προηγούμενα παραδείγματα είναι ισοδύναμα. Στον πίνακα Υπάλληλοι, η μόνη στήλη που επιτρέπει τιμές NULL είναι η στήλη ΤμήμαΑριθμός και όλες οι άλλες στήλες απενεργοποιήθηκαν από τον όρο NOT NULL στη δήλωση CREATE TABLE.

Σειρά αξιών σε VALUES προσφοράΟι δηλώσεις INSERT ενδέχεται να διαφέρουν από τη σειρά που καθορίζεται στη δήλωση CREATE TABLE. Σε αυτήν την περίπτωση, η σειρά τους πρέπει να ταιριάζει με τη σειρά με την οποία αναφέρονται οι αντίστοιχες στήλες στη λίστα στηλών. Ακολουθεί ένα παράδειγμα εισαγωγής δεδομένων με διαφορετική σειρά από την αρχική:

ΧΡΗΣΗ SampleDb; INSERT INTO Employee (DepartamentNumber, LastName, Id, FirstName) VALUES ("d1", "Batonov", 34993, "Andrey");

Εισαγωγή πολλαπλών σειρών

Η δεύτερη μορφή της πρότασης INSERT εισάγει μία ή περισσότερες σειρές που επιλέγονται από ένα υποερώτημα στον πίνακα. Το παρακάτω παράδειγμα δείχνει πώς να εισαγάγετε σειρές σε έναν πίνακα χρησιμοποιώντας τη δεύτερη μορφή της πρότασης INSERT. Σε αυτήν την περίπτωση, εκτελείται ένα ερώτημα για την επιλογή των αριθμών και των ονομάτων των τμημάτων που βρίσκονται στη Μόσχα και το σύνολο αποτελεσμάτων που προκύπτει φορτώνεται σε έναν νέο πίνακα που δημιουργήθηκε νωρίτερα.

Ο νέος πίνακας MoscowDepartment που δημιουργήθηκε στο παραπάνω παράδειγμα έχει τις ίδιες στήλες με τον υπάρχοντα πίνακα Τμήματος, εκτός από τη στήλη Τοποθεσία που λείπει. Το υποερώτημα στη δήλωση INSERT επιλέγει όλες τις σειρές στον πίνακα Τμήμα για τις οποίες η τιμή της στήλης Τοποθεσία είναι "Μόσχα", οι οποίες στη συνέχεια εισάγονται στον νέο πίνακα που δημιουργήθηκε στην αρχή του ερωτήματος.

Το παρακάτω παράδειγμα δείχνει έναν άλλο τρόπο εισαγωγής σειρών σε έναν πίνακα χρησιμοποιώντας τη δεύτερη μορφή της πρότασης INSERT. Σε αυτήν την περίπτωση, εκτελείται ένα ερώτημα για την επιλογή αριθμών προσωπικού, αριθμών έργου και ημερομηνιών έναρξης έργου για όλους τους υπαλλήλους με τη θέση "Manager" που εργάζονται στο έργο p2 και στη συνέχεια φορτώνεται το σύνολο των αποτελεσμάτων σε έναν νέο πίνακα που δημιουργήθηκε στην αρχή του το ερώτημα:

ΧΡΗΣΗ SampleDb; CREATE TABLE ManagerTeam(EmpId INT NOT NULL, ProjectNumber CHAR (4) NOT NULL, EnterDate DATE); INSERT INTO ManagerTeam (EmpId, ProjectNumber, EnterDate) SELECT EmpId, ProjectNumber, EnterDate FROM Works_on WHERE Job = "Manager";

Πριν από την εισαγωγή σειρών χρησιμοποιώντας τη δήλωση INSERT, οι πίνακες MoscowDepartment και ManagerTeam (στα παραπάνω παραδείγματα) ήταν κενοί. Εάν ο πίνακας υπήρχε ήδη και περιείχε σειρές με δεδομένα, τότε θα προστέθηκαν νέες σειρές σε αυτόν.


Μπλουζα