MySQL Σεμινάριο #2 Το θύρηο κέρος ηοσ σιηθού προέρτεηαη από δηαθάλεηες ηοσ Δ. Καηζίθαροσ (http://infolab.cs.unipi.gr/people/katsikaros/) ηολ οποίο εσταρηζηούκε ζερκά Νίθος Γηαηράθος Δργαζηήρηο Πιεροθορηαθώλ Σσζηεκάηωλ, Τκήκα Πιεροθορηθής, Παλεπηζηήκηο Πεηραηά (http://infolab.cs.unipi.gr)
Εισαγωγικά - Προετοιμασία Αλοίγοσκε κέζω ηοσ browser ηο URL: http://dev.mysql.com/doc/ θαη από ηης δηαζέζηκες βάζεης δεδοκέλωλ θαηεβάδοσκε ηε ΒΓ: world Αποζσκπηέδοσκε ηο αρτείο Γεκηοσργούκε ηε βάζε δεδοκέλωλ ποσ ζα περηιάβεη ηοσς πίλαθες θαη ηα δεδοκέλα ηες world CREATE DATABASE world_yoursn; 2
Αποκατάσταση Αντιγράφων Restore Αλοίγοσκε ηολ MySQL Administrator Έπεηηα : Βήκα 1: Από ηελ πιεσρηθή ζηήιε επηιέγοσκε «Αποθαηάζηαζε Αληηγράθωλ» Βήκα 2: Δπηιέγοσκε ηο ζτήκα/βγ όποσ ζα γίλεη ηο restore Βήκα 3: Δπηιέγοσκε ηο πιήθηρο «Open Backup File» Βήκα 4: Δπηιέγοσκε ηο αρτείο ηοσ back up Βήκα 5: Δπηιέγοσκε ηο πιήθηρο restore 3
Αποκατάσταση Αντιγράφων Restore 4
SQL Επερωτήσεις
Το τμήμα Select SELECT * ; (4079) SELECT Name, Population ; SELECT District, CountryCode ; (4079) SELECT DISTINCT(CountryCode) ; (232) 6
Το τμήμα Where SELECT Name, Population WHERE Population < 100000; (517) SELECT Name, Population WHERE Population < 100000 AND Population > 25000; (455) SELECT Name, Population WHERE Name LIKE 'A%'; (259) 7
Το τμήμα Where SELECT Name, Population WHERE Name LIKE 'A%en%'; (20) SELECT Name, Population WHERE Name LIKE 'A%' UNION SELECT Name, Population WHERE Name LIKE 'B%'; 8
Το τμήμα From Country( Code, Name, Continent, Region,... SurfaceArea, IndepYear, Population,...) SELECT City.Name, Country.Name, Country WHERE City.CountryCode = Country.Code; SELECT City.Name, Country.Name, Country WHERE Country.Continent ='Asia' AND City.Population > 4000000 AND City.CountryCode = Country.Code; 9
Συναθροιστικές Συναρτήσεις SELECT COUNT(DISTINCT(CountryCode)) ; (1) SELECT MAX(Population) ; (1) SELECT MAX(Population), Name ; 10
Συναθροιστικές Συναρτήσεις SELECT SUM(Population) AS Total, District GROUP BY District ORDER BY Total DESC; SELECT SUM(Population) AS Total, District GROUP BY District ORDER BY Total DESC LIMIT 5; /* LIMIT : MySQL Specific */ SELECT SUM(Ci.Population) AS Total, District, Co.Name Ci, Country Co WHERE Ci.CountryCode=Co.Code GROUP BY District, Co.Code HAVING Total> 20000 11
Εμφωλευμένα Ερωτήματα Country( Code, Name, Continent, Region,... SurfaceArea, IndepYear, Population,...) SELECT Name WHERE CountryCode IN ( SELECT Code FROM Country WHERE IndepYear > 1920 AND Continent='Asia'); 12
Παραγόμενες Σχέσεις Country( Code, Name, Continent, Region,... SurfaceArea, IndepYear, Population,...) SELECT t1.name, t2.name FROM (SELECT Name, Code FROM Country WHERE Continent ='Asia') AS t1, (SELECT Name, CountryCode WHERE Population > 4000000) AS t2 WHERE t2.countrycode = t1.code; 13
Σύνδεση Σχέσεων ( Join ) Country( Code, Name, Continent, Region,... SurfaceArea, IndepYear, Population,...) SELECT City.Name, Country.Name INNER JOIN Country ON City.CountryCode = Country.Code; SELECT City.Name, Country.Name INNER JOIN Country ON City.CountryCode = Country.Code WHERE Country.Continent ='Asia' AND City.Population > 4000000; 14
Σύνδεση Σχέσεων ( Join ) Country( Code, Name, Continent, Region,... SurfaceArea, IndepYear, Population,...) SELECT t1.name, t2.name FROM (SELECT Name, Code FROM Country WHERE Continent ='Asia') AS t1 LEFT OUTER JOIN (SELECT Name, CountryCode WHERE Population > 4000000) AS t2 ON t2.countrycode = t1.code; 15
Σύνδεση Σχέσεων ( Join ) Country( Code, Name, Continent, Region,... SurfaceArea, IndepYear, Population,...) SELECT t1.name, t2.name FROM (SELECT Name, Code FROM Country WHERE Continent ='Asia') AS t1 RIGHT OUTER JOIN (SELECT Name, CountryCode WHERE Population > 4000000) AS t2 ON t2.countrycode = t1.code; 16
Σύνδεση Σχέσεων ( Join ) CountryLanguage(CountryCode, Language, IsOfficial, Percentage ) SELECT * FROM (SELECT Language, CountryCode FROM CountryLanguage WHERE Percentage > 50) AS t1 NATURAL JOIN (SELECT Name, CountryCode WHERE Population > 4000000) AS t2 ; 17
Σύνδεση Σχέσεων ( Join ) Country( Code, Name, Continent, Region,... SurfaceArea, IndepYear, Population,...) SELECT t1.name, t2.name FROM (SELECT Name, Code FROM Country WHERE Continent ='Asia') AS t1 RIGHT OUTER JOIN (SELECT Name, CountryCode WHERE Population > 4000000) AS t2 ON t2.countrycode = t1.code UNION SELECT t1.name, t2.name FROM (SELECT Name, Code FROM Country WHERE Continent ='Asia') AS t1 LEFT OUTER JOIN (SELECT Name, CountryCode WHERE Population > 4000000) AS t2 ON t2.countrycode = t1.code; 18
Πηγές περαιτέρω μελέτης http://dev.mysql.com/doc/refman/5.1/en/select.html http://dev.mysql.com/doc/refman/5.0/en/join.html http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html http://dev.mysql.com/doc/refman/5.0/en/group-by-hidden-columns.html http://dev.mysql.com/doc/refman/5.0/en/order-by-optimization.html 19