Successfully reported this slideshow.

Bd sql (1)

1.671 visualizações

Publicada em

Publicada em: Negócios
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Bd sql (1)

  1. 1. Banco de Dados SQLRegis Pires Magalhãesregis@ifpi.edu.br@regispires
  2. 2. SQLStructured Query Language - SQLEspecificar consultas de forma interativa.DDL - Data Definition Language ◦ Linguagem de Definição de DadosDML - Data Manipulation Language ◦ Linguagem de Manipulação de Dados ◦ Usada para especificar consultas e atualizações
  3. 3. DDL permite especificar...Esquema de relações(tabelas);Domínio de valores associados a cada atributo;Restrições de integridade;Conjunto de índices a serem mantidos para cada relação;Estrutura de armazenamento físico de cada relação em disco;Autorização de acesso para cada relação.
  4. 4. SGBD – MySQL – ResumoEstabelecer uma conexão pelo console: ◦ mysql -u usuario -p  -u  usuário / -p  password (senha)Criar um banco de dados ◦ create database nome_bd;Usar um banco de dados como padrão ◦ use nome_bd;Apagar um banco de dados ◦ drop database nome_bd;
  5. 5. SGBD – MySQL – ResumoObtendo informações sobre o BD... ◦ Mostrar todos os bancos de dados  show databases; ◦ Mostrar todas as tabelas de um BD  show tables; ◦ Mostrar o comando de criação de um BD  show create database nome_bd; ◦ Mostrar o comando de criação de uma tabela  show create table nome_tabela;
  6. 6. MySQL Monitor – Status - ssmysql Ver 14.14 Distrib 5.1.61, for debian-linux-gnu (x86_64) using readline 6.2Connection id: 93Current database:Current user: root@localhostSSL: Not in useCurrent pager: stdoutUsing outfile: Using delimiter: ;Server version: 5.1.61-0ubuntu0.11.10.1 (Ubuntu)Protocol version: 10Connection: Localhost via UNIX socketServer characterset: latin1Db characterset: latin1Client characterset: latin1Conn. characterset: latin1UNIX socket: /var/run/mysqld/mysqld.sockUptime: 1 day 3 hours 15 min 21 secThreads: 4 Questions: 2251 Slow queries: 0 Opens: 297 Flush tables: 1Open tables: 58 Queries per second avg: 0.22
  7. 7. Criação de banco de dadosCREATE DATABASE nome_bd [[DEFAULT] CHARACTER SET charset_name] [[DEFAULT] COLLATE collation_name] Character set – conjunto de símbolos e codificações. Collation – conjunto de regras para comparação de caracteres em um conjunto de caracteres. Exemplos: ◦ CREATE DATABASE locadora; ◦ CREATE DATABASE locadora CHARSET utf8; ◦ CREATE DATABASE locadora DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
  8. 8. MySQL – charset do consoleAlterando o charset do MySQL Monitor para utf8: ◦ set charset utf8;
  9. 9. Exclusão de banco de dadosDROP DATABASE nome_bd; ◦ Exemplo:  DROP DATABASE locadora;
  10. 10. Selecionando o banco de dadospara usoUSE nome_bd; ◦ Exemplo:  USE locadora;
  11. 11. Criação de tabelasCREATE TABLE nome-tabela (nome-coluna tipo-de-dados [not null], [nome-coluna tipo-de-dados [not null] … ], [CONSTRAINT nome-restrição] UNIQUE nome-coluna | PRIMARY KEY(nome-coluna {, nome-coluna}) | FOREIGN KEY (nome-coluna {, nome-coluna}) REFERENCES nome-tabela [ON DELETE CASCADE | SET NULL | NO ACTION ], [ON UPDATE CASCADE], | CHECK (predicado) )
  12. 12. Alguns tipos de dados (SQL 92)char(n) ◦ string de caracteres de tamanho fixo nvarchar(n) ◦ string de caracteres de tamanho variável (máximo n)Integer (int), smallint, tinyint, bigintdecimal(p,d), numeric (p,d) ◦ numérico com p dígitos ◦ Dos p dígitos, d dígitos representam casas decimais após a vírgulaReal, float - numérico ponto flutuantedate – datatime – hora datetime, smalldatetime, timestamp – data e hora
  13. 13. Restrições (Constraints)NOT NULL ◦ O atributo deve ser obrigatoriamente preenchido.DEFAULT ◦ Atribui um valor padrão ao atributo, caso não seja especificado um valor.UNIQUE ◦ Garante que o atributo não terá valores repetidos na tabela.CHECK ◦ Verifica se o valor inserido é permitido para o atributo.
  14. 14. Restrições (Constraints)PRIMARY KEY (PK) ◦ Define a chave primária da relação.FOREIGN KEY (FK) ◦ Implementa o conceito de chave estrangeira e garante a integridade referencial. ◦ Deve referenciar um campo que possua chave primária ou uma restrição UNIQUE.  ON DELETE CASCADE – Se a linha da tabela que tem a PK for apagada, a linha da tabela que tem a FK também será.  ON UPDATE CASCADE – Se a linha da tabela que tem a PK for modificada, a linha da tabela que tem a FK também será.
  15. 15. Criação de tabelas - InnoDBPara usar recursos como integridade referencial e transações no MySQL, é preciso criar tabelas do tipo InnoDB: ◦ CREATE TABLE pessoas (...) ENGINE=InnoDB;
  16. 16. CREATE DATABASE producao default charset utf8;use producao;CREATE TABLE diretor( id int PRIMARY KEY, nome varchar(50)) ENGINE=INNODB;CREATE TABLE filme( id int PRIMARY KEY, titulo varchar(50), id_diretor int, FOREIGN KEY (id_diretor) REFERENCES diretor(id)) ENGINE=INNODB;
  17. 17. Remoção de tabelasDROP TABLE nome-tabela [CASCADE | RESTRICT]Remove as tuplas da tabela e sua definição do catálogo ◦ CASCADE remove as restrições do tipo foreign key tabelas que referenciam a tabela removida
  18. 18. Exercício Dado o modelo relacional a seguir, definir o esquema físico do banco de dados usando SQL. clientes(id: int, nome: varchar(50), cpf: char(11), data_cadastro:date, cidade: varchar(50), uf: char(2)) categorias(id: int, nome: varchar(20)) classes (id:int, nome: varchar(20), preco: decimal(10,2)) distribuidores (id: int, nome: varchar(50)) filmes (id: int, titulo: varchar(50), id_distribuidor: int, ano_lancamento: int(4), id_categoria: int, id_classe: int) ◦ id_distribuidor referencia distribuidores ◦ id_categoria referencia categorias ◦ id_classe referencia classes locacoes (id: int, id_cliente: int, id_filme: int, dt_locacao: date, dt_devolucao_prevista: date, dt_devolucao:date, valor: decimal(10,2) ◦ id_cliente referencia clientes ◦ id_filme referencia filmes
  19. 19. Criando a tabela clientesCREATE TABLE clientes ( id int AUTO_INCREMENT, cpf char(11), nome varchar(50), data_cadastro date, cidade varchar(40), uf char(2) DEFAULT PI, PRIMARY KEY (id), UNIQUE (cpf) ) ENGINE=InnoDB;
  20. 20. Inserindo dados na tabela clientesinsert into clientes values (null, 123, Regis, 2012-04-11, Parnaíba, PI);insert into clientes (cpf, nome, data_cadastro, cidade) values (124, João, 2012-04-11, Parnaíba);
  21. 21. CREATE TABLE clientes ( id int PRIMARY KEY AUTO_INCREMENT, cpf char(11) UNIQUE, nome varchar(50), data_cadastro date, cidade varchar(40), uf char(2) DEFAULT PI ) ENGINE=InnoDB;
  22. 22. Alteração de tabelasALTER TABLE nome-tabela [ADD nome-coluna tipo de dados] [DROP nome-coluna ] [ADD CONSTRAINT nome-restrição] [DROP CONSTRAINT nome-restrição] [DROP PRIMARY KEY] [ repetir ADD ou DROP em qualquer ordem]
  23. 23. Consultas SELECT [ALL | DISTINCT] {* | expr [[AS] c_alias] {, expr [[AS] c_alias] … }} FROM nome-tabela [[AS] qualificador] {, nome-tabela [[AS] qualificador] …} WHERE predicado ALL ◦ Retorna todas as tuplas, inclusive repetidas (default) DISTINCT ◦ Retorna apenas tuplas não repetidas* ◦ Retorna todos os atributos da(s) tabela(s) expr ◦ Representa um atributo ou ◦ Expressão matemática envolvendo atributos das tabelas  salario*1.40
  24. 24. ConsultasFROM ◦ Representa o produto cartesiano das tabelas referenciadasWHERE ◦ Corresponde ao predicado de seleção da álgebra relacionalORDER BY coluna-resultado [ASC | DESC] {, coluna-resultado [ASC | DESC] …}
  25. 25. ConsultasPredicados com operações sobre strings ◦ Identificação de padrão  % - Casa com qualquer substring  _ - Casa com qualquer caracter ◦ Operador  like ◦ Exemplos  nome like ‘inf%’  Retorna strings que iniciam pelo substring inf  nome like ‘%si_’  Retorna strings que contenham ‘si’ como substring e terminem com um caracter qualquer após ‘si’  Listar todos empregados com sobrenome ‘pires’  Select nome from empregados where nome like ‘%pires%’
  26. 26. ConsultasFunções Agregadas ◦ Funções embutidas (built-in) aplicadas sobre uma coleção de valores (colunas) do banco de dados ◦ sum  Retorna o somatório dos valores de uma coleção ◦ avg  Retorna a média dos valores de uma coleção ◦ max  Retorna o maior valor de uma coleção de valores ◦ min  Retorna o menor valor de uma coleção ◦ count  Retorna o número de elementos de uma coleção ◦ Sintaxe nome-da-função (ALL | DISTINCT nome-coluna) | count(*)  Não podem ser utilizados na cláusula WHERE
  27. 27. ConsultasAgrupando tuplas no SQL ◦ Aplicar funções agregadas a diferentes grupos de tuplas ◦ Exemplo  Listar a quantidade de empregados por departamento ◦ Cláusula  GROUP BY ◦ Todas colunas que aparecem na cláusula select têm que aparecer na cláusula group by  Exceto os argumentos da funções agregadas
  28. 28. ConsultasSelecionando grupos ◦ Cláusula having  Filtro de gruposConsulta com where e having ◦ predicado da cláusula where é avaliado primeiramente  Tuplas que satisfazem o predicado são agrupadas pelo group by ◦ Predicado da cláusula having é avaliado  Grupos que satisfazem o predicado aparecem no resultado
  29. 29. ConsultasChecando valores nulos ◦ Predicado IS NULL ◦ Exemplo select * from Empregado where dt-nasc is null
  30. 30. ConsultasConsultas com o operador de união ◦ UNION  União de duas relações (consultas)  Sem repetições ◦ UNION ALL  União de duas relações  Com repetições ◦ Exemplo  Considere as seguintes relações  Empregado(matr, nome, ender, dt_nasc, cpf, salário, lotação)  Dependente(nome_dep, data-nasc, matr_resp)  Liste o nome e data de nascimento de todos os funcionários e dependentes existentes na empresa select nome,dt_nasc from Empregado UNION select nome_dep,data_nasc from Dependente
  31. 31. ConsultasConsultas com o operador de interseção ◦ INTERSECT  Interseção entre duas relações (consultas)  Sem repetições ◦ INTERSECT ALL  Interseção entre duas relações  Com repetiçõesConsultas com o operador de diferença ◦ EXCEPT  Diferença entre duas relações (consultas)  Sem repetições ◦ EXCEPT ALL  Diferença entre duas relações (consultas)  Com repetições
  32. 32. ConsultasConsulta SQL aninhada (subconsulta) ◦ Consulta SQL especificada dentro de uma outra consulta SQL ◦ Exemplo  Listar todos os empregados que têm salário maior que a média salarial da empresa select e.nome select e.nome from Empregado e from Empregado e where salário > ((selectavg(salário) from Empregado) where salário > select avg(salário) fromEmpregado Empregado) Empregado
  33. 33. ConsultasConsulta SQL aninhada (cont.) ◦ Predicado IN  Verifica a pertinência de elementos em um conjunto  Exemplo select nome from Empregado where matr in (1,5,8,9)
  34. 34. ExercíciosConsidere o seguinte esquema de banco de dados departamentos(id, nome, endereco, cidade, uf) empregados(id, matricula, cpf, nome, dt_nasc, endereco, salario, id_dept) dependentes(id, nome, dt_nasc, id_empr) id_dept em empregados referencia id em departamentos. id_empr em dependentes referencia id em empregados. ◦ Crie as tabelas Departamento e Empregado utilizando a DDL do SQL. Alterara tabela empregados para que matricula e cpf não possam ser duplicados.
  35. 35. Exercícios Criar consultas SQL para: ◦ Listar os funcionários com salário maior que 3000. ◦ Listar funcionários com salários maior que 1000 e menor que 2000. ◦ Listar nome dos funcionários com o nome de seu departamento. ◦ Listar nome dos funcionários com o nome de seu departamento e uma simulação de seu salário com um aumento de 15%. ◦ Listar empregados ordenados por salário na ordem decrescente e por nome na ordem crescente.
  36. 36. Exercícios Encontre o número de empregados lotados no departamento de Informática. Encontre o montante da folha de pagamento (soma dos salários) da empresa. Encontre o salário médio pago pela empresa. Listar a quantidade de empregados por departamento. Listar maiores e menores salários de cada departamento. Listar nome dos departamentos cuja média salarial seja maior que 7000. Listar todos dependentes com respectivos responsáveis e nome do departamento de lotação dos responsáveis. Listar o nome e data de nascimento de todos os funcionários e dependentes existentes na empresa. Listar matrícula dos empregados que não possuem dependentes. Listar matrícula dos empregados que possuem dependentes.
  37. 37. Exercícios Listar nome e média salarial dos departamentos que possuem mais de 10 empregados lotados. Listar nome e quantidade de empregados dos departamentos cuja média salarial é maior que 5000. Listar o primeiro e segundo maiores salários da empresa. Listar nome dos departamentos com média salarial maior que a média salarial da empresa. Listar todos os empregados que possuem salário maior que a média salarial de seus departamentos. Listar os empregados lotados nos departamentos localizados no Piauí.
  38. 38. Referências Elsmari, R., Navathe, Shamkant B. “Sistemas de Banco de Dados”. 6ª Edição, Pearson Brasil, 2011. Silberschatz, A., Korth, H., Sudarshan, S. “Sistema de Banco de Dados”. 5ª Edição, Editora Campus, 2006. Heuser, Carlos Alberto. “Projeto de Banco de Dados”. 6ª Edição, Editora Bookman, 2009. Slides Prof. José Maria (UFC).
  39. 39. DÚVIDAS?regis@ifpi.edu.br@regispires

×