Δήλωση SQL INSERT INTO SELECT. Transact-SQL - εισαγωγή δεδομένων Προσθήκη μέρους σειρών

Χρησιμοποιώντας 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, Παραδείγματα

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

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

Τελευταία ενημέρωση: 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.

Εκτός από τη δήλωση 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 (στα παραπάνω παραδείγματα) ήταν κενοί. Εάν ο πίνακας υπήρχε ήδη και περιείχε σειρές με δεδομένα, τότε θα προστέθηκαν νέες σειρές σε αυτόν.

Σε προηγούμενες ενότητες, εξετάσαμε το έργο της ανάκτησης δεδομένων από προ-δημιουργημένους πίνακες. Τώρα ήρθε η ώρα να καταλάβουμε πώς μπορούμε να δημιουργήσουμε/διαγράψουμε πίνακες, να προσθέσουμε νέες εγγραφές και να διαγράψουμε παλιές. Για τους σκοπούς αυτούς στο SQLΥπάρχουν χειριστές όπως: ΔΗΜΙΟΥΡΓΩ- δημιουργεί έναν πίνακα, ΑΛΛΑΖΩ- αλλάζει τη δομή του πίνακα, ΠΤΩΣΗ- διαγράφει έναν πίνακα ή ένα πεδίο, ΕΙΣΑΓΕΤΕ- προσθέτει δεδομένα στον πίνακα. Ας αρχίσουμε να εξοικειωνόμαστε με αυτήν την ομάδα χειριστών από τον χειριστή ΕΙΣΑΓΕΤΕ.

1. Προσθήκη ολόκληρων γραμμών

Όπως υποδηλώνει το όνομα, ο χειριστής ΕΙΣΑΓΕΤΕχρησιμοποιείται για την εισαγωγή (προσάρτηση) σειρών σε έναν πίνακα βάσης δεδομένων. Η προσθήκη μπορεί να γίνει με διάφορους τρόπους:

  • - προσθέστε μία πλήρη γραμμή
  • - προσθέστε μέρος μιας γραμμής
  • - προσθήκη αποτελεσμάτων ερωτήματος.

Έτσι, για να προσθέσουμε μια νέα σειρά σε έναν πίνακα, πρέπει να καθορίσουμε το όνομα του πίνακα, να παραθέσουμε τα ονόματα των στηλών και να καθορίσουμε την τιμή για κάθε στήλη χρησιμοποιώντας την κατασκευή ΕΙΣΑΓΩΓΗ ΣΤΟ όνομα_πίνακα (πεδίο1, πεδίο2 ...) ΑΞΙΕΣ (τιμή 1, τιμή 2...). Ας δούμε ένα παράδειγμα.

INSERT INTO Sellers (ID, Address, City, Seller_name, Country) VALUES("6", "1st Street", "Los Angeles", "Harry Monroe", "USA")

Μπορείτε επίσης να αλλάξετε τη σειρά των ονομάτων στηλών, αλλά ταυτόχρονα πρέπει να αλλάξετε τη σειρά των τιμών στην παράμετρο ΑΞΙΕΣ.

2. Προσθήκη μέρους των γραμμών

Στο προηγούμενο παράδειγμα, όταν χρησιμοποιείτε τον τελεστή ΕΙΣΑΓΕΤΕέχουμε επισημάνει ρητά τα ονόματα των στηλών του πίνακα. Χρησιμοποιώντας αυτήν τη σύνταξη, μπορούμε να παραλείψουμε ορισμένες στήλες. Αυτό σημαίνει ότι εισάγετε τιμές για ορισμένες στήλες αλλά δεν τις παρέχετε για άλλες. Για παράδειγμα:

INSERT INTO Sellers (ID, City, Seller_name) VALUES("6", "Λος Άντζελες", "Χάρι Μονρό")

Σε αυτό το παράδειγμα, δεν καθορίσαμε μια τιμή για δύο στήλες ΔιεύθυνσηΚαι Χώρα. Μπορείτε να εξαιρέσετε ορισμένες στήλες από τη δήλωση ΕΙΣΑΓΩΓΗ ΣΤΟ, εάν αυτό επιτρέπει τον ορισμό του πίνακα. Σε αυτήν την περίπτωση, πρέπει να πληρούται μία από τις προϋποθέσεις: αυτή η στήλη ορίζεται ως έγκυρη ΜΗΔΕΝΙΚΟ(απουσία οποιασδήποτε τιμής) ή την καθορισμένη προεπιλεγμένη τιμή στον ορισμό του πίνακα. Αυτό σημαίνει ότι εάν δεν έχει καθοριστεί τιμή, θα χρησιμοποιηθεί η προεπιλεγμένη τιμή. Εάν λείπει μια στήλη από έναν πίνακα που δεν επιτρέπει την εμφάνιση τιμών στις σειρές του ΜΗΔΕΝΙΚΟκαι δεν έχει οριστεί μια προεπιλεγμένη τιμή, το DBMS θα δημιουργήσει ένα μήνυμα σφάλματος και η σειρά δεν θα προστεθεί.

3. Προσθήκη επιλεγμένων δεδομένων

Στο προηγούμενο παράδειγμα, εισαγάγαμε δεδομένα σε πίνακες εισάγοντάς τα με μη αυτόματο τρόπο στο ερώτημα. Ωστόσο, ο χειριστής ΕΙΣΑΓΩΓΗ ΣΤΟμας επιτρέπει να αυτοματοποιήσουμε αυτή τη διαδικασία εάν θέλουμε να εισαγάγουμε δεδομένα από άλλο πίνακα. Για το σκοπό αυτό στην SQL υπάρχει μια τέτοια κατασκευή όπως ΕΙΣΑΓΩΓΗ ΣΤΟ ... ΕΠΙΛΟΓΗ .... Αυτός ο σχεδιασμός σας επιτρέπει να επιλέγετε ταυτόχρονα δεδομένα από έναν πίνακα και να τα εισάγετε σε έναν άλλο. Ας υποθέσουμε ότι έχουμε άλλο τραπέζι Πωλητές_ΕΕμε έναν κατάλογο πωλητών των προϊόντων μας στην Ευρώπη και πρέπει να τους προσθέσουμε στον γενικό πίνακα Πωλητές. Η δομή αυτών των πινάκων είναι η ίδια (ο ίδιος αριθμός στηλών και τα ίδια ονόματα), αλλά τα δεδομένα είναι διαφορετικά. Για να γίνει αυτό, μπορούμε να γράψουμε το ακόλουθο ερώτημα:

INSERT INTO Sellers (ID, Address, City, Seller_name, Country) ΕΠΙΛΟΓΗΑναγνωριστικό, Διεύθυνση, Πόλη, Όνομα_Πωλητή, Χώρα ΑΠΟ Πωλητές_ΕΕ

Πρέπει να δώσετε προσοχή ώστε να μην επαναλαμβάνονται οι τιμές των εσωτερικών κλειδιών (πεδίο ταυτότητα), διαφορετικά θα προκύψει σφάλμα. Χειριστής ΕΠΙΛΕΓΩμπορεί επίσης να περιλαμβάνει προτάσεις ΟΠΟΥγια φιλτράρισμα δεδομένων. Θα πρέπει επίσης να σημειωθεί ότι το DBMS δεν δίνει προσοχή στα ονόματα των στηλών που περιέχονται στη δήλωση ΕΠΙΛΕΓΩ, μόνο η σειρά με την οποία είναι τακτοποιημένα είναι σημαντική για εκείνη. Επομένως, τα δεδομένα στην πρώτη καθορισμένη στήλη που επιλέχθηκε λόγω ΕΠΙΛΕΓΩ, θα συμπληρωθεί σε κάθε περίπτωση στην πρώτη στήλη του πίνακα Πωλητές, που καθορίζεται μετά τον χειριστή ΕΙΣΑΓΩΓΗ ΣΤΟ, ανεξάρτητα από το όνομα του πεδίου.

4. Αντιγραφή δεδομένων από τον έναν πίνακα στον άλλο

Συχνά όταν εργάζεστε με βάσεις δεδομένων, υπάρχει ανάγκη δημιουργίας αντιγράφων οποιωνδήποτε πινάκων με σκοπό τη δημιουργία αντιγράφων ασφαλείας ή την τροποποίηση. Για να δημιουργήσετε ένα πλήρες αντίγραφο ενός πίνακα, η SQL παρέχει μια ξεχωριστή δήλωση ΕΠΙΛΟΓΗ ΣΕ. Για παράδειγμα, πρέπει να δημιουργήσουμε ένα αντίγραφο του πίνακα Πωλητές, θα χρειαστεί να γράψετε το αίτημα ως εξής:

SELECT * INTO Sellers_new FROM Sellers

Σε αντίθεση με το προηγούμενο σχέδιο ΕΙΣΑΓΩΓΗ ΣΤΟ ... ΕΠΙΛΟΓΗ ...Όταν προστίθενται δεδομένα σε έναν υπάρχοντα πίνακα, η σχεδίαση αντιγράφει τα δεδομένα στον νέο πίνακα. Μπορείτε επίσης να πείτε ότι η πρώτη κατασκευή εισάγει δεδομένα και η δεύτερη εξάγει. Όταν χρησιμοποιείτε το σχέδιο ΕΠΙΛΟΓΗ ... ΣΕ ... ΑΠΟ ...Θα πρέπει να ληφθούν υπόψη τα ακόλουθα:

  • - μπορείτε να χρησιμοποιήσετε οποιεσδήποτε προτάσεις στον τελεστή ΕΠΙΛΕΓΩ, όπως ΟΜΑΔΑ ΑΠΟΚαι ΕΧΟΝΤΑΣ
  • - μπορείτε να χρησιμοποιήσετε μια ένωση για να προσθέσετε δεδομένα από πολλούς πίνακες
  • - Τα δεδομένα μπορούν να προστεθούν μόνο σε έναν πίνακα, ανεξάρτητα από το πόσους πίνακες έχουν ληφθεί.

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

Σύνταξη

Αίτημα για προσθήκη πολλαπλών εγγραφών:

ΕΙΣΑΓΩΓΗ ΣΤΟ τελικό_αντικείμενο [(πεδίο 1[, πεδίο 2[, ...]])]
ΕΠΙΛΟΓΗ [ πηγή.]πεδίο 1[, πεδίο 2[, ...]
ΑΠΟ πίνακα_έκφραση

Αίτημα για προσθήκη μιας εγγραφής:

ΕΙΣΑΓΩΓΗ ΣΤΟ τελικό_αντικείμενο [(πεδίο 1[, πεδίο 2[, ...]])]
ΑΞΙΕΣ ( πεδίο 1[, πεδίο 2[, ...])

Η δήλωση INSERT INTO αποτελείται από τα ακόλουθα στοιχεία:

Μέρος

Περιγραφή

τελικό_αντικείμενο

Το όνομα του πίνακα ή του ερωτήματος όπου προστίθενται εγγραφές.

πεδίο 1, πεδίο 2

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

εξωτερική_βάση δεδομένων

Διαδρομή προς εξωτερική βάση δεδομένων. Για μια περιγραφή της διαδρομής, ανατρέξτε στο άρθρο σχετικά με την ρήτρα IN.

πηγή

Το όνομα του πίνακα ή του ερωτήματος από το οποίο αντιγράφονται οι εγγραφές.

πίνακα_έκφραση

Ένα ή περισσότερα ονόματα πινάκων από τα οποία θέλετε να ανακτήσετε εγγραφές. Αυτό το όρισμα μπορεί να είναι το όνομα ενός μεμονωμένου πίνακα, μια έκφραση αποτελέσματος που έχει δημιουργηθεί χρησιμοποιώντας ΕΣΩΤΕΡΙΚΗ ΣΥΝΔΕΣΗ, ΑΡΙΣΤΕΡΑ ΣΥΝΔΕΣΗ ή ΔΕΞΙΑ ΣΥΝΔΕΣΗ ή ένα αποθηκευμένο ερώτημα.

τιμή 1, τιμή 2

Τιμές που θα προστεθούν σε συγκεκριμένα πεδία της νέας εγγραφής. Κάθε τιμή εισάγεται στο πεδίο που αντιστοιχεί στη θέση της στη λίστα: τιμή 1προστέθηκε πεδίο 1νέα καταχώρηση, τιμή 2- V πεδίο 2κλπ. Πρέπει να διαχωρίσετε τις τιμές με κόμμα και να περικλείσετε πεδία κειμένου σε εισαγωγικά (" ").

Σημειώσεις

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

Η πρόταση INSERT INTO μπορεί επίσης να χρησιμοποιηθεί για την προσθήκη ενός συνόλου εγγραφών από άλλον πίνακα ή ερώτημα χρησιμοποιώντας τον όρο SELECT... FROM όπως φαίνεται παραπάνω (δείτε Σύνταξη ερωτήματος για την προσθήκη πολλαπλών εγγραφών). Σε αυτήν την περίπτωση, ο όρος SELECT καθορίζει τα πεδία που πρέπει να προστεθούν στο καθορισμένο τελικό_αντικείμενο.

Πηγήή τελικό_αντικείμενομπορεί να είναι ένας πίνακας ή ένα ερώτημα. Όταν δίνεται ένα ερώτημα, η μηχανή βάσης δεδομένων της Microsoft Access προσθέτει εγγραφές σε όλους τους πίνακες που επιστρέφει.

Η χρήση της δήλωσης INSERT INTO είναι προαιρετική. Εάν ορίζεται, πρέπει να προηγείται της δήλωσης SELECT.

Εάν ο πίνακας προορισμού περιέχει ένα πρωτεύον κλειδί, βεβαιωθείτε ότι οι τιμές που προσθέτετε σε ένα ή περισσότερα από τα πεδία του πρωτεύοντος κλειδιού είναι μοναδικές και διαφορετικές από ΜΗΔΕΝΙΚΟ; Διαφορετικά οι συμμετοχές δεν θα προστεθούν.

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

Μπορείτε να προσθέσετε εγγραφές σε έναν πίνακα σε άλλη βάση δεδομένων χρησιμοποιώντας την ρήτρα IN.

Για να δημιουργήσετε έναν πίνακα, χρησιμοποιήστε την πρόταση SELECT... INTO για να κάνετε ερώτημα για τη δημιουργία του πίνακα.

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

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

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