Programação SQL Manipulação de Dados DML Data Manipulation Language
Manipulação de Dados (DML) Os comandos INSERT, UPDATE, DELETE, são normalmente classificados como pertencendo a uma sublinguagem da linguagem SQL denominada DML.
Programação SQL Comando INSERT (inserção de registos simples)
Comando INSERT Permite realizar a introdução de novos registos numa tabela: INSERT INTO Nome_Tabela (Campo1, Campo2, ) VALUES (valor1, valor2, ) INSERT INTO Nome_Tabela VALUES (valor1, valor2, )
Comando INSERT Introduzir na tabela Postal uma linha com os valores 1250 e Mouraria: INSERT INTO Postal (Codigo, Local) VALUES (1250, Mouraria ) INSERT INTO Postal VALUES (1250, Mouraria )
Comando INSERT Pretende-se inserir na Tabela Postal, o ID e o Nome de todos os funcionários: INSERT INTO Postal (Codigo, Local) SELECT ID, Nome FROM Funcionarios
Programação SQL Comando UPDATE
Comando UPDATE Permite alterar os valores já existentes nos campos de uma única tabela: UPDATE* Nome_Tabela [Alias] SET Nome_Coluna1 = {expressão1, query1}, Nome_Coluna2 = {expressão2, query2}, [WHERE Condiçao]
Comando UPDATE Aumentar o salário 10% a todos os funcionários: UPDATE Funcionarios SET Salario = Salario * 1.1
Comando UPDATE Aumentar o salário 10% apenas ao Paulo Silva, adicionando-lhe um ano à idade: UPDATE Funcionarios SET Salario = Salario * 1.1, WHERE Nome = Paulo Silva
Comando UPDATE Pretende-se que o Salário de Ana Lopes passe a ser igual ao menor salário da empresa e que o seu campo Telefone passe a ter o valor NULL. UPDATE Funcionarios SET Salario = (SELECT MIN (Salario) FROM Funcionarios), Telefone = NULL WHERE Nome = Ana Lopes
Comando UPDATE Adiciona o prefixo 21 ao telefone de todos os funcionários que têm telefone e vivem em Lisboa: UPDATE Funcionarios SET Telefone = 21 + Telefone WHERE Telefone IS NOT NULL AND EXISTS (SELECT * FROM Postal WHERE Codigo = Cod_Postal AND Local = Lisboa )
Programação SQL Comando DELETE
Comando DELETE Permite apagar conjunto de linhas existentes numa única tabela: DELETE* FROM Nome_Tabela [Alias] [WHERE Condiçao]
Comando DELETE Escrever o comando SQL que permita apagar todas as linhas da tabela Comissão. DELETE FROM Comissão O comando DELETE apaga linhas completas de uma determinada tabela.
Comando DELETE Eliminar o registo do funcionário Jorge da tabela Funcionários: DELETE FROM Funcionarios WHERE ID = 3 DELETE FROM Funcionarios WHERE Nome LIKE* Jorge% SqlServer Oracle SyBase DELETE FROM Funcionarios WHERE Nome LIKE* Jorge* Access
Comando DELETE Apagar as localidades da tabela Postal que não estão associadas a ninguém. DELETE FROM Postal WHERE codigo NOT IN ( SELECT Cod_Postal FROM Funcionarios )
Comando DELETE Se na BD estiver definida integridade referencial* entre as tabelas A e B, então só poderá apagar uma linha A quando em B não existirem referências à linha que se pretende apagar. Por exemplo, não faz sentido remover as linhas na tabela Postal que têm códigos associados na tabela Funcionários.
Comando DELETE Se estiver definida uma relação do tipo CASCADE* DELETE entre as tabelas A e B, e se o campo x for chave primária em A e chave estrangeira em B, então bastará eliminar uma linha em A que todas as linhas de B que contenham essa chave estrangeira serão eliminadas automaticamente.
Comando DELETE Exemplo: Quando pretendemos apagar uma factura: Quando se apaga o cabeçalho da factura, não faz sentido deixar o conjunto das linhas que a compõem.
Programação SQL Manipulação de Datas
Manipulação de Datas Um dos principais problemas da informática é o tratamento de Datas. Representar um número: 10 ; 52.23 ; Representar um conjunto de caracteres: escola secundária Representar uma data:?
Manipulação de Datas - ACCESS O Access usa o formato #mm/dd/yyyy# (entre cardinais) para representar uma data no formato habitual. A introdução tem que ser obrigatoriamente feita no formato mm/dd/yyyy INSERT INTO tabela (numero, texto, data_nasc) VALUES (1, Maria, #07/02/1969#)
Manipulação de Datas SQL Server No SQl Server envia-se a data como se fosse uma string: INSERT INTO tabela (numero, texto, data_nasc) VALUES (1, Maria, 02 Jul 1969 )
Manipulação de Datas Oracle Em Oracle utiliza-se a função TO_DATE que recebe uma data (em formato string) e o formato (outra string) em que esta está especificada, devolvendo uma data formatada de acordo com o formato especificado: INSERT INTO tabela (numero, texto, data_nasc) VALUES (1, Maria, TO_DATE ( 02/07/1969, dd/mm/yyyy ))
Programação SQL Views e Índices
Views e Índices Suponhamos, por exemplo, que na nossa tabela Funcionários existia informação geral (nome, morada, telefone, etc.), informação contabilística (salário, subsídios, ) e informação médica (hepatites, sida, drogas, )
Views e Índices Embora a informação esteja toda localizada fisicamente na mesma tabela, não faz sentido que o departamento de contabilidade tenha acesso aos dados médicos de cada pessoa, da mesma forma que o pessoal médico não deverá ter acesso ao salário que cada funcionário aufere.
Views e Índices Mas apesar desta separação ser absolutamente necessária, ambos os serviços deverão ter acesso aos dados de informação geral para que o cheque com o salário possa ser enviado para a mesma morada para onde devem seguir as análises clínicas realizadas nos serviços médicos.
Views e Índices As Views servem para resolver esta necessidade de diferentes utilizadores verem a mesma tabela ou tabelas de forma distinta.
Programação SQL Views e Índices Comando CREATE VIEW
Views e Índices Comando CREATE VIEW Para criar um View, utiliza-se o comando CREATE VIEW, cuja sintaxe é a seguinte: CREATE VIEW nome_view [(Lista de colunas)] AS comando_ SELECT [WITH CHECK OPTION]
Views e Índices Comando CREATE VIEW Criar uma View Funcionarios01 com o conjunto dos funcionários cujo salário é menor que 3800. CREATE VIEW Funcionarios01 AS SELECT * FROM Funcionarios WHERE Salario < 3800 ACCESS* Uma vez criada a View podemos interrogar a View como se de uma tabela vulgar se tratasse.
Views e Índices Comando CREATE VIEW Mostrar todo o conteúdo da View Funcionarios01. SELECT * FROM Funcionarios01 ACCESS Sql Server Oracle SyBase
Views e Índices Comando CREATE VIEW Mostrar o conteúdo da View Funcionarios01 para as pessoas com mais de 30 anos. SELECT * FROM Funcionarios01 WHERE Idade > 30 Access Sql Server Oracle SyBase
Views e Índices Comando CREATE VIEW Criar uma View Funcionarios02 com o conjunto dos funcionários cujo salário é menor que 3800. Esta View deverá conter apenas os Campos ID, Nome e Salário. CREATE VIEW Funcionarios02 AS SELECT ID, Nome, Salario FROM Funcionarios ACCESS* WHERE Salario < 3800 Uma vez criada a View podemos interrogar a View como se de uma tabela vulgar se tratasse.
Views e Índices Comando CREATE VIEW Mostrar todo o conteúdo da View Funcionarios02. SELECT * FROM Funcionarios02 ACCESS Sql Server Oracle SyBase
Views e Índices O nomes das colunas da View são por defeito, iguais aos nomes das tabelas a que pertencem. No entanto, se o utilizador o desejar, pode atribuir um novo nome a cada uma das colunas da View. Exemplo:
Views e Índices Comando CREATE VIEW Criar uma View Funcionarios03 com as características da View anterior, alterando os nomes das colunas para Num, Nome e Ordenado: CREATE VIEW Funcionarios03 (Num, Nome, Ordenado) AS SELECT ID, Nome, Salario FROM Funcionarios WHERE Salario < 3800 ACCESS*
Views e Índices Qualquer alteração nos dados da tabela Funcionários será imediatamente reflectida em todas as Views que lhe estejam associadas: UPDATE Funcionarios SET Salario=600 WHERE ID=37 UPDATE Funcionarios03 SET Salario=600 WHERE ID=37
Views e Índices As Views não possuem dados próprios, os seus dados pertencem às tabelas das quais derivam. Na definição de uma View podem existir tabelas ou outras Views.
Programação SQL Views e Índices Juntando várias tabelas numa View
Views e Índices Juntando várias tabelas numa View É possível juntar várias tabelas numa única view: CREATE VIEW Moradas AS SELECT Nome, Cod_Postal, Local FROM Funcionarios, Postal WHERE Cod_Postal=Codigo ACCESS*
Views e Índices Juntando várias tabelas numa View As Views podem, inclusive, simplificar muito o processo de cálculo e de agrupamento da informação: CREATE VIEW vcomissão (ID, Nome, Salario, Comissao) AS SELECT C.ID, Nome, Salario, SUM(Valor) FROM Funcionarios F, Comissao C WHERE F.ID=C.ID GROUP BY C.ID, Nome, Salario ACCESS*
Programação SQL Views e Índices Cláusula WITH CHECK OPTION
Views e Índices Cláusula WITH CHECK POINT CREATE VIEW Funcionarios01 AS SELECT * FROM Funcionarios WHERE Salario < 100000 ACCESS Esta é constituída pelo seguinte conjunto de dados:
Views e Índices Cláusula WITH CHECK POINT ID Nome Idade Salario Telefone Cod_Postal 25 Paulo 32 95000 1500 37 Isabel 28 86000 1100 42 António 43 74000 243990435 1500 Para inserir um valor nesta View, bastará escrever o comando INSERT adaptado à View:
Views e Índices Cláusula WITH CHECK POINT INSERT INTO Funcionarios01 VALUES (999, Mário, 38, 85000, NULL, 1500) O comando INSERT é executado com sucesso. No entanto, nada nos impede de inserir nesta View alguém cujo salário seja superior a 100000, embora a condição de criação da View não incluísse valores superiores a 100000:
Views e Índices Cláusula WITH CHECK POINT INSERT INTO Funcionarios01 VALUES (100, Fernanda, 69, 200000, NULL, 2300) O comando INSERT é executado com sucesso, sem qualquer tipo de erro. No entanto, se seleccionarmos os dados da View, podemos constatar que esta linha não aparece:
Views e Índices Cláusula WITH CHECK POINT ID Nome Idade Salario Telefone Cod_Postal 25 Paulo 32 95000 1500 37 Isabel 28 86000 1100 42 António 43 74000 243990435 1500 999 Mário 38 85000 CREATE VIEW Funcionarios01 AS SELECT * FROM Funcionarios WHERE Salario < 100000 1500
Views e Índices Cláusula WITH CHECK POINT No entanto, se seleccionarmos o conteúdo da tabela Funcionarios, podemos observar que, embora estejamos a usar a View, estamos na realidade a introduzir valores da Tabela Funcionarios fora dos limites do salário a que a View deveria estar sujeita. A cláusula WITH CHECK POINT existe para evitar que uma View possa manipular registos fora dos seus limites de definição:
Views e Índices Cláusula WITH CHECK POINT CREATE VIEW TesteView AS SELECT * FROM Funcionarios ACCESS WHERE Salario < 100000 WITH CHECK OPTION
Programação SQL Views e Índices Comando DROP VIEW
Views e Índices Comando DROP VIEW Para se apagar uma View, utiliza-se o comando: ACCESS DROP VIEW nome_da_view
Programação SQL Views e Índices Índices
Views e Índices Índices Uma das maiores confusões que existe entre os utilizadores de Bases de Dados reside na confusão entre os termos Ordenação e Indexação. A Indexação é a estrutura que permite simular a ordenação dos dados. Na realidade consiste normalmente numa árvore de termos que revertem para uma determinada posição no ficheiro ou tabela.
Views e Índices Índices Suponhamos que pretendíamos, a partir de um ficheiro de dados vazio, criar um índice numa árvore binária. Uma árvore binária é um estrutura em que, para cada um dos nós da árvore, todos os nós à esquerda são menores ou iguais à chave de indexação e todos os nós à direita são superiores à chave de indexação.
Views e Índices Índices ID 2456 4561 6452 1289 4978 3254 5698 Nome Célia José Florinda António Beatriz Ana Paulo Apelido Morais Lopes Simões Dias Costa Rita Viegas Assim, o conjunto de dados daria origem à árvore apresentada a seguir:
Views e Índices Índices Célia 1 António 4 José 2 Ana 6 Beatriz 5 Florinda 3 Paulo 7 Index sobre o Nome
Programação SQL Views e Índices Comando CREATE INDEX
Views e Índices Comando CREATE INDEX Este comando permite fazer a criação de índices a partir de código SQL, apesar da maioria dos sistemas gestores de BD incluir utilitários que o façam de forma, mais ou menos, visual: A sintaxe do comando CREATE INDEX é a seguinte:
Views e Índices Comando CREATE INDEX CREATE[UNIQUE]INDEX Nome_do_Index ON Nome_Tabela (col1 {ASC DESC}, col2 )
Views e Índices Comando CREATE INDEX Criar um índice sobre o campo Local CREATE INDEX ilocal ON Postal (Local) Criar um índice único sobre o nome dos Funcionários. CREATE UNIQUE INDEX indnome ON Funcionários (Nome)
Views e Índices Comando CREATE INDEX Criar um índice descendente sobre o Salário. CREATE INDEX indsal ON Funcionários (Salário DESC) Criar um índice único sobre os campos ID e ID_Msg da tabela das Comissões CREATE UNIQUE INDEX indcomissao ON Comissao (ID, ID_Msg)
Views e Índices Comando CREATE INDEX Os índices são automaticamente actualizados pelos sistema gestor de BD, cada vez que um registo indexado é inserido, alterado ou apagado.
Programação SQL Views e Índices Comando DROP INDEX
Views e Índices Comando DROP INDEX Para apagar um índice, utiliza-se o comando DROP INDEX que, mais uma vez, segue a forma de uso dos comandos DROP anteriormente apresentados. A sua sintaxe é:
Views e Índices Comando DROP INDEX DROP INDEX Nome_do_Index
Views e Índices Comando DROP INDEX Escrever os comandos necessários para apagar todos os índices criados anteriormente: DROP INDEX ilocal DROP INDEX indnome DROP INDEX indsal DROP INDEX indcomissao
Views e Índices Ao contrários das VIEWS (também chamadas tabelas virtuais por não existirem fisicamente), os índices existem fisicamente em disco.