Binabago lamang ang ilang mga row. SAAN - anong data ang ipinapakita

Kapag kumukuha ng data, maaaring maging mahalaga na makuha ito sa isang partikular na ordered form. Ang pag-uuri ay maaaring gawin ng anumang mga patlang na may anumang uri ng data. Ito ay maaaring isang pataas o pababang pag-uuri para sa mga numeric na field. Para sa mga patlang ng character (teksto), ito ay maaaring pagbukud-bukurin sa alpabetikong pagkakasunud-sunod, bagama't sa esensya ay pinagsunod-sunod din ito sa pataas o pababang pagkakasunud-sunod. Maaari rin itong isagawa sa anumang direksyon - mula A hanggang Z, at vice versa mula Z hanggang A.

Ang kakanyahan ng proseso ng pag-uuri ay upang bawasan ang pagkakasunud-sunod sa isang tiyak na pagkakasunud-sunod. Maaari kang matuto nang higit pa tungkol sa pag-uuri sa artikulong "Pag-uuri ng mga Algorithm."

2, 4, 1, 5, 9

dapat magresulta sa isang nakaayos na pagkakasunud-sunod:

1, 2, 4, 5, 6

Gayundin, kapag nag-uuri sa pataas na pagkakasunud-sunod ng mga halaga ng string:

Ivanov Ivan, Petrov Petr, Ivanov Andrey

ang resulta ay dapat na:

Ivanov Andrey, Ivanov Ivan, Petrov Petrov

Narito ang linya na "Andrey Ivanov" ay lumipat sa simula, dahil ang paghahambing ng mga string ay isinasagawa ng karakter sa pamamagitan ng karakter. Ang parehong mga linya ay nagsisimula sa parehong mga character na "Ivanov". Dahil ang simbolo na "A" sa salitang "Andrey" ay mas nauna sa alpabeto kaysa sa simbolo na "I" sa salitang "Ivan," ang linyang ito ay ilalagay nang mas maaga.

Pag-uuri sa isang SQL Query

Upang maisagawa ang pag-uuri, kailangan mong idagdag ang ORDER BY command sa query string. Pagkatapos ng utos na ito, ang patlang kung saan isinasagawa ang pag-uuri.

Para sa mga halimbawa, ginagamit namin ang mga kalakal sa mesa:

num
(numero ng produkto)
pamagat
(Pangalan)
presyo
(presyo)
1 Mandarin50
2 Pakwan120
3 Pinya80
4 saging40

Ang data dito ay nakaayos na ayon sa column na "num". Ngayon, bumuo tayo ng query na magpapakita ng talahanayan na may mga produkto na pinagsunod-sunod sa alpabetikong pagkakasunud-sunod:

PUMILI * MULA sa mga kalakal ORDER BY title

SELECT * FROM goods – tumutukoy upang piliin ang lahat ng field mula sa goods table;

ORDER BY – utos ng pag-uuri;

pamagat – ang column kung saan isasagawa ang pag-uuri.

Ang resulta ng pagpapatupad ng naturang kahilingan ay ang mga sumusunod:

num pamagat presyo
3 Pinya80
2 Pakwan120
4 saging40
1 Mandarin50

Maaari mo ring pag-uri-uriin ang alinman sa mga field ng talahanayan.

Pagbukud-bukurin ang direksyon

Bilang default, ang ORDER BY command ay nag-uuri sa pataas na pagkakasunud-sunod. Upang manu-manong kontrolin ang direksyon ng pag-uuri, tukuyin ang ASC (pataas) o DESC (pababang) keyword pagkatapos ng pangalan ng column. Kaya, upang ipakita ang aming talahanayan sa pababang pagkakasunud-sunod ng mga presyo, kailangan mong itanong ang query tulad nito:

PUMILI * MULA sa mga kalakal ORDER BY DESC ng presyo

Pagbukud-bukurin ayon sa pataas na presyo ay magiging:

PUMILI * MULA sa mga kalakal ORDER NG presyo ASC

Pag-uuri ayon sa maraming field

Pinapayagan ng SQL ang pag-uuri ayon sa maraming mga patlang nang sabay-sabay. Upang gawin ito, pagkatapos ng ORDER BY command, ang mga kinakailangang field ay ipinahiwatig na pinaghihiwalay ng mga kuwit. Ang pagkakasunud-sunod ng resulta ng query ay iko-configure sa parehong pagkakasunud-sunod kung saan tinukoy ang mga field ng pag-uuri.

hanay1 hanay2 hanay3
3 1 c
1 3 c
2 2 b
2 1 b
1 2 a
1 3 a
3 4 a

Pagbukud-bukurin natin ang talahanayan ayon sa mga sumusunod na patakaran:

PUMILI * MULA sa mytable ORDER NG column1 ASC, column2 DESC, column3 ASC

Yung. ang unang hanay ay pataas, ang pangalawa ay pababa, ang pangatlo ay muling pataas. Ang query ay mag-uutos ng mga hilera ayon sa unang hanay, pagkatapos, nang hindi nilalabag ang unang panuntunan, sa pamamagitan ng pangalawang hanay. Pagkatapos, gayundin, nang hindi lumalabag sa umiiral na mga patakaran, ayon sa pangatlo. Ang resulta ay isang set ng data tulad nito:

hanay1 hanay2 hanay3
1 3 a
1 3 c
1 2 a
2 2 b
2 1 b
3 1 a
3 1 c

Pagkakasunod-sunod ng utos ng ORDER BY sa isang query

Ang pag-uuri ng mga hilera ay madalas na isinasagawa kasama ng isang kundisyon para sa pagpili ng data. Ang ORDER BY command ay inilalagay pagkatapos ng WHERE selection condition. Halimbawa, pipili kami ng mga produkto na may presyong mas mababa sa 100 rubles, pinagsunod-sunod ayon sa pangalan sa pagkakasunud-sunod ng alpabeto:

PUMILI * MULA sa mga kalakal SAAN ang presyo 100 ORDER BY price ASC

Ang kabanatang ito ay nagpapakilala ng mga utos na kumokontrol sa mga halagang ipinakita sa isang talahanayan. Kapag nakumpleto mo ang kabanatang ito, magagawa mong maglagay ng mga row sa isang table, tanggalin ang mga ito, at baguhin ang mga indibidwal na value na kinakatawan sa bawat row. Ang paggamit ng mga query sa pagbuo ay ipapakita buong grupo

mga hilera na ilalagay, at kung paano magagamit ang isang panaguri upang kontrolin ang mga pagbabago sa mga halaga at pagtanggal ng mga hilera. Ang materyal sa kabanatang ito ay bumubuo ng isang kumpletong kalipunan ng kaalaman na nagpapakita kung paano lumikha at mamahala ng impormasyon sa isang database.

Ang mas makapangyarihang paraan ng pagdidisenyo ng mga panaguri ay tatalakayin sa susunod na kabanata.

DML LANGUAGE MODIFICATION COMMAND

Ang mga halaga ay maaaring ipasok at alisin mula sa mga patlang gamit ang tatlong DML (Data Manipulation Language) command: INSERT, UPDATE, DELETE. Huwag malito, lahat sila ay nabanggit kanina sa SQL bilang mga utos ng pagbabago. PAGPASOK NG MGA HALAGA

Ang talahanayan (sa aming kaso, Salespeople) ay dapat na dating tinukoy sa CREATE TABLE command (tingnan ang Kabanata 17), at ang bawat may bilang na halaga sa value clause ay dapat tumugma sa uri ng data ng column kung saan ito ipinasok. Sa ANSI, ang mga halagang ito ay hindi maaaring bumuo ng mga expression, na nangangahulugan na ang 3 ay magagamit, ngunit ang expression na 2 + 1 ay hindi. Ang mga halaga, siyempre, ay ipinasok sa talahanayan sa pagkakasunud-sunod ng pangalan, kaya ang unang halaga na may pangalan ay awtomatikong napupunta sa column 1, ang pangalawa sa column 2, at iba pa.

PAGSASOK NG NULL POINTERS

Kung kailangan mong maglagay ng null value, ilalagay mo ito tulad ng isang normal na value. Ipagpalagay natin na wala pang kasarian sa lungsod para kay Mr. Peel. Maaari kang magpasok ng string na may value=NULL sa field na ito tulad nito: INSERT INTO Salespeople VALUES (1001, "Peel", NULL, .12); Dahil ang NULL ay isang espesyal na token at hindi lamang isang halaga ng character, hindi ito kasama sa mga solong panipi.

PAGBIBIGAY NG PANGALAN NG COLUMN NA ISASOK

Maaari mo ring tukuyin ang mga column kung saan mo gustong ipasok ang halaga ng pangalan. Ito ay nagpapahintulot sa iyo na magpasok ng mga pangalan sa anumang pagkakasunud-sunod. Sabihin nating kinuha mo ang mga halaga para sa talahanayan ng Mga Customer mula sa isang ulat ng printer na naglalagay sa kanila sa ganitong pagkakasunud-sunod: lungsod, cname, at cnum, at upang gawing simple ang mga bagay, gusto mong ilagay ang mga halaga sa parehong pagkakasunud-sunod: INSERT INTO Mga customer (lungsod, cname, cnum ) VALUES ("London", "Honman", 2001); Pakitandaan na ang rating at snum column ay nawawala. Nangangahulugan ito na ang mga linyang ito ay awtomatikong nakatakda sa kanilang default na halaga. Ang default na halaga ay maaaring NULL o isa pang halaga na tinukoy bilang default. Kung ang isang hadlang ay nagbabawal sa paggamit ng NULL sa kolum na ito, at ang column na ito ay hindi nakatakda bilang default, ang column na ito ay dapat bigyan ng value para sa anumang INSERT command na naaangkop sa table (tingnan ang Kabanata 18 para sa impormasyon sa NULL at "default" na mga paghihigpit).

PAGSASOK NG MGA RESULTA NG QUERY

Maaari mo ring gamitin ang INSERT na utos upang makakuha o pumili ng mga halaga mula sa isang talahanayan at ilagay ang mga ito sa isa pa upang magamit sa isang query. Upang gawin ito, palitan mo lang ang VALUES clause (mula sa nakaraang halimbawa) ng kaukulang query: INSERT INTO Londonstaff SELECT * FROM Salespeople WHERE city = "London"; Dito, ang lahat ng mga halaga na ginawa ng query ay pinili - iyon ay, lahat ng mga hilera mula sa talahanayan ng Mga Nagbebenta na may mga halaga ng lungsod = "London" - at inilagay sa isang talahanayan na tinatawag na Londonstaff. Para gumana ito, dapat matugunan ng talahanayan ng Londonstaff ang mga sumusunod na kundisyon:

* Dapat ay nalikha na ito gamit ang utos na CREATE TABLE.

* Dapat itong may apat na column na tumutugma sa talahanayan

Mga nagbebenta sa mga tuntunin ng uri ng data; ibig sabihin, ang una, pangalawa, at iba pa, ang mga column ng bawat talahanayan ay dapat na may parehong uri ng data (at hindi dapat magkapareho ang mga pangalan ng mga ito).

Pangkalahatang tuntunin ang katotohanan na ang mga inilagay na column ng talahanayan ay dapat tumugma sa mga column na output ng subquery, sa kasong ito, para sa buong talahanayan ng Mga Nagbebenta. Ang Londonstaff ay isa na ngayong independiyenteng talahanayan na nakatanggap ng ilang halaga mula sa talahanayan ng Salespeople. Kung ang mga halaga sa talahanayan ng Mga Nagbebenta ay biglang binago, ito ay walang epekto sa talahanayan ng Londonstaff (bagaman maaari kang lumikha ng gayong epekto gamit ang VIEW na inilarawan sa Kabanata 20). Dahil ang alinman sa query o isang INSERT na command ay maaaring tumukoy ng mga column ayon sa pangalan, maaari mong, kung gusto mo, ilipat lamang ang mga napiling column at muling isaayos lamang ang mga column na iyong pinili.

Sabihin nating, halimbawa, na nagpasya kang lumikha ng bagong talahanayan na tinatawag na Daytotals na susubaybayan lang ang kabuuang dolyar ng mga halaga ng pagbili na nakaayos para sa bawat araw. Maaari mong ipasok ang data na ito nang hiwalay sa talahanayan ng Mga Order, ngunit dapat mo munang punan ang talahanayan ng Mga Daytotal ng impormasyong naunang ibinigay sa talahanayan ng Mga Order.

Ang pag-unawa na ang talahanayan ng Mga Order ay sumasaklaw sa huli taon ng pananalapi sa halip na ilang araw lamang tulad ng sa aming halimbawa, makikita mo ang pakinabang ng paggamit ng sumusunod na INSERT clause sa pagbibilang at pagpasok ng mga halaga INSERT INTO Daytotals (petsa, kabuuan) SELECT odate, SUM (amt) FROM Orders GROUP BY odate; Tandaan na, gaya ng iminungkahing mas maaga, ang mga pangalan ng column ng talahanayan ng Mga Order at talahanayan ng Daytotal ay hindi kailangang magkapareho. Gayundin, kung ang petsa ng pagbili at kabuuang dami ay ang tanging mga column sa talahanayan, at ang mga ito ay nasa sa ganitong pagkakasunud-sunod, ang kanilang mga pangalan ay maaaring hindi kasama sa output dahil sa kanilang maliwanag na pagiging simple.

PAGTATAGAL NG MGA HANAY MULA SA MGA TABLE

Maaari mong tanggalin ang mga hilera mula sa isang talahanayan gamit ang utos ng pagbabago - DELETE. Maaari lang nitong tanggalin ang mga inilagay na row, hindi ang mga indibidwal na value ng field, kaya opsyonal o hindi available ang field parameter. Upang tanggalin ang buong nilalaman ng talahanayan ng Salespeople, maaari mong ilagay ang sumusunod na kundisyon: DELETE MULA SA Salespeople; Ngayon na ang talahanayan ay walang laman, maaari itong permanenteng i-drop gamit ang DROP TABLE na utos (ito ay ipinaliwanag sa Kabanata 17). Karaniwan, kailangan mo lang magtanggal ng ilang partikular na row mula sa isang table. Upang matukoy kung aling mga row ang tatanggalin, gumamit ka ng predicate, tulad ng ginawa mo para sa mga query. Halimbawa, upang alisin ang salesperson na si Axelrod mula sa talahanayan, maaari mong ilagay ang DELETE FROM Salespeople WHERE snum = 1003; Ginamit namin ang snum field sa halip na ang sname field dahil ito ang pinakamahusay na taktika kapag gumagamit ng mga pangunahing key kapag gusto mong isa at isang row lang ang maapektuhan. Para sa iyo - ito ay katulad ng pagkilos ng pangunahing key. Siyempre, maaari mo ring gamitin ang DELETE na may predicate na pumipili ng isang pangkat ng mga row, tulad ng ipinapakita sa halimbawang ito: DELETE FROM Salespeople WHERE city = "London";

PAGBABAGO NG MGA HALAGA NG LARANGAN

Ngayon na maaari mong ipasok at tanggalin ang mga hilera ng talahanayan, dapat mong matutunan kung paano baguhin ang ilan o lahat ng mga halaga sa isang umiiral na hilera. Ginagawa ito gamit ang utos na UPDATE. Ang command na ito ay naglalaman ng isang UPDATE clause na tumutukoy sa table na gagamitin at isang SET clause na tumutukoy sa pagbabagong gagawin sa isang partikular na column. Halimbawa, upang baguhin ang mga rating ng lahat ng mga customer sa 200, maaari mong ilagay ang UPDATE Customers SET rating = 200;

PAGBABAGO LAMANG SA MGA TIYAK NA HANAY

Siyempre, hindi mo palaging nais na tukuyin ang lahat ng mga hilera ng isang talahanayan upang baguhin ang isang solong halaga, kaya ang UPDATE, tulad ng DELETE, ay maaaring kumuha ng mga predicate. Narito kung paano, halimbawa, maaari kang gumawa ng parehong pagbabago para sa lahat ng mga customer ng nagbebenta ng Peel (may snum=1001): I-UPDATE ang rating ng mga Customer SET = 200 WHERE snum = 1001;

I-UPDATE ANG COMMAND PARA SA MARAMING COLUMNS

Gayunpaman, hindi mo dapat limitahan ang iyong sarili sa pagbabago ng isang column gamit ang I-UPDATE ang mga utos. Maaaring italaga ng SET clause ang anumang bilang ng mga column, na pinaghihiwalay ng mga kuwit. Ang lahat ng mga takdang-aralin sa itaas ay maaaring gawin sa anumang hilera ng talahanayan, ngunit sa isa-isa lang. Sabihin nating nagretiro na ang isang salesperson ng Motika at gusto naming italaga ang kanyang numero sa isang bagong salesperson: I-UPDATE ang Salespeople SET sname = "Gibson",city = "Boston",comm = .10 WHERE snum = 1004; Ililipat ng team na ito sa bagong dealer ng Gibson ang lahat ng kasalukuyang customer ng dating dealer ng Motika at ang mga order habang pinagsama ang mga ito para sa Motika gamit ang snum. Gayunpaman, hindi mo maaaring baguhin ang maraming mga talahanayan nang sabay-sabay sa isang utos, sa isang bahagi dahil hindi mo ma-prefix ang mga talahanayan na may mga column na binago ng sugnay na SET. Sa madaling salita, hindi mo masasabi ang "SET Salespeople.sname = Gibson" sa isang UPDATE command, maaari mo lang sabihin ang "SET sname = Gibson".

PAGGAMIT NG MGA EXPRESSION PARA SA PAGBABAGO

Maaari kang gumamit ng mga scalar expression sa SET clause ng isang UPDATE command, gayunpaman, sa pamamagitan ng pagsasama nito sa gender expression na babaguhin. Iba ito sa VALUES clause ng INSERT command, kung saan hindi magagamit ang mga expression; Ang pag-aari na ito ng mga scalar expression ay isang napaka-kapaki-pakinabang na tampok. Sabihin nating nagpasya kang doblehin ang mga komisyon ng lahat ng iyong mga salespeople. Maaari mong gamitin ang sumusunod na expression: I-UPDATE ang mga Salespeople SET comm = comm * 2; Sa tuwing sumasangguni ka sa isang tinukoy na halaga ng column sa isang sugnay na SET, ang resultang halaga ay maaaring magresulta mula sa kasalukuyang linya, unang gagawin ang ilang pagbabago dito gamit ang UPDATE na utos. Naturally, maaari mong pagsamahin ang mga feature na ito at sabihing - doblehin ang komisyon sa lahat ng nagbebenta sa London, gamit ang pangungusap na ito: I-UPDATE Ang mga Salespeople SET comm = comm * 2 WHERE city = "London";

PAGBABAGO NG NULL NA HALAGA

Ang SET clause ay hindi isang panaguri. Maaari siyang magpasok ng mga walang laman na NULL na halaga tulad ng pagpasok niya ng mga halaga nang hindi gumagamit ng anumang espesyal na syntax (tulad ng IS NULL). Kaya kung gusto mong itakda ang lahat ng rating ng customer sa London sa NULL, maaari mong ilagay ang sumusunod na pahayag: I-UPDATE ang mga customer SET rating = NULL WHERE city = "London"; na magre-reset ng lahat ng rating ng customer sa London.

RESUME

Kabisado mo na ngayon ang sining ng pamamahala sa mga nilalaman ng iyong database gamit ang tatlong simpleng command: INSERT - ginagamit upang magpasok ng mga row sa database; DELETE - upang tanggalin ang mga ito; MGA SANGGUNIAN - upang baguhin ang mga halaga sa nakapasok na mga hilera. Natuto kang gumamit ng panaguri na may mga utos na UPDATE at DELETE upang matukoy kung aling mga hilera ang maaapektuhan ng utos. Siyempre, ang mga predicate na tulad nito ay hindi makabuluhan sa INSERT, dahil ang row na pinag-uusapan ay hindi umiiral sa talahanayan hanggang sa makumpleto ang INSERT command. Gayunpaman, maaari mong gamitin ang INSERT query para ilagay ang lahat ng rowset sa isang table nang sabay-sabay. Bukod dito, magagawa mo ito sa mga column sa anumang pagkakasunud-sunod.

Natutunan mo na ang mga default na halaga ay maaaring ilagay sa mga column maliban kung tahasan mong itinakda ang halaga. Nakita mo na rin ba ang gamit

karaniwang halaga default, na NULL. Gayundin, napagtanto mo na ang UPDATE ay maaaring gumamit ng value expression samantalang ang INSERT ay hindi. Ang susunod na kabanata ay magpapalawak ng iyong kaalaman sa pamamagitan ng pagpapakita sa iyo kung paano gumamit ng mga subquery sa mga utos na ito. Ang mga subquery na ito ay katulad ng mga pamilyar na sa iyo, ngunit may ilang mga espesyal na implikasyon at limitasyon kapag ang mga subquery ay ginagamit sa mga utos ng DML, na tatalakayin natin sa Kabanata 16.

GUMAGAWA SA SQL

1. Sumulat ng isang utos na maglalagay

sumusunod na mga halaga

, sa kanilang pagkakasunud-sunod sa ibaba, sa talahanayan ng Mga Nagbebenta: lungsod - San Jose, pangalan - Bianco, comm - NULL, cnum - 1100. 2. Sumulat ng isang utos na magtatanggal ng lahat ng mga order ng customer ng Clemens mula sa talahanayan ng Mga Order.

3. Sumulat ng command na magtataas ng 100 rating ng lahat ng customer sa Rome.

4. Umalis sa kumpanya ang nagbebenta ng Serres. Muling italaga ang kanyang mga customer sa nagbebenta ng Motika. Ang pangunahing gawain kapag nagdidisenyo ng mga relational database ay ang pagbuo ng pinakamainam na relasyon.(procedural na mga wika) at relational calculus ng mga tuple at domain (declarative na wika). Ang wikang SQL ay batay sa tuple calculus, at ang QBE na wika ay batay sa domain calculus.

Tingnan natin ang mga kakayahan ng mga wikang SQL at QBE. Ang kanilang praktikal na paggamit ay inilarawan sa Kabanata. 15.

wika ng SQL

Maraming variant at dialect para sa SQL. Dito namin binalangkas ang mga pangunahing probisyon ng pangunahing bersyon: higit pa detalyadong paglalarawan wika ay ibinigay sa .

Ilustrasyon wika ng SQL Gamitin natin ang halimbawa ng database ng "Supply" na ipinakita sa talahanayan. 5.3–5.5. Para dito, ang Access connection diagram ay ipinapakita sa Fig. 5.2.

Talahanayan 5.3

"Mga nagbebenta"

Talahanayan 5.4

"Mga customer"

St. Petersburg

Talahanayan 5.5

"Mga order"

Mga pangalan ng patlang ng talahanayan

Talahanayan ng "Mga Nagbebenta":

pnom – natatanging numero ng nagbebenta, pangunahing susi;

pangalan - ang pangalan ng nagbebenta;

lungsod - ang lungsod kung saan matatagpuan ang nagbebenta;

comm – komisyon ng nagbebenta.

Talahanayan "Mga Customer":

alam – natatanging numero ng customer, pangunahing susi;

pnom – numero ng nagbebenta, foreign key.

Talahanayan na "Mga Order":

prnom – natatanging numero ng pagkakasunud-sunod, pangunahing susi;

sumpr – halaga (yen) ng order;

datpr – petsa ng pagtanggap ng order;

znom – numero ng customer na gumagawa ng order, foreign key;

pm – numero ng nagbebenta na nagbebenta ng order, foreign key.

kanin. 5.2. Diagram ng koneksyon

May mga static at dynamic na wika SQL programming. SA static na wika malinaw na naitala ang mga kahulugan ng lahat ng bagay. SA dinamikong wika SQL sa halip na mga halaga ng bagay, ginagamit ang mga parameter, ang data kung saan maaaring interactive na ipinasok ng gumagamit, o hiniram sa panahon ng pagpapatupad ng programa mula sa iba pang mga talahanayan (mga database).

Static programming language SQL

Sa wikang SQL, posibleng makilala ang tatlong pangunahing grupo ng mga operasyon: paglikha (CREATE), update (INSERT, UPDATE, DELETE), query (SELECT). meron sila sumusunod sa mga pamantayan, kung saan ginagamit ang sumusunod na notasyon: | – lahat ng nauuna sa simbolo ay maaaring mapalitan ng sumusunod dito; () – isang solong yunit para sa paglalapat ng simbolo; - opsyonal na pagpapahayag; ... – inuulit arbitrary na numero minsan; – inulit ng di-makatwirang bilang ng beses, ngunit ang anumang pangyayari ay pinaghihiwalay ng kuwit.

(5.1)

Ang mga uri ng data ay maaaring "INTEGER, CHARACTER, DECIMAL, NUMERIC, SMALLINT, FLOAT, REAL, PRECISION, LONG, VARCHAR, DATE, TIME. Ang huling apat na uri ay hindi kasama sa SQL standard, ngunit maaaring suportado nito.

Ang uri ng column (at uri ng talahanayan) ay maaaring: NATATANGI, PANGUNAHING SUSI, CHECK<предикат>,DEFAULT=<список полей>, SANGGUNIAN<имя таблицы> [(<имя столбца>.,...)|.

(5.3)

(5.4)

May tatlong uri ng SQL: interactive, nested at inline.

Ang Interactive SQL ay ginagamit upang direktang tumakbo sa database upang makagawa ng output para magamit ng customer.

Ang naka-embed na SQL ay binubuo ng mga SQL command na inilagay sa loob ng mga program na karaniwang nakasulat sa ibang wika (tulad ng COBOL o Pascal). Ginagawa nitong mas malakas at epektibo ang mga naturang programa.

Isasaalang-alang namin pangunahin (sa kawalan ng mga sanggunian) interactive na wika.

♦ INTERACTIVE SQL LANGUAGE

Posibleng i-highlight ang:

  • Ang DDL (Data Description Language) ay isang schema description language at sa ANSI ito ay binubuo ng mga command na lumilikha ng mga bagay (table, index, view) sa database;
  • Ang DML (Data Manipulation Language) ay isang hanay ng mga utos na tumutukoy kung anong mga halaga ang ipinakita sa mga talahanayan sa anumang oras;
  • Ang DCD (Data Control Language) ay binubuo ng mga tool na tumutukoy sa pahintulot para sa isang user na magsagawa ng ilang partikular na pagkilos.

Sa kaibuturan nito, ang wikang SQL ay isang partikular na declarative query language, at samakatuwid ang pinakamalaking bilang ng mga kumbinasyon ay umiiral para sa PUMILI ng mga pamamaraan. Gayunpaman, mas maginhawang ayusin ang mga utos ayon sa teknolohikal na cycle ng pagtatrabaho sa database:

  • 1) paglikha ng isang database - mga istruktura ng talahanayan, paglikha ng mga view, pagpuno ng database ng data, pagtiyak ng integridad, sistema ng pag-access (mga pahintulot), diksyunaryo ng data, multi-user mode;
  • 2) gamit ang database - query in iba't ibang anyo(kabilang ang pag-update).

Paglikha ng isang database

Istraktura ng talahanayan. Ang mga talahanayan (walang laman) ay nilikha gamit ang CREATE TABLE command (expression (5.1)).

(5.5)

Ang command na CREATE TABLE ay karaniwang tumutukoy sa pangalan ng talahanayan, isang hanay ng mga pangalan ng column na tinukoy sa isang partikular na pagkakasunud-sunod, mga uri ng data, at mga laki ng column.

Ang mga talahanayan ay pagmamay-ari ng user na lumikha sa kanila, at ang mga pangalan ng lahat ng mga talahanayan na pagmamay-ari ni sa user na ito, ay dapat na iba sa isa't isa, pati na rin ang mga pangalan ng lahat ng column sa loob ng isang partikular na talahanayan. Ang pagkakasunud-sunod ng mga column sa isang talahanayan ay tinutukoy ng pagkakasunud-sunod kung saan nakalista ang mga ito.

Binibigyang-daan ka ng SQL na lumikha ng mga pansamantalang talahanayan, ang "habambuhay" kung saan ay ang sesyon ng database (ang oras mula sa pagbubukas hanggang sa pagsasara ng database).

Ang isang talahanayan ay maaaring maging pandaigdigan, iyon ay, naa-access sa buong application program na lumikha nito:

GUMAWA NG GLOBAL TEMPORARY TABLE Mga Nagbebenta

(bilang integer,

pangalan char(10),

lungsod char (10),

comm decimal);

Maaari itong maging lokal, naa-access lamang sa module ng programa kung saan ito nilikha:

GUMAWA NG LOKAL NA PANSAMANG TALA NA Vendor

(bilang integer,

pangalan char(10),

lungsod char (10),

comm decimal);

Ang pagpapalit ng talahanayan pagkatapos itong magawa ay ginagawa gamit ang utos na ALTER TABLE. Kadalasan, nagdaragdag ito ng mga column sa isang table. Kung minsan, maaari itong mag-alis o mag-resize ng mga column, at sa ilang mga program, magdagdag o mag-alis ng mga hadlang. Upang magdagdag ng column sa isang talahanayan, gamitin ang format:

ALTER TABLE<имя таблицы>ADD<имя поля>

<тип данных> <размер>;

Huling idaragdag ang column at may NULL na halaga para sa lahat ng row sa table.

Ang pag-alis ay isinasagawa sa pamamagitan ng utos

DROP TABLE<имя таблицы>;

Ikaw dapat ang lumikha ng talahanayan upang ma-delete ito.

Ang mga index ay ginawa at tinatanggal sa parehong paraan.

Ang pangunahing talahanayan (5.5) ay ipinakita sa pinakasimpleng anyo nito at higit pang bubuo: ang ibang mga talahanayan ay gagawin mamaya. Ngayon tingnan lang natin ang paggawa ng view.

Istraktura at nilalaman ng mga species. Ang talahanayan na iyong nilikha ay tinatawag na base table. Maaari kang lumikha ng view (View) - mga talahanayan na ang mga nilalaman ay kinuha o hinango mula sa iba pang mga talahanayan. Ang view ay nilikha gamit ang CREATE VIEW command:

GUMAWA NG VIEW Moscow1

MULA sa Mga Nagbebenta

SAAN lungsod = "Moscow";

Moscow 1 - pagganap (tingnan). Ito ay ginagamit para sa mga layuning pangseguridad ng impormasyon at kinakalkula sa bawat oras na ang isang kahilingan ay ginawa at samakatuwid ang data ay awtomatikong ina-update. Maaari itong magamit tulad ng anumang iba pang base table, ngunit may mga detalye sa mga pamamaraan ng pag-access at pag-update.

Ang isang malaking bilang ng mga uri ng view ay read-only. Nangangahulugan ito na maaari silang i-query, ngunit hindi sila maaapektuhan ng mga utos ng pagbabago.

Mayroong ilang mga uri ng mga query na hindi pinapayagan sa mga kahulugan ng view: ang isang view ay dapat na nakabatay sa isang query; UNION at UNION LAHAT, pinagsama-samang mga function, DISTINCT sa kahulugan, ang mga kalkuladong field ay hindi pinapayagan kapag nagtatrabaho sa mga view; Ang ORDER BY ay hindi kailanman ginagamit sa pagtukoy ng mga view.

Ang pag-alis ng mga view ay ginagawa ng (may-ari nito) ng utos

DROP VIEW<имя вида>.

Pagpuno ng database ng data. Ang mga halaga ay maaaring ipasok at alisin mula sa mga patlang gamit ang DML (Data Manipulation Language) na mga utos na INSERT, DELETE - mga expression (5.2) at (5.3). Kaya, halimbawa, upang maglagay ng row sa talahanayan ng Salespeople, maaari mong gamitin ang sumusunod na kundisyon;

INSERT SA Mga Nagbebenta

VALUES(", "Strokov", "Moscow", .12);

Maaari ka ring magpasok ng walang laman na halaga (NULL).

Posibleng tukuyin ang mga column ng talahanayan sa anumang pagkakasunud-sunod, halimbawa,

INSERT INTO Customers (lungsod, pangalan, numero)

MGA HALAGA ("Moscow", "Ivanov", 2001);

Ang mga row na naipasok nang hindi sinasadya ay tinanggal gamit ang DELETE command. Maaari lang nitong tanggalin ang mga inilagay na row, hindi ang mga indibidwal na value ng field, kaya opsyonal o hindi available ang field parameter. Upang tanggalin ang buong nilalaman ng talahanayang "Mga Nagbebenta," dapat mong ilagay ang:

TANGGALIN MULA SA Mga Nagbebenta;

Wala nang laman ang talahanayan at maaaring permanenteng tanggalin gamit ang utos na DROP TABLE. Kadalasan gusto mo lang mag-alis ng ilang partikular na row mula sa isang table, na ginagawa sa pamamagitan ng paggamit ng predicate. Halimbawa, upang alisin ang data ng salesperson Kozlov mula sa talahanayan ng Salespeople, maaari kang magpasok

TANGGALIN MULA SA Mga Nagbebenta

SAAN pnom = 1003;

Ang INSERT at DELETE command kasama ang UPDATE command ay ginagamit sa proseso ng pag-update kapag nagpapatakbo ng database.

Mag-ehersisyo (seguridad) integridad. Isa itong variation ng CREATE TABLE command na nagbibigay-daan sa iyong magtakda ng mga paghihigpit sa mga talahanayan.

Ang isang hadlang sa hanay ay ipinapasok sa dulo ng pangalan ng hanay, pagkatapos ng uri ng data at bago ang kuwit. Ang mga hadlang sa talahanayan ay inilalagay sa dulo ng pangalan ng talahanayan pagkatapos ng huling pangalan ng hanay ngunit bago ang huling panaklong:

GUMAWA NG TALAAN<имя таблицы>

Limitasyon ng talahanayan > (<имя столбца>

[, <имя столбца> ]...);

Ilista natin ang ilang mga paghihigpit.

  • 1. Pag-aalis ng mga walang laman (NULL) na mga pointer sa pamamagitan ng pagpapakilala ng NOT NULL na utos.
  • 2. Data uniqueness at primary keys.

Ang pagpigil sa isang NATATANGING column sa isang field kapag lumilikha ng isang talahanayan ay tatanggihan ang anumang pagtatangka na ilagay sa field na iyon para sa isa sa mga row ng isang halaga na mayroon na sa isa pang row. Ang paghihigpit na ito ay maaari lamang ilapat sa mga field na idineklara bilang NOT NULL.

  • 3. Direktang sinusuportahan ng SQL ang mga pangunahing key na may limitasyon sa PRIMARY KEY. Pangunahing mga susi hindi maaaring magkaroon ng mga NULL na halaga. Nangangahulugan ito na, tulad ng mga field sa isang NATATANGING limitasyon, anumang field na ginamit sa isang PRIMARY KEY na hadlang ay dapat na ideklarang HINDI NULL.
  • 4. Mga paghihigpit sa mga halaga ng field. Ang CHECK constraint ay ginagamit para dito: upang maiwasan ang isang error maling pagpasok halaga ng "comm", magpapataw kami ng isang hadlang sa hanay - CHECK ("comm" ay mas mababa kaysa sa I).

Ang nasa itaas ay maaaring iharap sa anyo

GUMAWA NG MGA Vendor ng TABLE

lungsod char(10),

comm decimal CHECK (comm< 1));

Maaaring tukuyin ang mga agwat at hanay ng mga halaga ng hadlang.

Gumawa muna tayo ng talahanayang "Mga Order":

GUMAWA NG MGA Order ng TABLE

(pron integer NOT NULL UNIQUE,

supr decimal,

datepr date NOT NULL,

value integer NOT NULL,

pnom integer HINDI NULL);

5. Itakda ang mga default na halaga sa no.

Ang halaga ng DEFAULT ay tinukoy sa command na CREATE TABLE sa parehong paraan tulad ng isang hadlang sa column.

Kung ang opisina ay matatagpuan sa Orel at ang karamihan sa mga nagbebenta ay nakatira din sa Orel, kung gayon bilang default:

GUMAWA NG MGA Vendor ng TABLE

(nom integer NOT NULL UNIQUE,

pangalan char(10) NOT NULL UNIQUE,

city ​​​​char(10) DEFAULT = "Agila",

comm decimal CHECK (comm< 1);

6. Mga hadlang sa dayuhang pangunahing (referential integrity). Ang SQL ay nagpapanatili ng referential integridad sa CREATE TABLE (o ALTER TABLE) command Dayuhang hadlang KEY na may syntax

FOREIGN SUSI<список полей>MGA SANGGUNIAN

Talahanayan na may susi ng magulang > [<список полей>.

Gumawa tayo ng talahanayang "Mga Customer" na may patlang na "pnom" na tinukoy bilang isang dayuhang key na tumutukoy sa talahanayang "Mga Nagbebenta":

GUMAWA NG TALAAN Mga Customer

(knowledge integer NOT NULL PRIMARY KEY winter char(10), city char(10),

pnom integer,

FOREIGN KEY (Pnom) REFERENCES Mga Nagbebenta (Pnom);

Ang paghihigpit ay maaaring ipakilala nang hiwalay:

CONSTRAINT kapaki-pakinabang na FOREIGN KEY (mon)

MGA SANGGUNIAN Mga Nagbebenta(Pnom);

Ang pagpapakilala ng isang hadlang ay maginhawa dahil pinapayagan ka nitong direktang magtanggal o magsulat ng isa pang expression nang hindi binabago ang programa sa paglikha ng talahanayan. Pag-alis ng hadlang

DROP CONSTRAINT field_nom;

lalo na maginhawa kung ang mesa ay puno.

Tandaan na ang parent key ay dapat na natatangi at hindi naglalaman ng anumang mga null value. Hindi ito sapat para sa parent key kapag nagdedeklara ng foreign key. Dapat tiyakin ng SQL ang tungkol sa dobleng halaga o walang laman na mga halaga(NULL) ay hindi naipasok sa susi ng magulang, i.e.

GUMAWA NG MGA Vendor ng TABLE

(nom integer NOT NULL PRIMARY KEY,

pangalan char(10) NOT NULL,

lungsod char(10),

comm decimal);

GUMAWA NG TALAAN Mga Customer

winter char(10) NOT NULL,

lungsod char(10),

FOREIGN ΚΕΥ(πηομ) REFERENCES Mga Nagbebenta,

NATATANGING (znom, pnom);

GUMAWA NG MGA Order ng TABLE

(prn integer NOT NULL PRIMARY KEY,

supr decimal,

datepr date NOT NULL,

value integer NOT NULL

pnom integer HINDI NULL

FOREIGN KEY (znom, pnom) MGA SANGGUNIAN

Mga Customer (Znom, Pnom);

Kaya, lahat ng tatlong mga talahanayan ay nilikha at ang mga relasyon sa pagitan ng mga ito ay itinatag.

Kung kailangan mong baguhin o tanggalin ang kasalukuyang parent key reference value, mayroon kang tatlong opsyon:

  • 1) higpitan o ipagbawal ang mga pagbabago (sa paraang ANSI), na nagpapahiwatig na ang mga pagbabago sa susi ng magulang ay pinaghihigpitan (HINDI);
  • 2) maaari kang gumawa ng pagbabago sa susi ng magulang at sa gayon ay awtomatikong mga pagbabago sa dayuhang susi, ibig sabihin, pagbabago ng cascading (CASCADES);
  • 3) gumawa ng pagbabago sa parent key at awtomatikong itakda ang foreign key sa NULL (ipagpalagay na ang NULLS ay pinapayagan sa foreign key) - isang walang laman na foreign key change (NULL).

Halimbawa, i-update at sirain

GUMAWA NG TALAAN Mga Customer

(integer NOT NULL PRIMARY KEY,

winter char(10) NOT NULL, city char(10),

UPDATE NG CASCADES,

TANGGAL NG MGA Nagbebenta na PININIPITAN);

Kung susubukan mo na ngayong alisin ang Strokov mula sa talahanayan ng "Mga Nagbebenta," hindi magiging wasto ang command hanggang sa ang halaga ng field na "pnom" na "Mga Customer" at Ivanov at Krabov ay binago para sa isa pang nakatalagang nagbebenta.

Kasabay nito, maaari mong baguhin ang halaga ng field na "Pnom" para sa Strokov sa 1009, at para sa data ng Ivanov at Krabs, ang mga halaga ng field na "Pnom" ay awtomatikong mababago.

Posible rin ang mga NULL (empty) na pagbabago. Halimbawa,

GUMAWA NG MGA Order ng TABLE

prnom integer NOT NULL PRIMARY KEY,

supr decimal,

datepr date NOT NULL,

3HOM integer NOT NULL REFERENCES Mga customer,

mon integer REFERENCES Mga nagbebenta,

UPDATE NG CASCADES Customers,

TANGGALIN NG CASCADES Mga Customer,

UPDATE NG CASCADES Mga Nagbebenta,

TANGGALIN NG Mga Nagbebenta NULLS);

Naturally, sa isang utos na DELETE na may NULL effect sa table na "Vendors", ang NOT NULL constraint ay dapat alisin sa field na "pnom".

Gamit ang wikang SQL, maaaring tukuyin ang isang database, naka-imbak na pamamaraan, generator, counter, trigger.

Ang database ay nabuo tulad nito:

GUMAWA NG DATABASE "d:...a1 .gdb"

PASSWORD "masterkey"

Default na set ng character na WIN 1251

Naka-imbak na pamamaraan:

GUMAWA NG PAMAMARAAN Rashod_Tovara(IN_Tovar varchar (20))

RETURNS(OUT_Tovar varchar(20))

PARA SA PUMILI NG Produkto

WHERE Product=: IN_Tovar

Ang generator ay tinukoy ng dalawang pamamaraan:

GUMAWA NG PAMAMARAAN Get_N_Rash;

I-SET ANG GENERATOR RASHOD_N_Rash SA 1;

GUMAWA NG PAMAMARAAN Get_N_Rash

RETURNS(NR integer)

NR=Gen_ID(RASHOD_N_Rash, 1);

Trigger ng pag-update ng Cascade:

GUMAWA NG TRIGGER BU_Item na ACTIVE

KUNG (OLD.TovarONEW.Tovar) THEN

SET Product=BAGO.Tovar

WHERE Product=OLD.Tovar;

Sistema mga pahintulot. Posible ang isang sistema ng pagpapahintulot (mga pribilehiyo) o pagtanggi sa pag-access sa data. Paalalahanan ka namin na ang mga administrator ng database mismo ang gumagawa ng mga user at nagbibigay sa kanila ng mga pribilehiyo. Gayunpaman, ang mga user na gumagawa ng mga talahanayan ay mayroon ding mga karapatan na pamahalaan ang mga talahanayang iyon.

Pribilehiyo ang nagpapasiya kung tinukoy na gumagamit patakbuhin ang utos na ito.

Isaalang-alang natin ang mga pangunahing prinsipyo ng kanilang pagbuo batay sa wikang SQL. Ang mga sumusunod na priyoridad ay nakikilala (sa pababang pagkakasunud-sunod): tungkulin, gumagamit, pangkat, pangkalahatang pag-access(pampubliko).

Mayroong pagpapahintulot at pagbabawal ng mga aksyon.

Ang pahintulot ay ibinigay ng isang operator ng form

PAGBIGAY<вид операции>

NAKA-ON<объект>

NA<субъект>

Ang huling linya ay nagsasalita tungkol sa paglipat ng karapatan ng paggamit.

Para sa kumpiyansa na pamamahala, isang kumbinasyon ng isang database administrator at isang may-ari ng bagay (halimbawa, isang talahanayan) ay kinakailangan.

Ang paglikha ng user na si Ilya (na binigyan ng kakayahang lumikha ng mga database), na isinagawa ng administrator ng database, ay tinutukoy ng utos

GUMAWA NG USER na si Ilya

MAY MGA PRIBilehiyo create.db;

ang pag-alis sa user na ito ng mga pribilehiyo ay ginagawa gamit ang utos

DROP USER Ilya;

Ang paglikha ng papel (na may isang password) ay isinasagawa ng utos

GUMAWA NG TUNGKULIN create_db MAY PASSWORD = "12";

at pag-agaw ng tungkulin ng pangkat

DROP ROLE create_db;

Mayroong ilang mga uri ng mga pribilehiyo na naaayon sa ilang mga uri ng mga operasyon. Ang mga pribilehiyo ay ibinibigay at binawi gamit ang dalawang SQL command: GRANT at REVOKE.

Ang bawat user sa kapaligiran ng SQL ay may espesyal na pangalan ng pagkakakilanlan (identifier - ID) o numero.

Ang permission ID ay ang username. Maaaring gamitin ng SQL ang espesyal na keyword na USER, na tumutukoy sa access ID na nauugnay sa kasalukuyang command. Ang utos ay binibigyang kahulugan at pinapayagan (o tinanggihan).

Ang mga pribilehiyo ng bagay ay nauugnay sa parehong mga user at mga talahanayan. Ang isang bagay na dapat tandaan ay ang user na lumikha ng talahanayan (anumang uri) ay ang may-ari ng talahanayang iyon: nasa kanya ang lahat ng mga pribilehiyo sa talahanayang iyon at maaaring ilipat ang mga pribilehiyong iyon sa ibang mga user.

Nalalapat ang mga pribilehiyo sa mga command na SELECT, INSERT, UPDATE, DELETE, REFERENCES (pagtukoy ng foreign key na gumagamit ng isa o higit pang column ng table na ito bilang parent key).

Kasama sa mga hindi karaniwang utos ang INDEX, na nagbibigay ng karapatang gumawa ng index sa isang talahanayan, at ALTER, na nagpapatupad ng isang ALTER TABLE na utos sa isang talahanayan. Ang SQL engine ay nagtatalaga ng mga pribilehiyong ito sa mga user gamit ang GRANT command.

Halimbawa, ang user na si Ilya ay may table na "Mga Customer" at gustong payagan ang user na si Peter na magpatakbo ng isang query laban dito:

MAGBIGYAN NG PILI SA MGA Customer KAY Peter;

Maaaring magsagawa ng mga query si Peter laban sa talahanayan ng Mga Customer, ngunit hindi maibigay ang karapatan sa PILI sa ibang user: ang talahanayan ay pagmamay-ari pa rin ni Ilya.

Posible rin ang mga pribilehiyo ng grupo:

GRANT SELECT, INSERT ON Orders TO Ilya, Peter;

Maaari mo ring tukuyin ang hiwalay na mga field para sa UPDATE at REFERNCES commands:

BIGYAN NG UPDATE (comm) SA Mga Nagbebenta KAY Ilya;

Ang pribilehiyong REFERENCES ay maaaring tukuyin bilang isang listahan ng isa o higit pang mga column kung saan pinaghihigpitan ang pribilehiyong ito. Halimbawa, maaaring bigyan ni Ilya si Stepan ng karapatang gamitin ang mga field ng talahanayan ng Mga Customer bilang talahanayan ng pangunahing key gamit ang sumusunod na command:

BIGYAN NG MGA SANGGUNIAN (taglamig, init)

SA Mga Customer KAY Stepan;

Sinusuportahan ng SQL ang dalawang argumento sa GRANT na utos na may espesyal na kahulugan: ALL PRIVILEGES (lahat ng pribilehiyo) o LAHAT para sa mga command at PUBLIC (pangkalahatan) para sa mga user.

IBIGAY LAHAT SA MGA Customer SA PUBLIKO;

Ang kakayahan para sa isang user na ilipat ang mga pribilehiyong ipinagkaloob sa kanya ay isinasagawa ng WITH GRANT OPTION clause.

Minsan gusto ng gumawa ng table na makakuha ng mga pribilehiyo ang ibang user sa kanyang table. Karaniwan itong ginagawa sa mga system kung saan ang isa o higit pang mga tao ay gumagawa ng ilan (o lahat) ng mga base table sa isang database at pagkatapos ay italaga ang responsibilidad para sa kanila sa mga taong aktwal na makikipagtulungan sa kanila. Pinapayagan ka ng SQL na gawin ito gamit ang sugnay na WITH GRANT OPTION.

Hayaan si Ilya na ilipat ang karapatan kay Peter sa SELECT pribilehiyo sa talahanayan ng "Mga Customer":

MAGBIGYAN NG PILI SA MGA Customer KAY Petr

MAY GRANT OPTION;

Posibleng payagan ang integ check procedure na tumakbo

SA PAMAMARAAN integ_check

Ang pribilehiyo sa INSERT command, halimbawa, ay maaaring bawiin:

Bawiin ang INSERT SA Mga Utos MULA kay Pedro;

Ang mga listahan ay maaari ding gamitin dito:

Bawiin ang INSERT, I-DELETE SA Mga Customer MULA kay Peter, Stepan;

Posibleng itakda (o bawiin) ang mga pribilehiyo gamit ang mga naunang tinalakay na uri. Halimbawa,

GUMAWA NG VIEW Moscow 1

PUMILI ng taglamig, pangalan MULA sa Mga Nagbebenta;

Ang Moscow1 ay nagbibigay ng SELECT privilege sa view (view), at hindi sa mismong table na “Sellers”:

MAGBIGAY NG PILI SA Moscow1 KAY Victor;

Ang mga pribilehiyo ay maaari ding limitahan ng mga sumusunod na linya:

GUMAWA NG VIEW Moscow2

MULA sa mga Customer

SAAN lungsod = "Sochi"

MAY CHECK OPTION;

MAGBIGAY NG UPDATE SA Moscow2 KAY Peter;

Pinipigilan ng sugnay na WITH CHECK OPTION ang Petr na palitan ang halaga ng field na "lungsod" ng anumang halaga maliban sa Sochi.

Mayroong ilang mga opsyon para sa pagtatrabaho sa mga view.

Ang isang sistema ng anumang laki ay palaging may ilang uri ng superuser - kadalasan ay isang Database Administrator o DBA. Mayroon siyang mga sumusunod na pribilehiyo ng system: CONNECT (kunekta), RESOURCE (resource) at DBA (Database Administrator).

Ang CONNECT ay binubuo ng karapatang magparehistro at karapatang lumikha ng mga view at kasingkahulugan, ang RESOURCE ay binubuo ng karapatang lumikha ng mga base table, ang DBA ay isang pribilehiyo na nagbibigay sa user ng mataas na awtoridad sa database.

Ang ilang mga system ay may espesyal na user, kung minsan ay tinatawag na SYSADM o SYS ( System administrator Database), na may pinakamataas na awtoridad.

Ang utos ng GRANT, sa binagong anyo, ay magagamit sa mga pribilehiyo ng object pati na rin sa mga pribilehiyo ng system:

MAGBIGAY NG RESOURCE KAY Miron;

Natural, ang user na si Myron ay dapat malikha.

Maaaring mayroon ding password ang user (halimbawa, Ivan). Pagkatapos ang utos ay parang

PAGBIBIGAY NG KONEKTO KAY Fedor NA KILALA NI Ivan;

na lilikha ng isang user na nagngangalang Fedor, bigyan siya ng karapatang magparehistro at italaga sa kanya ang password na si Ivan.

Kung gusto mong pigilan ang isang user na mag-log in, dapat mong gamitin ang pribilehiyong CONNECT sa REVOKE, na "nag-aalis" sa user na iyon.

Ang pagbabawal (sa paglikha ng mga talahanayan sa newa database para sa clerck group) ay may form

Minsan kinakailangan na sa isang sql query, kung ang isang kundisyon ay natugunan, isang field (o expression) ang pipiliin, at kung hindi man ay isa pang field (o expression) ang pipiliin, i.e. pagpili ng field o expression depende sa kondisyon. O, kailangan mong i-update ang mga halaga sa database depende sa kondisyon. Upang malutas ang problemang ito, kailangan mong gamitin ang CASE statement. Ang operator na ito ay may 2 syntax na opsyon, ang bawat isa ay maginhawa sa sarili nitong mga kaso. Magbibigay lang ako ng mga malinaw na halimbawa ng parehong pamamaraan.

Halimbawa 1. Nagpapakita ng iba't ibang resulta depende sa halaga sa field.

SELECT ProductNumber, Category = CASE ProductLine KAPAG "R" TAPOS "Road" KAPAG "M" TAPOS "Mountain" KAPAG "T" TAPOS "Paglilibot" KAPAG "S" TAPOS "Other sale items" IBA "Not for sale" END, Name FROM Production.Product ORDER BY ProductNumber

SA sa halimbawang ito ang lahat ay simple: kung ProductLine = "R", kung gayon ang pagpili ng resulta ay maglalaman ng tekstong "Road", kung ProductLine = "M" - pagkatapos ay makakakuha tayo ng "Mountain" sa mga resulta, atbp.

Halimbawa 2. Isang mas kumplikadong kundisyon para sa pagkuha ng iba't ibang text depende sa halaga sa field.

SELECT ProductNumber, Name, "Price Range" = CASE WHEN ListPrice = 0 THEN "Mfg item - not for resale" WHEN ListPrice< 50 THEN "Under $50" WHEN ListPrice >= 50 at ListPrice< 250 THEN "Under $250" WHEN ListPrice >= 250 at ListPrice< 1000 THEN "Under $1000" ELSE "Over $1000" END FROM Production.Product ORDER BY ProductNumber

Halimbawa 3. Paggamit ng isang construct tulad ng "IF THEN ELSE" sa isang query

PUMILI NG FirstName, Apelyido, TelephoneNumber, CASE WHEN TelephoneSpecialInstructions AY NULL THEN "Anumang oras" IBANG TelephoneSpecial Instructions END AS When Contact FROM Person.vAdditionalContactInfo

Halimbawa 4. Ang paggamit ng kundisyon kapag ang pag-uuri ng query ay nagreresulta sa ORDER BY

PUMILI EmployeeID, EmployeeFIO, SalariedFlag MULA SA Employee ORDER BY CASE WHEN SalariedFlag = 1 THEN EmployeeID WHEN SalariedFlag = 0 THEN EmployeeFIO END

Ang prinsipyo ng pag-uuri gamit ang isang kundisyon ay ang unang lahat ng mga halaga ay makukuha depende sa kundisyon (i.e. isang karagdagang field ang matatanggap), pagkatapos nito ang buong resulta ng query ay pag-uuri-uriin ayon sa mga resulta ng kundisyon. Iyon ang dahilan kung bakit ang mga resulta ng kundisyon ay dapat sa parehong uri ng data.

Halimbawa 5. I-update ang field gamit ang bagong data depende sa kundisyon.

I-UPDATE ANG Employee SET VacationHours = KASO WHEN VacationHours< 10 THEN VacationHours + 40 ELSE VacationHours + 20 END OUTPUT Deleted.EmployeeID, Deleted.VacationHours AS BeforeValue, Inserted.VacationHours AS AfterValue WHERE SalariedFlag = 0

Sa halimbawang ito, idinaragdag ang 40 sa field ng VacationHours kung ang VacationHours ay mas mababa sa 10, kung hindi man ay idinagdag ang 20 Pagkatapos makumpleto ang mga pag-update, magpapakita rin ang query ng talahanayan na may mga column ng EmployeeID at ang halaga ng field ng VacationHours na "Before." at "Pagkatapos" ng pag-update.

  • Pagsasalin
  • Tutorial
Kailangan mo ba ng “PUMILI * SAAN a=b MULA sa c” o “PUMILI SA SAAN a=b MULA sa c SA *”?

Kung ikaw ay tulad ko, sasang-ayon ka: Ang SQL ay isa sa mga bagay na tila madali sa una (parang Ingles!), ngunit kahit papaano kailangan mong i-Google ang bawat simpleng query upang mahanap ang tamang syntax.


At pagkatapos ay sumali, pagsasama-sama, magsisimula ang mga subquery, at ito ay lumalabas na ganap na basura. Isang bagay na tulad nito:


PUMILI ng mga miyembro.pangalan || " " || miyembro.apelyido BILANG "Buong Pangalan" MULA sa mga paghiram INNER SUMALI sa mga miyembro SA mga miyembro.memberid=pahiram.memberid SA LOOB NA SUMALI sa mga aklat SA mga aklat.bookid=pahiram.bookid SAAN ang mga paghiram.bookid SA (PUMILI ng bookid MULA sa mga aklat KUNG SAAN ang stock>(PUMILI ng avg(stock) ) MULA sa mga aklat)) GROUP BY members.firstname, members.apelyido;

Bue! Tatakutin nito ang sinumang baguhan, o kahit isang intermediate level na developer kung nakikita niya ang SQL sa unang pagkakataon. Pero hindi lahat masama.


Madaling matandaan kung ano ang intuitive, at sa gabay na ito umaasa akong mapababa ang hadlang sa pagpasok sa SQL para sa mga baguhan at mag-alok sa mga nakaranas na ng bagong paraan upang tingnan ang SQL.


Bagama't ang SQL syntax ay halos pareho sa pagitan ng iba't ibang database, ang artikulong ito ay gumagamit ng PostgreSQL para sa mga query. Ang ilang mga halimbawa ay gagana sa MySQL at iba pang mga database.

1. Tatlong mahiwagang salita

Marami ang SQL mga keyword, ngunit SELECT , FROM at WHERE ay naroroon sa halos bawat query. Maya-maya ay mauunawaan mo na ang tatlong salitang ito ay kumakatawan sa mga pinakapangunahing aspeto ng pagbuo ng mga query sa database, at ang iba pa, mas kumplikadong mga query ay mga add-on lamang sa ibabaw ng mga ito.

2. Ang aming base

Tingnan natin ang database na gagamitin natin bilang isang halimbawa sa artikulong ito:







meron tayo aklatan ng aklat at mga tao. Mayroon ding isang espesyal na talahanayan para sa pagtatala ng mga ibinigay na libro.

  • Ang talahanayan ng "mga aklat" ay nag-iimbak ng impormasyon tungkol sa pamagat, may-akda, petsa ng publikasyon, at pagkakaroon ng aklat. Simple lang.
  • Sa talahanayan ng "mga miyembro" - ang una at apelyido ng lahat ng mga taong nag-sign up para sa library.
  • Ang talahanayan ng "mga paghiram" ay nag-iimbak ng impormasyon tungkol sa mga aklat na kinuha mula sa aklatan. Ang bookid na column ay tumutukoy sa ID ng aklat na kinuha sa talahanayan ng "mga aklat", at ang memberid na column ay tumutukoy sa kaukulang tao mula sa talahanayan ng "mga miyembro". Mayroon din kaming petsa ng isyu at petsa kung kailan dapat ibalik ang aklat.

3. Simpleng kahilingan

Magsimula tayo sa isang simpleng kahilingan: kailangan natin mga pangalan At mga identifier(id) ng lahat ng aklat na isinulat ng may-akda na "Dan Brown"


Ang kahilingan ay magiging ganito:


PUMILI ng bookid BILANG "id", pamagat MULA sa mga aklat WHERE author="Dan Brown";

At ang resulta ay ganito:


id pamagat
2 Ang Nawawalang Simbolo
4 Inferno

Medyo simple. Tingnan natin ang kahilingan upang maunawaan kung ano ang nangyayari.

3.1 FROM - kung saan kami kumukuha ng data

Ito ay maaaring mukhang halata ngayon, ngunit ang FROM ay magiging napakahalaga sa ibang pagkakataon kapag nakuha na natin ang mga sumali at subquery.


MULA sa mga puntos sa talahanayan upang mag-query. Ito ay maaaring isang umiiral na talahanayan (tulad ng sa halimbawa sa itaas), o isang talahanayan na ginawa sa mabilisang mga pagsali o subquery.

3.2 SAAN - anong data ang ipinapakita

WHERE simpleng kumikilos na parang filter mga linya, na gusto naming i-output. Sa aming kaso, gusto lang naming makakita ng mga row kung saan ang value sa column ng may-akda ay “Dan Brown”.

3.3 PUMILI - kung paano ipakita ang data

Ngayon na mayroon na tayong lahat ng mga column na kailangan natin mula sa talahanayan na kailangan natin, kailangan nating magpasya kung paano eksaktong ipapakita ang data na ito. Sa aming kaso, kailangan lang namin ang mga pamagat at pagkakakilanlan ng mga libro, kaya iyon ang aming piliin natin gamit ang SELECT. Kasabay nito, maaari mong palitan ang pangalan ng column gamit ang AS.


Ang buong query ay maaaring makita gamit ang isang simpleng diagram:


4. Mga koneksyon (pagsasama)

Ngayon gusto naming makita ang mga pamagat (hindi kinakailangang kakaiba) ng lahat ng mga aklat ni Dan Brown na na-check out mula sa library, at kapag kailangang ibalik ang mga aklat na iyon:


PUMILI ng mga libro.pamagat BILANG "Pamagat", mga paghiram.petsa ng pagbabalik BILANG "Petsa ng Pagbabalik" MULA sa mga paghiram SUMALI sa mga aklat SA paghiram.bookid=books.bookid WHERE books.author="Dan Brown";

Resulta:


Pamagat Petsa ng Pagbabalik
Ang Nawawalang Simbolo 2016-03-23 00:00:00
Inferno 2016-04-13 00:00:00
Ang Nawawalang Simbolo 2016-04-19 00:00:00

Para sa karamihan, ang kahilingan ay katulad ng nauna maliban sa MULA sa mga seksyon. Ibig sabihin nito kami ay nagtatanong ng data mula sa isa pang talahanayan. Hindi namin ina-access ang alinman sa talahanayan ng "mga aklat" o ang talahanayan ng "mga paghiram". Sa halip ay lumingon kami sa bagong mesa, na nilikha sa pamamagitan ng pagsali sa dalawang talahanayan na ito.


mga paghiram SUMALI sa mga aklat SA borrowings.bookid=books.bookid - ito ay, isaalang-alang, bagong mesa, na nabuo sa pamamagitan ng pagsasama-sama ng lahat ng mga talaan mula sa mga talahanayan ng "mga aklat" at "mga paghiram" kung saan tumutugma ang mga halaga ng bookid. Ang magiging resulta ng naturang pagsasama ay:



At pagkatapos ay itatanong namin ang talahanayang ito sa parehong paraan tulad ng sa halimbawa sa itaas. Nangangahulugan ito na kapag sumali sa mga talahanayan, kailangan mo lamang mag-alala tungkol sa kung paano gawin ang pagsali. At pagkatapos ay magiging malinaw ang kahilingan tulad ng sa kaso ng " simpleng kahilingan»mula sa punto 3.


Subukan natin ang bahagyang mas kumplikadong pagsali sa dalawang talahanayan.


Ngayon gusto naming makuha ang una at apelyido ng mga taong kumuha ng mga libro mula sa library ng may-akda na "Dan Brown".


Sa pagkakataong ito, pumunta tayo mula sa ibaba hanggang sa itaas:


Hakbang Hakbang 1- saan natin kukunin ang data? Upang makuha ang resulta na kailangan natin, kailangan nating sumali sa mga talahanayan ng "miyembro" at "mga aklat" kasama ang talahanayan ng "mga paghiram". Ang seksyong JOIN ay magiging ganito:


mga paghiram SUMALI sa mga aklat SA paghiram.bookid=books.bookid SUMALI sa mga miyembro SA mga miyembro.memberid=pahiram.memberid

Ang resulta ng koneksyon ay makikita sa link.


Hakbang 2- anong data ang ipinapakita namin? Interesado lang kami sa data kung saan ang may-akda ng aklat ay "Dan Brown"


WHERE books.author="Dan Brown"

Hakbang 3- paano namin ipapakita ang data? Ngayong natanggap na ang data, kailangan mo lang ipakita ang una at apelyido ng mga kumuha ng mga aklat:


PUMILI ng mga miyembro.pangalan BILANG "Pangalan", mga miyembro.pangalan BILANG "Apelyido"

Super! Ang natitira na lang ay pagsamahin ang tatlong bahagi at gawin ang kahilingan na kailangan namin:


PUMILI ng mga miyembro.pangalan BILANG "First Name", mga miyembro.apelyido BILANG "Apelyido" MULA sa mga paghiram SUMALI sa mga aklat SA paghiram.bookid=books.bookid SUMALI sa mga miyembro SA mga miyembro.memberid=borrowings.memberid WHERE books.author="Dan Brown";

Ano ang ibibigay sa atin:


Unang Pangalan Apelyido
Mike Willis
Ellen Horton
Ellen Horton

Mahusay! Ngunit ang mga pangalan ay paulit-ulit (hindi sila natatangi). Aayusin natin ito sa lalong madaling panahon.

5. Pagsasama-sama

Sa madaling salita, Ang mga pagsasama-sama ay kinakailangan upang ma-convert ang maramihang mga hilera sa isa. Kasabay nito, sa panahon ng pagsasama-sama, iba't ibang lohika ang ginagamit para sa iba't ibang mga haligi.


Magpatuloy tayo sa ating halimbawa kung saan lumalabas ang mga duplicate na pangalan. Malinaw na kinuha ni Ellen Horton ang higit sa isang libro, ngunit hindi ito ang pinaka pinakamahusay na paraan ipakita ang impormasyong ito. Maaari kang gumawa ng isa pang kahilingan:


PUMILI ng mga miyembro.pangalan BILANG "Apelyido", mga miyembro.apelyido BILANG "Apelyido", bilang(*) BILANG "Bilang ng mga aklat na hiniram" MULA SA mga paghiram SUMALI sa mga aklat SA paghiram.bookid=books.bookid SUMALI sa mga miyembro SA mga miyembro.memberid=pahiram .memberid WHERE books.author="Dan Brown" GROUP BY members.firstname, members.apelyido;

Na magbibigay sa amin ng nais na resulta:


Unang Pangalan Apelyido Bilang ng mga aklat na hiniram
Mike Willis 1
Ellen Horton 2

Halos lahat ng pagsasama-sama ay may kasamang GROUP BY clause. Ginagawa ng bagay na ito ang isang talahanayan na maaaring makuha ng isang query sa mga pangkat ng mga talahanayan. Ang bawat pangkat ay tumutugma sa isang natatanging halaga (o pangkat ng mga halaga) ng column na aming tinukoy sa GROUP BY . Sa aming halimbawa, kino-convert namin ang resulta mula sa nakaraang ehersisyo sa isang pangkat ng mga hilera. Gumagawa din kami ng aggregation na may count , na nagko-convert ng maraming row sa isang integer value (sa aming kaso, ang bilang ng mga row). Ang kahulugang ito ay itinalaga sa bawat pangkat.


Ang bawat hilera sa resulta ay kumakatawan sa resulta ng pagsasama-sama ng bawat pangkat.



Ang isa ay maaaring makarating sa lohikal na konklusyon na ang lahat ng mga patlang sa resulta ay dapat na tinukoy sa GROUP BY , o ang pagsasama-sama ay dapat gawin sa kanila. Dahil ang lahat ng iba pang mga patlang ay maaaring magkaiba sa bawat isa magkaibang linya, at kung pipiliin mo sila SELECT ", kung gayon hindi malinaw kung alin sa mga posibleng halaga ang dapat kunin.


Sa halimbawa sa itaas, pinoproseso ng count function ang lahat ng row (dahil binibilang namin ang bilang ng mga row). Iba pang mga function tulad ng sum o max na proseso lamang ang mga tinukoy na row. Halimbawa, kung gusto naming malaman ang bilang ng mga aklat na isinulat ng bawat may-akda, kailangan namin ang sumusunod na query:


PUMILI ng may-akda, sum(stock) MULA sa mga aklat GROUP BY author;

Resulta:


may-akda kabuuan
Robin Sharma 4
Dan Brown 6
John Green 3
Amish Tripathi 2

Dito pinoproseso lamang ng sum function ang stock column at kinakalkula ang kabuuan ng lahat ng value sa bawat grupo.

6. Mga subquery


Ang mga subquery ay mga regular na query sa SQL na naka-embed sa loob ng mas malalaking query. Ang mga ito ay nahahati sa tatlong uri batay sa uri ng resulta na ibinalik.

6.1 Dalawang-dimensional na talahanayan

May mga query na nagbabalik ng maraming column. Ang isang magandang halimbawa ay ang query mula sa nakaraang aggregation exercise. Bilang isang subquery, magbabalik lamang ito ng isa pang talahanayan kung saan maaaring gumawa ng mga bagong query. Pagpapatuloy mula sa nakaraang ehersisyo, kung nais nating malaman ang bilang ng mga aklat na isinulat ng may-akda na "Robin Sharma", kung gayon ang isang posibleng paraan ay ang paggamit ng mga subquery:


SELECT * FROM (SELECT author, sum(stock) FROM books GROUP BY author) AS results WHERE author="Robin Sharma";

Resulta:



Maaaring isulat bilang: ["Robin Sharma", "Dan Brown"]


2. Ngayon ginagamit namin ang resultang ito sa isang bagong query:


PUMILI ng pamagat, naka-book MULA sa mga aklat KUNG SAAN ANG may-akda SA (PUMILI NG may-akda MULA (PUMILI ng may-akda, kabuuan(stock) MULA sa mga aklat GROUP NG may-akda) BILANG mga resulta KUNG SAAN sum > 3);

Resulta:


pamagat naka-book
Ang Nawawalang Simbolo 2
Sino ang Iiyak Kapag Namatay Ka? 3
Inferno 4

Ito ay kapareho ng:


PUMILI ng pamagat, naka-book MULA sa mga aklat WHERE author IN ("Robin Sharma", "Dan Brown");

6.3 Mga indibidwal na halaga

May mga query na nagreresulta sa isang row at isang column lang. Maaari silang ituring bilang mga pare-parehong halaga at maaaring gamitin saanman ginagamit ang mga halaga, tulad ng mga operator ng paghahambing. Magagamit din ang mga ito bilang mga two-dimensional na table o single-element arrays.


Halimbawa, kumuha tayo ng impormasyon tungkol sa lahat ng aklat na ang bilang sa library ay lumampas sa kasalukuyang average.


Ang average ay maaaring makuha sa ganitong paraan:


piliin ang avg(stock) mula sa mga aklat;

Ano ang nagbibigay sa amin:


7. Sumulat ng mga operasyon

Karamihan sa mga operasyon sa pagsulat ng database ay medyo simple kumpara sa mas kumplikadong mga operasyon sa pagbabasa.

7.1 Update

Syntax I-UPDATE ang kahilingan semantically kapareho ng isang read request. Ang pagkakaiba lang ay sa halip na pumili ng mga column na may SELECT, itinakda namin ang kaalaman gamit ang SET.


Kung nawala ang lahat ng aklat ni Dan Brown, kailangan mong i-reset ang halaga ng dami. Ang query para dito ay:


I-UPDATE ang mga libro SET stock=0 WHERE author="Dan Brown";

WHERE ginagawa ang parehong bagay tulad ng dati: pumipili ng mga hilera. Sa halip na ang SELECT na ginamit namin sa pagbabasa, ginagamit na namin ngayon ang SET. Gayunpaman, ngayon ay kailangan mong tukuyin hindi lamang ang pangalan ng column, kundi pati na rin ang isang bagong halaga para sa column na ito sa mga napiling row.


7.2 Tanggalin

Ang isang DELETE na query ay isang SELECT o UPDATE na query na walang mga pangalan ng column. Seryoso. Tulad ng SELECT at UPDATE , ang block na WHERE ay nananatiling pareho: pinipili nito ang mga row na tatanggalin. Sinisira ng operasyon ng pagtanggal ang buong row, kaya walang saysay na tukuyin ang mga indibidwal na column. Kaya, kung magpasya kaming hindi i-reset ang bilang ng mga aklat ni Dan Brown, ngunit tanggalin ang lahat ng mga tala nang buo, maaari naming gawin ang sumusunod na kahilingan:


I-DELETE MULA SA mga aklat WHERE author="Dan Brown";

7.3 Ipasok

Marahil ang tanging bagay na naiiba sa iba pang mga uri ng mga query ay INSERT. Ang format ay:


INSERT IN TO x (a,b,c) VALUES (x, y, z);

Kung saan ang a , b , c ay ang mga pangalan ng column, at ang x , y at z ay ang mga value na ilalagay sa mga column na iyon, sa parehong pagkakasunud-sunod. Iyon lang talaga.


Tingnan natin kongkretong halimbawa. Narito ang isang INSERT query na pumupuno sa buong talahanayan ng "mga aklat":


INSERT INTO books (bookid,title,author,published,stock) VALUES (1,"Scion of Ikshvaku","Amish Tripathi","06-22-2015",2), (2,"The Lost Symbol"," Dan Brown","07-22-2010",3), (3,"Sino ang Iiyak Kapag Namatay Ka?","Robin Sharma","06-15-2006",4), (4,"Inferno" ,"Dan Brown","05-05-2014",3), (5,"The Fault in our Stars", "John Green", "01-03-2015",3);

8. Suriin

Dumating na tayo sa dulo, nagmumungkahi ako ng isang maliit na pagsubok. Tingnan ang kahilingang iyon sa pinakasimula ng artikulo. Maaari mo bang malaman ito? Subukang hatiin ito sa SELECT , FROM , WHERE , GROUP BY sections, at tingnan ang mga indibidwal na bahagi ng mga subquery.


Narito ito sa isang mas nababasang anyo:


PUMILI ng mga miyembro.pangalan || " " || miyembro.apelyido BILANG "Buong Pangalan" MULA sa mga paghiram INNER SUMALI sa mga miyembro SA mga miyembro.memberid=pahiram.memberid SA LOOB NA SUMALI sa mga aklat SA books.bookid=pahiram.bookid SAAN ang mga paghiram.bookid SA (PUMILI ng bookid MULA sa mga aklat KUNG SAAN ang stock> (PUMILI ng avg(stock) ) MULA sa mga aklat)) GROUP BY members.firstname, members.apelyido;

Ang query na ito ay nagbabalik ng isang listahan ng mga taong nag-check out ng isang libro mula sa library na ang kabuuang bilang ay higit sa average.


Resulta:


Buong Pangalan
Lida Tyler

Umaasa ako na nagawa mong malaman ito nang walang anumang problema. Ngunit kung hindi, malugod kong tatanggapin ang iyong mga komento at puna upang mapagbuti ko ang post na ito.

Mga Tag: Magdagdag ng mga tag