Základy SQL

Post on 13-Apr-2017

796 views 1 download

transcript

FB: facebook.com/peckadesign TW: @peckadesign

ZÁKLADY SQL

Lukáš Brázdil

FB: facebook.com/peckadesign TW: @peckadesign

FB: facebook.com/peckadesign TW: @peckadesign

FB: facebook.com/peckadesign TW: @peckadesign

FB: facebook.com/peckadesign TW: @peckadesign

TŘÍVRSTVÁ ARCHITEKTURA

FB: facebook.com/peckadesign TW: @peckadesign

PREZENTAČNÍ APLIKAČNÍ

DATOVÁ

FB: facebook.com/peckadesign TW: @peckadesign

DATABÁZE

FB: facebook.com/peckadesign TW: @peckadesign

FB: facebook.com/peckadesign TW: @peckadesign

A DATABASE IS AN ORGANIZED COLLECTION OF DATA.

https://en.wikipedia.org/wiki/Database

FB: facebook.com/peckadesign TW: @peckadesign

TABULKA:)

FB: facebook.com/peckadesign TW: @peckadesign

TVORBA DATABÁZE

FB: facebook.com/peckadesign TW: @peckadesign

ERD - SCHÉMA RELAČNÍ DATABÁZE

FB: facebook.com/peckadesign TW: @peckadesign

NORMÁLNÍ FORMY

https://cs.wikipedia.org/wiki/Normalizace_datab%C3%A1ze

0. NF 1. NF

hodnoty je možní rozdělit hodnoty jsou nedělitelné

FB: facebook.com/peckadesign TW: @peckadesign

PRIMÁRNÍ VS. CIZÍ KLÍČ

FB: facebook.com/peckadesign TW: @peckadesign

VAZBY

FB: facebook.com/peckadesign TW: @peckadesign

VAZBY M:N

FB: facebook.com/peckadesign TW: @peckadesign

VAZBY M:N

FB: facebook.com/peckadesign TW: @peckadesign

DBMS

FB: facebook.com/peckadesign TW: @peckadesign

FB: facebook.com/peckadesign TW: @peckadesign

Jakou zvolit licenci: http://www.tomas-solar.com/blog/webinar/co-nevite-o-licencich-placenem-supportu-oracle/

FB: facebook.com/peckadesign TW: @peckadesign

SQL

http://www.w3schools.com/sql/

FB: facebook.com/peckadesign TW: @peckadesign

HISTORIE?WIKIPEDIA.ORG:)

FB: facebook.com/peckadesign TW: @peckadesign

FB: facebook.com/peckadesign TW: @peckadesign

• DDL • DML • DQL

FB: facebook.com/peckadesign TW: @peckadesign

PAUZA?

FB: facebook.com/peckadesign TW: @peckadesign

WORKSHOP

http://lukasbrazdil.com/workshop/

FB: facebook.com/peckadesign TW: @peckadesign

• phpMyAdmin • Adminer

Jednoduchý online DB simulátor: http://sqlfiddle.com/

APLIKACE PRO SPRÁVU DB

FB: facebook.com/peckadesign TW: @peckadesign

DATOVÝ TYP

• varchar (pro text) • int (pro číslo)

FB: facebook.com/peckadesign TW: @peckadesign

DDL (DATA DEFINITION LANGUAGE)

• CREATE • ALTER • DROP

http://www.w3schools.com/sql/

FB: facebook.com/peckadesign TW: @peckadesign

DML (DATA MANIPULATION LANGUAGE)

• INSERT • UPDATE • DELETE

FB: facebook.com/peckadesign TW: @peckadesign

DQL (DATA QUERY LANGUAGE)

• SELECT

http://www.w3schools.com/sql

FB: facebook.com/peckadesign TW: @peckadesign

TESTOVACI DB

link na: http://lukasbrazdil.com/workshop/

FB: facebook.com/peckadesign TW: @peckadesign

SELECT

SELECT * FROM firma [další nepovinné příkazy];

FB: facebook.com/peckadesign TW: @peckadesign

SELECT - PODMÍNKY

např. SELECT * FROM firma WHERE id=1;

WHERE

FB: facebook.com/peckadesign TW: @peckadesign

SELECT - ŘAZENÍ

např. SELECT * FROM firma ORDER BY id DESC

ORDER BY

FB: facebook.com/peckadesign TW: @peckadesign

SELECT - OMEZENÍ

např. SELECT * FROM firma LIMIT 2 [OFFSET 1]

LIMIT

FB: facebook.com/peckadesign TW: @peckadesign

SELECT

DISTINCT

např. SELECT DISTINCT jmeno FROM zamestnanec

FB: facebook.com/peckadesign TW: @peckadesign

SELECT - AGREGAČNÍ FUNKCE

AVG() - Returns the average value COUNT() - Returns the number of rows FIRST() - Returns the first value LAST() - Returns the last value MAX() - Returns the largest value MIN() - Returns the smallest value SUM() - Returns the sum

např. SELECT AVG(mzda) FROM zamestnanec

FB: facebook.com/peckadesign TW: @peckadesign

SELECT - FUNKCE

SELECT jmeno, count(jmeno) pocet FROM zamestnanec GROUP BY jmeno

GROUP BY

FB: facebook.com/peckadesign TW: @peckadesign

SELECT - FUNKCE

SELECT jmeno, count(jmeno) pocet FROM zamestnanec GROUP BY jmeno HAVING jmeno=“Jan”

HAVING

FB: facebook.com/peckadesign TW: @peckadesign

SELECT - SKALÁRNÍ FUNKCE

UCASE() - Converts a field to upper case LCASE() - Converts a field to lower case LENGTH() - Returns the length of a text field ROUND() - Rounds a numeric field to the number NOW() - Returns the current system date and time

např. SELECT jmeno, LENGTH(jmeno) delka_jmena FROM zamestnanec

FB: facebook.com/peckadesign TW: @peckadesign

SELECT - KOMENTÁŘE

Dají se dělat komentáře?

#dajínenápadný znak užitečný např. při SQL injection:)

FB: facebook.com/peckadesign TW: @peckadesign

SELECT

Duplicitní sloupce a zkrácené názvy

tabulka_a a ANEBO tabulka_a as a

FB: facebook.com/peckadesign TW: @peckadesign

SELECT - SPOJOVÁNÍ TABULEK

• horizontální • vertikální

FB: facebook.com/peckadesign TW: @peckadesign

SELECT - SPOJOVÁNÍ TABULEK (HORIZONTÁLNÍ)

JOIN

FB: facebook.com/peckadesign TW: @peckadesign

SELECT - JOIN

FB: facebook.com/peckadesign TW: @peckadesign

SELECT - (INNER) JOIN

SELECT * FROM zamestnanec z JOIN firma f ON f.id=z.id_firmy

FB: facebook.com/peckadesign TW: @peckadesign

SELECT - LEFT JOIN

SELECT * FROM pozice p LEFT JOIN zamestnanec z ON p.id=z.id_pozice

FB: facebook.com/peckadesign TW: @peckadesign

SELECT - RIGHT JOIN

SELECT * FROM zamestnanec z RIGHT JOIN firma f ON f.id=z.id_firmy

FB: facebook.com/peckadesign TW: @peckadesign

SELECT - SPOJOVÁNÍ TABULEK (VERTIKÁLNÍ)

UNION A UNION ALL

FB: facebook.com/peckadesign TW: @peckadesign

SELECT - UNION, UNION ALL

SELECT * FROM zamestnanec2 z2 RIGHT JOIN pozice p ON z2.id_pozice=p.id

UNION

SELECT * FROM zamestnanec2 z2 LEFT JOIN pozice p ON z2.id_pozice=p.id

FB: facebook.com/peckadesign TW: @peckadesign

SELECT

subselect

SELECT * FROM zamestnanec WHERE mzda>(SELECT AVG(mzda) FROM zamestnanec)

FB: facebook.com/peckadesign TW: @peckadesign

PŘÍKLADY

Kolik je zaměstnanců v tabulce zaměstnanec?

Kolik zaměstnanců má každá z firmem?

Průměrná mzda v Praze?

FB: facebook.com/peckadesign TW: @peckadesign

DÍKY ZA POZORNOST