Curso Profissional de Técnico de Multimédia 12ºAno Disciplina: Sistemas de Informação Módulo 6: Linguagem de Programação IV 6.2. Bases de Dados 6.2.3. Introdução à Linguagem SQL Prof. Micael Alves
Bases de Dados Introdução à linguagem SQL A linguagem SQL é muito simples. Trata-se de uma linguagem que não é case sensitive e que conta com um número muito limitado de comandos. Contudo, esta linguagem será interligada com a linguagem PHP que se trata de uma linguagem case sensitive. Vários erros de sintaxe podem resultar desta combinação de linguagens, pelo que é importante manter os nomes (BD, tabelas, campos) sempre escritos da mesma forma.
Bases de Dados Introdução à linguagem SQL A linguagem SQL é muito simples. Trata-se de uma linguagem que não é case sensitive e que conta com um número muito limitado de comandos. Contudo, esta linguagem será interligada com a linguagem PHP que se trata de uma linguagem case sensitive. Vários erros de sintaxe podem resultar desta combinação de linguagens, pelo que é importante manter os nomes (BD, tabelas, campos) sempre escritos da mesma forma. Para já comecemos por distinguir o tipo de acções permitidas nesta linguagem.
Bases de Dados Introdução à linguagem SQL DDL Data Definition Language Create Database Criar BD Create Table Criar tabela Alter Table Alterar a estrutura de uma tabela Drop Table Eliminar uma tabela Drop Database Eliminar BD DML Data Manipulation Language Insert Inserir dados numa tabela Updade Alterar dados numa tabela Delete Apagar dados de uma tabela Select Efectuar consultas em tabelas
Bases de Dados Introdução à linguagem SQL Como se pode verificar pelas tabelas, todos os comandos DDL são estruturais. Permitem operar sobre a estrutura da BD e das suas tabelas não sendo possível a manipulação de informação. Por outro lado, os comandos associados com DML apenas permitem operar sobre a informação existente nas tabelas não sendo possível alterar a estrutura da BD. Como já se referiu, a BD será composta por tabelas. Cada uma dessas tabelas irá conter informação à qual se atribui o nome de registos.
Bases de Dados Introdução à linguagem SQL Cada um destes registos terá de ser identificado univocamente para que não seja confundido com outro qualquer presente na mesma tabela. Por exemplo, numa tabela Cidadão será normal existirem várias pessoas com o mesmo nome completo. Todavia, é possível distinguir essas pessoas devido ao seu Bilhete de Identidade (BI), que é diferente para cada uma delas. Em cada tabela, deverá escolher-se um campo, ou um conjunto de campos, que permitam identificar cada linha (ou registo) univocamente. Teremos assim a nossa chave primária da tabela. Vejamos um exemplo.
Bases de Dados Introdução à linguagem SQL TABELA JOGADOR NumAtleta NomeJogador Idade N o m e C l u b e Posicao 01256648 Deco 31 Chelsea Médio 01334567 Bruno Alves 30 FC Porto Defesa 02356444 C. Ronaldo 26 Real Madrid Avançado Nota: O nome das BDs, tabelas e campos das tabelas devem sempre ser escritos sem pontuação, acentos, espaços ou cedilhas.
Bases de Dados Introdução à linguagem SQL Quando as tabelas são representadas graficamente a chave primária é campo da tabela que se encontrar sublinhado. Neste caso, a tabela Jogador tem como chave primária o campo NumAtleta (Número de Atleta). Este é único para cada desportista permitindo distinguir cada um dos jogadores da tabela.
Bases de Dados Introdução à linguagem SQL No entanto, existe um outro campo que se encontra parcialmente sublinhado (NomeClube), representando uma chave externa. Este tipo de chave, como o nome indica, liga-se ao exterior, isto é, a outra tabela. Uma chave externa faz correspondência com uma chave primária de outra tabela. Vejamos a tabela Clube.
Bases de Dados Introdução à linguagem SQL TABELA CLUBE N o m e C l u b e País Idade Estádio FC Porto Portugal 115 Dragão Real Madrid Espanha 120 Santiago Bernabéu Manchester U. Inglaterra 100 Old Trafford A tabela anterior tem como chave primária o campo NomeClube. A existência de duas tabelas permite separar informações distintas.
Bases de Dados Introdução à linguagem SQL Não faria sentido colocar informações sobre um clube na tabela Jogador ou vice-versa. Desta forma é possível separar as informações mas garantindo que elas estão relacionadas através de uma chave externa. Esta, para além de garantir a interligação entre as tabelas permite ainda que os dados dessas tabelas coexistam como um só. Caso a informação fique sujeita a alterações (actualização, remoção) todas as tabelas que estão interligadas sofrem as mesmas alterações.
Bases de Dados Introdução à linguagem SQL Por exemplo, na tabela Clube se o Real Madrid fosse apagado da tabela todos os jogadores associados a este clube na tabela Jogador iriam desaparecer. Isto faz sentido pois não podem existir jogadores de um clube inexistente. Garante-se assim integridade entre as tabelas e estas não acumulam informação desnecessária (lixo). Este é um dos problemas que pode afectar o desempenho de uma BD a longo prazo.
Bases de Dados Introdução à linguagem SQL RELACIONAMENTO ENTRE TABELAS Jogador NumAtleta NomeJogador Idade N o m e C l u b e Posicao N 1 Clube NomeClube País Idade Estádio Relacionamento entre tabelas
Bases de Dados Introdução à linguagem SQL O relacionamento entre as tabelas faz-se entre a chave primária da tabela Clube e a chave externa da tabela Jogador. O seu relacionamento é 1:N, ou seja, 1 jogador apenas pode ter um clube mas um clube pode ter vários (N) jogadores no seu plantel. Existem mais dois tipos de relacionamentos para além do anterior (1:1 e N:M). Voltando finalmente ao MySQL, mas relembrando sempre o que se referiu anteriormente, comecemos por criar uma BD e posteriormente as suas tabelas.
Bases de Dados Aproveitando o exemplo anterior sobre futebol vamos começar por criar uma BD com este nome.
Criar BD Bases de Dados Para criarmos uma BD utilizamos o seguinte comando: CREATE DATABASE nome_bd_a_criar; Exemplo Como se pode verificar pelo comando o SQL não é uma linguagem case sensitive. Convém notar que todos os comandos terminam com um ponto e vírgula.
Listar BDs Bases de Dados Para verificarmos se a nossa BD se encontra criada podemos listar as BDs através do seguinte comando: SHOW databases; Exemplo Listar BDs
Usar a BD Bases de Dados Após a criação de uma BD é necessário dizer ao programa qual a BD que queremos utilizar para posteriormente lhe podermos adicionar tabelas. Isto é conseguido através da seguinte instrução: USE nome_bd_a_usar; Exemplo Seleccionar BD
Criar tabela Bases de Dados Uma vez criada a BD e seleccionada para utilização podemos começar a criar as suas tabelas. A instrução para o efeito é a seguinte USE TABLE nome_tabela (campo1 tipo de dados1, campo2 tipo de dados2, campon tipo de dadosn); Exemplo Criar Tabela
Criar tabela Bases de Dados Como pode verificar os nomes atribuídos aos campos da tabela são isentos de caracteres como cedilhas, acentos, pontuação ou espaços em branco. O tipo de dados mais comuns são Varchar, que são caracteres em número variável e que geralmente identificamos como strings. No caso de se tratar de um número inteiro devemos associar o campo a um Integer (ver, por exemplo, o campo Idade).
Criar tabela Bases de Dados No caso de se tratar de um número decimal podemos, por exemplo, usar o tipo Real (ou Float). Existem muitos outros relacionados com tipos numéricos, strings, data, tempo ou geometria. Devem ser utilizados conforme as necessidades de cada campo da tabela. Como deve ter reparado, após cada tipo de dados intruduzse um valor entre parênteses. Este corresponde ao número de caracteres máximos reservados para cada campo criado. Quando um dos campos é chave primária é necessário acrescentar Primary Key a seguir ao tipo de dados (ver campo nomeclube).
Listar tabelas Bases de Dados Após a criação de uma tabela podemos visualizá-las. A instrução é a seguinte: SHOW tables; Exemplo Listar Tabelas
Listar campos da tabela Bases de Dados Se pretendermos visualizar os campos de uma tabela podemos fazê-lo através do seguinte comando: DESCRIBE nome_tabela; Exemplo Listar campos de uma tabela
Listar campos da tabela Bases de Dados Na figura anterior existem informações importantes, como a particularidade do campo NULL da chave primária se encontrar com o valor NO. Isto significa que o campo nunca pode ser nulo, visto tratarse de uma chave primária, ou seja, de preenchimento obrigatório. Na coluna Key verifica-se que o campo nomeclube é de facto a chave primária (PRI).
Bases de Dados Alterar a estrutura da tabela Após a criação de uma tabela podemos alterar a sua estrutura através do seguinte comando: ALTER TABLE nome_tabela tipo_de_alteração; Como foi referido anteriormente a chave externa da tabela jogador para a tabela clube não foi criada propositadamente. Neste momento podemos aproveitar esta anomalia para atribuir a chave externa através do comando ALTER TABLE.
Alterar a estrutura da tabela Exemplo 1 Bases de Dados Alter Table ADD
Alterar a estrutura da tabela Esta referência deveria contudo ter sido criada na altura em que se criou a tabela através do seguinte comando: CREATE TABLE jogador (numatleta varchar(30) Primary Key, nomejogador varchar(30), idade int(3), nomeclube varchar(30) References clube(nomeclube), posicao varchar(30)); O comando ALTER TABLE permite ainda três outros tipos de alterações. Para além de ADD aceita MODIFY, DROP e CHANGE. Vejamos alguns exemplos: Bases de Dados
Alterar a estrutura da tabela Exemplo 2 ALTER TABLE jogador modify clube varchar(90); Esta alteração permite modificar o tipo de dados do campo clube da tabela jogador. Exemplo 3 Bases de Dados ALTER TABLE jogador change posicao pos varchar(90); Esta alteração permite mudar o nome do campo posicao para pos. É sempre necessário acrescentar o tipo de dados no campo substituto.
Bases de Dados Alterar a estrutura da tabela Exemplo 4 ALTER TABLE jogador drop posicao; Esta alteração permite apagar o campo posicao da tabela.
Eliminar tabela Bases de Dados Para eliminar uma determinada tabela usa-se o seguinte comando: DROP TABLE nome_tabela;
Eliminar tabela Bases de Dados Exemplo Eliminar Tabela
Eliminar BD Bases de Dados Para eliminar uma determinada BD usa-se o seguinte comando: DROP DATABASE nome_bd;
Eliminar BD Bases de Dados Exemplo Eliminar BD
Eliminar BD Bases de Dados Desta forma terminam todos os conceitos relacionados com comandos DDL. Seguemse todos os comandos DML.
Inserir dados em tabelas Bases de Dados Uma vez criadas as tabelas é desde logo possível adicionar dados às mesmas. Para isso usa-se o comando: INSERT nome_tabela VALUES (valor1, valor2,, valorn);
Inserir dados em tabelas Exemplo Bases de Dados Inserir Dados em Tabela
Inserir dados em tabelas Bases de Dados Pelo exemplo anterior verifica-se que todos os tipos de dados String se encontram entre aspas. No caso dos dados serem numéricos não se podem introduzir aspas ou esses valores serão encarados como Strings. Deve-se igualmente ter em atenção a ordem pela qual se inserem os valores na tabela. Esta deve respeitar a ordem pela qual os campos foram criados (ver CREATE TABLE) ou arriscamo-nos a introduzir informação nos campos errados (por exemplo, inserir a idade do jogador no nome do jogador).
Inserir dados em tabelas Bases de Dados Antes da inserção, se tivermos dúvidas, devemos realizar um DESCRIBE nome_tabela; para verificar como se encontram ordenados os campos da tabela. No caso de pretender inserir mais do que um jogador em simultâneo bastará acrescentar informação sobre os diferentes jogadores separados por vírgulas. A instrução termina novamente com um ponto e vírgula. Vejamos:
Inserir dados em tabelas Bases de Dados Inserir vários registos
Bases de Dados Listar (Pesquisar) dados de tabelas Para vermos o conteúdo de uma tabela usamos o comando SELECT: SELECT nomes_das_colunas FROM nome_tabela;
Listar (Pesquisar) dados de tabelas Exemplo Bases de Dados Listar conteúdo de uma Tabela
Bases de Dados Listar (Pesquisar) dados de tabelas No exemplo anterior, optou-se por listar todos os campos da tabela Jogador. Contudo, é possível listar apenas alguns campos da tabela. Por exemplo: Listar alguns campos de uma Tabela
Bases de Dados Listar (Pesquisar) dados de tabelas A ordem pela qual se indicam os campos a listar durante a execução do SELECT será a ordem pela qual os campos serão apresentados no ecrã (da esquerda para a direita). É possível alterar a ordem pela qual os dados nos serão mostrados. Mais à frente veremos com maior pormenor as formas de pesquisar dados numa BD. Aqui reside a parte mais importante da linguagem SQL.
Bases de Dados Actualizar dados em tabelas Os dados presentes nas tabelas estão constantemente a necessitar de alterações. Por exemplo, a idade dos jogadores altera todos os anos pelo que é necessário actualizar esse campo do registo. Todavia, não faz sentido pensar em apagar o registo desse jogador e inseri-lo novamente, apenas com a idade diferente. Existe um comando em SQL (UPDATE) que permite manter toda a estrutura do registo alterando apenas um campo, ou os que forem necessários actualizar. UPDATE nome_tabela SET nome_campo1=valor1, nome_campo2=valor2,, nome_campon=valorn WHERE condição;
Bases de Dados Actualizar dados em tabelas Actualizar um registo
Bases de Dados Actualizar dados em tabelas Neste exemplo inseriu-se um novo comando: WHERE. Este é o comando selector (filtro). Ao realizar um UPDATE deste género sem a condição WHERE todos os jogadores da tabela passariam a ter idade igual a 31 anos. Para podermos seleccionar apenas o jogador (neste caso Bruno Alves) é necessário impor uma condição que permita, sem margem para dúvidas, que apenas a idade deste jogador seja alterada. Isso apenas é conseguido através do identificador único do registo (chave-primária) que neste caso é o número de atleta, daí ter acrescentado à query numatleta= 898776.
Apagar dados de tabelas Exemplo Bases de Dados Apagar Jogador
Bases de Dados Actualizar dados em tabelas Mais uma vez foi necessário acrescentar o comando selector WHERE para a execução desta acção sobre a BD. Se não o fizéssemos todos os jogadores seriam apagados da tabela. Garantiu-se assim que apenas o jogador com o número de atleta igual a 898776 fosse apagado dos registos.