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