SlideShare uma empresa Scribd logo
Banco de Dados
       SQL

Regis Pires Magalhães
regis@ifpi.edu.br
@regispires
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
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.
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;
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;
MySQL 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
Criação de banco de dados
CREATE 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;
MySQL – charset do console
Alterando    o charset do MySQL Monitor
 para utf8:
 ◦ set charset utf8;
Exclusão de banco de dados
DROP    DATABASE nome_bd;
  ◦ Exemplo:
    DROP DATABASE locadora;
Selecionando o banco de dados
para uso
USE   nome_bd;
 ◦ Exemplo:
    USE locadora;
Criação de tabelas
CREATE 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)
   )
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
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.
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á.
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;
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;
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
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
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;
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');
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;
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]
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
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] …}
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%’
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
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
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
Consultas
Checando    valores nulos
 ◦ Predicado IS NULL
 ◦ Exemplo
    select * from Empregado
    where dt-nasc is null
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
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
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
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)
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.
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.
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.
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í.
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).
DÚVIDAS?
regis@ifpi.edu.br
@regispires

Mais conteúdo relacionado

PDF
Sql proficiente
PDF
Agbd aula4 sql_ddl
PDF
A Classe StringBuilder em Java
KEY
Python 05
PDF
Mongodb workshop cinlug
PPT
Modulo 15 PSI
ODP
Palestra cbq
PDF
PHP para Adultos: Clean Code e Object Calisthenics
Sql proficiente
Agbd aula4 sql_ddl
A Classe StringBuilder em Java
Python 05
Mongodb workshop cinlug
Modulo 15 PSI
Palestra cbq
PHP para Adultos: Clean Code e Object Calisthenics

Mais procurados (20)

PPTX
Acesso a Banco de Dados em Java usando JDBC
PDF
Da Argila Ao Forte - Como desenvolver uma loja virtual
PPTX
Psi m14
PPTX
Design patterns
PDF
Object Calisthenics: relaxe e escreva códigos simples
PDF
Doctrine2 Seminário PHP
PDF
Acesso a banco de dados com JDBC
PPT
LINQ - Language Integrated Query
PDF
LaravelSP - MySQL 5.7: introdução ao JSON Data Type
KEY
Python 02
PDF
PostgreSQL 8.4
PPTX
Introdução ao MongoDB
PDF
Introdução ao MongoDB em 30 slides
PDF
Proxy, Man-In-The-Middle e testes
PDF
Passagem de Objetos entre Java e Oracle
KEY
PHPubSP Object Calisthenics aplicado ao PHP
PDF
Introdução a JPA (2010)
ODP
PDF
PHP ao Extremo
KEY
A primeira app iOS (a gente não esquece)
Acesso a Banco de Dados em Java usando JDBC
Da Argila Ao Forte - Como desenvolver uma loja virtual
Psi m14
Design patterns
Object Calisthenics: relaxe e escreva códigos simples
Doctrine2 Seminário PHP
Acesso a banco de dados com JDBC
LINQ - Language Integrated Query
LaravelSP - MySQL 5.7: introdução ao JSON Data Type
Python 02
PostgreSQL 8.4
Introdução ao MongoDB
Introdução ao MongoDB em 30 slides
Proxy, Man-In-The-Middle e testes
Passagem de Objetos entre Java e Oracle
PHPubSP Object Calisthenics aplicado ao PHP
Introdução a JPA (2010)
PHP ao Extremo
A primeira app iOS (a gente não esquece)
Anúncio

Destaque (10)

PDF
Curso de SQL e Banco de Dados
PDF
01 02 introdução aos bancos de dados (slides)
PDF
Banco de Dados - Conceitos Básicos
PDF
Banco de Dados - Introdução - Projeto de Banco de Dados - DER
PDF
Exercícios de relacionamento 2012
PDF
Apostila banco de dados
PDF
Banco de dados exercícios resolvidos
PPT
Introdução a Bancos de Dados
PPTX
Banco de Dados Conceitos
Curso de SQL e Banco de Dados
01 02 introdução aos bancos de dados (slides)
Banco de Dados - Conceitos Básicos
Banco de Dados - Introdução - Projeto de Banco de Dados - DER
Exercícios de relacionamento 2012
Apostila banco de dados
Banco de dados exercícios resolvidos
Introdução a Bancos de Dados
Banco de Dados Conceitos
Anúncio

Semelhante a Bd sql (1) (20)

PPTX
Aula 11 banco de dados
PPTX
Aula 11 banco de dados
PPTX
introduao-a-sql-prof-anderson-cavalcanti-ufrn-ct-dca.pptx
PDF
Introdução ao SQL
PDF
6338 111121071604-phpapp01
PPTX
Curso de PostgreSQL: Um pouco Além dos Comandos
PPTX
Aula 10 banco de dados
PDF
Apostila - Banco de Dados
PPTX
Aula 12 banco de dados
DOCX
Sql - Introdução ao mysql
PDF
Um pouco sobre sql
PDF
Apostila de sql
PDF
LabMM4 (T06 - 12/13) - Auto-associações e Introdução ao SQL
PDF
07 sql - parte 01
PDF
Apostila de postgre
PPTX
Basesdedados
PPT
CONCEITOS BASICOS DE BANCO DE DADOS COM SQL
PDF
Aulas_SQL.pdf
PDF
Dicas oracle sql
PPTX
Fundamentos de Banco de Dados Relacionais
Aula 11 banco de dados
Aula 11 banco de dados
introduao-a-sql-prof-anderson-cavalcanti-ufrn-ct-dca.pptx
Introdução ao SQL
6338 111121071604-phpapp01
Curso de PostgreSQL: Um pouco Além dos Comandos
Aula 10 banco de dados
Apostila - Banco de Dados
Aula 12 banco de dados
Sql - Introdução ao mysql
Um pouco sobre sql
Apostila de sql
LabMM4 (T06 - 12/13) - Auto-associações e Introdução ao SQL
07 sql - parte 01
Apostila de postgre
Basesdedados
CONCEITOS BASICOS DE BANCO DE DADOS COM SQL
Aulas_SQL.pdf
Dicas oracle sql
Fundamentos de Banco de Dados Relacionais

Último (20)

PDF
APRESENTACAO COLETIVA ABRAS RETROSPECTIVA 2020.pdf
PDF
O Papel do Gerente Administrativo em Clínicas Odontológicas.pdf
PPTX
analise-swot- turma ADM - E SUAS CONCEPÇÕES
PPTX
ATIVIDADES OPERACIONAIS - BOMBEIRO CIVIL.pptx
PDF
Modelo_de_Gestão_Processos_Gerenciaiss.pdf
PPTX
ANALISE E GERENCIAMENTO DE RISCO_mba.pptx
PDF
Cultura Organizacional - Teoria Básica.pdf
PDF
Lista quartos para fazer o que eu queria uma vez ao dia
PDF
EMANUEL.pdffffffffffffffffffffffffffffffffffffffffff
PPTX
estratégia em rh sjdfjdjfhd cojkjdgkdf bdjfgkdfg
PDF
755805723-Slides-de-Aula.pdfffffffffffffffffffffffffffff
PPTX
FDEL MANUAL DE PROCEDIMENTOS 01072025-1.pptx
PDF
ATÉ_QUE_NADA_MAIS_IMPORTE_Como_viver_longe_de_um_mundo_de_performances.pdf
PDF
Contabilidade de Custos - Crepaldi - Parte 1
PDF
CIPA apresentação para empresas atualizada
DOCX
projeto ceara cientifico.docx PARA ALEM DA EDUCAÇÃO INCLUSIVA
PDF
Apresentação de Slides Corporativo Preto e Branco.pdf
PDF
YASMIM.pdffffffffffffffffffffffffffffffffffffffffff
PPTX
Vida_Sustentavelakdfnvosdasfdownloadgratis.pptx
PPT
Business Administration_newton fleury019.ppt
APRESENTACAO COLETIVA ABRAS RETROSPECTIVA 2020.pdf
O Papel do Gerente Administrativo em Clínicas Odontológicas.pdf
analise-swot- turma ADM - E SUAS CONCEPÇÕES
ATIVIDADES OPERACIONAIS - BOMBEIRO CIVIL.pptx
Modelo_de_Gestão_Processos_Gerenciaiss.pdf
ANALISE E GERENCIAMENTO DE RISCO_mba.pptx
Cultura Organizacional - Teoria Básica.pdf
Lista quartos para fazer o que eu queria uma vez ao dia
EMANUEL.pdffffffffffffffffffffffffffffffffffffffffff
estratégia em rh sjdfjdjfhd cojkjdgkdf bdjfgkdfg
755805723-Slides-de-Aula.pdfffffffffffffffffffffffffffff
FDEL MANUAL DE PROCEDIMENTOS 01072025-1.pptx
ATÉ_QUE_NADA_MAIS_IMPORTE_Como_viver_longe_de_um_mundo_de_performances.pdf
Contabilidade de Custos - Crepaldi - Parte 1
CIPA apresentação para empresas atualizada
projeto ceara cientifico.docx PARA ALEM DA EDUCAÇÃO INCLUSIVA
Apresentação de Slides Corporativo Preto e Branco.pdf
YASMIM.pdffffffffffffffffffffffffffffffffffffffffff
Vida_Sustentavelakdfnvosdasfdownloadgratis.pptx
Business Administration_newton fleury019.ppt

Bd sql (1)

  • 1. Banco de Dados SQL Regis Pires Magalhães regis@ifpi.edu.br @regispires
  • 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. 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. 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. 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. MySQL 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
  • 7. Criação de banco de dados CREATE 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. MySQL – charset do console Alterando o charset do MySQL Monitor para utf8: ◦ set charset utf8;
  • 9. Exclusão de banco de dados DROP DATABASE nome_bd; ◦ Exemplo:  DROP DATABASE locadora;
  • 10. Selecionando o banco de dados para uso USE nome_bd; ◦ Exemplo:  USE locadora;
  • 11. Criação de tabelas CREATE 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. Consultas Checando valores nulos ◦ Predicado IS NULL ◦ Exemplo select * from Empregado where dt-nasc is null
  • 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. 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. 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. 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. 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. 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. 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. 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. 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).