Dwie bazy są dla nas interesujące:
Mnóstwo materiałów w internecie. Między innymi http://www.w3schools.com/sql/ lub dokumentacja http://dev.mysql.com/doc/refman/5.7/en/
#jakie bazy są dostępne
SHOW DATABASES;
#wybieramy bazę northwind
USE northwind;
#jakie tabele znajdują się w bazie northwind
SHOW TABLES;
#jakie kolumny zawiera tabela Customers
SHOW COLUMNS FROM Customers;
Cel na te zajęcia: znaleźć 5 krajów o największej łącznej wartości zamówień
Zacznijmy od podstaw.
Zapytanie: wszystkie kolumny z tabeli Customers
SELECT * FROM `Customers`;
Możemy też wybrać niektóre kolumny
SELECT CustomerName,City FROM Customers;
Z jakich miast pochodzą nasi klienci?
SELECT City FROM Customers;
# a co jeśli mamy wiele kopii tego samego?
SELECT DISTINCT City FROM Customers;
Wybieraliśmy kolumny, teraz czas na wybór podzbioru wierszy. Ustawiamy warunki logiczne.
# co jeśli interesują nas tylko klienci z Polski?
SELECT * FROM Customers
WHERE Country='Poland';
Możemy też ustawiać warunki numeryczne (<, >) oraz dopasowanie wzorca
SELECT * FROM Customers
WHERE City LIKE 'war%';
SELECT * FROM Customers
WHERE City LIKE '[a-c]%';
A co jeśli chcielibyśmy mieć nasze wyniki uszeregowane?
SELECT * FROM Customers
ORDER BY Country DESC, City;
Zamiast wszystkich wyników może nas interesować jedynie kilka pierwszych
SELECT * FROM Customers
LIMIT 3;
Jako rozgrzewkę wyciagniemy z bazy informację o liczbie zamówień dokonanych przez poszczególnych klientów. W tym celu musimy połączyć informacje z tabel Orders i Customers. Służy do tego polecenie JOIN.
SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
INNER JOIN Orders
ON Customers.CustomerID=Orders.CustomerID
Wyniki powyższego zapytania chcemt pogrupowć po nazwie klienta i zsumować.
SELECT Customers.CustomerName, COUNT(Orders.OrderID) AS NumberOfOrders
FROM Customers
INNER JOIN Orders
ON Customers.CustomerID=Orders.CustomerID
GROUP BY Country
ORDER BY NumberOfOrders DESC
Żeby dostać informację o krajach z największą WARTOŚCIĄ zamówień musimy połączyć tabele Order Details i Orders.
SELECT Orders.ShipCountry AS Country, UnitPrice, Quantity
FROM Orders
INNER JOIN `Order Details`;
AS tworzy alias, nową nazwę, na wybraną kolumnę. Jeśli nie podamy na jakich kolumnach chcemy łączyć tabele to SQL autoamtycznie połączy je po kolumnach o tych samych nazwach w obu tabelach. To może nie być dokładnie to na czym nam zależy!
5 krajow o najwiekszych zamowieniach
SELECT Orders.ShipCountry AS Country, SUM(UnitPrice*Quantity) AS TotalPrice
FROM Orders
INNER JOIN `Order Details`
GROUP BY Country
ORDER BY TotalPrice DESC
LIMIT 5;
Sciągamy i uruchamiamy program DataGrip (wybieramy licencję dla studentów lub nauczycieli)
W konsoli przechodzimy do katalogu bin
cd DataGrip-1.0.3/bin
Uruchamiamy skrypt
./datagrip.sh
Support na stronie https://intellij-support.jetbrains.com/hc/en-us
Instalujemy mysql. Na ubuntu robimy to następująco
sudo apt-get install mysql-client mysql-server
W czasie instalacji ustalamy hasło na root’a
Jest dużo tutoriali w internecie na ten temat. Np. http://www.yolinux.com/TUTORIALS/LinuxTutorialMySQL.html