Οδηγός εισαγωγής δεδομένων σε πίνακες SQL (3 μέθοδοι)
März 11, 2023Ακολουθώντας το προηγούμενο άρθρο σχετικά με τη δημιουργία πινάκων δεδομένων σε SQL, τώρα θέλουμε να φορτώσουμε δεδομένα στον πρόσφατα δημιουργημένο πίνακα SQL. Σε αυτό το άρθρο, θα σας δείξω τρεις διαφορετικές μεθόδους εισαγωγής:
- Όταν θέλετε να φορτώσετε τα δεδομένα γραμμή προς γραμμή.
- Όταν θέλετε να εισαγάγετε τα δεδομένα από ένα αρχείο .csv.
- Όταν προσθέτετε γραμμές στον νέο σας πίνακα SQL που είναι τα αποτελέσματα ενός άλλου ερωτήματος SQL.
Σημείωση: Αυτό θα είναι ένα πρακτικό μάθημα, γι‘ αυτό σας ενθαρρύνω να κάνετε το μέρος της κωδικοποίησης μαζί μου.
Σημείωση 2: Εάν είστε νέος εδώ, ας ξεκινήσουμε πρώτα με αυτά τα άρθρα SQL:
- Πώς να εγκαταστήσετε Python, SQL, R και Bash (για μη προγραμματιστές)
- Πώς να εγκαταστήσετε το SQL Workbench για PostgreSQL
- SQL for Data Analysis – Tutorial for Beginners – ep 1
- Πώς να δημιουργήσετε έναν πίνακα σε SQL
Μέθοδος #1: Φόρτωση της γραμμής δεδομένων ανά γραμμή (INSERT INTO)
Όταν έχουμε μόνο λίγες γραμμές δεδομένων, ο ευκολότερος τρόπος είναι να τα προσθέσουμε χειροκίνητα. Μπορούμε να το κάνουμε αυτό χρησιμοποιώντας το INSERT
Δήλωση SQL:
Ας επιστρέψουμε στα δικά μας test_results
πίνακα που δημιουργήσαμε στο προηγούμενο σεμινάριο.

Προς το παρόν, είναι ένα άδειο τραπέζι. Ας το αλλάξουμε — και ας προσθέσουμε μια γραμμή σε αυτό χρησιμοποιώντας INSERT
:
INSERT INTO test_results VALUES ('Walt', 1, '1980-12-01', 95.50, 'A', TRUE);
Εξαιρετικό — αυτό εισήγαγε μια νέα σειρά στον πίνακα SQL.
Ας δούμε όμως το αποτέλεσμα και ας ρωτήσουμε τον πίνακα μας!
SELECT * FROM test_results;

Ω! ναι! Τα αποτελέσματα των δοκιμών του Walt βρίσκονται στον πίνακα SQL, πράγματι!
Αν και αυτή είναι μια πολύ χειροκίνητη διαδικασία, μπορείτε να την επιταχύνετε εάν το κάνετε INSERT
οι υπόλοιποι μαθητές με μια μεγαλύτερη δήλωση SQL:
INSERT INTO test_results VALUES ('Jesse', 2, '1988-02-11', 74.00, 'C', TRUE), ('Todd', 3, '1987-06-13', 60.00, 'D', TRUE), ('Tuco', 4, '1970-11-11', 15.50, 'F', FALSE), ('Gus', 5, '1975-08-08', 80.00, 'B', TRUE) ;
Ρωτήστε τον πίνακα για άλλη μια φορά για να δείτε τα αποτελέσματα:SELECT * FROM test_results;

Τώρα, έχουμε φορτωμένα δεδομένα 5 μαθητών σε αυτόν τον γλυκό πίνακα SQL. Ήταν εύκολο σαν πίτα, σωστά;
Τώρα θέλω να αφιερώσετε λίγα δευτερόλεπτα για να ελέγξετε τη σύνταξη:
INSERT INTO
είναι η λέξη-κλειδί SQL.test_results
είναι το όνομα του πίνακα στον οποίο θέλουμε να τοποθετήσουμε τα δεδομένα.VALUES
είναι μια άλλη λέξη-κλειδί SQL.- Στη συνέχεια, οι πραγματικές σειρές δεδομένων έρχονται μία προς μία – κάθε μία από αυτές ανάμεσα σε παρενθέσεις (
()
) και χωρίζονται με κόμμα (,
). - Οι τιμές των πεδίων διαχωρίζονται επίσης με κόμμα (
,
). - Προσέξτε τα σημεία δεδομένων που είναι οι τύποι δεδομένων
TEXT
ήDATE
— αυτά τα σημεία δεδομένων πρέπει να περνούν μεταξύ των αποστρόφων ('
) όταν γράφετε το ερώτημά σας SQL! - Και μην ξεχνάτε ποτέ το ερωτηματικό (
;
) στο τέλος της δήλωσης SQL!
Εάν είστε περισσότερο του οπτικού τύπου, εδώ είναι το φύλλο απάτης σας:

Δεσμεύστε τις αλλαγές σας!
Όπως έχουμε συζητήσει στο προηγούμενο άρθρο, εάν κάνετε αλλαγές στη βάση δεδομένων σας με ένα εργαλείο διαχείρισης SQL (όπως pgadmin4 ή SQL Workbench), πρέπει COMMIT
τους. Πάντα! Τι σημαίνει? Μάθετε περισσότερα εδώ.
Αλλά προς το παρόν, ας τρέξουμε αυτή τη μία επιπλέον γραμμή στον διαχειριστή SQL:
COMMIT;

Σημείωση: Εάν ενεργοποιήσατε την αυτόματη δέσμευση ή εάν βρίσκεστε στη γραμμή εντολών και όχι σε ένα εργαλείο ερωτημάτων SQL, τότε μπορείτε να παραλείψετε αυτό το βήμα δέσμευσης.
SQL TRUNCATE: αδειάστε τον πίνακα χωρίς να διαγράψετε τον πίνακα
Έχετε ήδη μάθει για το DROP TABLE
Δήλωση SQL που διαγράφει τον πίνακα SQL. Αλλά πολύ συχνά δεν θέλετε να διαγράψετε τον πίνακα σας (επειδή θέλετε να διατηρήσετε τη δομή του), διαγράψτε μόνο αυτά τα δεδομένα. Μπορείτε να το κάνετε αυτό χρησιμοποιώντας το TRUNCATE TABLE
δήλωση.
Πληκτρολογήστε αυτό:TRUNCATE TABLE test_results;
Αυτό θα διαγράψει όλες τις σειρές που έχουμε εισαγάγει στον πίνακα πριν, αλλά θα διατηρήσει τον ίδιο τον πίνακα.
Μην ξεχνάτε ότι πρέπει να δεσμεύσετε τις αλλαγές σας!

COMMIT;
Σημείωση: περισσότερα σχετικά με το άδειασμα ενός πίνακα SQL εδώ: Εκμάθηση SQL TRUNCATE TABLE και DROP TABLE.
Εντάξει, αν όλα έχουν ρυθμιστεί, ας δούμε το…
Μέθοδος #2: εισαγάγετε ένα αρχείο .csv σε έναν πίνακα SQL (COPY)
Για να είμαι ειλικρινής, αυτό είναι ένα πιο συνηθισμένο σενάριο από την πρώτη μέθοδο που έδειξα. Ως αναλυτής δεδομένων, λαμβάνετε αρκετά τακτικά σύνολα ακατέργαστων δεδομένων σε μορφές αρχείων, όπως π.χ .xlsx
ή .csv
ή .txt
. Μπορείτε να εισαγάγετε αυτά τα αρχεία δεδομένων χρησιμοποιώντας το COPY
δήλωση.
Η γενική μορφή της δήλωσης μοιάζει με αυτό:
COPY table_name FROM '/path/step/file_name' DELIMITER ' ';
Επιτρέψτε μου να σας το αναλύσω:
COPY
είναι η λέξη-κλειδί SQL που προσδιορίζει ότι θα εισαγάγετε δεδομένα από ένα αρχείο σε έναν πίνακα SQL.table_name
είναι το όνομα του τραπέζι ότι θέλετε να βάλετε τα δεδομένα σε. (Αυτό είναι λίγο αντίθετο στη σύνταξη… Αλλά γνωρίζουμε ότι η SQL δεν είναι το πιο «φιλικό προς τον κωδικοποιητή» εργαλείο σύνταξης. Επομένως, απλώς ξεπεράστε το και απλώς μάθετε με αυτόν τον τρόπο.)FROM
είναι μια άλλη λέξη-κλειδί SQL μετά από αυτό θα…- …καθορίστε το όνομα και τη θέση του αρχείου που θέλετε
COPY
τα δεδομένα από. Αυτό πηγαίνει μεταξύ αποστρόφων. - Και τελικά, πρέπει να καθορίσετε το διαχωριστικό πεδίου στο αρχικό σας αρχείο πληκτρολογώντας
DELIMITER
και το ίδιο το διαχωριστικό πεδίου μεταξύ αποστρόφων. Έτσι σε αυτή την περίπτωση' '
σημαίνει ότι ο οριοθέτης θα ήταν ένας χώρος.
Παράδειγμα για COPY (εισαγωγή δεδομένων .csv σε SQL)
Ας δούμε όλη τη διαδικασία με ένα παράδειγμα.
Σημείωση: σε αυτό το παράδειγμα, θα σας βοηθήσω να δημιουργήσετε ένα εικονικό αρχείο .csv. Αν έχετε το δικό σας .csv
αρχείο, μπορείτε απλώς να παραλείψετε το ΒΗΜΑ #1, #2 και #3.
ΒΗΜΑ 1) Αρχικά, πρέπει να ανοίξετε το παράθυρο του Terminal και να συνδεθείτε στον διακομιστή δεδομένων σας.
(Σημείωση: Σε αυτό το σημείο υποθέστε ότι ξέρετε πώς να το κάνετε – αν όχι: με αυτόν τον τρόπο παρακαλώ.)

ΒΗΜΑ 2) Στη συνέχεια, πληκτρολογήστε αυτό (απλώς κάντε αντιγραφή-επικόλληση από εδώ) στη γραμμή εντολών:
echo "Walt,1,1980-12-01,95.50,A,TRUE Jesse,2,1988-02-11,74.00,C,TRUE Todd,3,1987-06-13,60.00,D,TRUE Tuco,4,1970-11-11,15.50,F,FALSE Gus,5,1975-08-08,80.00,B,TRUE" > test_results.csv
Αυτό θα δημιουργήσει ένα .csv
κλήθηκε το αρχείο test_results.csv
.
(Σε πραγματικές περιπτώσεις, θα λάβετε αυτό το αρχείο .csv από κάποιον στην εταιρεία σας.)

ΒΗΜΑ 3) Ελέγξτε ξανά το νέο σας αρχείο: cat test_results.csv
.
Και μάθετε την ακριβή τοποθεσία του πληκτρολογώντας pwd
.
ΒΗΜΑ 4) Στη συνέχεια, πρέπει να συνδεθείτε στο PostgreSQL (ακόμα βρίσκεται στο παράθυρο του τερματικού σας):psql -U [your_sql_username] -d postgres
(Για μένα είναι psql -U dataguy -d postgres
)
ΒΗΜΑ 5) Στη συνέχεια πληκτρολογήστε το COPY
δήλωση που μόλις συζητήσαμε παραπάνω:\COPY test_results FROM '/home/dataguy/test_results.csv' DELIMITER ',';
Και μπουμ, τα δεδομένα εισάγονται από τα πρόσφατα δημιουργημένα μας .csv
αρχείο στον πίνακα SQL μας.

Μπορείτε ακόμη και να το ρωτήσετε από το εργαλείο διαχείρισης SQL για να το ελέγξετε ξανά:

Μερικά σχόλια σχετικά με τη μέθοδο φόρτωσης δεδομένων .csv
- έγραψα
\COPY
και όχι μόνοCOPY
επειδή ο χρήστης SQL μου δεν έχειSUPERUSER
προνόμια, οπότε τεχνικά δεν μπορούσα να χρησιμοποιήσω τοCOPY
εντολή (αυτό είναι θέμα SQL). Πληκτρολόγηση\COPY
Αντίθετα είναι η απλούστερη λύση — αλλά η καλύτερη λύση θα ήταν να δώσετε στον εαυτό σαςSUPERUSER
προνόμια χρησιμοποιήστε το πρωτότυποCOPY
εντολή. (Σε αυτό βίντεο ξεκινώντας στις 2:55 δείχνω πώς να δίνωSUPERUSER
προνόμια στον χρήστη SQL σας. Εάν βρίσκεστε εδώ από ένα από τα διαδικτυακά μαθήματά μου, πιθανότατα έχουμε ήδη διορθώσει αυτό το πρόβλημα στο μάθημα.) - Γιατί δεν το κάναμε
COPY
εντολή στο εργαλείο διαχείρισης SQL; Ίδιος λόγος: αν δεν έχετεSUPERUSER
προνόμια, δεν μπορείτε να εκτελέσετε τοCOPY
εντολή από ένα εργαλείο διαχείρισης SQL — μόνο από τη γραμμή εντολών. Αν ακολουθήσετε το βίντεο που έγραψα στο προηγούμενο σημείο, θα μπορείτε να εκτελέσετε το ίδιοCOPY
δήλωση από το pgadmin ή το SQL Workbench. - ο
'/home/dataguy/test_results.csv'
είναι η τοποθεσία και το όνομα του αρχείου, μαζί. Και πάλι, ανακαλύψαμε την τοποθεσία χρησιμοποιώντας τοpwd
εντολή. - Και τέλος: εάν αισθάνεστε άβολα με αυτά τα βήματα της γραμμής εντολών, διαβάστε τα πρώτα άρθρα από τη σειρά άρθρων της Γραμμής εντολών για Αναλυτές δεδομένων.
Και μπουμ, τα δεδομένα εισάγονται από α .csv
αρχείο στον πίνακα SQL μας.
Εκτελέστε αυτό το ερώτημα από τον διαχειριστή SQL:

SELECT * FROM test_results;
Φοβερός!
Μέθοδος #3: Εισαγάγετε την έξοδο ενός άλλου ερωτήματος SQL στον πίνακα SQL
Θέλετε να αποθηκεύσετε την έξοδο του ερωτήματός σας SQL; Δεν είναι πρόβλημα… Ίσως θέλετε να αποθηκεύσετε τα καθημερινά σας KPI που υπολογίζονται από πίνακες SQL — ή θέλετε να έχετε την καθαρή έκδοση ενός συνόλου δεδομένων δίπλα στο πρωτότυπο. Στην SQL, μπορείτε να το κάνετε αυτό εύκολα.
Ας πούμε ότι θέλουμε να δημιουργήσουμε έναν πίνακα όπου θέλουμε να αποθηκεύουμε μόνο τα ονόματα από το δικό μας test_results
τραπέζι. (Αυτό είναι ένα εικονικό παράδειγμα, αλλά θα κάνει τη δουλειά προς το παρόν.)
Βήμα 1) Δημιουργήστε αυτόν τον νέο πίνακα SQL:
CREATE TABLE student_names ( name TEXT );
Βήμα 2)
Χρησιμοποιήστε το INSERT INTO
δήλωση (που μάθαμε στο „Μέθοδος # 1“ ενότητα, στην αρχή αυτού του άρθρου), μόνο αντί να πληκτρολογήσετε τις τιμές με μη αυτόματο τρόπο, βάλτε a SELECT
δήλωση στο τέλος της ερώτησης.
Κάτι σαν αυτό:
INSERT INTO student_names (SELECT name FROM test_results);
Εγινε!
Το υποερώτημα μεταξύ των παρενθέσεων θα εκτελεστεί πρώτα — στη συνέχεια η έξοδος του θα εισαχθεί αυτόματα στο πρόσφατα δημιουργημένο student_names
τραπέζι.
Ελέγξτε το αποτέλεσμα:SELECT * FROM student_names;

Μπορείτε ακόμη και να συνδυάσετε αυτή τη μέθοδο με συναρτήσεις SQL. Για παράδειγμα, μπορείτε να υπολογίσετε τον μέσο όρο των αποτελεσμάτων της δοκιμής και στη συνέχεια να αποθηκεύσετε αυτές τις πληροφορίες σε έναν νέο πίνακα. Κάτι σαν αυτό:
CREATE TABLE test_averages ( test_average DECIMAL );
Επειτα:
INSERT INTO test_averages (SELECT AVG(test_result) FROM test_results);
Αυτός ο νέος πίνακας SQL θα αποθηκεύσει μόνο μία τιμή: το μέσο αποτέλεσμα δοκιμής… αλλά αν είχαμε επίσης αποτελέσματα μαθηματικών εξετάσεων, αποτελέσματα τεστ βιολογίας και αποτελέσματα δοκιμής φυσικής σε άλλους πίνακες SQL, αυτό test_averages
το τραπέζι θα ήταν το τέλειο μέρος για να συλλέξετε τους διαφορετικούς μέσους όρους.

Αυτός ήταν ο τρίτος – ελαφρώς πιο προηγμένος – τρόπος για να εισαγάγετε τα δεδομένα σας σε έναν πίνακα SQL. Τώρα προχωρήστε και δοκιμάστε αυτές τις μεθόδους στο δικό σας σύνολο δεδομένων!
συμπέρασμα
Σε αυτό το άρθρο μάθαμε τρεις μεθόδους για τη φόρτωση δεδομένων σε πίνακες SQL:
- Όταν θέλεις
INSERT
τα δεδομένα σας χειροκίνητα. (INSERT INTO ___ VALUES (____);
) - Όταν θέλεις
COPY
τα δεδομένα σας από ένα αρχείο. (COPY ____ FROM '_____' DELIMITER ' ';
) - Όταν θέλετε να αποθηκεύσετε την έξοδο ενός άλλου ερωτήματος SQL. (
INSERT INTO ____ (SELECT ____);
)
Τώρα, ξέρετε πώς να δημιουργείτε νέους πίνακες στην SQL και πώς να φορτώνετε δεδομένα σε αυτούς!
Στην υγειά σας,
Master Tommy