Você está na página 1de 31

BASE DE DADOS

Índice

1. Definições...................................................................................................................................................1
1.1 Base de Dados (BD).............................................................................................................................1
1.2. Sistemas de Gestão de Base de Dados (SGBD)..................................................................................1

2. Projetos de Base de Dados........................................................................................................................2


2.1 Desenho Conceptual: Modelo Entidade-Relacionamento..................................................................3
2.2 Desenho Lógico: Modelo relacional....................................................................................................8
2.2.1 SQL Workbench..........................................................................................................................11
2.3 Modelo Físico....................................................................................................................................15

3. Álgebra relacional....................................................................................................................................17
3.1 Seleção (ou Restrição) - σpredicate( R)........................................................................................18

3.2 Projeção - Πa1 , … an(R).............................................................................................................18

3.3 União ( R ∪S )..................................................................................................................................19

3.4 Diferença (R−S) .............................................................................................................................19

3.5 Interseção ( R ∩S=R−(R−S))...................................................................................................19

3.6 Produto Cartesiano (R × S).............................................................................................................20


3.7 Operações de Junção........................................................................................................................21
3.7.1 Theta Join (R ⋈ FS=σ F( R × S )).........................................................................................21

3.7.2 Natural Join ( R ⋈ S)..................................................................................................................21

3.7.3 (Left) Outer Join (R ⋊ S)...........................................................................................................22

3.7.4 Semijoin (R ⊳ F S)...................................................................................................................22

3.8 Divisão (R ÷ S).................................................................................................................................23


3.9 Operações de Agregação I ALR ......................................................................................................23
3.10 Operações de Agrupamento (GA I ALR ¿ ........................................................................................24
3.11 Sumário das Operações...................................................................................................................25

4. SQL: Manipulação de Dados....................................................................................................................29


4.1 SELECT...............................................................................................................................................30
4.2 DISTINCT............................................................................................................................................31
4.3 WHERE...............................................................................................................................................32
4.3.1 Condição de Procura por Comparação......................................................................................32
4.3.2 Condição de Procura por Alcance (BETWEEN)..........................................................................33
4.3.3 Condição de Procura por Associação (IN)..................................................................................33
4.3.4 Condição de Procura por Padrão (LIKE).....................................................................................34

II
4.3.5 Condição de Procura NULL........................................................................................................35
4.4 ORDER BY...........................................................................................................................................35
4.5 Funções de Agregação.......................................................................................................................36
4.5.1 COUNT........................................................................................................................................36
4.5.2 SUM............................................................................................................................................36
4.5.3 MIN, MAX, AVG..........................................................................................................................37
4.6 Subqueries.........................................................................................................................................37
4.7 EXISTS................................................................................................................................................38

Exercícios
PL1 …………………………….2
PL2 …………………………….4
PL3 …………………………….4
PL4 …………………………….9
PL5 – 2 ……………………….11
PL5 – 3 ……………………….18
PL6 …………………………….24

III
1. Definições

Uma base de dados é uma coleção compartilhada de dados relacionados logicamente, e uma
descrição desses dados, concebidos para satisfazer as necessidades de informação de uma organização.

O Sistema de Gestão de Base de Dados é um software que permite aos utilizadores definir,
criar, manter e controlar o acesso à base de dados.
O ambiente SGBD consiste de hardware (computador), software (SGBD, sistema operativo, e
programas de aplicações), dados, procedimentos e pessoas. As pessoas incluem os administradores da
base de dados, programadores de aplicativos e utilizadores finais.

Vantagens Desvantagens
 Controle de redundância de dados  Complexidade
 Consistência dos dados  Tamanho
 Mais informações a partir da mesma quantidade de  Custos elevados
dados  Maior impacto nas falhas
 Partilha de dados
 Capacidade de resposta melhorada
 Maior segurança
 Aplicação de normas
 Aumento da produtividade
 Manutenção melhorada através de independência
de dados
 Serviços de backup e recuperação melhoradas

2. Projetos de Base de Dados


- Recolha E Análise de requisitos: entrevistas, questionários para recolher factos sobre
sistemas, requisitos e preferências.
- Desenho conceptual: a partir dos requisitos obtidos é gerado um esquema da BD. Atualmente
são muito utilizados os modelos de Entidade-Relacionamento (MER)
- Desenho Lógico: avalia o esquema conceitual frente às necessidades do uso da BD pelos
usuários e aplicações, realizando refinamentos para melhorar o desempenho das operações.
- Desenho Físico: define-se detalhes técnicos da implementação do banco de dados, por
exemplo a forma como os dados serão armazenados, permissão de acesso de usuário, etc.

Nota: em cada uma das etapas é necessário verificar se estas estão de


acordo com os requisitos

1
2.1 Desenho Conceptual: Modelo Entidade-Relacionamento
PL1: Todas as empresas da área da saúde têm de guardar a informação relativa aos contactos
pessoais dos profissionais que nela trabalham. Os “livros” de contactos podem apresentar estruturas e
formatos muito diversos.

1. Identificar os tipos de entidades


Uma entidade é um objeto distinto (uma pessoa, lugar, conceito ou evento) da organização a
representar na base de dados. As entidades são representadas por retângulos: profissional,
profissão, funcionário

2. Identificar como as entidades se relacionam


Um relacionamento é uma associação entre entidades. Os relacionamentos são representados por
losangos. Dependendo do tipo de resposta fornecida, um relacionamento poderá ser de:
• um-para-um (1:1): usado quando uma entidade A se relaciona com apenas uma entidade
B e vice-versa.

• um-para-muitos (1: N): usado quando uma entidade A pode se relacionar com uma ou
mais entidades B

•muitos-para-muitos (N:N ou N:M): usado quando várias entidades A se relacionam com


várias entidades B.

O Profissional tem uma profissão. O Funcionário regista/altera os dados do Profissional

3. Identificar e associar atributos com tipos de entidades ou relacionamento


Um atributo é uma propriedade que descreve o objeto (entidade). Os atributos são representados
por círculos.
- Profissional: id, nome, data de nascimento, morada (rua, código-postal, localidade), nº de
telemóvel, email, data de registo.
- Profissão: id, nome
- Funcionário: id, nome

2
Ao alterar os dados do Profissional é de interesse registar a data em que se alteram os dados.
Assim o relacionamento ‘alterar’ vai ter o atributo ‘data de alteração’.

4. Determinar domínios de atributos, isto é, definir os valores que os atributos podem ter. Por
exemplo, as notas finais de uma cadeira têm de ser entre zero e vinte

5. Determinar os atributos candidatos e chave primária: id


6. Verificar a redundância
7. Validar o modelo conceptual com as transações de cada utilizador
8. Rever o modelo de dados conceptual do utilizador

Notas:
- Atributo multivalor: atributo que possuem mais do que um valor. É representado por
dois círculos. Ex: uma pessoa pode ter vários números de telemóvel
- Atributo Composto: atributo que é subdividido noutros atributos. Ex: a morada é
subdividida em rua, localidade e código postal
- Atributo Derivado: atributos que dependem de outras bases de dados. É representado
por um círculo a tracejado. Ex: PL3
- A profissão é um atributo fraco pois não é um objeto distinto, depende das pessoas,
ex.: enfermeiro, enfermeira, médico, medico. Por isso, a profissão passa a ser uma
entidade.
- Para cada entidade tem de se escolher uma chave, isto é, tem de se escolher o atributo
que a representa. Geralmente, a chave á o atributo sublinhado.

3
PL2: uma empresa de colheitas de para análises clínicas pretende desenvolver uma pequena base de
dados para registar os equipamentos que os seus funcionários utilizam nas diversas tarefas de colheita e
armazenamento que realizam.
Na definição de cada serviço de colheita é necessário caracterizar os tipos de colheitas serão feitas
(número, designação, data de início e data de fim, nome do cliente e local de realização), indicar quais os
funcionários (número, nome e categoria) que nele vão participar, o equipamento que vai ser utilizado no
trabalho e o número de horas de utilização previsto para cada equipamento nesse trabalho; além disso, é
necessário registar o funcionário que será o responsável pela realização de cada um dos diferentes tipos de
colheita.

PL3: A inscrição e o registo das classificações nas Unidades Curriculares há muito que
representam um problema para os serviços académicos. Os requisitos que os responsáveis acharam
mais importantes e que gostariam de ver na futura base de dados são:
• Na altura da sua inscrição, um aluno tem que indicar o seu nome, nº de contribuinte, nº cartão
de cidadão, endereço, nº de contacto telefónico, o nome dos pais e do encarregado de
educação, a data de nascimento, e o curso que vai frequentar; mais tarde o seu registo de
dados irá conter, também, o nº de unidades curriculares realizadas, o valor em ECTS e a sua
média.
• Os cursos são caracterizados pela sua designação, número de alunos inscritos, ciclo de estudos,
grau que confere e a que conselho pedagógico pertence; além da identificação do seu diretor
que é, obrigatoriamente, um dos professores.
• As unidades curriculares estão integradas no plano curricular de um dado curso; na base de
dados futura deverá figurar também a escolaridade da unidade curricular bem como a

4
informação do seu responsável (um professor) e o tipo e o nº de aulas que cada professor
leciona.
• Os professores das unidades curriculares pertencem a um dado departamento e são
classificados através da sua categoria dentro da instituição.

2.2 Desenho Lógico: Modelo relacional


O modelo relacional encontra-se organizado em relações (tabelas bidimensionais), em que cada
coluna corresponde a um atributo diferente e cada linha corresponde a diferentes registos, também
chamados tuplos. A principal vantagem do modelo relacional é a sua estrutura lógica simples.

Objetivos
 Permitir um elevado grau de independência de dados
 Fornecer motivos para lidar com a semântica de dados, problemas de consistência e
redundância.
 Permite a expansão de linguagens de manipulação de dados orientadas para conjuntos

Terminologias
 Relação: tabela bidimensional, em que as linhas correspondem aos dados individuais e as
colunas correspondem aos atributos. As relações são usadas para conter informação sobre
os objetos que serão representados na base de dados
 Atributo: é uma coluna com nome e que pertence a uma relação

5
 Domínio: é o conjunto de valores permitidos para um ou mais atributos. Todos os atributos
numa relação são definidos num domínio
 Grau de uma relação: número de atributos que a relação contém
 Cardinalidade: número de linhas/tuplos que a relação tem
 Super Chave: atributo, ou conjunto de atributos, que identifica unicamente um tuplo dentro
de uma relação
 Chave Primária: permite a identificação de cada registo (tuplo) da tabela, garantindo a sua
unicidade. Nunca pode ser nula
 Chave Estrangeira: identifica um atributo, ou conjunto de atributos numa tabela, que
corresponde à chave primária de uma outra tabela. Assim, os valores da chave primária de
uma tabela são reproduzidos noutra tabela à qual esta se encontra ligada. As chaves
estrangeiras são a única forma para representar relações entre tabelas, numa base de dados
relacional.
 Valor Nulo: representa informação não disponível ou não aplicável

6
Branch (branch No, street, city, postcode)
Staff (staff No, fName, Iname, position, sex, DOB, salary, branch No)
Property for Rent (property No, street, city, postcode, type, rooms, rent, owner No,
Staff No, branch No)
Client (client No, fName, Iname, telNo, prefType, maxRent, eMail)
Private Owner (owner No, fName, Iname, address, telNo, email, password)
Viewing (client No, property No, view Date, comment)
Registration (client No, branch No, staff No, date Joined)

Nota: Os atributos sublinhados são as chaves primárias.

7
2.2.1 SQL Workbench

O MySQL Workbench fornece recursos extensivos para criar e manipular modelos de banco de
dados, incluindo estes:
 Criar e manipular um modelo graficamente
 Reverse engineer um banco de dados ao vivo para um modelo
 Forward engineer modelo para um script ou banco de dados ao vivo
 Criar e editar tabelas e inserir dados

A barra de ferramentas vertical no lado esquerdo tem seis ferramentas de relacionamentos:


 one-to-one non-identifying relationship
 one-to-many non-identifying relationship
 one-to-one identifying relationship
 one-to-many identifying relationship
 many-to-many identifying relationship

Identifying relationship: identificado por uma linha contínua entre tabelas. Um relacionamento
identificador é aquele em que a tabela filho não pode ser identificada de forma exclusiva sem seu pai.
Normalmente, isso ocorre quando é criada uma tabela intermediária para resolver um relacionamento

8
muitos-para-muitos. Nesses casos, a chave primária é, normalmente, uma chave composta pelas chaves
primárias das duas tabelas originais.
Non-identifying relationship: identificado por uma linha quebrada (tracejada) entre tabelas

Criar uma Foreign Key


Certifique-se de que existe uma chave primária na tabela que estará no lado “um” do
relacionamento. Clique na ferramenta apropriada para o tipo de relacionamento que deseja criar. Se for
um relacionamento1:n, primeiro clique na tabela que está no lado “muitos” do relacionamento e cria-se
automaticamente uma foreign key na tabela do lado dos “muitos”.
Quando a ferramenta muitos-para-muitos está ativa, clicando duas vezes numa tabela cria uma
tabela associativa com um relacionamento muitos-para-muitos. Para que esta ferramenta funcione,
deve haver uma chave primária definida na tabela inicial.

2.3 Modelo Físico


PL4: converta o esquema conceptual produzido na PL3 para o seu correspondente esquema
lógico. Faça a geração do respetivo esquema físico para a base de dados em questão. 1

9
1
DECIMAL (3,1): algarismo de 3 dígitos; 2 dígitos pertencem à parte inteira e 1 pertence à parte decimal.
PL5 - 2: A partir do esquema lógico apresentado desenhe um possível esquema conceptual.

MODELO FÍSICO

3. Álgebra relacional
A álgebra relacional é uma linguagem teórica com operações sobre uma ou mais relações para
definir outra relação, sem alterar a relação original. Assim, tanto os operandos como os resultados são
relações, pelo que a saída de uma operação pode ser a entrada de outra operação. As cinco operações

10
fundamentais da álgebra - Seleção, Projeção, Produto Cartesiano, União e Diferença - executam a
maioria das operações de recuperação de dados. Para além destas também há as operações de Junção,
Interseção e Divisão que podem ser expressas a partir das cinco operações básicas.

3.1 Seleção (ou Restrição) - σ predicate (R)


A Seleção funciona numa única relação R e define a relação que contém apenas os tuplos de R
que satisfazem as condições especificadas (predicate). Por exemplo, lista de empregados cujo salário é
maior que 10000: σ salary >10000 ( Staff )

11
3.2 Projeção - Π a , …a (R)
1 n

A Projeção funciona numa única relação R e define uma relação que contém um subconjunto
vertical de R, extraindo os valores de atributos especificados e eliminando duplicados. Por exemplo,
produza uma lista dos salários de todos os empregados, mostrando apenas o staffNo, fName, IName e
salary details: Π staffNo , fName, IName , salary ( Staff )

3.3 União (R ∪S )
A união das duas relações R e S definem uma relação que contém todos os
tuplos de R, ou S, ou ambos os R e S, tuplos duplicados são eliminados. R e S devem ser
compatíveis. Por exemplo, lista de todas as cidades onde existe um escritório ou uma
propriedade para alugar: Π city (Branch)∪ Π city ( PopertyForRent) .

3.4 Diferença (R−S)


A diferença define uma relação que consiste nos tuplos que são da relação R, mas não estão na
S. R e S devem ser compatíveis para a união.
Por exemplo, lista de todas as cidades que têm escritórios, mas não têm

propriedades para alugar: Π city ( Branch )−Π city ( PopertyForRent).

3.5 Interseção ( R ∩S=R−( R−S))


A interseção define a relação que consiste no conjunto de todos os tuplos que
estão em ambos os R e S. R e S devem ser compatíveis para união.
Por exemplo, lista de todas as propriedades onde existe um escritório e pelo
menos uma propriedade para alugar: Π city (Branch) ∩ Π city ( PopertyForRent ).

12
3.6 Produto Cartesiano (R × S)
O produto cartesiano define a relação que é a concatenação de cada tuplos de R relacionada
com cada tuplo da relação S. Por exemplo, listar os nomes e comentários de todos os clientes que
visualizaram um imóvel para alugar:
Π clientNo , fName , IName (Client) × Π clientNo , propertyNo ,comment (Viewing )

A relação contém informações a mais. Por exemplo, o primeiro tuplo contém diferentes valores
clientNo. Para obter o resultado pretendido, precisamos realizar uma seleção nesta relação para extrair
os tuplos onde Client.clientNo = Viewing.clientNo.
σ Client .clientNo=Viewing .clientNo (Π clientNo ,fName , IName ( Client ) × Π clientNo , propertyNo , comment ( Viewing ) )

3.7 Operações de Junção


Junção é um derivado do produto cartesiano, equivalente a executar uma operação de Seleção
sobre o produto cartesiano das duas relações de operando. Junção é uma das operações mais difíceis de
implementar de forma eficiente num RDBMS e é uma das razões pelas quais os sistemas relacionais têm
problemas de desempenho.

13
Existem várias formas da operação junção, cada uma com diferenças subtis, algumas mais úteis
do que outras: Theta join, Natural join, Outer join, Semijoin. Usam-se quando as relações têm um
atributo comum.

3.7.1 Theta Join (R ⋈ F S=σ F ( R × S))


A operação Theta Join define uma relação que contém os tuplos que satisfazem o predicado F a
partir do produto cartesiano de R e S. O predicado F é da forma R.a i θ S.bi onde θ pode ser um dos
operadores de comparação (<, ≤,>, ≥, =, ≠).
No caso do predicado F conter apenas igualdade (=), é usado o termo Equijoin. Por exemplo,
listar os nomes e comentários de todos os clientes que visualizaram um imóvel para alugar:

( Π clientNo , fName , IName ( Client )) ⋈Client . clientNo=Viewing . clientNo ( Π clientNo , propertyNo , comment ( Viewing ) )

3.7.2 Natural Join ( R ⋈ S)


O Natural join é um Equijoin de duas relações R e S sobre todos os atributos comuns. Uma
ocorrência comum de cada atributo é eliminada do resultado.
Por exemplo, listar os nomes e comentários de todos os clientes que visualizaram um imóvel

para alugar: ( Π clientNo , fName , IName ( Client ) ) ⋈ ( Π clientNo , propertyNo , comment (Viewing ) )

Seleciona apenas os atributos (clientNo)


comuns a R e S (client e Viewing). Usa-se
para obter dados de ambas as relações.

3.7.3 (Left) Outer Join ( R ⋊ S)


Outer Join é uma junção em que os tuplos de R que não tem correspondência nos atributos
comuns de S são incluídos no resultado. Os valores em falta na segunda relação são apresentados a
nulo. Também existe (Right) Outer Join R ⋉ S.
Por exemplo, produzir um relatório com o estado das propriedades visitadas

( Π propertyNo , street ,city ( PropertyForRent ) ) ⋊Viewing

14
Faz todas as possíveis combinações de R e S (PropertyForRent e Viewing), ou seja, inclui os atributos
de R que não têm correspondência em S.
Usa-se para obter dados apenas da relação S, isto é, obtém-se street e city das propriedades vistas.

3.7.4 Semijoin ( R ⊳ F S)
A operação Semijoin define uma relação que contém os tuplos de R que participam na junção
de R com S.
Por exemplo, listar os detalhes completos de todos os funcionários que trabalham na filial de

Glasgow: Staff ⊳ Staff . branchNo= Branch.branchNo ( σ city ¿' Glasgo w ' (Branch) )

3.8 Divisão (R ÷ S)
A operação Divisão define uma relação sobre o atributo C, que consiste no conjunto de tuplos
de R que correspondem a combinação de cada tuplo em S. Retorna uma relação contendo elementos da
primeira relação que se relacionam com todos os elementos da segunda relação. Os atributos
resultantes são os atributos da relação R que não existem na relação S.
Por exemplo, identificar todos os clientes que visualizaram todos os imóveis com três quartos:
Π clientNo , propertyNo ( Viewing ) ÷ Π propertyNo (σ rooms=3 ( PropertyForRent ) )

3.9 Operações de Agregação ( I AL ( R ) )


 COUNT - retorna o número de valores do atributo associado.
 SUM - devolve a soma dos valores do atributo associado.
 AVG - devolve a média dos valores do atributo associado.
 MIN - retorna o menor valor no atributo associado.
 MAX - retorna o maior valor no atributo associado.

15
3.10 Operações de Agrupamento (GA I AL ( R ) ¿
As operações de agrupamento agrupam os tuplos da relação R agrupando os atributos GA, em
seguida, aplica-se a lista das funções de agregação AL para definir uma nova relação. AL contém um ou
mais (<aggregate_function>, <atributo>) pares. A relação resultante contém os atributos de
agrupamento, GA, e os resultados de cada uma das funções de agregação.

3.11 Sumário das Operações

16
PL5 - 3: Utilizando a Álgebra Relacional, desenvolva as expressões necessárias, e respetivas
árvores de resolução, que possam responder às seguintes questões:

a) Quais são os nomes dos médicos com mais de 10 anos de serviço.


Π nome (σ ¿¿ Dta¿ >10( Medicos )) ¿

b) Apresente o nome dos médicos e respetiva especialidade.


Π nome , designacao ( Medicos ⋈ Medico .id = Especialidade . id
Especialidade
Especialidade )

c) Qual é o par nome e morada dos pacientes residentes


em Braga.

17
Π nome , morada ¿

d) Qual é o nome dos médicos de Oftalmologia.


Π nome ¿
σ designacao=' Oftalmologia ' ( Especialidade ))

e) Qual o nome e idade dos médicos com mais de 40 anos de Clínica Geral.
Π nome , dta nascimento
¿¿
⋉ Medico . id Especialidade
=Especialidade .id σ designacao=' clinica geral ' ( Especialidade) ¿

f) Qual o nome médicos de Oftalmologia que consultaram pacientes de Braga.

Π nome ¿
σ designacao=Oftalmologia (Especialidade) ⋉ Medico .id =Consultas .id medico

¿
⋉ Paciente . cod postal
=Cod postal.. codigo σ localidade=' Braga ' ( cod postal )¿ ¿

g) Qual o nome e anos de serviço dos médicos com mais de 50 anos que deram consultas de
tarde a pacientes com menos de 20 anos.
Π nome , dta ¿ ¿ ¿

⋉ Medico . id=Consultas.id medico


¿
⋉ Consultas. id paciente
=Paciente .id paciente σ idade(dta nascimento )<20 ( Pacientes)¿ ¿

h) Qual o nome e idade dos pacientes com mais de 10 anos que nunca foram consultados a
Oftalmologia.

18
Π nome , dta
nascimento
¿¿
σ designacao=' Oftalmologia ' ( Especialidade )¿ ¿

4. SQL: Manipulação de Dados


SQL (Structured Query Language) é uma linguagem não processual; você especifica quais
informações precisa, em vez de como obtê-las. Noutras palavras, o SQL não exige que você especifique
os métodos de acesso aos dados.
Uma linguagem de base de dados deve permitir a um utilizador:
 Criar a base de dados e as estruturas das relações
 Executar tarefas de gestão de dados básicos, tais como a inserção, alteração e
exclusão de dados das relações
 Realizar consultas simples e complexas

O SQL tem dois componentes principais:


 Data Definition Language (DDL): para definir a estrutura da base de dados e
controlar o acesso aos dados
 Data Manipulation Language (DML): para recuperação e atualização de dados. A
estrutura dos comandos é composta por palavras em inglês, como:
 CREATE TABLE: é usado para criar uma tabela
 SELECT: para consultar dados na base de dados
 INSERT: para inserir dados numa tabela
 UPDATE: para atualizar dados de uma tabela
 DELETE: para apagar os dados de uma tabela

Embora SQL seja de formato livre, uma instrução SQL ou conjunto de instruções é mais legível
se se usar indentação e lineação. Por exemplo:
 Cada cláusula de uma instrução deve começar numa nova linha
 O início de cada cláusula deve ser alinhado com o início de outras cláusulas
 Se uma cláusula tem várias partes, elas devem aparecer numa linha separada e estar
indentada para mostrar o relacionamento

Literais: são constantes usadas nas instruções SQL. Os literais são diferenciados entre os que
são colocados entre plicas e aqueles que não são. Todos os valores de dados não-numéricos devem ser
colocados entre plicas; todos os dados numéricos não devem ser colocados entre plicas.

4.1 CREATE TABLE


Quando existe mais do que uma Primary Key Quando existe uma Primary Key

19
CREATE TABLE enrolled( CREATE TABLE student (
snum INT(9), snum INT(9) PRIMARY KEY,
cname VARCHAR (40), sname VARCHAR(30),
PRIMARY KEY (snum,cname), major VARCHAR(25),
FOREIGN KEY(snum) REFFER- standing VARCHAR(2),
ENCES student age INT(3));

DROP TABLE empregado; #Elimina a tabela empregado

ALTER TABLE student ADD(sign_shape INT); #Adiciona a coluna sign_shape

ALTER TABLE student MODIFY sign_shape VARCHAR(10);


#Altera o tipo de dados da coluna sign_shape

DESCRIBE student
#Indica as colunas e respetivos tipos de dados da tabela students

4.2 INSERT
INSERT INTO empregado
(primeiro, ultimo, idade, morada, localidade, estado)
VALUES ('Luis', 'Duque', 45, `Rua dos Bragas, 20', `Braga', `Minho');

4.3 UPDATE
UPDATE empregado
SET idade = idade+1
WHERE primeiro_nome='Maria' AND ultimo_nome=`Pereira';

4.3 SELECT
O objetivo da instrução SELECT é recuperar e exibir dados de uma ou mais tabelas da base de
dados. É capaz de executar o equivalente às operações Seleção, Projeção e Junção da álgebra relacional
numa única instrução.

Obrigatórias

Opcionais

 SELECT: especifica quais colunas devem aparecer na saída. ColumnExpression


representa o nome ou expressão da coluna a ser usada
 SELECT * FROM Staff: seleciona todas as colunas de Staff
 SELECT DISTINCT propertyNo FROM Viewing: elimina os duplicados

20
 FROM: especifica a tabela ou tabelas que vão ser usadas. TableName é o nome de
uma tabela existente ou view para a qual tens acesso; alias é a abreviação opcional
para TableName
 WHERE: filtra as linhas sujeitas a alguma condição
 GROUP BY: forma grupos de linhas com o mesmo valor de coluna
 HAVING: filtra os grupos sujeitos a alguma condição
 ORDER BY: especifica a ordem da saída

4.3.1 WHERE
O SELECT retorna todas as linhas da tabela. No entanto, ás vezes é necessário restringir as
linhas retornadas. Para isso usa-se a palavra WHERE seguida da condição de procura que especifica as
linhas que devem ser retornadas. As cinco condições básicas de procura são:
 Comparação: compara o valor de uma expressão com o valor de outra expressão

No SQL estão disponíveis os sequentes operadores de comparação:


= Igual > Maior que
<> Não é igual a <= Menor ou igual a
< Menor que >= Maior ou igual a

Também estão disponíveis os operadores lógicos AND, OR e NOT. As


expressões condicionais são avaliadas da esquerda para a direita, sendo que as
subexpressões entre parênteses são avaliadas primeiro; os NOTs são avaliados
primeiro, seguidos dos ANDs e por último são avaliados os ORs.

 Alcance (BETWEEN): reste se o valor de uma expressão está dentro de um intervalo


especificado de valores

21
 Definir associação (IN): testa se o valor de uma expressão é igual a um de um conjunto
de valores

O exemplo anterior também pode ser expresso da seguinte maneira:

 Correspondência de padrões (LIKE): testa se uma string corresponde a um padrão


especificado. O SQL tem dois símbolos de correspondência de padrões especiais:
Percentagem (%) que representa qualquer sequência de zero ou mais caracteres e o
Underscore (_) que representa qualquer caractere. Por exemplo:
 LIKE 'H%': significa que o primeiro caractere deve ser H, mas a restante da
string pode ser qualquer coisa
 LIKE 'H_ _ _': significa que deve haver exatamente quatro caracteres na string,
o primeiro dos quais deve ser um H
 LIKE '% e': significa qualquer sequência de caracteres, de comprimento pelo
menos 1, com o último caractere e
 LIKE '% Glasgow%' significa uma sequência de caracteres de qualquer
tamanho que contenha Glasgow.
 NOT LIKE 'H%' significa que o primeiro caracter não pode ser um H.

22
 Teste nulo: testa se uma coluna tem um valor nulo (desconhecido)

PL6: com base no esquema físico gerado na PL5, pretende-se que povoe a base de dados criada, utilize
para isso o ficheiro PovoaFE06. Utilizando SQL, desenvolva os comandos, para responder às questões:
a) Quais são os nomes dos médicos com mais de 10 anos de serviço
SELECT nome from medicos
WHERE idade (Dta_ini_servico) > 10;

b) Apresente o nome dos médicos e respetiva especialidade


SELECT nome, designacao from medicos, especialidades
WHERE medicos.id_especialidade = especialidades.id;

c) Qual é o par nome e morada dos pacientes residentes em Braga.


SELECT nome, morada from pacientes
WHERE cod_postal IN (SELECT codigo from cod_postal WHERE localidade =
'BRAGA');

d) Qual é o nome dos médicos da especialidade de Oftalmologia


SELECT nome from medicos, especialidades
WHERE id_especialidade = especialidades.id AND id_especialidade IN
(SELECT id from especialidades WHERE designacao = 'Oftalmologia');
OU
SELECT nome from medicos, especialidades
WHERE id_especialidade = especialidades.id AND especialidades.designacao
= 'Oftalmologia';

e) Qual o nome e idade dos médicos com mais de 40 anos da especialidade de Clínica Geral
SELECT nome, idade (Dta_nascimento) from medicos, especialidades
WHERE idade (Dta_nascimento) > 40 AND id_especialidade =
especialidades.id AND especialidades.designacao = 'Clínica Geral');

23
f) Qual o nome médicos de Oftalmologia que consultaram pacientes de Braga
SELECT DISTINCT nome from consultas, medicos, especialidades
WHERE consultas.id_medico = medicos.id AND medicos.id_especialidade =
especialidades.id AND especialidades.designacao = 'Oftalmologia' AND
consultas.id_paciente IN
(SELECT id_paciente from pacientes WHERE cod_postal IN
(SELECT codigo from cod_postal WHERE localidade = 'BRAGA'));

g) Qual o nome e anos de serviço dos médicos com mais de 50 anos que deram consultas de tarde a
pacientes com menos de 20 anos
SELECT DISTINCT nome, idade (Dta_ini_servico) from medicos, consultas
WHERE idade (Dta_nascimento) > 50 AND date_format (Data_Hora, '%H')>
'12' AND consultas.id_medico = medicos.id AND consultas.id_paciente IN
(SELECT id_paciente from pacientes WHERE idade (Dta_nascimento) < 20);

h) Qual o nome dos pacientes com mais de 10 anos que nunca tiveram consulta a Oftalmologia.
SELECT nome from pacientes
WHERE idade (Dta_nascimento) > 10 AND id_paciente NOT IN
(SELECT id_paciente from consultas, medicos, especialidades
WHERE consultas.id_medico = medicos.id AND
medicos.id_especialidade = especialidades.id AND
especialidades.designacao = 'Oftalmologia');
OU
SELECT nome from pacientes
WHERE idade (dta_nascimento) > 10 AND
(SELECT COUNT (*) from consultas, medicos, especialidades
WHERE consultas.id_paciente = pacientes.id_paciente
AND consultas.id_medico = medicos.id AND medicos.id_especialidade
= especialidades.id AND designacao = ‘Oftalmologia’) = 0;

i) Qual o nome das especialidades consultadas no mês de janeiro de 2016.


SELECT DISTINCT designacao from especialidades, medicos, consultas
WHERE especialidades.id = id_especialidade AND consultas.id_medico =
medicos.id AND date_format (Data_Hora, '%M, %Y') = 'January, 2016';

j) Qual é o nome dos médicos com mais de 30 anos ou menos de 5 anos de serviço.
SELECT nome from medicos
WHERE idade (Dta_nascimento) > 30 OR idade (Dta_ini_servico) < 5;

k) Qual o nome e idade dos médicos de Clínica Geral que não consultaram em janeiro de 2016.
SELECT nome, idade (Dta_nascimento) from medicos, especialidades
WHERE medicos.id NOT IN
(SELECT medicos.id from consultas
WHERE medicos.id = consultas.id_medico

24
AND date_format (Data_Hora, '%M, %Y') = 'January, 2016')
AND medicos.id_especialidade = especialidades.id
AND designacao = 'Clínica Geral';

l) Qual o nome e idade dos pacientes que já foram consultados por todos os médicos.
SELECT nome, idade (Dta_nascimento) from pacientes
WHERE NOT EXISTS
(SELECT * from medicos WHERE NOT EXISTS
(SELECT * from consultas
WHERE pacientes.id_paciente = consultas.id_paciente
AND consultas.id_medico = medicos.id));
OU
SELECT nome, idade (dta_nascimento) from pacientes
WHERE (SELECT COUNT(DISTINCT id_medico) from consultas
WHERE consultas.id_pacientes = pacientes.id_paciente) =
(SELECT COUNT(*) from medicos);
m) Qual o nome das especialidades que tiveram consultas no mês de janeiro e março de 2016.
SELECT designacao from especialidades, medicos
WHERE medicos.id IN
(SELECT DISTINCT medicos.id from consultas
WHERE medicos.id = consultas.id_medico
AND (date_format (Data_Hora, '%M, %Y') = 'January, 2016'
OR date_format (Data_Hora, '%M, %Y') = 'February, 2016'))
AND medicos.id_especialidade = especialidades.id;

n) Qual o nome dos médicos que nunca consultaram pacientes residentes em Braga.
SELECT nome from medicos
WHERE medicos.id NOT IN
(SELECT medicos.id from consultas, pacientes
WHERE consultas.id_paciente = pacientes.id_paciente
AND consultas.id_medico = medicos.id
AND pacientes.cod_postal IN
(SELECT codigo from cod_postal WHERE localidade = 'BRAGA'));

o) Qual o nome e idade dos pacientes que só foram consultados a Clínica Geral.
SELECT nome, idade (Dta_nascimento) from pacientes
WHERE EXISTS (SELECT * from consultas
WHERE consultas.id_paciente = pacientes.id_paciente
AND consultas.id_medico IN
(SELECT id from medicos
WHERE id_especialidade = (SELECT id from especialidades
WHERE designacao = 'Clínica Geral')))
AND NOT EXISTS (SELECT * from consultas
WHERE consultas.id_paciente = pacientes.id_paciente
AND consultas.id_medico IN
(SELECT id from medicos

25
WHERE id_especialidade IN (SELECT id from especialidades
WHERE designacao <> 'Clínica Geral')));
OU
SELECT nome, idade (dta_nascimento) from pacientes
WHERE (SELECT COUNT(*) from consultas
WHERE consultas.id_paciente = pacientes.id_paciente
AND consultas.id_medico IN
(SELECT id from medicos WHERE id_especialidade = (SELECT id
from especialidades WHERE designacao = 'Clínica Geral')))>0
AND (SELECT COUNT(*) from consultas
WHERE consultas.id_paciente = pacientes.id_paciente
AND consultas.id_medico IN
(SELECT id from medicos WHERE id_especialidade IN
(SELECT id from especialidades
WHERE designacao <> 'Clínica Geral'))) = 0;

4.3.2 ORDER BY
Em geral, as linhas de uma tabela de resultados de SQL não estão dispostas em nenhuma
ordem específica. No entanto, podemos garantir que os resultados sejam ordenados usando a cláusula
ORDER BY na instrução SELECT. A cláusula ORDER BY sempre deve ser a última cláusula da instrução
SELECT.
A cláusula ORDER BY permite que as linhas sejam ordenadas em ordem ascendente (ASC) ou
descendente (DESC) em qualquer coluna ou combinação de colunas, independentemente de essa coluna
aparecer no resultado.

Por ordem ascendente


alfabética

4.3.3 GROUP BY
Faz o agrupamento dos resultados
209

4.7 HAVING

26
4.7 Funções de Agregação
A norma ISO define cinco funções agregadas:
 COUNT - retorna o número de valores da coluna especificada
 COUNT (*): conta o número de valores da coluna, incluindo nulos
 COUNT (nome): conta o número de valores não-nulos da coluna nome
 COUNT (DISTINCT nome): conta o número de valores não-nulos diferentes da
coluna nome
 SUM - retorna a soma dos valores da coluna especificada
 AVG - retorna a média dos valores da coluna especificada
 MIN - retorna o menor valor da coluna especificada
 MAX - retorna o maior valor da coluna especificada

4.8 EXISTS
EXISTS e NOT EXISTS são projetadas para uso somente com subqueries. Eles produzem um
resultado simples true / false. EXISTS é true se e somente se existir pelo menos uma linha na tabela de
resultados retornada pela subquery; é false se a subquery retorna uma tabela de resultado vazia. NOT
EXISTS é o oposto de EXISTS.

27
28

Você também pode gostar