Περισσότερα
Εισαγωγή στις τιμές ... ( SELECT ... FROM ... )
Προσπαθώ να κάνω "ΕΙΣΑΓΩΓΗ ΣΕ" έναν πίνακα χρησιμοποιώντας την είσοδο από έναν άλλο πίνακα. Αν και αυτό είναι απολύτως εφικτό για πολλές μηχανές βάσεων δεδομένων, φαίνεται ότι πάντα δυσκολεύομαι να θυμηθώ τη σωστή σύνταξη για τη μηχανή SQL
της ημέρας (MySQL, Oracle, SQL Server, Informix και DB2).
Υπάρχει μια σύνταξη-γρίφος που προέρχεται από κάποιο πρότυπο SQL (για παράδειγμα, SQL-92) που θα μου επέτρεπε να εισάγω τις τιμές χωρίς να ανησυχώ για την υποκείμενη βάση δεδομένων;
1333
3
Δοκιμάστε:
Αυτή είναι η τυπική ANSI SQL και θα πρέπει να λειτουργεί σε οποιοδήποτε DBMS.
Σίγουρα λειτουργεί για:
@Shadow_x99: και μπορείτε επίσης να έχετε πολλαπλές στήλες και άλλα δεδομένα:
Επεξεργασία: Θα πρέπει να αναφέρω ότι έχω χρησιμοποιήσει αυτή τη σύνταξη μόνο με Access, SQL 2000/2005/Express, MySQL και PostgreSQL, οπότε αυτά θα πρέπει να καλύπτονται. Ένας σχολιαστής επεσήμανε ότι θα λειτουργήσει και με την SQLite3.
Και οι δύο απαντήσεις που βλέπω λειτουργούν μια χαρά στο Informix συγκεκριμένα και είναι βασικά τυπική SQL. Δηλαδή, ο συμβολισμός:
δουλεύει μια χαρά με το Informix και, θα περίμενα, με όλα τα DBMS. (Κάποτε, πριν από 5 ή περισσότερα χρόνια, αυτό είναι το είδος του πράγματος που η MySQL δεν υποστήριζε πάντα- τώρα έχει αξιοπρεπή υποστήριξη για αυτό το είδος της τυποποιημένης σύνταξης SQL και, AFAIK, θα λειτουργούσε OK με αυτή τη σημειογραφία). Η λίστα στηλών είναι προαιρετική, αλλά υποδεικνύει τις στήλες-στόχους με τη σειρά, οπότε η πρώτη στήλη του αποτελέσματος της SELECT θα πάει στην πρώτη στήλη που αναγράφεται στη λίστα, κ.λπ. Ελλείψει της λίστας στηλών, η πρώτη στήλη του αποτελέσματος της SELECT πηγαίνει στην πρώτη στήλη του πίνακα-στόχου.
Αυτό που μπορεί να διαφέρει μεταξύ των συστημάτων είναι ο συμβολισμός που χρησιμοποιείται για τον προσδιορισμό των πινάκων στις διάφορες βάσεις δεδομένων - το πρότυπο δεν λέει τίποτα για τις λειτουργίες μεταξύ των βάσεων δεδομένων (πόσο μάλλον μεταξύ των ΣΔΒΔ). Με το Informix, μπορείτε να χρησιμοποιήσετε τον ακόλουθο συμβολισμό για την αναγνώριση ενός πίνακα:
Δηλαδή, μπορείτε να καθορίσετε μια βάση δεδομένων, προαιρετικά να προσδιορίσετε τον διακομιστή που φιλοξενεί αυτή τη βάση δεδομένων αν δεν βρίσκεται στον τρέχοντα διακομιστή, ακολουθούμενη από έναν προαιρετικό ιδιοκτήτη, τελεία και τέλος το πραγματικό όνομα του πίνακα. Το πρότυπο SQL χρησιμοποιεί τον όρο schema για αυτό που η Informix αποκαλεί ιδιοκτήτη. Έτσι, στο Informix, οποιοσδήποτε από τους ακόλουθους συμβολισμούς θα μπορούσε να προσδιορίσει έναν πίνακα:
Ο ιδιοκτήτης γενικά δεν χρειάζεται να τεθεί σε εισαγωγικά- ωστόσο, αν χρησιμοποιήσετε εισαγωγικά, πρέπει να γράψετε σωστά το όνομα του ιδιοκτήτη - γίνεται ευαίσθητο σε πεζά και κεφαλαία. Δηλαδή:
όλα προσδιορίζουν τον ίδιο πίνακα. Με την Informix, υπάρχει μια ήπια επιπλοκή με τις βάσεις δεδομένων MODE ANSI, όπου τα ονόματα των ιδιοκτητών μετατρέπονται γενικά σε κεφαλαία (η informix αποτελεί εξαίρεση). Δηλαδή, σε μια βάση δεδομένων MODE ANSI (που δεν χρησιμοποιείται συνήθως), θα μπορούσατε να γράψετε:
και το όνομα του ιδιοκτήτη στον κατάλογο του συστήματος θα ήταν "SOMEONE", αντί για 'someone'. Αν περικλείσετε το όνομα ιδιοκτήτη σε διπλά εισαγωγικά, λειτουργεί σαν οριοθετημένο αναγνωριστικό. Με την τυπική SQL, τα οριοθετημένα αναγνωριστικά μπορούν να χρησιμοποιηθούν σε πολλά σημεία. Με το Informix, μπορείτε να τα χρησιμοποιήσετε μόνο γύρω από τα ονόματα ιδιοκτητών -- σε άλλα πλαίσια, το Informix αντιμετωπίζει τόσο τις μονές όσο και τις διπλές εισαγωγικές συμβολοσειρές ως συμβολοσειρές, αντί να διαχωρίζει τις μονές εισαγωγικές συμβολοσειρές ως συμβολοσειρές και τις διπλές εισαγωγικές ως οριοθετημένα αναγνωριστικά. (Φυσικά, για λόγους πληρότητας, υπάρχει μια μεταβλητή περιβάλλοντος, DELIMIDENT, η οποία μπορεί να οριστεί -σε οποιαδήποτε τιμή, αλλά το Y είναι το ασφαλέστερο- για να υποδείξει ότι τα διπλά εισαγωγικά περιβάλλουν πάντα τα οριοθετημένα αναγνωριστικά και τα μονά εισαγωγικά περιβάλλουν πάντα τις συμβολοσειρές).
Σημειώστε ότι ο MS SQL Server καταφέρνει να χρησιμοποιεί [delimited identifiers] που περικλείονται σε αγκύλες. Μου φαίνεται περίεργο και σίγουρα δεν αποτελεί μέρος του προτύπου SQL.