Advertisement
michelgreek

Εισαγωγή στην SQL

Mar 26th, 2017
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 40.85 KB | None | 0 0
  1. Εισαγωγή στην SQL
  2. Δρ. Κωνσταντίνος Χ. Γιωτόπουλος
  3.  
  4. SQL Background
  5.  SQL
  6. • Structured Query Language
  7. • Standard query γλώσσα για εμπορικά relational DBMSs
  8. • Κάθε DBMS έχει και τα δικά του extensions
  9.  Ιστορική εξέλιξη
  10. • SEQUEL at IBM (1974) on System R
  11. • IMB DB2 SQL (1983)
  12. • SQL (SQL1 or SQL-86): first standard version by ANSI and ISO
  13. • SQL2 (SQL-92): more DDL/DML features
  14. • SQL3 (SQL-99): object-oriented concepts
  15.  
  16. Γενικά
  17.  Για να μπορέσουμε να δημιουργήσουμε και να διαχειριστούμε μια
  18. βάση δεδομένων, μπορούμε να χρησιμοποιήσουμε ειδικές
  19. γλώσσες προγραμματισμού, τις λεγόμενες γλώσσες
  20. ερωταπαντήσεων (query languages).
  21.  Είναι γλώσσες μη διαδικαστικές, τέταρτης γενιάς
  22. (4th generation languages).
  23.  Εμείς απλά διατυπώνουμε με απλές και κατανοητές εντολές το τι
  24. πληροφορίες ζητάμε και το ΣΔΒΔ (Σύστημα Διαχείρισης Βάσεων
  25. Δεδομένων) αναλαμβάνει να μας απαντήσει.
  26.  Η SQL (Structured Query Language, δηλ. Δομημένη Γλώσσα
  27. Ερωταπαντήσεων) είναι σήμερα η πιο δημοφιλής και πιο
  28. διαδεδομένη γλώσσα ανάπτυξης και διαχείρισης σχεσιακών
  29. βάσεων δεδομένων.
  30.  
  31. Γενικά (2)
  32.  Η SQL αποτελείται από εντολές με τα ορίσματά τους,
  33. τις οποίες μπορούμε να χρησιμοποιήσουμε με
  34. συγκεκριμένους κανόνες σύνταξης για να πάρουμε τα
  35. αποτελέσματα που θέλουμε.
  36.  Με την SQL μπορούμε να
  37.  δημιουργήσουμε μια βάση δεδομένων και τους πίνακές της με
  38. τα αντίστοιχα πεδία,
  39.  να καταχωρήσουμε δεδομένα στους πίνακες,
  40.  να τροποποιήσουμε και να διαγράψουμε τα δεδομένα αυτά,
  41.  να αλλάξουμε τη δομή των πινάκων με προσθήκη και διαγραφή
  42. πεδίων και
  43.  να εμφανίσουμε πληροφορίες (συνδυασμούς από δεδομένα).
  44.  
  45. Γενικά (3)
  46. Τη Γλώσσα Ορισμού Δεδομένων (DDL, Data Definition Language),
  47. η οποία περιέχει τις απαραίτητες εντολές για τον ορισμό και την
  48. τροποποίηση του σχεσιακού σχήματος καθώς και για τη
  49. δημιουργία, την τροποποίηση και τη διαγραφή σχέσεων. Περιέχει
  50. ακόμη τις εντολές δημιουργίας και επεξεργασίας όψεων και
  51. ορισμού περιορισμών ακεραιότητας.
  52. Τη Γλώσσα Χειρισμού Δεδομένων (DML, Data Manipulation
  53. Language), η οποία περιέχει τις απαραίτητες εντολές για την
  54. εμφάνιση (αναζήτηση) δεδομένων καθώς και για την καταχώρηση,
  55. τροποποίηση και διαγραφή των εγγραφών (πλειάδων) μιας
  56. σχέσης.
  57. Τέλος, περιέχει εντολές για τον ορισμό και την
  58. επεξεργασία συναλλαγών (transactions).
  59.  
  60. char(n), ένα αλφαριθμητικό (string) με n ακριβώς χαρακτήρες.
  61. varchar(n), ένα αλφαριθμητικό (string) με μεταβλητό μήκος και
  62. με n το πολύ χαρακτήρες.
  63. int, ακέραιος αριθμός.
  64. smallint, ακέραιος αριθμός με μικρές τιμές.
  65. Numeric(p, d), αριθμός με p ψηφία, από τα οποία τα d είναι
  66. δεκαδικά.
  67. real, αριθμός κινητής υποδιαστολής απλής ακρίβειας.
  68. double precision, αριθμός κινητής υποδιαστολής διπλής ακρίβειας.
  69. float(n), αριθμός κινητής υποδιαστολής με ακρίβεια n ψηφίων.
  70. date, ημερομηνία (ημέρα, μήνας, έτος).
  71. time, ώρα (ώρα, λεπτά, δευτερόλεπτα).
  72.  
  73. SQL Create Table
  74. Η CREATE TABLE χρησιμοποιείται για τη δημιουργία πινάκων στη βάση δεδομένων.
  75. Η σύνταξη της CREATE TABLE είναι:
  76. CREATE TABLE "table_name"
  77. ("column 1" "data_type_for_column_1",
  78. "column 2" "data_type_for_column_2",
  79. ... )
  80. Αν θέλουμε να δημιουργήσουμε έναν πίνακα θα έχουμε:
  81. CREATE TABLE customer
  82. (First_Name char(50),
  83. Last_Name char(50),
  84. Address char(50),
  85. City char(50),
  86. Country char(25),
  87. Birth_Date date)
  88. Μερικές φορές θέλουμε να βάλουμε μια προεπιλεγμένη τιμή σε ένα πεδίο. Παράδειγμα:
  89. CREATE TABLE customer
  90. (First_Name char(50),
  91. Last_Name char(50),
  92. Address char(50) default 'Unknown',
  93. City char(50) default 'Mumbai',
  94. Country char(25),
  95. Birth_Date date)
  96.  
  97. Constraints - Περιορισμοί
  98. - NOT NULL
  99. - UNIQUE
  100. - CHECK
  101. - Primary Key
  102. - Foreign Key
  103. NOT NULL
  104. Εξ ορισμού ένα πεδίο μπορεί να μην έχει καμία τιμή σε μια εγγραφή του πίνακα. Αν θέλουμε να επιβάλουμε σε
  105. ένα πεδίο να μη δέχεται κενές τιμές (δηλαδή να μην δέχεται τη μη εισαγωγή δεδομένων, υποχρεωτικά να έχει
  106. κάποια τιμή) τότε καθορίζουμε το συγκεκριμένο πεδίο ως not null.
  107. CREATE TABLE Customer
  108. (SID integer NOT NULL,
  109. Last_Name varchar (30) NOT NULL,
  110. First_Name varchar(30));
  111. UNIQUE
  112. Ο περιορισμός UNIQUE διασφαλίζει ότι όλες οι τιμές σε ένα πεδίο είναι διακριτές δηλαδή μοναδικές.
  113. CREATE TABLE Customer
  114. (SID integer Unique,
  115. Last_Name varchar (30),
  116. First_Name varchar(30));
  117. CHECK
  118. Ο περιορισμός CHECK διασφαλίζει ότι όλες οι τιμές που θα εισαχθούν σε ένα πεδίο ικανοποιούν συγκεκριμένα
  119. κριτήρια.
  120. CREATE TABLE Customer
  121. (SID integer CHECK (SID > 0),
  122. Last_Name varchar (30),
  123. First_Name varchar(30));
  124. Το πεδίο SID πρέπει να πάρει ακέραιες τιμές και μάλιστα θετικές (>0)
  125.  
  126. Primary Key - Πρωτεύον Κλειδί
  127. Eνα πρωτεύον κλειδί χρησιμοποιείται για την ταυτοποίηση κάθε
  128. εγγραφής σε ένα πίνακα. Το πρωτεύον κλειδί μπορεί να είναι ένα ή
  129. περισσότερα πεδία σε ένα πίνακα. ǵταν χρησιμοποιούνται πολλά
  130. τότε έχουμε σύνθετο κλειδί.
  131. Το πρωτεύον κλειδί καθορίζεται είτε στο CREATE TABLE ερώτημα
  132. ή χρησιμοποιώντας το ALTER TABLE μετά τη δημιουργία του
  133. πίνακα.
  134. MySQL:
  135. CREATE TABLE Customer
  136. (SID integer,
  137. Last_Name varchar(30),
  138. First_Name varchar(30),
  139. PRIMARY KEY (SID));
  140.  
  141. Primary Key - Πρωτεύον Κλειδί
  142. Eνα πρωτεύον κλειδί χρησιμοποιείται για την ταυτοποίηση κάθε
  143. εγγραφής σε ένα πίνακα. ǵταν χρησιμοποιούνται πολλά πεδία τότε
  144. έχουμε σύνθετο κλειδί.
  145. Το πρωτεύον κλειδί καθορίζεται είτε στο CREATE TABLE ερώτημα ή
  146. χρησιμοποιώντας το ALTER TABLE μετά τη δημιουργία του πίνακα.
  147. MySQL:
  148. CREATE TABLE Customer
  149. (SID integer,
  150. Last_Name varchar(30),
  151. First_Name varchar(30),
  152. PRIMARY KEY (SID));
  153. Με το ALTER TABLE
  154. MySQL:
  155. ALTER TABLE Customer ADD PRIMARY KEY (SID);
  156.  
  157. Foreign Key - Ξένο Κλειδί
  158. Table CUSTOMER
  159. Eνα ξένο κλειδί είναι ένα πεδίο (πεδία)
  160. τα οποία σχετίζονται με το πρωτεύον
  161. Column name Characteristic
  162. κλειδί ενός άλλου πίνακα. Ο σκοπός
  163. SID Primary Key
  164. του ξένου κλειδιού είναι να διασφαλίσει
  165. την σχεσιακή ακεραιότητα των
  166. Last_Name δεδομένων.
  167. First_Name
  168. Σε αυτό το παράδειγμα το πεδίο
  169. Customer_SID στον πίνακα ORDERS
  170. είναι ένα ξένο κλειδί που δείχνει στο
  171. Table ORDERS πρωτεύον κλειδί του πίνακα
  172. CUSTOMERS που είναι το πεδίο SID.
  173. Column name Characteristic
  174. MySQL:
  175. Order_ID Primary Key
  176. CREATE TABLE ORDERS
  177. (Order_ID integer, Order_Date
  178. Order_Date date,
  179. Customer_SID Foreign Key
  180. Customer_SID integer,
  181. Amount double,
  182. Amount
  183. Primary Key (Order_ID),
  184. Foreign Key (Customer_SID)
  185. references CUSTOMER(SID));
  186. ALTER TABLE ORDERS
  187. ADD FOREIGN KEY (customer_sid)
  188. REFERENCES CUSTOMER(SID);
  189.  
  190. Alter Table
  191. Μετά τη δημιουργία ενός πίνακα είναι δυνατή η αλλαγή της δομής του πίνακα
  192. χρησιμοποιώντας την εντολή ALTER TABLE. Κλασικές τέτοιες περιπτώσεις
  193. είναι οι κάτωθι:
  194. - Add a column
  195. - Drop a column
  196. - Change a column name
  197. - Change the data type for a column
  198. Οι προαναφερθείσες περιπτώσεις δεν είναι οι μοναδικές. Άλλες τέτοιες
  199. περιπτώσεις είναι η αλλαγή του πρωτεύοντος κλειδιού, η προσθήκη
  200. περιορισμών κλπ.
  201. Η SQL σύνταξη για την ALTER TABLE είναι
  202. ALTER TABLE "table_name"
  203. [alter specification]
  204. Add a column: ADD "column 1" "data type for column 1"
  205. Drop a column: DROP "column 1"
  206. Change a column name: CHANGE "old column name" "new column name"
  207. "data type for new column name"
  208. Change the data type for a column: MODIFY "column 1" "new data type"
  209.  
  210. Drop - Truncate
  211. Drop Table
  212. Το ερώτημα DROP TABLE διαγράφει εντελώς από τη βάση
  213. δεδομένων τον πίνακα που θέλουμε.
  214. DROP TABLE "table_name"
  215. Αν ήθελα να διαγράψω τον πίνακα customer:
  216. DROP TABLE customer.
  217. Truncate Table
  218. Στην περίπτωση που θέλω να διαγράψω μόνο τα περιεχόμενα του
  219. πίνακα και να κρατήσω τη δομή του πίνακα χρησιμοποιώ την
  220. εντολή TRUNCATE TABLE.
  221. TRUNCATE TABLE "table_name"
  222. Αν ήθελα να διαγράψω τα περιεχόμενα του πίνακα Customer:
  223. TRUNCATE TABLE customer
  224.  
  225. SQL SELECT
  226. Η εντολή SQL SELECT χρησιμοποιείται για την επιλογή δεδομένων από
  227. έναν πίνακα σε μια βάση δεδομένων.
  228. Μια γενική μορφή σύνταξης για το ερώτημα SQL SELECT είναι η
  229. ακόλουθη:
  230. SELECT πεδίο 1, πεδίο 2, πεδίο 3, …
  231. FROM Table1
  232. Η λίστα με τα ονόματα των πεδίων μετά την εντολή SQL SELECT
  233. καθορίζει ποια πεδία θα επιστραφούν προς εμφάνιση ως αποτέλεσμα της
  234. εκτέλεσης του ερωτήματος.. Εάν θέλουμε να επιλέξουμε όλα τα πεδία του
  235. πίνακα χρησιμοποιούμε το * (αστεράκι):
  236. SELECT *
  237. FROM Table1
  238. Το όνομα του πίνακα καθορίζεται μετά τη λέξη FROM (στο παράδειγμα
  239. Table1) καθορίζει τον πίνακα προέλευσης των δεδομένων.
  240.  
  241. SQL SELECT INTO
  242. Η εντολή SQL SELECT INTO χρησιμοποιείται για την επιλογή δεδομένων
  243. από έναν πίνακα και εισαγωγή των δεδομένων σε έναν διαφορετικό πίνακα
  244. της βάσης.
  245. Μια γενική μορφή σύνταξης είναι η ακόλουθη:
  246. SELECT πεδίο 1, πεδίο 2, πεδίο 3,
  247. INTO Table2
  248. FROM Table1
  249. Η λίστα με τα πεδία μετά το SELECT καθορίζει ποια πεδία θα αντιγραφούν
  250. και το όνομα του πίνακα μετά το INTO καθορίζει τον πίνακα που θα
  251. αντιγραφούν τα δεδομένα..
  252. Αν θέλουμε να φτιάξουμε ένα ακριβές αντίγραφο των δεδομένων του
  253. πίνακα Customers, χρειαζόμαστε το κάτωθι ερώτημα SQL SELECT INTO:
  254. SELECT *
  255. INTO Customers_copy
  256. FROM Customers
  257.  
  258. SQL DISTINCT
  259. Η εντολή SQL DISTINCT χρησιμοποιείται μαζί την εντολή SELECT
  260. για να επιστρέψει ένα σύνολο δεδομένων με μοναδικές εγγραφές
  261. ενός πεδίου του πίνακα.
  262. Ĭα χρησιμοποιήσουμε τον κάτωθι πίνακα Customers.
  263. FirstName LastName Email DOB Phone
  264. John Smith John.Smith@yahoo.com 2/4/1968 626 222-2222
  265. Steven Goldfish goldfish@fishhere.net 4/4/1974 323 455-4545
  266. Paula Brown pb@herowndomain.org 5/24/1978 416 323-3232
  267. James Smith jim@supergig.co.uk 20/10/1980 416 323-8888
  268. Παράδειγμα: θέλω να εμφανίσω τα μοναδικά επίθετα από το πεδίο
  269. surnames του πίνακα Customers, θα εφαρμόσω την ακόλουθη εντολή
  270. SQL DISTINCT:
  271. SELECT DISTINCT LastName FROM Customers ; LastName
  272. Smith
  273. Goldfish
  274. Brown
  275.  
  276. SQL WHERE
  277. Η εντολή SQL WHERE χρησιμοποιείται για την εφαρμογή κριτηρίων σε ένα
  278. ερώτημα SQL SELECT. Ĭα χρησιμοποιήσουμε τον πίνακα Customers για ένα
  279. παράδειγμα
  280. FirstName LastName Email DOB Phone
  281. John Smith John.Smith@yahoo.com 2/4/1968 626 222-2222
  282. Steven Goldfish goldfish@fishhere.net 4/4/1974 323 455-4545
  283. Paula Brown pb@herowndomain.org 5/24/1978 416 323-3232
  284. James Smith jim@supergig.co.uk 20/10/1980 416 323-8888
  285. Ĭέλουμε να επιλέξουμε να εμφανισθούν όλοι οι πελάτες μας από τον πίνακα δεδομένων
  286. που το επίθετό τους είναι 'Smith'. Το ερώτημα που θα δημιουργήσουμε είναι το κάτωθι:
  287. SELECT *
  288. FROM Customers
  289. WHERE LastName = 'Smith'
  290. Σε αυτό το απλό ερώτημα χρησιμοποιήσαμε το "=" (Ίσον) στα κριτήρια του WHERE:
  291. LastName = 'Smith'
  292.  
  293. Διοίκηση ΕπιȤειρήσεων Βάσεις Δεδομένων και Ευφυή Πληροφοριακά Συστήματα ΕπιȤειρηματικότητας
  294. SQL WHERE
  295. Μπορούμε όμως να χρησιμοποιήσουμε και τους υπόλοιπους τελεστές σύγκρισης σε ένα ερώτημα που
  296. έχει SQL WHERE:
  297. <>(Διάφορο)
  298. SELECT * FROM Customers WHERE LastName <> 'Smith‘
  299. > (Μεγαλύτερο από)
  300. SELECT *FROM Customers WHERE DOB > '1/1/1970‘
  301. >= (Μεγαλύτερο ή ίσον)
  302. SELECT * FROM Customers WHERE DOB >= '1/1/1970‘
  303. < (Μικρότερο από)
  304. SELECT *FROM Customers WHERE DOB < '1/1/1970‘
  305. <= (Μικρότερο ή ίσον)
  306. SELECT * FROM Customers WHERE DOB =< '1/1/1970‘
  307. LIKE (μοιάζει με)
  308. SELECT * FROM Customers WHERE Phone LIKE '626%‘
  309. Σημείωση: Η σύνταξη του LIKE διαφοροποιείται ανάλογα με το Σύστημα Διαχείρισης Βάσης
  310. Δεδομένων που χρησιμοποιούμε.
  311. Between (Καθορίζει ένα εύρος περιοȤής)
  312. SELECT * FROM Customers WHERE DOB BETWEEN '1/1/1970' AND '1/1/1975'
  313.  
  314. SQL LIKE
  315. Κριτήριο αναζήτησης σε ένα SQL WHERE, βασιζόμενοι σε ένα μέρος του περιεȤομένου του
  316. πεδίου. Ĭέλουμε να αναζητήσουμε όλους τους πελάτες που το FirstName ξεκινάει από 'J'.
  317. SELECT *
  318. FROM Customers
  319. WHERE FirstName LIKE 'J%‘
  320. Αν θέλουμε να εμφανίσουμε όλους τους πελάτες που το τηλέφωνό τους ξεκινάει από '416' θα
  321. δημιουργήσουμε το ακόλουθο ερώτημα:
  322. SELECT *
  323. FROM Customers
  324. WHERE Phone LIKE '416%'
  325. Το '%' είναι χαρακτήρας που αντιπροσωπεύει οποιοδήποτε αλφαριθμητικό.
  326. Dzνας άλλος χαρακτήρας που αντιπροσωπεύει έναν οποιοδήποτε χαρακτήρα είναι το '_'. Η χρήση του
  327. σημαίνει ένα οποιοδήποτε αλφαριθμητικό που αποτελείται από έναν μόνο χαρακτήρα.
  328. Το '[]' καθορίζει ένα σύνολο από χαρακτήρες.
  329. SELECT *
  330. FROM Customers
  331. WHERE Phone LIKE '[4-6]_6%‘
  332. Το ερώτημα θα επιστρέψει τους πελάτες που ικανοποιούν τα κάτωθι κριτήρια:
  333.  Το πεδίο Phone ξεκινά από ένα ψηφίο μεταξύ 4 και 6 ([4-6])
  334.  Ο δεύτερος χαρακτήρας στο πεδίο Phone είναι οτιδήποτε (_)
  335.  Ο τρίτος χαρακτήρας στο πεδίο Phone είναι το 6 (6)
  336.  Το υπόλοιπο μέρος του πεδίου Phone column μπορεί να είναι οποιοδήποτε αλφαριθμητικό (%)
  337.  
  338. SQL INSERT INTO
  339. Ο πρώτος τρόπος σύνταξης του INSERT INTO SQL ερωτήματος δεν καθορίζει τα
  340. ονόματα των πεδίων αλλά μόνο τις τιμές τους:
  341. INSERT INTO Table1
  342. VALUES (value1, value2, value3…);
  343. Ο δεύτερος τρόπος σύνταξης του SQL INSERT INTO ερωτήματος, τόσο τα ονόματα των
  344. πεδίων αλλά και τις αντίστοιχες τιμές των πεδίων:
  345. INSERT INTO Table1 (Column1, Column2, Column3…)
  346. VALUES (Value1, Value2, Value3…);
  347. Ĭα πρέπει ο αριθμός των πεδίων που εισάγετε στην παρένθεση να είναι ακριβώς ο ίδιος
  348. με των αριθμό των τιμών που θα εισαχθούν στα αντίστοιχα πεδία αλλιώς θα προκληθεί
  349. σφάλμα στην εκτέλεση του ερωτήματος..
  350. Αν θέλουμε να εισάγουμε μια νέα εγγραφή στον πίνακα Customers, θα χρησιμοποιήσουμε
  351. μια από τις ακόλουθες εντολές:
  352. INSERT INTO Customers
  353. VALUES ('Peter', 'Hunt', 'peter.hunt@tgmail.net', '1/1/1974', '626 888-8888')
  354. INSERT INTO Customers (FirstName, LastName, Email, DOB, Phone)
  355. VALUES ('Peter', 'Hunt', 'peter.hunt@tgmail.net', '1/1/1974', '626 888-8888')
  356.  
  357. SQL UPDATE
  358. UPDATE Table1
  359. SET Column1 = Value1, Column2 = Value2
  360. WHERE Some_Column = Some_Value
  361. Η SQL UPDATE αλλάζει τα δεδομένα σε μια υπάρχουσα εγγραφή (ή πολλές
  362. εγγραφές) σε μια βάση δεδομένων και συνήθως τη χρησιμοποιούμε μαζί με
  363. κάποια κριτήρια (προσθέτοντας και το αντίστοιχο WHERE).
  364. Η SQL UPDATE αλλάζει τα δεδομένα σε μια υπάρχουσα εγγραφή (ή πολλές
  365. εγγραφές) σε μια βάση δεδομένων και συνήθως τη χρησιμοποιούμε μαζί με
  366. κάποια κριτήρια (προσθέτοντας και το αντίστοιχο WHERE). Στο WHERE
  367. καθορίζουμε ποιες από τις εγγραφές του πίνακα πρέπει να αλλάξουν τιμή
  368. (αυτές που ικανοποιούν τα κριτήρια του WHERE). Στο WHERE καθορίζουμε
  369. ποιες από τις εγγραφές του πίνακα πρέπει να αλλάξουν τιμή (αυτές που
  370. ικανοποιούν τα κριτήρια του WHERE).
  371.  
  372. SQL DELETE
  373. DELETE FROM Table1
  374. WHERE Some_Column = Some_Value
  375. Αν δεν εισάγουμε το WHERE και τα κριτήρια , τότε θα διαγραφούν όλες
  376. οι εγγραφές από τον πίνακα.
  377. Εφόσον καθορίσουμε συγκεκριμένα κριτήρια στο WHERE τότε θα
  378. διαγραφούν από τον πίνακα οι εγγραφές εκείνες που ικανοποιούν τα
  379. κριτήρια αυτά.
  380.  
  381. SELECT * FROM Customers
  382. ORDER BY DOB;
  383. Στη περίπτωση που θέλουμε φθίνουσα ταξινόμηση πρέπει να το δηλώσουμε
  384. προσθέτοντας στο τέλος του τμήματος του ORDER BY τη λέξη DESC
  385. Μπορούμε να ταξινομήσουμε τα αποτελέσματα ενός ερωτήματος
  386. χρησιμοποιώντας περισσότερα του ενός πεδία:
  387. SELECT * FROM Customers
  388. ORDER BY DOB, LastName
  389. Στην περίπτωση αυτή η ταξινόμηση γίνεται με βάση το πρώτο κατά σειρά που
  390. βάλαμε στο ORDER BY πεδίο και εφόσον υπάρξει κάποιο πρόβλημα (π. χ. Οι
  391. τιμές των πεδίων είναι ίδιες) τότε η ταξινόμηση μόνο για αυτά που έχουν το
  392. πρόβλημα συνεχίζει στο δεύτερο πεδίο κ.ο.κ.
  393.  
  394. SQL AND & OR
  395. Το SQL AND χρησιμοποιείται όταν θέλουμε να καθορίσουμε περισσότερα του ενός
  396. κριτήρια και θέλουμε ταυτόχρονα να είναι τα κριτήρια αληθή.
  397. SELECT * FROM Customers
  398. WHERE FirstName = 'John' AND LastName = 'Smith'
  399. Το SQL OR χρησιμοποιείται με παρόμοιο τρόπο και η διαφορά του με το AND είναι ότι το
  400. OR επιστρέφει τις εγγραφές που ικανοποιούν τουλάχιστον ένα από τα κριτήρια που
  401. εισαχθήκανε στο WHERE.
  402. SELECT * FROM Customers
  403. WHERE FirstName = 'James' OR FirstName = 'Paula'
  404. Μπορούμε φυσικά να συνδυάσουμε τo AND και το OR με οποιοδήποτε τρόπο θέλουμε
  405. και να χρησιμοποιήσουμε και παρενθέσεις και να δημιουργηθούν με το τρόπο αυτό
  406. πολύπλοκα κριτήρια στο WHERE
  407. SELECT * FROM Customers
  408. WHERE (FirstName = 'James' OR FirstName = 'Paula') AND LastName = 'Brown'
  409.  
  410. SQL IN
  411. Το SQL IN μας επιτρέπει να καθορίσουμε διακριτές τιμές στα κριτήρια
  412. αναζήτησης σε ένα SQL WHERE
  413. SELECT Column1, Column2, Column3, …
  414. FROM Table1
  415. WHERE Column1 IN (Value1, Value2, …)
  416. SELECT *
  417. FROM EmployeeHours
  418. WHERE Date IN ('5/6/2004', '5/7/2004')
  419.  
  420. SQL BETWEEN
  421. Το SQL BETWEEN & AND καθορίζουν ένα εύρος τιμών μεταξύ μιας
  422. αρχικής και μιας τελικής τιμής.
  423. SELECT Column1, Column2, Column3, …
  424. FROM Table1
  425. WHERE Column1 BETWEEN Value1 AND Value2
  426. Οι δύο τιμές καθορίζουν το εύρος τιμών και μπορεί να είναι
  427. ημερομηνίες, αριθμοί ή απλώς κείμενο.
  428. Σε αντίθεση με το SQL IN keyword, το οποίο επιτρέπει τον καθορισμό
  429. μόνο διακριτών τιμών στα κριτήρια, το SQL BETWEEN δίνει τη
  430. δυνατότητα να καθορίσετε ένα εύρος τιμών στα κριτήρια αναζήτησης.
  431.  
  432. SQL ALIASES
  433. Τα SQL aliases (ψευδώνυμα) χρησιμοποιούνται για πίνακες και για
  434. πεδία πινάκων.
  435. Τα ψευδώνυμα των πεδίων χρησιμοποιούνται για να γίνονται τα
  436. αποτελέσματα των ερωτημάτων πιο κατανοητά και ευανάγνωστα
  437. SELECT Employee, SUM(Hours) As SumHoursPerEmployee
  438. FROM EmployeeHours
  439. GROUP BY Employee
  440.  
  441. SQL COUNT
  442. Η εντολή SQL COUNT είναι μια αθροιστική συνάρτηση και
  443. χρησιμοποιείτε για την καταμέτρηση του αριθμού των εγγραφών που
  444. επιστρέφονται από ένα ερώτημα επιλογής.
  445. SELECT COUNT(Column1)
  446. FROM Table1
  447. Αν θέλουμε να μετρήσουμε τον αριθμό των πελατών στον πίνακα
  448. Customers θα χρησιμοποιήσαμε το κάτωθι ερώτημα
  449. SELECT COUNT(LastName) AS NumberOfCustomers
  450. FROM Customers
  451.  
  452. SQL MAX - MIN
  453. Η συνάρτηση SQL MAX - MIN μας επιτρέπει την επιλογή της μέγιστης /
  454. ελάχιστης τιμής από ένα πεδίο.
  455. SELECT MAX(Column1)
  456. FROM Table1
  457. SELECT ΜΙΝ(Column1)
  458. FROM Table1
  459. SELECT MAX(DOB) AS MaxDOB
  460. FROM Customers
  461. SELECT MΙΝ(DOB) AS MinDOB
  462. FROM Customers
  463.  
  464.  
  465. SQL AVG
  466. Η SQL AVG συνάρτηση μας επιτρέπει την εξαγωγή του μέσου όρου
  467. των τιμών ενός πεδίου. Sales:
  468. CustomerID Date SaleAmount
  469. 2 5/6/2004 $100.22
  470. SELECT AVG(Column1)
  471. 1 5/7/2004 $99.95
  472. FROM Table1
  473. 3 5/7/2004 $122.95
  474. 3 5/13/2004 $100.00
  475. 4 5/22/2004 $555.55
  476. SELECT AVG(SaleAmount) AS AvgSaleAmount FROM Sales;
  477. AvgSaleAmount
  478. $195.73
  479.  
  480. SQL SUM
  481. Η SQL SUM συνάρτηση μας επιτρέπει να υπολογίζουμε το άθροισμα
  482. των τιμών ενός αριθμητικού πεδίου Sales:
  483. CustomerID Date SaleAmount
  484. 2 5/6/2004 $100.22
  485. SELECT SUM(Column1)
  486. 1 5/7/2004 $99.95
  487. FROM Table1
  488. 3 5/7/2004 $122.95
  489. 3 5/13/2004 $100.00
  490. 4 5/22/2004 $555.55
  491. SELECT SUM(SaleAmount)
  492. SELECT SUM(SaleAmount)
  493. FROM Sales;
  494. FROM Sales
  495. WHERE CustomerID = 3 SaleAmount
  496. $195.73
  497. SaleAmount
  498. $222.95
  499.  
  500. SQL GROUP BY
  501. Το SQL GROUP BY χρησιμοποιείται μαζί με SQL αθροιστικές ή άλλες
  502. συναρτήσεις (τις είδαμε προηγουμένως) όπως η SUM για να καθορίσει
  503. τρόπους ομαδοποίησης των αποτελεσμάτων βάση κάποιου πεδίου (ή
  504. κάποιων πεδίων). πίνακα EmployeeHours
  505. Employee Date Hours
  506. John Smith 5/6/2004 8
  507. Αν ο διευθυντής της επιχείρησης θέλει το
  508. Allan Babel 5/6/2004 8
  509. άθροισμα των ωρών εργασίας των εργαζομένων
  510. Tina Crown 5/6/2004 8
  511. πρέπει να εκτελέσει το κάτωθι ερώτημα
  512. John Smith 5/7/2004 9
  513. Allan Babel 5/7/2004 8
  514. SELECT SUM (Hours)
  515. Tina Crown 5/7/2004 10
  516. FROM EmployeeHours;
  517. John Smith 5/8/2004 8
  518. Allan Babel 5/8/2004 8
  519. To άθροισμα των ωρών εργασίας ανά εργαζόμενο
  520. Tina Crown 5/8/2004 9
  521. ξεχωριστά; Τότε πρέπει να αλλάξουμε το ερώτημα
  522. και να χρησιμοποιήσουμε το SQL GROUP BY:
  523. Employee Hours
  524. SELECT Employee, SUM (Hours)
  525. John Smith 25
  526. FROM EmployeeHours
  527. Allan Babel 24
  528. GROUP BY Employee;
  529. Tina Crown 27
  530.  
  531. Διοίκηση ΕπιȤειρήσεων Βάσεις Δεδομένων και Ευφυή Πληροφοριακά Συστήματα ΕπιȤειρηματικότητας
  532. SQL HAVING
  533. Το SQL HAVING χρησιμοποιείται για να περιορίσει βάση συνθηκών την
  534. έξοδο ενός ερωτήματος θέτοντας μια συνάρτηση σε ένα πεδίο του
  535. ερωτήματος.
  536. SELECT Employee, SUM (Hours)
  537. FROM EmployeeHours
  538. WHERE SUM (Hours) > 24
  539. GROUP BY Employee
  540.  
  541. Διοίκηση ΕπιȤειρήσεων Βάσεις Δεδομένων και Ευφυή Πληροφοριακά Συστήματα ΕπιȤειρηματικότητας
  542. SQL JOIN
  543. Το SQL JOIN χρησιμοποιείται όταν θέλουμε να επιλέξουμε δεδομένα
  544. που προέρχονται από δύο ή περισσότερους πίνακες.
  545. Ĭα πρέπει οι πίνακες αυτοί να σχετίζονται μεταξύ τους μέσω κάποιας
  546. συσχέτισης πεδίων τους.
  547. Customers Sales
  548. CID Fname Lname Email DOB Phone CID Date SaleAmount
  549. 1 John Smith John.Smith@yahoo.com 2/4/1968 626 222-2222
  550. 2 5/6/2004 $100.22
  551. Goldfis
  552. 2 Steven goldfish@fishhere.net 4/4/1974 323 455-4545 1 5/7/2004 $99.95
  553. h
  554. 3 5/7/2004 $122.95
  555. 3 Paula Brown pb@herowndomain.org 5/24/1978 416 323-3232
  556. 3 5/13/2004 $100.00
  557. 4 James Smith jim@supergig.co.uk 20/10/1980 416 323-8888
  558. 4 5/22/2004 $555.55
  559. SELECT Customers.FirstName, Customers.LastName, SUM(Sales.SaleAmount) AS
  560. SalesPerCustomer
  561. FROM Customers, Sales
  562. WHERE Customers.CID = Sales.CID
  563. GROUP BY Customers.FirstName, Customers.LastName
  564.  
  565. SQL JOIN
  566. Το ερώτημα αυτό επιλέγει όλους τους πελάτες (όνομα και επίθετο) και
  567. το συνολικό ποσό που έχουν καταναλώσει σε αγορές.
  568. Το JOIN καθορίζεται μετά το WHERE και μας εκφράζει το γεγονός ότι οι
  569. δύο πίνακες έχουν ταιριασθεί βασιζόμενοι στο κοινό τους πεδίο
  570. CustomerID.
  571. FirstName LastName SalesPerCustomers
  572. John Smith $99.95
  573. Steven Goldfish $100.22
  574. Paula Brown $222.95
  575. James Smith $555.55
  576.  
  577. SQL JOIN
  578. SELECT Customers.FirstName, Customers.LastName,
  579. SUM(Sales.SaleAmount) AS SalesPerCustomer
  580. FROM Customers JOIN Sales
  581. ON Customers.CustomerID = Sales.CustomerID
  582. GROUP BY Customers.FirstName, Customers.LastName;
  583. Υπάρχουν δύο τύποι των SQL JOINS, το INNER JOIN και το OUTER JOIN. Σε
  584. περίπτωση που δεν διευκρινίζεται τότε επιλέγεται το INNER JOIN ("INNER
  585. JOIN" = "JOIN")
  586. To "INNER JOIN" θα επιλέξει όλες τις εγγραφές εκείνες από τους δύο πίνακες
  587. εφόσον υπάρχει κοινό σημείο μεταξύ των εγγραφών των δύο πινάκων.
  588. Δηλαδή θα επιστρέψει πληροφορίες για τους πελάτες που έχουν ήδη
  589. παραγγείλει κάτι.
  590. Στην περίπτωση που έχουμε πελάτη στον πίνακα Customers και δεν έχει
  591. παραγγείλει κάτι ακόμη (δεν υπάρχει δηλαδή εγγραφή στον πίνακα Sales με
  592. αυτό το CustomerID) τότε δεν θα εμφανισθεί στα αποτελέσματα του
  593. ερωτήματος.
  594.  
  595. SQL JOIN
  596. Αν θέλουμε να εμφανίσουμε όλους τους πελάτες μας και τις αγορές
  597. τους, ανεξαρτήτως του γεγονότος αν έχουν αγοράσει κάτι ή όχι, τότε
  598. χρησιμοποιούμε το OUTER JOIN.
  599. Ο δεύτερος τύπος του JOIN καλείται OUTER JOIN και έχει δύο
  600. υποκατηγορίες που ονομάζονται LEFT OUTER JOIN και RIGHT
  601. OUTER JOIN.
  602. Το LEFT OUTER JOIN ή απλά LEFT JOIN επιλέγει όλες τις εγγραφές
  603. από το πρώτο πίνακα που εμφανίζεται στο FROM δίχως να υπολογίσει
  604. αν έχει κάποιο ταίρι στο δεύτερο πίνακα.
  605.  
  606. SQL JOIN
  607. Παράδειγμα LEFT JOIN
  608. SELECT Customers.FirstName, Customers.LastName,
  609. SUM(Sales.SaleAmount) AS SalesPerCustomer
  610. FROM Customers LEFT JOIN Sales
  611. ON Customers.CustomerID = Sales.CustomerID
  612. GROUP BY Customers.FirstName, Customers.LastName;
  613. Το RIGHT OUTER JOIN ή απλά RIGHT JOIN συμπεριφέρεται
  614. ακριβώς όπως το LEFT JOIN, το RIGHT JOIN επιστρέφει όλες τις
  615. εγγραφές από τον δεύτερο πίνακα (το δεξιό πίνακα στο JOIN τμήμα
  616. του ερωτήματος)
  617. SELECT Customers.FirstName, Customers.LastName,
  618. SUM(Sales.SaleAmount) AS SalesPerCustomer
  619. FROM Customers RIGHT JOIN Sales
  620. ON Customers.CustomerID = Sales.CustomerID
  621. GROUP BY Customers.FirstName, Customers.LastName;
  622.  
  623. Διοίκηση ΕπιȤειρήσεων Βάσεις Δεδομένων και Ευφυή Πληροφοριακά Συστήματα ΕπιȤειρηματικότητας
  624. ΤΕΛΟΣ ΓΙΑ ΣΗΜΕΡΑ
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement