Banco de Dados I SQL DDL. Frederico D. Bortoloti freddb@ltc.ufes.br



Documentos relacionados
SQL DML. Frederico D. Bortoloti

SQL DDL. Frederico D. Bortoloti

Banco de Dados I Linguagem SQL Parte 2. Autor: Prof. Cláudio Baptista Adaptado por: Prof. Ricardo Antonello

SQL. SQL (Structured Query Language) Comando CREATE TABLE. SQL é uma linguagem de consulta que possibilita:

SQL é uma linguagem de consulta que implementa as operações da álgebra relacional de forma bem amigável.

SQL Linguagem de Definição de Dados. Banco de Dados Profa. Dra. Cristina Dutra de Aguiar Ciferri

Básico da Linguagem SQL. Definição de Esquemas em SQL. SQL(Structured Query Language)

Faculdade Pitágoras 16/08/2011. Curso Superior de Tecnologia: Banco de Dados Sistemas para Internet

Comandos de Manipulação

Banco de Dados I. Aula 12 - Prof. Bruno Moreno 04/10/2011

Faculdade Pitágoras. Curso Superior de Tecnologia: Banco de Dados. Disciplina: Banco de Dados Prof.: Fernando Hadad Zaidan SQL

SQL. Prof. Márcio Bueno.

Structured Query Language (SQL)

Linguagem SQL Sub-linguagem DDL

Modelo de Dados Relacional Restrições de um Banco de Dados Relacional

Introdução ao SQL. Aécio Costa

SQL Linguagem de Manipulação de Dados. Banco de Dados Profa. Dra. Cristina Dutra de Aguiar Ciferri

Comandos DDL. id_modulo = id_m odulo

Linguagem de Consulta - SQL

SQL. Autor: Renata Viegas

SQL - Criação de Tabelas

A linguagem SQL

Programação com acesso a BD. Prof.: Clayton Maciel Costa clayton.maciel@ifrn.edu.br

Linguagem SQL. Comandos Básicos

Introdução. Categorias

Álgebra Relacional. Conjunto de operações que usa uma ou duas relações como entrada e gera uma relação de saída. Operações básicas:

Uma expressão básica em SQL consiste em três cláusulas: select, from e where.

Definida pelo American National Standard Institute (ANSI) em 1986

Structured Query Language (SQL) Ambiente Simplificado de um SGBD

Programação SQL. Introdução

Linguagem de Consulta Estruturada SQL- DML


S Q L 31/03/2010. SQL - Structured Query Language Linguagem de Consulta Estruturada

UNIVERSIDADE FEDERAL DE SANTA MARIA - UFSM COLÉGIO AGRÍCOLA DE FREDERICO WESTPHALEN BANCO DE DADOS II

PHP INTEGRAÇÃO COM MYSQL PARTE 1

Introdução à Banco de Dados. Nathalia Sautchuk Patrício

S Q L 15/01/2013. Enfoques de SQL. Enfoques de SQL SQL. Usos de SQL. SQL - Origem/Histórico. Gerenciamento de Dados e Informação

Banco de dados 1. Linguagem SQL DDL e DML. Professor: Victor Hugo L. Lopes

UNIVERSIDADE VEIGA DE ALMEIDA CURSO DE BACHARELADO EM CIÊNCIA DA COMPUTAÇÃO CURSO SUPERIOR DE TECNOLOGIA EM PROCESSAMENTO DE DADOS BANCO DE DADOS

Introdução à Engenharia da Computação. Banco de Dados Professor Machado

Princípio dos anos 70 IBM desenvolve a linguagem Sequel para o System R. Standards ISO e ANSI SQL-86, SQL-89, SQL-92, SQL:1999, SQL:2003

SQL Linguagem de Definição de Dados. Laboratório de Bases de Dados Profa. Dra. Cristina Dutra de Aguiar Ciferri

SQL Structured Query Language

Linguagem de Consulta Estruturada (SQL)

4.6. SQL - Structured Query Language

Banco de Dados. Prof. Antonio

SQL (Structured Query Language)

SQL (Structured Query Language)

BASES DE DADOS I LTSI/2. Universidade da Beira Interior, Departamento de Informática Hugo Pedro Proença, 2010/2011

SQL (Structured Query Language)

Banco de Dados. Módulo 7 - Modelo Relacional. Definição do Esquema Relacional em SQL. modulo07.prz 1 10/09/01

Structured Query Language (SQL) Aula Prática

SQL S Q L. Introdução. Enfoques de SQL. SQL - Origem/Histórico. Usos de SQL. SQL - Vantagens. Banco de Dados. Fernando Fonseca Ana Carolina

EXERCÍCIOS PRÁTICOS. Banco de Dados

Exemplo Clínica. Exemplo Clínica. Exemplo Clínica. Exemplo Clínica. (

Núcleo de Pós Graduação Pitágoras

SQL comando SELECT. SELECT [DISTINCT] <campos> FROM <tabela> [condição] [ ; ] Paulo Damico - MDK Informática Ltda.

SQL TGD/JMB 1. Projecto de Bases de Dados. Linguagem SQL

Roteiro 9 - SQL Básico: chave estrangeira, operadores de comparação e operadores booleanos

LINGUAGEM SQL. SQL Server 2008 Comandos iniciais

FEAP - Faculdade de Estudos Avançados do Pará PROFª LENA VEIGA PROJETOS DE BANCO DE DADOS UNIDADE V- SQL

EXEMPLOS DE COMANDOS NO SQL SERVER

UNIVERSIDADE FEDERAL DO MARANHÃO - UFMA. Banco de Dados II. Integridade. Carlos Eduardo Portela Serra de Castro

Banco de Dados SQL. João Eduardo Ferreira Osvaldo Kotaro Takai

SQL - Banco de Dados. Disciplina: Banco de Dados. Professor: José Antônio. José Antônio - CEFET-RN 23/09/2015

BANCO DE DADOS BANCO DE DADOS. Prof. Patrícia Lucas 3º Trimestre

SQL: Definição de tabelas, Modificações à Base de Dados

1. Domínio dos Atributos

O que são Bancos de Dados?

Bases de Dados. Parte V: A Linguagem SQL

SQL (Linguagem de Consulta Estruturada)

SQL (STRUCTUREDQUERY LANGUAGE)

UNIVERSIDADE FEDERAL DE SANTA MARIA - UFSM COLÉGIO AGRÍCOLA DE FREDERICO WESTPHALEN BANCO DE DADOS II

Banco de dados. Linguagens de Banco de Dados II. Wedson Quintanilha da Silva -

Stored Procedures. Renata Viegas

Curso PHP Aula 08. Bruno Falcão

NOME SEXO CPF NASCIMENTO SALARIO

SQL SQL BANCO DE DADOS 2. Componentes do SQL (1) Componentes do SQL (2) DDL Criação de banco de dados. Padrões de SQL

AULA 6 INTEGRIDADOS DOS DADOS - CRIANDO RESTRIÇÕES

IF685 Gerenciamento de Dados e Informação - Prof. Robson Fidalgo 1

SQL (Structured Query Language)

A Linguagem SQL. Introdução a Banco de Dados DCC 011

14/08/2008. Curso Superior de Tecnologia em Banco de Dados Disciplina: Projeto de Banco de Dados Relacional 1 Prof.: Fernando Hadad Zaidan

Banco de Dados II. Introdução Revisão - normalização -modelagem - sql básico

Banco de Dados I. Linguagem de Consulta (parte I) DDL DML

LINGUAGEM SQL. DML - Linguagem de Manipulação de Dados

AULA 2 INTERAÇÃO COM O BANCO DE DADOS

Ex.: INSERT INTO tmpautor (CDAUTOR, NMAUTOR) VALUES (1, Renato Araújo )

3) Palavra-chave distinct (select-from). Obter apenas os pibs distintos entre si.

Linguagem SQL Parte I

18/08/2008. Curso Superior de Tecnologia em Banco de Dados Disciplina: Projeto de Banco de Dados Relacional 1 Prof.: Fernando Hadad Zaidan

Disciplina: Unidade V: Prof.: Período:

BANCO DE DADOS Parte 4

Banco de Dados. Maurício Edgar Stivanello

SQL (Structured Querie Language) Escola Secundária de Emídio Navarro 2001/2002 Estruturas, Tratamento e Organização de Dados

Linguagem SQL (Parte I)

Introdução ao SQL. O que é SQL?

Programação SQL. Manipulação de Dados. DML Data Manipulation Language

Transcrição:

Banco de Dados I SQL DDL Frederico D. Bortoloti freddb@ltc.ufes.br

Introdução Modelo relacional encontra-se padronizado pela indústria de informática. Ele é chamado de padrão SQL (Structured Query Language) SQL usa uma combinação de construtores em álgebra relacional e cálculo relacional Embora o próprio nome se refira a SQL como uma linguagem de consulta, ela possui outros recursos

Introdução O padrão SQL define precisamente uma interface SQL para a definição de tabelas, para as operações sobre as mesmas (seleção, projeção, junção e outras) e para a definição de regras de integridade de bancos de dados A interface SQL é implementada em todos os sistemas de bancos de dados relacionais existentes A existência de padrões facilita a interoperabilidade

Introdução Um SGBD necessita possuir duas linguagens DDL (Data Definition Language) - Usada para definir os esquemas, atributos, visões, regras de integridade, índices, etc. DML (Data Manipulation Language) - Usada para se ter acesso aos dados armazenados no BD Exemplos de linguagens de consulta QUEL QBE SQL

Histórico A versão original de SQL foi desenvolvida pela IBM Originalmente chamada de SEQUEL Parte do projeto System R Tornou-se a linguagem padrão para SGBD s relacionais Existem diversos padrões para SQL ANSI-SQL (SQL-86) IBM SQL (SQL-89) ANSI/ISO SQL (SQL 92) SQL-3 (SQL 99)

Partes do SQL SQL é dividido em diversas partes Linguagem de definição de dados (DDL) proporciona comandos para a definição, exclusão e modificação de esquemas de relações e criação de índices Linguagem interativa de manipulação de dados (DML) linguagem de consulta baseada na álgebra e no cálculo relacional de tuplas, incluindo inserção, exclusão e modificação de tuplas

Partes do SQL Incorporação DML (Embedded DML) projetada para aplicação em linguagens de programação de uso geral, como Cobol, Pascal, Fortran e C Definição de visões Autorização definição de direitos de acesso a relações e visões Integridade especificação de regras de integridade que os dados que serão armazenados deverão satisfazer Controle de transações comandos para especificação de iniciação e finalização de transações

Domínios Tipos de Domínios em SQL-92 Tipo Descrição Char(n) ou character String de tamanho fixo n Varchar(n) ou Character varying String de tamanho variável com tamanho máximo n int ou integer Número inteiro Smallint Inteiro pequeno Numeric(p,d) Número ponto fixo com precisão definida pelo usuário. Com p indicando o número de dígitos e d indicando dos p dígitos os que estão à direita do ponto decimal real, double precision Ponto flutuante e ponto flutuante de precisão dupla Float(n) Ponto flutuante com precisão definida pelo usuário Date Data: aaaa/mm/dd Time Hora: hh:mm:ss

Comandos SQL DDL Os comandos SQL para definição de dados são: CREATE DROP ALTER SQL permite a criação de domínios CREATE DOMAIN nome_pessoa char(20) depois nome_pessoa pode ser usado como domínio de um atributo qualquer

Comandos SQL DDL CREATE TABLE: especifica uma nova tabela (relação), dando o seu nome e especificando as colunas (atributos), cada uma com seu nome, tipo e restrições Sintaxe: CREATE TABLE r (A 1 D 1, A 2 D 2,..., A N D N, <regra de integridade 1 >,..., <regra de integridade K > ) Onde r é o nome da relação, A i é um nome de atributo e D i é o domínio do atributo A i

Comandos SQL DDL As definições dos atributos têm o seguinte formato: atributo tipo [NOT NULL [UNIQUE]] [DEFAULT valor] Onde: atributo: nome do atributo que está sendo definido tipo_dado: domínio do atributo NOT NULL: expressa que o atributo não pode receber valores nulos UNIQUE: indica que o atributo tem valor único na tabela. Qualquer tentativa de se introduzir uma linha na tabela contendo um valor igual ao do atributo será rejeitada. DEFAULT valor: indica um valor a ser atribuído ao atributo caso não seja determinado um valor na inserção

Comandos SQL DDL Regras de integridade (constraints) Integridade de chave PRIMARY KEY (atributos chave) Integridade referencial FOREIGN KEY (atributos) REFERENCES tabela_base(atributos) Integridade de domínio CHECK (condição)

Comandos SQL DDL CREATE TABLE empregado ( nome VARCHAR(15) NOT NULL, matricula char(9) NOT NULL, datanasc DATE, endereco VARCHAR(30), sexo CHAR, salario NUMERIC(10,2), supervisor CHAR(9), depto INT NOT NULL, PRIMARY KEY (matricula), CHECK (salario >= 0), FOREIGN KEY (supervisor) REFERENCES empregado(matricula), FOREIGN KEY (depto) REFERENCES departamento(coddep) );

Comandos SQL DDL CREATE TABLE departamento ( nomedep VARCHAR(15) NOT NULL, coddep INT NOT NULL, gerente CHAR(9) NOT NULL, datainicioger DATE, PRIMARY KEY(codDep), UNIQUE (nomedep), FOREIGN KEY (gerente) REFERENCES empregado(matricula) );

Comandos SQL DDL CREATE TABLE estudante ( nome char(15) NOT NULL, id-estudante char(10) NOT NULL, nivel char(15) NOT NULL, PRIMARY KEY (id-estudante), CHECK (nivel IN ( Bacharelado, Mestrado, Doutorado )))

Comandos SQL DDL O valor NULL é um valor válido para todos os tipos em SQL, salvo se o tipo for definido como NOT NULL Sabemos que uma chave primária não pode conter valores nulos e repetições O SQL-89 obrigava os atributos da chave primária a serem declarados como NOT NULL e UNIQUE SQL-92 já assume essas condições, sua declaração é redundante

Comandos SQL DDL Exercício: Defina as tabelas abaixo usando SQL Fornecedor (codigo, nome, cidade) Venda (codforn, codpeca, quantidade, data) Peca (codpeca, nome, descricao) É obrigatório que: quantidade seja maior que zero nome da peça não seja nulo

Comandos SQL DDL CREATE TABLE Fornecedor ( codigo CHAR(10) NOT NULL, nome VARCHAR(50) NOT NULL, cidade VARCHAR(80), PRIMARY KEY(codigo));

Comandos SQL DDL CREATE TABLE Venda ( codforn CHAR(10) NOT NULL, codpeca CHAR(10) NOT NULL, quantidade INT NOT NULL, data DATE NOT NULL, PRIMARY KEY (codforn,codpeca), FOREIGN KEY (codforn) REFERENCES Fornecedor(codigo), CHECK (quantidade > 0));

Comandos SQL DDL CREATE TABLE Peca ( codpeca CHAR(10) NOT NULL, nome VARCHAR(50) NOT NULL, descricao VARCHAR(100), PRIMARY KEY (codpeca))

Comandos SQL DDL Chave estrangeira É definida com a cláusula FOREIGN KEY Alguns SGBD s permitem que se use uma notação abreviada para chave estrangeira quando esta é formada por um único atributo CREATE TABLE Empregado ( matricula CHAR(9) NOT NULL, nome VARCHAR(15) NOT NULL, supervisor CHAR(9) REFERENCES Empregado(matricula), coddep INT NOT NULL REFERENCES Departamento(codigo), );

Comandos SQL DDL Uma cláusula FOREIGN KEY inclui regras de remoção / atualização: FOREIGN KEY (coluna) REFERENCES tabela [ON DELETE {RESTRICT CASCADE SET NULL SET DEFAULT}] [ON UPDATE {RESTRICT CASCADE SET NULL SET DEFAULT}] Supondo que T2 tem uma chave estrangeira para T1, vejamos as cláusulas ON DELETE e ON UPDATE

Comandos SQL DDL ON DELETE RESTRICT: (default) significa que uma tentativa de se remover uma linha de T1 falhará se alguma linha em T2 combina com a chave CASCADE: remoção de uma linha de T1 implica em remoção de todas as linhas de T2 que combina com a chave de T1 SET NULL: remoção de T1 implica em colocar NULL em todos os atributos da chave estrangeira de cada linha de T2 que combina SET DEFAULT: remoção de linha em T1 implica em colocar valores DEFAULT nos atributos da chave estrangeira de cada linha de T2 que combina

Comandos SQL DDL ON UPDATE RESTRICT: (default) update de um atributo de T1 falha se existem linhas em T2 combinando CASCADE: update de atributo em T1 implica que linhas que combinam em T2 também serão atualizadas SET NULL: update de T1 implica que valores da chave estrangeira em T2 nas linhas que combinam são postos para NULL SET DEFAULT: update de T1 implica que valores da chave estrangeira de T2 nas linhas que combinam terão valores default aplicados

Comandos SQL DDL As restrições de integridade podem ter um nome e serem especificadas com a cláusula CONSTRAINT Isto permite que possamos no futuro eliminar (DROP) ou alterar (ALTER) o constraint O exemplo a seguir mostra o uso de CONSTRAINT, DEFAULT, ON DELETE e ON UPDATE

Comandos SQL DDL CREATE TABLE empregado ( depto INT NOT NULL DEFAULT 1, CONSTRAINT emppk PRIMARY KEY(matricula), CONSTRAINT empsuperfk FOREIGN KEY(supervisor) REFERENCES empregado(matricula) ON DELETE SET NULL ON UPDATE CASCADE, CONSTRAINT deptofk FOREIGN KEY (depto) REFERENCES departamento(codigo) ON DELETE SET DEFAULT ON UPDATE CASCADE )

Comandos SQL DDL ALTER TABLE Permite que se altere os atributos de uma determinada tabela ou que se adicione novos atributos (evolução de esquemas) Os novos atributos terão valores nulos em todas as linhas Ao incluirmos uma coluna devemos especificar o seu tipo de dado, não podendo esta coluna ser NOT NULL

Comandos SQL DDL Sintaxe: ALTER TABLE tabela_base ADD atributo tipo_dado Exemplo: ALTER TABLE Peca ADD espessura INT

Comandos SQL DDL Podemos remover um atributo usando a sintaxe ALTER TABLE tabela_base DROP atributo [CASCADE RESTRICT] CASCADE: remove todas as restrições relativas ao atributo e visões que contêm o atributo RESTRICT: não permite a remoção do atributo se este é usado numa visão ou como chave estrangeira numa outra tabela

Comandos SQL DDL Exemplos: ALTER TABLE empregado DROP endereco CASCADE; ALTER TABLE departamento ALTER gerente DROP DEFAULT ALTER TABLE departamento ALTER gerente SET DEFAULT 333444555 ALTER TABLE empregado DROP CONSTRAINT empsuperfk; ALTER TABLE empregado ADD CONSTRAINT empsuperfk FOREIGN KEY (supervisor) REFERENCES empregado (matricula)

Comandos SQL DDL DROP TABLE Remove uma tabela-base do BD. Remove tanto os dados quanto a definição da tabela Sintaxe DROP TABLE <nometabela> Exemplo DROP TABLE Peca

Comandos SQL DDL Especificando índices em SQL SQL possui comandos para criar e remover índices em atributos de relações base (faz parte da SQL DDL) Um índice é uma estrutura de acesso físico que é especificado em um ou mais atributos de um arquivo, permitindo um acesso mais eficiente aos dados Se os atributos usados nas condições de seleção e junção de uma query são indexados, o tempo de execução da query é melhorado

Comandos SQL DDL Ex.: Criar um índice no atributo nome da relação Empregado CREATE INDEX nomeempindex ON Empregado(nome) O default é ordem ascendente, se quisermos uma ordem descendente adicionamos a palavra chave DESC depois do nome do atributo

Comandos SQL DDL Para especificar a restrição de chave usamos a palavra UNIQUE CREATE UNIQUE INDEX matrempindex ON Empregado(matricula) Para eliminarmos um índice usamos o comando DROP Ex. DROP INDEX nome-indice

Comandos SQL DDL Restrições de domínios Na criação de domínios, é possível aplicar constraints para realizar algumas restrições Exemplos CREATE DOMAIN turno_trabalho NUMERIC(5,2) CONSTRAINT valor_teste_turno CHECK (VALUE >= 4,00) CREATE DOMAIN numero_conta CHAR(10) CONSTRAINT teste_nulo_numero_conta CHECK (VALUE NOT NULL) CREATE DOMAIN tipo_conta CHAR(10) CONSTRAINT teste_tipo_conta CHECK (VALUE IN ( Corrente, Poupança ))

Banco de Dados I SQL DML Frederico D. Bortoloti freddb@ltc.ufes.br

SQL - DML Os exemplos da aula serão elaborados para o esquema de dados a seguir: Empregado(matricula, nome, endereco, salario, supervisor, depto) Departamento(coddep, nome, gerente, dataini) Projeto(codproj, nome, local, depart) Alocacao(matric,codigop, horas) Dependente(coddepend, matricula, nome, sexo)

SQL - DML As operações de manipulação sem cursor são SELECT INSERT UPDATE DELETE

SQL - DML O comando SELECT: forma básica SELECT <lista atributos> FROM <lista tabelas> WHERE <condição> O resultado de qualquer comando SELECT é uma tabela O campo FROM realiza produto cartesiano das tabelas relacionadas WHERE deve trazer as condições de junção

SQL - DML: Exemplos Q1. Obtenha todos os atributos de todos os empregados Select * From Empregado Q2. Selecione as matrículas dos empregados Select matricula From empregado

SQL - DML: Exemplos Q3. Obtenha o salário do empregado José Select salario From Empregado Where nome = José Q4. Selecione todos os atributos de todos os empregados do departamento d5 Select * From Empregado Where depto = d5

SQL - DML: Exemplos Q5. Faça o produto cartesiano, seguido de projeção de Empregados X Departamento retornando a matrícula do empregado e o nome do departamento Select matricula, Departamento.nome From Empregado, Departamento A cláusula FROM já realiza o produto cartesiano Departamento.nome é especificado para não haver confusão com o atributo nome de empregado Empregados são relacionados com outros departamentos além daquele em que trabalham

SQL - DML: Exemplos Q6. Selecione o nome e o endereço de todos os empregados que trabalham no departamento de produção Select e.nome, e.endereco From empregado e, departamento d Where d.nome = Produção and d.coddep = e.depto

SQL - DML: Exemplos Q7. Para cada projeto em Fortaleza, liste o código do projeto, o departamento que controla o projeto e o nome do gerente com endereço e salário Select p.codproj, d.nome, e.nome, e.endereco, e.salario From Projeto p, Departamento d, Empregado e Where p.depart = d.coddep and d.gerente = e.matricula and p.local = Fortaleza

SQL - DML: Exemplos Q8. Para cada empregado, recupere seu nome e o nome do seu supervisor Select e.nome, s.nome From Empregado e s Where s.matricula = e.supervisor

SQL - DML: Exemplos Q9. Selecione todos os atributos de todos os empregados do departamento pessoal Select * From Empregado e, Departamento d Where d.nome = Pessoal and d.coddep = e.depto Q10. Recupere os salários dos empregados Select salario From empregado

SQL - DML: Exemplos Algumas vezes surgem duplicatas como resposta a uma query. Podemos eliminálas usando o comando DISTINCT na cláusula SELECT Q11. Selecione os diferentes salários pagos pela empresa aos empregados Select distinct salario From empregado

SQL - DML: Exemplos SQL implementa a operação UNIÃO da álgebra relacional. É requerido que as relações sejam compatíveis de união Q12. Liste todos os nomes de projetos que envolvem o empregado Silva como trabalhador ou como gerente do departamento que controla o projeto

SQL - DML: Exemplos (SELECT p.nome FROM Projeto P, Departamento d, Empregado e WHERE d.coddep = p.depart and d.gerente = e.matricula and e.nome = Silva ) UNION (SELECT p.nome FROM Projeto p, Alocação a, Empregado e WHERE p.codproj = a.codproj and e.matricula = a.matricula and e.nome = Silva )

SQL - DML: Exemplos Além da operação UNIÃO, o SQL implementa as operações INTERSEÇÃO e DIFERENÇA ( e - ) INTERSECT EXCEPT A sintaxe para os dois comandos é a mesma da UNIÃO

SQL - DML: Exemplos Consultas Aninhadas: consultas que possuem consultas completas dentro de sua cláusula WHERE Motivação: Algumas queries requerem que valores do BD sejam buscados e então usados numa condição Q13. A consulta Q12 poderia ser reescrita da seguinte forma:

SQL - DML: Exemplos SELECT DISTINCT nome FROM Projeto WHERE codproj in (SELECT p.codproj FROM Projeto p, Departamento d, Empregado e WHERE p.depart = d.coddep and d.gerente = e.matricula and e.nome = Silva ) or codproj in (SELECT a.codigop FROM Alocação a, Empregado e WHERE a.matric = e.matricula and e.nome = Silva )

SQL - DML: Exemplos Q14. Recupere o nome de cada empregado que tem um dependente com o mesmo nome e mesmo sexo SELECT e.nome FROM empregado e WHERE e.matricula in (SELECT matricula FROM dependente WHERE matricula = e.matricula and e.nome = nome and e.sexo = sexo) Obs.: Veja que e.matricula, e.nome e e.sexo são atributos de empregado da consulta externa

SQL - DML: Exemplos Q15. Re-escrevendo a Q14 sem usar aninhamento SELECT e.nome FROM empregado e, dependente d WHERE e.matricula = d.matricula and e.nome = d.nome and e.sexo = d.sexo

SQL - DML: Exemplos A função EXISTS É usada para verificar se o resultado de uma consulta aninhada é vazio ou não. É sempre usado em conjunto com um query aninhada A consulta Q14 poderia ser: SELECT e.nome FROM empregado e WHERE EXISTS (SELECT * FROM dependente WHERE e.matricula = matricula and e.nome = nome and e.sexo = sexo)

SQL - DML: Exemplos Podemos usar o NOT EXISTS(Q) Q16. Recupere os nomes dos empregados que não têm dependentes SELECT e.nome FROM empregado e WHERE NOT EXISTS (SELECT * FROM dependente WHERE e.matricula = matricula)

SQL - DML: Exemplos Podemos usar um conjunto de valores explícitos Q17. Selecione a matricula de todos os empregados que trabalham nos projetos 10, 20 ou 30 SELECT DISTINCT matric FROM alocacao WHERE codigop in (10,20,30)

SQL - DML: Exemplos Podemos verificar valores nulos através de IS NULL e IS NOT NULL Q18. Selecione os nomes de todos os empregados que não têm supervisores SELECT nome FROM empregado WHERE supervisor IS NULL

SQL - DML: Funções SQL fornece 5 funções embutidas COUNT: retorna o número de tuplas ou valores especificados numa query SUM: retorna a soma os valores de uma coluna AVG: retorna a média dos valores de uma coluna MAX: retorna o maior valor de uma coluna MIN: identifica o menor valor de uma coluna Estas funções só podem ser usadas numa cláusula select ou numa cláusula HAVING (a ser vista depois)

SQL - DML: Exemplos Q19. Encontre o total de salários, o maior e o menor salário e a média salarial da relação empregados SELECT SUM(salario), MAX(salario), MIN(salario), AVG(salario) FROM Empregado

SQL - DML: Exemplos Q20. Encontre o maior e menor salário do departamento de Produção SELECT MAX(salario), MIN(salario) FROM Empregado e, Departamento d WHERE e.depto = d.coddep and d.nome = Produção Q.21 Obtenha o número de empregados da empresa SELECT COUNT(*) FROM empregado

SQL - DML: Exemplos Q.22 Obter o número de salários distintos do departamento de Contabilidade SELECT COUNT(DISTINCT salario) FROM empregado e, departamento d WHERE (e.depto = d.coddep and d.nome = Contabilidade ) O que aconteceria se escrevêssemos COUNT(salario) ao invés de COUNT(DISTINCT salario)?

SQL - DML: Exemplos Q23. Obter o nome dos empregados que tenham 2 ou mais dependentes SELECT e.nome FROM empregado e WHERE (SELECT COUNT(*) FROM Dependente d WHERE e.matricula = d.matricula) >= 2

SQL - DML: Exemplos Cláusulas GROUP BY e HAVING Usadas para lidar com grupos Q24. Para cada departamento, obter o código do departamento, o número de empregados e a média salarial SELECT depto, COUNT(*), AVG(salario) FROM Empregado GROUP BY depto As tuplas de empregados são separadas em grupos (departamento) e as funções COUNT e AVG são aplicadas a cada grupo separadamente

SQL - DML: Exemplos Q25. Para cada projeto, obter o código do projeto, seu nome e o número de empregados que trabalham nele SELECT codigop, nome, COUNT(*) FROM Projeto p, Alocacao a WHERE p.codproj = a.codigop GROUP BY p.codproj, p.nome O agrupamento e as funções são aplicadas após a junção

HAVING SQL - DML: Exemplos Cláusula usada em conjunto com GROUP BY para permitir a inclusão de condições nos grupos Q26. Para cada projeto que possui mais de 2 empregados trabalhando, obter o código do projeto, nome do projeto e número de empregados que trabalha neste projeto

SQL - DML: Exemplos SELECT p.codproj, p.nome, COUNT(*) FROM Projeto p, Alocacao a WHERE p.codproj = a.codigop GROUP BY p.codproj, p.nome HAVING COUNT(*) > 2

SQL - DML: Exemplos Operadores de comparação e aritméticos BETWEEN Sintaxe: expressão [NOT] BETWEEN expressão AND expressão Ex.: y BETWEEN x AND z equivale a x <= y <= z Q27. Selecione os nomes dos empregados que ganham mais de 1000 e menos de 2000 reais SELECT nome FROM Empregado WHERE salario BETWEEN 1000 AND 2000

SQL - DML: Exemplos LIKE Permite comparações de substrings. Usa dois caracteres reservados % (substitui um número arbitrário de caracteres) e _ (substitui um único caracter) Q.28 Obter os nomes de empregados cujos endereços estão em Natal, RN SELECT nome FROM empregado WHERE endereco LIKE %Natal,RN%

SQL - DML: Exemplos Q29. Queremos ver o efeito de dar aos empregados que trabalham no ProdutoX um aumento de 10% SELECT e.nome, 1.1*salario FROM empregado e, alocacao a, projeto p WHERE e.matricula = a.matricula and a.codigop = p.codproj and p.nome = ProdutoX

Ordenação SQL - DML: Exemplos O operador ORDER BY permite ordenar o resultado de uma query por um ou mais atributos Q.30 Obter uma lista de empregados e seus respectivos departamentos e projetos, listando ordenado pelo nome do departamento SELECT d.nome, e.nome, p.nome FROM departamento d, empregado e, projeto p WHERE d.coddep = e.depto and e.matricula = a.matricula and a.codigop = p.codproj ORDER BY d.nome, e.nome

SQL - DML: Exemplos Ordenação A ordem default é ascendente (ASC) caso queiramos ordem decrescente usamos DESC ORDER BY d.nome DESC, e.nome ASC

Inserção de Dados O comando Insert Usado para adicionar uma tupla a uma relação Sintaxe: INSERT INTO tabela [ (lista colunas)] fonte Onde fonte pode ser uma especificação de pesquisa (Select) ou uma cláusula VALUES da forma VALUES (lista de valores atômicos) Obs.: Se o comando INSERT incluir a cláusula VALUES então uma única tupla é inserida na relação Ex. INSERT INTO Empregado (matricula, nome) VALUES (9491, Ana )

Inserção de Dados Obs.: A inserção será rejeitada se tentarmos omitir um atributo que não permite valores nulos (NOT NULL) Ex.: INSERT INTO Empregado (nome, salario) VALUES( Flávia, 960) Podemos inserir várias tuplas numa relação através de uma query

Inserção de Dados CREATE TABLE DEPTO_INFO (nome character(15), numemp integer, totsal real); INSERT INTO DEPTO_INFO(nome, numemp, totsal) SELECT d.nome, COUNT(*), SUM(salario) FROM Departamento d, Empregado e WHERE d.coddep = e.depto GROUP BY d.nome

Remoção de Dados O comando DELETE Remove tuplas de uma relação Sintaxe DELETE FROM tabela [WHERE condição] Obs.: Se omitirmos a cláusula WHERE, então o DELETE deve ser aplicado a todas as tuplas da relação. Porém, a relação permanece no BD como uma relação vazia

Modificação de Dados O comando UPDATE Modifica o valor de atributos de uma ou mais tuplas. Sintaxe UPDATE tabela SET lista_atributos com atribuições de valores [WHERE condição] Obs.: omitir a cláusula WHERE implica que o UPDATE deve ser aplicado a todas as tuplas da relação

Modificação de Dados O comando UPDATE Ex. Modifique o nome do Departamento de Computação para Departamento de Informática UPDATE Departamento SET nome = Informática WHERE nome = Computação

Modificação de Dados O comando UPDATE Ex. Dê um aumento de 10% a todos os empregados do departamento de Pesquisa UPDATE Empregado SET salario = salario * 1.1 WHERE depto in (SELECT coddep FROM Departamento WHERE nome = Pequisa )