Baixe o app para aproveitar ainda mais
Prévia do material em texto
SQL básica Disciplina: Banco de Dados Professor: Wandré Nunes de Pinho Veloso 2 Linguagem SQL • Pode ser considerada um dos principais motivos para o sucesso dos Bancos de Dados Relacionais comerciais • Os usuários podem escrever comandos em um programa de aplicação de BD que pode acessar dados armazenados em dois ou mais SGBDs relacionais sem ter que mudar a sublinguagem do BD (SQL) se os sistemas admitirem o padrão SQL Linguagem SQL • SQL hoje é conhecido como Structed Query Language (Linguagem de Consulta Estruturada) • Originalmente era chamada de SEQUEL (Structed English QUEry Language) • Criada e implementada na IBM Research como a interface para um sistema de BD relacional experimental, chamado System R 3 Linguagem SQL • Evolução – SQL-86 ou SQL1 – ANSI 1986 – SQL-92 ou SQL2 – revisado – SQL:1999 ou SQL3 – SQL:2003 – acréscimo de recursos de XML – SQL:2006 – acréscimo de recursos de XML – SQL 2008 – incorporou mais recursos de BD de objeto 4 Linguagem SQL • É uma linguagem DDL, DML e VDL – Linguagem de Definição de Dados (DDL – Data Definition Language) • Especificação dos esquemas conceitual e interno em SGBD que não possuem uma separação estrita entre níveis – Linguagem de Manipulação de Dados (DML – Data Manipulation Language) • Execução de operações de recuperação, inclusão, alteração e exclusão de dados – Linguagem de Especificação de Visões (VDL – View Definition Language) • Especificação de visões do usuário e seu mapeamento para o esquema conceitual 5 Definições e tipos de dados em SQL • Comando CREATE cria – Esquemas – Tabelas (relações) – Domínios – Outras construções como Views, Assertions e Triggers 6 Esquema e catálogo em SQL • Um esquema SQL é identificado por – Nome de esquema – Identificador de autorização • Para indicar o usuário ou conta proprietário do esquema – Descritores de cada elemento • Esses elementos incluem tabelas, restrições, Views, domínios e outras construções • Comando: CREATE SCHEMA 7 Esquema e catálogo em SQL • Exemplo: CREATE SCHEMA EMPRESA AUTHORIZATION ‘Jsilva’; • Em geral todos os usuários estão autorizados a criar esquemas e seus elementos 8 O comando CREATE TABLE em SQL • Usado para especificar uma nova relação, dando-lhe um nome e especificando seus atributos e restrições iniciais – Atributos recebem um nome, um tipo de dado e quaisquer restrições de atributo • Exemplo: NOT NULL – Restrições de chave, integridade de entidade e integridade referencial podem ser especificadas no CREATE TABLE • Depois da relação ser criada, para ser modificada, o comando ALTER TABLE deve ser utilizado 9 10 11 Esquema de Banco de Dados relacional das consultas SQL anteriores O comando CREATE TABLE em SQL • As relações declaradas por meio das instruções CREATE TABLE são chamadas de tabelas da base ou relações base – Significa que a relação e suas tuplas são realmente criadas e armazenadas como um arquivo pelo SGBD • As relações base são distintas das relações virtuais, criadas por meio da instrução CREATE VIEW – Podem ou não corresponder a um arquivo físico real • Os atributos em uma tabela base são considerados ordenados na sequência em que são especificados no comando CREATE TABLE 12 O comando CREATE TABLE em SQL • Algumas chaves estrangeiras podem causar erros porque dizem respeito a uma tabela que ainda não foi criada ou por ser uma referência circular – Exemplo do próximo slide: • A chave estrangeira Cpf_supervisor na tabela FUNCIONARIO é uma referência circular (referencia ela própria) • A chave estrangeira Dnr na tabela FUNCIONARIO se refere à tabela DEPARTAMENTO, que ainda não foi criada 13 14 O comando CREATE TABLE em SQL • Para lidar com esse tipo de problema, essas restrições podem ser omitidas inicialmente do comando CREATE TABLE, e depois acrescentadas usando a instrução ALTER TABLE 15 Tipos de dados de atributo e domínios em SQL • Numérico – INTEGER ou INT e SMALLINT – FLOAT ou REAL e DOUBLE PRECISION – DECIMAL(i,j) ou DEC(i,j) ou NUMERIC(i,j), onde i é a precisão (número total de dígitos decimais) e j é a escala (número de dígitos após o ponto decimal) 16 Tipos de dados de atributo e domínios em SQL • Cadeia de caracteres – CHAR(n) ou CHARACTER(n), de tamanho fixo • Cadeias mais curtas são preenchidas com caracteres em branco à direita – VARCHAR(n) ou CHAR VARYING(n) ou CHARACTER VARYING(n), onde n é o tamanho máximo – CHARACTER LARGE OBJECT ou CLOB • O tamanho máximo pode ser especificado em kilobytes (K), megabytes (M) ou gigabytes (G). • Exemplo: CLOB(20M); 17 Tipos de dados de atributo e domínios em SQL • Cadeia de bits – BIT(n) de tamanho fixo • Cadeias mais curtas são preenchidas com caracteres em branco à direita – BIT VARYING(n), onde n é o tamanho máximo de bits – BINARY LARGE OBJECT ou BLOB • Assim como o CLOB, especifica o tamanho máximo em kilobits (K), megabits (M) ou gigabits (G) – Exemplo: BLOB(30G); 18 Tipos de dados de atributo e domínios em SQL • Data – DATE: DD-MM-YYYY – TIME: 8 posições com os componentes HOUR, MINUTE e SECOND – Exemplos • DATE ‘13-02-2015’; TIME ‘11:25:32’; • Timestamp – Inclui os campos DATE e TIME, mais um mínimo de seis posições para frações decimais de segundos e um qualificador opcional WITH TIME ZONE • Exemplo: TIMESTAMP ‘13-02-2015 11:25:32.648302’; 19 Tipos de dados de atributo e domínios em SQL • Criação de um domínio – CREATE DOMAIN TIPO_CPF AS CHAR(11); • Podemos usar TIPO_CPF no lugar de CHAR(11) 20 Especificando restrições de atributo e defaults de atributo • Usar restrição NOT NULL quando o valor NULL não for permitido para determinado atributo – Sempre é especificado para atributos que fazem parte da chave primária de cada relação, mas pode ser especificado para quaisquer outros atributos • É possível definir um valor padrão para um atributo anexando a cláusula DEFAULT <valor> a uma definição de atributo – Se nenhuma cláusula default for especificada o valor padrão será NULL para atributos que não possuem a restrição NOT NULL 21 22 Especificando restrições de atributo e defaults de atributo • Limitar valores de atributo ou domínio – CHECK • Usado após uma definição de atributo ou domínio • Exemplo: Suponha que números de departamento sejam restritos a números inteiros entre 1 e 20: – Dnumero INT NOT NULL CHECK (Dnumero > 0 AND Dnumero < 21); • Pode ser usado em conjunto com a instrução CREATE DOMAIN – Exemplo: CREATE DOMAIN D_NUM AS INTEGER CHECK (D_NUM > 0 AND D_NUM < 21); 23 Especificando restrições de chave e integridade referencial • Cláusula PRIMARY KEY – Especifica um ou mais atributos que compõem a chave primária de uma relação • Se a chave primária tiver um único atributo, a cláusula pode acompanhar o atributo diretamente – Exemplo: Dnumero INT PRIMARY KEY; • Cláusula UNIQUE – Especifica as chaves secundárias ou alternativas – Exemplo: Dnome VARCHAR(15) UNIQUE; 24 Especificando restrições de chave e integridade referencial • Cláusula FOREIGN KEY – Chave estrangeira – Especifica a integridade referencial – Pode ser violada quando tuplas são inseridas ou excluídas, ou quando um valor de atributo de chave estrangeira ou chave primária é modificado – O default da SQL é rejeitar a operação de atualização que causará violação • Conhecido como RESTRICT 25 Especificando restrições de chave e integridade referencial • Cláusula FOREIGN KEY – O projetista do esquema pode especificar uma ação alternativa para ser tomada conectandouma cláusula de ação de disparo referencial • SET NULL • CASCADE • SET DEFAULT – Uma opção deve ser qualificada com ON DELETE ou ON UPDATE 26 27 Definições e tipos de dados em SQL • Significa que, se a tupla para um funcionário supervisor é excluída, o valor de Cpf_supervisor será automaticamente definido como NULL para todas as tuplas de funcionários que estavam referenciando a tupla do funcionário excluído • Se o valor de Cpf for atualizado, o novo valor será propagado em cascata de Cpf_supervisor para todas as tuplas de funcionário que referenciam a tupla de funcionário atualizada 28 Definições e tipos de dados em SQL • A ação para CASCADE ON DELETE é excluir todas as tuplas de referência • A ação para CASCADE ON UPDATE é mudar o valor dos atributos de chave estrangeira de referência para o novo valor de chave primária atualizado para todas as tuplas de referência 29 Dando nomes a restrições • A palavra-chave CONSTRAINT – Os nomes de todas as restrições dentro de um esquema em particular precisam ser exclusivos – É usado para identificar uma restrição em particular caso sela deva ser removida mais tarde e substituída por outra – É opcional 30 Especificando restrições sobre tuplas usando CHECK • Restrições baseadas em tupla – Se aplicam individualmente e são verificadas sempre que uma tupla é inserida ou modificada – Exemplo: Suponha que a tabela DEPARTAMENTO tivesse um atributo adicional Dep_data_criacao, que armazena a data em que o departamento foi criado. Então, poderíamos acrescentar um CHECK, ao final da instrução CREATE TABLE, para garantir que a data de início de um gerente seja posterior à data de criação do departamento • CHECK (Dep_data_criacao <= Data_inicio_gerente); 31 Consultas de recuperação básicas em SQL • Instrução básica para recuperar informações: SELECT – Não é o mesmo que a operação SELECT da álgebra relacional • Importante salientar – SQL permite que uma tabela (relação) tenha duas ou mais tuplas que são idênticas em todos os seus valores de atributos – Uma tabela SQL não é um conjunto de tuplas, mas um multiconjunto (também chamado de bag) de tuplas 32 A estrutura SELECT-FROM-WHERE • A forma básica do comando SELECT, às vezes chamada de mapeamento ou bloco select-from-where, é composta pelas três cláusulas, da seguinte forma: SELECT <lista atributos> FROM <lista tabelas> WHERE <condição>; –<lista atributos> são os valores a serem recuperados pela consulta –<lista tabelas> nomes de relação exigidos para processar a consulta –<condição> expressão condicional (booleana) que identifica as tuplas a serem recuperadas 33 A estrutura SELECT-FROM-WHERE • Operadores básicos de comparação lógicos – =, <, <=, >, >= e <> • Exemplo: SELECT Datanasc, Endereco FROM FUNCIONARIO WHERE Pnome=‘João’ AND Minicial=‘B’ AND Unome=‘Silva’; – Esta consulta seleciona as tuplas individuais que satisfazem a condição da cláusula WHERE, depois projeta o resultado nos atributos Datanasc e Endereco 34 A estrutura SELECT-FROM-WHERE • A cláusula SELECT da SQL especifica os atributos cujos valores devem ser recuperados, chamados de atributos de projeção • A cláusula WHERE especifica a condição booleana que deve ser verdadeira para qualquer tupla recuperada, chamada de condição de seleção 35 36 SELECT Datanasc, Endereco FROM FUNCIONARIO WHERE Pnome=‘João’ AND Minicial=‘B’ AND Unome=‘Silva’; A estrutura SELECT-FROM-WHERE • Podemos pensar em uma variável de tupla implícita na consulta SQL variando ou repetindo sobre cada tupla individual na tabela FUNCIONARIO e avaliando a condição na cláusula WHERE • Somente tuplas que satisfazem a condição são selecionadas SELECT Pnome, Unome, Endereco FROM FUNCIONARIO, DEPARTAMENTO WHERE Dnome=‘Pesquisa’ AND Dnumero = Dnr; • Dnome=‘Pesquisa’ é uma condição de seleção • Dnumero = Dnr é uma condição de junção –Combina duas tuplas (uma de DEPARTAMENTO e uma de FUNCIONARIO, sempre que os valores forem iguais) 37 38 SELECT Pnome, Unome, Endereco FROM FUNCIONARIO, DEPARTAMENTO WHERE Dnome=‘Pesquisa’ AND Dnumero = Dnr; A estrutura SELECT-FROM-WHERE • Uma consulta que envolve apenas condições de seleção e junção mais atributos de projeção é conhecida como uma consulta seleção-projeção-junção • Exemplo: SELECT Projnumero, Dnum, Unome, Endereco, Datanasc FROM PROJETO, DEPARTAMENTO, FUNCIONARIO WHERE Dnum=Dnumero AND Cpf_gerente=Cpf AND Projlocal=‘Mauá’; –Dnum=Dnumero relaciona uma tupla de projeto a sua tupla de departamento que o controla –Cpf_gerente=Cpf relaciona o departamento a seu gerente • Cada tupla no resultado será uma combinação de um projeto, um departamento e um funcionário, que satisfaz as condições de junção 39 40 SELECT Projnumero, Dnum, Unome, Endereco, Datanasc FROM PROJETO, DEPARTAMENTO, FUNCIONARIO WHERE Dnum=Dnumero AND Cpf_gerente=Cpf AND Projlocal=‘Mauá’; Nomes de atributos ambíguos, renomeação e variáveis de tupla • O mesmo nome pode ser usado para dois ou mais atributos, desde que estejam em relações diferentes • É preciso qualificar o nome do atributo com o nome da relação para evitar ambiguidade através de um prefixo, separando o nome da relação (ou um apelido) do nome do atributo por um ponto – Exemplo: Atributos de mesmo nome e relações diferentes SELECT Pnome, FUNCIONARIO.Nome, Endereco FROM FUNCIONARIO, DEPARTAMENTO WHERE DEPARTAMENTO.Nome=‘Pesquisa’ AND DEPARTAMENTO.Dnumero=FUNCIONARIO.Dnumero; 41 Nomes de atributos ambíguos, renomeação e variáveis de tupla • Exemplo: Para cada funcionário, recupere o primeiro e o último nome do funcionário e o primeiro e o último nome de seu supervisor imediato SELECT F.Pnome, F.Unome, S.Pnome, S.Unome FROM FUNCIONARIO AS F, FUNCIONARIO AS S WHERE F.Cpf_supervisor=S.CPF; 42 43 Nomes de atributos ambíguos, renomeação e variáveis de tupla • A ambiguidade também surge no caso de consultas que se referem à mesma relação duas vezes SELECT F.Pnome, F.Unome, S.Pnome, S.Unome FROM FUNCIONARIO AS F, FUNCIONARIO AS S WHERE F.Cpf_supervisor=S.Cpf; • F e S são variáveis de tupla ou apelidos para FUNCIONARIO – Podemos pensar F e S como duas cópias diferentes de FUNCIONARIO, sendo F os funcionários e S os supervisores • Um apelido pode vir após a palavra-chave AS ou vir diretamente após o nome da relação, na cláusula FROM – Exemplo: FUNCIONARIO F, FUNCIONARIO S 44 Nomes de atributos ambíguos, renomeação e variáveis de tupla • Também é possível renomear os atributos da relação – Exemplo: FROM FUNCIONARIO AS F(Pn, Mi, Un, Cpf, Dn, End, Sexo, Sal, Scpf, Dnr) – Pn torna-se apelido para Pnome – Mi torna-se apelido para Minicial – Un torna-se apelido para Unome • Essa prática é recomendada, pois resulta em consultas mais fáceis de compreender 45 Cláusula WHERE não especificada e uso do asterisco • A falta de uma cláusula WHERE indica que não há condições sobre a seleção de tuplas • Logo, todas as tuplas da relação especificada na cláusula FROM se qualificam e são selecionadas para o resultado da consulta • Se mais de uma relação for especificada na cláusula FROM e não houver uma cláusula WHERE, então o produto cartesiano (todas as combinações de tuplas possíveis) dessas relações será selecionado 46 Cláusula WHERE não especificada e uso do asterisco • A consulta a seguir seleciona todos os Cpfs de FUNCIONARIO SELECT Cpf FROM FUNCIONARIO; 47 Cláusula WHERE não especificada e uso do asterisco • A consulta a seguir seleciona todas as combinações de um Cpf de FUNCIONARIO e um Dnome de DEPARTAMENTO, independentemente de o funcionário trabalhar ou não parao departamento SELECT Cpf, Dnome FROM FUNCIONARIO, DEPARTAMENTO; • Essa operação é um produto cartesiano • Se especificarmos todos os atributos de FUNCIONARIO e DEPARTAMENTO, obteremos o produto cartesiano real (exceto pela eliminação de duplicatas, se houver) Cláusula WHERE não especificada e uso do asterisco • É extremamente importante especificar cada condição de seleção e junção na cláusula WHERE • Para recuperar todos os valores de um atributo das tuplas selecionadas basta especificar um asterisco (*), que significa todos os atributos • Exemplo: SELECT * FROM FUNCIONARIO WHERE Dnr = 5; 48 49 Cláusula WHERE não especificada e uso do asterisco • A seguinte consulta recupera todos os atributos de um FUNCIONARIO e os atributos do DEPARTAMENTO em que ele ou ela trabalha para todo funcionário no departamento ‘Pesquisa’ SELECT * FROM FUNCIONARIO, DEPARTAMENTO WHERE Dnome=‘Pesquisa’ AND Dnr=Dnumero; 50 Cláusula WHERE não especificada e uso do asterisco • Já a seguinte consulta especifica um produto cartesiano das relações FUNCIONARIO e DEPARTAMENTO SELECT * FROM FUNCIONARIO, DEPARTAMENTO; 51 Tabelas como conjuntos em SQL • SQL não elimina automaticamente tuplas duplicadas nos resultados das consultas porque – A eliminação de duplicatas é dispendiosa (primeiro é necessário classificar para depois eliminar) – O usuário pode querer ver as tuplas duplicadas no resultado de uma consulta – Quando uma função agregada (ver Seção 5.1.7 do livro de Elmasri e Navathe, 6ª. ed.) é aplicada às tuplas, na maioria dos casos não queremos eliminar duplicatas • Embora é recomendado que toda tabela SQL tenha uma chave, pode ser que ela não tenha 52 Tabelas como conjuntos em SQL • Se quisermos eliminar tuplas duplicadas do resultado de uma consulta SQL, usamos a palavra-chave DISTINCT na cláusula SELECT – Somente tuplas distintas • O SELECT DISTINCT elimina duplicatas enquanto usar o SELECT ALL não elimina (quando não especificamos nenhum dos dois, é o mesmo que usar o SELECT ALL) 53 Tabelas como conjuntos em SQL • Se quisermos recuperar o salário de cada funcionário e, caso vários funcionários tiverem o mesmo salário, esse valor aparecerá muitas vezes SELECT ALL Salario FROM FUNCIONARIO; 54 Tabelas como conjuntos em SQL • Se estivermos interessados apenas em valores de salário distintos, independentemente de quantos funcionários ganham esse salário SELECT DISTINCT Salario FROM FUNCIONARIO; 55 Tabelas como conjuntos em SQL • A SQL incorporou algumas operações de conjunto da teoria de conjuntos da matemática – União de conjuntos: UNION – Diferença de conjunto: EXCEPT – Interseção de conjunto: INTERSECT • Tuplas duplicadas são eliminadas do resultado • É preciso garantir que as duas relações da operação tenham os mesmos atributos e que esses apareçam na mesma ordem nas duas relações 56 Tabelas como conjuntos em SQL • Listar todos os números de projeto para aqueles que envolvam um funcionário cujo último nome é ‘Silva’, seja como trabalhador ou como gerente do departamento que controla o projeto (SELECT DISTINCT Projnumero FROM PROJETO, DEPARTAMENTO, FUNCIONARIO WHERE Dnum=Dnumero AND Cpf_gerente=Cpf AND Unome=‘Silva’) UNION (SELECT DISTINCT Projnumero FROM PROJETO, TRABALHA_EM, FUNCIONARIO WHERE Projnumero=Prn AND Fcpf=Cpf AND Unome=‘Silva’); 57 Tabelas como conjuntos em SQL a) Duas tabelas R(A) e S(A) b) R(A) UNION ALL S(A) c) R(A) EXCEPT ALL S(A) d) R(A) INTERSECT ALL S(A) 58 Combinação de padrão de subcadeias e operadores aritméticos • Comparação apenas sobre partes de uma cadeia de caracteres: LIKE • Cadeias parciais são especificadas usando dois caracteres reservados: – % substitui o número qualquer de zero ou mais caracteres – _ (sublinhado/underline) substitui um único caractere 59 Combinação de padrão de subcadeias e operadores aritméticos • Recuperar todos os funcionários cujo endereço esteja em Minas Gerais, MG SELECT Pnome, Unome FROM FUNCIONARIO WHERE Endereco LIKE ‘%Minas Gerais, MG%’; 60 Combinação de padrão de subcadeias e operadores aritméticos • Recuperar todos os funcionários que nasceram durante a década de 1980 SELECT Pnome, Unome FROM FUNCIONARIO WHERE Datanasc LIKE ‘________5_’; • Aqui, ‘5’ precisa ser o nono caractere, de acordo com o nosso formato para data 61 Combinação de padrão de subcadeias e operadores aritméticos • Se for necessário usar o caractere literal sublinhado ou %, deve ser precedido por um caractere de escape, que é especificado após a cadeia usando a palavra-chave ESCAPE – ‘AB\_CD\%EF’ ESCAPE ‘\’ – Representa a cadeia literal ‘AB_CD%’ pois \ é especificado como o caractere de escape • Qualquer caractere não usado na cadeia pode ser escolhido como caractere de escape 62 Combinação de padrão de subcadeias e operadores aritméticos • Se for necessário usar o caractere literal apóstrofo (‘ ’), ele será representado como dois apóstrofos consecutivos: (‘‘), de modo que não será interpretado como o término da cadeia 63 Combinação de padrão de subcadeias e operadores aritméticos • SQL permite o uso de aritmética nas consultas – Adição: +; Subtração: -; Multiplicação: *; Divisão: / • Mostrar os salários com aumento de 10 por cento de cada funcionário que trabalha no projeto ‘ProdutoX’ SELECT F.Pnome, F.Unome, 1.1*F.Salario AS Aumento_salario FROM FUNCIONARIO AS F, TRABALHA_EM AS T, PROJETO AS P WHERE F.Cpf=T.Fcpf AND T.Pnr=P.Projnumero AND P.Projnome=‘ProdutoX’; 64 Combinação de padrão de subcadeias e operadores aritméticos • Para cadeia de caracteres, há o operador de concatenação || • Para tipos data, hora, timestamp e intervalo, os operadores incluem incremento (+) e decremento (-) • Outro operador de comparação é BETWEEN – Recuperar todos os funcionários no departamento 5 cujo salário esteja entre R$ 30.000 e R$ 40.000 SELECT * FROM FUNCIONARIO WHERE (Sal BETWEEN 30000 AND 40000) AND Dnr = 5; – É equivalente a (Sal >= 30000) AND (Sal <= 40000) 65 Ordem dos resultados da consulta • SQL permite que o usuário ordene as tuplas no resultado de uma consulta pelos valores de um ou mais atributos que aparecem, usando a cláusula ORDER BY – Ordenar alfabeticamente pelo sobrenome, depois pelo nome SELECT D.Dnome, F.Unome, F.Pnome, P.Projnome FROM DEPARTAMENTO D, FUNCIONARIO F, TRABALHA_EM T, PROJETO P WHERE D.Dnumero=F.Dnr AND F.Cpf=T.Fcpf AND T.Pnr=P.Projnumero ORDER BY D.Dnome, F.Unome, F.Pnome; 66 Ordem dos resultados da consulta • A ordem padrão está em ordem crescente de valores • Podemos especificar a palavra-chave DESC se quisermos ver o resultado em uma ordem decrescente de valores • A palavra-chave ASC pode ser usada para especificar a ordem crescente explicitamente ORDER BY D.Dnome DESC, F.Unome ASC, F.Pnome ASC 67 Resumo das consultas de recuperação da SQL básica • Uma consulta simples pode consistir em até quatro cláusulas, mas apenas as duas primeiras são obrigatórias – As cláusulas entre colchetes são opcionais SELECT <lista atributos> FROM <lista tabelas> [WHERE <condição>] [ORDER BY <lista atributos>]; 68 Instruções INSERT, DELETE e UPDATE • Comandos utilizados para modificar o Banco de Dados 69 Comando INSERT • Usado para acrescentar uma única tupla a uma relação • Temos de especificar o nome da relação e uma lista de valores para a tupla – Os valores devem ser listados na mesma ordem em que os atributos correspondentes foram especificados no comando CREATE TABLE INSERT INTO FUNCIONARIO VALUES ( ‘Ricardo’, ‘K’, ‘Marini’,‘65329865388’, ‘30-12-1962’, ‘Rua Itapira, 44, Santos, SP’, ‘M’, 37000, ‘65329865388’, 4 ); 70 Comando INSERT CREATE TABLE FUNCIONARIO (Pnome VARCHAR(15) NOT NULL, Minicial CHAR, Unome VARCHAR(15) NOT NULL, Cpf CHAR(11), Datanasc DATE, Endereco VARCHAR(30), Sexo CHAR, Salario DECIMAL(10,2), Cpf_supervisor CHAR(11) NOT NULL, Dnr INT PRIMARY KEY (Cpf)); INSERT INTO FUNCIONARIO VALUES(‘Ricardo’, ‘K’, ‘Marini’, ‘65329865388’, ‘30-12-1962’, ‘Rua Itapira, 44, Santos, SP’, ‘M’, 37000, ‘65329865388’, 4 ); 71 Comando INSERT • Uma segunda forma da instrução INSERT permite que o usuário especifique nomes de atributo explícitos que correspondem aos valores fornecidos no comando INSERT – Os valores precisam incluir todos os atributos com a especificação NOT NULL e nenhum valor padrão – Os valores não especificados são definidos com o seu valor DEFAULT ou NULL INSERT INTO FUNCIONARIO (Pnome, Unome, Dnr, Cpf) VALUES (‘Ricardo’, ‘Marini’, 4, ‘65329865388’); 72 Comando INSERT • Um SGBD que implementa totalmente a SQL deve aceitar e impor todas as restrições de integridade que podem ser especificadas na DDL – Por exemplo: Se tentarmos inserir um funcionário com código de departamento número 2 e não houver nenhum departamento com esse código, essa consulta será rejeitada • De modo semelhante, se nenhum valor é fornecido a uma chave primária ou outro atributo que seja NOT NULL, essa consulta também será rejeitada 73 Comando DELETE • Remove tuplas em uma relação • Inclui a cláusula WHERE, semelhante a que é usada em uma consulta SQL, para selecionar as tuplas a serem excluídas • A exclusão pode se propagar para as tuplas em outras relações se ações de disparo referencial forem especificadas nas restrições de integridade referencial da DDL • Uma cláusula WHERE inexistente especifica que todas as tuplas na relação deverão ser excluídas, porém a tabela permanece no BD, vazia – DROP TABLE: Comando para remover a tabela 74 Comando DELETE DELETE FROM FUNCIONARIO WHERE Unome=‘Braga’; DELETE FROM FUNCIONARIO WHERE Cpf=‘12345678966’; DELETE FROM FUNCIONARIO WHERE Dnr=5; DELETE FROM FUNCIONARIO; 75 Comando DELETE 76 Comando UPDATE • Usado para modificar valores de atributo de uma ou mais tuplas selecionadas • Assim como no DELETE, uma cláusula WHERE no comando UPDATE seleciona as tuplas a serem modificadas em uma única relação – No entanto, a atualização de uma chave primária pode ser propagada para os valores de chave estrangeira das tuplas em outras relações se tal ação de disparo referencial for especificada nas restrições de integridade referencial da DDL 77 Comando UPDATE • Uma cláusula SET adicional no comando UPDATE especifica os atributos a serem modificados e seus novos valores UPDATE PROJETO SET Projlocal = ‘Santo André’, Dnum = 5 WHERE Projnumero=10; 78 Comando UPDATE • Várias tuplas podem ser modificadas com um único comando UPDATE UPDATE FUNCIONARIO SET Salario = Salario * 1.1 WHERE Dnr = 5; • Para modificar várias relações precisamos emitir vários comandos UPDATE 79 Linguagem SQL • Cada SGBD relacional comercial terá, além dos comandos SQL, um conjunto de comandos para especificar – Parâmetros de projeto do BD físico – Estruturas de arquivo para relações – Caminhos de acesso para os arquivos – Índices • São comandos de linguagem de definição de armazenamento (SDL) 80 Bibliografia • Capítulo 4: Elsmari Ramez; Navathe Shamkant B. Sistemas de Banco de Dados – Fundamentos e Aplicações. 6 ed. Pearson, São Paulo, 2011.
Compartilhar