Академический Документы
Профессиональный Документы
Культура Документы
IntroduccinallenguajeSQL
Contenidos
IntroduccinallenguajeSQL SentenciaSELECT:listaSELECT,FROM,WHERE Sentencia SELECT: lista SELECT FROM WHERE CREATETABLE INSERT,DELETEyUPDATE INSERT, DELETE y UPDATE
Bibliografa
Beaulieu,A.:AprendeSQL.AnayaOReilly.2006. Rivero,E.yotros:IntroduccinalSQLparausuariosy e o, y ot os t oducc a SQ pa a usua os y programadores.ThomsonParaninfo.2002.
Conceptosprevios
DefinicindeBasedeDatos(BD)
Coleccindedatosrelacionados,entendiendoqueundatoesun Coleccin de datos relacionados, entendiendo que un dato es un hechoconocidoquesepuederegistraryquetieneunsignificado explcito.
SistemadeGestindeBasesdeDatos(SGBD)
Sistemasoftwaredepropsitogeneralquefacilitalosprocesosde Sistema software de propsito general que facilita los procesos de definicin,construccinymanipulacindebasesdedatospara distintasaplicaciones.
Conceptosprevios
LosdatosdeunaBDsealmacenanentablas. Los datos de una BD se almacenan en tablas.
Ejemplo:TablaClientes
DNI/NIF 11.222.333A 22.111.333B 33.222.111C Nombre Francisco Prez AntonioGarca JosGonzlez Direccin C/.Mayor, 1 / y , C/.Mayor, 2 C/. Paseo,3 Telfono 600200300 600400500 600600700
LenguajeSQL(I)
SQL(StructuredQueryLanguage) SQL (Structured Query Language)
LenguajeparaaccederalosdatosdeunSGBDrelacional Crear,consultar,ymodificardatos Crear consultar y modificar datos Lenguajeestndar(ISO/IEC) T d l SGBD l i TodoslosSGBDrelacionalesutilizanestelenguaje l ili l j Normalmenteconpequeasvariaciones Evolucin SEQUEL(StructuredEnglishQueryLanguage).IBMSystemR SQL86oSQL1.ANSIeISO.Revisadoen1989 d SQL92,SQL:1999,SQL:2003,...
LenguajeSQL(II)
SQL(StructuredQueryLanguage) SQL (Structured Query Language)
DataManipulationLanguage(DML) SELECT:consultassobrelosdatos SELECT: consultas sobre los datos INSERT:insercindedatos DELETE:borrados DELETE: borrados UPDATE:actualizaciones Data Definition Language (DDL) DataDefinitionLanguage(DDL) CREATETABLE:creacindetablas DROPTABLE:eliminacindetablas DROP TABLE: eliminacin de tablas
LenguajeSQL(yIII)
Otrosaspectos Otros aspectos
PosibilidaddeincluirSQLenlenguajescomoC,Java,Pascal,etc. L Lenguajedeclarativo,noprocedural j d l ti d l Aspectosdecontrol(seguridad,transacciones,concurrencia,etc.) Lenguajeintuitivoparatodotipodeusuarios
Entornodeprcticas
PostgreSQL
SGBDfree&opensource(www.postgresql.com) S id P t SQL i t l d ServidorPostgreSQLinstaladoenbelesar.cc.fi.udc.es b l fi d Clientepsqlenordenadoresdeprcticas
Accesodesdelaboratorios1.1y1.2
Loginypassworddeservizos.udc.es
$psqldibhbelesar Unombre.usuarioW ib=>SELECT*FROMemp;
Entornodeprcticas
Accesodesdelaboratoriowifi 2.1W Acceso desde laboratorio wifi 2 1W
AccesoporescritorioremotoNoMachineNX H t Host:cova01.cc.fic.udc.es ( 01 fi d (equipodereferencia) i d f i ) https://10.10.7.30/cecafiMonitor/nx/freeslots Loginypassworddeservizos.udc.es Clientepsql:login ypassworddeservizos.udc.es
$psqldibhbelesar Unombre.usuarioW ib=>SELECT*FROMemp;
InstalacinenUbuntu Instala in en Ub nt
https://help.ubuntu.com/10.04/serverguide/C/postgresql.html
ClientePSQL
Comandosbsicosen psql Comandos bsicos en psql
Vertodaslastablasdelabasededatos
Muestralosnombresdelastablasquehayenlabasededatos.
ib=>\d
DescripcindeunatabladelaBD(ejemplo,emp)
Muestratodaslascolumnasdelatablayeltipodedatosdecadaunadeellas. y p
ib=>\demp
Salirdepsqlyvolveralterminal
ib=>\q
Tablasdelosejemplos
Trabajamossobredostablasdeejemplo: Trabajamos sobre dos tablas de ejemplo:
Empleados(tablaemp)
Contienedatosdelosempleadosdeunaempresa Cdigodeempleado,nombre,puestodetrabajo,cdigodel jefe,fechadecontratacin,salario,comisinycdigode jefe fecha de contratacin salario comisin y cdigo de departamento
Departamentos(tabladept) ( bl d )
Contienedatosdelosdepartamentosdeunaempresa Cdigodeldepartamento,nombreylocalizacin
Tablasdelosejemplos
ib=>\demp Table public.emp Column |Type |Modifiers ++ empno |numeric(4,0)|not null ename |character varying(10)| job |character varying(9)| mgr | numeric(4 0) |numeric(4,0)| | hiredate |date | sal|numeric(7,2)| comm |numeric(7,2)| deptno | numeric(2 0) |numeric(2,0)| | Indexes: "emp_pkey"PRIMARYKEY,btree (empno) Foreign key Foreignkey constraints: "emp_deptno_fkey"FOREIGNKEY(deptno)REFERENCESdept(deptno)"emp_mgr_fkey" FOREIGNKEY(mgr)REFERENCESemp(empno) Referenced by: TABLE emp CONSTRAINT emp_mgr_fkey FOREIGN KEY (mgr) REFERENCES emp(empno) TABLE "emp"CONSTRAINT"emp mgr fkey"FOREIGNKEY(mgr)REFERENCESemp(empno)
Tablasdelosejemplos
ib=>SELECT*FROMemp; empno |ename |job |mgr |hiredate |sal|comm |deptno +++++++ 7839|KING|PRESIDENT||19811117|5000.00||10 7566|JONES|MANAGER|7839|19810402|2975.00||20 7566 | JONES | MANAGER | 7839 | 19810402 | 2975 00 | | 20 7902|FORD|ANALYST|7566|19811203|3000.00||20 7369|SMITH|CLERK|7902|19801217|800.00||20 7698|BLAKE|MANAGER|7839|19810501|2850.00||30 7499|ALLEN|SALESMAN|7698|19810220|1600.00|300.00|30 7499 | ALLEN | SALESMAN | 7698 | 19810220 | 1600 00 | 300 00 | 30 7521|WARD|SALESMAN|7698|19810222|1250.00|500.00|30 7654|MARTIN|SALESMAN|7698|19810928|1250.00|1400.00|30 7782|CLARK|MANAGER|7839|19810609|2450.00||10 7788|SCOTT|ANALYST|7566|19821209|3000.00||20 7788 | SCOTT | ANALYST | 7566 | 19821209 | 3000 00 | | 20 7844|TURNER|SALESMAN|7698|19810908|1500.00|0.00|30 7876|ADAMS|CLERK|7788|19830112|1100.00||20 7900|JAMES|CLERK|7698|19811203|950.00||30 7934|MILLER|CLERK|7782|1982 01 23|1300.00||10 7934 | MILLER | CLERK | 7782 | 19820123 | 1300 00 | | 10 (14rows)
Tablasdelosejemplos
ib=>\ddept Table public.dept Column |Type |Modifiers ++ deptno | d |numeric(2,0)|not null i ( ) | ll dname |character varying(14)| loc |character varying(13)| Indexes: d "dept_pkey"PRIMARYKEY,btree (deptno) Referenced by:TABLE"emp"CONSTRAINT"emp_deptno_fkey"FOREIGNKEY(deptno) REFERENCESdept(deptno) ib=>SELECT*FROMdept; deptno |dname |loc ++ 10|ACCOUNTING|NEWYORK 20|RESEARCH|DALLAS 30|SALES|CHICAGO 40|OPERATIONS|BOSTON 40 | OPERATIONS | BOSTON (4rows)
Tiposdedatos
Cadacolumnadeunatablatieneuntipodedatoasignado,quedeterminalos p g ,q valoresposiblesylasoperacionespermitidassobreesosvalores. Tiposdedatosnumricos
INTEGERoINT,SMALLINT FLOAT,REAL,DOUBLEPRECISION DECIMAL(m,n)oDEC(m,n)oNUMERIC(m,n) DECIMAL(m,n) o DEC(m,n) o NUMERIC(m,n)
Tiposdedatosalfanumricos
CHAR(n)oCHARACTER(n) CHAR(n) o CHARACTER(n) VARCHAR(n)
mdxitos, ndecimais
Tiposdedatostemporales
DATE(YEAR,MONTH,DAY) TIME(HOUR,MINUTE,SECOND) TIMESTAMP
Valoresnulos
Valoresnulos ElvalornuloNULL representalaausenciadeinformacin,obienpordesconocimiento deldato,obienporquenoprocede. Debediferenciarsedecualquierotrovalor,entreelloselvalor0sisetratadeundato Debe diferenciarse de cualquier otro valor, entre ellos el valor 0 si se trata de un dato numrico,ydelacadenadecaracteresvaca,siesuntipodedatodetipocarcter. Unacolumnadeunatablapodradmitirvaloresnulos(NULL)ono(NOTNULL).Por defectoadmitenulos.
CREATETABLEemp( empno numeric(4,0)NOTNULL, ename character varying(10)NOTNULL, h i ( ) job character varying(9), mgr numeric(4,0), hiredate date, salnumeric(7,2), comm numeric(7,2), deptno numeric(2,0) )
Expresiones
Unaexpresineslaformulacindeunasecuenciadeoperaciones,osea,unacombinacin deoperadores,operandosyparntesis,que,cuandoseejecuta,devuelveunnicovalor de operadores operandos y parntesis que cuando se ejecuta devuelve un nico valor comoresultado. Losoperandospuedenserconstantes,nombresdecolumna,funciones,otrasexpresionesy otroselementos. Eltipodedatodecadaoperandodeunaexpresindebeserelmismo.Siunoperandoes nulo,elresultadotambinesnulo. Operadoresnumricos:+ */ Operadoresalfanumricos:|| Ejemplos: 3 Casa A||B ENAME SAL*1.5 SAL+COMM
SELECT
LasentenciaSELECTpermiteseleccionaruobtenerdatosdeunao p variastablas. p ( y ) Sintaxiscompleta(noveremosGROUPBYyHAVING):
SELECT [DISTINCT|ALL]{*|<expr1>,<expr2>],} FROM <tabla1> <tabla2> <tabla1>,<tabla2> WHERE <condicin_where> GROUPBY<group_by_expr1>[,<group_by_expr2>,] HAVING <condicin having> <condicin_having> ORDERBY<expr_orderby1>[,<expr_orderby2>,]
SELECT
Elordendeejecucindelasclusulasylafuncin decadaunaes:
1. FROM (obligatoria) Determinalatablaotablasdelasqueseseleccionarnlosdatos. 2.WHERE (opcional) Indicaunpredicadoqueexpresalacondicinquedebecumplircadafilaqueinterviene g q p enlaconsulta.Aslaconsultaserestringealasfilasquecumplenlacondicin. 3.SELECT (obligatoria) Incluyelosdatosquesesolicitanenlaconsulta,normalmenteunaovariasexpresiones. Alternativamenteun* i di l i * indicatodaslascolumnasdelastablasinvolucradas.Sihubiese d l l d l bl i l d Si h bi filasrepetidas,pordefectoaparecen,peronolohacensiseincluyeDISTINCT. 4.ORDERBY(opcional) Permitedeterminarelcriteriodeordenacindelasfilasdelatablaresultado.Sinella obtendremoslasmismasfilas,peropuedequeenrdenesdistintos,segnlaestrategia seguidaporelSGBDparaextraerlosdatos.
ASC :ordenascendente(pordefecto) DESC :orden descendente
SELECT
Primerosejemplos
1. Obtenertodoslosdatosdelatabladeempleados: SELECT* FROMemp; 2.Obtenerloscdigosynombresdelosempleados: SELECTempno,ename FROMemp; 3.Obtenertodoslosdatosdelatabladeempleados,ordenandoelresultado porelnombredelosempleados: SELECT* SELECT * FROMemp ORDERBYename; SELECT * FROM emp ORDER BY ename ASC;
Filasrepetidas
LasfilasrepetidassepuedeneliminardelresultadoconDISTINCT:
1.Obtenertodoslospuestosdetrabajo.
SELECTjob FROMemp;
2.Obtenertodoslospuestosdetrabajo,sinfilasrepetidas.
SELECTDISTINCT job SELECT DISTINCT j b FROMemp;
Predicados
Predicadoselementales
UnpredicadoexpresaunacondicinycomoenBDrelacionalesexisteunalgicadetres valores,verdadero,falsoynulo,laevaluacindeunacondicinpuedeserTRUE,FALSE oNULL. o NULL UnpredicadopuedeaparecerenunaclusulaWHEREevaluandolacondicindecada filadelastablasinvolucradas,deformaqueslolasfilasquecumplenlacondicin permaneceninvolucradasenlaconsulta,ignorandolasrestantes. Lospredicadosmselementalessonlosdecomparacin,quecomparandos expresionessegnunoperadordecomparacin,quepuedeser: expresiones segn un operador de comparacin que puede ser: <<==!=<>>=> Algunosejemplos Algunos ejemplos
Predicados
1.Obtenerloscdigosynombresdelosempleadosquetrabajaneneldepartamento10:
SELECTempno,ename FROMemp FROM emp WHEREdeptno =10;
2.Seleccionartodoslosdatosdeldepartamento40:
SELECT* FROMdept WHEREdeptno =40;
3.Seleccionarlosdatosdelosempleadoscuyosueldoesmayorque1000:
SELECT* FROMemp FROM emp WHEREsal>1000;
Predicados
4. Obtenerlosdatosdelosdepartamentosordenadosporelnombredeldepartamento:
SELECT* FROMdept FROM dept ORDERBYdname;
Predicadodevalornulo
Predicadodevalornulo(ISNULL) Predicado de valor nulo (IS NULL)
Lospredicadosdecomparacinnosirvenparadeterminarlosvaloresnulos. Porejemplo,noesvlidoCOMM NULL porque sera discernir si un valor Por ejemplo, no es vlido COMM =NULLporqueseradiscernirsiunvalor quepuedeserdesconocidoesigualaotrotambindesconocido. Formato:<expr1>IS[NOT]NULL Ejemploincorrecto: SELECT* FROMemp WHEREcomm WHERE comm =NULL; NULL; Ejemplocorrecto: SELECT* FROMemp co S U ; WHEREcomm ISNULL;
PredicadoBETWEEN
PredicadoderangoopredicadoBETWEEN Predicado de rango o predicado BETWEEN
Comparasilosvaloresdeunaexpresinestnonoentrelosvaloresde otrasdos. otras dos. Formato:<expr1>[NOT]BETWEEN <expr2>AND <expr3> SELECT* FROMemp WHEREsalBETWEEN 1500AND 3000;
Predicadodepertenenciaaconjunto
Predicadodepertenenciaaconjunto(IN) Predicado de pertenencia a conjunto (IN)
Compruebasielvalordeunaexpresincoincideconalgunodelosvalores incluidosenunalistadeexpresiones. incluidos en una lista de expresiones. Formato:<expr1>[NOT]IN (<expr2>[,<expr3>,]) SELECT* FROMemp WHEREdeptno WHERE deptno IN (10,30,40);
SELECT* FROMemp WHEREdeptno =10ORdeptno =30 ORdeptno =40;
(predicadocompuestoOR"loveremosmsadelante)
PredicadoLIKE
Predicadodecorrespondenciaconunpatrnomodelo p p
Compruebasielvalordeunaexpresinalfanumricasecorrespondeconun modelo.Elmodelopuedeincluirdoscaracteresqueactancomocomodines: _ % Indicaunnicocarcter,incluidoelblanco. Indicaunacadenadecaracteresdecualquierlongitud, Indica una cadena de caracteres de cualquier longitud incluidalacadenavaca.
Formato:<expr1>[NOT]LIKE Formato: <expr1> [NOT] LIKE <modelo> SELECT* FROMemp WHEREename LIKE%NE% SELECT* FROMemp WHEREename LIKE_____
Predicadoscompuestos
Sonlaunindedosomspredicadossimplesmediantelosoperadores lgicosAND,OR yNOT.Alexistirunalgicadetresvalores,debemos considerarelefectodelvalorNULL.
SELECT* FROMemp WHEREsal>1000AND WHERE sal > 1000 AND job =CLERK; CLERK; SELECTename FROMemp WHEREsal>1000OR comm >500;
Funciones
Puedenformarpartedeunaexpresin.Constandeunnombrey p p y puedenunoomsargumentosentreparntesis.Elresultado es unvalor. Algunosejemplos:
Funcionesnumricas
ABS(x) POWER(x,y) SQRT(x) OTRAS:MAX,MIN,AVG, OTRAS: MAX MIN AVG
Funcionesalfanumricas
UPPER(s) LOWER(s) SUBSTR(s,x,y)
COALESCE
Funcintilparatrabajarconvaloresnulos. Funcin til para trabajar con valores nulos.
Formato:COALESCE(<expr1>,<expr2>) Funcionamiento: Evalalaexpresin1.SisuvaloresdistintodeNULL,devuelvedichovalor.En casocontrario,evalalaexpresin2ydevuelveelresultado. , p y SELECTCOALESCE(sal+comm,sal) FROMemp; p; Enesteejemploseevalalasumadelsalarioylacomisindecadaempleado. SielresultadoesdistintodeNULL,sedevuelvedichoresultado.Sielresultado Si el resultado es distinto de NULL se devuelve dicho resultado Si el resultado esNULL(debidoaquelacomisindelempleadoesNULL),seevalaelsalario decadaempleadoysedevuelveesevalor.
(cuandohayvaloresnulosenexpresiones)
Insercin(INSERT)
SentenciaINSERT Permiteintroducirfilasenunatabla. Formato:
INSERTINTO<tabla>[(col1,col2,)] {VALUES(<valorcol1>,<valorcol2>,)/SentenciaSELECT}
Ejemplos: 1.Aadeunafilaalatablaempcondatosentodassuscolumnas,incluidounvalornulo.
INSERTINTOemp INSERT INTO emp VALUES(7777,ANA,ANALISTA,7369,15/01/05,2500,NULL,10);
2.Aadeunafilaalatablacondatosenlascolumnasreferenciadasenlalista.
INSERTINTOemp(empno,ename,sal) VALUES(8888,Juan,2000);
Insercin(INSERT)
3.AadefilasconlasentenciaSELECT.
INSERTINTOemp_new SELECTempno,ename,sal,comm FROMemp_old WHEREdeptno =10ANDsal>1500;
Actualizacin(UPDATE)
SentenciaUPDATE Permitemodificardatosencolumnasexistentes. Formato:
UPDATE<tabla> SET<columna1>=<expresin1>[,<columna2>=<expresin2>,] [WHERE<predicado>]
Ejemplos: 1.Modificaelvalordelacolumnasalentodaslasfilasdelatablaemp.
UPDATEemp SETsal=sal+100;
Borrado(DELETE)
SentenciaDELETE Permiteborrarfilasdeunatabla. Formato:
DELETEFROM<tabla> [WHERE<predicado>]
Ejemplos: 1.Borralasfilasquecumplanlacondicinindicada.
DELETEFROMemp DELETE FROM emp WHEREsal>2000;
Creacindetablas(CREATETABLE)
SentenciaCREATETABLE Crealaestructuradeunatabla. Formato(simplificado):
CREATETABLE<tabla>( <definicindecolumna1>, ..., <definicindecolumnan>, <definicinderestriccin1>, ..., <definicinderestriccinn> <definicin de restriccin n> );
Enladefinicindelatributoocolumnapuedeaparecer:
<nombredecolumna><tipodedato>[<restriccindecolumna>]
Creacindetablas(CREATETABLE)
Restricciones Lasrestriccionesseusanparadeclararenelmodelorelacionallascondicionesquelos datoscumplenenelmundoreal. Puedenserdediversotipo(valordefectivo,valornulo,claveprimaria,clavefornea,de ( unicidad,decomprobacindeunacondicin,etc.) Valor defectivo de una columna Se expresa con DEFAULT <valor> Valordefectivodeunacolumna.SeexpresaconDEFAULT<valor> Valor(defectivo)nuloononulodeunacolumna.Seexpresacon[NOT]NULL.
CREATETABLEemp1( empno NUMERIC(4)NOTNULL, ename VARCHAR(15), mgr NUMERIC(4) DEFAULT 7500 NUMERIC(4)DEFAULT7500, deptno NUMERIC(2) );
Creacindetablas(CREATETABLE)
Restriccindeclaveprimaria Indicalacondicindequeunconjuntodecolumnastomavaloresdiferentesparacada filayningunodeellosesnulo.SeexpresamediantePRIMARYKEY. TodarestriccinpuedenombrarseincluyendoCONSTRAINT<nombrerestriccin>
CREATETABLEemp2( empno NUMERIC(4) PRIMARY KEY NUMERIC(4)PRIMARYKEY, ename VARCHAR(15), mgr NUMBER(4), deptno NUMERIC(2)); CREATETABLEemp2( empno NUMERIC(4) NUMERIC(4), ename VARCHAR(15), mgr NUMBER(4), deptno NUMERIC(2), PRIMARYKEY(empno));
CREATETABLEemp2( CREATETABLEemp2( empno NUMERIC(4), p ( ), empno NUMERIC(4) p ( ) CONSTRAINTcp_emp2PRIMARYKEY, ename VARCHAR(15), mgr NUMBER(4), ename VARCHAR(15), deptno NUMERIC(2), mgr NUMBER(4), CONSTRAINTcp_emp2PRIMARYKEY(empno)); CONSTRAINT cp emp2 PRIMARY KEY (empno)); deptno NUMERIC(2));
Creacindetablas(CREATETABLE)
Restriccindeunicidad Indicaqueunconjuntodeatributosnopuedetenervaloresigualesendistintasfilas.
CREATETABLEemp2( CREATE TABLE emp2 ( empno NUMERIC(4)PRIMARYKEY, ename VARCHAR(15)UNIQUE, mgr NUMBER(4), deptno NUMERIC(2)); CREATETABLEemp2( p ( empno NUMERIC(4)PRIMARYKEY, ename VARCHAR(15), mgr NUMBER(4), deptno NUMERIC(2) NUMERIC(2), CONSTRAINTunq_emp2UNIQUE(ename));
RestriccindecomprobacinoCHECK Permitendeclararunacondicinquedebencumplirunoomsatributos.
CREATETABLEemp2( empno NUMERIC(4) PRIMARY KEY NUMERIC(4)PRIMARYKEY, ename VARCHAR(15), mgr NUMBER(4), deptno NUMERIC(2), CONSTRAINTsal_emp2CHECK(sal>1000));
Creacindetablas(CREATETABLE)
Restriccindeclavefornea Unconjuntodeatributosesunaclaveforneasisusvaloressecorrespondenconlosde otroconjuntodeatributosqueesclavecandidataenotratabla.
CREATETABLEemp2( empno NUMERIC(4)PRIMARYKEY, ename VARCHAR(15) VARCHAR(15), mgr NUMBER(4), deptno NUMERIC(2), CONSTRAINTfk_deptno FOREIGNKEY(deptno)REFERENCESdept2(deptno));