SQL: berrikuspenen arteko aldeak

Ezabatutako edukia Gehitutako edukia
t Kanpo lotura zuzentzea
No edit summary
1. lerroa:
{{batu|SQL}}
{{Ficha de lenguaje de programación
|nombre = SQL
|logo =
|extensiones_comunes =
|paradigma = [[lenguaje de programación multiparadigma|Multiparadigma]]
|año = 1974
|diseñador = [[Edgar Frank Codd]]
|desarrollador = [[IBM]]
|última_versión = SQL:2014
|fecha_última_versión = 2016
|tipo_dato = [[Tipado estático|Estático]], [[Tipado fuerte|Fuerte]]
|implementaciones = Varias
|dialectos = SQL-85, SQL-88, [[SQL-91]], [[SQL:1999]], [[SQL:2003]], [[SQL:2006]], [[SQL:2008]], [[SQL:2011]], [[SQL:2016]]
|influido_por = [[Datalog]]
|ha_influido = [[Agena (lenguaje de programación)|Agena]], [[Common Query Language|CQL]], [[Language Integrated Query|LINQ]], [[Windows PowerShell]]<ref>{{cita web|url=https://arstechnica.com/business/news/2005/10/msh.ars/4|título=A guided tour of the Microsoft Command Shell|fechaacceso=4 de agosto de 2020|apellido=Paul|nombre=Ryan|fecha=24 de octubre de 2005|sitioweb=Ars Technica|idioma=inglés}}</ref>
|sistema_operativo = [[multiplataforma]]
|web = [http://www.iso.org/iso/catalogue_detail.htm?csnumber=45498 ISO/IEC 9075-1:2012]
}}
 
 
[[Fitxategi:Sql data base with logo.png|alt=sql|thumb|SQL]]
{{lan infotaula|izena=SQL|Garatzailea=[[IBM]]|web=[http://www.iso.org/iso/catalogue_detail.htm?csnumber=45498 ISO/IEC 9075-1:2012]|paradigma=[[lenguaje de programación multiparadigma|Multiparadigma]]|urtea=1974|Diseinatzailea=[[Edgar Frank Codd]]|Azken_bertsioa=SQL:2014|Euskalkiak=SQL-85, SQL-88, [[SQL-91]], [[SQL:1999]], [[SQL:2003]], [[SQL:2006]], [[SQL:2008]], [[SQL:2011]], [[SQL:2016]]|isuri_egin_du=[[Agena (lenguaje de programación)|Agena]], [[Common Query Language|CQL]], [[Language Integrated Query|LINQ]], [[Windows PowerShell]]<ref>{{cita web|url=https://arstechnica.com/business/news/2005/10/msh.ars/4|título=A guided tour of the Microsoft Command Shell|fechaacceso=4 de agosto de 2020|apellido=Paul|nombre=Ryan|fecha=24 de octubre de 2005|sitioweb=Ars Technica|idioma=inglés}}</ref>}}
'''SQL''' (ingelesez '''Structured Query Language'''; gaztelaniaz, '''lenguaje de consulta estructurada''') domeinu espezifikoko lengoaia da, [[Datu-base erlazional|datu-base erlazionalak]] kudeatzeko, sistemetako informazioa administratzeko eta berreskuratzeko erabiltzen da. Ezaugarri nagusietako bat aljebra maneiatzea da, eta kontsultak egiteko kalkulu erlazionala. Izan ere, [[Datu-base|datu-baseetako]] informazioa modu errazean berreskuratzeko eta horietan aldaketak egiteko erabiltzen da,
 
Jatorriz aljebra erlazionalean eta kalkulu erlazionalean oinarrituta dago, SQL [[datuak definitzeko lengoaia]] bat da, ere datuak manipulatzeko lengoaia da eta gainera datuak kontrolatzeko lengoaia da. SQLren irismenaren barruan sartzen dira datuak txertatzea da, [[Kontsulta lengoaia|kontsultak]] egitea, eguneratzeak eta ezabatzea, eskemak sortzea eta aldatzea eta datuetarako sarbidea kontrolatzea. SQL ere, batzuetan, adierazpen-lengoaia gisa deskribatzen da, eta elementu prozesalak ere baditu.
 
== SQL-ren ezaugarri orokorrak ==
 
 
 
SQL datu-baseetan sartzeko lengoaia da, harreman-sistemen malgutasuna eta potentzia ustiatzen ditu, horren ondorioz, eragiketa ugari egiteko aukera ematen digu.
 
Maila handiko edo prozedura gabeko hizkuntza adierazlea denez, oinarri teoriko sendoari esker eta erregistro-multzoak maneiatzekoa erabilita, [[Kodifikatzaile|kodifikazioan]] produktibitate handia eta objektuetara orientatzea ahalbidetzen du.
 
 
 
'''Datuak definitzeko lengoaia:''' SQLren LDDk komandoak ematen ditu erlazio-eskemak definitzeko, erlazioak ezabatzeko eta erlazio-eskemak aldatzeko.
 
'''Datuak manipulatzeko lengoaia interaktiboa''': SQLren DMLk kontsulta-lengoaiak barne hartzen ditu, aljebra erlazionalean zein tuplen kalkulu erlazionalean oinarrituta.
 
'''Osotasuna:''' SQLren LDDk datu-basean biltegiratutako datuek bete beharreko osotasun-murrizketak zehazteko komandoak barne hartzen ditu.
 
'''Ikuspegiak definitzea:''' LDDk bistak definitzeko komandoak ditu.
 
'''Transakzioen kontrola:''' SQLk transakzio baten hasiera eta amaiera zehazteko komandoak ditu.
 
'''SQL txertatua eta dinamikoa:''' horrek esan nahi du programazio-lengoaietan SQL jarraibideak sar daitezkeela, hala nola: C++, C, Java, PHP, COBOL, Pascal eta Fortran.
 
'''Baimena:''' LDDk komandoak ditu harremanetarako eta ikustaldietarako sarbide-eskubideak zehazteko.
 
==== Datu motak ====
Hona hemen SQLren oinarrizko datu mota batzuk:
 
* '''Varchar:''' letraz, zenbakiz eta karaktere bereziz osatutako hitz-katea jasotzen du.
* '''INT''' da SQL Server-en balio osoen datu mota nagusia. Zenbaki osoak zeinuarekin edo zeinurik gabe auki ditzazkegu.
* '''Date:''' egutegiko data bat, urtea (lau zifrakoa), hilabetea eta eguna jasotzen dituena.
* '''Time:''' eguneko ordua ordu minutu segundotan (aurrez zehaztutako balioa 0 da).
 
==== Optimizazioa ====
 
 
 
SQL lengoaia adierazlea da. Hau da, zer nahi den zehazten du, eta ez nola lortu, beraz, sententzia batek ez du exekuzio ordenatu bat jarraitu behar.
 
Barneko exekuzio ordenatu bat sekuentzia batean eragin larria izan dezake SGBD- an, horregatik beharrezkoa da optimizazio bat egitea ejekuzioa egin aurretik. Askotan, idizeen erabilerak kontsulta-sententzia bizkortzen du, baina datuen eguneratzea moteltzen du. Aplikazioaren erabileraren arabera lehentasuna emango zaio indexatutako sarbideari edo informazioa azkar eguneratzeari. Optimizazioa nabarmen aldatzen da datu-baseko motor bakoitzean, eta faktore askoren mende dago.
 
Datu-base modernoen sistemek kontsultak optimizatzeko osagai bat dute. SQL kontsulta bat gauzatzeko plan posibleen azterketa zehatza egiten du, eta kontsulta aurrera eramateko eraginkorrena aukeratzen du.
 
== Datuen Definizio Lengoaia (DDL) ==
Datuak definitzeko lengoaia (ingelesez Data Definition Language edo ddl) datu-baseko objektuen egitura aldatzeaz arduratzen dena da. Datu-basean dauden datuak gordetu, taulak aldatu, ezabatu edo definitzeko aginduak barne hartzen ditu. Oinarrizko lau eragiketa daude: CREATE, ALTER, DROP eta TRUNCATE.
 
==== CREATE (Sortu) ====
Komando honek datu-basearen dauden objektuak sortzeko aukera ematen du, gainera datu-base berriak, taulak, bistak eta biltegiratutako prozedurak sortzeko balio du.
 
===== Adibidea(Tabla bar sortu) =====
<syntaxhighlight lang="sql">
CREATE TABLE bezeroak;
</syntaxhighlight>
 
==== ALTER (Taula bati zutabea eranstea) ====
Komando honek taula edo objektu baten egitura aldatzeko aukera ematen du, ere taula bati eremuak gehitu/kendu dezake, gainera eremu baten mota aldatu, taula bati indizeak gehitu/kendu, trigger bat aldatu, etab.
 
===== Adibidea =====
<syntaxhighlight lang="sql">
ALTER TABLE ikasleak ADD urtea INT UNSIGNED;
</syntaxhighlight>
 
==== DROP (Ezabatu) ====
Komando honek objektu bat ezabatzen du datu-basetik. Taula, bista, aurkibidea, trigger, funtzioa, prozedura edo edozein objektu izan daiteke. ALTER sententziarekin konbina daiteke.
 
===== Adibidea ( Taula bat ezabatu) =====
<syntaxhighlight lang="sql">
DROP TABLE ikasleak;
</syntaxhighlight>
 
==== TRUNCATE (Tronkatu) ====
Komando hau taulei bakarrik aplikatzen zaie, eta zehaztutako taularen eduki osoa ezabatzea da bere funtzioa. DELETE komandoaren gaineko abantaila, taulako eduki guztia ezabatu nahi dugunean, batez ere taula oso handia denean, askoz azkarragoa dela da, . Desabantaila da TRUNCATEk erabiltzeak taularen objetu guztiak erabat ezabatu nahi direnean bakarrik balio duela da, ezin baita WHERE klausula onartu.
 
===== Adibidea (Tabla bat erabat ezabatu) =====
<syntaxhighlight lang="sql">
TRUNCATE TABLE bezeroak;
</syntaxhighlight>
 
== Datuak manipulatzeko lengoaia DML (Data Manipulation Lenguage) ==
 
==== Definizioa ====
Datuak manipulatzeko lengoaia bat (Data Manipulation Language edo DML ingelesez) datu-baseak kudeatzeko sistemak ematen duen lengoaia bat da, eta erabiltzaileei aukera ematen die datuak kontsultatzeko edo manipulatzeko.
 
Datuak manipulatzeko lengoaiarik ezagunena SQL da gaur egun, datu-base erlazional batean datuak berreskuratzeko eta manipulatzeko erabiltzen dena.
 
==== SELECT (Aukeratu) ====
SELECT sententziak aukera ematen digu datu-baseko taula batean gordetuta dauden datuak kontsultatzeak
 
===== Funtsezko forma =====
<syntaxhighlight lang="sql">
SELECT [{ALL|DISTINCT}]
<izena_eremua>[, <izena_eremua>...]
 
FROM {<izena_tabla>|<izena_bista>}[,
{<izena_tabla>|<izena_bista>}...]
 
[WHERE <condizioa> [{AND|OR} <condizioa>...]]
 
[GROUP BY <izena_eremua>[, <izena_eremua>...]]
 
[HAVING <condizioa> [{AND|OR} <condizioa>...]]
 
[ORDER BY {<izena_eremua>|<indize_eremua>} [{ASC|DESC}][,
{<izena_eremua>|<indize_iremua>} [{ASC|DESC}]]];
</syntaxhighlight>
 
 
 
 
'''SELECT'''
 
Gako hitza, exekutatu nahi dugun SQL sententzia hautaketa dela adierazten duena.
 
'''ALL'''
 
Adierazten du balio guztiak hautatu nahi ditugula. Lehenetsitako balioa da, eta ez da ia inoiz zehazten.
 
'''DISTINCT'''
 
Adieraztu du balio desberdinak bakarrik hautatu nahi ditugula.
 
'''FROM'''
 
Adieraztu du datuak berreskuratzeko erabili nahi dugun taula (edo taulak). Taula bat baino gehiago badaude, "Kontsulta konbinatua" edo "join" deitzen zaio kontsulta erabili behar da. Kontsulta konbinatuetan, beharrezkoa da konbinazio-baldintza bat aplikatzea WHERE klausula baten bidez.
 
'''WHERE'''
 
Itzuliko diren datuak balditza bat bete beharko dute, WHERE zehazte duguna zehazki. AND eta OR eragile logikoak onartzen ditu.
 
'''GROUP BY'''
 
Zehazten du zein talde ematen zaien datuei. Funtzio agregatuekin konbinatuta erabiltzen da beti.
 
'''HAVING'''
 
baldintza bat zehazten du, eta baldintza hori bete behar da kontsultak datuak itzul ditzan. WHEREren antzeko funtzionamendua du, baina kontsultak itzulitako emaitzei aplikatuta. GROUP BYrekin batera aplikatu behar da beti, eta bertan jasotako eremuei buruzkoa izan behar du baldintzak.
 
'''ORDER BY'''
 
Emaitzan adierazitako zutabeen arabera ordenatuta aurkezten du. Ordena ASC (goranzko ordena) eta DESC (beheranzko ordena) erabiliz adieraz daiteke. Lehenetsitako balioa ASC da
 
==== Adibidea ====
Autoen taula kontsultatzeko eta matrikula, marka, modeloa, kolorea, kilometro_kopurua, plaza-kopurua eremuak berreskuratzeko, kontsulta hau egin behar dugu. Datuak markaren eta ered
 
uaren arabera ordenatuta itzuliko dira, goitik beherako zerrendan, txikienetik handienera. FROM gako-hitzak adierazten du datuak Autoak taulatik berreskuratuko direla..<syntaxhighlight lang="sql">
SELECT
matriulka,
marka,
modeloa,
kolorea,
kilometro_kopurua,
plaza_kopurua
FROM
autoak
ORDER BY
marka,
modeloa;
</syntaxhighlight>Izartxoaren erabilerak adierazten du kontsultak taulan dauden eremu guztiak itzultzea nahi ditugula, eta datuak markaren eta ereduaren arabera ordenatuta itzuliko dira.<syntaxhighlight lang="sql">
SELECT *
FROM
autoak
ORDER BY
marka,
modeloa;
</syntaxhighlight>
 
===== '''WHERE klausula (non)''' =====
WHERE klausula SELECT sententzia baten emaitza iragazteko aukera ematen digun jarraibidea da. Normalean ez dugu taulan dagoen informazio guztia lortu nahi, momentu horretan erabilgarri izango zaigun informazioa bakarrik nahi dugulako. Where klausulak datuak iragazten ditu kontsultak itzuli aurretik. WHERE klausulan testu mota bat sartu nahi dugunean, balioa komatxo sinpleen artean sartu beharko
 
dugu.
 
Gure adibidean, auto jakin bat kontsultatu nahi dugu; horretarako, WHERE klausula bat gehituko dugu. Klausula horrek baldintza bat edo batzuk zehaztu ditzake, SELECT sententzian itzuliko diren datoak baldintza bete beharko dute. Kasu horretan, kontsultak matrikula duen autoaren datuak bakarrik itzuliko ditu, MF-234-ZD matrikula duen autoaren datuak edo FK-938-ZL matrikula soilik. <syntaxhighlight lang="sql">
SELECT
matrikula,
marka,
modeloa,
colorea,
kilometro_zenbakia,
plaza_kopurua
FROM
autoak
WHERE
matrikula = 'MF-234-ZD'
OR matrikula = 'FK-938-ZL';
</syntaxhighlight>Hurrengo kontsultak DISTINCT baldintzapekoa erabiltzen du. Autoen taulako marka- eta modelo-eremuek osatutako balio desberdin guztiak itzuliko dizkigu.<syntaxhighlight lang="sql">
SELECT DISTINCT marka, modeloa FROM autoak;
</syntaxhighlight>
 
===== ORDER BY klausula (Ordernar por) =====
ORDER BY klausulak aukera ematen digu datuak zein ordenatan itzuliko diren zehazteko. Ordena goranzko edo beheranzko moduan zehaztu dezakegu ASC eta DESC gako-hitzen bidez. Ordena zutabean definitutako datu motaren araberakoa da, zenbakizko eremu bat horrela ordenatuko da, eta alfanumeriko bat A-tik Z-ra ordenatuko da, nahiz eta edukia zenbakizkoa izan. Kontsulta egitean zehazten ez bada aurrez zehaztutako balioa ASC izango da.
 
Adibideak:<syntaxhighlight lang="sql">
SELECT
matrikula,
marka,
modeloa,
kolorea,
kilometro_zenbakia,
plaza_zenbakia
FROM
autoak
ORDER BY
marka ASC,
modeloa DESC;
</syntaxhighlight>Adibide honek autoen taulako matrikulak, markak, modeloak, koloreak, kilometroa_zenbakia eta plaza_zenbakia hautatzen ditu, markaren eta modeloaren eremuen arabera ordenatuz, goranzko marka eginez eta beheranzko eredua jarriz.<syntaxhighlight lang="sql">
SELECT
matrikula,
marka,
modeloa,
kolorea,
kilometro_zenbakia,
plaza_zenbakia
FROM
autoak
ORDER BY 2;
 
</syntaxhighlight>
 
 
Adibide honek autoen taulako matrikula, marka, modeloa, kolorea, kilometro_zenbakia eta plaza_zenbakia eremu guztiak hautatzen ditu, marka-eremuaren arabera ordenatuz, bigarren lekuan agertzen baita SELECT osatzen duten eremuen zerrendan.
 
==== INSERT (Txertatu) ====
SQLren INSERT sententzia batek datu-base erlazional batean taula bati (eta bakar bati) erregistro bat edo gehiago gehitzen dizkio.
 
===== Funtsezko forma =====
<syntaxhighlight lang="sql" line="1">
INSERT INTO
tabla_izena(zutableA, [zutabeB, ...])
VALUES
('balorea1', ['balorea2', ...]);
 
-- baita horrela erabi daiteke:
INSERT INTO tabla_izena VALUES ('balore1', 'balorea2');
</syntaxhighlight>Zutabe eta balio kopuruak berdinak izan behar dira. Zutabe bat zehazten ez bada, lehenetsita dagoen balioa esleituko zaio. INSERT sententziak zehaztutako balioek (edo inplizituek) aplikatu beharreko murrizketa guztiak bete beharko dituzte. Sintaxi-errore bat gertatzen bada edo murrizketaren bat urratzen bada, ez da ilara gehituko eta errore bat itzuliko da.
 
===== Adibidea =====
<syntaxhighlight lang="sql">
INSERT INTO telefono_agenda (izena, zenbakia)
VALUES ('Roberto Jeldrez', 4886850);
</syntaxhighlight>Taularen datu guztiak definitzen ditugunean, sentzia motza erabili daiteke.<syntaxhighlight lang="sql">
INSERT INTO tabla_izena VALUES ('balore1', ['balore2', ...]);
</syntaxhighlight>Adibidea jakinda 'izena' eta 'zenbakia' zutabe bakarrak direla telefono_agenda tablan.<syntaxhighlight lang="sql">
INSERT INTO telefono_agenda
VALUES ('Johnny Aguilar', 080473968);
</syntaxhighlight>
 
==== UPDATE (Eguneratu) ====
SQLren UPDATE sententzia bat, taula batean dauden erregistro multzo baten balioak aldatzeko erabiltzen da.
 
===== Adibidea =====
<syntaxhighlight lang="sql">
UPDATE My_table SET field1 = 'updated value' WHERE field2 = 'N';
</syntaxhighlight>
 
==== DELETE (ezabatu) ====
SQLren DELETE sententzia batek taula batean dauden erregistro bat edo gehiago ezabatzen ditu.
 
==== Oinarrizko forma ====
<syntaxhighlight lang="sql">
DELETE FROM WHERE taula_zutabea1 = 'Balorea1'
</syntaxhighlight>
 
===== Adibidea =====
<syntaxhighlight lang="sql">
DELETE FROM nire_tabla WHERE zutabea2 = 'N';
</syntaxhighlight>
 
== Datu baseak kudeatzeko sistemak ==
SQL datu-baseak kudeatzeko sistema erabilienak, ordena alfabetikoan, honako hauek dira:
 
* DB2
* Firebird
* HSQL
* Informix
* InterBase
* MariaDB
* Microsoft SQL Server
* MySQL
* Oracle
* PostgreSQL
* PervasiveSQL
* SQLite
* Sybase ASE
 
== Erreferentziak ==
 
# Paul, Ryan (24 de octubre de 2005). «A guided tour of the Microsoft Command Shell»<ref>{{Erreferentzia|izena=Ryan|abizena=Paul|izenburua=A guided tour of the Microsoft Command Shell|hizkuntza=en-us|data=2005-10-24|url=https://arstechnica.com/information-technology/2005/10/msh/|aldizkaria=Ars Technica|sartze-data=2021-10-12}}</ref>. ''Ars Technica'' (en inglés). Consultado el 4 de agosto de 2020.
# ↑ Morteo, Bocalandro, Francisco, Nicolás (2004). ''Un enfoque práctico de SQL''. Ediciones Cooperativas. <small>[[:es:ISBN|ISBN]] [[:es:Especial:FuentesDeLibros/987-1076-61-4|987-1076-61-4]]</small>.
# ↑ EF Codd; A relational model of data for large shared data banks. Comm. ACM, 13 (1970), pp. 377-387.
# ↑ [https://sigmod.org/#standards Eisenberg et al.: ''SQL:2003 Has Been Published'']''.''
# ↑ [https://web.archive.org/web/20110628130925/http://iablog.sybase.com/paulley/2008/07/sql2008-now-an-approved-iso-international-standard/ Aprobación de SQL 2008].
# ↑ Chapple, Mike. [https://www.thoughtco.com/sql-fundamentals-1019780 «SQL Fundamentals»]. En About.com, ed. ''Databases''. Consultado el 17 de octubre de 2015.
# ↑ Saltar a:<sup>'''''a'''''</sup> <sup>'''''b'''''</sup> Rockoff, Larry (2011). Course Technology/Cengage Learning, ed. ''The language of SQL''.
# ↑ Morteo, Bocalandro., Francisco, Nicolás (2004). ''Un enfoque práctico de SQL''. Ediciones cooperativas. <small><nowiki>ISBN 987-1076-61-4</nowiki></small>.
# ↑ [https://www.postgresql.org/about/ «About PostgreSQL»]. ''PostgreSQL 9.1 official website''. PostgreSQL Global Development Group. 2012. Consultado el 8 de junio de 2016. «PostgreSQL prides itself in standards compliance. Its SQL implementation strongly conforms to the ANSI-SQL:2008 standard».
# ↑ [https://docs.oracle.com/cd/B28359_01/server.111/b28286/toc.htm «Basic Elements of Oracle SQL: Data Types».] ''Oracle Database SQL Language Reference 11g Release 2 (11.2)''. Oracle Database Documentation Library. Redwood City, CA: Oracle USA, Inc. Consultado el 8 de junio de 2016.
 
 
 
'''SQL''' edo '''S'''tructured '''Q'''uery '''L'''anguage (Egituratutako Kontsulten Lengoaia) [[datu-base erlazionalak|datu-base erlazionalekin]] eragiketak (datuak idatzi, aldatu eta jaso) egiteko [[programazio-lengoaia|programazio lengoaia]] bat da. [[American National Standards Institute|ANSI]]/[[International Organization for Standardization|ISO]] [[estandar (argipena)|estandar]] bat da.