sqlschool.gr logo

articles

Articles of SQLschool.gr Team

Getting Started : Writing T-SQL (Part 1)

Fivi Panopoulou - Sotiris Karras
Tuesday 17 February 2015


Αυτή η σειρά από posts, έχει σκοπό να βοηθήσει κάποιον να κάνει τα πρώτα του βήματα στην χρήση του Microsoft SQL Server και να κάνει μια γνωριμία με την Τransact-SQL.  Αν και σε γενικές γραμμές, το SQL Server Management Studio, δίνει σε ένα νέο χρήστη μεγάλη ευκολία μέσω του γραφικού περιβάλλοντος, εδώ θα χρησιμοποιήσουμε την Transact - SQL (T-SQL) και θα κάνουμε μια αναφορά στις βασικές εντολές που έχει για να δημιουργούμε αντικείμενα και να διαχειριζόμαστε δεδομένα.

Τι είναι η T-SQL; 

H SQL (Structured Query Language) είναι μια γλώσσα που σχεδιάστηκε για την διαχείριση δεδομένων σε συστήματα διαχείρισης σχεσιακών βάσεων δεδομένων (RDBMS).  Το 1986 δημιουργήθηκε το πρώτο standard για αυτή την γλώσσα, το οποίο αναθεωρήθηκε και εξελίχθηκε με επόμενες εκδόσεις. Η T-SQL (Transact - SQL) είναι η υλοποίηση της Microsoft για αυτό το SQL Standard.

Κατηγορίες των Statements 

Τα statements της  T-SQL χωρίζονται σε τρείς μεγάλες κατηγορίες.  

  • Data Manipulation Language (DML) Statements
    Όπως λέει και το όνομά τους είναι τα statements με τα οποία χειριζόμαστε τα δεδομένα, δηλαδή παίρνουμε τα δεδομένα που θέλουμε, εισάγουμε καινούρια, τροποποιούμε αυτά που υπάρχουν ή διαγράφουμε κάποια.  
  • Data Definition Language (DDL) Statements
    Με αυτά τα statements δημιουργούμε, τροποποιούμε και διαγράφουμε διάφορα αντικείμενα στην βάση μάς, όπως πίνακες, views, stored procedures, functions και πολλά άλλα.
  • Data Control Language (DCL) Statements
    Σε αυτή την κατηγορία statements ανήκουν τα statements με τα οποία διαχειριζόμαστε τα security permissions.


Πίνακες και Σχήματα

Τα κυριότερα αντικείμενα που περιέχει μια βάση δεδομένων είναι οι πίνακες (tables). Οι πίνακες, όπως και τα περισσότερα αντικείμενα μιας βάσης, ανήκουν σε ένα σχήμα (schema). Για να αναφερθούμε σε ένα πίνακα η πλήρης σύνταξη περιέχει 4 μέρη και είναι Server.Database.DatabaseSchema.Table. Με δεδομένο ότι βρισκόμαστε ήδη στο context μιας βάσης, μπορούμε να παραλείψουμε τα 2 πρώτα μέρη της παραπάνω σύνταξης και να μας μείνει το DatabaseSchema.DatabaseObject. Αν παραλείψουμε και το μέρος του σχήματος ο SQL Server θα θεωρήσει ότι εννοούμε το default για το χρήστη μας σχήμα. Αν δεν έχει ορισθεί διαφορετικά αυτό το σχήμα είναι το σχήμα dbo, που είναι ένα pre-defined σχήμα.

Δημιουργία Βάσης και Πινάκων

Το Create Statement, όπως λέει και το όνομά του, χρησιμοποιείται για την δημιουργία των αντικειμένων. Έστω λοιπόν, ότι έχουμε το βιβλιοπωλείο «η Σπηλιά του Βιβλίου» και ξεκινάμε να φτιάξουμε μια βάση δεδομένων για αυτό. Σε αυτήν θα υπάρχουν οι υπάλληλοί του, τα προϊόντα του, οι πωλήσεις του κλπ.

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

 
-- Δημιουργούμε την βάση
CREATE DATABASE [BookCave];
GO

-- Αλλάζουμε το context ώστε να βρισκόμαστε σε αυτό 
-- της βάσης που δημιουργήσαμε
USE [BookCave];


-- Φτιάχνουμε έναν πίνακα Συγγραφέων
CREATE TABLE Authors
(
    Id int IDENTITY NOT NULL PRIMARY KEY,
    Firstname    nvarchar(60) NOT NULL,
    Lastname    nvarchar(60) NOT NULL
);

-- Φτιάχνουμε ένεν πίνακα με κατηγορίες βιβλίων
CREATE TABLE Genres
(
    Id int IDENTITY NOT NULL PRIMARY KEY,
    Description nvarchar(100) NOT NULL
);
GO

-- Φτιάχνουμε έναν πίνακα για τα βιβλία
CREATE TABLE Books
(
    Id int IDENTITY NOT NULL PRIMARY KEY,
    Title nvarchar(150) NOT NULL,
    AuthorId int NOT NULL,
    GenreId int NOT NULL,
    MainLanguage char(2) NOT NULL,
    CONSTRAINT FK_Books_Authors FOREIGN KEY (AuthorId) REFERENCES Authors (Id),
    CONSTRAINT FK_Books_Genres FOREIGN KEY (GenreId) REFERENCES Genres (Id)
);
GO

Για έναν πίνακα χρειάζεται να ορίσουμε τι στήλες θα έχει. Για κάθε στήλη ορίζουμε ένα όνομα, τι τύπου δεδομένα θα έχει (int, char,date κλπ) και αν δέχεται NULL τιμές ή όχι. Επίσης ορίζουμε ποιά από τις στήλες μας θέλουμε να είναι PRIMARY KEY.

Στον τελευταίο πίνακα με τα βιβλία, βλέπουμε πώς μπορούμε να ορίσουμε σχέσεις μεταξύ πινάκων. Αυτό γίνεται με τα foreign keys, και σε αυτό το παράδειγμα στο FK_Books_Authors δηλώνουμε ότι η στήλη AutorId του πίνακα Books αναφέρεται σε τιμές της στήλης Id του πίνακα Authors.

Αφού δεν ορίσαμε κάτι διαφορετικό οι πίνακες αυτοί ανήκουν στο σχήμα dbo.

IDENTITY

 Αν θέλουμε να έχουμε ένα auto increment primary key, που να παίρνει αυτόματα μια επόμενη τιμή, χρησιμοποιούμε το keyword IDENTITY. Στην γενικότερη μορφή του αυτό είναι IDENTITY (seed,increment), καθορίζοντας ότι θέλουμε οι αριθμοί που θα δίνει στις εγγραφές μας να ξεκινάνε από τιμή seed και να αυξάνονται κατά increment. Όταν παραλείπουμε αυτούς τους αριθμούς όπως κάναμε στο παράδειγμα μας, είναι το ίδιο με το να είχαμε γράψει IDENTITY(1,1), δηλαδή ζητάμε να δίνει συνεχόμενους ακεραίους ξεκινώντας από το ένα.

 

DATA TYPES
H T-SQL περιλαμβάνει τις παρακάτω κατηγορίες τύπων δεδομένων: 

  • Exact numeric (bigint, bit, decimal, int, money, numeric, smallint, smallmoney, tinyint) 
  • Approximate numeric (float, real) 
  • Date and time (date, datetime, datetime2, datetimeoffset, dmalldatetime, time) 
  • Character strings (char, text, varchar) 
  • Unicode character strings (nchar, nvarchar, ntext) 
  • Binary strings (binary, image, varbinary) 
  • Other data types (cursor, hierarchyid, sql_variant, table, timestamp, uniqueidentifier, xml) 

 

Για το παράδειγμα μας, μιας που σε αρκετές στήλες έχουμε strings, αξίζει να αναφερθούμε λίγο στα character data types. Σε γενικές γραμμές, όπως φαίνεται και στα παραπάνω έχουμε έναν διαχωρισμό μεταξύ των character strings που δεν περιέχουν Unicode χαρακτήρες και αυτούς που περιέχουν Unicode χαρακτήρες και οι δεύτεροι έχουν τα ίδια ονόματα με τους πρώτους με ένα n μπροστά. Το character set που χρησιμοποιούν οι δεύτεροι είναι το UNICODE UCS-2.  Ο δεύτερος διαχωρισμός, είναι το char/nchar με το varchar/nvarchar. Οι πρώτοι δύο είναι σταθερού μήκους strings, δηλαδή το nchar(2) είναι ένα unicode string 2 χαρακτήρων, ενώ οι δεύτεροι δύο είναι μεταβλητού μήκους, δηλαδή το nvarchar(60) σημαίνει ότι αυτό το string μπορεί να έχει μέχρι 60 χαρακτήρες.

 

Σημείωση no1: To GO δεν είναι statement της T-SQL, αλλά μια εντολή που αναγνωρίζεται από τα utilities του SQL Server όπως το sqlcmd και το SQL Server Management Studio ως εντολή που σηματοδοτεί το τέλος ενός batch.

Σημείωση no2:  Προτείνεται η χρήση των semicolons (;) στο τέλος κάθε T-SQL statement. Ο λόγος για αυτό όπως δίνεται εδω και είναι ο εξής: "Although the semicolon is not required for most statements in this version of SQL Server, it will be required in a future version."

Fivi Panopoulou

Fivi Panopoulou

Το 2007 ξεκίνησα τις σπουδές μου στη σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών στο Εθνικό Μετσόβιο Πολυτεχνείο.Κατά την διάρκεια των σπουδών μου εκεί αγάπησα τον προγραμματισμό και τα συστήματα πληροφορικής, καθώς επίσης απέκτησα το ιδιαίτερο ενδιαφέρον μου για τις βάσεις δεδομένων. Κατά την διάρκεια της διπλωματικής μου ασχολήθηκα με ζητήματα ανωνυμοποίησης δεδομένων και την ανάπτυξη σχετικού εργαλείου. Τα τελευταία χρόνια των σπουδών μου, μου δόθηκε η ευκαιρία να ασχοληθώ περισσότερο και να διευρύνω τους ορίζοντές μου ως Microsoft Student Partner και μέσω της κοινότητας Student Guru. Στα πλαίσια των κοινοτήτων αυτών, ξεκίνησα να ασχολούμαι με παρουσιάσεις αλλά και να γνωρίζω τον SQL Server. Από την πρώτη στιγμή που ασχολήθηκα μαζί του, συνειδητοποίησα πόσο ήθελα να εμβαθύνω τις γνώσεις μου σχετικά με αυτόν και τα συστήματα διαχείρισης βάσεων δεδομένων γενικότερα, πράγμα που προσπαθώ να κάνω έκτοτε. Πριν χρόνια είχα την τύχη να συμμετέχω στο πρόγραμμα mentoring, μέσω του οποίου γνώρισα τον κ. Χατζηπαυλή. Από τότε συμμετέχω στην ομάδα του SQLschool.gr.


Sotiris Karras

Sotiris Karras

Είμαι απόφοιτος της σχολής Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών του Εθνικού Μετσόβιου Πολυτεχνείου και στα ενδιαφέροντά μου συμπεριλαμβάνεται o τομέας του Knowledge and Data Engineering. Πιο συγκεκριμένα, έχω ασχοληθεί ακαδημαϊκά και ερευνητικά με τον τομέα του data privacy και data anonymity, ενώ πάθος μου είναι ό,τι έχει να κάνει με relational databases και data management. Στο παρελθόν, έχω συνεργαστεί με την Microsoft Hellas ως Microsoft Student Partner για ακαδημαϊκές δραστηριότητες και ήμουν μέρος του MVP mentoring προγράμματός της, στο οποίο είχα την τύχη να γνωρίσω τον κ. Χατζηπαυλή.

Tip

What's New in SQL Server 2022 - Episodes

More Tips...

Become a member

If you want to receive updates from us become a member to our community.

Connect

Explore

Learn


sqlschool.gr © 2010-2024 All rights reserved

This site uses cookies for operational and analytics purposes only. By continuing to browse this site, you agree to their use.