Τι είναι η SQL και τι μπορεί να κάνει
- Πώς ενεργοποιούμε το Unified Auditing σε Oracle Database - 7 Οκτώβριος 2024
- Τι είναι η PostgreSQL και πως κάνουμε μία πλήρης εγκατάσταση - 2 Σεπτέμβριος 2024
- Πώς ρυθμίζουμε το replication του GoldenGate ώστε να διαβάζει από το Standby του Oracle Data Guard - 2 Αύγουστος 2024
Έχουμε δει τι είναι οι βάσεις δεδομένων όμως για να τις χρησιμοποιήσουμε πρέπει κάπως να μπορούμε να εξάγουμε ή να εισάγουμε δεδομένα από αυτές.
Πως γίνεται αυτό; Με την Structured Query Language ή αλλιώς SQL.
Είναι η βασική της έκδοση είναι κοινή για όλα τα RDBMS (Relational Database Management Systems) ή αλλιώς συστημάτων διαχείρισης σχεσιακών βάσεων δεδομένων.
Η SQL λοιπόν ανάλογα το RDBMS έχει κάποιες παραλλαγές όπως T-SQL για SQL-Server, PL-SQL για Oracle αλλά εμείς θα μιλήσουμε για την κοινή SQL.
Τύποι εντολών σε SQL
Τα SQL statements χωρίζονται σε 3 βασικές κατηγορίες DDL(Data Definition Language), DML(Data Manipulation Language) , DCL(Data Control Language).
Τα DDL statements αφορούν αλλαγές το σχήμα των πινάκων (CREATE/ALTER/DROP κλπ.), τα DML αλλαγές στις εγγραφές (INSERT, UPDATE, DELETE), τα DCL αφορούν τις αλλαγές στα δικαιώματα στη βάση.
Πάμε να δούμε τι μπορούμε να κάνουμε με την SQL.
Τα παραδείγματα μας θα είναι με greeklish ώστε να μην χρειαστεί να μπλέξουμε και με collations day one.
Δεν πρέπει να ξεχνάμε ότι από την στιγμή που μπορούμε να έχουμε πολλές διαφορετικές λογικές ομάδες αντικειμένων που ονομάζονται schema. Σωστό είναι πριν το όνομα του αντικειμένου να ορίζουμε και το schema του (με ‘.’ για διαχωριστικό). Όπως επίσης πριν το πεδίο να ορίζουμε τον αντικείμενο που ανήκει π.χ. dbo.pinakas.kwdikos_pelati. Για την απλότητα των παραδειγμάτων θα δουλέψουμε στο default schema.
Δημιουργία πίνακα (create table)
Για αρχή θα φτιάξουμε έναν πίνακα (DDL statement).
Ο πίνακας αυτός θα έχει ένα πεδίο τύπου ακέραιος αριθμός που είναι identity με βήμα (1,1) ως primary key. Δηλαδή ένα μοναδικό αριθμό που θα ξεκινήσει από το 1 και θα αυξάνει ανά μία μονάδα. Επίσης θα φτιάξουμε ένα πεδίο για κείμενο μέχρι 100 χαρακτήρες (μεταβαλόμενου μεγέθους) και ένα για αριθμό τηλεφώνου.
create table pinakas ( id INT identity (1,1) primary key, onoma varchar(100), tilefono INT )
Commands completed successfully.
Total execution time: 00:00:00.010
Εισαγωγή εγγραφών (insert)
Ας του προσθέσουμε τώρα 2 εγγραφές με insert statement (DML). Θα πρέπει να αναφέρουμε σε ποιον πίνακας
insert into pinakas values ('Kwstas','210772049′), ('Nikos','215294882′);
(1 row affected)
(1 row affected)
Total execution time: 00:00:00.018
Ανάγνωση δεδομένων (select)
Πάμε να δούμε τώρα πως θα διαβάσουμε τα δεδομένα από τον πίνακα…
Είναι αρκετά απλό με την εντολή Select (DQL)
select * from pinakas -- Με * ορίζουμε ότι θέλουμε να δούμε όλα τα πεδία του πίνακα.
Πως όμως θα του πούμε φέρε μου μόνο 2 πεδία, όνομα και τηλέφωνό;
Ευκολάκι.
select onoma,tilefono from pinakas
Τώρα θέλω να μου φέρεις μόνο τον Νίκο πως θα γίνει αυτό;
Με την προσθήκη where.
select onoma from pinakas where onoma = 'Nikos'
Ενημέρωση δεδομένων (update)
Πάμε να δούμε ένα ακόμα DDL statement το update. Το update μας δίνει την δυνατότητα να μπορούμε να αλλάξουμε τις τιμές στις εγγραφές σε όλες ή επιλεκτικά.
Ας πούμε ότι θέλουμε να κάνουμε όσες εγγραφές έχουν το όνομα Γιώργος σε Κώστας.
update pinakas set onoma ='Giorgos' where onoma = 'Kwstas' select * from pinakas
Τώρα θέλουμε να αλλάξουμε τον όνομα σε ένα τηλέφωνο.
update pinakas set onoma ='Leonidas' where tilefono = '210772049' select * from pinakas
Σορτάρισμα (order)
Ωραία τώρα θέλω να δω τα αποτελέσματα αλφαβητικά με το όνομα από το A στο Z.
select * from pinakas order by onoma desc
*φαίνεται ήμασταν ήδη στην αλφαβητική σειρά.
Διαγραφή δεδομένων (delete)
Θέλουμε όμως τώρα να σβήσουμε την εγγραφή που έχει όνομα Λεωνίδας. Αυτό θα γίνει με ένα delete (DML).
delete from pinakas where onoma = 'Leonidas' select * from pinakas
Εισαγωγή εγγραφών με συμπληρωμένα επιλεγμένα πεδία μόνο
Ας βάλουμε άλλη μια εγγραφή με insert.
insert into pinakas (tilefono,onoma) values ('Kwstas','210772049′)
Msg 245, Level 16, State 1, Line 1
Conversion failed when converting the varchar value ‘Kwstas’ to data type int.
Ουπς!! Κάτι δεν πήγε καλά… Τι έγινε τώρα;
Κάναμε ένα λάθος, του λέμε ότι στον πίνακα να περιμένει τα πεδία με τη σειρά τηλέφωνο και όνομα αλλά όταν βάλαμε τις τιμές τις δώσαμε ανάποδα οπότε ζητάμε να περάσουμε σε ένα πεδίο που δέχεται αριθμούς να εισάγουμε κείμενο.
insert into pinakas (onoma,tilefono) values ('Kwstas','210772049′) select * from pinakas
Γιατί όμως λείπουν id εγγραφών και ο Κώστας πήρε το 4 και όχι πχ το 3;
Truncate πίνακα
Γιατί παρότι κάναμε delete πριν τα identity δεσμεύονται (και καλά κάνουν) γιατί μπορεί να συνδέονται με άλλους πίνακες.
Στην περίπτωση που θέλουμε identity πάλι από την αρχή μπορούμε να κάνουμε truncate (DDL) που θα σβήσει όλα τα δεδομένα στον πίνακα.
truncate table pinakas go insert into pinakas values ('Kwstas',’210772049′) insert into pinakas values ('Nikos','215294882′) select * from pinakas
Βρες δεδομένα που περιέχουν… (like)
Τώρα έχουμε τηλέφωνα που ξεκινάνε από 215 και 210 εμείς όμως θέλουμε να δούμε μόνο όσα ξεκινάνε από 210 πως γίνεται αυτό; Με το statement του like, βάζοντας το pattern που θέλουμε και ένα μπαλαντέρ το %.
select * from pinakas where tilefono like '210%'
θα μπορούσαμε να βάλουμε το μπαλαντερ μπροστά π.χ. ‘%779510’ ή να ορίσουμε συγκεκριμένο εύρος χαρακτήρος βάζοντας ‘?’ αντι για ‘%’ π.χ. ‘2107050???’.
Πως μετράμε πόσες εγγραφές έχει ένας πίνακας (count)
Αυτή την στιγμή πόσες εγγραφές έχει ο πίνακας όμως; Ας κάνουμε ένα count να δούμε.
select count(onoma) from pinakas
Pivoting (group by)
Πάμε ένα βήμα παραπέρα για να δούμε πως μπορούμε να δούμε πόσες εγγραφές έχει ο πίνακας ανά όνομα (το λεγόμενο pivoting).
Αυτό γίνεται με ένα group by στο όνομα. Απαιτείτε όμως στο select να υπάρχουν τα πεδία που είναι στο group by στην περίπτωση μας το όνομα.
select onoma,count(onoma) as 'Arithmos' from pinakas group by onoma
Πρόσθεση καινούργιου πεδίου στον πίνακα (alter table add)
Ας προσθέσουμε με ένα DDL statement το alter ένα πεδίο κειμένου για το επίθετο.
alter table pinakas add epitheto varchar(100)
Nulls
Στην SQL ότι πεδίο είναι κενό μεταφράζεται ως NULL.
Αυτές είναι περιληπτικά οι βασικές λειτουργίες της SQL. Σύντομα θα ανέβει το άρθρο που θα περιέχει ανάλυση και για πιο προχωρημένες χρήσεις όπως: dynamic sql, cursors, common table expressions, loops, nested selects και subqueries.
Καλημέρα σας!
Εντέλει η SQL θεωρείται γλώσσα προγραμματισμού ή σύστημα διαχείρισης βάσεων δεδομένων?
Γλώσσα προγραμματισμού για σχεσιακές Βάσεις Δεδομένων.