bd sql (1)

39
Banco de Dados Banco de Dados SQL SQL Regis Pires Magalhães [email protected] @regispires

Upload: jheyeizah

Post on 09-Jul-2015

1.104 views

Category:

Business


3 download

TRANSCRIPT

Page 1: Bd sql (1)

Banco de DadosBanco de DadosSQLSQL

Regis Pires Magalhã[email protected] @regispires

Page 2: Bd sql (1)

SQLSQLStructured Query Language - SQLEspecificar 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

Page 3: Bd sql (1)

DDL permite especificar...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.

Page 4: Bd sql (1)

SGBD – MySQL – Resumo 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;

Page 5: Bd sql (1)

SGBD – MySQL – Resumo 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;

Page 6: Bd sql (1)

MySQL Monitor – Status - \sMySQL Monitor – Status - \s\s

mysql Ver 14.14 Distrib 5.1.61, for debian-linux-gnu (x86_64) using readline 6.2

Connection id: 93

Current database:

Current user: root@localhost

SSL: Not in use

Current pager: stdout

Using outfile: ''

Using delimiter: ;

Server version: 5.1.61-0ubuntu0.11.10.1 (Ubuntu)

Protocol version: 10

Connection: Localhost via UNIX socket

Server characterset: latin1

Db characterset: latin1

Client characterset: latin1

Conn. characterset: latin1

UNIX socket: /var/run/mysqld/mysqld.sock

Uptime: 1 day 3 hours 15 min 21 sec

Threads: 4 Questions: 2251 Slow queries: 0 Opens: 297 Flush tables: 1

Open tables: 58 Queries per second avg: 0.22

Page 7: Bd sql (1)

Criação de banco de dadosCriaçã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;

Page 8: Bd sql (1)

MySQL – charset do consoleMySQL – charset do consoleAlterando o charset do MySQL Monitor

para utf8:◦ set charset utf8;

Page 9: Bd sql (1)

Exclusão de banco de dadosExclusão de banco de dadosDROP DATABASE nome_bd;◦ Exemplo:

DROP DATABASE locadora;

Page 10: Bd sql (1)

Selecionando o banco de dados Selecionando o banco de dados para usopara usoUSE nome_bd;◦ Exemplo:

USE locadora;

Page 11: Bd sql (1)

Criação de tabelasCriaçã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) )

Page 12: Bd sql (1)

Alguns tipos de dados (SQL 92)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, bigintdecimal(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írgulaReal, float - numérico ponto flutuantedate – datatime – hora datetime, smalldatetime, timestamp – data e hora

Page 13: Bd sql (1)

Restrições (Constraints)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.

Page 14: Bd sql (1)

Restrições (Constraints)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á.

Page 15: Bd sql (1)

Criação de tabelas - InnoDBCriação de tabelas - InnoDBPara usar recursos como integridade

referencial e transações no MySQL, é preciso criar tabelas do tipo InnoDB:◦ CREATE TABLE pessoas (...)

ENGINE=InnoDB;

Page 16: Bd sql (1)

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;

Page 17: Bd sql (1)

Remoção de tabelasRemoção de tabelasDROP 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

Page 18: Bd sql (1)

ExercícioExercícioDado 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

Page 19: Bd sql (1)

Criando a tabela clientesCriando a tabela clientesCREATE 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;

Page 20: Bd sql (1)

Inserindo dados na tabela clientesInserindo 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');

Page 21: Bd sql (1)

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;

Page 22: Bd sql (1)

Alteração de tabelasAlteração de tabelasALTER 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]

Page 23: Bd sql (1)

ConsultasConsultas 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

Page 24: Bd sql (1)

ConsultasConsultasFROM◦ Representa o produto cartesiano das tabelas

referenciadas WHERE◦ Corresponde ao predicado de seleção da álgebra

relacionalORDER BY coluna-resultado [ASC | DESC]

{, coluna-resultado [ASC | DESC] …}

Page 25: Bd sql (1)

ConsultasConsultasPredicados 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%’

Page 26: Bd sql (1)

ConsultasConsultasFunçõ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 (nome-da-função (ALLALL | DISTINCT nome-coluna) | | DISTINCT nome-coluna) | count(*)count(*) Não podem ser utilizados na cláusula WHERE

Page 27: Bd sql (1)

ConsultasConsultasAgrupando 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

Page 28: Bd sql (1)

ConsultasConsultasSelecionando grupos◦ Cláusula havinghaving

Filtro de gruposConsulta 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

Page 29: Bd sql (1)

ConsultasConsultasChecando valores nulos◦ Predicado IS NULLIS NULL◦ Exemplo

select * from Empregado where dt-nasc is null

Page 30: Bd sql (1)

ConsultasConsultasConsultas 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 empresaselect nome,dt_nasc from Empregado UNIONselect nome_dep,data_nasc from Dependente

Page 31: Bd sql (1)

ConsultasConsultasConsultas 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

Page 32: Bd sql (1)

ConsultasConsultasConsulta SQL aninhada (subconsulta)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 from Empregado ewhere salário > (select avg(salário) from Empregadoselect avg(salário) from Empregado)

select e.nome from Empregado ewhere salário > (select avg(salário) from Empregadoselect avg(salário) from Empregado)

Page 33: Bd sql (1)

ConsultasConsultasConsulta SQL aninhada Consulta SQL aninhada (cont.)(cont.)◦ Predicado IN

Verifica a pertinência de elementos em um conjunto

Exemploselect nome from Empregadowhere matr in (1,5,8,9)

Page 34: Bd sql (1)

ExercíciosExercíciosConsidere o seguinte esquema de banco

de dadosdepartamentos(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.

Alterar a tabela empregados para que matricula e cpf não possam ser duplicados.

Page 35: Bd sql (1)

ExercíciosExercíciosCriar 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.

Page 36: Bd sql (1)

ExercíciosExercí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.

Page 37: Bd sql (1)

ExercíciosExercíciosListar 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í.

Page 38: Bd sql (1)

ReferênciasReferê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).

Page 39: Bd sql (1)

DÚVIDAS?DÚVIDAS?

[email protected] @regispires