Bancos de Dados - Aula 14 - Linguagem de consulta – SQL Parte II

Bancos de Dados - Aula 14 - Linguagem de consulta – SQL Parte II

Introdução à Consulta em SQL

Estrutura Básica de uma Consulta SQL

  • A estrutura básica de uma consulta SQL inclui os comandos SELECT, FROM e WHERE. Esses elementos são fundamentais para extrair informações do banco de dados.
  • No comando SELECT, deve-se listar os atributos que compõem a resposta da consulta. O FROM especifica as tabelas que contêm os dados necessários, enquanto o WHERE define as condições que esses dados devem atender.

Comparação com Álgebra Relacional

  • A estrutura das consultas em SQL é semelhante ao que foi estudado em álgebra relacional e cálculo relacional, facilitando a execução das consultas após prática com linguagens formais.

Exemplo Prático: Consultas Simples

  • Um exemplo simples seria recuperar datas de nascimento e endereços dos funcionários com sobrenome "Brotas". Para isso, utiliza-se a tabela "funcionário" e a condição no WHERE.
  • Se não houver condições específicas, como na seleção de todos os identificadores dos funcionários, pode-se omitir o WHERE.

Consultas Envolvendo Múltiplas Tabelas

  • Ao realizar consultas envolvendo mais de uma tabela, como funcionário e departamento, é necessário especificar ambas no FROM para obter informações corretas sobre o departamento onde o funcionário trabalha.
  • É importante indicar qual atributo está sendo selecionado de cada tabela para evitar confusões entre colunas com nomes iguais.

Produto Cartesiano e Condições

  • Quando se utilizam múltiplas tabelas no FROM, ocorre um produto cartesiano. As condições no WHERE ajudam a filtrar as tuplas corretas.
  • A verificação das condições é crucial para garantir que apenas as tuplas relevantes sejam retornadas na consulta.

Consultas Avançadas: Projetos Localizados em São Paulo

Estrutura da Consulta Complexa

  • Para listar projetos localizados em São Paulo, será necessário utilizar três tabelas: projeto (informações do projeto), departamento (informações do departamento), e funcionário (dados do gerente).

Seleção dos Dados Relevantes

Consulta SQL e Manipulação de Dados

Seleção de Tuplas Corretas

  • O objetivo é escolher tuplas onde o número do projeto seja igual ao número do departamento, garantindo que o gerente do departamento (G idente) corresponda ao identificador do funcionário.
  • A localização do projeto deve ser em São Paulo, sendo uma condição essencial para a seleção das tuplas.

Uso da Cláusula FROM

  • Exemplo de consulta utilizando a mesma tabela duas vezes, renomeando as tabelas conforme seu papel na consulta.
  • A consulta busca recuperar o nome do funcionário e o nome de seu supervisor imediato, ambos presentes na tabela funcionário.

Verificação de Condições

  • É necessário verificar se o identificador do supervisor corresponde ao identificador correto na dupla formada pelo produto cartesiano.
  • Se a tupla contém as informações corretas sobre os dados do supervisor, ela será selecionada; caso contrário, não aparecerá no resultado.

Recuperação de Salários

  • Para recuperar os salários de todos os funcionários, utiliza-se SELECT ALL salário da tabela funcionário para garantir que todos os salários sejam incluídos.
  • O uso de ALL é importante para evitar que salários duplicados sejam desconsiderados na resposta.

Consultas Mais Elaboradas

  • Uma consulta mais complexa envolve listar números de projetos com funcionários cujo sobrenome é Silva, considerando tanto trabalhadores quanto gerentes.
  • A solução envolve duas consultas separadas: uma para gerentes e outra para trabalhadores com sobrenome Silva.

União e Eliminação de Duplicatas

  • Os resultados das duas consultas são unidos; como ambos têm um único atributo comum (números dos projetos), isso facilita a união.
  • No SQL, duplicatas são eliminadas automaticamente. Para incluir duplicatas, deve-se usar ALL.

Comandos LIKE e Filtragem por Endereço

  • O comando LIKE permite buscar registros em campos compatíveis com strings. Por exemplo, pode-se procurar endereços que contenham "São Paulo".

Consulta SQL e Funções Agregadas

Filtrando Dados com Condições

  • A consulta permite filtrar funcionários que têm "SP" no valor do endereço, além de buscar por datas de nascimento entre 1950 e 1959.

Ordenação dos Resultados

  • O comando ORDER BY é introduzido para definir a ordenação das tuplas na resposta, inicialmente pelo nome do departamento em ordem ascendente.
  • Em caso de nomes de departamentos repetidos, a ordenação secundária será feita pelo nome do funcionário também em ordem ascendente.

Tratamento de Valores Nulos

  • O tratamento de valores nulos em SQL é feito com o comando IS NULL, onde se verifica se um valor é nulo ou não.
  • A consulta busca os nomes dos funcionários sem supervisores, utilizando a condição que verifica se o atributo supervisor (suid) é nulo.

Junção de Tabelas

  • A sintaxe da junção é apresentada, mostrando como selecionar atributos de duas tabelas (funcionário e departamento), especificando as condições necessárias para a junção.
  • Renomeações são utilizadas nas tabelas para facilitar a referência durante as consultas, permitindo uma melhor organização dos dados.

Funções Agregadas em SQL

  • As funções agregadas como soma, máximo, mínimo e média são aplicadas à tabela funcionário para calcular salários sem condições específicas inicialmente.
  • Uma subconsulta envolvendo a função COUNT é mencionada, contando dependentes associados aos funcionários com uma condição específica sobre o número deles.

Agrupamento e Restrições

  • A cláusula HAVING é utilizada para aplicar restrições sobre funções agregadas após agrupamentos realizados pela consulta anterior.
  • A contagem de funcionários com salário maior que 40.000 é agrupada por departamento; apenas departamentos que atendem essa condição aparecem na resposta final.

Encerramento da Aula

Video description

Engenharia de Computação – Bancos de Dados Disciplina EID - 002 - Bancos de Dados Professora responsável: Sarajane Marques Peres Playlist da disciplina: https://www.youtube.com/playlist?list=PLxI8Can9yAHeHQr2McJ01e-ANyh3K0Lfq