Kako podesiti pametne telefone i računare. Informativni portal
  • Dom
  • Windows 10
  • Struktura SQL komandi. Uvod u upravljanje relacionim bazama podataka

Struktura SQL komandi. Uvod u upravljanje relacionim bazama podataka

Jezik strukturirani upiti Kao rezultat razvoja stvoren je jezik strukturnih upita (SQL). relacioni model podataka i trenutno je de facto standard za jezik relacionih DBMS-ova. Danas je podržan SQL jezik ogroman iznos DBMS raznih tipova.

Naziv SQL jezika obično se izgovara kao "es-qu-el". Ponekad se koristi mnemonički naziv "See-Quel".

SQL jezik pruža korisniku (sa minimalan napor s njegove strane) sljedeće mogućnosti:

Kreirajte baze podataka i tabele sa puni opis njihove strukture

Izvršite osnovne operacije manipulacije podacima: ubacivanje, mijenjanje, brisanje podataka

Pokrenite i jednostavne i složene upite.

SQL jezik je relaciono potpun.

Struktura i sintaksa njegovih naredbi su prilično jednostavne, a sam jezik je univerzalan, odnosno sintaksa i struktura njegovih naredbi se ne mijenja pri prelasku s jednog DBMS-a na drugi.

SQL jezik ima dvije glavne komponente:

DDL (Jezik definicije podataka) za definisanje struktura baze podataka i kontrolu pristupa podacima

DML (Jezik za upravljanje podacima) jezik dizajniran za preuzimanje i ažuriranje podataka.

SQL je neproceduralni jezik, što znači da kada ga koristite, morate specificirati koje informacije treba dobiti, a ne kako se mogu dobiti. SQL naredbe su obične engleske riječi (SELECT, INSERT, itd.). Pogledajmo prvo SQL DML izraze:

SELECT - odabir podataka iz baze podataka

INSERT - ubacivanje podataka u tabelu

UPDATE - ažuriranje podataka u tabeli

DELETE - brisanje podataka iz tabele

SELECT izraz

Operator SELECT izvodi akcije ekvivalentne sljedećim operacijama relacijske algebre: odabir, projekcija i spajanje.

Najjednostavniji SQL upit koji ga koristi izgleda ovako:

SELECT col_name FROM tbl

Nakon ključne riječi select slijedi lista kolona razdvojenih zarezima čije podatke će upit vratiti. Ključna riječ from određuje iz koje tablice (ili pogleda) se podaci preuzimaju.

Rezultat upita za odabir uvijek je tabela koja se zove tabela rezultata. Štaviše, rezultati upita koji se izvršavaju pomoću naredbe select mogu se koristiti za kreiranje novi sto. Ako rezultati dva upita za različiti stolovi imaju isti format, mogu se kombinovati u jednu tabelu. Takođe, tabela dobijena kao rezultat upita može biti predmet daljih upita.

Da izaberete sve kolone i sve redove tabele, samo uradite SELECT upit* OD tbl;

Razmotrite tabelu proizvoda koja sadrži informacije o cijeni različite vrste proizvodi:

Zatražite rezultat

SELECT * FROM Product;

će biti cijela tabela proizvoda.

Možete odabrati određene stupce tabele pomoću upita

SELECT col1, col2, … , coln FROM tbl;

Dakle, rezultat zahtjeva

SELECT Tip, Price from Product;

biće sto

Na listu kolona u izaberite izjavu Oni također pribjegavaju ako je potrebno promijeniti redoslijed stupaca u rezultirajućoj tabeli:

Da biste odabrali samo one redove tablice koji zadovoljavaju određena ograničenja, poseban ključna riječ gdje slijedi logično stanje. Ako zapis zadovoljava ovaj uslov, on se uključuje u rezultat. U suprotnom, unos se odbacuje.

Na primjer, odabir onih proizvoda iz tabele proizvoda čija cijena zadovoljava uvjet Cijena<3200, можно осуществить, используя запрос

ODABERITE * IZ proizvoda gdje je cijena<3200;

Njegov rezultat:

Uslov se može složiti i kombinovati pomoću logičkih operatora NOT , AND, OR, XOR, na primjer: gdje je id_ Cijena>500 I Cijena<3500. Допускается также использование выражений в условии: where Price>(1+1) i string konstante: gdje je ime= "autoweights".

Korištenje konstrukcije IZMEĐU var1 I var2 omogućava vam da provjerite da li vrijednosti bilo kojeg izraza spadaju u raspon od var1 do var2 (uključujući ove vrijednosti):

ODABIR * IZ proizvoda gdje je cijena IZMEĐU 3000 I 3500;

Slično operatoru NOT BETWEEN, postoji operator NOT IN.

Imena kolona navedena u klauzuli SELECT mogu se preimenovati. Za to se koristi ključna riječ AS, koja se, međutim, može izostaviti, jer se implicitno podrazumijeva. Na primjer, zahtjev

SELECT Tip AS model, Type_id AS broj FROM proizvoda gdje je Type_id =3

će se vratiti (pseudonim treba pisati bez navodnika):

Operator LIKE je dizajniran da uporedi niz sa uzorkom:

SELECT * FROM tbl gdje col_name LIKE "abc"

Ovaj upit vraća samo one zapise koji sadrže vrijednost stringa abc u stupcu col_name.

Uzorku je dozvoljeno korištenje dva zamjenska znaka: "_" i "%". Prvi od njih zamjenjuje jedan proizvoljni znak u šablonu, a drugi niz proizvoljnih znakova. Dakle, "abc%" odgovara bilo kojem nizu koji počinje sa abc, "abc_" odgovara nizu od 4 znaka koji počinje sa abc, "%z" odgovara bilo kojem nizu koji završava sa z, i na kraju, "%z%" - nizovima znakova koji sadrže z.

Možete pronaći sve zapise tabele proizvoda u kojima vrijednost Type počinje slovom "a" ovako:

SELECT * FROM Product gdje Upišite LIKE "a%";

kamionske vage

Ako niz za pretraživanje sadrži zamjenski znak, tada morate navesti izlazni znak u klauzuli ESCAPE. Ovaj kontrolni znak se mora koristiti u obrascu prije zamjenskog znaka, što ukazuje da se zamjenski znak treba tretirati kao običan znak. Na primjer, ako biste tražili sve vrijednosti u polju koje sadrži znak "_", tada bi obrazac "%_%" rezultirao vraćanjem svih zapisa iz tablice. U ovom slučaju, obrazac treba napisati na sljedeći način:

"%|_%" ESCAPE "|"

Za provjeru usklađenosti vrijednosti sa nizom "20%" možete koristiti sljedeći operator:

LIKE "20#%" BJEŽITE "#"

Operator IS NULL vam omogućava da provjerite odsustvo (prisustvo) NULL vrijednosti u poljima tabele. Korištenje regularnih operatora poređenja u ovim slučajevima može proizvesti netačne rezultate jer poređenje sa NULL rezultira u UNKNOWN. Dakle, uvjet odabira bi trebao izgledati ovako:

gdje je col_name NULL, umjesto gdje col_name=NULL.

Zadani rezultat odabira vraća zapise istim redoslijedom u kojem su pohranjeni u bazi podataka. Ako želite sortirati zapise po jednoj od kolona, ​​morate koristiti klauzulu ORDER BY, nakon koje slijedi naziv te kolone:

SELECT * FROM tbl ORDER BY col_name;

Ovaj upit će vratiti zapise uzlaznim redoslijedom vrijednosti atributa col_name.

Takođe možete sortirati zapise po više kolona. Da biste to učinili, njihova imena moraju biti navedena nakon ORDER BY odvojena zarezima:

SELECT * FROM tbl ORDER BY col_name1, col_name2.

Zapisi će biti sortirani po polju col_name1; ako postoji nekoliko zapisa sa odgovarajućom vrijednošću u stupcu col_name1, oni će biti sortirani po polju col_name2.

Ako želite da sortirate zapise obrnutim redoslijedom (na primjer, opadajuće po datumu), morate navesti ORDER BY col_name DESC.

Za direktno sortiranje postoji ključna reč ASC, koja je prihvaćena kao podrazumevana vrednost.

Ako rezultat uzorka sadrži stotine ili hiljade zapisa, njihov izlaz i obrada zahtijevaju dosta vremena.

Stoga su informacije često podijeljene na stranice i predstavljene korisniku u porcijama. Paginacija se koristi pomoću ključne riječi limit nakon koje slijedi broj unosa za prikaz. Sljedeći upit dohvaća prvih 10 zapisa uz istovremeno sortiranje unatrag u polju col_name1:

SELECT * FROM tbl ORDER BY col_name1 DESC LIMIT 10

Da biste dohvatili sljedećih 10 zapisa, koristite ključnu riječ limit s dvije vrijednosti: prva specificira poziciju s koje treba ispisati rezultat, a druga specificira broj zapisa za preuzimanje:

SELECT * FROM tbl ORDER BY col_name1 DESC LIMIT 10,10

Da biste dohvatili sljedećih 10 zapisa, morate koristiti konstrukciju LIMIT 20, 10.

SQL je jezik strukturiranih upita. SQL ne postoji bez baza podataka – ne možete u njemu pisati programe, i u tom smislu nije programski jezik poput PHP-a, ali kada imate posla sa određenim DBMS-om, više ne možete bez poznavanja SQL-a. Možete pisati jednostavne upite na njemu ili možete izvesti velike transakcije koje se sastoje od nekoliko složenih upita. SQL upit je vrsta naredbe bazi podataka. Takva komanda može zahtijevati vraćanje informacija koje ispunjavaju određene kriterije, ili dati instrukcije za brisanje svih zapisa itd. SQL naredba je jednostavan niz, na primjer:

SELECT * FROM Staff WHERE odjel

SQL upiti su obično bliski jednostavnom izrazu u engleski jezik. Gornja naredba se može prevesti na ruski na sljedeći način

ODABERITE SVE OD osoblja GDJE clwjiertme"

To je potpuno razumljiva naredba, samo je šteta što je napisana isključivo na engleskom. Kao rezultat izvršavanja takvog upita, DBMS će vratiti sve zapise iz tabele Staff u kojima je polje depart* Mit_id jednako tri. U našem primjeru, ovaj upit zapravo bira samo programere iz cijele baze zaposlenih.

Ako ranije niste radili sa DBMS-om, možda ćete imati razumno pitanje: gdje i kako možete izvršiti ovaj upit? Postoje tri načina za izvršavanje SQL upita.

1. Interaktivno okruženje za interakciju sa DBMS-om. Za većinu DBMS servera postoje klijentski programi (ugrađeni ili isporučeni od trećih strana), u čijem radnom okruženju možete pisati SQL upite, izvršavati ih i dobiti rezultat. Obično takve alate koriste administratori baza podataka i nisu direktno povezani sa PHP programiranjem. Primer klijentskog programa za rad sa MySQL je program MySQL Administrator (http: /www.mysgl.coin/product-s/administratoT/) ili veoma popularni PHP sistem phpMyAdmin (http: / /www. phpmyadi'ln. r»et /itummjiage/index.php). Za početak će biti dovoljan već instalirani distribucijski komplet koji ima interfejs konzole. Na Linuxu morate ukucati naredbu mysql iz komandne linije da biste otvorili prozor u kojem se od vas traži da unesete SQL upite, a na Windowsu, da biste pokrenuli isto sučelje, trebate pokrenuti mysql datoteku. exe iz bin direktorija.

2. Statički SQL upiti. Obično se takvi upiti pišu unutar pohranjenih procedura u samim bazama podataka ili su tvrdo kodirani u samim aplikacijama. Statički SQL upit je unaprijed definiran i mijenja se samo ako se programski ili kod pohranjene procedure ručno prepiše. Iz PHP-a, takav SQL upit se izvršava pomoću posebnih funkcija, o čemu će biti riječi kasnije.

3. Dinamički SQL upiti. Ovaj tip uključuje upite koji se ne mogu u potpunosti definirati prilikom pisanja aplikacije. i" na primjer, prilikom pisanja programa za dobijanje liste zaposlenih" u različitim odjeljenjima preduzeća, programer ne zna, ci "> o odjelima u kompaniji i koji će zaposlenici biti uključeni u njih i„. Naravno , ovi podaci se mogu strogo upisivati ​​u program, ali kada dođe do prve promjene u strukturi kompanije, program može biti izbačen ili će biti potrebno prepisati. Dinamički upiti omogućavaju vam da kreirate pograme koji su fleksibilni na promjene podataka. U PHP-u takve zahtjeve izvode gotovo iste funkcije kao i statičke, samo što imaju mogućnost prosljeđivanja nekih parametara.

Kao sažetak tri gore opisane tačke, možemo reći da se SQL upiti izvršavaju iz posebnih administrativnih programa ili na različite načine iz PHP skripti.

Budući da DBMS rješava mnoge probleme, SQL je također prisiljen biti multifunkcionalni jezik. Postoji nekoliko vrsta operacija koje mogu biti< \ ществлять с помощью SQL.

1. Definicija strukture baze podataka. Ovaj tip uključuje upite koji kreiraju i modificiraju tablice i indekse. To su obično CRE komande; “E TA’ LE, ALI’R TA’ LE, ‘ ” .TE INDEX itd.

2. Manipulacija podacima. Ovaj tip uključuje upite za umetanje (premještanje), brisanje ili promjenu podataka u tablicama. Ovo su tri glavne naredbe: INSERT. IZBRIŠI I AŽURIRAJ.

3. Odabir podataka Ovo uključuje samo jednu SELECT naredbu. Ne vrši promjene u samim podacima, ali vam omogućava da ih preuzmete iz baze podataka. Iako se samo jedna naredba koristi za dohvaćanje podataka, ona ima vrlo velike prilike i koristi se vrlo često u aplikacijama.

4. Upravljanje DBMS serverom. Ovaj tip uglavnom uključuje upite za upravljanje korisnicima i njihovim pravima pristupa (na primjer, naredba GRANT).

Dobro poznavanje SQL-a uvelike olakšava rad programera pri radu sa bazom podataka. Aplikacije mogu biti male, ali imaju veliku funkcionalnost samo zbog činjenice da SQL preuzima mnoge zadatke.

Kao iu bilo kojoj drugoj oblasti IT-a, u SQL-u postoje standardi - to su ANSI SQL. Skraćenica ANSI je skraćenica od Amrican National Standards Institute. Međutim, ne samo zbog razlika u funkcionalnosti samih SQL DBMS-ova za različite

DBMS se još uvijek razlikuju jedan od drugog. On ovog trenutka Gotovo svaki DBMS ima svoj dijalekt, koji se obično ne razlikuje mnogo od opšteg standarda, ali ima svoje karakteristike. Na primjer, jezik PL/SQL je kompatibilan sa Oracle i PostgreSQL, a za rad sa MS SQL Server Koristi se T-SQL.

Za kasniji rad sa bazama podataka preporučujemo da odmah proučite standard s kojim planirate raditi u budućnosti. Za većinu web programera trenutno je dovoljna funkcionalnost MySQL DBMS-a (i može se koristiti besplatno), tako da će u ovoj knjizi svi primjeri sa MySQL-om biti dati, shodno tome, na dijalektu ovog DBMS-a. Dokumentaciju o jeziku upita za MySQL možete pronaći na www.mysql.com.

Jeste li novi u programiranju ili ste jednostavno izbjegavali učenje SQL-a u prošlosti? Onda ste naišli na pravu adresu, budući da se svaki programer na kraju suoči sa potrebom da zna ovaj jezik upita. Možda niste glavni dizajner baze podataka, ali je gotovo nemoguće izbjeći rad s njima. Nadam se ovome kratka recenzija sintaksa osnovnih SQL upita pomoći će zainteresiranim programerima i svima kojima je to potrebno.

Šta je SQL baza podataka?

Strukturirani jezik upita ( S strukturirano Q uery L anguage) je komunikacijski standard baze podataka koji podržava ANSI. Najviše najnoviju verziju– Ipak, SQL-99 novi standard je već u razvoju. Većina baza podataka čvrsto se pridržava ANSI-92 standarda. Bilo je dosta diskusija o uvođenju više savremenim standardima, ali dobavljači komercijalnih baza podataka se udaljavaju od ovoga s novim konceptima za pohranjivanje pohranjenih podataka. Gotovo svaka pojedinačna baza podataka koristi neke unikatni set sintaksa, iako vrlo slična ANSI standardu. U većini slučajeva, ova sintaksa je proširenje osnovnog standarda, iako postoje slučajevi u kojima ova sintaksa daje različite rezultate za različite baze podataka. Uvijek je dobra ideja pregledati dokumentaciju baze podataka, posebno ako dobijete neočekivane rezultate.

Ako ste novi u SQL-u, postoje neki osnovni koncepti koje morate razumjeti.

Uopšteno govoreći, "baza podataka" je generički naziv za sistem upravljanja relacionim bazama podataka(RDBMS). Za neke sisteme, "baza podataka" se takođe odnosi na grupu tabela, podataka, konfiguracionih informacija koje su inherentno poseban dio od drugih sličnih dizajna. U ovom slučaju, svaka instalacija SQL baza podataka podaci se mogu sastojati od nekoliko baza podataka. U drugim sistemima, oni se nazivaju tabele.

Tablica je struktura baze podataka koja se sastoji od kolone koji sadrži linije podaci. Obično se tabele kreiraju da sadrže povezane informacije. U okviru iste baze podataka može se kreirati više tabela.

Svaka kolona predstavlja atribut ili skup atributa objekata, kao što su identifikacioni brojevi zaposlenih, visina, boja automobila itd. Termin koji se često koristi za označavanje kolone je polje označavajući naziv, na primjer "u polju Ime". Polje stringa je minimalni element stolovi. Svaka kolona u tabeli ima određeno ime, tip podataka i veličinu. Imena kolona moraju biti jedinstvena unutar tabele.

Svaki red (ili zapis) je zbirka atributa određeni objekat, na primjer, linija može sadržavati identifikacioni broj zaposlenog, visinu plate, godinu rođenja itd. Redovi tabele nemaju imena. Da bi pristupio određenom redu, korisnik mora specificirati neki atribut (ili skup atributa) koji ga jedinstveno identificira.

Jedan od kritične operacije, koji se obavljaju prilikom rada sa podacima, je odabir informacija pohranjenih u bazi podataka. Da bi to učinio, korisnik mora izvršiti zahtjev(upit).

Pogledajmo sada glavne tipove upita baze podataka koji se fokusiraju na manipulaciju podacima unutar baze podataka. Za naše potrebe, svi primjeri su dati u standardnom SQL-u kako bi odgovarali svakom okruženju.

Vrste upita podataka

Postoje četiri glavna tipa upita podataka u SQL-u, koji se nazivaju jezik za manipulaciju podacima(Jezik za manipulaciju podacima ili DML):

  • SELECT– odabrati redove iz tabela;
  • INSERT– dodati redove u tabelu;
  • UPDATE– promijeniti redove u tabeli;
  • IZBRIŠI– brisanje redova u tabeli;

Svaki od ovih upita ima raznih operatera i funkcije koje se koriste za izvođenje nekih radnji s podacima. SELECT upit ima najviše veliki broj opcije. Postoje i dodatni tipovi upita koji se koriste zajedno sa SELECT, kao što su JOIN i UNION. Ali za sada ćemo se fokusirati samo na osnovne upite.

Korištenje SELECT upita za odabir podataka koje želite

Za dohvat informacija pohranjenih u bazi podataka, koristi se SELECT upit. Basic Action Ovaj upit je ograničen na jednu tabelu, iako postoje dizajni koji dozvoljavaju uzorkovanje iz više tabela istovremeno. Da bi se dobili svi redovi podataka za određene kolone, koristi se upit poput ovog:

SELECT column1, column2 FROM table_name;

Takođe, možete dobiti sve kolone iz tabele koristeći divlja karta *:

SELECT * FROM ime_tablice;

Ovo može biti korisno ako ćete odabrati podatke sa određenim WHERE uslov. Sljedeći upit će vratiti sve stupce iz svih redova u kojima "kolona1" sadrži vrijednost "3":

Pored = (jednako), postoje i sljedeći uvjetni operatori:

Dodatno, možete koristiti uslove BITWEEN i LIKE za poređenje sa uslovom WHERE, kao i kombinacije AND i OR operatora.

Što u prevodu na ruski znači: izaberite sve redove iz tabele table_name, gde je vrednost kolone starosti veća ili jednaka 18, a vrednost kolone Prezime je u abecednom rasponu od Ivanova do Sidorova uključujući, ili vrijednost kolone Kompanija je Motorola.

Korištenje INSERT upita za umetanje novih podataka

INSERT upit se koristi za kreacija nova linija podaci. Da biste ažurirali postojeće podatke ili prazna polja u redu, morate koristiti UPDATE zahtjev.

Primjer sintakse INSERT upita:

INSERT INTO table_name (kolona1, kolona2, kolona3) VRIJEDNOSTI ("podaci1", "podaci2", "podaci3");

Ako ćete umetnuti sve vrijednosti redoslijedom kojim se pojavljuju stupci tablice, možete izostaviti nazive stupaca, iako je to poželjno radi čitljivosti. Također, ako navodite stupce, ne morate ih navoditi redoslijedom kojim se pojavljuju u bazi podataka, sve dok vrijednosti koje unesete odgovaraju tom redoslijedu. Ne biste trebali navoditi kolone koje ne sadrže informacije.

Već se mijenja postojeće informacije u bazi podataka na vrlo sličan način.

Uvjet UPDATE i WHERE

UPDATE se koristi za promjenu postojeće vrijednosti ili oslobodite polje u nizu tako da se nove vrijednosti moraju podudarati postojeći tip podatke i daju prihvatljive vrijednosti. Ako ne želite mijenjati vrijednosti u svim redovima, onda morate koristiti klauzulu WHERE.

Možete koristiti WHERE na bilo kojoj koloni, uključujući i onu koju želite promijeniti. Ovo se koristi kada je potrebno zamijeniti jednu specifičnu vrijednost drugom.

Budi pazljiv! DELETE upit briše cijele redove

Upit DELETE u potpunosti briše red iz baze podataka. Ako želite da izbrišete samo jedno polje, onda morate upotrijebiti zahtjev UPDATE i postaviti ovo polje na vrijednost koja će biti analogna NULL u vašem programu. Budite oprezni i ograničite svoje DELETE zahtjev klauzula WHERE, inače možete izgubiti cijeli sadržaj tabele.

Jednom kada je red obrisan iz vaše baze podataka, on se ne može vratiti, pa je preporučljivo imati kolonu pod nazivom "IsActive", ili nešto slično, koju možete promijeniti u null, što će značiti da je pregled podataka iz taj red je zaključan.

Sada znate osnove SQL upita

SQL je jezik baze podataka, a mi smo pokrili najvažnije i osnovne komande, koji se koristi u upitima podataka. Postoji mnogo osnovnih koncepata koji nisu pokriveni (SUM i COUNT, na primjer), ali nekoliko naredbi koje smo uspjeli navesti iznad bi trebalo da vas ohrabri da se aktivirate i zadubite se u divan jezik upita koji se zove SQL.

SQL yavl. alat namenjen za obradu i čitanje podataka sadržanih u računaru. DB. SQL je, prije svega, informacijsko-logičan. jezik, namenjen za opisivanje, modificiranje i preuzimanje podataka pohranjenih u relacijskim bazama podataka. SQL je skraćenica za Strukturirani jezik upita) . SQL se koristi za organiziranje interakcije korisnika s bazom podataka. U stvari, SQL radi samo sa relacionim bazama podataka tip . Poziva se kompjuterski program koji upravlja bazom podataka sistem upravljanja bazom podataka, ili DBMS . Ako korisnik treba čita podatke iz baze podataka, traži ih od DBMS-a sa pom. SQL. DBMS obrađuje zahtjev, pronalazi tražene podatke i šalje ih korisniku. Poziva se proces traženja podataka i dobijanja rezultata zahtjev u bazu podataka: otuda naziv - strukturirani jezik upita. Uprkos činjenici da je čitanje podataka i dalje jedno od najvažnijih. bitan SQL funkcije, sada se ovaj jezik koristi za implementaciju svih funkcionalnost, mačka. DBMS pruža korisniku i to:

Organiziranje podataka. SQL daje korisniku mogućnost promjene strukture prezentacije podataka, kao i uspostavljanja odnosa između elemenata baze podataka.

Čitanje podataka. SQL daje korisniku ili aplikaciji mogućnost čitanja i korištenja podataka sadržanih u bazi podataka.

Obrada podataka. SQL daje korisniku ili aplikaciji mogućnost da... promijeniti bazu podataka, tj. dodati mu nove podatke, kao i izbrisati ili ažurirati postojeće podatke.

Kontrole pristupa. Sa asistentom SQL može ograničiti mogućnost korisnika da čita i mijenja podatke i zaštiti ih od neovlaštenog pristupa.

Dijeljenje podaci. SQL koordinira dijeljenje podataka između korisnika i istovremenih radnika tako da ne ometaju jedni druge.

Integritet podataka. SQL vam omogućava da osigurate integritet baza podataka, štiteći ih od uništenja zbog nedosljednih promjena ili kvara sistema.

Dakle, SQL je dovoljno moćan jezik za interakciju sa DBMS-om.

Prednosti SQL-a.

SQL je jezik koji je lako razumljiv, a istovremeno i svestran softverski alat za upravljanje podacima.

Sljedeće karakteristike su donijele uspjeh SQL jeziku:

Nezavisnost od specifičnog DBMS-a;

Prenosivost sa jednog računarskog sistema na drugi;

Dostupnost standarda;

Relacioni okvir;

Struktura visokog nivoa;

Mogućnost izvođenja posebnih interaktivnih upita:

Sigurnost pristup softveru u baze podataka;

Mogućnost različitog prikaza podataka;

Kompletnost kao jezik dizajniran za rad sa bazama podataka;

Mogućnost dinamičkog određivanja podataka;

Podrška klijent/server arhitekturi.

Svi gore navedeni faktori su razlog zašto je SQL postao standardni alat za upravljanje podacima na personalnim računarima.

37 Osnovne jezične strukture rečenica u upitima

Svaki SQL izraz je zahtjev ili pristup bazi podataka, što dovodi do promjene u bazi podataka. Ovisno o tome koje promjene se dešavaju u bazi podataka, razlikuju se sljedeće vrste upita:

Zahtjevi za kreiranje ili promjenu novih ili postojećih objekata u bazi podataka (u ovom slučaju zahtjev opisuje tip i strukturu objekta koji se kreira ili mijenja);

Zahtjevi za podacima;

Zahtjevi za dodavanje novih podataka (evidencija)

Zahtjevi za brisanje podataka;

Pozivi u DBMS.

Svaki zahtjev je program napisan u jeziku strukturiranih upita SQL. U stvari, SQL program je fraza za upit za uzorak podataka na engleskom, napisan u specifičnoj strukturi, koju DBMS zatim pretvara u traženi rezultat.

U većini DBMS-ova rečenica se završava sa “;” a DBMS ne obrađuje informacije sve dok ne naiđe na “;”. Rečenice se sastoje od fraza i počinju registriranom riječi. Svaka fraza ima ime.

Imenovanja nekih osnovni SQL operatori:

SELECT(select) – (odaberite) podatke iz navedenih kolona i (ako je potrebno) izvršite njihovu transformaciju u skladu sa navedenim izrazima i (ili) funkcijama prije izlaza; OD– označava tabelu iz koje su polja izabrana; GDJE– stvara uslov za odabir podataka u evidenciji; POREDAK PO– sortira zapise po datom redosledu; GROUP BY– grupiše zapise koji se podudaraju prilikom izvršavanja zbirnih upita; DISTINCTROW– isključuje duple zapise iz skupa rezultata; TRANSFORMIRAJTE– procjenjuje izraze u unakrsnim upitima; PIVOT– Definira naslove stupaca u tabeli unakrsnog upita.

O prijedlogu SELECT. Svi zahtjevi za dobivanje gotovo bilo koje količine podataka od jednog ili više. tabele se izvode pomoću jedne SELECT klauzule. IN opšti slučaj Rezultat implementacije SELECT klauzule je druga tablica. Operacija SELECT se može ponovo primijeniti na ovu novu (radnu) tablicu, itd., tj. takve operacije mogu biti ugniježđene jedna u drugu. Istorijski je interes da je mogućnost uklj. jedna SELECT klauzula unutar druge bila je motivacija za korištenje. pridjev "strukturiran" u nazivu SQL jezika. U korištenim dizajnima. simboli: zvezdica (*) za označavanje „sve“ – koristi se. u uobičajenom smislu za programiranje, tj. "svi slučajevi koji zadovoljavaju definiciju"; (,) - Španski odvojiti elemente liste; () - znači da su konstrukcije, zaključak. u zagradi, yavl. opciono ; prava linija (|) – gotovina. izbor između dvije ili više mogućnosti itd.

36-37. Poseban - stil jezika SQL . Osnovne strukture jezičke rečenice u upitima (a/c)

SQL - strukturirani jezik upita. Proizvodnja informacija - ujedinjenija. To je dovelo do potrebe za stvaranjem standardnog jezika koji bi mogao

SELECT u SQL-u (za jednu tabelu): SELECT(odaberite) navedena polja

OD(iz) navedene tabele

GDJE(gdje) je neki specificirani uvjet istinit

SELECT lista_elemenata (polja) za odabir

IZ liste_tablica (ili pogleda)

]

Korištenje AS kvalifikatora

Ovaj kvalifikator zamjenjuje postojeće ime stupca u rezultirajućoj tablici s navedenim.

Agregatne funkcije

Funkcije agregacije uključuju funkcije zbroja (SUM), maksimalne (SUM) i min (MIN). vrijednosti stupaca, prosek aritma (AVG) i broj redova koji zadovoljavaju dati uslov (COUNT).

SELECT count(*), zbroj (budžet), avg (budžet),

min (budžet), max (budžet)

WHERE head_dept = 100

izračunajte: broj odjela koji su pododjeli odjela 100 (marketing i prodaja), njihov ukupni, prosječni, min i maksimalni budžeti COUNT SUM AVG MIN MAX

5 3800000.00 760000.00 500000.00 1500000.00

FROM klauzula naredbe SELECT

FROM klauzula navodi sve objekte (jedan ili više) iz kojih se preuzimaju podaci. Svaka tabela ili pogled na koji se upućuje u upitu moraju biti navedeni u klauzuli FROM.

Tipovi predikata koji se koriste u klauzuli WHERE :

poređenje koristeći relacijske operatore

Jednako<>nije jednako!= nije jednako > veće od< меньше

>= veće ili jednako<= меньше или равно

BETWEEN IN LIKE CONTAINING IS NULL

Operacije poređenja Ako su domeni definirani u bazi podataka, onda stavke koje se uspoređuju moraju pripadati istom domenu.

SELECT ime, prezime, br.

WHERE posao_zemlja<>"SAD"

IZMEĐU

Predikat BETWEEN specificira raspon vrijednosti za koji izraz procjenjuje istinito. Također je dozvoljeno koristiti konstrukciju NOT BETWEEN.

GDJE plata IZMEĐU 20000 I 30000

dobiti spisak zaposlenih čija je godišnja plata veća od 20.000 i manja od 30.000 FIRST_NAME PREZIME PLATA

Ann Bennet 22935,00

Kelly Brown 27000,00

Vrijednosti koje definiraju donji i gornji raspon možda nisu stvarne vrijednosti u bazi podataka. I to je vrlo zgodno - jer ne možemo uvijek naznačiti tačne vrijednosti raspona!

SELECT ime, prezime, plata

GDJE prezime IZMEĐU "Nel" I "Osb"

dobiti spisak uposlenika čija su prezimena između "Nel" i "Osb" PRVO_IME POSLJEDNJE_IME PLATA

Robert Nelson 105900,00

Carol Nordstrom 42742.50

Sue Anne O'Brien 31275,00

SELECT ime_ime, prezime, datum_upošljavanja

IN Predikat IN provjerava da li je navedena vrijednost koja prethodi ključnoj riječi "IN" (na primjer, vrijednost stupca ili funkcija stupca) uključena u listu navedenu u zagradama. Ako je data vrijednost koja se testira jednaka bilo kojem elementu na listi, tada se predikat procjenjuje na istinito. Dozvoljena je i upotreba konstrukcije NOT IN.

SELECT ime, prezime, šifra posla

WHERE job_code IN ("VP", "Admin", "Finan")

LIKE Predikat LIKE se koristi samo sa znakovnim podacima. Provjerava da li data vrijednost karaktera odgovara nizu sa navedenom maskom. Svi dozvoljeni znakovi (uključujući velika i mala slova), kao i posebni znakovi, koriste se kao maska:

% - zamjenjuje bilo koji broj znakova (uključujući 0),

Zamjenjuje samo jedan znak.

Također je dozvoljeno koristiti konstrukciju NOT LIKE.

SELECT ime, prezime

GDJE prezime LIKE "F%"

dobiti spisak zaposlenih čija prezimena počinju na slovo "F" FIRST_NAME LAST_NAME

Logički operatori Logički operatori uključuju dobro poznate operatore AND, OR, NOT, koji vam omogućavaju da izvršite različite logičke operacije: logičko množenje (AND, „presek uslova“), logičko sabiranje (OR, „unija uslova“), logička negacija ( NE, “negacija uslova”). U našim primjerima smo već koristili operator AND. Korišćenje ovih operatora omogućava vam da fleksibilno „prilagodite“ uslove za odabir zapisa.

Veza ( PRIDRUŽITE SE ) Operacija spajanja se koristi u SQL-u za prikaz povezanih informacija pohranjenih u više tablica u jednom upitu. Povezivanje se obično vrši pomoću primarnog ključa jedne tabele i stranog ključa druge tabele - za svaki par tabela. Vrlo je važno uzeti u obzir sva polja stranog ključa, inače će rezultat biti iskrivljen. Polja koja se spajaju mogu (ali nisu obavezna!) biti prisutna na listi elemenata koji se mogu odabrati. WHERE klauzula može sadržavati više uslova spajanja. Uvjet spajanja se također može kombinirati s drugim predikatima u klauzuli WHERE.

02/07/07 11.6K

Uvod u upravljanje relacionim bazama podataka

sql se često naziva esperantskim jezikom za sisteme upravljanja bazama podataka (DBMS). Zaista, ne postoji drugi jezik na svijetu za rad sa bazama podataka koji bi se tako široko koristio u programima. Prvi sol standard pojavio se 1986. godine i sada je stekao univerzalno priznanje. Može se koristiti čak i kada se radi sa nerelacionim DBMS-ovima. Za razliku od drugih softverskih alata, kao što su jezici C i Cobol, koji su prerogativ profesionalnih programera, sql koriste stručnjaci iz različitih oblasti. Programeri, DBMS administratori, poslovni analitičari - svi oni uspješno obrađuju podatke koristeći sql. Poznavanje ovog jezika je korisno za sve koji se moraju baviti bazom podataka.

U ovom članku ćemo pogledati osnovne koncepte sql-a. Ispričajmo njegovu pozadinu (i usput razbijmo nekoliko mitova). Upoznat ćete se sa relacijskim modelom i moći ćete steći prve vještine u radu sa sql-om, što će vam pomoći u daljem ovladavanju jezikom.

Da li je teško naučiti sql? Zavisi koliko duboko ćeš ići. Da biste postali profesionalac, morate mnogo učiti. Jezik sql je započeo svoj život 1974. godine kao predmet kratkog istraživačkog rada od 23 stranice i od tada je prešao dug put. Tekst trenutnog standarda - službenog dokumenta "međunarodni standardni jezik baze podataka sql" (obično nazvan sql-92) - sadrži preko šest stotina stranica, ali ne govori ništa o specifičnostima verzija sol implementiranih u DBMS-ovima. od Microsofta, Oraclea, Sybasea itd. Jezik je toliko razvijen i raznovrstan da bi samo nabrajanje njegovih mogućnosti zahtijevalo nekoliko članaka u časopisima, a ako sakupite sve što je napisano na temu sol, dobit ćete biblioteku u više tomova.

Međutim, za prosječnog korisnika uopće nije potrebno u potpunosti poznavati sql. Kao što turistu koji se nađe u zemlji u kojoj govore nerazumljivim jezikom treba samo naučiti nekoliko uobičajenih izraza i gramatičkih pravila, tako i u SQL-u - znajući malo, možete dobiti mnogo korisnih rezultata. U ovom članku ćemo pogledati osnovne komande sql, pravila za postavljanje kriterijuma za odabir podataka i pokazaćemo kako se dobijaju rezultati. Kao rezultat, moći ćete sami kreirati tabele i unositi informacije u njih, kreirati upite i raditi sa izvještajima. Ovo znanje može postati osnova za dalji samostalni razvoj sql-a.

Šta je sql?

sql je specijalizovani neproceduralni jezik koji vam omogućava da opišete podatke, preuzmete i obradite informacije iz relacionih DBMS-ova. Specijalizacija znači da je sol namijenjen samo za rad sa bazom podataka; Ne možete kreirati punopravni sistem aplikacija koristeći samo ovaj jezik - to će zahtijevati korištenje drugih jezika u koje možete ugraditi SQL naredbe. Stoga se sql naziva i pomoćnim jezičkim alatom za obradu podataka. Pomoćni jezik se koristi samo u sprezi sa drugim jezicima.

Aplikacijski jezik opšte namene obično ima mogućnosti za kreiranje procedura, ali SQL nema. Uz njegovu pomoć ne možete odrediti kako bi se određeni zadatak trebao izvršiti, već samo možete odrediti o čemu se točno radi. Drugim riječima, kada radimo sa sql-om, zanimaju nas rezultati, a ne procedure za njihovo dobijanje.

Najznačajnije svojstvo sql-a je mogućnost pristupa relacionim bazama podataka. Mnogi čak vjeruju da su izrazi “baza podataka obrađena pomoću sql-a” i “relaciona baza podataka” sinonimi. Međutim, uskoro ćete vidjeti da postoji razlika između njih. Standard sql-92 čak i nema termin relacija.

Šta je relacioni DBMS?

Ne ulazeći u detalje, relacioni DBMS je sistem zasnovan na modelu upravljanja relacionim podacima.

Koncept relacionog modela je prvi put predložen u radu dr. E. F. Codd-a, objavljenom 1970. godine. U njemu je opisan matematički aparat za strukturiranje i manipulaciju podacima, a također je predložen apstraktni model za predstavljanje bilo koje informacije iz stvarnog svijeta. Ranije je pri korištenju baze podataka bilo potrebno uzeti u obzir specifičnosti pohranjivanja informacija u njoj. Ako se interna struktura baze podataka promijeni (na primjer, radi poboljšanja performansi), bilo je potrebno preraditi aplikativne programe, čak i ako nije došlo do promjena na logičkom nivou. Relacioni model je omogućio da se odvoje privatne karakteristike skladištenja podataka od nivoa aplikacijskog programa. Zapravo, model ni na koji način ne opisuje kako se informacije pohranjuju i pristupaju. Ono što se uzima u obzir je način na koji korisnik percipira ove informacije. Zahvaljujući nastanku relacionog modela, pristup upravljanju podacima se kvalitativno promijenio: od umjetnosti se pretvorio u nauku, što je dovelo do revolucionarnog razvoja industrije.

Osnovni koncepti relacionog modela

Prema relacionom modelu, relacija je tabela sa podacima. Relacija može imati jedan ili više atributa (obilježja) koji odgovaraju stupcima ove tablice, i neki skup (moguće prazan) podataka, koji su skupovi ovih atributa (oni se nazivaju n-arnim tuplema ili zapisima) i koji odgovaraju redove tabele.

Za bilo koji tuple, vrijednosti atributa moraju pripadati takozvanim domenama. U stvari, domen je određeni skup podataka koji definira skup svih važećih vrijednosti.

Pogledajmo primjer. Neka postoji domen Dani u sedmici koji sadrži vrijednosti od ponedjeljka do nedjelje. Ako relacija ima atribut WeekDay koji odgovara ovoj domeni, tada bilo koji tuple u vezi mora imati jednu od navedenih vrijednosti u koloni WeekDay. Nije dozvoljeno pojavljivanje vrijednosti Januar ili Mačka.

Napomena: atribut mora imati jednu od važećih vrijednosti. Zabranjeno je navođenje više vrijednosti odjednom. Dakle, pored zahtjeva da vrijednosti atributa pripadaju određenom domenu, mora biti ispunjen i uvjet njegove atomicnosti. To znači da se ova značenja ne mogu razložiti, tj. ne mogu se rastaviti na manje dijelove bez gubitka osnovnog značenja. Na primjer, ako bi vrijednost atributa istovremeno sadržavala ponedjeljak i utorak, tada bi se mogla razlikovati dva dijela, zadržavajući izvorno značenje - Dan u sedmici; stoga, ova vrijednost atributa nije atomska. Međutim, ako pokušate da razbijete značenje "ponedjeljak" na dijelove, dobit ćete skup pojedinačnih slova - od "P" do "K"; izvorno značenje je izgubljeno, pa je značenje "ponedjeljka" atomsko.

Veze imaju i druga svojstva. Najznačajniji od njih je matematičko svojstvo zatvorenih operacija. To znači da se kao rezultat izvođenja bilo koje operacije na relaciji mora pojaviti nova relacija. Ovo svojstvo vam omogućava da dobijete predvidljive rezultate prilikom izvođenja matematičkih operacija nad odnosima. Osim toga, postaje moguće predstaviti operacije u obliku apstraktnih izraza s različitim nivoima ugniježđenja.

U svom originalnom radu, dr. Codd je definisao skup od osam operatora koji se naziva relacioni algebra. Četiri operatora—unija, logičko množenje, razlika i kartezijanski proizvod—prenesena su iz tradicionalne teorije skupova; preostali operatori su kreirani posebno za rukovanje odnosima. Naknadni rad dr. Codd, Chris Date i drugih istraživača predložio je dodatne operatere. Kasnije u ovom članku, pogledat ćemo tri relacijske operatora – projektirati, odabrati ili ograničiti i pridružiti se.

sql i relacijski model

Sada kada ste upoznati sa relacionim modelom, zaboravimo na njega. Naravno, ne zauvijek, već samo da objasnim sljedeće: iako je relacijski model koji je predložio dr. Codd korišten u razvoju sql-a, ne postoji potpuna ili doslovna korespondencija između njih (ovo je jedan od razloga zašto sql-92 standard nema termin stav). Na primjer, koncepti sql tablice i relacije nisu ekvivalentni, jer tablice mogu imati nekoliko identičnih redova odjednom, dok se identične torke ne smiju pojavljivati ​​u relacijama. Osim toga, SQL ne omogućava korištenje relacijskih domena, iako tipovi podataka igraju ulogu u određenoj mjeri (neki utjecajni pobornici relacijskog modela sada pokušavaju potaknuti uključivanje relacijskih domena u budući SQL standard).

Nažalost, nedosljednost između sql-a i relacijskog modela dovela je do mnogih nesporazuma i sporova tokom godina. Ali pošto je glavna tema članka proučavanje sql-a, a ne relacionog modela, ovi problemi se ovdje ne razmatraju. Samo zapamtite da postoje razlike između pojmova koji se koriste u sql-u i relacijskom modelu. Dalje u članku će se koristiti samo termini prihvaćeni u sql-u. Umjesto relacija, atributa i tuple-a, koristićemo njihove sql analoge: tabele, kolone i redove.

Statički i dinamički sql

Možda ste već upoznati s pojmovima kao što su statički i dinamički sql. Sql upit je statičan ako je preveden i optimiziran u fazi prije izvođenja programa. Već smo spomenuli jedan oblik statičkog sql-a kada smo govorili o ugrađivanju sql komandi u C ili Cobol programe (postoji i drugi naziv za takve izraze - embedded sql). Kao što verovatno pogađate, dinamički SQL upit se kompajlira i optimizuje tokom izvršavanja programa. U pravilu, obični korisnici koriste dinamički sql, koji im omogućava da kreiraju upite u skladu sa svojim neposrednim potrebama. Jedna od opcija za korištenje dinamičkih SQL upita je njihov interaktivni ili direktni poziv (postoji čak i poseban termin - directsql), kada se upiti poslani na obradu unose interaktivno sa terminala. Postoje određene razlike između statičkog i dinamičkog SQL-a u sintaksi korišćenih konstrukcija i funkcijama izvršenja, ali ova pitanja su izvan opsega ovog članka. Napominjemo samo da su radi jasnoće razumijevanja primjeri dati u obliku direktnih sql upita, jer to omogućava ne samo programerima, već i većini krajnjih korisnika, da nauče kako koristiti sql.

Kako naučiti sql

Sada ste spremni za pisanje svojih prvih sql upita. Ako imate pristup bazi podataka preko sql-a i želite naše primjere koristiti u praksi, onda uzmite u obzir sljedeće: morate se prijaviti kao korisnik s neograničenim pravima i trebat će vam softverski alati za interaktivnu obradu sql upita (ako smo kada govorimo o mrežnoj bazi podataka, trebali biste razgovarati sa svojim administratorom baze podataka o dodjeli odgovarajućih prava). Ako nemate pristup bazi podataka preko sql-a, ne brinite: svi primjeri su vrlo jednostavni i možete ih shvatiti "na suho", bez odlaska na mašinu.

Da biste izvršili bilo koju radnju u sql-u, morate izvršiti izraz u sql jeziku. Postoji nekoliko tipova izraza, ali među njima se mogu razlikovati tri glavne grupe: ddl komande (jezik definicije podataka), dml komande (jezik za manipulaciju podacima) i alati za kontrolu podataka. Dakle, na neki način, sql kombinuje tri različita jezika.

Opis podataka Jezične komande

Počnimo s jednom od glavnih ddl naredbi - kreiranje tabele. Postoji nekoliko tipova tabela u sql-u, a glavne su dvije vrste: osnovne (osnovne) i selektivne (pregledi). Osnovne tabele su one koje se odnose na podatke iz stvarnog života; selektivne su „virtuelne“ tabele koje se kreiraju na osnovu informacija dobijenih iz osnovnih tabela; ali korisnicima obrasci izgledaju kao obične tabele. Naredba kreiranje tablice dizajnirana je za kreiranje osnovnih tablica.

U komandi za kreiranje tabele morate navesti ime tabele, navesti listu kolona i tipove podataka koje sadrže. Drugi opcioni elementi takođe mogu biti prisutni kao parametri, ali prvo pogledajmo samo osnovne parametre. Pokažimo najjednostavniji sintaktički oblik za ovu naredbu:

kreirati TableName(ColumnDataType) ;

create i table su sql ključne riječi; TableName, Column i DataType su formalni parametri, umjesto kojih korisnik svaki put unosi stvarne vrijednosti. Parametri Column i DataType su zatvoreni u zagradama. U sql-u se zagrade obično koriste za grupisanje pojedinačnih elemenata. U ovom slučaju vam omogućavaju da kombinujete definicije za kolonu. Završna tačka i zarez je separator naredbi. Mora prekinuti svaki izraz u sql jeziku.

Pogledajmo primjer. Recimo da trebate kreirati tabelu za pohranjivanje podataka o svim sastancima. Da biste to učinili, unesite naredbu u sql:

kreirati tabelu sastanci (appointment_date datum) ;

Nakon izvršenja ove komande, kreiraće se tabela sa imenom termini, u kojoj postoji jedna kolona, ​​datum_nastava, u koju se mogu upisati podaci tipa datum. Pošto još nisu uneseni podaci, broj redova u tabeli je nula (naredba kreiranje tabele samo definiše tabelu; stvarne vrednosti se unose komandom umetanja, o čemu će biti reči kasnije).

Parametri imenovanja i appointment_date nazivaju se identifikatori jer specificiraju imena za specifične objekte baze podataka, u ovom slučaju imena za tablicu i stupac, respektivno. Postoje dvije vrste identifikatora u sql-u: regularni i razgraničeni. Istaknuti identifikatori su zatvoreni u dvostruke navodnike i razlikuju velika i mala slova. Uobičajeni identifikatori se ne razlikuju nikakvim ograničenim znakovima, a njihovo pisanje nije osjetljivo na velika i mala slova. Ovaj članak koristi samo regularne identifikatore.

Znakovi koji se koriste za izradu identifikatora moraju zadovoljiti određena pravila. Uobičajeni identifikatori mogu koristiti samo slova (ne nužno latinična, već i druga pisma), brojeve i donju crtu. Identifikator ne smije sadržavati interpunkciju, razmake ili posebne znakove (#, @, % ili!); osim toga, ne može početi brojem ili donjom crtom. Možete koristiti zasebne sql ključne riječi za identifikatore, ali to se ne preporučuje. Identifikator je namijenjen za označavanje nekog objekta, tako da mora imati jedinstveno (unutar određenog konteksta) ime: ne možete kreirati tabelu sa imenom koje se već nalazi u bazi podataka; Ne možete imati kolone sa istim imenima u istoj tabeli. Usput, imajte na umu da su termini i termini ista imena za sql. Sama promjena velikih i malih slova ne može stvoriti novi identifikator.

Iako tabela može imati samo jednu kolonu, u praksi su obično potrebne tabele sa više kolona. Naredba za kreiranje takve tablice općenito izgleda ovako:

kreirati TableName(ColumnDataType[ ( , ColumnDataType )]) ;

Uglaste zagrade se koriste za označavanje opcionih elemenata, vitičaste zagrade sadrže elemente koji mogu predstavljati listu jednostrukih konstrukcija (prilikom unosa prave SQL naredbe, ni jedna ni druga zagrada se ne postavljaju). Ova sintaksa vam omogućava da navedete bilo koji broj kolona. Imajte na umu da drugom elementu prethodi zarez. Ako na listi postoji nekoliko parametara, oni su odvojeni jedan od drugog zarezima.

kreirajte tabelu appointments2 (datum_appointment_date, appointment_time time, description varchar (256)) ;

Ova naredba kreira tabelu termina2 (nova tabela mora imati drugačije ime, pošto je tabela sastanaka već prisutna u bazi podataka). Kao i prva tabela, ima kolonu appointment_date za snimanje datuma sastanaka; Osim toga, pojavila se kolona appointment_time koja bilježi vrijeme ovih sastanaka. Parametar opisa je tekstualni niz koji može sadržavati do 256 znakova. Ovaj parametar je specificiran kao varchar (skraćeno od karaktera varira) jer nije unaprijed poznato koliko prostora će biti potrebno za unos, ali je jasno da opis neće trajati više od 256 znakova. Prilikom opisivanja parametra tipa niza znakova (i nekih drugih tipova), naznačena je dužina parametra. Njegova vrijednost je navedena u zagradama desno od naziva tipa.

Možda ste primijetili da je u dva razmatrana primjera unos naredbe drugačije formatiran. Ako je u prvom slučaju naredba potpuno postavljena u jedan red, onda se u drugom nakon prve otvorene zagrade unos nastavlja u novom redu, a definicija svake sljedeće kolone počinje u novom redu. Nema posebnih zahtjeva za formatiranje zapisa u sql-u. Razbijanje zapisa u redove olakšava čitanje. Prilikom pisanja naredbi, sql jezik vam omogućava ne samo da razbijete naredbu u redove, već i da umetnete uvlake na početku redova i razmake između elemenata zapisa.

Sada kada znate osnovna pravila, pogledajmo složeniji primjer kreiranja tabele sa više kolona. Na početku članka prikazana je tabela zaposlenih. Sadrži sljedeće kolone: ​​prezime, ime, datum prijema, odjel, kategoriju i platu za godinu. Sljedeća sql naredba se koristi za definiranje ove tablice:

kreirajte tablice zaposlenih (znak prezimena (13) nije null, znak imena (10) nije null, datum_upošljavanja, znak podružnice (15), nivo_razreda smallint, plata decimalni (9, 2));

Tim se susreće sa nekoliko novih elemenata. Prije svega, postoji izraz koji nije null na kraju definicije stupaca prezime_name i ime_ime. Uz pomoć takvih struktura postavljaju se zahtjevi koji se moraju poštovati. U ovom slučaju je naznačeno da se polja prezimena i imena moraju popuniti prilikom unosa; Ove kolone ne možete ostaviti prazne (ovo je sasvim logično: kako možete identifikovati zaposlenog a da mu ne znate ime?).

Osim toga, primjer sadrži tri nova tipa podataka: karakter, smallint i decimalni. Do sada nismo mnogo pričali o tipovima. Iako sql nema relacijske domene, on ima skup osnovnih tipova podataka. Ove informacije se koriste prilikom dodjeljivanja memorije i poređenja vrijednosti; u određenoj mjeri sužava listu mogućih ulaznih vrijednosti, ali kontrola tipa u sql-u je manje stroga nego u drugim jezicima.

Svi tipovi podataka dostupni u sql-u mogu se podijeliti u šest grupa: nizovi znakova, tačne numeričke vrijednosti, približne numeričke vrijednosti, nizovi bitova, datumi i intervali. Naveli smo sve varijante, ali u ovom članku ćemo detaljno razmotriti samo neke od njih (na primjer, nizovi bitova nisu od posebnog interesa za obične korisnike).

Inače, ako ste mislili da su datum i vrijeme greška u kucanju, prevarili ste se. Ova grupa (datetime) uključuje većinu vremenskih tipova podataka koji se koriste u sql-u (parametri kao što su vremenski intervali su odvojeni u posebnu grupu). U prethodnom primjeru već smo naišli na dva tipa podataka iz grupe datum-vrijeme - datum i vrijeme.

Sljedeći tip podataka koji vam je već poznat je promjena znakova (ili samo varchar); pripada grupi znakovnih nizova. Ako se varchar koristi za pohranjivanje nizova promjenjive dužine, tada je tip char koji se susreće u trećem primjeru namijenjen za pohranjivanje nizova s ​​fiksnim brojem znakova. Na primjer, kolona prezime_name će sadržavati nizove od 13 znakova, bez obzira na stvarno unesena prezimena, bilo da se radi o poe ili penworth-chickering (u slučaju poe, preostalih 10 znakova će biti popunjeno razmacima).

Sa korisničke tačke gledišta, varchar i char imaju isto značenje. Zašto je bilo potrebno uvesti dvije vrste? Činjenica je da u praksi obično morate tražiti kompromis između performansi i uštede prostora na disku. U pravilu, korištenje stringova sa fiksnom dužinom daje određenu prednost u brzini pristupa, ali ako je dužina niza predugačka, prostor na disku se gubi. Ako u terminima2 rezervirate 256 znakova za svaki red komentara, onda se to može pokazati neracionalnim; najčešće će redovi biti znatno kraći. S druge strane, prezimena se također razlikuju po dužini, ali općenito zahtijevaju oko 13 znakova; u ovom slučaju gubici će biti minimalni. Dobro pravilo je: ako znate da dužina stringa malo varira ili je relativno mala, onda koristite char; u ostalim slučajevima - varchar.

Sljedeća dva nova tipa podataka, smallint i decimal, pripadaju grupi točnih numeričkih vrijednosti. smallint je skraćenica za mali cijeli broj. SQL također pruža cjelobrojni tip podataka. Prisustvo dva slična tipa u ovom slučaju objašnjava se razmatranjima uštede prostora. U našem primjeru, vrijednosti parametra grade_level mogu se predstaviti pomoću dvocifrenog broja, tako da se koristi tip smallint; međutim, u praksi nije uvijek poznato koje maksimalne vrijednosti parametri mogu imati. Ako takve informacije nema, onda koristite cijeli broj. Stvarna količina prostora dodijeljenog za pohranjivanje parametara smallint i integer, kao i odgovarajući raspon vrijednosti za ove parametre, specifičan je za svaku platformu.

Decimalni tip podataka, koji se obično koristi za finansijsko računovodstvo, omogućava vam da navedete obrazac sa željenim brojem decimalnih mesta. Budući da se ovaj tip koristi za preciznu numeričku notaciju, jamči preciznost prilikom izvođenja matematičkih operacija nad decimalnim podacima. Ako koristite tipove podataka iz grupe približnih numeričkih zapisa za decimalne vrijednosti, na primjer float (broj s pomičnim zarezom), to će dovesti do grešaka zaokruživanja, tako da ova opcija nije prikladna za finansijske proračune. Za definiranje parametara decimalnog tipa koristi se sljedeća notacija:

gdje je p broj decimalnih mjesta, d je broj decimalnih mjesta. Umjesto p unesite ukupan broj značajnih cifara u korištenim vrijednostima, a umjesto d upišite broj decimalnih mjesta.

Bočna traka "Kreiranje tabele" prikazuje potpuni sažetak naredbe za kreiranje tabele. Sadrži nove elemente i prikazuje format za sve razmatrane tipove podataka (U principu postoje i drugi tipovi podataka, ali ih još ne razmatramo).

U početku se može činiti da je sintaksa sql komandi previše komplicirana. Ali to možete lako razumjeti ako pažljivo proučite gornje primjere. Na dijagramu se pojavio dodatni element - okomita linija; služi za razlikovanje između alternativnih dizajna. Drugim riječima, kada definirate svaki stupac, morate odabrati odgovarajući tip podataka (kao što se sjećate, opcionalni parametri su zatvoreni u uglaste zagrade, a konstrukcije koje se mogu ponoviti mnogo puta zatvorene su u vitičaste zagrade; ovi posebni znakovi nisu upisani u pravim sql komandama). Prvi dio dijagrama prikazuje pune nazive za tipove podataka, drugi sadrži njihove skraćene nazive; u praksi se može koristiti bilo koji od njih.

Prvi dio članka je završen. Drugi će biti posvećen proučavanju DML komandi insert, select, update i delete. Uslovi uzorkovanja podataka, operatori poređenja i logički operatori, upotreba nul vrednosti i ternarna logika će takođe biti pokriveni.

Kreiranje tabele. Sintaksa komande za kreiranje tabele je sledeća: opcioni parametri su naznačeni u uglastim zagradama, a strukture koje se ponavljaju su naznačene u vitičastim zagradama.

kreirajte tablicu tablice (znak stupca (dužina) [ograničenje] | karakter varira (dužina) [ograničenje] | datum [ograničenje] | vrijeme [ograničenje] | cijeli broj [ograničenje] | smallint [ograničenje] | decimalni (preciznost, decimalna mjesta) [ ograničenje ] | float (preciznost) [ ograničenje ] [( , kolona char (dužina) [ ograničenje ] | varchar (dužina) [ ograničenje ] | datum [ ograničenje ] | vrijeme [ ograničenje ] | int [ ograničenje ] | smallint [ ograničenje ] | dec (preciznost, decimalna mjesta) [ograničenje] | float (preciznost) [ograničenje] )]);

Tajna sql imena

Početkom 1970-ih. ibm je počeo implementirati model relacijske baze podataka koji je predložio dr. Codd. Donald Chamberlin i grupa drugih u Jedinici za napredna istraživanja stvorili su prototip jezika koji se zove strukturirani engleski jezik upita ili jednostavno nastavak. Nakon toga je proširen i dorađen. Nova verzija koju je predložio IBM nazvana je sequel/2. Korišten je kao programsko sučelje (api) za dizajn prvog ibm-ovog sistema relacijske baze podataka, system/r. Iz razloga povezanih s pravnim nijansama, ibm je odlučio promijeniti ime: umjesto sequel/2, koristiti sql (strukturirani jezik upita). Ova skraćenica se često izgovara kao "see-ku-el".

Postoje značajne razlike između ranih prototipova nastavka i sql standarda koji je sada prepoznat u raznim organizacijama. Jim Melton, koji je pripremio sql-92 standard, čak je izjavio da mnogi ljudi griješe misleći da riječ "strukturiran" ispravno odražava specifičnosti ovog jezika (jim melton i alan r. simon "razumijevanje novog sql-a: potpuni vodič .” san francisko: morgan kaufmann, 1993. isbn: 1-55860-245-3). Dakle, u stvari, sql je samo ime, niz slova s-q-l i ništa više.

Dobro loše

Najbolji članci na ovu temu