Ερωτήματα σε sql επιλέξτε ερώτημα. Transact-SQL - Αλλαγή και διαγραφή δεδομένων

Κάθε τραπέζι έχει τη λογική του αρχή και το λογικό του τέλος. Επίσης, οποιοσδήποτε πίνακας αποτελείται από δεδομένα που είναι συχνά, και στην περίπτωση των βάσεων δεδομένων σε μεγαλύτερο βαθμό, διάσπαρτα. Όπως σημειώθηκε στην πρώτη καταχώριση σχετικά με την SQL και τις βάσεις δεδομένων, τα δεδομένα μπορούν να προστίθενται τακτικά σε ολόκληρο τον κύκλο ζωής των βάσεων δεδομένων. Κατά τη διάρκεια αυτής της περιόδου, μπορούν να εισαχθούν περισσότερα από δώδεκα δεδομένα. Στην SQL, όπως σε όλα τα άλλα και σε όλα προγράμματα υπολογιστή, μπορείτε να ταξινομήσετε τα δεδομένα. Αυτό γίνεται με εντολή ΤΑΞΙΝΟΜΗΣΗ ΚΑΤΑ. Υπάρχουν δύο ορίσματα για αυτήν την εντολή.

  • Το ASC ορίζει τη σειρά σε αύξουσα σειρά (από το μικρότερο στο μεγαλύτερο)
  • DESC - φθίνουσα (από το μεγαλύτερο στο μικρότερο)
Γενικά, η προεπιλεγμένη σειρά στην SQL είναι αύξουσα (από το μικρότερο στο μεγαλύτερο).
Ας προσπαθήσουμε να ταξινομήσουμε τον πίνακα των οφειλετών κατά επώνυμο - στήλη Όνομα - με φθίνουσα σειρά

Οφειλέτες

Αριθμ μήνας έτος Sname πόλη διεύθυνση Ποινή Χρέος
0001 Ιούλιος2012 ΙβάνοφΣταυρούποληStavropolskaya, 14891.00 50000
0002 Δεκέμβριος2019 KononovΤατάροςZagorodnaya, 25419565.00 684068
0003 Ενδέχεται2013 ΓιαμσίνΜιχαήλοφσκΑγροτικός, 489868.00 165840
0004 Αύγουστος2012 θήραμαΣταυρούποληΚεντρικό, 164659.00 46580
... ... ... ... ... ... ... ...
9564 Μάρτιος2015 Ο ΟύλιεφDeminoΔιεθνές, 1566846.00 435089
9565 Οκτώβριος2012 ΠάβλοβαΣταυρούποληΣταθμός, 37685.00 68059
9566 Ιανουάριος2012 ΟυριούπαΜιχαήλοφσκFontannaya, 191235.00 51238
9567 Νοέμβριος2017 ΒαλέτοφΤατάροςΈξοδος, 6513698.00 789654

Εκτελέστε το αίτημα
ΕΠΙΛΟΓΗ *
ΑΠΟ Οφειλέτες
ΠΑΡΑΓΓΕΛΙΑ ΑΝΑ ΟΝΟΜΑ DESC ;

Οφειλέτες

Αριθμ μήνας έτος Sname πόλη διεύθυνση Ποινή Χρέος
0003 Ενδέχεται2013 ΓιαμσίνΜιχαήλοφσκΑγροτικός, 489868.00 165840
9566 Ιανουάριος2012 ΟυριούπαΜιχαήλοφσκFontannaya, 191235.00 51238
9564 Μάρτιος2015 Ο ΟύλιεφDeminoΔιεθνές, 1566846.00 435089
0004 Αύγουστος2012 θήραμαΣταυρούποληΚεντρικό, 164659.00 46580
9565 Οκτώβριος2012 ΠάβλοβαΣταυρούποληΣταθμός, 37685.00 68059
0002 Δεκέμβριος2019 KononovΤατάροςZagorodnaya, 25419565.00 684068
0001 Ιούλιος2012 ΙβάνοφΣταυρούποληStavropolskaya, 14891.00 50000
9567 Νοέμβριος2017 ΒαλέτοφΤατάροςΈξοδος, 6513698.00 789654

Η παραγγελία μπορεί επίσης να πραγματοποιηθεί σε ομαδοποιημένα δεδομένα χρησιμοποιώντας την εντολή . Αλλά σε αυτήν την περίπτωση, η εντολή ORDER BY στο ερώτημα θα πρέπει να είναι η τελευταία, δηλαδή
ΕΠΙΛΟΓΗ *
ΑΠΟ Οφειλέτες
ΟΜΑΔΑ ΑΝΑ ΟΝΟΜΑ
ΠΑΡΑΓΓΕΛΙΑ ΑΝΑ ΟΝΟΜΑ DESC ;

Εάν υπάρχουν κελιά με κενές τιμές (NULL) στα ταξινομημένα πεδία, τότε, ανάλογα με τα προγράμματα που εργάζονται με τη βάση δεδομένων, τέτοια κελιά μπορούν να βρίσκονται είτε στο τέλος της λίστας είτε στην αρχή.
Υπάρχει ένα άλλο κόλπο για την εκτέλεση παραγγελίας δεδομένων. Σκεφτείτε ένα ερώτημα
ΕΠΙΛΟΓΗ Αριθμός, Έτος, Όνομα
ΑΠΟ Οφειλέτες
ΠΑΡΑΓΓΕΛΙΑ ΚΑΤΑ 2 DESC ;

Εδώ, δύο σημαίνει τον τακτικό αριθμό της στήλης από τη συμβολοσειρά "SELECT Num, Year, Sname" και είναι αυτή η στήλη που θα χρησιμοποιηθεί για την κατάταξη με φθίνουσα σειρά στο τέλος

Οφειλέτες

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

SQL - Δήλωση SELECT

Το όνομα SQL (Structured Query Language) αντανακλά το γεγονός ότι τα ερωτήματα είναι το πιο συχνά χρησιμοποιούμενο στοιχείο της SQL. Ένα ερώτημα είναι μια δήλωση που στέλνει μια εντολή σε ένα σύστημα διαχείρισης βάσεων δεδομένων (DBMS) για να χειριστεί ή να εμφανίσει ορισμένες πληροφορίες. Όλα τα ερωτήματα επιλογής δεδομένων στην SQL κατασκευάζονται χρησιμοποιώντας την πρόταση SELECT. Σας επιτρέπει να εκτελείτε αρκετά σύνθετους ελέγχους και επεξεργασία δεδομένων.

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

ΕΠΙΛΟΓΗ σύνταξης δήλωσης

ΕΠΙΛΟΓΗ στήλη_λίστας ΑΠΟ ονοματεπώνυμο πίνακα

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

Column_listΛίστα στηλών πίνακα που επιλέγονται από το ερώτημα. Οι στήλες που δεν προσδιορίζονται στη δήλωση δεν θα περιλαμβάνονται στο αποτέλεσμα. Εάν χρειάζεται να εμφανίσετε τα δεδομένα όλων των στηλών, μπορείτε να χρησιμοποιήσετε τη συντομευμένη σημείωση. Ο αστερίσκος (*) σημαίνει την πλήρη λίστα των στηλών.

FROM table_nameΛέξη-κλειδί που πρέπει να υπάρχει σε κάθε αίτημα. Ακολουθείται από ένα κενό που χωρίζεται από το όνομα του πίνακα που είναι η πηγή δεδομένων.

Ο κωδικός σε αγκύλες είναι προαιρετικός σε μια δήλωση SELECT. Είναι απαραίτητο για ακριβέστερο ορισμό του αιτήματος.

Είναι επίσης απαραίτητο να πούμε ότι ο κώδικας SQL δεν κάνει διάκριση πεζών-κεφαλαίων. Αυτό σημαίνει ότι η καταχώρηση SELECT μπορεί να γραφτεί ως επιλογή. Το DBMS δεν θα κάνει διάκριση μεταξύ αυτών των δύο εγγραφών, αλλά συνιστάται να γράφονται όλες οι δηλώσεις SQL με κεφαλαία γράμματα, ώστε να μπορεί να διακρίνεται εύκολα από άλλους κώδικα.

Ας ρίξουμε μια ματιά στον πίνακα Πωλητές από το κλασικό σεμινάριο SQL του Martin Graber για παραδείγματα.
Εδώ είναι ο κώδικας MySQL για τη δημιουργία ενός δοκιμαστικού πίνακα:

ΔΗΜΙΟΥΡΓΙΑ ΠΙΝΑΚΑ `πωλητές` (`snum` INTEGER(11) NOT NULL AUTO_INCREMENT, `sname` VARCHAR(20) COLLATE cp1251_general_ci ΠΡΟΕΠΙΛΟΓΗ NULL, `city` VARCHAR(20) COLLATE `generalm125,COLLATE cp1250 ,3) DEFAULT NULL, PRIMARY KEY (`snum`))ENGINE=InnoDB SET CHARACTER "cp1251" COLLATE "cp1251_general_ci" COMMENT="InnoDB free: 5120 kB"; INSERT INTO `slespeople` (`snum`, `sname`, `city`, `comm`) VALUES (1001"Peel","London",0.120), (1002"Serres","San Jose",0.130 ), (1003"Axelrod","New York",0.100), (1004"Motika","London",0.110), (1007,"Rifkin","Barcelona",0.150); ΔΙΑΠΡΑΤΤΩ;

Ο πίνακας μοιάζει με αυτό:

Παράδειγμα δήλωσης SELECT

1. Είναι απαραίτητο να εμφανίσετε μια λίστα πωλητών και να εμφανίσετε τα ονόματά τους (όνομα)

ΕΠΙΛΕΞΤΕ το όνομα ΑΠΟ Πωλητές

Αποτέλεσμα:

Εδώ, μετά την πρόταση SELECT, παρατίθενται οι στήλες που θα εμφανιστούν. Τα ονόματα των στηλών χωρίζονται με κόμμα.

3. Είναι απαραίτητο να εμφανιστεί ολόκληρος ο πίνακας

Για να το κάνετε αυτό, μπορείτε να χρησιμοποιήσετε διαφορετική σύνταξη για τη σύνταξη ερωτημάτων. Παραθέτουμε κάθε στήλη μετά την πρόταση SELECT:

ΕΠΙΛΕΞΤΕ snum , sname , city , comm ΑΠΟ Πωλητές

Ή μπορείτε να επιτύχετε το ίδιο αποτέλεσμα χρησιμοποιώντας τη συντομογραφία:

ΕΠΙΛΟΓΗ * ΑΠΟ Πωλητές Αποτέλεσμα:

snumεπώνυμοπόληcomm
1001 ΦλούδαΛονδίνο0,12
1002 ΣερρώνΣαν Χοσέ0,13
1003 ΆξελροντΝέα Υόρκη0,1
1004 MotikaΛονδίνο0,11
1007 ΡίφκινΒαρκελώνη0,15
Θέλω επίσης να σας δώσω μια μικρή συμβουλή. Για τη διευκόλυνση του εντοπισμού σφαλμάτων ερωτημάτων, μερικοί άνθρωποι γράφουν μια λίστα στηλών που πρέπει να εμφανίζονται σε ξεχωριστή γραμμή. Αυτό διευκολύνει τον σχολιασμό του κώδικα. Η σύνταξη για τον σχολιασμό κώδικα στην SQL είναι /* σχολιασμένος κώδικας */ Παράδειγμα: SELECT snum ,sname , city , comm FROM Salespeople

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

SELECT /* snum , */ sname , city , comm FROM Πωλητές

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

Χρήση εκφράσεων σε μια δήλωση SELECT

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

4. Είναι απαραίτητο να εμφανίζονται οι προμήθειες (comm) των πωλητών ως ποσοστά και όχι ως δεκαδικοί αριθμοί

SELECT snum, sname, city, comm * 100 ΑΠΟ Πωλητές

Αποτέλεσμα:

snumεπώνυμοπόληcomm
1001 ΦλούδαΛονδίνο12
1002 ΣερρώνΣαν Χοσέ13
1003 ΆξελροντΝέα Υόρκη10
1004 MotikaΛονδίνο11
1007 ΡίφκινΒαρκελώνη15
Στην τελευταία στήλη, όλα τα δεδομένα που λαμβάνονται πολλαπλασιάζονται επί 100 και εμφανίζονται ως ποσοστό.

Αυτή η στήλη δεν έχει όνομα, επειδή δεν περιέχει τροποποιημένα δεδομένα και επομένως ονομάζεται κατά την κρίση του DBMS (για παράδειγμα, η MySQL ονομάζει τη στήλη comm * 100, στα παραδείγματα του M. Grabber, η στήλη έχει το όνομα 4, δηλαδή τον αριθμό του).

Σε τέτοιες περιπτώσεις, είναι βολικό στη χρήση ονομασία στήλης. Για παράδειγμα, μπορείτε να ονομάσετε το ποσοστό της τελευταίας στήλης. Για να το κάνετε αυτό, μετά το όνομα της στήλης, πρέπει να καθορίσετε τη λέξη-κλειδί AS και, στη συνέχεια, το όνομα της στήλης στη σελίδα που προκύπτει.

SELECT snum, sname, city, comm * 100 ΩΣ "τοις εκατό" ΑΠΟ Πωλητές Αποτέλεσμα:

snumεπώνυμοπόλητοις εκατό
1001 ΦλούδαΛονδίνο12
1002 ΣερρώνΣαν Χοσέ13
1003 ΆξελροντΝέα Υόρκη10
1004 MotikaΛονδίνο11
1007 ΡίφκινΒαρκελώνη15

Ως αποτέλεσμα του ερωτήματος, η τελευταία στήλη ονομάζεται συμβολοσειρά "ποσοστό", γεγονός που καθιστά ευκολότερη την κατανόηση.

Δεδομένου ότι ο αριθμός εμφανίζεται ως ποσοστό, θα ήταν ωραίο να το αναφέρετε στο αποτέλεσμα. Η δυνατότητα SQL έρχεται στη διάσωση προσθέστε κείμενο στο αποτέλεσμα. Μοιάζει με αυτό:

SELECT snum, sname, city, comm * 100 AS % , "%" ΑΠΟ Πωλητές Αποτέλεσμα:

snumεπώνυμοπόλητοις εκατό%
1001 ΦλούδαΛονδίνο12 %
1002 ΣερρώνΣαν Χοσέ13 %
1003 ΆξελροντΝέα Υόρκη10 %
1004 MotikaΛονδίνο11 %
1007 ΡίφκινΒαρκελώνη15 %

Μπορεί να φανεί ότι μετά την έξοδο της γραμμής από τη βάση δεδομένων, εμφανίστηκε μια νέα στήλη, γεμάτη με σύμβολο τοις εκατό (%).

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

Η MySQL χρησιμοποιεί τη συνάρτηση CONCAT . Εδώ είναι ο ορισμός του από το εγχειρίδιο:

CONCAT(str1,str2,...)
Επιστρέφει μια συμβολοσειρά που προκύπτει από τη συνένωση των ορισμάτων. Εάν τουλάχιστον ένα από τα ορίσματα είναι NULL, επιστρέφεται NULL. Μπορεί να λάβει περισσότερα από 2 επιχειρήματα. Το αριθμητικό όρισμα μετατρέπεται στην ισοδύναμη μορφή συμβολοσειράς του.

Παράδειγμα: SELECT snum, sname, city , CONCAT(comm * 100, "%") AS "persent" FROM πωλητές Αποτέλεσμα:

snumεπώνυμοπόληεπίμονος
1001 ΦλούδαΛονδίνο12.000%
1002 ΣερρώνΣαν Χοσέ13.000%
1003 ΆξελροντΝέα Υόρκη10.000%
1004 MotikaΛονδίνο11.000%
1007 ΡίφκινΒαρκελώνη15.000%

Σε αυτό το ερώτημα, η συνάρτηση CONCAT παίρνει 2 ορίσματα, αυτά είναι comm * 100 και το σύμβολο ποσοστού ("%). Στη συνέχεια ονομάζουμε τη στήλη με AS.

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

Εξαίρεση περιττών δεδομένων

Συχνά είναι απαραίτητο να εξαιρεθούν διπλές τιμές από τα αποτελέσματα ερωτημάτων. Η λέξη-κλειδί DISTINCT χρησιμοποιείται για αυτό. Το αντίθετο αποτέλεσμα επιτυγχάνεται χρησιμοποιώντας τη λέξη ALL, η οποία χρησιμοποιείται από προεπιλογή (δηλαδή, δεν χρειάζεται να καθοριστεί).

5. Είναι απαραίτητο να εμφανίζονται οι πόλεις (πόλη), όπου υπάρχουν πωλητές

Αίτημα χωρίς εξαίρεση:

ΕΠΙΛΟΓΗ πόλης ΑΠΟ πωλητές Αποτέλεσμα:

Οι διπλές τιμές του Λονδίνου εξαιρούνται από το αποτέλεσμα, όπως απαιτείται.

Ταξινόμηση του αποτελέσματος κατά τιμές ανά στήλη

Η δήλωση SELECT εξάγει δεδομένα σε μια αυθαίρετη ακολουθία. Για να ταξινομήσει το αποτέλεσμα κατά μια συγκεκριμένη στήλη, η SQL χρησιμοποιεί τον τελεστή ORDER BY (δηλαδή σειρά κατά...). Αυτή η δήλωση σάς επιτρέπει να αλλάξετε τη σειρά με την οποία εξάγονται τα δεδομένα. ORDER BY διατάσσει το αποτέλεσμα του ερωτήματος σύμφωνα με τις τιμές μιας ή περισσότερων στηλών που έχουν επιλεγεί στον όρο SELECT. Σε αυτήν την περίπτωση, για κάθε στήλη, μπορείτε να ορίσετε την ταξινόμηση σε αύξουσα σειρά - αύξουσα (ASC) (αυτή η παράμετρος χρησιμοποιείται από προεπιλογή) ή σε φθίνουσα σειρά - φθίνουσα (DESC).

Ταξινομήστε το αποτέλεσμα με βάση τη στήλη του ονόματος. Μετά τον τελεστή ORDER BY, υποδεικνύουμε με ποια στήλη να ταξινομηθεί και, στη συνέχεια, πρέπει να καθορίσετε τη μέθοδο ταξινόμησης

Παράδειγμα - ταξινόμηση με αύξουσα σειρά:

ΕΠΙΛΕΞΤΕ * ΑΠΟ Πωλητές ΠΑΡΑΓΓΕΛΙΑ ΚΑΤΑ ονοματεπώνυμο ASC

Αποτέλεσμα:


Παράδειγμα - ταξινόμηση κατά πολλαπλές στήλες:

ΕΠΙΛΟΓΗ snum, sname, city ΑΠΟ Πωλητές ΠΑΡΑΓΓΕΛΙΑ ΑΝΑ ονοματεπώνυμο DESC, πόλη DESC Αποτέλεσμα:

snumεπώνυμοπόλη
1002 ΣερρώνΣαν Χοσέ
1007 ΡίφκινΒαρκελώνη
1001 ΦλούδαΛονδίνο
1004 MotikaΛονδίνο
1003 ΆξελροντΝέα Υόρκη

Μερικές σημαντικές σημειώσεις:
- η στήλη με την οποία πραγματοποιείται η ταξινόμηση πρέπει να καθοριστεί στο SELECT (μπορείτε να χρησιμοποιήσετε *)
- Ο τελεστής ORDER BY γράφεται πάντα στο τέλος του ερωτήματος

Καλώς ορίσατε στον ιστότοπο του blog μου. Σήμερα θα μιλήσουμε για ερωτήματα sql για αρχάριους. Ορισμένοι webmasters μπορεί να έχουν μια ερώτηση. Γιατί να μάθω sql; Δεν μπορείς να τα βγάλεις πέρα;

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

Τι είναι

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

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

Τι μπορώ να κάνω

Η γλώσσα sql επιτρέπει:

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

Σπουδαίος! Έχοντας ασχοληθεί με την sql, μπορείτε να γράψετε εφαρμογές για WordPress οποιασδήποτε πολυπλοκότητας.

Τι δομή

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

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

Τι πρέπει να ξέρετε


Βασικά σημεία κατά την εκμάθηση Sql

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

Δημιουργία βάσης δεδομένων "bazaname"

Σε εισαγωγικά γράφουμε το όνομα της βάσης δεδομένων στα λατινικά. Προσπαθήστε να σκεφτείτε ένα ουσιαστικό όνομα για αυτήν. Μην δημιουργείτε μια βάση δεδομένων όπως "111", "www" και παρόμοια.

Αφού δημιουργήσετε τη βάση δεδομένων, εγκαταστήστε:

ΣΕΤ ΟΝΟΜΑΤΩΝ 'utf-8'

Αυτό είναι απαραίτητο ώστε το περιεχόμενο στον ιστότοπο να εμφανίζεται σωστά.

Τώρα δημιουργούμε έναν πίνακα:

ΔΗΜΙΟΥΡΓΗΣΤΕ ΤΡΑΠΕΖΙ 'bazaname' . "τραπέζι" (

Αναγνωριστικό INT(8) NOT NULL AUTO_INCREMENT ΚΥΡΙΟ ΚΛΕΙΔΙ,

ημερολόγιο VARCHAR(10),

περάστε VARCHAR(10),

ημερομηνία ΗΜΕΡΟΜΗΝΙΑ

Στη δεύτερη γραμμή, έχουμε γράψει τρία χαρακτηριστικά. Ας δούμε τι σημαίνουν:

  • Το χαρακτηριστικό NOT NULL σημαίνει ότι το κελί δεν θα είναι κενό (το πεδίο είναι υποχρεωτικό).
  • Η τιμή του AUTO_INCREMENT είναι αυτόματη συμπλήρωση.
  • Το PRIMARY KEY είναι το πρωτεύον κλειδί.

Πώς να προσθέσετε πληροφορίες

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

ΕΙΣΑΓΩΓΗ ΣΤΟ "Πίνακα"

(login , pass , date) VALUES

('Vasa', '87654321', '2017-06-21 18:38:44');

Σε αγκύλες υποδεικνύουμε το όνομα των στηλών και στην επόμενη - τις τιμές.

Σπουδαίος! Ακολουθήστε την ακολουθία ονομάτων και τιμών στηλών.

Πώς να ενημερώσετε τις πληροφορίες

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

ΕΝΗΜΕΡΩΣΗ ΣΕΤ «Πίνακα» = '12345678' WHERE id = '1'

Τώρα αλλάξτε τον κωδικό πρόσβασης σε '12345678'. Οι αλλαγές συμβαίνουν στη γραμμή με "id"=1. Εάν δεν γράψετε την εντολή WHERE, θα αλλάξουν όλες οι γραμμές, όχι μια συγκεκριμένη.

Σας συνιστώ να αγοράσετε το βιβλίο SQL για Dummies ". Με τη βοήθειά του θα μπορείτε να εργαστείτε επαγγελματικά με τη βάση δεδομένων βήμα προς βήμα. Όλες οι πληροφορίες χτίζονται με βάση την αρχή από το απλό στο σύνθετο και θα ληφθούν καλά.

Πώς να διαγράψετε μια καταχώρηση

Αν γράψατε κάτι λάθος, διορθώστε το με την εντολή DELETE. Λειτουργεί το ίδιο με το UPDATE. Γράφουμε τον παρακάτω κώδικα:

ΔΙΑΓΡΑΦΗ ΑΠΟ 'Πίνακα' ΟΠΟΥ id = '1'

Δειγματοληψία πληροφοριών

Η εντολή SELECT χρησιμοποιείται για την ανάκτηση τιμών από τη βάση δεδομένων. Γράφουμε τον παρακάτω κώδικα:

SELECT * FROM 'table' WHERE id = '1'

ΣΕ αυτό το παράδειγμαεπιλέξτε όλα τα διαθέσιμα πεδία στον πίνακα. Αυτό συμβαίνει εάν γράψετε έναν αστερίσκο "*" στην εντολή. Εάν πρέπει να επιλέξετε κάποια τιμή δείγματος, γράψτε ως εξής:

SELECT log , περάστε ΑΠΟ τον πίνακα WHERE id = '1'

Θα πρέπει να σημειωθεί ότι η ικανότητα εργασίας με βάσεις δεδομένων δεν θα είναι αρκετή. Για να δημιουργήσετε ένα επαγγελματικό έργο Διαδικτύου, θα πρέπει να μάθετε πώς να προσθέτετε δεδομένα από τη βάση δεδομένων στις σελίδες. Για να το κάνετε αυτό, εξοικειωθείτε με τη γλώσσα προγραμματισμού web php. Αυτό θα σας βοηθήσει Η δροσερή πορεία του Μιχαήλ Ρουσάκοφ .


Διαγραφή πίνακα

Εμφανίζεται με αίτημα DROP. Για να το κάνετε αυτό, γράψτε τις ακόλουθες γραμμές:

Τραπέζι DROP TABLE;

Εξαγωγή μιας εγγραφής από έναν πίνακα σύμφωνα με μια συγκεκριμένη συνθήκη

Σκεφτείτε αυτόν τον κωδικό:

SELECT id, countri, city FROM table WHERE άτομα>150000000

Θα εμφανίζει τα αρχεία των χωρών όπου ο πληθυσμός υπερβαίνει τα εκατόν πενήντα εκατομμύρια.

Ένας σύλλογος

Η σύνδεση πολλών πινάκων μεταξύ τους είναι δυνατή χρησιμοποιώντας το Join. Δείτε πώς λειτουργεί σε αυτό το βίντεο:

PHP και MySQL

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

  • Συνδεθείτε στη βάση δεδομένων χρησιμοποιώντας την εντολή mysql_connect().
  • Χρησιμοποιώντας mysql_select_db() επιλέξτε την επιθυμητή βάση δεδομένων.
  • Επεξεργασία του ερωτήματος με mysql_fetch_array();
  • Κλείνουμε τη σύνδεση με την εντολή mysql_close().

Σπουδαίος! Η εργασία με μια βάση δεδομένων δεν είναι δύσκολη. Το κύριο πράγμα είναι να γράψετε σωστά το αίτημα.

Οι αρχάριοι webmasters θα σκεφτούν. Και τι να διαβάσετε για αυτό το θέμα; Θα ήθελα να προτείνω το βιβλίο του Martin Graber " SQL για απλούς θνητούς ". Είναι γραμμένο με τέτοιο τρόπο ώστε οι αρχάριοι να καταλαβαίνουν τα πάντα. Χρησιμοποιήστε το ως βιβλίο αναφοράς.

Αλλά αυτό είναι μια θεωρία. Πώς λειτουργεί στην πράξη; Στην πραγματικότητα, ένα έργο Διαδικτύου δεν πρέπει μόνο να δημιουργηθεί, αλλά και να φτάσει στην κορυφή της Google και του Yandex. Το μάθημα βίντεο θα σας βοηθήσει με αυτό " Δημιουργία και προώθηση του ιστότοπου ».


Οδηγίες βίντεο

Έχετε ακόμα ερωτήσεις; Δείτε περισσότερα διαδικτυακά βίντεο.

συμπέρασμα

Έτσι, η ενασχόληση με τη σύνταξη ερωτημάτων sql δεν είναι τόσο δύσκολη όσο φαίνεται, αλλά οποιοσδήποτε webmaster πρέπει να το κάνει αυτό. Τα μαθήματα βίντεο που περιγράφονται παραπάνω θα σας βοηθήσουν σε αυτό. Εγγραφή σε Η ομάδα μου VKontakte για να μαθαίνετε πρώτοι για νέες ενδιαφέρουσες πληροφορίες.

Τα ερωτήματα γράφονται χωρίς εισαγωγικά διαφυγής, γιατί MySQL, MS SQLΚαι PostGreeείναι διαφορετικοί.

Ερώτημα SQL: λήψη των καθορισμένων (απαιτούμενων) πεδίων από τον πίνακα

SELECT id, country_title, count_people FROM table_name

Λαμβάνουμε μια λίστα με αρχεία: ΟΛΕΣ τις χώρες και τον πληθυσμό τους. Τα ονόματα των απαιτούμενων πεδίων χωρίζονται με κόμμα.

SELECT * FROM table_name

* υποδηλώνει όλα τα πεδία. Δηλαδή θα υπάρχουν οθόνες ΤΑ ΠΑΝΤΑπεδία δεδομένων.

Ερώτημα SQL: εμφάνιση εγγραφών από έναν πίνακα εξαιρουμένων των διπλότυπων

ΕΠΙΛΕΞΤΕ ΞΕΧΩΡΙΣΤΟΣ Τίτλος_Χώρας ΑΠΟ το όνομα_του πίνακα

Λαμβάνουμε μια λίστα με αρχεία: τις χώρες όπου βρίσκονται οι χρήστες μας. Μπορεί να υπάρχουν πολλοί χρήστες από μία χώρα. Σε αυτήν την περίπτωση, αυτό είναι το αίτημά σας.

Ερώτημα SQL: εμφάνιση εγγραφών από έναν πίνακα σύμφωνα με μια δεδομένη συνθήκη

SELECT id, country_title, city_title FROM table_name WHERE count_people>100000000

Λαμβάνουμε μια λίστα με αρχεία: χώρες όπου ο αριθμός των ατόμων είναι πάνω από 100.000.000.

Ερώτημα SQL: εμφάνιση εγγραφών από πίνακα με παραγγελία

ΕΠΙΛΟΓΗ αναγνωριστικού, city_title ΑΠΟ ονοματεπώνυμο πίνακα ΠΑΡΑΓΓΕΛΙΑ ΚΑΤΑ city_title

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

ΕΠΙΛΕΞΤΕ αναγνωριστικό, city_title ΑΠΟ ονοματεπώνυμο πίνακα ΠΑΡΑΓΓΕΛΙΑ ΚΑΤΑ city_title DESC

Λαμβάνουμε μια λίστα με ρεκόρ: πόλεις αντίστροφα ( DESC) είναι μια χαρά. Στην αρχή εγώ, στο τέλος ο Α.

Ερώτημα SQL: μέτρηση του αριθμού των εγγραφών

SELECT COUNT(*) FROM table_name

Παίρνουμε τον αριθμό (αριθμό) των εγγραφών στον πίνακα. Σε αυτήν την περίπτωση, ΔΕΝ υπάρχει λίστα εγγραφών.

Ερώτημα SQL: εμφάνιση του επιθυμητού εύρους εγγραφών

SELECT * FROM table_name LIMIT 2, 3

Παίρνουμε 2 (δεύτερη) και 3 (τρίτη) εγγραφές από τον πίνακα. Το ερώτημα είναι χρήσιμο κατά τη δημιουργία πλοήγησης σε ιστοσελίδες.

Ερωτήματα SQL με προϋποθέσεις

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

Ερώτημα SQL: ΚΑΙ κατασκευή (AND)

SELECT id, city_title FROM table_name WHERE country="Russia" AND oil=1

Λήψη λίστας ρεκόρ: πόλεις από τη Ρωσία ΚΑΙέχουν πρόσβαση στο πετρέλαιο. Πότε χρησιμοποιείται ο χειριστής; ΚΑΙ, τότε και οι δύο συνθήκες πρέπει να ταιριάζουν.

Ερώτημα SQL: OR κατασκευή (OR)

SELECT id, city_title FROM table_name WHERE country="Russia" OR country="USA"

Λάβετε μια λίστα με αρχεία: όλες οι πόλεις από τη Ρωσία ΉΗΠΑ. Πότε χρησιμοποιείται ο χειριστής; Ή, τότε ΤΟΥΛΑΧΙΣΤΟΝ μια συνθήκη πρέπει να ταιριάζει.

Ερώτημα SQL: ΚΑΙ ΟΧΙ κατασκευή (ΚΑΙ ΟΧΙ)

SELECT id, user_login FROM table_name WHERE country="Russia" ΚΑΙ ΟΧΙ count_comments<7

Λάβετε μια λίστα εγγραφών: όλοι οι χρήστες από τη Ρωσία ΚΑΙέκανε ΟΧΙ ΛΙΓΟΤΕΡΟ 7 σχόλια.

Ερώτημα SQL: IN κατασκευή (B)

SELECT id, user_login FROM table_name WHERE country IN ("Ρωσία", "Βουλγαρία", "Κίνα")

Λαμβάνουμε μια λίστα εγγραφών: όλοι οι χρήστες που ζουν σε ( ΣΕ) (Ρωσία, ή Βουλγαρία, ή Κίνα)

Ερώτημα SQL: NOT IN κατασκευή (NOT IN)

ΕΠΙΛΕΞΤΕ αναγνωριστικό, user_login ΑΠΟ το όνομα_του πίνακα ΟΠΟΥ Η χώρα ΟΧΙ ΜΕΣΑ ("Ρωσία","Κίνα")

Λαμβάνουμε μια λίστα εγγραφών: όλοι οι χρήστες που δεν ζουν σε ( ΟΧΙ ΜΕΣΑ) (Ρωσία ή Κίνα).

Ερώτημα SQL: ΕΙΝΑΙ NULL κατασκευή (κενές ή ΟΧΙ κενές τιμές)

SELECT id, user_login FROM table_name ΟΠΟΥ η κατάσταση ΕΙΝΑΙ NULL

Λαμβάνουμε μια λίστα εγγραφών: όλοι οι χρήστες όπου η κατάσταση δεν έχει οριστεί. Το NULL είναι ένα ξεχωριστό θέμα και επομένως ελέγχεται ξεχωριστά.

SELECT id, user_login FROM table_name ΟΠΟΥ η κατάσταση ΔΕΝ ΕΙΝΑΙ NULL

Λαμβάνουμε μια λίστα εγγραφών: όλοι οι χρήστες όπου η κατάσταση έχει οριστεί (ΟΧΙ ΜΗΔΕΝ).

Ερώτημα SQL: LIKE κατασκευή

ΕΠΙΛΕΞΤΕ id, user_login ΑΠΟ ονοματεπώνυμο πίνακα ΠΟΥ το επώνυμο ΑΡΕΣΕΙ "John%"

Λαμβάνουμε μια λίστα εγγραφών: χρήστες των οποίων το επώνυμο αρχίζει με τον συνδυασμό "Ivan". Το σύμβολο % σημαίνει ΟΠΟΙΟΝΔΗΠΟΤΕ αριθμό χαρακτήρων. Για να βρείτε το σύμβολο %, πρέπει να χρησιμοποιήσετε το διαφυγόν "Ivan\%".

Ερώτημα SQL: BETWEEN struct

SELECT id, user_login FROM table_name WHERE μισθός Μεταξύ 25000 ΚΑΙ 50000

Λαμβάνουμε μια λίστα με αρχεία: χρήστες που λαμβάνουν μισθό από 25.000 έως 50.000.

Υπάρχουν ΠΟΛΥ πολλοί λογικοί τελεστές, επομένως μελετήστε λεπτομερώς την τεκμηρίωση του διακομιστή SQL.

Πολύπλοκα ερωτήματα SQL

Ερώτημα SQL: ένωση πολλαπλών ερωτημάτων

(SELECT id, user_login FROM table_name1) UNION (SELECT id, user_login FROM table_name2)

Λαμβάνουμε μια λίστα με καταχωρήσεις: χρήστες που είναι εγγεγραμμένοι στο σύστημα, καθώς και εκείνοι οι χρήστες που είναι εγγεγραμμένοι στο φόρουμ ξεχωριστά. Ο χειριστής UNION μπορεί να συνδυάσει πολλαπλά ερωτήματα. Το UNION λειτουργεί σαν SELECT DISTINCT, δηλαδή απορρίπτει διπλές τιμές. Για να λάβετε απολύτως όλες τις εγγραφές, πρέπει να χρησιμοποιήσετε τον τελεστή UNION ALL.

Ερώτημα SQL: υπολογισμός τιμών πεδίων MAX, MIN, SUM, AVG, COUNT

Η έξοδος ενός, η μέγιστη τιμή του μετρητή στον πίνακα:

SELECT MAX(counter) FROM table_name

Η έξοδος ενός, η ελάχιστη τιμή του μετρητή στον πίνακα:

SELECT MIN(counter) FROM table_name

Εμφάνιση του αθροίσματος όλων των τιμών μετρητή στον πίνακα:

ΕΠΙΛΟΓΗ SUM(counter) FROM table_name

Εμφάνιση της μέσης τιμής του μετρητή στον πίνακα:

ΕΠΙΛΟΓΗ AVG(counter) FROM table_name

Εμφάνιση του αριθμού των μετρητών στον πίνακα:

SELECT COUNT(counter) FROM table_name

Συμπέρασμα για τον αριθμό των μετρητών στο κατάστημα Νο. 1, στον πίνακα:

SELECT COUNT(counter) FROM table_name WHERE office="Workshop #1"

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

Ερώτημα SQL: ομαδοποίηση εγγραφών

ΕΠΙΛΟΓΗ ήπειρου, SUM(country_area) ΑΠΟ ΟΜΑΔΑ ΧΩΡΩΝ ΑΝΑ ήπειρο

Λαμβάνουμε μια λίστα με ρεκόρ: με το όνομα της ηπείρου και με το άθροισμα των περιοχών όλων των χωρών τους. Δηλαδή, εάν υπάρχει κατάλογος χωρών όπου κάθε χώρα έχει καταγεγραμμένη την έκτασή της, τότε χρησιμοποιώντας την κατασκευή GROUP BY, μπορείτε να μάθετε το μέγεθος κάθε ηπείρου (με βάση την ομαδοποίηση ανά ηπείρους).

Ερώτημα SQL: χρήση πολλαπλών πινάκων μέσω ψευδωνύμου (ψευδώνυμο)

SELECT o.order_no, o.amount_paid, c.company FROM παραγγελίες AS o, πελάτης AS με WHERE o.custno=c.custno AND c.city="Tyumen"

Λαμβάνουμε μια λίστα με αρχεία: παραγγελίες από αγοραστές που ζουν μόνο στο Tyumen.

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

SELECT o.order_no, o.amount_paid, z.company FROM παραγγελίες AS o LEFT JOIN πελάτη AS z ON (z.custno=o.custno)

Ένθετα υποερωτήματα

SELECT * FROM table_name WHERE μισθός=(ΕΠΙΛΟΓΗ MAX(μισθός) FROM υπάλληλος)

Λαμβάνουμε ένα αρχείο: πληροφορίες για τον χρήστη με τον μέγιστο μισθό.

Προσοχή!Τα ένθετα υποερωτήματα είναι ένα από τα σημεία συμφόρησης στους διακομιστές SQL. Μαζί με την ευελιξία και τη δύναμή τους, αυξάνουν επίσης σημαντικά το φόρτο στον διακομιστή. Κάτι που οδηγεί σε καταστροφική επιβράδυνση για άλλους χρήστες. Υπάρχουν πολύ συχνές περιπτώσεις αναδρομικών κλήσεων με ένθετα ερωτήματα. Επομένως, συνιστώ ανεπιφύλακτα να ΜΗΝ χρησιμοποιείτε ένθετα ερωτήματα, αλλά να τα χωρίζετε σε μικρότερα. Ή χρησιμοποιήστε τον συνδυασμό LEFT JOIN που περιγράφεται παραπάνω. Εκτός από αυτό το είδος αιτημάτων, αποτελούν αυξημένο επίκεντρο των παραβιάσεων της ασφάλειας. Εάν αποφασίσετε να χρησιμοποιήσετε ένθετα υποερωτήματα, τότε θα πρέπει να τα σχεδιάσετε πολύ προσεκτικά και να κάνετε τις αρχικές εκτελέσεις σε αντίγραφα βάσης δεδομένων (δοκιμαστικές βάσεις δεδομένων).

Τα ερωτήματα SQL αλλάζουν δεδομένα

Ερώτημα SQL: INSERT

Εντολή ΕΙΣΑΓΕΤΕσας επιτρέπει να εισάγετε εγγραφές στον πίνακα. Με απλά λόγια, δημιουργήστε μια γραμμή με δεδομένα σε έναν πίνακα.

Αριθμός επιλογής 1. Συχνά χρησιμοποιούμενη οδηγία:

INSERT INTO table_name (id, user_login) VALUES (1, "ivanov"), (2, "petrov")

Στο τραπέζι " όνομα_πίνακα» θα εισάγει 2 (δύο) χρήστες ταυτόχρονα.

Επιλογή αριθμός 2. Είναι πιο βολικό να χρησιμοποιήσετε το στυλ:

INSERT table_name SET id=1, user_login="ivanov"; INSERT table_name SET id=2, user_login="petrov";

Αυτό έχει τα πλεονεκτήματα και τα μειονεκτήματά του.

Κύρια μειονεκτήματα:

  • Πολλά μικρά ερωτήματα SQL είναι ελαφρώς πιο αργά από ένα μεγάλο ερώτημα SQL, αλλά άλλα ερωτήματα θα μπουν στην ουρά για εξυπηρέτηση. Δηλαδή, εάν ένα μεγάλο ερώτημα SQL εκτελείται για 30 λεπτά, τότε όλο αυτό το διάστημα τα υπόλοιπα ερωτήματα θα καπνίζουν μπαμπού και θα περιμένουν τη σειρά τους.
  • Το αίτημα είναι πιο μαζικό από την προηγούμενη έκδοση.

Κύρια πλεονεκτήματα:

  • Κατά τη διάρκεια μικρών ερωτημάτων SQL, άλλα ερωτήματα SQL δεν αποκλείονται.
  • Ευκολία στην ανάγνωση.
  • Ευκαμψία. Σε αυτήν την επιλογή, δεν μπορείτε να ακολουθήσετε τη δομή, αλλά να προσθέσετε μόνο τα απαραίτητα δεδομένα.
  • Όταν δημιουργείτε αρχεία με αυτόν τον τρόπο, μπορείτε εύκολα να αντιγράψετε μια γραμμή και να την εκτελέσετε μέσω της γραμμής εντολών (κονσόλα), με αποτέλεσμα να μην επαναφέρετε ολόκληρο το ΑΡΧΕΙΟ.
  • Το στυλ γραφής είναι παρόμοιο με τη δήλωση UPDATE, η οποία είναι πιο εύκολο να θυμάστε.

Ερώτημα SQL: UPDATE

UPDATE table_name SET user_login="ivanov", user_surname="Ivanov" WHERE id=1

Στο τραπέζι " όνομα_πίνακα» στην εγγραφή με τον αριθμό id=1, οι τιμές των πεδίων user_login και user_surname θα αλλάξουν στις καθορισμένες τιμές.

Ερώτημα SQL: DELETE

DELETE FROM table_name WHERE id=3

Η εγγραφή με αριθμό αναγνωριστικού 3 θα διαγραφεί στον πίνακα table_name.

  1. Όλα τα ονόματα πεδίων συνιστώνται να γράφονται με μικρά γράμματα και, εάν είναι απαραίτητο, να χωρίζονται με ένα υποχρεωτικό διάστημα "_" για συμβατότητα με διαφορετικές γλώσσες προγραμματισμού όπως Delphi, Perl, Python και Ruby.
  2. Οι εντολές SQL είναι γραμμένες με ΚΕΦΑΛΑΙΑ γράμματα για αναγνωσιμότητα. Να θυμάστε πάντα ότι άλλοι άνθρωποι μπορούν να διαβάσουν τον κώδικα μετά από εσάς, αλλά πιθανότατα εσείς οι ίδιοι μετά από N χρονικό διάστημα.
  3. Ονομάστε τα πεδία πρώτα με ένα ουσιαστικό και μετά με μια ενέργεια. Για παράδειγμα: city_status, user_login, user_name.
  4. Προσπαθήστε να αποφύγετε αποθεματικές λέξεις σε διαφορετικές γλώσσες που μπορεί να προκαλέσουν προβλήματα σε SQL, PHP ή Perl, όπως (όνομα, μέτρηση, σύνδεσμος). Για παράδειγμα: ο σύνδεσμος μπορεί να χρησιμοποιηθεί στο MS SQL, αλλά είναι δεσμευμένος στο MySQL.

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

  • Μετάφραση
  • φροντιστήριο
Πρέπει να είναι “ SELECT * WHERE a=b FROM c ” ή “ SELECT WHERE a=b FROM c ON * ” ;

Αν είστε σαν εμένα, θα συμφωνήσετε: η SQL είναι ένα από εκείνα τα πράγματα που φαίνονται εύκολα με την πρώτη ματιά (διαβάζει αγγλικά!), αλλά με κάποιο τρόπο πρέπει να ψάξετε στο google κάθε απλό ερώτημα για να βρείτε τη σωστή σύνταξη.


Και μετά αρχίζουν οι ενώσεις, η συνάθροιση, οι υποερωτήσεις και αποδεικνύεται εντελώς σκουπίδια. Σαν αυτό:


ΕΠΙΛΕΞΤΕ μέλη.όνομα || "" || Members.lastname AS "Full Name" FROM borrowings INNER JOIN μέλη ON Members.memberid=borrowings.memberid INNER JOIN βιβλία ON books.bookid=borrowings.bookid WHERE borrowings.bookid IN (SELECT bookid FROM books WHERE stock>(SELECT m. ) ΑΠΟ βιβλία)) ΟΜΑΔΑ ΑΝΑ μέλη.όνομα, μέλη.επώνυμο;

Μπουε! Αυτό θα τρομάξει οποιονδήποτε αρχάριο, ή ακόμα και έναν μέσο προγραμματιστή, αν δει την SQL για πρώτη φορά. Αλλά δεν είναι όλα τόσο άσχημα.


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


Αν και η σύνταξη της SQL είναι σχεδόν η ίδια σε διαφορετικές βάσεις δεδομένων, αυτό το άρθρο χρησιμοποιεί την PostgreSQL για ερωτήματα. Ορισμένα παραδείγματα θα λειτουργήσουν στη MySQL και σε άλλες βάσεις δεδομένων.

1. Τρεις μαγικές λέξεις

Υπάρχουν πολλές λέξεις-κλειδιά στην SQL, αλλά οι SELECT , FROM και WHERE υπάρχουν σχεδόν σε κάθε ερώτημα. Λίγο αργότερα, θα συνειδητοποιήσετε ότι αυτές οι τρεις λέξεις αντιπροσωπεύουν τις πιο θεμελιώδεις πτυχές της δημιουργίας ερωτημάτων σε σχέση με τη βάση δεδομένων και άλλα, πιο σύνθετα ερωτήματα, είναι απλώς πρόσθετα πάνω από αυτά.

2. Η βάση μας

Ας ρίξουμε μια ματιά στη βάση δεδομένων που θα χρησιμοποιήσουμε ως παράδειγμα σε αυτό το άρθρο:







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

  • Ο πίνακας "βιβλία" αποθηκεύει πληροφορίες σχετικά με τον τίτλο, τον συγγραφέα, την ημερομηνία έκδοσης και τη διαθεσιμότητα του βιβλίου. Όλα είναι απλά.
  • Στον πίνακα "μέλη" - τα ονόματα και τα επώνυμα όλων των ατόμων που εγγράφηκαν στη βιβλιοθήκη.
  • Ο πίνακας «δανεισμοί» αποθηκεύει πληροφορίες για βιβλία που έχουν δανειστεί από τη βιβλιοθήκη. Η στήλη bookid αναφέρεται στο αναγνωριστικό του δανεισμένου βιβλίου στον πίνακα "books" και η στήλη Memberid αναφέρεται στο αντίστοιχο άτομο στον πίνακα "Members". Έχουμε επίσης ημερομηνία έκδοσης και ημερομηνία που πρέπει να επιστραφεί το βιβλίο.

3. Απλό αίτημα

Ας ξεκινήσουμε με ένα απλό αίτημα: χρειαζόμαστε ονόματαΚαι αναγνωριστικά(id) όλα τα βιβλία που γράφτηκαν από τον συγγραφέα "Dan Brown"


Το αίτημα θα είναι ως εξής:


SELECT bookid AS "id", τίτλος FROM books WHERE author="Dan Brown";

Και το αποτέλεσμα έχει ως εξής:


ταυτότητα τίτλος
2 Το χαμένο σύμβολο
4 Κόλαση

Πολύ απλό. Ας αναλύσουμε το αίτημα για να καταλάβουμε τι συμβαίνει.

3.1 ΑΠΟ - από όπου παίρνουμε τα δεδομένα

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


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

3.2 ΠΟΥ - ποια δεδομένα να εμφανιστούν

Το WHERE συμπεριφέρεται απλά σαν φίλτρο γραμμέςπου θέλουμε να εμφανίσουμε. Στην περίπτωσή μας, θέλουμε να δούμε μόνο σειρές όπου η τιμή στη στήλη του συγγραφέα είναι "Dan Brown".

3.3 ΕΠΙΛΟΓΗ - πώς να εμφανίσετε δεδομένα

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


Ολόκληρο το ερώτημα μπορεί να απεικονιστεί με ένα απλό διάγραμμα:


4. Συνδέσεις (ενώσεις)

Τώρα θέλουμε να δούμε τους τίτλους (όχι απαραίτητα μοναδικούς) όλων των βιβλίων του Νταν Μπράουν που έχουν δανειστεί από τη βιβλιοθήκη και πότε πρέπει να επιστραφούν αυτά τα βιβλία:


SELECT books.title AS "Title", borrowings.returndate AS "Return Date" FROM borrowings JOIN books ON borrowings.bookid=books.bookid WHERE books.author="Dan Brown";

Αποτέλεσμα:


Τίτλος ημερομηνία επιστροφής
Το χαμένο σύμβολο 2016-03-23 00:00:00
Κόλαση 2016-04-13 00:00:00
Το χαμένο σύμβολο 2016-04-19 00:00:00

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


δανεισμοί JOIN books ON borrowings.bookid=books.bookid είναι ένας νέος πίνακας που έχει σχηματιστεί συνδυάζοντας όλες τις εγγραφές από τους πίνακες "βιβλία" και "δανεισμούς" όπου ταιριάζουν οι αξίες της λογιστικής. Το αποτέλεσμα μιας τέτοιας συγχώνευσης θα είναι:



Και μετά κάνουμε ένα ερώτημα σε αυτόν τον πίνακα με τον ίδιο τρόπο όπως στο παραπάνω παράδειγμα. Αυτό σημαίνει ότι όταν συνδέετε πίνακες, χρειάζεται μόνο να ανησυχείτε για τον τρόπο διεξαγωγής αυτής της ένωσης. Και τότε το αίτημα γίνεται τόσο σαφές όσο στην περίπτωση του «απλού αιτήματος» από το σημείο 3.


Ας δοκιμάσουμε μια λίγο πιο σύνθετη ένωση με δύο πίνακες.


Τώρα θέλουμε να πάρουμε τα ονόματα και τα επώνυμα των ανθρώπων που πήραν τα βιβλία του συγγραφέα «Dan Brown» από τη βιβλιοθήκη.


Αυτή τη φορά ας πάμε από κάτω προς τα πάνω:


Βήμα 1- από πού παίρνουμε τα δεδομένα; Για να έχουμε το αποτέλεσμα που θέλουμε, πρέπει να ενώσουμε τους πίνακες «μέλος» και «βιβλία» με τον πίνακα «δανεισμοί». Η ενότητα JOIN θα μοιάζει με αυτό:


δανεισμοί JOIN books ON borrowings.bookid=books.bookid JOIN μέλη ON Members.memberid=borrowings.memberid

Το αποτέλεσμα της σύνδεσης μπορείτε να το δείτε στον σύνδεσμο.


Βήμα 2Τι δεδομένα δείχνουμε; Μας ενδιαφέρουν μόνο τα στοιχεία όπου ο συγγραφέας του βιβλίου είναι ο «Νταν Μπράουν»


WHERE books.author="Νταν Μπράουν"

Βήμα 3Πώς εμφανίζουμε δεδομένα; Τώρα που ελήφθησαν τα δεδομένα, πρέπει απλώς να εμφανίσετε το όνομα και το επώνυμο αυτών που πήραν τα βιβλία:


SELECT Members.firstname AS "First Name", Members.lastname AS "Last Name"

Σούπερ! Απομένει μόνο να συνδυάσουμε τα τρία στοιχεία και να κάνουμε το αίτημα που χρειαζόμαστε:


SELECT Members.firstname AS "First Name", members.lastname AS "Last Name" FROM borrowings JOIN books ON borrowings.bookid=books.bookid JOIN μέλη ON Members.memberid=borrowings.memberid WHERE books.author="Dan Brown";

Τι θα μας δώσει:


όνομα επίθετο
Μικρόφωνο Ο Γουίλις
Έλεν Χόρτον
Έλεν Χόρτον

Εξαιρετική! Αλλά τα ονόματα επαναλαμβάνονται (δεν είναι μοναδικά). Θα το διορθώσουμε σύντομα.

5. Συγκέντρωση

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


Ας συνεχίσουμε με το παράδειγμά μας όπου εμφανίζονται διπλά ονόματα. Μπορεί να φανεί ότι η Έλεν Χόρτον πήρε περισσότερα από ένα βιβλία, αλλά αυτό δεν είναι το περισσότερο Ο καλύτερος τρόποςδείχνουν αυτές τις πληροφορίες. Μπορείτε να υποβάλετε ένα άλλο αίτημα:


SELECT Members.firstname AS "First Name", Members.lastname AS "Last Name", count(*) AS "Number of borowed books" FROM borrowings JOIN books ON borrowings.bookid=books.bookid JOIN μέλη ON Members.memberid=borrowings .memberid WHERE books.author="Dan Brown" GROUP BY Members.firstname, Members.lastname;

Που θα μας δώσει το επιθυμητό αποτέλεσμα:


όνομα επίθετο Αριθμός βιβλίων που δανείστηκαν
Μικρόφωνο Ο Γουίλις 1
Έλεν Χόρτον 2

Σχεδόν όλες οι συναθροίσεις συνοδεύονται από ρήτρα GROUP BY. Αυτό το πράγμα μετατρέπει έναν πίνακα που θα μπορούσε να ληφθεί με ένα ερώτημα σε ομάδες πινάκων. Κάθε ομάδα αντιστοιχεί σε μια μοναδική τιμή (ή ομάδα τιμών) της στήλης που καθορίσαμε στο GROUP BY. Στο παράδειγμά μας, μετατρέπουμε το αποτέλεσμα από την προηγούμενη άσκηση σε μια ομάδα χορδών. Κάνουμε επίσης μια συνάθροιση με count , η οποία μετατρέπει πολλές σειρές σε μια ακέραια τιμή (στην περίπτωσή μας, τον αριθμό των σειρών). Αυτή η τιμή στη συνέχεια εκχωρείται σε κάθε ομάδα.


Κάθε σειρά στο αποτέλεσμα είναι το αποτέλεσμα της συνάθροισης κάθε ομάδας.



Μπορείτε να καταλήξετε στο λογικό συμπέρασμα ότι όλα τα πεδία στο αποτέλεσμα πρέπει είτε να καθοριστούν στο GROUP BY είτε να γίνει συγκέντρωση σε αυτά. Επειδή όλα τα άλλα πεδία μπορεί να διαφέρουν μεταξύ τους σε διαφορετικές σειρές και αν τα επιλέξετε με SELECT "th, τότε δεν είναι σαφές ποιες από τις πιθανές τιμές πρέπει να ληφθούν.


Στο παραπάνω παράδειγμα, η συνάρτηση count επεξεργάστηκε όλες τις σειρές (καθώς μετρούσαμε τον αριθμό των σειρών). Άλλες συναρτήσεις όπως το sum ή το max επεξεργάζονται μόνο τις καθορισμένες σειρές. Για παράδειγμα, αν θέλουμε να μάθουμε τον αριθμό των βιβλίων που έγραψε κάθε συγγραφέας, τότε χρειαζόμαστε αυτό το ερώτημα:


ΕΠΙΛΟΓΗ συγγραφέα, άθροισμα (απόθεμα) ΑΠΟ βιβλία ΟΜΑΔΑ ΑΝΑ συγγραφέα;

Αποτέλεσμα:


συγγραφέας άθροισμα
Ρόμπιν Σάρμα 4
Νταν Μπράουν 6
Τζον Γκριν 3
Amish Tripathi 2

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

6. Υποερωτήματα


Τα δευτερεύοντα ερωτήματα είναι κανονικά ερωτήματα SQL ενσωματωμένα σε μεγαλύτερα ερωτήματα. Χωρίζονται σε τρεις τύπους ανάλογα με τον τύπο του επιστρεφόμενου αποτελέσματος.

6.1 Δισδιάστατος πίνακας

Υπάρχουν ερωτήματα που επιστρέφουν πολλές στήλες. Ένα καλό παράδειγμα είναι το ερώτημα από την προηγούμενη άσκηση συγκέντρωσης. Ως υποερώτημα, απλώς θα επιστρέψει έναν άλλο πίνακα στον οποίο μπορούν να γίνουν νέα ερωτήματα. Συνεχίζοντας την προηγούμενη άσκηση, αν θέλουμε να μάθουμε τον αριθμό των βιβλίων που έγραψε ο συγγραφέας "Robin Sharma", τότε ένας από τους πιθανούς τρόπους είναι να χρησιμοποιήσουμε δευτερεύοντα ερωτήματα:


ΕΠΙΛΟΓΗ * ΑΠΟ (ΕΠΙΛΟΓΗ συγγραφέα, άθροισμα(απόθεμα) ΑΠΟ βιβλία ΟΜΑΔΑ ΑΝΑ συγγραφέα) AS αποτελέσματα WHERE author="Robin Sharma";

Αποτέλεσμα:



Μπορεί να γραφτεί ως: ["Robin Sharma", "Dan Brown"]


2. Τώρα χρησιμοποιήστε αυτό το αποτέλεσμα σε ένα νέο ερώτημα:


ΕΠΙΛΟΓΗ τίτλου, βιβλιοδεσία ΑΠΟ βιβλία WHERE συγγραφέας IN (ΕΠΙΛΟΓΗ συγγραφέα ΑΠΟ (ΕΠΙΛΟΓΗ συγγραφέα, άθροισμα(απόθεμα) ΑΠΟ βιβλία ΟΜΑΔΑ ΑΝΑ συγγραφέα) AS αποτελέσματα WHERE sum > 3);

Αποτέλεσμα:


τίτλος βιβλιοδεσμένος
Το χαμένο σύμβολο 2
Ποιος θα κλάψει όταν πεθάνεις; 3
Κόλαση 4

Είναι το ίδιο με:


ΕΠΙΛΕΞΤΕ τίτλο, bookid FROM books WHERE συγγραφέας IN ("Robin Sharma", "Dan Brown");

6.3 Ατομικές αξίες

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


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


Ο μέσος όρος μπορεί να ληφθεί με αυτόν τον τρόπο:


επιλέξτε το μέσο όρο (απόθεμα) από βιβλία.

Τι μας δίνει:


7. Γράψτε πράξεις

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

7.1 Ενημέρωση

Η σύνταξη ενός αιτήματος UPDATE είναι σημασιολογικά ίδια με ένα αίτημα ανάγνωσης. Η μόνη διαφορά είναι ότι αντί να επιλέγουμε στήλες με SELECT "th, ορίζουμε τη γνώση με SET "th.


Εάν χαθούν όλα τα βιβλία του Dan Brown, τότε πρέπει να επαναφέρετε την τιμή της ποσότητας. Το ερώτημα για αυτό θα ήταν:


ΕΝΗΜΕΡΩΣΗ βιβλίων SET stock=0 WHERE συγγραφέας="Dan Brown";

Το WHERE κάνει το ίδιο με πριν: επιλέγει σειρές. Αντί για το SELECT , το οποίο χρησιμοποιήθηκε κατά την ανάγνωση, χρησιμοποιούμε τώρα SET . Ωστόσο, τώρα πρέπει να καθορίσετε όχι μόνο το όνομα της στήλης, αλλά και τη νέα τιμή για αυτήν τη στήλη στις επιλεγμένες σειρές.


7.2 Διαγραφή

Το ερώτημα DELETE είναι απλώς ένα ερώτημα SELECT ή UPDATE χωρίς ονόματα στηλών. Σοβαρά. Όπως και με το SELECT και το UPDATE , η πρόταση WHERE παραμένει η ίδια: επιλέγει τις σειρές που θα διαγραφούν. Η λειτουργία διαγραφής καταστρέφει ολόκληρη τη σειρά, επομένως δεν έχει νόημα να καθορίσετε μεμονωμένες στήλες. Έτσι, εάν αποφασίσουμε να μην επαναφέρουμε τον αριθμό των βιβλίων του Dan Brown, αλλά να διαγράψουμε όλες τις καταχωρήσεις γενικά, τότε μπορούμε να υποβάλουμε ένα αίτημα όπως αυτό:


ΔΙΑΓΡΑΦΗ ΑΠΟ βιβλία WHERE συγγραφέας="Dan Brown";

7.3 Εισαγωγή

Ίσως το μόνο πράγμα που διαφέρει από άλλους τύπους ερωτημάτων είναι το INSERT . Η μορφή είναι:


INSERT INTO x(a,b,c) VALUES(x, y, z);

Όπου a , b , c είναι τα ονόματα των στηλών και x , y και z είναι οι τιμές που πρέπει να εισαχθούν σε αυτές τις στήλες, με αυτή τη σειρά. Αυτό είναι βασικά.


Ας δούμε ένα συγκεκριμένο παράδειγμα. Ακολουθεί ένα ερώτημα INSERT που συμπληρώνει ολόκληρο τον πίνακα "βιβλία":


INSERT INTO books (βιβλίο, τίτλος, συγγραφέας, δημοσιευμένο, απόθεμα) VALUES (1"Scion of Ikshvaku","Amish Tripathi","06-22-2015",2), (2"The Lost Symbol"," Dan Brown", "07-22-2010",3), (3"Who Will Cry When You Die?","Robin Sharma","06-06-2006",4), (4"Inferno" "Dan Brown","05-05-2014",3), (5"The Fault in our Stars","John Green","01-03-2015",3);

8. Επαλήθευση

Φτάσαμε στο τέλος, προτείνω μια μικρή δοκιμή. Δείτε αυτό το αίτημα στην αρχή του άρθρου. Μπορείτε να το καταλάβετε; Δοκιμάστε να το αναλύσετε σε ενότητες SELECT , FROM , WHERE , GROUP BY και δείτε τα μεμονωμένα στοιχεία υποερωτήματος.


Εδώ είναι σε πιο ευανάγνωστη μορφή:


ΕΠΙΛΕΞΤΕ μέλη.όνομα || "" || Members.lastname AS "Full Name" FROM borrowings INNER JOIN μέλη ON Members.memberid=borrowings.memberid INNER JOIN βιβλία ON books.bookid=borrowings.bookid WHERE borrowings.bookid IN (SELECT bookid FROM books WHERE stock> (ΕΠΙΛΟΓΗ μέση(στοκ ) ΑΠΟ βιβλία)) ΟΜΑΔΑ ΑΝΑ μέλη.όνομα, μέλη.επώνυμο;

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


Αποτέλεσμα:


Πλήρες όνομα
Λίντα Τάιλερ

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

Ετικέτες: Προσθήκη ετικετών

mob_info