SQL: Malsamoj inter versioj

El Vikipedio, la libera enciklopedio
[nekontrolita versio][nekontrolita versio]
Enhavo forigita Enhavo aldonita
SieBot (diskuto | kontribuoj)
e roboto modifo de: br:Lavar SQL
Xqbot (diskuto | kontribuoj)
e roboto modifo de: hi:ऍसक्यूऍल; cosmetic changes
Linio 26: Linio 26:
==== Komandoj por mendi: SELECT ====
==== Komandoj por mendi: SELECT ====


*<code>SELECT * FROM adresoj WHERE nomo='Schmidt'</code>
* <code>SELECT * FROM adresoj WHERE nomo='Schmidt'</code>
:montru ĉiujn kolumnojn el la tabelo ''adresoj'', kies kolumno ''nomo'' egalas al ''Schmidt''
:montru ĉiujn kolumnojn el la tabelo ''adresoj'', kies kolumno ''nomo'' egalas al ''Schmidt''


*<code>SELECT nomo FROM adresoj ORDER BY nomo</code>
* <code>SELECT nomo FROM adresoj ORDER BY nomo</code>
:montru la kolumnon ''nomo'' de ĉiuj linioj en la tabelo ''adresoj'', kaj ordigu ilin laŭ ''nomo''
:montru la kolumnon ''nomo'' de ĉiuj linioj en la tabelo ''adresoj'', kaj ordigu ilin laŭ ''nomo''


*<code>SELECT COUNT(*) AS nombro_de_adresoj FROM adresoj</code>
* <code>SELECT COUNT(*) AS nombro_de_adresoj FROM adresoj</code>
:montru la nombron de linioj en ''adresoj'' kaj nomu la rezultkolumnon ''nombro_de_adresoj''
:montru la nombron de linioj en ''adresoj'' kaj nomu la rezultkolumnon ''nombro_de_adresoj''


*<code>SELECT nomo,COUNT(nomo) FROM adresoj GROUP BY nomo</code>
* <code>SELECT nomo,COUNT(nomo) FROM adresoj GROUP BY nomo</code>
:montru ĉiujn unikajn nomojn kune kun iliaj nombroj
:montru ĉiujn unikajn nomojn kune kun iliaj nombroj


==== Komandoj por ŝanĝi: INSERT, UPDATE, DELETE ====
==== Komandoj por ŝanĝi: INSERT, UPDATE, DELETE ====


*<code>INSERT INTO adresoj (nomo,antnomo,urbo) VALUES ('Schmidt','Philipp','Hamburg')</code>
* <code>INSERT INTO adresoj (nomo,antnomo,urbo) VALUES ('Schmidt','Philipp','Hamburg')</code>
:aldonu linion kies kolumnoj ''nomo'', ''antnomo'', kaj ''urbo'' havas la valorojn montratajn en la tabelon ''adresoj''
:aldonu linion kies kolumnoj ''nomo'', ''antnomo'', kaj ''urbo'' havas la valorojn montratajn en la tabelon ''adresoj''


*<code>UPDATE adresoj SET urbo='Berlin' WHERE nomo='Schmidt'</code>
* <code>UPDATE adresoj SET urbo='Berlin' WHERE nomo='Schmidt'</code>
:ŝanĝu la kolumnon ''urbo'' de ĉiu linio, kies kolumno ''nomo'' egalas al ''Schmidt''
:ŝanĝu la kolumnon ''urbo'' de ĉiu linio, kies kolumno ''nomo'' egalas al ''Schmidt''


*<code>DELETE FROM adresoj WHERE urbo!='London'</code>
* <code>DELETE FROM adresoj WHERE urbo!='London'</code>
:forigu el la tabelo ĉiujn liniojn, kies kolumno ''urbo'' malegalas al ''London''
:forigu el la tabelo ĉiujn liniojn, kies kolumno ''urbo'' malegalas al ''London''


*<code>DELETE FROM adresoj</code>
* <code>DELETE FROM adresoj</code>
:forigu ĉiujn liniojn el la tabelo ''adresoj''
:forigu ĉiujn liniojn el la tabelo ''adresoj''


Linio 56: Linio 56:
==== Komandoj por datumdifino: CREATE, ALTER, DROP ====
==== Komandoj por datumdifino: CREATE, ALTER, DROP ====


*<code>CREATE TABLE adresoj (nomo VARCHAR(30), antnomo VARCHAR(40))</code>
* <code>CREATE TABLE adresoj (nomo VARCHAR(30), antnomo VARCHAR(40))</code>
:kreu novan tabelon nomatan ''adresoj'' kun la kolumnoj ''nomo'' kaj ''antnomo'', kiuj povas enhavi tekstojn ĝis 30 (aŭ 40) literojn longajn
:kreu novan tabelon nomatan ''adresoj'' kun la kolumnoj ''nomo'' kaj ''antnomo'', kiuj povas enhavi tekstojn ĝis 30 (aŭ 40) literojn longajn


*<code>ALTER TABLE adresoj ADD COLUMN urbo VARCHAR(30)</code>
* <code>ALTER TABLE adresoj ADD COLUMN urbo VARCHAR(30)</code>
:aldonu kolumnon ''urbo'' al la tabelo ''adresoj''
:aldonu kolumnon ''urbo'' al la tabelo ''adresoj''


*<code>DROP TABLE adresoj</code>
* <code>DROP TABLE adresoj</code>
:forigu la tutan tabelon ''adresoj''
:forigu la tutan tabelon ''adresoj''


*<code>CREATE INDEX indekso_nomo ON adresoj (nomo)</code>
* <code>CREATE INDEX indekso_nomo ON adresoj (nomo)</code>
:kreu [[datumbaza indekso|indekson]] nomata ''indekso_nomo'' por la tabelo ''adresoj'' kiu enhavu la liniojn ordigitaj laŭ ''nomo''
:kreu [[datumbaza indekso|indekson]] nomata ''indekso_nomo'' por la tabelo ''adresoj'' kiu enhavu la liniojn ordigitaj laŭ ''nomo''


*<code>DROP INDEX indekso_nomo</code>
* <code>DROP INDEX indekso_nomo</code>
:forigu la indekson ''indekso_nomo''
:forigu la indekson ''indekso_nomo''


Linio 75: Linio 75:
==== Komandoj por datumkontrolo: GRANT, REVOKE ====
==== Komandoj por datumkontrolo: GRANT, REVOKE ====


*<code>GRANT SELECT,UPDATE ON TABLE adresoj TO karlo</code>
* <code>GRANT SELECT,UPDATE ON TABLE adresoj TO karlo</code>
:rajtigu la uzanton ''karlo'' fari mendojn kaj ŝanĝi ekzistantajn liniojn
:rajtigu la uzanton ''karlo'' fari mendojn kaj ŝanĝi ekzistantajn liniojn


*<code>REVOKE ALL ON TABLE adresoj FROM alia_uzanto</code>
* <code>REVOKE ALL ON TABLE adresoj FROM alia_uzanto</code>
:malpermesu ĉiujn komandojn al la uzanto ''alia_uzanto''
:malpermesu ĉiujn komandojn al la uzanto ''alia_uzanto''


== SQL-Datumbazoj ==
== SQL-Datumbazoj ==


*[[Adabas]]
* [[Adabas]]
*[[DB2]]
* [[DB2]]
*[[dBase IV]]
* [[dBase IV]]
*[[Firebird]]
* [[Firebird]]
*[[GUPTA]]
* [[GUPTA]]
*[[Informix]]
* [[Informix]]
*[[INGRES]]
* [[INGRES]]
*[[InterBase]]
* [[InterBase]]
*[[JetSQL]]
* [[JetSQL]]
*[[Microsoft Access]]
* [[Microsoft Access]]
*[[Microsoft SQL Server]]
* [[Microsoft SQL Server]]
*[[MySQL]]
* [[MySQL]]
*[[PostgreSQL]]
* [[PostgreSQL]]
*[[Oracle]]
* [[Oracle]]
*[[MaxDB]] (antaŭe SAP DB)
* [[MaxDB]] (antaŭe SAP DB)
*[[Progress (datumbazo kaj 4GL)]]
* [[Progress (datumbazo kaj 4GL)]]
*[[SQLite]]
* [[SQLite]]
*[[SYBASE]]
* [[SYBASE]]
*[[T-SQL]]
* [[T-SQL]]
*[[Teradata]]
* [[Teradata]]


[[Kategorio:Datumbazoj]]
[[Kategorio:Datumbazoj]]
Linio 127: Linio 127:
[[ga:Teanga Struchtúrtha Iarratas]]
[[ga:Teanga Struchtúrtha Iarratas]]
[[he:SQL]]
[[he:SQL]]
[[hi:SQL]]
[[hi:ऍसक्यूऍल]]
[[hr:SQL]]
[[hr:SQL]]
[[hu:SQL]]
[[hu:SQL]]

Kiel registrite je 23:00, 31 aŭg. 2010

SQL (angle Structured Query Language = strukturhava menda lingvo) estas komputillingvo por rilataj datumbazoj. Ĝia relative malkompleksa sintakso similas al tiu de la angla, kaj provizas la uzanton per komandoj por la manipulado de datumaroj (kiel aldoni, ŝanĝi kaj forigi datumerojn, strukturigi tabelojn, ktp.) kaj por mendi datumojn. Pro sia kvazaŭa normeco SQL subtenas la sendependecon de programoj disde la datumbazo, kiun ili uzas. La plej multaj el la realigoj de SQL krome ebligas la uzon de aldonaj funkcioj kaj komandoj nenormaj.

Historio

La fundamenton de ĉiuj datumbazoj rilataj kreis en 1970 Edgar F. Codd per sia artikolo A Relational Model of Data for Large Shared Data Banks (rilateca modelo de datumoj por grandaj komune uzataj datumbazoj). La artikoloj sekvintaj ĉi-artikolon interalie temis pri la kreo de rilataj lingvoj, el kiuj la plej grava estis Structured English Query LanguageSEQUEL, evoluigita en 1974 ĉe IBM. En 1976 oni difinis SEQUEL/2 kaj alinomis ĝin SQL pro leĝaj kialoj. Ties prototipo, System R, estis finevoluigita en 1977 kaj jam enhavis la plejparton de SQL.

Pro la sukceso de System R poste multaj aliaj firmaoj decidis enkonduki produktojn SQL-kapablajn en la merkaton, interalie

Ene de dek jaroj SQL iĝis la laŭfakta normo de datumbazoj.

La American National Standards Institute (ANSI) ordonis 1982 la normigon de rilata lingvo, kiun oni subskribis en 1986 (ĉi-tial nomata SQL/86) kaj kiun plejparte konsistigis la SQL-dialekto de IBM. En 1987, ĝi ankaŭ estis akceptita kiel ISO-normo; ĝisdatigoj sekvis per SQL/89, SQL/92 kaj SQL/99.

Novan version (SQL:2003) oni decidis en 2003 en Stokholmo.

Ekzemploj

La komandojn oni partigas en tri kategoriojn:

Datummanipulado

Komandoj por mendi: SELECT

  • SELECT * FROM adresoj WHERE nomo='Schmidt'
montru ĉiujn kolumnojn el la tabelo adresoj, kies kolumno nomo egalas al Schmidt
  • SELECT nomo FROM adresoj ORDER BY nomo
montru la kolumnon nomo de ĉiuj linioj en la tabelo adresoj, kaj ordigu ilin laŭ nomo
  • SELECT COUNT(*) AS nombro_de_adresoj FROM adresoj
montru la nombron de linioj en adresoj kaj nomu la rezultkolumnon nombro_de_adresoj
  • SELECT nomo,COUNT(nomo) FROM adresoj GROUP BY nomo
montru ĉiujn unikajn nomojn kune kun iliaj nombroj

Komandoj por ŝanĝi: INSERT, UPDATE, DELETE

  • INSERT INTO adresoj (nomo,antnomo,urbo) VALUES ('Schmidt','Philipp','Hamburg')
aldonu linion kies kolumnoj nomo, antnomo, kaj urbo havas la valorojn montratajn en la tabelon adresoj
  • UPDATE adresoj SET urbo='Berlin' WHERE nomo='Schmidt'
ŝanĝu la kolumnon urbo de ĉiu linio, kies kolumno nomo egalas al Schmidt
  • DELETE FROM adresoj WHERE urbo!='London'
forigu el la tabelo ĉiujn liniojn, kies kolumno urbo malegalas al London
  • DELETE FROM adresoj
forigu ĉiujn liniojn el la tabelo adresoj

Datumdifino

Komandoj por datumdifino: CREATE, ALTER, DROP

  • CREATE TABLE adresoj (nomo VARCHAR(30), antnomo VARCHAR(40))
kreu novan tabelon nomatan adresoj kun la kolumnoj nomo kaj antnomo, kiuj povas enhavi tekstojn ĝis 30 (aŭ 40) literojn longajn
  • ALTER TABLE adresoj ADD COLUMN urbo VARCHAR(30)
aldonu kolumnon urbo al la tabelo adresoj
  • DROP TABLE adresoj
forigu la tutan tabelon adresoj
  • CREATE INDEX indekso_nomo ON adresoj (nomo)
kreu indekson nomata indekso_nomo por la tabelo adresoj kiu enhavu la liniojn ordigitaj laŭ nomo
  • DROP INDEX indekso_nomo
forigu la indekson indekso_nomo

Datumkontrolo

Komandoj por datumkontrolo: GRANT, REVOKE

  • GRANT SELECT,UPDATE ON TABLE adresoj TO karlo
rajtigu la uzanton karlo fari mendojn kaj ŝanĝi ekzistantajn liniojn
  • REVOKE ALL ON TABLE adresoj FROM alia_uzanto
malpermesu ĉiujn komandojn al la uzanto alia_uzanto

SQL-Datumbazoj