Operação de Seleção
A operação de seleção filtra as tuplas de uma relação, retornando apenas aquelas que satisfazem um determinado predicado.
Notação e Sintaxe
\[\sigma_p(r)\]
onde \(r\) é uma relação e \(p\) é o predicado de seleção — uma condição booleana sobre os atributos das tuplas.
O resultado de \(\sigma_p(r)\) é uma relação com o mesmo schema de \(r\), mas contendo apenas as tuplas para as quais \(p\) é verdadeiro.
Predicados de Seleção
Os predicados podem usar:
- Operadores de comparação: \(=\), \(\neq\), \(>\), \(\geq\), \(<\), \(\leq\)
- Conectivos lógicos: \(\wedge\) (e), \(\vee\) (ou), \(\neg\) (não)
- Comparação entre atributos: \(\sigma_{id\_escola = id\_centro}(escola)\)
Exemplo 1: Professores da ESETI
Considere a relação professor:
| id_prof | nome | id_escola | ch_semanal |
|---|---|---|---|
| 21200001 | Eduarda Souza | 21 | 20 |
| 21400002 | Felipe Araujo | 21 | 40 |
| 31200001 | Gustavo Costa | 31 | 20 |
| 31400002 | Helena Carvalho | 31 | 40 |
| 31200003 | Igor Melo | 31 | 20 |
| 11400001 | Bruno Teixeira | 11 | 40 |
| 11400002 | Carla Pinto | 11 | 40 |
A expressão \(\sigma_{id\_escola = 31}(professor)\) retorna:
| id_prof | nome | id_escola | ch_semanal |
|---|---|---|---|
| 31200001 | Gustavo Costa | 31 | 20 |
| 31400002 | Helena Carvalho | 31 | 40 |
| 31200003 | Igor Melo | 31 | 20 |
Apenas as tuplas onde id_escola = 31 foram mantidas. O schema do resultado é idêntico ao schema de professor.
Exemplo 2: Predicado Composto
Para selecionar alunos do curso de Engenharia de Software e com ingresso em 2024, usa-se o conectivo \(\wedge\):
\[\sigma_{id\_curso = 311 \,\wedge\, ano\_ingresso = 2024}(aluno)\]
Relação aluno (amostra):
| id_aluno | nome | id_curso | ano_ingresso |
|---|---|---|---|
| 2023311001 | Matheus Lima | 311 | 2023 |
| 2023311002 | Larissa Araújo | 311 | 2023 |
| 2024311001 | Pedro Carvalho | 311 | 2024 |
| 2024311002 | Isabela Freitas | 311 | 2024 |
| 2023111001 | Beatriz Mendes | 111 | 2023 |
| 2023211001 | Amanda Moreira | 211 | 2023 |
Resultado:
| id_aluno | nome | id_curso | ano_ingresso |
|---|---|---|---|
| 2024311001 | Pedro Carvalho | 311 | 2024 |
| 2024311002 | Isabela Freitas | 311 | 2024 |
Exemplo 3: Comparação Entre Atributos
O predicado pode também comparar dois atributos da mesma relação. Por exemplo, para encontrar disciplinas cujo código corresponde ao nome do curso ao qual pertencem (verificação de consistência):
\[\sigma_{semestre > 6}(disciplina)\]
Neste caso, o predicado \(semestre > 6\) filtra as disciplinas das fases finais do curso.
Para Praticar
1. Predicado com OR. Escreva a expressão para encontrar todos os professores que são da EEMA ou têm salário acima de 6.000. Quais tuplas o resultado conteria?
\[\sigma_{id\_escola = 21\ \vee\ salario > 6000}(professor)\]
Resultado (7 professores verificados): - EEMA (id_escola=21): Eduarda Souza (3.200 — pelo critério de escola), Felipe Araujo (6.400 — ambos os critérios) - ESETI (id_escola=31): Helena Carvalho (6.700 — pelo salário), Gustavo Costa e Igor Melo (não satisfazem nenhum critério) - ESG (id_escola=11): Bruno Teixeira (6.500) e Carla Pinto (6.600) — pelo salário
Total: 5 tuplas (Eduarda, Felipe, Helena, Bruno, Carla).
2. Predicado composto. Escreva uma expressão para selecionar as disciplinas do curso ENS com carga horária entre 120 h e 160 h (inclusive).
\[\sigma_{id\_curso = 311\ \wedge\ carga\_horaria \geq 120\ \wedge\ carga\_horaria \leq 160}(disciplina)\]
Resultado: 3110202 (120h), 3110402 (120h), 3110601 (150h), 3110602 (120h), 3110802 (160h) = 5 tuplas.
3. Seleção sobre resultado de outra operação. É válido aplicar \(\sigma\) sobre o resultado de um produto cartesiano? Escreva a expressão para encontrar todos os pares (professor, escola) onde professor.id_escola = escola.id_escola e escola.id_centro = 3.
\[\sigma_{professor.id\_escola = escola.id\_escola\ \wedge\ escola.id\_centro = 3}(professor \times escola)\]
Isso é exatamente uma junção com filtro adicional — equivale a \(professor \bowtie_{professor.id\_escola = escola.id\_escola} \sigma_{id\_centro = 3}(escola)\), que retorna apenas os professores da ESETI (vinculada ao centro COETI, id_centro=3).