31
Introdução a Banco de Dados Alfredo Fonseca Junior 1

bd_apostila_v1.2

Embed Size (px)

DESCRIPTION

Apostila de banco de dados

Citation preview

  • IntroduoaBancodeDadosAlfredoFonsecaJunior

    1

  • IndiceIntroduodeBancodeDados..................................................................................................................3

    FunesinternascomunsemBancosdeDados...............................................................................6DML:DataManipulationLanguage...............................................................................................7DDL:DataDefinitionLanguage....................................................................................................7DCLLinguagemdeControledeDados........................................................................................8DTLLinguagemdeTransaodeDados......................................................................................8DQLLinguagemdeConsultadeDados........................................................................................8HabilitaracessoaAPEX.................................................................................................................13AcessandoApex..............................................................................................................................14SELECTFROM.............................................................................................................................22Exerccios:SELECTFROM...........................................................................................................23Soluo:SELECTFROM..............................................................................................................23WHEREANDORBERBY............................................................................................................24Exerccios:WHERE.......................................................................................................................25Soluo:WHERE...........................................................................................................................25BETWEEN....................................................................................................................................26LIKE...............................................................................................................................................26INeSubSELECT...........................................................................................................................26JOIN................................................................................................................................................27

    2

  • IntroduodeBancodeDados

    TabelaTodososdadosdeumbancodedadosrelacional(BDR)soarmazenadosemtabelas.

    Umatabelaumasimplesestruturadelinhasecolunas.Emumatabela,cadalinhacontmummesmoconjuntodecolunas.

    Funcionario

    cpf nome Datanasc

    35103778988 EduardoSilva 05/05/80

    35158687455 JoseSousa 07/07/70

    45226558977 PedroLima 06/06/88

    45223669888 JorgeSoares 07/07/77

    RegistroCadalinhaformadaporumalistaordenadadecolunasrepresentaumregistro,outupla.Os

    registrosnoprecisamconterinformaesemtodasascolunas,podendoassumirvaloresnulosquandoassimsefizernecessrio.

    Colunas(ouatributos)

    AscolunasdeumatabelasotambmchamadasdeAtributos.Aoconjuntodevaloresqueumatributopodeassumirchamasedomnio.Porexemplo:emumcampodotiponumrico,serosomentearmazenadosnmeros.

    ChavePrimriaConjuntosdeumoumaiscampos,cujosvaloresnuncaserepetemequepodemserusadascomo

    umndice.Emchavesprimriasnopodehavervaloresnulosnemrepeties.ChamadatambmdePrimarykey(PK).Quandoachaveprimriasimples,ouseja,formadaporumnicocampodatabela,esse

    camponopodeterdoisoumaisregistrosdemesmovalor,etambmnopodeconternenhumregistronulo.Seachaveprimriacomposta,ouseja,formadapormaisdeumcampo,osvaloresdecadacampopodemserepetir,masnoacombinao

    3

  • ModeloRelacionalModeloRelacionalevitareplicaodedados.

    TabelaBairro

    #id nome cidade

    1 VilaMadalena SoPaulo

    2 VilaMafra SaoPaulo

    3 VilaInvernada SAOPAULO

    4 Centro saopaulo

    5 Ipiranga SaoPulo

    Normalizando

    TabelaCidade

    #id nome

    1 SoPaulo

    2 SoCarlos

    3 SoBernardo

    4 Osasco

    TabelaBairro#id nome cidade_id

    1 VilaMadalena 1

    2 VilaMafra 1

    3 VilaX 3

    4 Centro 1

    5 Centro 4

    4

  • ChaveestrangeiraNoexemploanteriorocampocidade_iddaTabelabairroreferenciaocampoiddaTabela

    cidade.Entocidade_idumachaveestrangeira(FK:forwardkey).

    Abaixotemosumoutroexemploderelacionamentoentreastabelasfuncionarioedepartamento.

    depto_idachaveestrangeira.

    Funcionario

    #id cpf nome Datanasc depto_id

    1 35103778988 EduardoSilva 05/05/80 1

    2 35158687455 JoseSousa 07/07/70 3

    3 45226558977 PedroLima 06/06/88 2

    4 45223669888 JorgeSoares 07/07/77 2

    Departamento

    #id nome descricao

    1 Administrativo Departamentoquecontrola

    2 Desenvolvimento DesenvolvimentodeSoftware

    3 InfraEstrutura DepartamentodeInfraEstrutura

    4 Design Departamentoresponsvelpelodesignartstico

    5

  • SGBDSistemaGerenciadordeBasedeDados(SGBD)oconjuntodeprogramasdecomputador

    (softwares)responsveispelogerenciamentodeumabasededados.Oprincipalobjetivoretirardaaplicaoclientearesponsabilidadedegerenciaroacesso,manipulaoeorganizaodosdados.

    OSGBDdisponibilizaumainterfaceparaqueosseusclientespossamincluir,alterarouconsultardados.EmbancosdedadosrelacionaisainterfaceconstitudapelasAPIsoudriversdoSGBD,queexecutamcomandosnalinguagemSQL.

    SGBD =SistemaGerenciadordeBasedeDados

    SGBDR =SistemaGerenciadordeBancodeDadosRelacional

    DBMS =DatabaseManagementSystem

    RDBMS =RelationalDatabaseManagementSystem

    Exemplosdeaplicativosdebancodedadosso:

    MySQL

    PostgreSQL

    Firebird

    MicrosoftSQLServer

    Oracle

    Informix

    DB2

    Sybase.

    FunesinternascomunsemBancosdeDados

    Tabelas

    Views

    Indexes

    StoredProcedures

    Triggers

    6

  • SQL

    StructuredQueryLanguage,ouLinguagemdeConsultaEstruturadaouSQL,umalinguagemdepesquisadeclarativaparabancodedadosrelacional(basededadosrelacional).MuitasdascaractersticasoriginaisdoSQLforaminspiradasnalgebrarelacional.

    DML:DataManipulationLanguageADMLumsubconjuntodalinguagemusadaparainserir,atualizareapagardados.

    Comandos:

    *INSERTusadaparainserirumregistro(formalmenteumatupla)aumatabelaexistente.

    *UPDATEparamudarosvaloresdedadosemumaoumaislinhasdatabelaexistente.

    *DELETEpermiteremoverlinhasexistentesdeumatabela.

    DDL:DataDefinitionLanguageADDLpermiteaoutilizadordefinirtabelasnovaseelementosassociados.Amaioriados

    bancosdedadosdeSQLcomerciaistemextensesproprietriasnoDDL.

    OscomandosbsicosdaDDLsopoucos

    *CREATEcriaumobjeto(umaTabela,porexemplo)dentrodabasededados.

    *DROPapagaumobjetodobancodedados.

    AlgunssistemasdebancodedadosusamocomandoALTER,quepermiteaousurioalterarumobjeto,porexemplo,adicionandoumacolunaaumatabelaexistente.

    outroscomandosDDL:

    *ALTERTABLE

    *CREATEINDEX

    *ALTERINDEX

    *DROPINDEX

    *CREATEVIEW

    7

  • *DROPVIEW

    DCLLinguagemdeControledeDados

    DCLcontrolaosaspectosdeautorizaodedadoselicenasdeusuriosparacontrolarquemtemacessoparaveroumanipulardadosdentrodobancodedados.

    DuaspalavraschavesdaDCL:

    *GRANTautorizaaousurioexecutarousetaroperaes.

    *REVOKEremoveourestringeacapacidadedeumusuriodeexecutaroperaes.

    outroscomandosDCL:

    *ALTERPASSWORD

    *CREATESYNONYM

    DTLLinguagemdeTransaodeDados

    *BEGINWORK(ouSTARTTRANSACTION,dependendododialetoSQL)podeserusadoparamarcarocomeodeumatransaodebancodedadosquepodesercompletadaouno.

    *COMMITenviatodososdadosdasmudanaspermanentemente.

    *ROLLBACKfazcomqueasmudanasnosdadosexistentesdesdeoltimoCOMMITouROLLBACKsejamdescartadas.

    COMMITeROLLBACKinteragemcomreasdecontrolecomotransaoelocao.Ambosterminamqualquertransaoabertaeliberamqualquercadeadoligadoadados.NaausnciadeumBEGINWORKouumadeclaraosemelhante,asemnticadeSQLdependentedaimplementao.

    DQLLinguagemdeConsultadeDados

    Emboratenhaapenasumcomando,aDQLapartedaSQLmaisutilizada.Ocomando

    8

  • SELECTpermiteaousurioespecificarumaconsulta("query")comoumadescriodoresultadodesejado.Essecomandocompostodevriasclusulaseopes,possibilitandoelaborarconsultasdasmaissimplessmaiselaboradas.

    9

  • Transao

    umconjuntodeprocedimentosqueexecutadonumbancodedados,queparaousuriovistocomoumanicaao.

    Aintegridadedeumatransaodependede4propriedades,conhecidascomoACID.

    *AtomicidadeoTodasasaesquecompemaunidadedetrabalhodatransaodevemserconcludascomsucesso,paraquesejaefetivada.Qualqueraoqueconstituifalhanaunidadedetrabalho,atransaodeveserdesfeita(rollback).Quandotodasasaessoefetuadascomsucesso,atransaopodeserefetivada(commit).

    *ConsistnciaRegrasdeintegridadedosdadossoasseguradas.

    *IsolamentooCadatransaofuncionacompletamentepartedeoutrasestaes.Todasasoperaessopartedeumatransaonica.Oprincipioquenenhumaoutratransao,operandonomesmosistema,podeinterferirnofuncionamentodatransaocorrente(ummecanismodecontrole).Outrastransaesnopodemvisualizarosresultadosparciaisdasoperaesdeumatransaoemandamento.

    *DurabilidadeoSignificaqueosresultadosdeumatransaosopermanentesepodemserdesfeitossomenteporumatransaosubseqente.Porexemplo:todososdadosestatusrelativosaumatransaodevemserarmazenadosnumrepositriopermanente,nosendopassveisdefalhaporumafalhadehardware.

    Naprtica,algunsSGBDsrelaxamnaimplementaodestaspropriedadesbuscandodesempenho.

    ControledeconcorrnciaummtodousadoparagarantirqueastransaessejamexecutadasdeumaformaseguraesigamasregrasACID.OsSGBDdevemsercapazesdeassegurarquenenhumaaodetransaescompletadascomsucesso(committedtransactions)sejaperdidaaodesfazertransaesabortadas(rollback).

    Umatransaoumaunidadequepreservaconsistncia.Requeremos,portanto,quequalquerescalonamentoproduzidoaoseprocessarumconjuntodetransaesconcorrentementesejacomputacionalmenteequivalenteaumescalonamentoproduzindoexecutandoessastransaesserialmenteemalgumaordem.Dizsequeumsistemaquegaranteestapropriedadeasseguraaseriabilidade.

    10

  • OracleSGBDSurgiunofimdosanos70,quandoLarryEllisonvislumbrouumaoportunidadequeoutras

    companhiasnohaviampercebido,quandoencontrouumadescriodeumprottipofuncionaldeumbancodedadosrelacionaledescobriuquenenhumaempresatinhaseempenhadoemcomercializaressatecnologia.

    EllisoneoscofundadoresdaOracleCorporation,BobMinereEdOates,perceberamquehaviaumtremendopotencialdenegciosnomodelodebancodedadosrelacionaltornandoassimamaiorempresadesoftwareempresarialdomundo.

    Lderdemercado.OOracle9ifoipioneironosuporteaomodeloweb.OOracle10g,maisrecente,sebaseianatecnologiadegrid.RecentementeforalanadooOracle11gqueveiocommelhoriasemrelaoaoOracle10g.

    ExpressEditionXEGratuito,podeserinstaladoemmquinascomqualquernmerodeprocessadores(umbancode

    dadospormquina),PORMirselimitara4GBdedados,1GBdememriaeutilizarapenasumaCPU.

    11

  • SQLPLUS

    ConsoleparaacessaroservidorOracle.

    12

  • OracleApplicationExpress(APEX)AplicaowebquepossibilitaacessoaoServidordeBancodeDados.

    OBS:AAPEXpodeserutilizadaparageraraplicaescustomizadaswebqueacessamoB.D.,ousejaoapexumaaplicaowebquegeraaplicaesweb.

    HabilitaracessoaAPEXInicialmentepodeseacessaraaplicaowebapexsomentedoservidor.Parahabilitaracessoremoto:Administraton ManageHTTPAccess

    13

  • AcessandoApexLogandocomoDatabaseAdministratorhttp://xxx.xxx.xxx.xxx:8080/apexuser:systempassword:xxx

    14

    http://xxx.xxx.xxx.xxx:8080/apex

  • CriandoTabelasHome ObjectBrowser Create Table

    next

    15

  • finishcreateClicandoemSQLObservamosaDDLgerada

    CREATE TABLE "DEPTO" ( "ID" NUMBER, "NOME" VARCHAR2(40) NOT NULL ENABLE, "DESCRICAO" VARCHAR2(60), CONSTRAINT "DEPTO_PK" PRIMARY KEY ("ID") ENABLE )/

    CREATE OR REPLACE TRIGGER "BI_DEPTO" before insert on "DEPTO" for each row begin select "DEPTO_SEQ".nextval into :NEW.ID from dual; end;

    /ALTER TRIGGER "BI_DEPTO" ENABLE/

    16

  • Home ObjectBrowser Create Table

    17

  • clicaremadd

    next

    next finish create

    18

  • ClicandoemSQLvemosaDDLgerada

    CREATETABLE"FUNCIONARIO"( "ID"NUMBER,

    "PRIMEIRO_NOME"VARCHAR2(4000)NOTNULLENABLE,"SOBRENOME"VARCHAR2(4000),"CPF"VARCHAR2(4000)NOTNULLENABLE,"DATA_NASC"DATENOTNULLENABLE,"DEPTO_ID"NUMBER,CONSTRAINT"FUNCIONARIO_PK"PRIMARYKEY("ID")ENABLE,CONSTRAINT"FUNCIONARIO_FK"FOREIGNKEY("DEPTO_ID")REFERENCES"DEPTO"("ID")ENABLE

    )/

    CREATEORREPLACETRIGGER"BI_FUNCIONARIO"beforeinserton"FUNCIONARIO"foreachrowbeginselect"FUNCIONARIO_SEQ".nextvalinto:NEW.IDfromdual;end;

    /ALTERTRIGGER"BI_FUNCIONARIO"ENABLE/

    19

  • InsertINSERTINTOdeptoVALUES(depto_seq.nextval,'deptoX','deptodeX')

    UpdateUPDATEdeptosetdescricao='departamento__X'WHEREdepto.nome='deptoX'

    PreferencialmenteutilizarPKaosereferiraumregistroespecifico.

    DeleteDELETEFROMdeptoWHEREdepto.nome='deptoX'

    20

  • Consultas(Select)

    EstaediodoOraclevemcomumconjuntodetabelaspopuladascomdadosqueformamumBancodeDadosdeexemplosobrerecursoshumanos(hr).

    Utilizaremosestastabelasnosexercciosdeconsultas.

    Parautilizarobancoderecursoshumanosquevemnooraclexenecessriologarcomousuriohr.

    Antesdelogarcomohrnecessriodesbloquearesteusurio:

    1Estandologadocomosystem,cliqueemAdministration>DataBaseUsers ManageUsers 2CliqueemHR

    3Coloquehrcomosenhanasduascaixasdetexto4ColoqueostatusUnlocked5CliqueemAlterUser

    Agoravocpodeefetuarlogout,elogarnosistemacomousuriohr(senhahr)

    21

  • SELECTFROM

    Selecionar3camposdetodosempregados:SELECTfirst_name,last_name,emailFROMemployees;

    SelecionarTodoscamposdetodosempregados:SELECT*FROMemployees

    Selecionar3campos,sendoummontadoemruntime:SELECTfirst_name,last_name,CONCAT(email,'@xxx.com')ascool_mailFROMemployees

    22

  • Exerccios:SELECTFROM

    1)Elaborarumaconsultaquetragaoprimeironomedecadafuncionario.

    2)Elaborarumaconsultaquetragatodososcamposdecadafuncionario.

    3)Elaborarumaconsultaquetragaumcampomontadoemruntimequesejaajunodoprimeiroedoultimonomeseparadoporespao.(Ex:MickeyMouse)

    ?

    Soluo:SELECTFROM

    1)SELECTfirst_nameFROMemployees

    2)SELECT*FROMemployees

    3)SELECTCONCAT(CONCAT(first_name,''),last_name)FROMemployees

    23

  • WHEREANDORBERBY

    SelecionartodoscamposdetodosfuncionariosdesobrenomeKing:SELECT*FROMemployeesWHERElast_name='King'

    Selecionarprimeironomedetodosprogramadores:SELECTfirst_nameFROMemployeesWHEREJOB_ID='IT_PROG'

    Selecionarprimeironomedetodososnoprogramadoresemordemalfabtica:SELECTfirst_nameFROMemployeesWHEREJOB_ID'IT_PROG'ORDERBYfirst_name

    Selecionartodoscamposdetodosfuncionarioscontratadosdia23nov99ouaps:SELECT*FROMemployeesWHEREhire_date>=TO_DATE('11/23/1999','MM/DD/YYYY')

    24

  • Exerccios:WHERE

    1)Selecionartodoscamposdetodosfuncionarioscontratadosdiaaps24/mar/2000.

    2)Selecionartodoscamposdetodosfuncionarioscontratadosantesdoano2000,ordenandopordatadecontrataoeprimeironome.

    ?

    Soluo:WHERE1)SELECT*FROMemployeesWHEREhire_date>TO_DATE('03/24/2000','MM/DD/YYYY')ORDERBYhire_date

    2)SELECT*FROMemployeesWHEREhire_date

  • BETWEENBetweensignifica'entre'.Asextremidadessoinclusas.

    Selecionarprimeironomedetodoscontratadosentre3/fev/2000e23/fev/2000emordemdadatadecontratao:

    SELECTfirst_name,hire_dateFROMemployeesWHEREhire_dateBETWEENTO_DATE('02/03/2000','MM/DD/YYYY')ANDTO_DATE('02/23/2000','MM/DD/YYYY')ORDERBYhire_date

    LIKESobrenomecomeandocom'Mar'SELECTfirst_name,last_nameFROMemployeesWHERElast_nameLIKE'Mar%'

    INeSubSELECTSelecionartodospresidentes,vicepresidenteseassistentesadministrativos:SELECT*FROMemployeeswherejob_idIN('AD_PRES','AD_VP','AD_ASST')

    Selecionartodosgerentes(lderdepartamental):SELECT*FROMemployeesWHEREemployee_idIN(SELECTmanager_idFROMDEPARTMENTs)

    26

  • JOINFazendojunodatabeladefuncionrioseadedepartamentos

    SELECT*FROMemployeesINNERJOINdepartmentsONemployees.department_id=departments.department_id

    SELECTemployees.first_name,employees.last_name,departments.department_nameFROMemployeesINNERJOINdepartmentsONemployees.department_id=departments.department_id

    UtilizandoALIAS,apelidosparaastabelas:SELECTe.first_name,e.last_name,d.department_nameFROMemployeeseINNERJOINdepartmentsdONe.department_id=d.department_id

    TabeladepartmentsColumnName DataType Nullable Default PrimaryKeyDEPARTMENT_ID NUMBER(4,0) No yesDEPARTMENT_NAME VARCHAR2(30) No MANAGER_ID NUMBER(6,0) Yes LOCATION_ID NUMBER(4,0) Yes

    TabelaemployeesColumnName DataType Nullable Default PrimaryKeyEMPLOYEE_ID NUMBER(6,0) No yesFIRST_NAME VARCHAR2(20) Yes LAST_NAMEVARCHAR2(25) No EMAIL VARCHAR2(25) No PHONE_NUMBER VARCHAR2(20) Yes HIRE_DATE DATE No JOB_ID VARCHAR2(10) No SALARY NUMBER(8,2) Yes COMMISSION_PCTNUMBER(2,2) Yes MANAGER_ID NUMBER(6,0) Yes DEPARTMENT_ID NUMBER(4,0) Yes

    27

  • ExportaodeMetadados(DDL)PensandoemexportaraddldatabeladeEstados(estadosdafederao).

    Home Utilities GenerateDDL CreateScriptSelecionarSchemasaveasascriptFileselecionaratabelagenerateddl

    CREATETABLE"ESTADOS"("ABREV"VARCHAR2(2),"NOME"VARCHAR2(50),CONSTRAINT"ESTADOS_PK"PRIMARYKEY("ABREV")ENABLE)/

    28

  • ExportaodeDadosHome Utilities DataLoad/Unload Unload UnloadtoXMLEscolherSchema,TabelaeColunas

    DropandotabelaHome sql SqlComand DROPTABLEestados

    Tabelaestadosinteirafoideletada.

    ImportandoMetaDados(DDL)Home SQL SQLScripts OU

    rodarcomandoSQLnoHome>SQL SQLCommandCREATETABLE"ESTADOS"("ABREV"VARCHAR2(2),"NOME"VARCHAR2(50),

    CONSTRAINT"ESTADOS_PK"PRIMARYKEY("ABREV")ENABLE)/

    29

  • ImportandoDadosUtilities DataUnload/Load xml escolherschemaetabelachoosefile

    DadosImportados!

    SELECT*FROMestados

    ABREV NOMERJ RiodeJaneiroSP SoPauloSC SantaCatarina

    Nesteexemploatabelaestavavazia,senoestivesseosdadosdoarquivoseriamacrescidosaosdadosprexistentes.

    30

  • Links:

    TutorialSQL:http://www.w3schools.com/sql/default.asp

    DocumentaoOracle:http://www.oracle.com/pls/xe102/homepage

    deMySQLparaOracle:http://www.raelcunha.com/oracle.php

    Tablespaces:http://eduardolegatti.blogspot.com/2008/03/introduoaoconceitodetablespaces.html

    WorkingwithOtherSchemaObjectshttp://download.oracle.com/docs/cd/B28359_01/server.111/b28301/admqs_other_schema.htm

    InstalaoOracle10gR2CentOS5x8664:http://www.vivaolinux.com.br/artigo/InstalandoOracle10gR2noCENTOS5x8664

    InstalaoOracle10gnoUbuntu:https://help.ubuntu.com/community/Oracle10g

    31

    https://help.ubuntu.com/community/Oracle10ghttp://www.vivaolinux.com.br/artigo/Instalando-Oracle-10g-R2-no-CENTOS-5-x8664http://download.oracle.com/docs/cd/B28359_01/server.111/b28301/admqs_other_schema.htmhttp://eduardolegatti.blogspot.com/2008/03/introduo-ao-conceito-de-tablespaces.htmlhttp://www.raelcunha.com/oracle.phphttp://www.oracle.com/pls/xe102/homepagehttp://www.w3schools.com/sql/default.asp

    Introduo de Banco de DadosFunes internas comuns em Bancos de DadosDML : Data Manipulation LanguageDDL : Data Definition LanguageDCL - Linguagem de Controle de Dados DTL - Linguagem de Transao de Dados DQL - Linguagem de Consulta de Dados Habilitar acesso a APEXAcessando ApexSELECT FROMExerccios: SELECT FROMSoluo: SELECT FROMWHERE AND ORBER BYExerccios: WHERESoluo: WHEREBETWEEN LIKEIN e SubSELECTJOIN