[Baze podataka]
Moderator/ica: Moderatori/ce
U naslovu teme unutar uglatih zagrada navesti o kojem jeziku je riječ. Primjer: [Java]
-
linux_n00b
- Postovi: 172
- Pridružen/a: 02 ožu 2010, 14:36
- Spol: M
- OS: ArchLinux
- Lokacija: Split-Pujanke
- Kontakt:
[Baze podataka]
Zanima me odakle početi učiti raditi s bazama.
Trebam neki IDE gdje mogu raditi s bazama.
Hvala.
-
The Acacia Strain
- Postovi: 1464
- Pridružen/a: 12 kol 2008, 00:06
- Spol: M
Re: [Baze podataka]
sto se mysqla tice, najbolje je instalirat LAMP ili XAMP (ako ces i u windowsima vjezbat)linux_n00b je napisao/la:Evo, pozdrav svima.
Zanima me odakle početi učiti raditi s bazama.
Trebam neki IDE gdje mogu raditi s bazama.
Hvala.
mysql ima odlican manual, tako da ga mozes s njihove strane preuzet, a i ima masa tutoriala po netu..
http://dev.mysql.com/doc/
- drone
- Moderator
- Postovi: 3293
- Pridružen/a: 01 pro 2010, 23:50
- OS: Arch/KDE, Debian/Armbian
- Lokacija: Nova Gradiška
Re: [Baze podataka]
Također, imaš i službenu dokumentaciju na http://dev.mysql.com/doc/
Meni je za učenje bolja konzola. GUI-ja za rad s bazama imaš isto popriličan broj, free i za novce. Vrlo raširen je phpMyAdmin, ali za njega moraš imati i webserver instaliran. Još jedno besplatno rješenje je MySQL Workbench http://www.mysql.com/products/workbench/
EDIT: nije mi se dalo mijenjati već napisani post, a neke stvari su u gotovo isto vrijeme napisane u postu iznad, pa odatle slični savjeti
2002-2004: Windows98, XP /
2004-2005: Knoppix, Mandrake / 2005: Mandriva, Ubuntu / 2005-2009: LFS / 2009-2010: Mint /
2010-... Arch
-
linux_n00b
- Postovi: 172
- Pridružen/a: 02 ožu 2010, 14:36
- Spol: M
- OS: ArchLinux
- Lokacija: Split-Pujanke
- Kontakt:
Re: [Baze podataka]
Ne, nemam Windowse ni ne planiram ih imati.
Nije problem instalirati nikakav server doma.
- hightech
- Postovi: 119
- Pridružen/a: 21 vel 2013, 01:00
- Spol: M
- OS: wheezy, slekver ;)
- Lokacija: /dev/hda2, etc
- Kontakt:
Re: [Baze podataka]
-------------------
Prvo
Kod: Označi sve
sudo aptitude install mysql-server mysql-clientKod: Označi sve
sudo mysql_secure_installationKod: Označi sve
remove anonymous users? [Y/n] y
... success!
disallow root login remotely? [Y/n] y
... success!
remove test database and access to it? [Y/n] y
- dropping test database...
reload privilege tables now? [Y/n] y
... success!Prvo se ulogovati kroz terminal u root-mysql shell:
Kod: Označi sve
sudo mysql -u root -pKod: Označi sve
mysql>Kod: Označi sve
mysql> CREATE DATABASE korisnikova_baza;
mysql> CREATE USER 'korisnik_baze' IDENTIFIED BY 'lozinka_korisnika_baze';
mysql> GRANT ALL PRIVILEGES ON korisnikova_baza.* TO 'korisnik_baze';
mysql> exit;Ponovo cete dobiti ovakav odzivnik:
korisnik@host:~$
Zatim se ulogovati u mysql shell kao aj korisnik:
Kod: Označi sve
mysql -u korisnik_baze -pPGSQLkorisnik@host:~$ mysql -u korisnik_baze -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 38
Server version: 5.5.29-0ubuntu0.12.04.1 (Ubuntu)
Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
--------------------------
Kod: Označi sve
sudo apt-get install postgresql postgresql-client
passwd postgresKod: Označi sve
su - postgresPa kucajtepostgres@host:~$
Kod: Označi sve
createdb test
psql testi dobicete ovakav odzivnik:postgres@host:~$ createdb test
postgres@host:~$ psql test
psql (9.1.7)
Type "help" for help.
test=#
Sada kreirati tabelu i izlistati vrednosti:test=#
Kod: Označi sve
CREATE TABLE tabela (tabela_id int, ime varchar, prezime varchar);
INSERT INTO tabela VALUES (1, 'high', 'tech');
INSERT INTO tabela VALUES (2, 'tech', 'net');
SELECT * FROM tabela;nastavice se...test=# CREATE TABLE tabela (tabela_id int, ime varchar, prezime varchar);
CREATE TABLE
test=# INSERT INTO tabela VALUES (1, 'high', 'tech');
INSERT 0 1
test=# INSERT INTO tabela VALUES (2, 'tech', 'net');
INSERT 0 1
test=# SELECT * FROM tabela;
tabela_id | ime | prezime
-----------+------+---------
1 | high | tech
2 | tech | net
(2 rows)
test=#
... for good fun and advanced thinking join WS1 ...
... do Boga je put dosta kratak, ne moras dalje od svog srca ...
- jurastublic
- Postovi: 1907
- Pridružen/a: 16 tra 2011, 08:34
- Spol: M
- OS: Mint 10 LXDE itd...
- Lokacija: i grupa Film
Re: [Baze podataka]
-
masteroman
Re: [Baze podataka]
Za rad s podacima u tablici koriste se 4 osnovne naredbe:
SELECT - izdvajanje podataka iz jedne ili više tablica ili upita
INSERT - umetanje novih slogova u tablicu
DELETE - brisanje podataka iz tablice
UPDATE - promjena podataka u tablici
Umetanje podataka – INSERT
Nakon što je otvorena baza podataka i definirane tablice, može se pristupiti upisivanju podataka u tablicu.
Primjer upisa jednog sloga u tablicu kupci.
Kod: Označi sve
INSERT INTO kupci ( id_kupac, kupac_ime, kupac_prezime, kupac_ulica,
kupac_grad, kupac_drzava, kupac_zip, kupac_telefon,
kupac_email)
VALUES ( 1,'Ivo', 'Ivić',null,null,null,null,null,null) ;U gornjem primjeru moguće je null upotrijebiti nad poljima tablice koji NEMAJU opciju NOT NULL u definiciji tablice.
Umjesto da navodimo sva polja tablice možemo gornji primjer napisati i ovako:
Kod: Označi sve
INSERT INTO kupci
VALUES ( 1,'Ivo', 'Ivić',null,null,null,null,null,null) ;Izdvajanje podataka – SELECT
Naredba SELECT se koristi za izdvajanje jednog ili više redaka iz tablice ili upita. Najjednostavniji oblik ove naredbe je dohvat svih podataka iz tablice.
Tako možemo izdvojiti sve podatke iz tablice kupci na slijedeći način:
Kod: Označi sve
SELECT * FROM kupci ;U ovom primjeru se može vidjeti da je nakon riječi SELECT upisana zvjezdica. Ona označava dohvat svih polja iz tablice kupci.
Za dohvat samo jednog ili točno određenih polja, potrebno je umjesto zvjezdice upisati njihova imena i međusobno ih odvojiti zarezom.
Za dohvat svim imena i prezimena kupaca iz tablice kupci potrebno je upisati:
Kod: Označi sve
SELECT kupac_ime, kupac_prezime FROM kupci ;Naredba SELECT može sadržavati i WHERE klauzulu. Ona omogućava prikaz samo onih redaka koji zadovoljavaju zadani uvjet.
Tako je za ispisivanje samo prezimena i identifikacijskog broja kupaca koji se zovu 'Pero' potrebno napisati:
Kod: Označi sve
SELECT id_kupac, kupac_prezime
FROM kupci
WHERE kupac_ime = 'Pero' ;Ako želimo izdvojiti kupce čije ime počinje s slovom P tada se to izvodi ovako:
Kod: Označi sve
SELECT id_kupac, kupac_prezime
FROM kupci
WHERE kupac_ime LIKE 'P%' ;U gornjem je primjeru korišten operator LIKE koji se koristi kao operator usporedbe. Pri korištenju ovog operatora, može se koristiti :
znak '%' - zamjenjuje bilo koji niz znakova
znak '_' - zamjenjuje jedan znak
znak '\' - ukida specijalno značenje znakova % i _ ispred kojeg
je upisan
Kod WHERE uvjeta možemo koristiti :
relacijske operatore ( = , > ,…)
logičke operatore ( AND , OR, NOT )
specijalne operatore ( LIKE, NOT LIKE ,IN, NOT IN,BETWEEN, IS NULL, IS NOT NULL )
Primjeri:
Kod: Označi sve
… WHERE cijena >100 AND cijena < 200Kod: Označi sve
… WHERE cijena BETWEEN 100 AND 200… WHERE naziv LIKE :
Izdvojeni će biti slogovi ovisno o nizu znakova koji mora sadržavati naziv
'S%' naziv počinje s S
'%ec' naziv završava s ec
'%ak%' naziv sadrži ak
'S_' naziv počinje s S a ima još barem 1 znak
'%_ec' naziv završava s ec a prije toga ima barem 1 znak
'%_ec_%' naziv sadrži ec a prije njega i nakon njega ima bar 1 znak
Što ako želimo izvršiti pretragu ovakvu: LIKE '%prvi_drugi%' ?
U tom slučaju problem bi bio znak _. To se rješava znakom \
LIKE '%prvi\_drugi%' ESCAPE '\'.
U tom će slučaju znak _ biti dio stringa koji se pretražuje a ne zamjenjujući znak.
Ako koristimo izraz NOT LIKE tada će rezultat pretraživanja biti taj da će se odabrati slogovi koji nisu obuhvaćeni LIKE izrazom.
Kod: Označi sve
… WHERE cijena IN ( 100, 105, 120 ) .Kod: Označi sve
… WHERE cijena NOT IN ( 100, 105, 120 )Kod: Označi sve
… WHERE naziv IS NULLKod: Označi sve
… WHERE naziv IS NOT NULLAko želimo sortirati izdvojene slogove po nekim pojmovima tada koristimo ORDER BY izraz i to
ORDER BY ASC - za uzlazni sort ( A-Z) ( default)
ORDER BY DESC - za silazni sort ( Z-A)
Slijedeći primjer daje popis svih kupaca sortiranih po prezimenima i to uzlazno:
Kod: Označi sve
SELECT id_kupac, kupac_ime, kupac_prezime
FROM kupci
ORDER BY kupac_prezime;Ako pak želimo sortirati podatke po više pojmova to je moguće tako da iza ORDER BY izraza navedemo pojmove odvojene zarezom.
Slijedeći primjer daje popis svih kupaca sortiranih prvo po prezimenima te unutar toga još i po imenima :
Kod: Označi sve
SELECT id_kupac, kupac_ime, kupac_prezime
FROM kupci
ORDER BY kupac_prezime, kupac_ime ;Brisanje podataka – DELETE
Brisanje jednog ili više redaka iz tablice ostvaruje se naredbom DELETE.
Za brisanje svih redaka iz tablice kupci potrebno je upisati:
Kod: Označi sve
DELETE FROM kupci ;Za brisanje određenog sloga ili više njih potrebno je koristiti WHERE uvjet. Tako, na primjer , za brisanje kupca koji ima identifikator id_kupac jednak 1 potrebno je napisati:
Kod: Označi sve
DELETE FROM kupci
WHERE id_kupac = 2 ;Za brisanje kupaca koji imaju identifikator veći od 1000 pišemo:
Kod: Označi sve
DELETE FROM kupci
WHERE id_kupac > 1000 ;Za brisanje svih kupaca koji se zovu 'Ivo' ili 'Marko' pišemo:
Kod: Označi sve
DELETE FROM kupci WHERE kupac_ime = 'Ivo' OR kupac_ime = 'Marko' ;Promjena podataka – UPDATE
Izmjena jednog ili više podataka u tablici obavlja se naredbom UPDATE. Uz tu naredbu upotrebljava se opcija WHERE slično kao i kod naredbi SELECT i DELETE.
Ako želimo izmijenit mjesto stanovanja kupcu iz tablice kupci koji ima identifikator = 2 , onda to radimo ovako:
Kod: Označi sve
UPDATE kupci
SET kupac_grad = 'Zagreb'
WHERE id_kupac = 2 ;Ako se je gore navedenom kupci izmijenio i poštanski broj tada bi promjena izgledala ovako:
Kod: Označi sve
UPDATE kupci
SET kupac_grad = 'Zagreb' , kupac_zip = 10000
WHERE id_kupac = 2 ;Ako ne bi koristili WHERE uvjet, tada bi se svi slogovi tablice promijenili.
Kod: Označi sve
UPDATE kupci
SET kupac_grad = 'Zagreb' ;U gornjem primjeru svi slogovi iz tablice kupci bili bi promijenjeni tako da bi kupac_grad polje dobilo vrijednost 'Zagreb'.
Equi-join ( Inner join)
Pogledajmo malo tablice kupci i narudzbe. Postoje kupci koju su nešto naručili, ali i oni koji do sada nisu ništa naručili. Zanima nas popis svih kupaca koji su nešto naručili.
To ćemo realizirati slijedećom naredbom:
Kod: Označi sve
SELECT kupci.id_kupac, kupci.kupac_ime, kupci.kupac _prezime,
narudzbe.id_narudzba
FROM kupci, narudzbe
WHERE kupci.id_kupac = narudzbe.id_kupac ;Gornji primjer predstavlja Equi-join primjer. U stvari se radi o presjeku podataka vezanih uz tablice kupci i narudžbe.
Godine 1992 uvedeno je proširenje sintakse SQL-a uvođenjem JOIN izraza. Time je standard SQL-92 zamijenio standard SQL-89.
Gornje primjer možemo napisati i ovako:
Kod: Označi sve
SELECT kupci.id_kupac, kupci.kupac_ime, kupci.kupac _prezime,
narudzbe.id_narudzba
FROM kupci INNER JOIN narudzbe
ON kupci.id_kupac = narudzbe.id_kupac ;Ovdje ulogu WHERE uvjeta preuzima ON join uvjet.
Općenito za Inner join dviju tablica sintaksa izgleda ovako:
Kod: Označi sve
SELECT polje1, polje2, …., poljeN
FROM tablica1 INNER JOIN tablica2
ON tablica1.primarni_ključ = tablica2.vanjski_ključ ;Primijetimo da se iza FROM izraza prvo navodi primarna tablica, a iza INNER JOIN izraza sekundarna tablica.
SELECT unutar SELECT-a ( Nesting Subqueries )
To je kompletna SELECT naredba koja se uključuje unutar druge SELECT naredbe.
Opći oblik takve konstrukcije je slijedeći:
Kod: Označi sve
SELECT polje1,…, poljeN
FROM tablica1
WHERE operator ( SELECT polje1,…, poljeM
FROM tablica2
WHERE uvjet ) ; Postoje dva generalna slučaja:
slučaj kada je unutarnji upit nezavisan od vanjskog
( uncorrelated subquery )
slučaj kada je unutarnji upit zavisan od vanjskog
(correlated subquery )
U prvom slučaju se unutarnji upit izvodi u cijelosti i to jedanput, te se njegov rezultat predaje vanjskom upitu koji se onda izvršava.
U drugom se slučaju moraju vanjski i unutarnji upit izvršavati paralelno što produljuje vrijeme izvršenja cijelog upita. Unutarnji se upit u tom slučaju izvršava više puta.
Ako usporedimo JOIN konstrukciju s nezavisnim podupitima, tada se predlaže korištenje podupita jer će se oni brže izvesti pogotovu nad tablicama s mnogo slogova. JOIN konstrukcija se izvršava tako da se tablice povezane JOIN uvjetom prebacuju zajedno u memoriju računala, dok kod nezavisnog podupita to nije slučaj.
Promotrimo to na jednom primjeru.
Kod: Označi sve
SELECT narudzbe.datum_narudzbe, narudzbe.id_kupac
FROM narudzbe INNER JOIN narudzbe_detalji
ON narudzbe.id_narudzba = narudzbe_detalji.id_narudzba
WHERE isbn = '0-131-4966-9' ;Kod: Označi sve
SELECT narudzbe. datum_narudzbe, narudzbe.id_kupac
FROM narudzbe
WHERE id_narudzba IN ( SELECT id_narudzba
FROM narudzbe_detalji
WHERE isbn = '0-131-4966-9' ) ; Prvo se izvodi unutarnji SELECT koji izdvaja sve id_narudzba-e iz tablice narudzbe_detalji. Nakon toga se izvršava vanjski SELECT koji izdvaja sve kupce i datume narudžbi iz tablice narudzbe s uvjetom da se id_narudzba nalazi u skupu vrijednosti kreiranom prethodnim unutarnjim upitom.
Napomenimo da umjesto IN operatora možemo koristiti i NOT IN i ANY operatore.
Gornji primjer identičan je ovome:
Kod: Označi sve
SELECT narudzbe. datum_narudzbe, narudzbe.id_kupac
FROM narudzbe
WHERE id_narudzba = ANY ( SELECT id_narudzba
FROM narudzbe_detalji
WHERE isbn = '0-131-4966-9' ) ;
EDIT: fino podešavanje teksta