Banco de dados
Baseado no material do Professor Raul Paradeda
Revisão
• Vimos na aula passada como criar um banco de
dados e realizar alterações e restrições de
integridade.
SQL
•
•
•
•
Crie um banco de dados com o seu nome.
Crie uma tabela chamada alunos.
Crie outra tabela chamada cursos.
Crie outra tabela chamada alu_cur.
• Os atributos das duas primeiras tabelas você escolhe, apenas temos
que ter chaves primárias em cada uma.
• Na tabela alu_cur será apresentado apenas chaves estrangeiras das
duas primeiras tabelas.
SQL - Inserção
• Inserir de elementos (tuplas) em uma relação (tabela).
• Sintaxe:
INSERT INTO tabela [<lista atributos>] VALUES (<lista de valores atômicos>)
• Exemplo:
INSERT INTO alunos(nome_alu, sexo) VALUES (‘Johnny’, ‘m’);
INSERT INTO alunos VALUES (1, ‘Allan’, 26, ‘1983-10-04’,‘m’);
INSERT INTO alunos VALUES (2, ‘André’, 24, ‘1985-11-10’,‘m’);
INSERT INTO alunos VALUES (3, ‘Renata’, 20, ‘1989-02-24’,‘f’);
INSERT INTO alunos VALUES (4, ‘Lucas’, 26, ‘1983-01-07’,‘m’);
Caso este parâmetro seja a chave primária, normalmente tem-se
como auto-increment, não sendo necessário seu preenchimento.
SQL - Inserção
• Podemos omitir uma ou mais colunas da relação destino.
• Toda tupla inserida terá um valor nulo em cada posição de
coluna omitida.
• Sintaxe:
INSERT INTO <tabela>(<atributos>) VALUES (<valores>);
• Exemplo:
INSERT INTO alunos(nome_alu, sexo) VALUES (‘Johnny’, ‘m’);
SQL - Atualização
• 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>]
• Omitir a cláusula WHERE implica em modificar todas as tuplas da relação.
SQL - Atualização
• UPDATE alunos SET id_alu=10 WHERE id_alu=1;
• UPDATE alunos SET id_alu=1 WHERE nome_alu='Allan' ;
• UPDATE alunos SET data_alu=curdate() where data_alu='000000-00' ;
• UPDATE alunos SET sexo='m' ;
SQL - Remoção
• O comando DELETE remove tuplas de uma relação.
• Sintaxe:
DELETE
FROM tabela
[WHERE condição]
• Omitir a cláusula WHERE implica em remover todas as tuplas da relação.
• A relação permanece no BD como uma relação vazia.
SQL - Remoção
• DELETE FROM alunos WHERE id_alu=1;
• DELETE FROM alunos WHERE nome_alu=‘Allan’;
• DELETE FROM alunos;
SQL - Seleção
• A sintaxe básica do comando de seleção é:
SELECT <lista atributos>
FROM <lista de tabelas>
WHERE <condição>
Onde:
• <lista atributos> é uma lista de nomes de atributos cujos
valores são para ser recuperados pela consulta.
• <lista de tabelas> é uma lista de nomes de relações requeridas
para processar a consulta.
• <condição> é uma expressão (Booleana) que identifica as
tuplas a serem recuperadas pela consulta, se não houver será
selecionada todas as tuplas da relação.
SQL - Seleção
• É usada para listar os atributos desejados no resultado da
consulta, exemplo:
SELECT nome, cidade FROM Fornecedores;
• Será listado apenas o nome e a cidade de todos os fornecedores.
• O resultado de uma consulta SQL é também uma relação.
SQL - Seleção
• A seleção permite duplicação na consulta, exemplo:
SELECT cidade FROM Fornecedores;
• Será listado a cidade de todos os fornecedores da relação,
sendo os valores duplicados, caso houver.
SQL - Seleção
• Para remover a duplicação é utilizado o parâmetro DISTINCT
na consulta, exemplo:
SELECT DISTINCT cidade FROM Fornecedores;
SQL - Seleção
• A cláusula SELECT pode conter expressões aritméticas
envolvendo as operações de adição (+), subtração (-),
multiplicação (*) e divisão (/).
SELECT nome, status*2 FROM Fornecedores;
SQL - Seleção
• Para renomear atributos na seleção é utilizado o parâmetro
AS, exemplo:
SELECT id_fornecedor, status AS situacao FROM
fornecedores;
SQL - Seleção
• A cláusula FROM permite que se combine informações de
duas relações, exemplo:
Select fornecedores.id_fornecedor, pecas.nome,
fornecedores.cidade, pecas.cidade
from fornecedores, pecas;
• As linhas são obtidas combinando-se cada linha da primeira
tabela com todas as linhas da segunda tabela:
• O esquema resultante é a concatenação dos esquemas
das duas relações fornecidas como argumento.
SQL - Seleção

a
x
a x
b
y
a y
c
b x
b y
c x
c y
SQL - Seleção
• A eliminação de tuplas incoerentes pode ser feita através do
parâmetro WHERE.
Select fornecedores.id_fornecedor, peças.nome,
fornecedores.cidade, peças.cidade
from fornecedores, peças
where fornecedores.cidade=peças.cidade;
SQL - Seleção
SQL - Seleção
Select fornecedores.id_fornecedor, peças.nome,
fornecedores.cidade, peças.cidade
from fornecedores, peças
where fornecedores.cidade=“Natal”;
SQL - Seleção
• Encontre todos os identificadores dos fornecedores
localizados na cidade de Pelotas:
select id_fornecedor
from fornecedores
where cidade=“Pelotas”;
• Encontre todas as matriculas dos alunos com nome de João:
Select matricula
from alunos
where nome_aluno=“João”;
SQL - Seleção
• A cláusula WHERE usa os conectivos lógicos AND, OR e NOT:
• Encontre o nome de todas as peças fornecidas por Jones para o
Projeto Classificador
select distinct peças.nome
from fornecedores, peças, projeto, fornecedor_projeto_pecas
where fornecedores.nome=“Jones” AND
projeto.nome=“Classificador”;
SQL - Seleção
• Encontre a matricula e o nome de todos os alunos com o
nome de João ou Maria:
select matricula, nome_aluno
from alunos
where nome_aluno=“João” OR nome_aluno=“Maria”;
SQL - Seleção
• Na condição é permitido usar expressões aritméticas de
comparação (=, <>, <, <=, >=, >)
• Encontre o nome de todos os fornecedores que fornecem mais de
300 peças para um só projeto:
select distinct fornecedores.nome_fornecedor
from fornecedores, fornecedor_proj_peças
where fornecedor_proj_peças.qde>300;
SQL - Seleção
• Encontre todas as informações de todos os alunos do sexo
masculino:
select *
from alunos
where sexo=‘m’;
SQL - Seleção
• Operador BETWEEN permite que um atributo seja
comparado dentro de uma faixa especificada.
• É permitido usar expressões aritméticas de comparação (=,
<>, <, <=, >=, >)
• Encontre o nome de todos os alunos que pagam
mensalidades entre 300 a 700 reais
• select nome_aluno
from alunos
where mensalidade between 300 AND 700;
SQL - Seleção
• Operador LIKE permite a comparações em seqüências de
caracteres.
• Padrões são descritos usando dois caracteres especiais:
• percentual (%) casa com qualquer conjunto de caracteres, exemplo:
select * from fornecedores where cidade LIKE "P%";
SQL - Seleção
• sublinhado (_). O caractere “_” casa com qualquer caractere
select * from fornecedores where cidade LIKE "P_l_t_s";
select * from fornecedores where cidade LIKE "P_l%";
SQL - Seleção
• Operador IS NULL verificar se o atribulo é nulo.
• Encontre os nomes de todos os projetos cuja cidade não tenha sido
informada na relação
select nome from projeto where cidade is null;
• Pode-se usar IS NOT NULL
select nome from projeto where cidade is not null;
SQL - Seleção
• Operador IN permite que um atributo seja comparado com
um conjunto.
select nome from peças where cor IN(‘Vermelha’, ‘Azul’);
select * from fornecedores where cidade IN
("Pelotas","Natal");
SQL - Seleção
• O operador IN provê um mecanismo para o aninhamento de
subconsultas:
select matricula
from alunos
where nome IN (
select nome
from alunos
where nome=“J%”
);
SQL - Seleção
• A função EXISTS também provê aninhamento de
subconsultas.
• É usada para checar se o resultado de uma consulta
aninhada é vazia ou não.
select * from alunos
where exists (
select * from pagamento
where pagamento=“ok”
);
Se existir um aluno com o pagamento OK será apresentado
todos os alunos.
SQL - Seleção
• Note que quando você está utilizando o operador EXISTS,
não importa o que o comando SELECT interno irá buscar
interessa apenas se ele retorna ou não linhas:
• select exists (select * from fornecedores where cidade
in ("Pelotas","Natal"));
SQL - Seleção
• A cláusula SELECT pode conter funções que operam sobre
uma coleção de valores de uma coluna de uma relação e
retorna um valor.
• O SQL fornece 5 funções embutidas:
•
•
•
•
•
COUNT: número de tuplas ou valores.
SUM: soma os valores de uma coluna.
AVG: calcula a média dos valores de uma coluna.
MAX: identifica o maior valor de uma coluna.
MIN: identifica o menor valor de uma coluna.
• Todas as funções, exceto count(*), ignoram as tuplas com
valores nulos.
SQL - Seleção
• Quantas relações aluno, curso, disciplina temos?
• select count(*) from aluno_curso_disciplina;
• Quantos projetos ativos temos?
• select count(distinct pr)
from fornecedor_projeto_pecas;
• Quantas peças são fornecidas ao todo?
• select sum(qde) from fornecedor_projeto_pecas;
SQL - Seleção
• Em médias quantas peças são fornecidas por um determinado
fornecedor em um certo projeto?
• select avg(qde) from fornecedor_projeto_pecas;
• Qual é a maior quantidade de peças fornecidas por um único
fornecedor a um só projeto?
• select max(qde) from fornecedor_projeto_pecas;
SQL - Seleção
• Qual é a menor quantidade de peças fornecidas por um único
fornecedor a um só projeto?
• select min(qde) from fornecedor_projeto_pecas;
SQL - Seleção
• ORDER BY é usada para ordenar as linhas selecionadas pelo
comando de seleção.
• Crescente:
select cidade,status
from fornecedores
order by status ASC;
• Decrescente:
select cidade,status
from fornecedores
order by status DESC;
SQL - Seleção
• GROUP BY é usada para agrupar linhas com base em valores
de determinadas colunas:
select f, p, sum(qde) as qde
from fornecedor_projeto_pecas
group by f, p;
select cidade,status
from fornecedores
group by status,cidade;
SQL - Seleção
• A cláusula GROUP BY deve vir antes da ORDER BY e depois
do WHERE
select cidade,status
from fornecedores
group by status,cidade;
order by cidade;
SQL - Atividade
• Criar um banco de dados com seu nome e uma tabela
chamada acessos.
• Nesta tabela teremos quatro atributos:
• id_acesso: chave primária inteira não nula auto
incrementável;
• dia_acesso: atributo inteiro não nulo;
• mes_acesso: atributo inteiro não nulo;
• ano_acesso: atributo inteiro não nulo;
SQL - Atividade
• SQL da tabela:
CREATE TABLE acessos (
id_acesso INT NOT NULL AUTO_INCREMENT ,
dia_acesso INT NOT NULL ,
mes_acesso INT NOT NULL ,
ano_acesso INT NOT NULL ,
PRIMARY KEY (id_acesso)
);
SQL - Atividade
• Realizar a inserção de 10 tuplas na tabela acessos com
valores diferentes para mês_acesso e ano_acesso:
• Ex:
INSERT INTO acessos(dia_acesso,mes_acesso,ano_acesso)
VALUES (15, 03,2009) ;
INSERT INTO acessos(dia_acesso,mes_acesso,ano_acesso)
VALUES (13, 02,2009) ;
INSERT INTO acessos(dia_acesso,mes_acesso,ano_acesso)
VALUES (15, 01,2009) ;
INSERT INTO acessos(dia_acesso,mes_acesso,ano_acesso)
VALUES (10, 02,2009) ;
Download

Select - Max Miller