Bazy danych 4. SQL- podstawy

Podobne dokumenty
Bazy danych 7. SQL podstawy

Bazy danych 4. SQL podstawy. P. F. Góra

Bazy danych 5. Samozłaczenie SQL podstawy

Bazy danych 4. Przykłady SQL podstawy

Bazy danych 6. SQL funkcje daty i czasu, zmienne tymczasowe, aliasy

Ref. 7 - Język SQL - polecenia DDL i DML

Bazy danych. Bazy danych. Podstawy języka SQL. Dr inż. Paweł Kasprowski.

Aby uruchomić program klienta i połączyć się z serwerem, należy komendę:

Bazy danych 7. SQL dalsze możliwości. Grupowanie.

Bazy danych 10. SQL Widoki

Bazy Danych i Usługi Sieciowe

Projektowanie systemów baz danych

Bazy danych. Dr inż. Paweł Kasprowski

Literatura: SQL Ćwiczenia praktyczne Autor: Marcin Lis Wydawnictwo: Helion. Autor: Joanna Karwowska

Wykład 2. SQL 1 Structured Query Lenguage

Język SQL, zajęcia nr 1

Bazy danych. Wykład IV SQL - wprowadzenie. Copyrights by Arkadiusz Rzucidło 1

Bazy danych i usługi sieciowe

Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL.

Wykład 5. SQL praca z tabelami 2

strukturalny język zapytań używany do tworzenia i modyfikowania baz danych oraz do umieszczania i pobierania danych z baz danych

Programowanie MSQL. show databases; - pokazanie jakie bazy danych są dostępne na koncie

Przestrzenne bazy danych Podstawy języka SQL

Po prawidłowym podłączeniu do serwera MySQL należy wybrać bazę, na której będziesz pracować:

Systemy GIS Tworzenie zapytań w bazach danych

3 Przygotowali: mgr inż. Barbara Łukawska, mgr inż. Maciej Lasota

Bazy danych 6. Klucze obce. P. F. Góra

PRZESTRZENNE BAZY DANYCH WYKŁAD 2

Wprowadzenie do BD Operacje na bazie i tabelach Co poza zapytaniami? Algebra relacji. Bazy Danych i Systemy informacyjne Wykład 2.

Wykład 05 Bazy danych

Wprowadzenie do języka SQL

Kurs. Podstawy MySQL

Relacyjne bazy danych. Podstawy SQL

Wykład 4. SQL praca z tabelami 1

P o d s t a w y j ę z y k a S Q L

Podstawy języka SQL. standardy SQL formułowanie zapytań operacje na strukturach danych manipulowanie danymi. Bazy danych s.5-1

040 STRUCTURED QUERY LANGUAGE. Prof. dr hab. Marek Wisła

Bazy danych 8. Widoki i wyzwalacze. P. F. Góra

SQL - DDL. 1 Tabele systemowe. 2 Typy danych

Relacyjne bazy danych. Podstawy SQL

CREATE DATABASE ksiegarnia_internetowa DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

Języki programowania wysokiego poziomu. PHP cz.4. Bazy danych

Paweł Rajba

Odnawialne Źródła Energii I rok. Tutorial PostgreSQL

SIECI KOMPUTEROWE I BAZY DANYCH

Informatyka (5) SQL. dr inż. Katarzyna Palikowska Katedra Transportu Szynowego p. 4 Hydro

Laboratorium nr 4. Temat: SQL część II. Polecenia DML

SQL DDL DML TECHNOLOGIE BAZ DANYCH. Wykład 5: Język DDL i DML. Małgorzata Krętowska

D D L S Q L. Co to jest DDL SQL i jakie s jego ą podstawowe polecenia?

Połączenie z bazą danych : mysql h u root -p Enter password: *******

SIECI KOMPUTEROWE I BAZY DANYCH

BAZY DANYCH wprowadzenie do języka SQL. Opracował: dr inż. Piotr Suchomski

Bazy Danych - Instrukcja do Ćwiczenia laboratoryjnego nr 8

Bazy danych 9. SQL Klucze obce Transakcje

1. Sprawdzenie ustawień konfiguracyjnych. Uruchomienie wiersza poleceń:..\ścieżka\bin>mysqladmin variables

Projekt jest finansowany ze środków Unii Europejskiej, Europejskiego Funduszu Społecznego i budŝetu państwa. Studia Podyplomowe dla Nauczycieli

Ogólny plan przedmiotu. Strony WWW. Literatura BAZY DANYCH. Materiały do wykładu:

Bazy danych i usługi sieciowe

LAB2. Dalsze ćwiczenia z podstaw języka SQL (CREATE, ALTER, DROP, INSERT, UPDATE, DELETE, SELECT)

Bazy danych 9. Klucze obce Transakcje. P. F. Góra

Instalacja MySQL.

77. Modelowanie bazy danych rodzaje połączeń relacyjnych, pojęcie klucza obcego.

Język SQL podstawy zapytań

Zaawansowane bazy danych i hurtownie danych studia zaoczne II stopnia, sem. I

Wykład :45 BD-1 W_3

SQL (ang. Structured Query Language)

Wyzwalacze (triggery) Przykład

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny Politechnika Śląska

- język zapytań służący do zapisywania wyrażeń relacji, modyfikacji relacji, tworzenia relacji

MySQL. Darmowa baza danych. Æwiczenia praktyczne

Język baz danych SQL cz.1

Dr Michał Tanaś(

Blaski i cienie wyzwalaczy w relacyjnych bazach danych. Mgr inż. Andrzej Ptasznik

Bazy danych 9. Klucze obce Transakcje

Wykład 8. SQL praca z tabelami 5

Podstawy języka SQL. SQL Structured Query Languagestrukturalny

Programowanie w SQL procedury i funkcje. UWAGA: Proszę nie zapominać o prefiksowaniu nazw obiektów ciągiem [OLIMP\{nr indeksu}] Funkcje użytkownika

SQL w praktyce. Miłej i owocnej nauki!!!

SQL/MySQL. Rafał Kern

Komunikacja z bazą danych psql

Tworzenie baz danych i tabel

Bazy danych. Polecenia SQL

Podstawy języka SQL cz.1

SQL Structured Query Language

Widok Connections po utworzeniu połączenia. Obszar roboczy

Język SQL. Rozdział 2. Proste zapytania

Autor: Joanna Karwowska

I. Język manipulowania danymi - DML (Data Manipulation Language). Polecenia INSERT, UPDATE, DELETE

Przykłady najlepiej wykonywać od razu na bazie i eksperymentować z nimi.

DECLARE VARIABLE zmienna1 typ danych; BEGIN

Podstawowe informacje o bazach danych. Technologie Informacyjne

Lab.8: Podstawy języka SQL.

Wykład 6. SQL praca z tabelami 3

Laboratorium nr 1. Temat: Wprowadzenie do MySQL-a

SQL 4 Structured Query Lenguage

Składowane procedury i funkcje

Bazy danych 11. SQL Procedury składowane, kursory i wyzwalacze

E.14 Bazy Danych cz. 16 SQL Tworzenie, modyfikowanie i usuwanie tabel

15. Funkcje i procedury składowane PL/SQL

Transkrypt:

Bazy danych 4. SQL- podstawy P. F. Góra http://th-www.if.uj.edu.pl/zfs/gora/ 2017/18

SQL - Structured Query Language Interpretowany język programowania. Jego polecenia tradycyjnie nazywane sa zapytaniami (kwerendami, ang. query). front-end relacyjnych baz danych back-end aplikacji korzystajacych z relacyjnych baz danych W sieci dostępnych jest bardzo dużo kursów i tutoriali SQL. Copyright c 2010-17 P. F. Góra 4 2

Używane standardy SQL-86 SQL-92 SQL:1999 SQL:2003 SQL:2006 SQL:2008 SQL:2011 SQL:2016 Copyright c 2010-17 P. F. Góra 4 3

Żadna z komercyjnych lub otwartych implementacji SQL nie jest w pełni zgodna ze statandardem (ponad SQL:1999), chociaż wszystkie sa prawie zgodne ze standardem SQL:2003. Dostarczyciele wprowadzaja za to własne rozszerzenia języka, tak więc skrypty SQL i aplikacje korzystajace z SQL nie sa w pełni przenoszalne. Na tej stronie http://troels.arvin.dk/db/rdbms/ wymienone sa różnice pomiędzy standardem SQL a jego popularnymi implementacjami. Copyright c 2010-17 P. F. Góra 4 4

Części SQL DDL (Data Definition Language) zmiana schematu bazy danych, tworzenie, modyfikacja i usuwanie tabel, indeksów itd (CREATE, ALTER, DROP). DML (Data Manipulation Language) wprowadzanie, modyfikacja, usuwanie danych (INSERT, UPDATE, DELETE). DQL (Data Query Language), niekiedy traktowany jako część DML właściwy język zapytań (SELECT i wszystko, co się z nim łaczy). DCL (Data Control Language) nadawanie uprawnień do obiektów bazodanowych (GRANT, REVOKE, DENY). rozszerzenia o funkcje i procedury składowane, w tym kursory. Copyright c 2010-17 P. F. Góra 4 5

Programowanie deklaratywne SQL a ściślej, DQL jest językiem deklaratywnym: określa logikę programowania, bez określenia control flow. Innymi słowy, zapytanie SQL mówi co chcemy osiagn ać, bez określenia jak chcemy to zrobić. Przeciwieństwem deklaratywnego paradygmatu programowania jest programowanie imperatywne. Copyright c 2010-17 P. F. Góra 4 6

Czy SQL jest językiem programowania? Jeśli ograniczymy się do DDL, DML, DQL i DCL, SQL nie jest językiem programowania, gdyż nie jest zupełny w sensie Turinga. Taki klasyczny SQL jeswt jedynie językiem manipulowania danymi. Jeśli jednak uwzględnimy rozszerzenia SQL w postaci procedur i funkcji składowanych, SQL jest językiem programowania. Copyright c 2010-17 P. F. Góra 4 7

Dygresja: Zupełność w sensie Turinga (Turing completeness) Zespół reguł manipulowania danymi jest zupełny w sensie Turinga jeśli można za jego pomoca zasymulować uniwersalna maszynę Turinga. Mówimy o regułach manipulowania danymi, gdyż maszyna Turinga w istocie to robi: odczytuje i zapisuje symbole z taśmy wejścia-wyjścia. Korzystajac z pojęcia równoważności w sensie Turinga, możemy powiedzieć, że za pomoca SQL rozszerzonego o procedury i funkcje składowane, można zasymulowaćdziałanie każdego innego systemu (programu) komputerowego zupełnego w sensie Turinga abstrahujac od wygody, efektywności i innych praktycznych aspektów takiej symulacji. Copyright c 2010-17 P. F. Góra 4 8

Połaczenie się z serwerem Przed rozpoczęciem pracy, nalezy wywołać proces kliencki, który połaczy się z serwerem. W MySQL może to wygladać na przykład tak: C:\>mysql -upfg -p Enter password: ************* Po zakończeniu pracy trzeba się pożegnać: mysql> QUIT; Bye Na ogół połaczenie z serwerem nawiazuje się za pomoca jakiejś aplikacji, niekiedy za pośrednictwem pliku wsadowego, nie zaś bezpośrednio z shella. Copyright c 2010-17 P. F. Góra 4 9

SELECT Najczęściej używanym zapytaniem SQL jest SELECT. Służy ono do uzyskiwania informacji o zawartości tabel, ale może służyć także do wielu innych celów, na przykład do obliczeń matematycznych. mysql> SELECT 2+2; +-----+ 2+2 +-----+ 4 +-----+ 1 row in set (0.00 sec) mysql> SELECT Sin(0.25*Pi()),Log(10.0),Log2(16.0); +--------------------+-------------------+------------+ Sin(0.25*Pi()) Log(10.0) Log2(16.0) +--------------------+-------------------+------------+ 0.7071067811865476 2.302585092994046 4 +--------------------+-------------------+------------+ 1 row in set (0.00 sec) Copyright c 2010-17 P. F. Góra 4 10

Symbol NULL w wyrażeniach W SQL istnieje specjalna wartość, NULL, na oznaczenie brakujacych danych. Jeśli NULL stanie się elementem obliczeń matematycznych lub logicznych, ich wynikiem jest NULL. mysql> SELECT 2+NULL, TRUE AND NULL, FALSE OR NULL; +--------+---------------+---------------+ 2+NULL TRUE AND NULL FALSE OR NULL +--------+---------------+---------------+ NULL NULL NULL +--------+---------------+---------------+ 1 row in set (0.05 sec) Ale (co jest niezgodne ze standardem!) mysql> SELECT NULL OR TRUE; +--------------+ NULL OR TRUE +--------------+ 1 +--------------+ 1 row in set (0.00 sec) Copyright c 2010-17 P. F. Góra 4 11

Zmienne tymczasowe SQL pozwala na definiowanie zmiennych tymczasowych nazwa zmiennej tymczasowej zawsze zaczyna się od @. Zmienna istnieje dopóty, dopóki nie zostanie zakończone połaczenie z serwerem. Procesy klienckie nie widza zmiennych zdefiniowanych przez inne procesy. mysql> SET @a=5; Query OK, 0 rows affected (0.01 sec) mysql> SELECT @a-2; +------+ @a-2 +------+ 3 +------+ 1 row in set (0.00 sec) Copyright c 2010-17 P. F. Góra 4 12

Zmiennej można przypisać wartość, która jest wynikiem zapytania: mysql> SET @b=(select NrStudenta FROM Studenci2 WHERE Imie= Tadeusz ); Query OK, 0 rows affected (0.09 sec) mysql> SELECT @b, @a+@b; +------+-------+ @b @a+@b +------+-------+ 74 79 +------+-------+ 1 row in set (0.00 sec) Copyright c 2010-17 P. F. Góra 4 13

Utworzenie bazy danych mysql> CREATE DATABASE MoiStudenci; Query OK, 1 row affected (0.06 sec) Uwaga na systemy znaków! Jeśli chcemy używac polskich znaków diakrytycznych, niekiedy należy explicite określić CHARACTER SET. To silnie zależy od systemu operacyjnego, implementacji DBMS, a nawet jej wersji. mysql> USE MoiStudenci; Database changed mysql> Po wywołaniu klienta, trzeba wejść do wybranej bazy za pomoca instrukcji USE nie tylko po jej utworzeniu, ale zawsze. Copyright c 2010-17 P. F. Góra 4 14

To, jakie bazy znajduja się na serwerze, możemy zobaczyć za pomoca instrukcji SHOW DATABASES. mysql> SHOW DATABASES; +--------------------+ Database +--------------------+ information_schema kaskady moistudenci mysql test +--------------------+ 5 rows in set (0.00 sec) Copyright c 2010-17 P. F. Góra 4 15

Utworzenie tabeli mysql> CREATE TABLE Studenci -> (NrStudenta SMALLINT UNSIGNED NOT NULL -> AUTO_INCREMENT PRIMARY KEY); Query OK, 0 rows affected (0.14 sec) Jeśli okaże się to konieczne, po utworzeniu można zmienić definicję tabeli. mysql> ALTER TABLE Studenci -> ADD COLUMN (Nazwisko VARCHAR(20) NOT NULL); Query OK, 1 row affected (0.17 sec) Records: 1 Duplicates: 0 Warnings: 0 Copyright c 2010-17 P. F. Góra 4 16

Składnia polecenia CREATE TABLE CREATE TABLE NazwaTabeli ( NazwaKolumny 1 TypKolumny 1 NULL NOT NULL..., NazwaKolumny 2 TypKolumny 2 NULL NOT NULL...,... NazwaKolumny n TypKolumny n NULL NOT NULL..., PRIMARY KEY (NazwaKolumny p,nazwakolumny q,... ) ) ; Inne opcje poznamy później. Copyright c 2010-17 P. F. Góra 4 17

Typy danych (atrybutów) TINYINT DATE TINYBLOB SMALLINT TIME BLOB MEDIUMINT TIMESTAMP MEDIUMBLOB INT DATETIME LONGBLOB INTEGER CHAR TINYTEXT BIGINT VARCHAR TEXT REAL BOOLEAN LONGTEXT DOUBLE ENUM FLOAT SET DECIMAL NUMERIC Copyright c 2010-17 P. F. Góra 4 18

Instrukcja DESCRIBE podaje definicję tabeli. mysql> DESCRIBE Studenci; +------------+----------------------+------+-----+---------+----------------+ Field Type Null Key Default Extra +------------+----------------------+------+-----+---------+----------------+ NrStudenta smallint(5) unsigned NO PRI NULL auto_increment Nazwisko varchar(20) NO +------------+----------------------+------+-----+---------+----------------+ 2 rows in set (0.01 sec) Niepotrzebna tabelę usuwamy za pomoca instrukcji DROP TABLE. mysql> DROP TABLE Studenci; Query OK, 0 rows affected (0.02 sec) Lepiej ja utworzyć od poczatku dobrze niż dodawać kolumna po kolumnie... Copyright c 2010-17 P. F. Góra 4 19

mysql> CREATE TABLE Studenci -> (NrStudenta SMALLINT UNSIGNED NOT NUll -> AUTO_INCREMENT PRIMARY KEY, -> Imie VARCHAR(20), -> Nazwisko VARCHAR(20) NOT NULL, -> Uwagi VARCHAR(30), -> Grupa CHAR(2) NOT NULL); Query OK, 0 rows affected (0.06 sec) mysql> DESCRIBE Studenci; +------------+----------------------+------+-----+---------+----------------+ Field Type Null Key Default Extra +------------+----------------------+------+-----+---------+----------------+ NrStudenta smallint(5) unsigned NO PRI NULL auto_increment Imie varchar(20) YES NULL Nazwisko varchar(20) NO Uwagi varchar(30) YES NULL Grupa char(2) NO +------------+----------------------+------+-----+---------+----------------+ 5 rows in set (0.00 sec) Copyright c 2010-17 P. F. Góra 4 20

Wstawianie wartości do tabeli mysql> INSERT INTO Studenci VALUES -> (1, Alicja, Zielińska,, pn ); Query OK, 1 row affected (0.02 sec) mysql> SELECT * FROM Studenci; +------------+--------+-----------+-------+-------+ NrStudenta Imie Nazwisko Uwagi Grupa +------------+--------+-----------+-------+-------+ 1 Alicja Zielińska pn +------------+--------+-----------+-------+-------+ 1 row in set (0.15 sec) Copyright c 2010-17 P. F. Góra 4 21

Składnia zapytania SELECT; SELECT [DISTINCT] lista select FROM tabela lub zapytanie WHERE warunek logiczny GROUP BY wyrażenie grupujace HAVING warunek wyszukiwania po grupowaniu ORDER BY wyrażenie porzadkuj ace [ASC DESC] ; W zapytaniu SELECT wszystkie klauzule musza występować w powyższej kolejności. Niektóre klauzule można opuścić, ale to, co jest, musi być w tej kolejności. Copyright c 2010-17 P. F. Góra 4 22

Składnia zapytania SELECT; SELECT [DISTINCT] lista select FROM tabela lub zapytanie WHERE warunek logiczny GROUP BY wyrażenie grupujace HAVING warunek wyszukiwania po grupowaniu ORDER BY wyrażenie porzadkuj ace [ASC DESC] ; W zapytaniu SELECT wszystkie klauzule musza występować w powyższej kolejności. Niektóre klauzule można opuścić, ale to, co jest, musi być w tej kolejności. Copyright c 2010-17 P. F. Góra 4 23

Dodajmy więcej danych mysql> INSERT INTO Studenci VALUES -> (2, Bogdan, Żółkiewski,, pn ), -> (3, Czesław, Ygrekowski, taki koleś, wt ); Query OK, 2 rows affected (0.17 sec) Records: 2 Duplicates: 0 Warnings: 0 mysql> SELECT * FROM Studenci; +------------+---------+------------+------------+-------+ NrStudenta Imie Nazwisko Uwagi Grupa +------------+---------+------------+------------+-------+ 1 Alicja Zielińska pn 2 Bogdan Żółkiewski pn 3 Czesław Ygrekowski taki koleś wt +------------+---------+------------+------------+-------+ 3 rows in set (0.00 sec) Copyright c 2010-17 P. F. Góra 4 24

Dodajmy jeszcze więcej danych mysql> INSERT INTO Studenci (Imie,Nazwisko,Grupa) VALUES -> ( Dominika, Xena, wt ), -> ( Edmund, Woźniak, wf ), -> ( Janko, Muzykant, nd ); Query OK, 3 rows affected (0.17 sec) Records: 3 Duplicates: 0 Warnings: 0 mysql> SELECT * FROM Studenci; +------------+----------+------------+------------+-------+ NrStudenta Imie Nazwisko Uwagi Grupa +------------+----------+------------+------------+-------+ 1 Alicja Zielińska pn 2 Bogdan Żółkiewski pn 3 Czesław Ygrekowski taki koleś wt 4 Dominika Xena NULL wt 5 Edmund Woźniak NULL wf 6 Janko Muzykant NULL nd +------------+----------+------------+------------+-------+ 6 rows in set (0.04 sec) Zwracam uwagę na różnicę pomiędzy pustymi łańcuchami a NULL. Copyright c 2010-17 P. F. Góra 4 25

Zapytanie UPDATE mysql> UPDATE Studenci -> SET Uwagi=NULL -> WHERE NrStudenta=3; Query OK, 1 row affected (0.19 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> UPDATE Studenci -> SET Grupa= wt WHERE Grupa= wf ; Query OK, 1 row affected (0.06 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> SELECT * FROM Studenci; +------------+----------+------------+-------+-------+ NrStudenta Imie Nazwisko Uwagi Grupa +------------+----------+------------+-------+-------+ 1 Alicja Zielińska pn 2 Bogdan Żółkiewski pn 3 Czesław Ygrekowski NULL wt 4 Dominika Xena NULL wt 5 Edmund Woźniak NULL wt 6 Janko Muzykant NULL nd +------------+----------+------------+-------+-------+ 6 rows in set (0.00 sec) Copyright c 2010-17 P. F. Góra 4 26

Zapytanie DELETE mysql> DELETE FROM Studenci -> WHERE Imie= Janko ; Query OK, 1 row affected (0.15 sec) Dodajmy coś jeszcze do tabeli. mysql> INSERT INTO Studenci (Imie, Nazwisko, Grupa) VALUES -> ( Feliks, Urban, pn ),( Feliks, Urbański, pn ), -> ( Feliks, Urbańczk, wt ); Query OK, 3 rows affected (0.06 sec) Records: 3 Duplicates: 0 Warnings: 0 Copyright c 2010-17 P. F. Góra 4 27

mysql> SELECT * FROM Studenci; +------------+----------+------------+-------+-------+ NrStudenta Imie Nazwisko Uwagi Grupa +------------+----------+------------+-------+-------+ 1 Alicja Zielińska pn 2 Bogdan Żółkiewski pn 3 Czesław Ygrekowski NULL wt 4 Dominika Xena NULL wt 5 Edmund Woźniak NULL wt 7 Feliks Urban NULL pn 8 Feliks Urbański NULL pn 9 Feliks Urbańczk NULL wt +------------+----------+------------+-------+-------+ 8 rows in set (0.00 sec) Brakuje numeru 6 AUTOINCREMENT zapamiętał, że on tam był. AUTOINCREMENT zawsze startuje od high water mark. Problem high water mark jest jeszcze ważniejszy przy przydzielaniu (i późniejszym niezwalnianiu) bloków pamięci dyskowej. Copyright c 2010-17 P. F. Góra 4 28

Jawnie wyspecyfikowana lista select mysql> SELECT Imie, Nazwisko FROM Studenci; +----------+------------+ Imie Nazwisko +----------+------------+ Alicja Zielińska Bogdan Żółkiewski Czesław Ygrekowski Dominika Xena Edmund Woźniak Feliks Urban Feliks Urbański Feliks Urbańczk +----------+------------+ 8 rows in set (0.00 sec) Gwiazdka w zapytaniu SELECT (SELECT * FROM... ) oznacza wszystkie kolumny. Copyright c 2010-17 P. F. Góra 4 29

Problem duplikatów mysql> SELECT Imie FROM Studenci; +----------+ Imie +----------+ Alicja Bogdan Czesław Dominika Edmund Feliks Feliks Feliks +----------+ 8 rows in set (0.00 sec) mysql> SELECT DISTINCT Imie FROM Studenci; +----------+ Imie +----------+ Alicja Bogdan Czesław Dominika Edmund Feliks +----------+ 6 rows in set (0.09 sec) Copyright c 2010-17 P. F. Góra 4 30

Operator LIKE mysql> SELECT Imie, Nazwisko -> FROM Studenci -> WHERE Nazwisko LIKE U% ; +--------+----------+ Imie Nazwisko +--------+----------+ Feliks Urban Feliks Urbański Feliks Urbańczk +--------+----------+ 3 rows in set (0.00 sec) mysql> SELECT Imie, Nazwisko -> FROM Studenci -> WHERE Nazwisko LIKE %i% ; +---------+------------+ Imie Nazwisko +---------+------------+ Alicja Zielińska Bogdan Żółkiewski Czesław Ygrekowski Edmund Woźniak Feliks Urbański +---------+------------+ 5 rows in set (0.00 sec) Copyright c 2010-17 P. F. Góra 4 31

Wykorzystanie ORDER BY mysql> SELECT Imie, Nazwisko FROM Studenci -> WHERE Grupa= wt -> ORDER BY Nazwisko ASC; +----------+------------+ Imie Nazwisko +----------+------------+ Feliks Urbańczk Edmund Woźniak Dominika Xena Czesław Ygrekowski +----------+------------+ 4 rows in set (0.09 sec) Copyright c 2010-17 P. F. Góra 4 32

Tworzenie tabeli wraz z kopiowaniem danych mysql> CREATE TABLE Studenci2 -> (NrStudenta INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, -> Imie VARCHAR(20) NOT NULL, Nazwisko VARCHAR(20) NOT NULL, -> Uwagi VARCHAR(30), Grupa CHAR(2)) -> -- TU się kończy definicja tabeli! -> SELECT * FROM Studenci; Query OK, 8 rows affected (0.50 sec) Records: 8 Duplicates: 0 Warnings: 0 mysql> DESCRIBE Studenci2; +------------+------------------+------+-----+---------+----------------+ Field Type Null Key Default Extra +------------+------------------+------+-----+---------+----------------+ NrStudenta int(10) unsigned NO PRI NULL auto_increment Imie varchar(20) NO NULL Nazwisko varchar(20) NO NULL Uwagi varchar(30) YES NULL Grupa char(2) YES NULL +------------+------------------+------+-----+---------+----------------+ 5 rows in set (0.13 sec) Copyright c 2010-17 P. F. Góra 4 33

mysql> INSERT INTo Studenci2 (NrStudenta,Imie,Nazwisko,Grupa) VALUES -> (74, Tadeusz, Kowalski, xy ); Query OK, 1 row affected (0.07 sec) mysql> SELECT * FROM Studenci2; +------------+----------+------------+-------+-------+ NrStudenta Imie Nazwisko Uwagi Grupa +------------+----------+------------+-------+-------+ 1 Alicja Zielińska pn 2 Bogdan Żółkiewski pn 3 Czesław Ygrekowski NULL wt 4 Dominika Xena NULL wt 5 Edmund Woźniak NULL wt 7 Feliks Urban NULL pn 8 Feliks Urbański NULL pn 9 Feliks Urbańczk NULL wt 74 Tadeusz Kowalski NULL xy +------------+----------+------------+-------+-------+ 9 rows in set (0.00 sec) Copyright c 2010-17 P. F. Góra 4 34

Aliasy W zapytaniu SELECT możemy nadawać kolumnom inne nazwy niż te, które występuja w definicji tabeli. Nosza one nazwę aliasów. mysql> SELECT NrStudenta AS ToJestNumer, Imie FROM Studenci2; +-------------+----------+ ToJestNumer Imie +-------------+----------+ 1 Alicja 2 Bogdan 3 Czesław 4 Dominika 5 Edmund 7 Feliks 8 Feliks 9 Feliks 74 Tadeusz +-------------+----------+ 9 rows in set (0.00 sec) Copyright c 2010-17 P. F. Góra 4 35

Niekiedy wygodnie jest użyć aliasu w dalszej części zapytania, ale nie można go użyć w kaluzuli WHERE. mysql> SELECT NrStudenta AS ToJestNumer, Imie FROM Studenci2 -> WHERE ToJestNumer > 10; ERROR 1054 (42S22): Unknown column ToJestNumer in where clause Można natomiast użyć aliasu w klauzuli HAVING: mysql> SELECT NrStudenta AS ToJestNumer, Imie FROM Studenci2 -> HAVING ToJestNumer > 10; +-------------+---------+ ToJestNumer Imie +-------------+---------+ 74 Tadeusz +-------------+---------+ 1 row in set (0.00 sec) Copyright c 2010-17 P. F. Góra 4 36

Jest to szczególnie przydatne, gdy w warunku występuje wartość obliczana na podstawie więcej niż jednej kolumny: mysql> SELECT CONCAT(Imie,,Nazwisko) AS ImieNazwisko FROM Studenci2 -> HAVING ImieNazwisko LIKE %s%z% ; +------------------+ ImieNazwisko +------------------+ Feliks Urbańczk Tadeusz Kowalski +------------------+ 2 rows in set (0.00 sec) Copyright c 2010-17 P. F. Góra 4 37

Ale to był dopiero poczatek Copyright c 2010-17 P. F. Góra 4 38