You are on page 1of 40

IntroduccinaSQL

BloqueIII(Prcticas) Bloque III (Prcticas) InformticaBsica Curso2012/2013

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

Podrahabermstablasparaalmacenarlosdatosdelosempleados, departamentos,proyectos,pedidos,facturas,etc. departamentos proyectos pedidos facturas etc

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;

Enestecasolasfilasrepetidasseeliminandelresultadofinal. 3.Obtenerlospuestosdetrabajoycomisiones,sinfilasrepetidas. SELECTDISTINCTjob,comm FROMemp; FROM DISTINCTseaplicaalconjuntodetodaslasexpresionesdeSELECT(eneste j y , j ) casoajob ycomm,nosloajob)

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;

5.Obtenerlacomisin,departamentoynombredelosempleadoscuyosalarioseainferior a1900,ordenndolospordepartamentoenordencreciente,yporcomisinenorden decrecientedentrodecadadepartamento:


SELECTcomm,deptno,ename FROMemp WHEREsal<1900 ORDERBYdeptno,comm DESC;

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;

SELECT* FROMemp p WHEREsal >=1500ANDsal <=3000;


(predicadocompuesto"AND"loveremosmsadelante)

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)

SELECTename FROMemp WHEREjob IN (CLERK,SALESMAN);

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)

SELECT SUBSTR(prueba,2,4); rueb . SELECT UPPER(prueba); PRUEBA UPPER( prueba );

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;

2.Modificaelvalordevariascolumnasparalasfilasquecumplenlacondicin. 2 M difi l l d i l l fil l l di i


UPDATEemp SETcomm =110,deptno =10 WHEREcomm ISNULL;

Borrado(DELETE)
SentenciaDELETE Permiteborrarfilasdeunatabla. Formato:
DELETEFROM<tabla> [WHERE<predicado>]

Ejemplos: 1.Borralasfilasquecumplanlacondicinindicada.
DELETEFROMemp DELETE FROM emp WHEREsal>2000;

2.Sinoseponeningunacondicin,osea,sinoexistelasubclusulaWHERE,elborrado afectaatodaslasfilasdelatabla. f d l fil d l bl


DELETEFROMemp;

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));

You might also like