Informáca para as Ciências e Engenharias Versão : C ...
Transcript of Informáca para as Ciências e Engenharias Versão : C ...
![Page 1: Informáca para as Ciências e Engenharias Versão : C ...](https://reader031.fdocumentos.com/reader031/viewer/2022012411/616a96593a83592ab862e97b/html5/thumbnails/1.jpg)
Informá(caparaasCiênciaseEngenhariasVersão:C
(EngenhariaCivil)Aula8
PedroBarahona2016/17
![Page 2: Informáca para as Ciências e Engenharias Versão : C ...](https://reader031.fdocumentos.com/reader031/viewer/2022012411/616a96593a83592ab862e97b/html5/thumbnails/2.jpg)
Sumário
l Introduçãoaossistemasdebasesdedados:
§ Modelorelacional
§ SQL(StructuredQueryLanguage)
§ SQLeMATLAB
§ Umexemploprá(co
Nota: Alguns slides adaptados de N. Dell, J. Lewis, Computer Science Illuminated, 4th Ed
10Maio2017 9:IntroduçãoàsBasesdeDados:SQLeMATLAB
![Page 3: Informáca para as Ciências e Engenharias Versão : C ...](https://reader031.fdocumentos.com/reader031/viewer/2022012411/616a96593a83592ab862e97b/html5/thumbnails/3.jpg)
BasesdeDados
l BasedeDados:Conjuntodedadosestruturado.§ Semelhanteavetoresdeestruturasvistosnaaulapassada.
l Bastantecomumparaguardardados.§ Permite usar os dados em diferentes programas (até usando
diferenteslinguagens).
l Inclui:§ Suporteaoarmazenamentopermanente(emficheiros).§ Operações para criar, inserir, consultar/procurar, alterar, apagar,
etc.
10Maio2017 9:IntroduçãoàsBasesdeDados:SQLeMATLAB
![Page 4: Informáca para as Ciências e Engenharias Versão : C ...](https://reader031.fdocumentos.com/reader031/viewer/2022012411/616a96593a83592ab862e97b/html5/thumbnails/4.jpg)
SistemasdeGestãodeBasesdeDados
l SistemadeGestãodeBasesdeDados(SGBD)
§ (Databasemanagementsystem,DBMS)
§ Combinaçãodeso_wareedados:
• Basededados§ Ficheirosestruturados,comosdados.
• Motordebasededados§ So_wareparaconsultaemodificaçãodosdados.
• Esquemadebasededados:§ Especificaçãodaorganizaçãológicadosdados.
10Maio2017 9:IntroduçãoàsBasesdeDados:SQLeMATLAB
![Page 5: Informáca para as Ciências e Engenharias Versão : C ...](https://reader031.fdocumentos.com/reader031/viewer/2022012411/616a96593a83592ab862e97b/html5/thumbnails/5.jpg)
Ficheiros de suporte da base
de dadosUtilizador/Programador
Esquema da base de dados
Motor da
base dedados
10Maio2017 9:IntroduçãoàsBasesdeDados:SQLeMATLAB
SistemasdeGestãodeBasesdeDados
![Page 6: Informáca para as Ciências e Engenharias Versão : C ...](https://reader031.fdocumentos.com/reader031/viewer/2022012411/616a96593a83592ab862e97b/html5/thumbnails/6.jpg)
SGBDs-ModeloRelacional
l Registo(objecto,en(dade)§ Conjuntodeatributos(campos)relacionados§ AnálogoàsestruturasemMatlab.
l Campo(ouatributo)
§ Umdoscamposdeumregistodabasededados.
l Tabela
§ Conjuntoderegistos.§ AnálogoaovectordeestruturasemMatlab.
l Basededadosrelacional§ Conjuntodetabelasrelacionadas
10Maio2017 9:IntroduçãoàsBasesdeDados:SQLeMATLAB
![Page 7: Informáca para as Ciências e Engenharias Versão : C ...](https://reader031.fdocumentos.com/reader031/viewer/2022012411/616a96593a83592ab862e97b/html5/thumbnails/7.jpg)
l TabeladeFilmesdeumabasededadosDBvideos
Exemplo–TabeladeFilmes
Como identificar um registo?
10Maio2017 9:IntroduçãoàsBasesdeDados:SQLeMATLAB
![Page 8: Informáca para as Ciências e Engenharias Versão : C ...](https://reader031.fdocumentos.com/reader031/viewer/2022012411/616a96593a83592ab862e97b/html5/thumbnails/8.jpg)
TabelaseChaves
l AtabelaFilmestemquatrocampos
§ FiIme_id
§ Titulo
§ Tipo
§ Classificacao
l Chaveprimária(primarykey)
§ Um campo ou combinação de campos que iden(ficainequivocamenteesseregisto
§ AchaveprimáriaéFilme_id.
10Maio2017 9:IntroduçãoàsBasesdeDados:SQLeMATLAB
![Page 9: Informáca para as Ciências e Engenharias Versão : C ...](https://reader031.fdocumentos.com/reader031/viewer/2022012411/616a96593a83592ab862e97b/html5/thumbnails/9.jpg)
l TabeladeClientesdeumabasededadosDBvideos
Exemplo–TabeladeClientes
Chave primária: Cliente_id
10Maio2017 9:IntroduçãoàsBasesdeDados:SQLeMATLAB
![Page 10: Informáca para as Ciências e Engenharias Versão : C ...](https://reader031.fdocumentos.com/reader031/viewer/2022012411/616a96593a83592ab862e97b/html5/thumbnails/10.jpg)
l Comoserelacionamosclientescomosfilmesquealugam?
§ AtravésdeumatabeladeAlugueres!
l AtabelaAluguerestemduaschavesexternas:
§ FiIme_id,quealigaàtabelafilmes
§ Cliente_id,quealigaàtabelaclientes
§ Aluguer_idéasuachaveprimária
Exemplo–TabeladeAlugueres
10Maio2017 9:IntroduçãoàsBasesdeDados:SQLeMATLAB
![Page 11: Informáca para as Ciências e Engenharias Versão : C ...](https://reader031.fdocumentos.com/reader031/viewer/2022012411/616a96593a83592ab862e97b/html5/thumbnails/11.jpg)
10Maio2017 9:IntroduçãoàsBasesdeDados:SQLeMATLAB
Sumário
l Introduçãoaossistemasdebasesdedados:
§ Modelorelacional
§ SQL(StructuredQueryLanguage)
§ SQLeMATLAB
§ Umexemploprá(co
![Page 12: Informáca para as Ciências e Engenharias Versão : C ...](https://reader031.fdocumentos.com/reader031/viewer/2022012411/616a96593a83592ab862e97b/html5/thumbnails/12.jpg)
SQL
l Uma linguagem para manipular dados e efetuar perguntas(queries)sobreosdadosarmazenadosnabasededados.§ InterpretadapelomotordoSBD§ Independentedaslinguagensdeprogramação§ Usávelintera(vamentepelou(lizador
l Permite:§ Criartabelas,descrevendoosseuscampos(esquema).§ Inserir,alterareremoverregistosdastabelas.§ Fazerperguntas(interrogações).
10Maio2017 9:IntroduçãoàsBasesdeDados:SQLeMATLAB
![Page 13: Informáca para as Ciências e Engenharias Versão : C ...](https://reader031.fdocumentos.com/reader031/viewer/2022012411/616a96593a83592ab862e97b/html5/thumbnails/13.jpg)
CriaçãodeTabelasemSQL
l TabelassãocriadascomainstruçãoCREATE
emqueparaalémdonomeda tabela são iden(ficadosos seuscamposcomosrespec(vos(pos.
l Tipicamente os (pos u(lizados são numéricos, textuais ouBooleanos(BOOL).
CREATE TABLE nome-tabela ( Campo-1 tipo-1, Campo-2 tipo-2, ... Campo-n tipo-n );
10Maio2017 9:IntroduçãoàsBasesdeDados:SQLeMATLAB
![Page 14: Informáca para as Ciências e Engenharias Versão : C ...](https://reader031.fdocumentos.com/reader031/viewer/2022012411/616a96593a83592ab862e97b/html5/thumbnails/14.jpg)
l Exemplo: Tabela de elementos químicos com as respec(vasmassasatómicas.
§ Tiposnuméricosmaisu(lizados:• INTEGER:Inteiro;• Real:Real• DOUBLE:Realcomprecisãodupla
§ Tiposdestring:• CHAR(N):stringcomexactamenteNcaracteres.• VARCHAR(N):stringcomNcaracteresnomáximo• TEXT:stringmaislonga
• Nota:emSqlite3:étudotratadocomoTEXT
db >> CREATE TABLE Massas ( Simbolo TEXT, Massa DOUBLE); db >>
10Maio2017 9:IntroduçãoàsBasesdeDados:SQLeMATLAB
CriaçãodeTabelasemSQL
![Page 15: Informáca para as Ciências e Engenharias Versão : C ...](https://reader031.fdocumentos.com/reader031/viewer/2022012411/616a96593a83592ab862e97b/html5/thumbnails/15.jpg)
l Em SQL é indiferente escrever as palavras-chave emmaiúsculasouminúsculas.§ Noentanto,écomumescrever-seemmaiúsculas.
l Quantoaosnomesdoscamposetabelasdependedosistema.§ À cautela, é melhor escrever estes nomes de forma
consistente.
10Maio2017 9:IntroduçãoàsBasesdeDados:SQLeMATLAB
db >> CREATE TABLE Massas ( Simbolo TEXT, Massa DOUBLE); db >>
CriaçãodeTabelasemSQL
![Page 16: Informáca para as Ciências e Engenharias Versão : C ...](https://reader031.fdocumentos.com/reader031/viewer/2022012411/616a96593a83592ab862e97b/html5/thumbnails/16.jpg)
l NacriaçãodeTabelasdeveserespecificadaumachaveprimária
l A chave primária corresponde ao campo (ou combinação decampos)queiden(ficaminequivocamentecadaregisto.
§ Repe(ções (registos com a mesma chave primária) não são
permi(das(éreportadoumerro).
10Maio2017 9:IntroduçãoàsBasesdeDados:SQLeMATLAB
db >> CREATE TABLE Massas ..>> ( Simbolo TEXT, Massa DOUBLE; ..>> PRIMARY KEY(Simbolo)); db >>
CriaçãodeTabelasemSQL
![Page 17: Informáca para as Ciências e Engenharias Versão : C ...](https://reader031.fdocumentos.com/reader031/viewer/2022012411/616a96593a83592ab862e97b/html5/thumbnails/17.jpg)
l Exemplo:TabeladeFilmes
db >> CREATE TABLE Filmes ( Filme_id INTEGER, Titulo TEXT, ...>> Tipo TEXT, Classificacao TEXT, PRIMARY ...>> KEY(Filme_id) );
% Nota: A tabela é criada sem registos db >>
10Maio2017 9:IntroduçãoàsBasesdeDados:SQLeMATLAB
CriaçãodeTabelasemSQL
![Page 18: Informáca para as Ciências e Engenharias Versão : C ...](https://reader031.fdocumentos.com/reader031/viewer/2022012411/616a96593a83592ab862e97b/html5/thumbnails/18.jpg)
l Exemplo:TabeladeClientes
db >> CREATE TABLE Clientes ( Cliente_id INTEGER, Nome ...>> TEXT, Morada TEXT, Numero_cartao_credito TEXT, ...>> PRIMARY KEY(Cliente_id) ); db >>
10Maio2017 9:IntroduçãoàsBasesdeDados:SQLeMATLAB
CriaçãodeTabelasemSQL
![Page 19: Informáca para as Ciências e Engenharias Versão : C ...](https://reader031.fdocumentos.com/reader031/viewer/2022012411/616a96593a83592ab862e97b/html5/thumbnails/19.jpg)
l Exemplo:TabeladeAlugueres
db >> CREATE TABLE Alugueres ( Aluguer_id INTEGER,...>> Cliente_id INTEGER, Filme_id INTEGER,...>> Data_aluguer TEXT, Data_entrega TEXT,...>> PRIMARY KEY(Aluger_id) );db >>
10Maio2017 9:IntroduçãoàsBasesdeDados:SQLeMATLAB
CriaçãodeTabelasemSQL
![Page 20: Informáca para as Ciências e Engenharias Versão : C ...](https://reader031.fdocumentos.com/reader031/viewer/2022012411/616a96593a83592ab862e97b/html5/thumbnails/20.jpg)
EliminaçãodeTabelasemSQL
l EliminarTabela:DROP§ Apósacriaçãodeumatabelaqueporalgummo(vonãonos
interessa,porexemplo,
elapodesereliminada(comtodososregistosnale incluidos)atravésdocomandoDROP
db >> CREATE TABLE Errada (Num INTEGER, Nome TEXT);
db >> DROP TABLE Errada;
10Maio2017 9:IntroduçãoàsBasesdeDados:SQLeMATLAB
![Page 21: Informáca para as Ciências e Engenharias Versão : C ...](https://reader031.fdocumentos.com/reader031/viewer/2022012411/616a96593a83592ab862e97b/html5/thumbnails/21.jpg)
InserçãodeRegistosemSQL
l Inserirregistos:INSERT§ Um registo pode ser inserido numa tabela com a instrução
INSERT
§ Osvaloresdoscamposnesteregisto,sãoindicadosnamesmaordemdadefiniçãooriginaldoscamposnoCREATETABLE.
db >> INSERT INTO Filmes VALUES (...>> 10,"Meaning of Life","comedia","maiores de 16"); db >>
10Maio2017 9:IntroduçãoàsBasesdeDados:SQLeMATLAB
INSERT INTO tabela VALUES ( valor1, valor2, ..., valorN)
![Page 22: Informáca para as Ciências e Engenharias Versão : C ...](https://reader031.fdocumentos.com/reader031/viewer/2022012411/616a96593a83592ab862e97b/html5/thumbnails/22.jpg)
SelecçãodeRegistosemSQL
l Selecionarregistos:SELECT§ Umoumais registos podem ser selecionadosdumaoumais
tabelastabelacomainstruçãoSELECT
§ OsregistossãofiltradospelacondiçãoWHERE§ Podemserapresentadosdeumaformaordenadapelaopção
ORDERBY.
SELECT lista-campos FROM lista-tabelas WHERE condição ORDER BY campo;
10Maio2017 9:IntroduçãoàsBasesdeDados:SQLeMATLAB
![Page 23: Informáca para as Ciências e Engenharias Versão : C ...](https://reader031.fdocumentos.com/reader031/viewer/2022012411/616a96593a83592ab862e97b/html5/thumbnails/23.jpg)
l Algunsexemplos(umasótabela):
db >> SELECT * FROM Filmes; % mostra todos os registos da tabela Filmes db >> SELECT Titulo FROM Filmes WHERE Tipo = "comedia"; % mostra os títulos dos registos da tabela Filmes % cujo tipo seja "comedia" db >> SELECT Titulo, Tipo FROM Filmes ORDER BY Titulo; % mostra os campos Titulo e Tipo dos registos da tabela % Filmes ordenados alfabeticamente pelo campo Titulo
10Maio2017 9:IntroduçãoàsBasesdeDados:SQLeMATLAB
SelecçãodeRegistosemSQL
![Page 24: Informáca para as Ciências e Engenharias Versão : C ...](https://reader031.fdocumentos.com/reader031/viewer/2022012411/616a96593a83592ab862e97b/html5/thumbnails/24.jpg)
ModificaçãodeRegistosemSQL
l AinstruçãoUPDATEpermitealterarvaloresdoscamposdeumatabela,paraosregistosselecionados
db >> UPDATE Filmes SET Tipo = "drama" ...>> WHERE Titulo = "Elizabeth”;% altera todos os registos da tabela Filmes, cujo título seja "Elizabeth", alterando o valor do campo Tipo para drama.
UPDATE tabela SET campo = valor WHERE condição;
10Maio2017 9:IntroduçãoàsBasesdeDados:SQLeMATLAB
![Page 25: Informáca para as Ciências e Engenharias Versão : C ...](https://reader031.fdocumentos.com/reader031/viewer/2022012411/616a96593a83592ab862e97b/html5/thumbnails/25.jpg)
EliminaçãodeRegistosemSQL
l A instrução DELETE permite apagar todos os registos de umatabela,selecionadosporumacondição(opcional).
l Nota: Apagar os registos todos de uma tabela não elimina atabela.§ ParaofazerdeveserusadoocomandoDROP
>> DELETE FROM Filmes WHERE Nome = "Avengers";% apaga todos os registos da tabela Filmes, cujo título seja ”Avengers”.
DELETE FROM tabela WHERE condição;
10Maio2017 9:IntroduçãoàsBasesdeDados:SQLeMATLAB
![Page 26: Informáca para as Ciências e Engenharias Versão : C ...](https://reader031.fdocumentos.com/reader031/viewer/2022012411/616a96593a83592ab862e97b/html5/thumbnails/26.jpg)
SQLite
Nestecursovamosu(lizaroSQLITE
l Motordebasesdedados
l Gratuito,códigoaberto§ hrp://www.sqlite.org/
l Podemosusá-lointerac(vamentecomointerpretadordelinhadecomando.
l InterpretaSQLegereabasededados
10Maio2017 9:IntroduçãoàsBasesdeDados:SQLeMATLAB
![Page 27: Informáca para as Ciências e Engenharias Versão : C ...](https://reader031.fdocumentos.com/reader031/viewer/2022012411/616a96593a83592ab862e97b/html5/thumbnails/27.jpg)
l Paraexecutar:descarregaroexecutáveldoSQLitedehMps://sqlite.org/download.html
§ NoWindows:descarregarumdosficheirossqlite-dll-win64-x32-3180000.zipsqlite-dll-win64-x64-3180000.zip
Descomprimirecolocaroficheirosqlite3.exenapastadetrabalho
§ NoMac:descarregaroficheirosqlite-tools-osx-x86-3180000.zip
Descomprimirecolocaroficheirosqlite3napastadetrabalho
10Maio2017 9:IntroduçãoàsBasesdeDados:SQLeMATLAB
SQLite
![Page 28: Informáca para as Ciências e Engenharias Versão : C ...](https://reader031.fdocumentos.com/reader031/viewer/2022012411/616a96593a83592ab862e97b/html5/thumbnails/28.jpg)
l Para criar/u(lizar em SQLITE uma base de dados, com nomebaseDados, existente na directoria corrente, (tal como oprogramasqlite3)podeu(lizar-seaconsoladosistema(e.g.CmdnoWindowsouTerminalnoMac)eu(lizarocomando
sqlite3 baseDados
l A par(r da janela de comandos doOCTAVE deverá proceder-sesemelhantemente, mas especificando que se trata de umachamadadosistemaopera(vo(sqlite3nãoéumficheiro.m)
l No final, volta-se à janela de comandos do OCTAVE com acomandosqlite“.quit”.
10Maio2017 9:IntroduçãoàsBasesdeDados:SQLeMATLAB
>> system(‘sqlite3 exemplo.db’)
SQLite
![Page 29: Informáca para as Ciências e Engenharias Versão : C ...](https://reader031.fdocumentos.com/reader031/viewer/2022012411/616a96593a83592ab862e97b/html5/thumbnails/29.jpg)
Exemplo:
l Criação de uma base de dados, com uma tabela de elementosquímicos,introduzindo-seoselementosHeHe.
10Maio2017 9:IntroduçãoàsBasesdeDados:SQLeMATLAB
>> system(‘sqlite3 quimica.db’) sqlite> CREATE TABLE Elementos ..>> ( Numero INTEGER, Simbolo TEXT, ..>> PRIMARY KEY(Numero)); sqlite> INSERT INTO Elementos VALUES (1, ‘H’); sqlite> INSERT INTO Elementos VALUES (2, “He”); sqlite> SELECT * FROM Elementos 1|H 2|He sqlite> .quit >>
SQLite
![Page 30: Informáca para as Ciências e Engenharias Versão : C ...](https://reader031.fdocumentos.com/reader031/viewer/2022012411/616a96593a83592ab862e97b/html5/thumbnails/30.jpg)
l Para além das instruções SQL, o SQLite dispõe de algunscomandospar(culares(iniciadoscom“.”)§ .help
• listacomandosdisponíveis(alémdoSQL)§ .readnomeFicheiro
• executascriptSQL§ .schema
• listaesquemasdastabelas§ .quit
• sairdointerpretador
10Maio2017 9:IntroduçãoàsBasesdeDados:SQLeMATLAB
SQLite
![Page 31: Informáca para as Ciências e Engenharias Versão : C ...](https://reader031.fdocumentos.com/reader031/viewer/2022012411/616a96593a83592ab862e97b/html5/thumbnails/31.jpg)
§ .promptfirstcont• Modifica o prompt normal do sqlite para first e o das
linhasdecon(nuaçãoparacont§ .tables
• listaastabelas§ .separatorsep
• especificasepcomoseparadordoscampos§ .importficheirotabela
• Importa o ficheiro para a tabela assumindo os camposseparadospeloseparadordefinido
10Maio2017 9:IntroduçãoàsBasesdeDados:SQLeMATLAB
SQLite
![Page 32: Informáca para as Ciências e Engenharias Versão : C ...](https://reader031.fdocumentos.com/reader031/viewer/2022012411/616a96593a83592ab862e97b/html5/thumbnails/32.jpg)
l Exemplo:Comabasededados,quimica.db,jácriada
10Maio2017 9:IntroduçãoàsBasesdeDados:SQLeMATLAB
sqlite> .PROMPT ‘db >>’ ‘ -->> ’ db >> .schema CREATE TABLE elementos (Numero INTEGER, Simbolo TEXT,PRIMARY KEY (Numero)); db >> INSERT INTO Elementos -->> VALUES (3, “Li”); db >> SEPARATOR ‘ :: ‘ db >> SELECT * FROM Elementos 1 :: H 2 :: He 3 :: Li db >> .tables Elementos db >>
SQLite
![Page 33: Informáca para as Ciências e Engenharias Versão : C ...](https://reader031.fdocumentos.com/reader031/viewer/2022012411/616a96593a83592ab862e97b/html5/thumbnails/33.jpg)
10Maio2017 9:IntroduçãoàsBasesdeDados:SQLeMATLAB
Sumário
l Introduçãoaossistemasdebasesdedados:
§ Modelorelacional
§ SQL(StructuredQueryLanguage)
§ SQLeMATLAB
§ Umexemploprá(co
![Page 34: Informáca para as Ciências e Engenharias Versão : C ...](https://reader031.fdocumentos.com/reader031/viewer/2022012411/616a96593a83592ab862e97b/html5/thumbnails/34.jpg)
MATLAB+SQLite
l ParacombinarSQLcomMATLAB,usamosumafunçãoquecorreoSQLiteparaexecutarocomandoSQLquequeremos.
l Como vimos, o SQLite pode ser executado com parâmetros nalinhadecomando(consoladosistema)§ nomedoficheirocomabasededados.§ eumcomandoSQL
l Amesmaoperaçãopodeserfeitaapar(rdajaneladecomandosdoOCTAVE,atravésdeumachamadaaosistema.
10Maio2017 9:IntroduçãoàsBasesdeDados:SQLeMATLAB
![Page 35: Informáca para as Ciências e Engenharias Versão : C ...](https://reader031.fdocumentos.com/reader031/viewer/2022012411/616a96593a83592ab862e97b/html5/thumbnails/35.jpg)
Exemplo:
l A inserção do elemento Berilio (Be) na base de dados“quimica.db” anteriormente criada, pode ser feita a par(r daconsoladosistema
l Ou através da chamada de sistema a par(r da janela de
comandosOCTAVE
10Maio2017 9:IntroduçãoàsBasesdeDados:SQLeMATLAB
db >> INSERT INTO Elementos VALUES (4, “Be”); db >>
>> system(‘sqlite quimica.db “INSERT INTO Elementos ... VALUES (4, “Be”);’) >>
MATLAB+SQLite
![Page 36: Informáca para as Ciências e Engenharias Versão : C ...](https://reader031.fdocumentos.com/reader031/viewer/2022012411/616a96593a83592ab862e97b/html5/thumbnails/36.jpg)
l Emgeral,aexecuçãodecomandosSQLapar(rdeumprogramaMATLABpodeserfeitacomafunçãosqlite,comassinatura
§ Basicamente,estafunçãochamaafunçãosystemdoOCTAVE,
com o comando fornecido na string sql passada comoargumento
• Garan(ndoqueasplicassãosubs(tuidasporaspas,parasercompayvelcomalinguagemSQL.
§ Nota: esta função tem elementos que não fazem parte damatériadeICE.
function result = sqlite(sql,db)
10Maio2017 9:IntroduçãoàsBasesdeDados:SQLeMATLAB
MATLAB+SQLite
![Page 37: Informáca para as Ciências e Engenharias Versão : C ...](https://reader031.fdocumentos.com/reader031/viewer/2022012411/616a96593a83592ab862e97b/html5/thumbnails/37.jpg)
10Maio2017 9:IntroduçãoàsBasesdeDados:SQLeMATLAB
function result = sqlite(sql,db) % result=sqlite(sql,db) % Executa o sqlite3 para processar o comando SQL % fornecido no primeiro argumento. Devolve o resultado % como string. Opcionalmente, pode receber o nome % do ficheiro da base de dados como segundo argumento. Se % omitido, assume ser temp.db.
if nargin < 2 % se o segundo argumento nao existe db = 'temp.db'; end
sql = strrep(sql,'"',''''); % troca plicas por aspas [stat,result] = system(['sqlite3 ',db,' "',sql,'"']); end
MATLAB+SQLite
![Page 38: Informáca para as Ciências e Engenharias Versão : C ...](https://reader031.fdocumentos.com/reader031/viewer/2022012411/616a96593a83592ab862e97b/html5/thumbnails/38.jpg)
l Testar
10Maio2017 9:IntroduçãoàsBasesdeDados:SQLeMATLAB
>> sqlite(‘sqlite3 atoms.db’) ans = >> sqlite(‘CREATE TABLE Atomos (Num INTEGER, Simb TEXT);’, ‘atoms.db’) ans = >> sqlite(‘INSERT INTO Atomos VALUES (1,”H”);’,‘atoms.db’) ans = >> sqlite(‘INSERT INTO Atomos VALUES (2,”He”);’,‘atoms.db’) ans = >> sqlite('SELECT * FROM Atomos;',’atoms.db') ans = 1|H 2|He >>
MATLAB+SQLite
![Page 39: Informáca para as Ciências e Engenharias Versão : C ...](https://reader031.fdocumentos.com/reader031/viewer/2022012411/616a96593a83592ab862e97b/html5/thumbnails/39.jpg)
10Maio2017 9:IntroduçãoàsBasesdeDados:SQLeMATLAB
Sumário
l Introduçãoaossistemasdebasesdedados:
§ Modelorelacional
§ SQL(StructuredQueryLanguage)
§ SQLeMATLAB
§ Umexemploprá(co
![Page 40: Informáca para as Ciências e Engenharias Versão : C ...](https://reader031.fdocumentos.com/reader031/viewer/2022012411/616a96593a83592ab862e97b/html5/thumbnails/40.jpg)
l Sendo disponibilizado um conjunto de dados sobre praias, e anecessidade de obras de consolidação, pretende-se usar umsistema de gestão de bases de dados (SGBD) para gerir ainformação.
10Maio2017 9:IntroduçãoàsBasesdeDados:SQLeMATLAB
Ficheiros de suporte da base
de dadosUtilizador/Programador
Esquema da base de dados
Motor da
base dedados
Exemplo:MATLAB+SQLite
![Page 41: Informáca para as Ciências e Engenharias Versão : C ...](https://reader031.fdocumentos.com/reader031/viewer/2022012411/616a96593a83592ab862e97b/html5/thumbnails/41.jpg)
l Oficheirotexto,comnomepraias.txt,comainformaçãosobreaspraiastemváriaslinhas,cadaumareferenteaumaobra,comoscampos,separadospor“;”
<concelho><obra><custo><prioridade>
10Maio2017 9:IntroduçãoàsBasesdeDados:SQLeMATLAB
MarinhaGrande;EsporaodaPraiadaVieira;720000.00;MediaLourinha;ArribasjuntoaofortedoPaimogo;591000.00;MediaLourinha;ArribasemPortodasBarcas;691000.00;MediaLourinha;ArribasemPortoDinheiro;606500.00;MediaSintra;ArribasdapraiaGrandedoRodizio;39951.63;MediaSintra;ArribasdapraiadasAzenhasdoMar;326560.08;MediaSintra;ArribasdapraiaPequena;428015.58;MediaSan(agodoCacem;ArribadaPraiaFontedoCor(co;23000.00;MediaSines;RelocalizacaodeacessosdaspraiasdeMorgavel,FranquiaeFarol;100100.00;MediaSetubal;ArribasdapraiadeGalapos;100000.00;BaixaViladoBispo;Alimentacaoar(ficialdapraiadaMareta;2500000.00;ElevadaPor(mao;SaneamentodaarribanapraiadoVau;30000.00;Elevada
Exemplo:MATLAB+SQLite
![Page 42: Informáca para as Ciências e Engenharias Versão : C ...](https://reader031.fdocumentos.com/reader031/viewer/2022012411/616a96593a83592ab862e97b/html5/thumbnails/42.jpg)
Exemplo:MATLAB+SQLite
l Maisespecificamente,pretende-se
a) Criarumabasededados(BD)comumatabela
b) Inserirdadosdosprojectosderecuperação
c) Ques(onaraBDusandoSQL
l Exemplo:§ obterosprojectosdeprioridadealta,médiaebaixa.
10Maio2017 9:IntroduçãoàsBasesdeDados:SQLeMATLAB
![Page 43: Informáca para as Ciências e Engenharias Versão : C ...](https://reader031.fdocumentos.com/reader031/viewer/2022012411/616a96593a83592ab862e97b/html5/thumbnails/43.jpg)
l Acriaçãodatabela,quechamaremosProjetos,éfeitaatravésdeum só comando SQL, chamado do OCTAVE pela função sqlitedefinidaatrás.
l De notar a especificação da PRIMARY KEY, que garante umaiden(ficação única de cada registo e a não existência derepe(ções.§ Nestecaso,asobrastêmumnomeúnico.
10Maio2017 9:IntroduçãoàsBasesdeDados:SQLeMATLAB
function criaTabela(nomeBD) % Cria a tabela Projectos na base de dados indicada. sqlite([’CREATE TABLE Projectos ( Concelho text,',... 'Nome text, Custo float, Prioridade text,',... 'PRIMARY KEY(nome));'], nomeBD); end
Exemplo:MATLAB+SQLite
![Page 44: Informáca para as Ciências e Engenharias Versão : C ...](https://reader031.fdocumentos.com/reader031/viewer/2022012411/616a96593a83592ab862e97b/html5/thumbnails/44.jpg)
l PorquêPRIMARYKEY?§ Numa base de dados relacional, as chaves permitem
relacionartabelasdiferentes.§ E mesmo só com uma tabela devemos poder iden(ficar
inequivocamentecadaregisto• porexemplo,paraevitarainserçãodeduplicados• Nestecasoassumimosquedoisprojectoscomomesmo
nomeseriaumerro
l OSQLitecriasempreumatributochamadoRowidque iden(ficainequivocamentecadaregisto,mesmoquenãosecrieumachaveprimária.§ No entanto, esse não serve para evitar registos repe(dos
porqueincrementaautoma(camente.
10Maio2017 9:IntroduçãoàsBasesdeDados:SQLeMATLAB
Exemplo:MATLAB+SQLite
![Page 45: Informáca para as Ciências e Engenharias Versão : C ...](https://reader031.fdocumentos.com/reader031/viewer/2022012411/616a96593a83592ab862e97b/html5/thumbnails/45.jpg)
l Testes§ Podemos começar por criar a tabela de Projectos numa BD,
quechamaremosdepraias.db,parapodermostestarafunçãoquecarregaosdados.
10Maio2017 9:IntroduçãoàsBasesdeDados:SQLeMATLAB
>> criatabela(’praias.db'); % verificar que tabelas existem na BD ‘praias.db>> sqlite('.tables',’praias.db') ans = Projectos >>
Exemplo:MATLAB+SQLite
![Page 46: Informáca para as Ciências e Engenharias Versão : C ...](https://reader031.fdocumentos.com/reader031/viewer/2022012411/616a96593a83592ab862e97b/html5/thumbnails/46.jpg)
l Osdadospodemsercarregadosnatabelaatravésdeumafunçãocomassinatura
function carrega_praias(nomeFich, nomeBD)
que
a) Abreoficheirodedadosemmododeleitura
b) Paracadalinha1. Lêosvárioscampostendoemcontaoseuseparador
• Convertendoocustonumvalornumérico2. CriaumastringcorrespondenteaocomandoSQLINSERT,comos
dadosdecadalinhalidos3. Executaocomandocomachamadaàfunçãosqlite
c) Fechaoficheirodedados
10Maio2017 9:IntroduçãoàsBasesdeDados:SQLeMATLAB
Exemplo:MATLAB+SQLite
![Page 47: Informáca para as Ciências e Engenharias Versão : C ...](https://reader031.fdocumentos.com/reader031/viewer/2022012411/616a96593a83592ab862e97b/html5/thumbnails/47.jpg)
10Maio2017 9:IntroduçãoàsBasesdeDados:SQLeMATLAB
function carrega_praias(nomeFich, nomeBD) % documentação em anexo fid = fopen(nomeFich,'r'); while ~feof(id) linha = fgetl(fid); pVirgs = findstr(';', linha); concelho = linha(1:pVirgs(1)-1); nome = linha(pVirgs(1)+1:pVirgs(2)-1); custo = str2num(linha(pVirgs(2)+1:pVirgs(3)-1)); prioridade = linha(pVirgs(3)+1:end); sql = sprintf('insert into Projectos ... values("%s", "%s",%f,"%s");’,... concelho, nome, custo, prioridade) sqlite(sql, nomeBD); end fclose(fid); end
Exemplo:MATLAB+SQLite
![Page 48: Informáca para as Ciências e Engenharias Versão : C ...](https://reader031.fdocumentos.com/reader031/viewer/2022012411/616a96593a83592ab862e97b/html5/thumbnails/48.jpg)
l Testes§ podemos agora inserir os dados do ficheiro praias.txt, e
verificarseelesestãocorretamenteinserido
10Maio2017 9:IntroduçãoàsBasesdeDados:SQLeMATLAB
>> carrega_praias(’praias.txt’, ‘praias.db'); % verificar que registos existem na tabela>> sqlite(’SELECT * FROM Projectos;','praias.db’) ans = Marinha Grande|Esporao da Praia da Vieira|720000.0|MediaLourinha|Arribas junto ao forte do Paimogo|591000.0|MediaLourinha|Arribas em Porto das Barcas|691000.0|MediaLourinha|Arribas em Porto Dinheiro|606500.0|MediaSintra|Arribas da praia Grande do Rodizio|39951.63|MediaSintra|Arribas da praia das Azenhas do Mar|326560.08|MediaSintra|Arribas da praia Pequena|428015.58|Media... Portimao|Saneamento da arriba na praia do Vau|30000.00|Elevada >>
Exemplo:MATLAB+SQLite
![Page 49: Informáca para as Ciências e Engenharias Versão : C ...](https://reader031.fdocumentos.com/reader031/viewer/2022012411/616a96593a83592ab862e97b/html5/thumbnails/49.jpg)
l Em SQL podem ser feitas consultas (queries) às bases de dadosemqueascondiçõesWHEREnãoexigemigualdadesestritasmasapenas “semelhanças”, em que alguns caracteres nos campos apesquisarpodemnãoseriguais.
l Paraesseefeito§ Usa-seapalavraLIKE,emvezdosimbolodeigualdade§ U(lizam-se wildcards, %, para susbs(tuirem quaisquer
caracteres.
l Como anteriormente, estas consultas podem ser feitasdirectamentedoOCTAVE
10Maio2017 9:IntroduçãoàsBasesdeDados:SQLeMATLAB
Exemplo:MATLAB+SQLite
![Page 50: Informáca para as Ciências e Engenharias Versão : C ...](https://reader031.fdocumentos.com/reader031/viewer/2022012411/616a96593a83592ab862e97b/html5/thumbnails/50.jpg)
l Exemplo1(comLIKEewildcards)
10Maio2017 9:IntroduçãoàsBasesdeDados:SQLeMATLAB
>> sqlite('SELECT Nome FROM Projectos WHERE Nome LIKE "Arriba%";',’praias.db’)
% quais os registos cujo Nome comeca por Arriba ans = Arribas junto ao forte do Paimogo Arribas em Porto das Barcas Arribas em Porto Dinheiro Arribas da praia Grande do Rodizio Arribas da praia das Azenhas do Mar Arribas da praia Pequena Arriba da Praia Fonte do Cortico Arribas da praia de Galapos>>
Exemplo:MATLAB+SQLite
![Page 51: Informáca para as Ciências e Engenharias Versão : C ...](https://reader031.fdocumentos.com/reader031/viewer/2022012411/616a96593a83592ab862e97b/html5/thumbnails/51.jpg)
l Exemplo2(comLIKEewildcards)
10Maio2017 9:IntroduçãoàsBasesdeDados:SQLeMATLAB
>> sqlite('SELECT Nome FROM Projectos WHERE Nome LIKE "%praia%";',’praias.db')
% quais os registos cujo Nome contem a palavra praiaans = Esporao da Praia da Vieira Arribas da praia Grande do Rodizio Arribas da praia das Azenhas do Mar Arribas da praia Pequena Arriba da Praia Fonte do Cortico Relocalizacao de acessos das praias de Morgavel,...Farol Arribas da praia de Galapos Alimentacao artificial da praia da Mareta Saneamento da arriba na praia do Vau>>
Exemplo:MATLAB+SQLite
![Page 52: Informáca para as Ciências e Engenharias Versão : C ...](https://reader031.fdocumentos.com/reader031/viewer/2022012411/616a96593a83592ab862e97b/html5/thumbnails/52.jpg)
l As consultas em SQL podem originar muitas repe(ções nasrespostas,nomeadamentese
§ váriosregistossa(sfaçamascondições;e§ apenassepretendamalgunsdocamposdosregistosiniciais
l Paraevitarestas repe(çõespodeu(lizar-sea varianteda instruçãoSELECT,contendoavarianteDISTINCT
l Comoanteriormente,estasconsultaspodemserfeitasdirectamentedoOCTAVE
10Maio2017 9:IntroduçãoàsBasesdeDados:SQLeMATLAB
Exemplo:MATLAB+SQLite
![Page 53: Informáca para as Ciências e Engenharias Versão : C ...](https://reader031.fdocumentos.com/reader031/viewer/2022012411/616a96593a83592ab862e97b/html5/thumbnails/53.jpg)
l Exemplo3(comDISTINCT)
10Maio2017 9:IntroduçãoàsBasesdeDados:SQLeMATLAB
>> sqlite(‘SELECT DISTINCT Concelho FROM Projectos;’, ’praias.db')% quais os concelhos mencionados nos registos sem repeticoes ! ans = Marinha Grande
Lourinha Sintra Santiago do Cacem Sines Setubal Vila do Bispo Portimao
>> sqlite(‘SELECT DISTINCT Prioridade FROM Projectos;’, ’praias.db')ans = Media
Baixa Elevada
>>
Exemplo:MATLAB+SQLite
![Page 54: Informáca para as Ciências e Engenharias Versão : C ...](https://reader031.fdocumentos.com/reader031/viewer/2022012411/616a96593a83592ab862e97b/html5/thumbnails/54.jpg)
l As consultas SQL, feitas através da função sqlite, retornamuma string,eventualmente com várias linhas, em que os campos dos registosretornados são delimitados pelo separador corrente (por omissão, oseparadoré“|”).
10Maio2017 9:IntroduçãoàsBasesdeDados:SQLeMATLAB
>> sqlite(’SELECT * FROM Projectos;','praias.db’) ans = Marinha Grande|Esporao da Praia da Vieira|720000.0|MediaLourinha|Arribas junto ao forte do Paimogo|591000.0|MediaLourinha|Arribas em Porto das Barcas|691000.0|MediaLourinha|Arribas em Porto Dinheiro|606500.0|MediaSintra|Arribas da praia Grande do Rodizio|39951.63|MediaSintra|Arribas da praia das Azenhas do Mar|326560.08|MediaSintra|Arribas da praia Pequena|428015.58|Media... Portimao|Saneamento da arriba na praia do Vau|30000.00|Elevada >>
Exemplo:MATLAB+SQLite
![Page 55: Informáca para as Ciências e Engenharias Versão : C ...](https://reader031.fdocumentos.com/reader031/viewer/2022012411/616a96593a83592ab862e97b/html5/thumbnails/55.jpg)
l Em geral, será conveniente estruturar melhor estas respostas,transformando as strings retornadas num vetor de estruturas,correspondendoaosregistosretornados.
l Para esse efeito pode usar-se a função com assinatura abaixo que éespecificadadeseguida
function recs = parseRecords (sqlResult,nameString)
Nota:estafunçãotemelementosquenãofazempartedamatériadeICE.
10Maio2017 9:IntroduçãoàsBasesdeDados:SQLeMATLAB
Exemplo:MATLAB+SQLite
![Page 56: Informáca para as Ciências e Engenharias Versão : C ...](https://reader031.fdocumentos.com/reader031/viewer/2022012411/616a96593a83592ab862e97b/html5/thumbnails/56.jpg)
10Maio2017 9:IntroduçãoàsBasesdeDados:SQLeMATLAB
function recs = parseRecords(sqlResult,nameString) % recs=parserecords(sqlResult,nameString) % Devolve um vector de estruturas organizando os dados na string % devolvida pelo SQLite. Assume que os campos estao separados % por uma barra |. O segundo argumento, opcional, contem uma % string com os nomes dos campos das estruturas devolvidas, % tambem separados por |. recs = []; if nargin < 2 names = {}; else names = strsplit(nameString,'|'); end ca = strsplit(sqlResult,"\n"); for f = 1:length(ca)-1 ... % converte a string sqlResult num vetor de estruturas end end
Exemplo:MATLAB+SQLite
![Page 57: Informáca para as Ciências e Engenharias Versão : C ...](https://reader031.fdocumentos.com/reader031/viewer/2022012411/616a96593a83592ab862e97b/html5/thumbnails/57.jpg)
10Maio2017 9:IntroduçãoàsBasesdeDados:SQLeMATLAB
for f = 1:length(ca)-1 line = deblank(ca{f}); if length(line) == 0 break end rec = strsplit(ca{f},'|'); for g = 1:length(rec) if g > length(names) campo = ['campo_',num2str(g)]; else campo = names{g}; end % converte em numero, se possivel testNum = str2double(rec{g}); if isnan(testNum) valor = rec{g}; else valor = testNum; end recs(f).(campo) = valor; end end
Exemplo:MATLAB+SQLite
![Page 58: Informáca para as Ciências e Engenharias Versão : C ...](https://reader031.fdocumentos.com/reader031/viewer/2022012411/616a96593a83592ab862e97b/html5/thumbnails/58.jpg)
l Query:
§ Obternomeecustodeprojetoscomumadadaprioridade.
Nota: A função sprinX funciona como fprinX mas em vez de escrever numficheiroouconsoladevolveastringformatada.
10Maio2017 9:IntroduçãoàsBasesdeDados:SQLeMATLAB
function projs = sel_prioridade(tabela, baseDados, prioridade) % projs=selprioridade(tabela, baseDados, prioridade) % selecciona da tabela da base de dados indicada os campos do % nome e custo dos projectos com a prioridade especificada. query = sprintf('SELECT Nome, Custo FROM %s WHERE ... Prioridade="%s";', tabela, prioridade); result = sqlite(query, baseDados); % obter vetor de estruturas com campos nome e custo projs = parseRecords(result, 'nome|custo'); end
Exemplo:MATLAB+SQLite
![Page 59: Informáca para as Ciências e Engenharias Versão : C ...](https://reader031.fdocumentos.com/reader031/viewer/2022012411/616a96593a83592ab862e97b/html5/thumbnails/59.jpg)
l Testar
10Maio2017 9:IntroduçãoàsBasesdeDados:SQLeMATLAB
>> elevada = sel_prioridade('Projectos', ’praias.db', 'Elevada');>> elevada(1) nome = Alimentacao artificial da praia da Mareta custo = 2500000 >> elevada(2) nome = Saneamento da arriba na praia do Vau custo = 30000 >> baixa = sel_prioridade('Projectos', ’praias.db', 'Baixa')baixa = nome = Arribas da praia de Galapos custo = 100000>>
Exemplo:MATLAB+SQLite
![Page 60: Informáca para as Ciências e Engenharias Versão : C ...](https://reader031.fdocumentos.com/reader031/viewer/2022012411/616a96593a83592ab862e97b/html5/thumbnails/60.jpg)
l Query:
§ Obterasobrasseparadasporprioridades« Bastajuntarasqueries/funçõesanteriores
10Maio2017 9:IntroduçãoàsBasesdeDados:SQLeMATLAB
function [elevada,media,baixa] = processa_projs(fich, baseDados) % [alta,media,baixa]=processaprojs(fich, baseDados) % Cria a tabela Projectos na base de dados indicada, % carrega os dados do ficheiro e selecciona da tabela % os campos do nome do projecto e custo, separando em % tres vectores de estruturas conforme a prioridade. criatabela(baseDados); carrega_praias('praias.txt', baseDados); elevada = selprioridade('Projectos', baseDados, 'Elevada') media = selprioridade('Projectos', baseDados, 'Media') baixa = selprioridade('Projectos', baseDados, 'Baixa') end
Exemplo:MATLAB+SQLite
![Page 61: Informáca para as Ciências e Engenharias Versão : C ...](https://reader031.fdocumentos.com/reader031/viewer/2022012411/616a96593a83592ab862e97b/html5/thumbnails/61.jpg)
10Maio2017 9:IntroduçãoàsBasesdeDados:SQLeMATLAB
>> [elev, medi,baix] = processaprojs('praias.txt',’outra.db') elev = 1x2 struct array containing the fields: nome custo medi = 1x9 struct array containing the fields: nome custo baix = scalar structure containing the fields: nome = Arribas da praia de Galapos % mostra o valor dos custo = 100000 % campos por so ter um elemento >> ...
l Testar
Exemplo:MATLAB+SQLite
![Page 62: Informáca para as Ciências e Engenharias Versão : C ...](https://reader031.fdocumentos.com/reader031/viewer/2022012411/616a96593a83592ab862e97b/html5/thumbnails/62.jpg)
10Maio2017 9:IntroduçãoàsBasesdeDados:SQLeMATLAB
>> elev.nomeans = Alimentacao artificial da praia da Maretaans = Saneamento da arriba na praia do Vau>> med.nomeans = Esporao da Praia da Vieiraans = Arribas junto ao forte do Paimogoans = Arribas em Porto das Barcasans = Arribas em Porto Dinheiroans = Arribas da praia Grande do Rodizioans = Arribas da praia das Azenhas do Marans = Arribas da praia Pequenaans = Arriba da Praia Fonte do Corticoans = Relocalizacao de acessos das praias de Morgavel, Franquia e Farol >>
Exemplo:MATLAB+SQLite
l Testar
![Page 63: Informáca para as Ciências e Engenharias Versão : C ...](https://reader031.fdocumentos.com/reader031/viewer/2022012411/616a96593a83592ab862e97b/html5/thumbnails/63.jpg)
ParaConsultar
l SQL
§ MuitofácilencontrartutoriaisnaWeb,masnormalmentetêmmuitomaisdoquedamosaqui.
§ Exemplodeuma“cábula”quepodeserú(l:
http://www.zentut.com/sql-tutorial/sql-cheat-sheet/
10Maio2017 9:IntroduçãoàsBasesdeDados:SQLeMATLAB