SQL - Structured Query Language

Propaganda
SQL - Structured Query Language
Comando Insert
Comando utilizado para a inserção de dados em um registro junto a uma base de dados
específica. A diagramação a seguir demonstra o fluxo existente na operação de inserção de
dados:
● Sintaxe do comando
insert into <nome_da_tabela>(lista_de_atributos) values (valores); ou
insert into <nome_da_tabela> values (valores);
ex1) insert into endereco values(1,"Ciro Mello", 3841, "Apt. 03", "Dourados", "MS",
79730050);
ex2) insert into clinica.endereco(rua,numero,complemento,cidade,estado,cep)
values("Luiz Antônio da Silva", 910, "Casa 03", "Nova Andradina", "MS", 79750000);
Inserir pelo menu: clicar com direito em cima da entidade desejada, acessar o
menu 'Edit Table Data', colocar os dados na tabela e clicar no ícone 'Apply changes to data'
Comando Select
O comando select é utilizado para a seleção de registros na base de dados. Podemos citar
como exemplo de aplicação , a busca dos dados pessoais de todos os pacientes cadastrados no
banco de dados criado para a “Clínica Dois Irmão” ou para a “Escola Tio-Patinhas”. Como fluxo
normal para a referida pesquisa temos o seguinte diagrama:
● Sintaxe do comando
select <lista de atributos>
from <tabela>
where <condições>
Podemos ainda listar a invocação de funções de agregação presentes na linguagem SQL.
Tais funções são disponíveis na linguagem oferecendo operações básicas como cálculo de
média, obtenção de valores máximos/mínimos, contagem de atributos dentre outras diversas
funções. Seguem abaixo algumas das funções citadas:
1) COUNT: Contador de ocorrências de um determinado atributo.
Exemplo: Contar quantos alunos são maiores do que 18 anos
Resolução: select count(nome) from aluno where (idade > 18);
2) MAX/MIN: Seleciona valor máximo/mínimo para um determinado atributo
Exemplo: Encontrar a maior idade em um grupo de alunos
Resolução: select max(idade) from aluno;
3) AVG: Selecionar a media de valores para um determinado atributo
Exemplo: Encontrar a média de idade de uma turma de alunos maiores do que 18
anos
Resolução: select avg(idade) from aluno where (idade > 18);
4) SUM: Somador de valores de um determinado atributo
Exemplo: Calcular a soma das idades de todos os alunos cadastrados
Resolução: select sum(idade) from aluno;
Além das funções de agregação, o comando select permite diversas adequações sobre a
sintaxe básica para que haja maior flexibilidade na obtenção dos dados desejados. Vejamos
alguns exemplos:
1) MODIFICAÇÕES DO NOME DA SELEÇÃO: A cada seleção realizada, pode-se realizar a
modificação do nome da tabela resultante ou dos campos resultantes da seleção.
Exemplo: Modificar o nome do campo resultante da consulta referente ao
número de alunos matriculados. Tal modificação resultará na alteração temporária do nome do
atributo relativo aos dados encontrados.
Resolução: select count(nome) as total_alunos from aluno;
2) ORDENAÇÃO DE VALORES: Existem situações típicas onde deseja-se realizar a
ordenação de valores a partir de padrões específicos. Para tal, a linguagem SQL permite que seja
adicionado um comando de agrupamento que fica responsável pala operação.
Exemplo: Selecionar todos os alunos matriculados, fornecendo a listagem com os
dados ordenados pelo nome em ordem crescente.
Resolução 1 - solução para ordem crescente: select * from aluno order by nome
asc;
Resolução 2 - solução para ordem decrescente: select * from aluno order by
nome desc;
3) OPERAÇÃO SOBRE VALORES: A linguagem SQL permite também que sejam
realizados cálculos durante as operações, para que haja assim maior flexibilidade na listagem do
resultados desejados.
Exemplo: Somar 10 anos na média de idade dos alunos cadastrados
Resolução: select avg(idade + 10) from aluno;
4) SELEÇÃO POR APROXIMAÇÃO: Para a realização de algumas consultas em casos reais
de aplicação, muitas vezes deseja-se buscar dados por meio de comparações com determinados
valores fornecidos. Assim, a linguagem SQL disponibiliza um comando responsável pela
comparação de valores semelhantes.
Exemplo: Listar alunos cujo nome se pareça 'Hug'. Deverão ser listados todos os
nome que contenham 'Hug' na sua composição.
Resolução: select * from aluno where (nome like '%hug%');
4) CRIAÇÃO DE OBJETOS PARA TABELAS: Na linguagem SQL existe a possibilidade de
criação de objetos para cada tabela a ser trabalhada. Tal procedimento funciona basicamente
como se fossemos nomear um apelido para a tabela desejada, para que as operações possam ser
realizadas de forma mais adequada a partir da utilização destes apelidos.
Exemplo: Listar alunos com idade maior que 10 anos
Resolução: select * from aluno a where (a.idade > 10). Assim, sempre que
desejar acessar os atributos dos alunos selecionados, utilizaremos o objeto criado (a), acessando
cada atributo por meio do ponto(.).
Sintaxe de acesso a atributos: objeto.atributo
5) COMANDO AND/OR: Comando utilizados quando existe a necessidade de
comparação com mais de uma condição.
Exemplo: Listar alunos cujo nome se pareça 'Hug' e idade maior que 5 anos.
Resolução: select * from aluno where (nome like '%hug%' and idade > 5);
Outra utilização extremamente importante disponibilizada na linguagem é a utilização
do comando select de forma aninhada. Este pode ser utilizado mais de uma vez num único
comando SQL, conforme explicação abaixo.
1) SELECT ANINHADO
Exemplo: Selecionar o nome dos alunos cuja idade é maior do que a média de
idade dos alunos cadastrados
Resolução: select nome, idade from aluno a where (a.idade > (select avg(idade)
from aluno));
Explicação: A segunda consulta realizada retorna um valor único, relativo à média
de idade dos alunos. Assim, esse valor pode ser utilizado na primeira consulta.
Agora, vamos praticar!
LISTA DE EXERCÍCIOS 1
Para a resolução do exercícios, utilizar todos os comandos SQL estudados e a tabela abaixo
listada.
ALUNO(id(pk), nome, idade, endereco, cidade, estado);
1) Selecionar todos os alunos cadastrados, ordenando o resultado em ordem alfabética
2) Selecionar todos os alunos maiores de 18, ordenados em ordem alfabética decrescente
3) Selecionar o nome dos alunos que residem em Nova Andradina
4) Selecionar a média de idade dos alunos que residem em Dourados
5) Selecionar a quantidade de alunos residentes no estado Mato Grosso do Sul
6) Selecionar alunos cujo nome se pareça com 'Marc'
7) Selecionar somente a idade e a cidade na qual reside do aluno João
8) Selecionar a quantidade de alunos maiores de 18 anos, renomeando o nome do campo
resultante para 'maiores_de_idade'
9) Selecionar o nome do aluno mais velho
10) Selecionar o nome dos alunos cuja idade é menor do que a média de idade dos alunos
cadastrados
JUNÇÃO DE TABELAS - INTRODUÇÃO
Para a continuação do estudo do comando select, iremos introduzir os conceitos de junção de
tabelas, visando analisar novos meios de seleção de dados por meio da utilização da linguagem
SQL. As buscas em base de dados passam agora a ficar mais complexas e exigem maior
dedicação na implementação das consultas, visto que serão envolvidas no processo não
somente uma única tabela, mas sim, várias. Segue abaixo o próximo exemplo a ser abordado.
Este utiliza-se da base de dados criada no exercício cujo propósito era a criação de uma base de
dados para a ”Escola Tio Patinhas”.
LISTA DE EXERCÍCIOS 2
1) Selecionar o nome dos professores para cada disciplina cadastrada. Ordenar a saída em ordem
alfabética relativa aos nomes dos professores;
2) Selecionar o nome dos alunos que cursam a disciplina “Educação Familiar”;
3) Para cada aluno cadastrado, listar suas disciplinas cursantes e a carga horaria de cada uma
destas;
4) Listar todas as disciplinas cadastradas cuja carga horária seja maior que 72 horas. Ordenar a
saída em ordem alfabética decrescente;
5) Listar todos os professores cuja idade é maior do que 35 anos de idade;
6) Calcular a média de idade dos professores cadastrados e a quantidade de professores
cadastrados, renomeando os campos para 'media_idade' e 'qntd_professores' respectivamente;
7) Selecionar a quantidade de alunos que cursam a disciplina Matemática Financeira,
renomeando o campo resultante para 'qntd_alunos;'
8) Contar quantas disciplinas o aluno Huguinho cursa. Renomear o campo resultante para
qntd_disciplinas;
9) Selecionar o nome dos professores do aluno Zezinho
10) Selecionar o nome do aluno mais velho e o nome do professor mais velho, renomeando os
campos resultantes para 'aluno_mais_velho' e 'prof_mais_velho' respectivamente
AGRUPAMENTO DE DADOS - GROUP BY
A clausula group by é utilizada em conjunto com uma clausula de agregação (max, min, sum,
count, avg …) com a função de reunir as tuplas em grupos sobre os quais podem ser aplicadas
tais funções agregadas.
Sintaxe:
select <atributo>, função_agregação(<atributo>)
from <tabela>
where <condição>
group by <atributo>
Exemplo de utilização:
Listar o número de identificação das especialidades médicas cadastradas, contando o número de
ocorrências para cada uma destas na tabela a seguir.
Resolução: select especialidade_id, count(especialidade_id) as qntd_espec from medico group
by especialidade_id;
OPERADOR IN
O operador in permite a especificação de múltiplos valores em uma clausula where. Este tem
como sintaxe:
select <atributo(s)>
from <tabela>
where <atributo> in (<valor_1>, <valor_2>, … , <valor_n>)
Como exemplo, podemos citar a seguinte situação:
Selecionar as pessoas cujo sobrenome seja igual a Falleiros ou Rodrigues na tabela a seguir.
id
Sobrenome
Nome
Endereço
Cidade
1
2
3
Falleiros
Macedo
Rodrigues
Evandro
Fátima
Nátalli
Rua Cristo Rei, 1234
Rua Cristo Rei, 1234
Rua Cristo Rei, 1234
Nova Andradina
Nova Andradina
Nova Andradina
Resolução: select * from pessoas where nome in ('Falleiros', 'Rodrigues')
RENOMEANDO TABELAS RESULTANTES
Em diversas situações, torna-se interessante a renomeação de tabelas resultantes de uma
determinada seleção de dados. Assim, uma tabela resultante pode ter o nome desejado, para
que esta possa ser acessada posteriormente por meio deste nome. Ex:
select nova_tabela.nome from (select * from medico) as nova_tabela;
A renomeação acima listada pode, a princípio, não fazer muito sentido. Porém, em situações
onde houver a necessidade da utilização de dados contidos em uma seleção previamente
realizada, pode-se renomear tal seleção para que os dados nesta contidos sejam posteriormente
utilizados por meio de nome conhecido.
LISTA DE EXERCÍCIOS 3
1) Listar todos os médicos, ordenando o resultado em ordem alfabética relativa ao nome dos
médicos cadastrados;
2) Contar todos os pacientes que moram em Nova Andradina e renomear o campo resultante
para 'num_moradores';
3) Selecionar o nome e o cpf dos pacientes que já consultaram com o médico 'Mário Pascoal
Santos';
4) Selecionar todas as consultas realizadas no mês de Maio do ano de 2011;
5) Calcular o numero de consultas realizadas no primeiro semestre do anos do 2011 ,
renomeando o campo resultante para 'qntd_consultas_1sem';
6) Selecionar a quantidade de especialidades cadastradas, renomeando o campo resultante para
'num_especialidades';
7) Exibir o nome de cada um dos estados cadastrados, acompanhado da quantidade de cidades
cadastradas cada um destes;
8) Calcular a média de idade dos médicos e dos pacientes cadastrados;
9) Selecionar o nome e o CRM do médico mais novo;
10) DESAFIO : Selecionar o CRM do médico que mais realizou consultas no mês de Março
COMANDO UPDATE
Comando utilizado para realizar operações de atualização de dados.
Sintaxe: update paciente p set nome="Evandro L. S. Falleiros" where p.nome like '%evan%';
DELETE
Comando utilizado para a remoção de dados de uma tabela.
Sintaxe: delete from paciente p where p.nome like '%ev%';
ANEXO
EXEMPLOS PRÁTICOS
ex1) select * from clinica.endereco;
• Seleciona todos os dados de endereços cadastrados;
ex2) select * from paciente order by nome;
• Ordenação os registro de acordo com o nome do paciente (ordem crescente);
ex3) select nome from paciente order by nome desc;
• Ordenação em ordem decrescente;
ex4) select nome, cpf from clinica.paciente;
• Seleciona apenas o nome e o cpf de todos os pacientes cadastrados;
ex5) select e.rua, e.numero from clinica.endereco e where e.id = (select endereco_id
from clinica.paciente p where p.nome = 'Evandro Luís Souza Falleiros');
• Seleciona a rua e o numero dos endereços cadastrados pertencentes ao
paciente que tem o nome 'Evandro Luís Souza Falleiros';
ex6) select p.nome, e.rua, e.numero from clinica.endereco e, clinica.paciente p where
e.id= (select endereco_id from clinica.paciente where p.nome = 'Evandro Luís Souza Falleiros');
• Seleciona o nome, a rua e o numero dos endereços cadastrados pertencentes
ao paciente que tem o nome 'Evandro Luís Souza Falleiros';
ex7) select nome, rua, numero from clinica.endereco e inner join clinica.paciente p
where (p.endereco_id = e.id);
• Seleciona o nome, a rua e o numero dentre endereços cadastrados para cada
paciente cadastrado;
= e.id);
ex8) select * from clinica.endereco e inner join clinica.paciente p where (p.endereco_id
•
Seleciona todos os atributos dentre endereços cadastrados para cada paciente
cadastrado;
ex9) select nome as NOME, cidade as CIDADE from paciente p inner join endereco e
where (p.nome like '%evand%' and p.endereco_id = e.id);
•
Seleciona o nome e a cidade do paciente que tem o nome parecido com
'evand';
Obs. : Quando não selecionamos a base de dados a ser pesquisada, utilizamos
“... from base.tabela … ”. Para selecionarmos a base para edição, clicar duas vezes com o
botão esquerdo esquerdo do mouse na base de dados desejada ou utilizar o comando
Conforme o exemplo abaixo:
Ex: select * from clinica.paciente
Download