-
Notifications
You must be signed in to change notification settings - Fork 0
Baza danych
Materiały wstępne: uczę się
Podstawowe komendy i instalacja MySQL
Logowanie do MySQL
mysql -ulogin -ppassword -h localhost --local-infile
Wybór bazy danych
USE biblioteka_podrecznikow;
Tworzenie tabel i import danych
DROP TABLE IF EXISTS studenci;
CREATE TABLE studenci (
pesel BIGINT,
nazwisko VARCHAR(100),
imie VARCHAR(100)
);
LOAD DATA LOCAL INFILE 'studenci.txt' INTO TABLE studenci IGNORE 1 LINES;
Potrzebne typy danych:
-
VARCHAR(maksymalny rozmiar)
- napis -
INT
,BIGINT
- liczby całkowite (INT
w zakresie do 2147483647,BIGINT
w zakresie do 9223372036854775807) -
DECIMAL(5,2)
- ułamki dziesiętne o ustalonej dokładności (w tym przypadku 5 cyfr, w tym 2 po przecinku, np 999.99) -
DOUBLE
- liczby zmiennoprzecinkowe -
DATE
,TIME
,DATETIME
- '0000-00-00', '00:00:00', '0000-00-00 00:00:00'
Funkcje działające na napisach
Funkcje działające na liczbach
FLOOR
CEILING
DIV
MOD
-
TRUNCATE
,ROUND
- obcinanie, zaokrąglanie do zadanej liczby miejsc po przecinku
Schemat ogólny: łączenie tabel (,
aka JOIN
) -> filtrowanie (WHERE
) -> grupowanie (GROUP BY
) -> filtrowanie pogrupowanych (HAVING
) -> sortowanie (ORDER BY
).
Funkcje agregujące dane (wewnątrz grup)
COUNT
AVG
MIN
MAX
SUM
Utworzone kolumny można nazwać używając instrukcji AS
Konwersje typów
CAST(kolumna AS typ)
Operator LIKE
-
%
- dopasowanie dowolnego ciągu znaków -
_
- dopasowanie pojedynczego znaku -
[zbiorznakow]
- dopasowanie znaków z danego zbioru -
[!zbiorznakow]
- dopasowanie znaków spoza danego zbioru
SELECT
z SELECT
a
SELECT ... FROM ( ... ) ...;
SELECT nowa_tabela.a FROM (SELECT COUNT(*) as a FROM tabela) nowa_tabela;
Różnica tabel (wyszukiwanie danych, których nie ma) - operator NOT IN
SELECT * FROM Table1 WHERE Table1.principal NOT IN (SELECT principal FROM table2)
SELECT * FROM wypadki; (AN)
a)
SELECT "Rok", "GrandPrix", "Wyniki"."Punkty" FROM "Wyniki", "Wyscigi", "Kierowcy" WHERE "Wyscigi"."Id_wyscigu" = "Wyniki"."Id_wyscigu" AND "Wyniki"."Id_kierowcy" = "Kierowcy"."Id_kierowcy" AND "Kierowcy"."Imie" = 'Robert' ORDER BY "Wyniki"."Punkty"; (KM)
b)
SELECT "GrandPrix", COUNT( 'GrandPrix' ) AS "ile" FROM "Wyscigi" GROUP BY "GrandPrix" ORDER BY "ile"; (KM)
c)
SELECT "Kierowcy"."Imie", "Kierowcy"."Nazwisko", "Wyscigi"."Rok", SUM( CAST( "Wyniki"."Punkty" AS INTEGER ) ) AS "point" FROM "Kierowcy", "Wyniki", "Wyscigi" WHERE "Wyniki"."Id_wyscigu" = "Wyscigi"."Id_wyscigu" AND "Wyniki"."Id_kierowcy" = "Kierowcy"."Id_kierowcy" AND ( "Wyscigi"."Rok" = '2000' OR "Wyscigi"."Rok" = '2006' OR "Wyscigi"."Rok" = '2012' ) GROUP BY "Kierowcy"."Imie", "Kierowcy"."Nazwisko", "Wyscigi"."Rok" ORDER BY "point" DESC; (KM)
d)
SELECT "Kraj", COUNT( "Kierowcy"."Kraj" ) AS "ile" FROM "Kierowcy", "Wyniki", "Wyscigi" WHERE "Wyniki"."Id_kierowcy" = "Kierowcy"."Id_kierowcy" AND "Wyscigi"."Rok" = '2012' AND "Wyniki"."Id_wyscigu" = "Wyscigi"."Id_wyscigu" GROUP BY "Kraj" ORDER BY "ile"; (KM)
a) Odpowiedź: 326
SELECT COUNT( DISTINCT "Numer" ) FROM "Wypadki"; (KM)
b) Odpowiedź: PKR9139 Tomasz Misiak 10486
SELECT "Imie", "Nazwisko", "Numer", SUM( CAST( "Odszkodowanie" AS FLOAT ) ) AS "ile" FROM "Wypadki", "Osoby", "Auta" WHERE "Wypadki"."Numer" = "Auta"."Numer" AND "Osoby"."PESEL" = "Auta"."PESEL" GROUP BY "Nazwisko", "Imie", "PESEL", "Numer" ORDER BY "ile" DESC; (KM)
c) Odpowiedź: 2006 194741
2007 227446
SELECT YEAR( "Data" ) AS "rok", SUM( CAST( "Odszkodowanie" AS FLOAT ) ) FROM "Wypadki" WHERE ( "rok" = '2006' OR "rok" = '2007' ) GROUP BY "rok"; (KM)
d) Odpowiedź: fiat 145
SELECT "Marka", COUNT( "Marka" ) AS "ile" FROM "Auta", "Wypadki" WHERE "Wypadki"."Numer" = "Auta"."Numer" GROUP BY "Marka" ORDER BY "ile"; (KM)
e) Odpowiedź: A 138
, B 115
, C 133
, D 114
SELECT "Rodzaj_miasta", COUNT( "Rodzaj_miasta" ) FROM "Auta", "Osoby", "Wypadki" WHERE "Wypadki"."Numer" = "Auta"."Numer" AND "Osoby"."PESEL" = "Auta"."PESEL" GROUP BY "Rodzaj_miasta" ORDER BY "Rodzaj_miasta"; (KM)