Βασικά στοιχεία T-SQL. DML. Transact-SQL - Έκδοση επίδειξης βάσης δεδομένων εισαγωγής δεδομένων

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

Γεια σε όλους! Αυτό το άρθρο θα συζητήσει πώς μπορείτε προσθέστε δεδομένα στον πίνακαστη Microsoft SQL ServerΕάν είστε ήδη τουλάχιστον λίγο εξοικειωμένοι με τη γλώσσα T-SQL, τότε μάλλον συνειδητοποιήσατε ότι τώρα θα μιλήσουμε για την πρόταση INSERT, καθώς και για το πώς μπορεί να χρησιμοποιηθεί για την προσθήκη δεδομένων σε έναν πίνακα.

Ας ξεκινήσουμε, ως συνήθως, με μια μικρή θεωρία.

INSERT δήλωση σε T-SQL

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

Υπάρχουν διάφοροι τρόποι για να χρησιμοποιήσετε την πρόταση INSERT στο τμήμα δεδομένων που πρέπει να εισαχθεί:

  • Καταχώριση συγκεκριμένων τιμών για εισαγωγή.
  • Καθορισμός ενός συνόλου δεδομένων ως ερώτημα SELECT.
  • Καθορισμός ενός συνόλου δεδομένων με τη μορφή κλήσης διαδικασίας που επιστρέφει δεδομένα πίνακα.

Απλοποιημένη σύνταξη

INSERT [πίνακας] ( λίστα στηλών...) ΑΞΙΕΣ ( λίστα αξιών, … ) Ή ΕΠΙΛΟΓΗ δείγμα αίτησηςΉ ΕΚΤΕΛΕΣΤΕ διαδικασία

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

Αυτή είναι περίπου η απλοποιημένη σύνταξη της πρότασης INSERT INTO· στις περισσότερες περιπτώσεις, έτσι θα προσθέσετε νέες εγγραφές σε πίνακες.

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

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

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

Φτάνει η θεωρία, ας περάσουμε στην πράξη.

Αρχικά στοιχεία

Για να προσθέσουμε δεδομένα στον πίνακα, χρειαζόμαστε τον ίδιο τον πίνακα, οπότε ας τον δημιουργήσουμε και ας προσπαθήσουμε να προσθέσουμε εγγραφές σε αυτόν.

Σημείωση! Όλα τα παραδείγματα θα εκτελούνται στον Microsoft SQL Server 2016 Express.

ΔΗΜΙΟΥΡΓΙΑ ΠΙΝΑΚΑΣ Δοκιμαστικός Πίνακας (ΤΑΥΤΟΤΗΤΑ(1,1) ΟΧΙ NULL, (100) ΟΧΙ NULL, ΟΧΙ NULL)

Ο πίνακας δοκιμών μας θα περιέχει μια λίστα προϊόντων με τιμές.

Επίσης στα παραδείγματα θα χρησιμοποιήσουμε μια διαδικασία που επιστρέφει μια τιμή πίνακα για να προσθέσουμε δεδομένα στον πίνακα, οπότε ας το δημιουργήσουμε κι αυτό.

ΔΗΜΙΟΥΡΓΙΑ ΔΙΑΔΙΚΑΣΙΑΣ TestProcedure AS BEGIN ΕΠΙΛΕΞΤΕ Όνομα προϊόντος, Τιμή ΑΠΟ ΤΕΛΟΣ TestTable

Για παράδειγμα, θα επιστρέψει δεδομένα από τον πρόσφατα δημιουργημένο πίνακα TestTable.

Σημείωση!

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

Παράδειγμα 1 – Προσθήκη νέας εγγραφής σε πίνακα χρησιμοποιώντας τον κατασκευαστή τιμών πίνακα

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

INSERT INTO TestTable(ProductName, Price) VALUES ("Computer", 100) GO SELECT * FROM TestTable

Βλέπετε ότι μετά το όνομα του πίνακα παραθέσαμε τα ονόματα των στηλών στις οποίες θα προσθέσουμε δεδομένα, διαχωρισμένα με κόμμα και μετά υποδείξαμε τη λέξη-κλειδί ΑΞΙΕΣκαι σε αγκύλες επίσης, με την ίδια σειρά, χωρισμένα με κόμμα, γράψαμε τις τιμές που θέλουμε να εισάγουμε.

Μετά τη δήλωση INSERT έγραψα Δήλωση SELECTκαι τους χώρισε η ομάδα GO.

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

INSERT INTO TestTable(ProductName, Price) VALUES ("Computer", 100), ("Keyboard", 20), ("Monitor", 50) GO SELECT * FROM TestTable


Παράδειγμα 2 - Προσθήκη νέων σειρών σε έναν πίνακα χρησιμοποιώντας ένα ερώτημα SELECT

Πολύ συχνά υπάρχει ανάγκη προσθήκης πολλών δεδομένων σε έναν πίνακα, για παράδειγμα, με βάση ένα επιλεγμένο ερώτημα, π.χ. ΕΠΙΛΕΓΩ. Για να γίνει αυτό, αντί για VALUES, πρέπει απλώς να καθορίσουμε το αίτημα.

INSERT INTO TestTable(ProductName, Price) SELECT ProductName, Price FROM TestTable WHERE Id >


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

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

INSERT INTO TestTable SELECT Όνομα προϊόντος, Τιμή ΑΠΟ TestTable WHERE Id > 2 GO SELECT * FROM TestTable


Σε αυτήν την περίπτωση, είμαστε βέβαιοι ότι στον πίνακα TestTable η πρώτη στήλη είναι Όνομα προϊόντος και η δεύτερη Τιμή, οπότε μπορούμε να αντέξουμε οικονομικά να τη γράψουμε με αυτόν τον τρόπο. Αλλά, και πάλι, στην πράξη είναι καλύτερο να καθορίσετε μια λίστα στηλών.

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

Παράδειγμα 3 - Προσθήκη νέων εγγραφών σε έναν πίνακα χρησιμοποιώντας μια αποθηκευμένη διαδικασία

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

INSERT INTO TestTable(ProductName, Price) EXEC TestProcedure GO SELECT * FROM TestTable


Ελπίδα, αυτό το υλικόσας βοήθησε να κατανοήσετε τις οδηγίες ΕΙΣΑΓΩΓΗ ΣΤΟ, και αυτό είναι το μόνο που έχω προς το παρόν!

Σε προηγούμενες ενότητες, εξετάσαμε το έργο της ανάκτησης δεδομένων από προ-δημιουργημένους πίνακες. Τώρα ήρθε η ώρα να καταλάβουμε πώς μπορούμε να δημιουργήσουμε/διαγράψουμε πίνακες, να προσθέσουμε νέες εγγραφές και να διαγράψουμε παλιές. Για τους σκοπούς αυτούς στο 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

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

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

Τελευταία ενημέρωση: 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 γραμμή(ες) επηρεάζεται:

Αξίζει να ληφθεί υπόψη ότι οι τιμές για τις στήλες σε αγκύλες μετά λέξη-κλειδίΟι ΤΙΜΕΣ μεταβιβάζονται με τη σειρά με την οποία δηλώνονται. Για παράδειγμα, στην παραπάνω δήλωση 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.

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

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

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