SlideShare ist ein Scribd-Unternehmen logo
1 von 82
Módulo 14
Linguagem de Manipulação de Dados
Apresentação
• Este módulo pretende introduzir uma linguagem standard de
manipulação de dados em sistema de gestão de bases de dados.
• Esta linguagem permite a pesquisa, a inserção, a alteração e a
remoção de registos numa base de dados.
• Neste módulo, os alunos são confrontados com a necessidade de
aceder a uma base de dados e retirar de lá a informação necessária
ao funcionamento do sistema de informação.
Objetivos de Aprendizagem
• No final deste módulo os alunos devem ter adquirido conhecimentos,
procedimentos e atitudes que lhe permitam:
• Utilizar uma linguagem de manipulação de dados.
• Pesquisar informação numa base de dados, inserir, apagar e atualizar dados
numa base de dados.
• Produzir pesquisas complexas recorrendo aos mecanismos próprios do SQL.
Âmbito dos Conteúdos
• SQL como linguagem “universal” para pesquisas sobre bases de dados.
• Apresentação da linguagem SQL.
• Pesquisas (“queries”) simples sobre a base de dados (estrutura básica do
comando SELECT).
• Predicados ALL e DISTINCT 5.
Âmbito dos Conteúdos
• Pesquisas complexas. Agregação de dados com a instrução SELECT
• Lógica e funções de grupo
• JOIN como forma de extrair informação de tabelas diferentes com base em
critérios de comparação de valores em colunas comuns (INNER JOIN, LEFT
JOIN e RIGHT JOIN)
• Utilização de sub pesquisas (ou pesquisas encadeadas)
• Uniões
Bibliografia / Outros Recursos
• CARRIÇO, Rui Carriço, Desenho de bases de dados e linguagem SQL em Access, Lisboa: C.T.I, 2002. DAMAS,
Luis,
• SQL – Structed Query Language, Lisboa: FCA,2003. PEREIRA, José Luis
• Tecnologia de bases de dados, FCA,sd. WAZLAWICK, Raul,
• Análise e Projecto de Sistemas de Informação Orientados a Objectos. Lisboa: Editora Campus, 2004.
• Computador Internet Retroprojetor / Projetor Multimédia Manuais Escolares
• Links importantes:
• http://sqlzoo.net/wiki/SELECT_basics
• http://sourceforge.net/projects/xampp/
• http://dev.mysql.com/doc/refman/5.7/en
• http://www.w3schools.com/sql/default.asp
• http://Lanapt.com
SQL como linguagem “universal” para
pesquisas sobre bases de dados.
• A SQL (Structured Query Language) é uma linguagem de interrogação
para o sistema relacional. Sendo que, embora possua características
que permitam criar, alterar e remover todos os componentes de uma
base de dados, como tabelas, consultas, chaves, etc., será
apresentada como linguagem de manipulação de dados.
• A SQL que será apresentada, baseia-se na estrutura de
funcionamento do MySql em plataforma Windows. Poderão aparecer
algumas diferenças na sintaxe para SGBD distintos: Access MS
(Microsoft), o Sql AnyWhere (Sybase) e o Oracle (Oracle).
Estrutura básica de expressão de SQL
Select - Sintaxe
Conceptual:
SELECT (projeção da álgebra relacional)
FROM (lista das relações)
WHERE (predicado da seleção)
Estrutural:
SELECT a1, a2, a3, ...an (campos pretendidos)
FROM r1, r2, r3, ...rn (tabelas dos campos pretendidos)
WHERE p (condições a serem satisfeitas)
Sendo que a cláusula WHERE é opcional.
Ver mais em: MySql 5.7 en/select
Select - Aplicações
Como exemplo temos a tabela: tbl_codigospostais
O mais simples:
Select * from tbl_codigospostais;
Ou
Select codigo, local from tbl_codigospostais;
Ou
Select tbl_codigospostais.codigo, tbl_codigospostais.local from tbl_codigospostais;
Ou
Select tbl_codigospostais.* from tbl_codigospostais;
Ou
Select cp.codigo, cp.local from tbl_codigospostais AS cp;
https://www.sqlteaching.com
http://sqlzoo.net/wiki/SELECT_basics
codigo local
1000 LISBOA
1100 LISBOA
1500 LISBOA
2000 SANTARÉM
2040 RIO MAIOR
2300 TOMAR
4000 PORTO
Select - Aplicações
Como exemplo temos a tabela: tbl_codigospostais, tbl_clientes
O mais simples:
Select * from tbl_codigospostais, tbl_clientes;
Ou
Select codigo, local, codcliente, nome, codigoc from tbl_codigospostais, tbl_clientes;
Ou
Select tbl_codigospostais.codigo, tbl_codigospostais.local, tbl_clientes.codcliente, tbl_clientes.nome, tbl_clientes.codigoc
from tbl_codigospostais, tbl_clientes;
Ou
Select tbl_codigospostais.*, tbl_clientes.* from tbl_codigospostais, tbl_clientes;
Ou
Select cp.codigo, cp.local, cl.codcliente, cl.nome, cl.codigoc from tbl_codigospostais AS cp, tbl_clientes as cl;
codigo local
1000 LISBOA
1100 LISBOA
1500 LISBOA
2000 SANTARÉM
2040 RIO MAIOR
2300 TOMAR
4000 PORTO
codcliente nome codigoc
1 Ana 1100
2 Maria 4000
3 José 1500
4 André 1100
5 Luis 2040
6 Mário 2300
7 Vitor 4000
Cláusula WHERE (Restrição)
Operador Descrição Exemplo Resultado
= Igual a 7=5 Falso
> Maior que 7>5 Verdadeiro
< Menor que 7<5 Falso
>= Maior ou Igual que 7>=5 Verdadeiro
<= Menor ou Igual que 7<=5 Falso
<> ou != Diferente 7<>5 Verdadeiro
A operação de restrição permite restringir o número de linhas a apresentar, que satisfaçam a condição pretendida.
No entanto, para efetuar as restrições, é necessária a utilização de operadores:
Operadores Relacionais
Operadores Lógicos
Outros Operadores
BETWEEN – permite especificar intervalos de valores.
IN – permite especificar conjuntos de valores.
IS – permite efetuar o tratamento de nulos (NULL) – strings vazias.
LIKE – permite resolver alguns problemas naturais que existem quando se pretende comparar strings.
Operador Exemplo
AND condição ou atributo AND condição ou atributo
OR condição ou atributo OR condição ou atributo
NOT NOT condição
Select - Aplicações
Como exemplo temos a tabela: tbl_codigospostais
O mais simples:
Select * from tbl_codigospostais where codigo=1000;
Ou
Select codigo, local from tbl_codigospostais where codigo=1000;
Ou
Select tbl_codigospostais.codigo, tbl_codigospostais.local from tbl_codigospostais where tbl_codigospostais.codigo=1000;
Ou
Select tbl_codigospostais.* from tbl_codigospostais where tbl_codigospostais.codigo=1000;
Ou
Select cp.codigo, cp.local from tbl_codigospostais AS cp where cp.codigo=1000;
codigo local
1000 LISBOA
1100 LISBOA
1500 LISBOA
2000 SANTARÉM
2040 RIO MAIOR
2300 TOMAR
4000 PORTO
codigo local
1000 LISBOA
=
SELECT *
FROM tbl_codigospostais
WHERE local = LISBOA;
codigo local
1000 LISBOA
1100 LISBOA
1500 LISBOA
2000 SANTARÉM
2040 RIO MAIOR
2300 TOMAR
4000 PORTO
codigo local
1000 LISBOA
1100 LISBOA
1500 LISBOA
>
SELECT *
FROM tbl_codigospostais
WHERE codigo > 1100;
codigo local
1000 LISBOA
1100 LISBOA
1500 LISBOA
2000 SANTARÉM
2040 RIO MAIOR
2300 TOMAR
4000 PORTO
codigo local
1500 LISBOA
2000 SANTARÉM
2040 RIO MAIOR
2300 TOMAR
4000 PORTO
<
SELECT *
FROM tbl_codigospostais
WHERE codigo < 1100;
codigo local
1000 LISBOA
1100 LISBOA
1500 LISBOA
2000 SANTARÉM
2040 RIO MAIOR
2300 TOMAR
4000 PORTO
codigo local
1000 LISBOA
<=
SELECT *
FROM tbl_codigospostais
WHERE codigo <= 1100;
codigo local
1000 LISBOA
1100 LISBOA
1500 LISBOA
2000 SANTARÉM
2040 RIO MAIOR
2300 TOMAR
4000 PORTO
codigo local
1000 LISBOA
1100 LISBOA
!=
SELECT *
FROM tbl_codigospostais
WHERE codigo != 1100;
codigo local
1000 LISBOA
1100 LISBOA
1500 LISBOA
2000 SANTARÉM
2040 RIO MAIOR
2300 TOMAR
4000 PORTOcodigo local
1000 LISBOA
1500 LISBOA
2000 SANTARÉM
2040 RIO MAIOR
2300 TOMAR
4000 PORTO
AND
SELECT *
FROM tbl_codigospostais
WHERE (codigo > 1100 AND codigo != 2000);
codigo local
1000 LISBOA
1100 LISBOA
1500 LISBOA
2000 SANTARÉM
2040 RIO MAIOR
2300 TOMAR
4000 PORTO
codigo local
1500 LISBOA
2040 RIO MAIOR
2300 TOMAR
4000 PORTO
AND
SELECT *
FROM tbl_codigospostais
WHERE (codigo < 1100 AND codigo > 1500); ?
codigo local
1000 LISBOA
1100 LISBOA
1500 LISBOA
2000 SANTARÉM
2040 RIO MAIOR
2300 TOMAR
4000 PORTO
OR
SELECT *
FROM tbl_codigospostais
WHERE (codigo < 1100 OR codigo > 1500);
codigo local
1000 LISBOA
1100 LISBOA
1500 LISBOA
2000 SANTARÉM
2040 RIO MAIOR
2300 TOMAR
4000 PORTO
codigo local
1000 LISBOA
2000 SANTARÉM
2040 RIO MAIOR
2300 TOMAR
4000 PORTO
OR
SELECT *
FROM tbl_codigospostais
WHERE (codigo < 1100 OR codigo > 1500);
codigo local
1000 LISBOA
1100 LISBOA
1500 LISBOA
2000 SANTARÉM
2040 RIO MAIOR
2300 TOMAR
4000 PORTO
codigo local
1000 LISBOA
2000 SANTARÉM
2040 RIO MAIOR
2300 TOMAR
4000 PORTO
NOT
SELECT *
FROM tbl_codigospostais
WHERE NOT (codigo < 1100 OR codigo > 1500);
codigo local
1000 LISBOA
1100 LISBOA
1500 LISBOA
2000 SANTARÉM
2040 RIO MAIOR
2300 TOMAR
4000 PORTO
codigo local
1100 LISBOA
1500 LISBOA
NOT/IS
SELECT *
FROM tbl_codigospostais
WHERE IS NOT NULL;
SELECT *
FROM tbl_codigospostais
WHERE IS NULL;
codigo local
1000 LISBOA
1100 LISBOA
1500 LISBOA
2000 SANTARÉM
2040 RIO MAIOR
2300 TOMAR
4000 PORTO
codigo local
1000 LISBOA
1100 LISBOA
1500 LISBOA
2000 SANTARÉM
2040 RIO MAIOR
2300 TOMAR
4000 PORTO
codigo local
NOT
SELECT *
FROM tbl_codigospostais
WHERE NOT (codigo < 1100 OR codigo > 1500);
codigo local
1000 LISBOA
1100 LISBOA
1500 LISBOA
2000 SANTARÉM
2040 RIO MAIOR
2300 TOMAR
4000 PORTO
codigo local
1100 LISBOA
1500 LISBOA
LIKE
• Comparação entre um valor e uma cadeia de valores (dados).
• É case sensitive.
• % todos os carateres de qualquer comprimento
• _ todos os carateres de 1 comprimento.
SELECT *
FROM tbl_codigospostais
WHERE local like ‘L%’;
codigo local
1000 LISBOA
1100 LISBOA
1500 LISBOA
2000 SANTARÉM
2040 RIO MAIOR
2300 TOMAR
4000 PORTO
codigo local
1000 LISBOA
1100 LISBOA
1500 LISBOA
LIKE
SELECT *
FROM tbl_codigospostais
WHERE local like ‘_i%’; ?
codigo local
1000 LISBOA
1100 LISBOA
1500 LISBOA
2000 SANTARÉM
2040 RIO MAIOR
2300 TOMAR
4000 PORTO
LIKE
SELECT *
FROM tbl_codigospostais
WHERE local like ‘_I%’;
codigo local
1000 LISBOA
1100 LISBOA
1500 LISBOA
2000 SANTARÉM
2040 RIO MAIOR
2300 TOMAR
4000 PORTO
codigo local
1000 LISBOA
1100 LISBOA
1500 LISBOA
2040 RIO MAIOR
IN
• Especifica a condição para um determinado grupo de valores.
• Select * from tbl_codigospostais
• Where local IN (‘LISBOA’, ‘PORTO’);
codigo local
1000 LISBOA
1100 LISBOA
1500 LISBOA
2000 SANTARÉM
2040 RIO MAIOR
2300 TOMAR
4000 PORTO
codigo local
1000 LISBOA
1100 LISBOA
1500 LISBOA
4000 PORTO
BETWEEN
• Especifica a condição para um intervalo. Útil em datas e valores.
• Select * from tbl_codigopostal
• Where codigo BETWEEN 1100 AND 2100;
codigo local
1000 LISBOA
1100 LISBOA
1500 LISBOA
2000 SANTARÉM
2040 RIO MAIOR
2300 TOMAR
4000 PORTO
codigo local
1100 LISBOA
1500 LISBOA
2000 SANTARÉM
2040 RIO MAIOR
DISTINCT
• Mostra os resultados sem repetir os registos iguais.
• Select DISTINCT * from tbl_codigospostais.
codigo local
1000 LISBOA
1100 LISBOA
1500 LISBOA
2000 SANTARÉM
2040 RIO MAIOR
2300 TOMAR
4000 PORTO
codigo local
1000 LISBOA
1100 LISBOA
1500 LISBOA
2000 SANTARÉM
2040 RIO MAIOR
2300 TOMAR
4000 PORTO
ORDER BY
A ordenação pode ser realizada através da cláusula ORDER BY no comando SELECT. Esta cláusula, se existir,
aparece sempre posicionada no final do comando SELECT.
SELECT campo1, campo2, ... campon
FROM tabela 1 , tabela 2, .... tabela n
[WHERE Condição ]
[GROUP BY ............]
[HAVING ………]
[ORDER BY Campo [ASC | DESC], Campo [ASC | DESC]…]
• Onde Campo representa o nome de um Campo, uma Expressão ou a Posição pela qual se pretende ordenar
o resultado do SELECT.
• ASC indica que a ordenação é ASCendente e DESC indica que a ordenação é DESCendente.
• Por defeito, ou seja, caso não seja indicado um tipo de ordenação, esta é efectuada por ordem ascendente.
ORDER BY
SELECT *
FROM tbl_codigospostais
WHERE (codigo < 1100 OR codigo > 1500)
ORDER BY codigo ASC;
codigo local
1000 LISBOA
1100 LISBOA
1500 LISBOA
2000 SANTARÉM
2040 RIO MAIOR
2300 TOMAR
4000 PORTO
codigo local
1000 LISBOA
2000 SANTARÉM
2040 RIO MAIOR
2300 TOMAR
4000 PORTO
ORDER BY
SELECT *
FROM tbl_codigospostais
ORDER BY codigo ASC, local DESC;
codigo local
1000 LISBOA
1100 LISBOA
1500 LISBOA
2000 SANTARÉM
2040 RIO MAIOR
2300 TOMAR
4000 PORTO
Seleção de Expressões
SELECT codigo, local, codigo + 1000
FROM tbl_codigospostais
where código <2000;
codigo local
1000 LISBOA
1100 LISBOA
1500 LISBOA
2000 SANTARÉM
2040 RIO MAIOR
2300 TOMAR
4000 PORTO
codigo local Expr1
1000 LISBOA 2000
1100 LISBOA 2100
1500 LISBOA 2500
Sumario 139-140 (187) +3h
• Módulo 14 – Linguagem de manipulação de dados
• Comando insert – seleção de expressões. Utilização de funções (linha
e grupo).
Seleção de Expressões
SELECT codigo, local, codigo + 1000 AS ‘Novo Codigo’
FROM tbl_codigospostais
where código <2000;
codigo local
1000 LISBOA
1100 LISBOA
1500 LISBOA
2000 SANTARÉM
2040 RIO MAIOR
2300 TOMAR
4000 PORTO
codigo local Novo Código
1000 LISBOA 2000
1100 LISBOA 2100
1500 LISBOA 2500
Funções
• Def. Permitem aplicar formulas na query para atingir e formatar
resultados.
• Estas podem ser funções de linha e funções de grupo.
Um função de linha devolve um resultado por linha da tabela acedida.
Já uma função de grupo retorna um resultado por grupo de registros.
Funções de Linha
• Exemplos de Funções de Linha:
- LCASE ("UFF") » uff
- UPPER ("uff") » UFF
- INITCAP (“escola secundária Dom") » Escola Secundária Dom (ORACLE)
- CONCAT ("String1", "String2") » String1String2
- SUBSTR ("String", 1, 3) » Str
- LENGTH ("UFF") » 3
- IFNULL (SAL, 0) » Se SAL for NULO seu valor será convertido para zero.
- ROUND (78.731, 2) » 78.73 (Até 4 p/ baixo, Acima de 4 p/ cima)
- ROUND (78.731, 0) » 79
- TRUNC (78.731, 2) » 78.73
- TRUNC (78.731) » 78
- MOD (100, 30) » 10
•MID() - Extract characters from a text field
•LEN() - Returns the length of a text field
•NOW() - Returns the current system date and time
•FORMAT() - Formats how a field is to be displayed
Funções de Grupo
• Funções de Grupo Existentes:
• AVG() - Média
• COUNT() – Total de registos
• FIRST() – Mostra o primeiro valor
• LAST() – Mostra o ultimo valor
• MAX() – O máximo (Maior)
• MIN() – O Mínimo (valor mais pequeno)
• SUM() – Soma dos resultados
• VARIANCE(), STDDEV e STDEVP () (Estatísticas)
Insert Into
• Sintaxe:
INSERT INTO TABLE_NAME (column1, column2, column3,...columnN)]
VALUES (value1, value2, value3,...valueN);
Não é preciso especificar os campos desde que:
INSERT INTO TABLE_NAME VALUES (value1,value2,value3,...valueN);
INSERT INTO
• Inserir registos nas tabelas.
• INSERT INTO tbl_codigospostais (codigo, local)
• values (2900, ‘Setúbal’);
• INSERT INTO tbl_codigospostais (codigo, local)
• values (5900, ‘Viana do Castelo’);
Update
• Sintaxe:
UPDATE table_name
SET column1 = value1, column2 = value2...., columnN = valueN
WHERE [condition];
(na condição pode-se combiner and e or)
UPDATE
UPDATE from tbl_codigopostal set local= ‘PORTO’
where codigo=2000;
codigo local
1000 LISBOA
1100 LISBOA
1500 LISBOA
2000 SANTARÉM
2040 RIO MAIOR
2300 TOMAR
4000 PORTO
codigo local
1000 LISBOA
1100 LISBOA
1500 LISBOA
2000 PORTO
2040 RIO MAIOR
2300 TOMAR
4000 PORTO
DELETE
• Sintaxe:
DELETE FROM table_name
WHERE [condition];
(na condição pode-se usar o AND e OR).
Cuidado ao realizar o: Delete From table;
DELETE - Exemplos
Delete from tbl_codigopostal
where local=‘PORTO’;
codigo local
1000 LISBOA
1100 LISBOA
1500 LISBOA
2040 RIO MAIOR
2300 TOMAR
codigo local
1000 LISBOA
1100 LISBOA
1500 LISBOA
2000 PORTO
2040 RIO MAIOR
2300 TOMAR
4000 PORTO
Juntando várias tabelas
• O Modelo Relacional estabelece claramente as regras para a divisão
da informação entre tabelas, de forma a evitar a duplicação da
informação.
• Esta dispersão da informação por diferentes tabelas é facilmente
manipulável através da linguagem SQL, um vez que a ligação entre
estas será realizada através das chaves estrangeiras.
• A junção entre tabelas faz-se colocando na cláusula FROM o conjunto
de tabelas que se pretende juntar.
SELECT campo1, campo2, ... Campo n
FROM tabela 1 , tabela 2, .... tabela n
Produto Cartesiano de Tabelas
Id Nome Idade Telefone Cod_postal Código Local
71 António Dias 43 789654 1000 1000 Lisboa
54 Célia Morais 36 123456 1000 2000 Santarém
12 Isabel Silva 28 2040 2040 Rio Maior
49 José António 17 333555 2000 4000 Porto
Consideremos as seguintes relações (Pessoa e Postal):
SELECT *
FROM Pessoa, Postal
Obtém-se um resultado bastante inesperado e que consiste no produto cartesiano de dois conjuntos de
elementos.
O produto cartesiano entre as tabelas Pessoa e Postal associa a cada linha da tabela Pessoa o conjunto das
linhas da tabela Postal.
Produto Cartesiano de Tabelas
Id Nome Idade Telefone Cod_postal Código Local
71 António Dias 43 789654 1000 1000 Lisboa
71 António Dias 43 789654 1000 2000 Santarém
71 António Dias 43 789654 1000 2040 Rio Maior
71 António Dias 43 789654 1000 4000 Porto
54 Célia Morais 36 123456 1000 1000 Lisboa
54 Célia Morais 36 123456 1000 2000 Santarém
54 Célia Morais 36 123456 1000 2040 Rio Maior
54 Célia Morais 36 123456 1000 4000 Porto
12 Isabel Silva 28 2040 1000 Lisboa
12 Isabel Silva 28 2040 2000 Santarém
12 Isabel Silva 28 2040 2040 Rio Maior
12 Isabel Silva 28 2040 4000 Porto
49 José António 17 333555 2000 1000 Lisboa
49 José António 17 333555 2000 2000 Santarém
49 José António 17 333555 2000 2040 Rio Maior
49 José António 17 333555 2000 4000 Porto
Dado que na tabela Pessoa existem 4
registos e na tabela Postal existem 4
registos, o resultado do produto cartesiano
será 4*4 = 16 registos.
Produto Cartesiano de Tabelas
Id Nome Idade Telefone Cod_postal Código Local
71 António Dias 43 789654 1000 1000 Lisboa
71 António Dias 43 789654 1000 2000 Santarém
71 António Dias 43 789654 1000 2040 Rio Maior
71 António Dias 43 789654 1000 4000 Porto
54 Célia Morais 36 123456 1000 1000 Lisboa
54 Célia Morais 36 123456 1000 2000 Santarém
54 Célia Morais 36 123456 1000 2040 Rio Maior
54 Célia Morais 36 123456 1000 4000 Porto
12 Isabel Silva 28 2040 1000 Lisboa
12 Isabel Silva 28 2040 2000 Santarém
12 Isabel Silva 28 2040 2040 Rio Maior
12 Isabel Silva 28 2040 4000 Porto
49 José António 17 333555 2000 1000 Lisboa
49 José António 17 333555 2000 2000 Santarém
49 José António 17 333555 2000 2040 Rio Maior
49 José António 17 333555 2000 4000 Porto
O pretendido seria a junção entre as tabelas
Pessoa e Postal. Para tal é necessário, na
cláusula WHERE, indicar as chaves
estrangeiras de ligação.
Produto Cartesiano de Tabelas
Id Nome Idade Telefone Cod_postal Código Local
71 António Dias 43 789654 1000 1000 Lisboa
54 Célia Morais 36 123456 1000 1000 Lisboa
12 Isabel Silva 28 2040 2040 Rio Maior
49 José António 17 333555 2000 2000 Santarém
SELECT *
FROM Pessoa, Postal
WHERE Cod_postal = Código
Equi-Join
• Acontece quando todas as colunas das tabelas são apresentadas e a
ligação entre as tabelas é feita através de uma igualdade, dando
origem assim a duas colunas de conteúdos exatamente iguais.
SELECT *
FROM Pessoa, Postal
WHERE Cod_postal = Código
Id Nome Idade Telefone Cod_postal Código Local
71 António Dias 43 789654 1000 1000 Lisboa
54 Célia Morais 36 123456 1000 1000 Lisboa
12 Isabel Silva 28 2040 2040 Rio Maior
49 José António 17 333555 2000 2000 Santarém
Natural Join
• Acontece quando todas as colunas envolvidas na ligação entre tabelas
são apresentadas sem repetição de colunas.
SELECT Pessoa.*, Postal.Local
FROM Pessoa, Postal
WHERE Cod_postal = Código
Id Nome Idade Telefone Cod_postal Local
71 António Dias 43 789654 1000 Lisboa
54 Célia Morais 36 123456 1000 Lisboa
12 Isabel Silva 28 2040 Rio Maior
49 José António 17 333555 2000 Santarém
INNER JOIN
• Estes dois tipos de ligação entre tabelas fazem parte de um tipo de
ligação mais geral denominada INNER JOIN.
• Num INNER JOIN, apenas são apresentados os registos em que exista
ligação entre as tabelas.
http://www.codeproject.com/Articles/33052/Visual-Representation-of-
SQL-Joins
INNER JOIN
• Embora existam diversos tipos de ligação entre tabelas (JOIN), este é
o tipo mais comum e utilizado.
• Pretende-se selecionar o nome e morada completa (código e
localidade) de todas as pessoas da tabela Pessoa.
SELECT Nome, Cod_postal, Local
FROM Pessoa, Postal
Where Cod_postal = Código
Nome Cod_postal Local
António Dias 1000 Lisboa
Célia Morais 1000 Lisboa
Isabel Silva 2040 Rio Maior
José António 2000 Santarém
INNER JOIN
• Embora ainda de uso pouco comum, é possível, em alguns sistemas,
escrever o mesmo SELECT num formato em que se especifique a
natureza do Join (INNER), no mesmo exemplo mas ordenando o
resultado por Código Postal.
SELECT Nome, Cod_postal, Local
FROM Pessoa INNER JOIN Postal
ON Pessoa.Cod_postal = Postal.Código
ORDER BY Pessoa.Cod_postal
Nome Cod_postal Local
António Dias 1000 Lisboa
Célia Morais 1000 Lisboa
José António 2000 Santarém
Isabel Silva 2040 Rio Maior
OUTER JOIN - LEFT
• O conceito do Outer Join é obter numa ligação a totalidade das linhas de uma tabela,
ainda que não exista o correspondente valor na outra tabela a que esta está ligada pela
junção.
• Pretende-se selecionar o nome e morada completa (código e localidade) de todas as
pessoas da tabela Pessoa, assim como todos os código postais existentes na tabela
Postal.
SELECT Nome, Cod_postal, Código, Local
FROM Postal LEFT JOIN Pessoa
ON Postal.Código = Pessoa.Cod_postal
• Todas as linhas da tabela Postal são apresentadas. Se existir correspondente na coluna
Cod_postal da tabela Pessoa, são mostrados os dados, senão as entradas da tabela
Pessoa são preenchidas a NULL.
Nome Cod_postal Código Local
António Dias 1000 1000 Lisboa
Célia Morais 1000 1000 Lisboa
1100 Lisboa
José António 2000 2000 Santarém
Isabel Silva 2040 2040 Rio Maior
2300 Tomar
4000 Porto
OUTER JOIN
• Quando o Outer Join é efectuado à direita, são considerados todos os
registos da tabela da direita e apenas os registos correspondentes na
tabela da esquerda.
• Pretende-se selecionar todas as pessoas da tabela pessoa, assim
como os correspondentes valores de comissão.
Id Nome Idade Id Id_msg Valor
71 António Dias 43 49 10 1250
12 Isabel Silva 28 49 70 750
49 José António 17 71 12 100
85 João Silva 49 71 15 200
OUTER JOIN
• Pretende-se selecionar todas as pessoas da tabela pessoa, assim
como os correspondentes valores de comissão.
SELECT Nome, Valor
FROM Comissão RIGHT JOIN Pessoa
ON Comissão.Id = Pessoa.Id
• Saber todas as pessoas e quais as correspondências na comissão
mesmo que não tenham valor.
Id Nome Idade Id Id_msg Valor
71 António Dias 43 49 10 1250
12 Isabel Silva 28 49 70 750
49 José António 17 71 12 100
85 João Silva 49 71 15 200
Nome Valor
António Dias 100
António Dias 200
Isabel Silva
José António 1250
José António 750
João Silva
SELF JOIN
• O Self Join é uma variante do Inner Join, em que se comparam duas colunas
da mesma tabela.
•
• Pretende-se saber quais os tipos de códigos postais existentes diferentes do
local LISBOA.
SELECT p1.Código, p2.Local
FROM Postal.p1, Postal.p2
WHERE p1.Código = p2.Código
AND
p2.Local <> “Lisboa”
UNION
SELECT Id_msg, Mensagem FROM Mensagem
UNION
SELECT Código, Local FROM PostalId_msg Mensagem
10 Comissão de vendas
30 Vendas extra
40 Refeições
1000 Lisboa
2040 Rio Maior
4000 Porto
Uma união não é propriamente uma ligação entre tabelas.
A UNION permite juntar o conteúdo de múltiplos comandos SELECT.
Pretende-se juntar o código e a descrição da tabela mensagens aos códigos
postais.
Depois de executados os comandos, os resultados obtidos serão:
Na UNION, o número de campos a selecionar em cada um dos comandos
SELECT tem de ser igual.
O nome dos campos não é relevante, mas o tipo de dados que pode ser agrupado
depende de sistema para sistema.
Funções de agregação/conjunto/grupo
Estas funções, também designadas por Funções Estatísticas, têm por objetivo obter informação sobre conjuntos de
linhas especificadas na cláusula WHERE ou sobre grupos de linhas indicadas na cláusula GROUP BY.
Função Descrição
COUNT(campo) Devolve o número de linhas.
MAX(campo) Devolve o maior valor da coluna.
MIN(campo) Devolve o menor valor da coluna.
SUM(campo) Devolve a soma de todos os valores da coluna.
AVG(campo) Devolve a média de todos os valores da coluna.
FUNÇÃO COUNT
• A função de agregação COUNT devolve o número de linhas que
resultam num SELECT.
• Pode ser utilizada de três formas distintas:
Forma Descrição
COUNT (*) Devolve o número de linhas que resulta de um SELECT.
COUNT (coluna) Devolve o número de ocorrências na coluna diferentes de NULL.
COUNT (DISTINCT coluna) Devolve o número de ocorrências (sem repetições) na coluna.
MIN e MAX
• As funções de agregação MIN e MAX permitem obter o menor e o
maior valor de uma determinada coluna.
Exemplo: Pretende-se saber qual o salário mais elevado e o salário mais baixo da
tabela Pessoa.
SELECT MAX (salário) AS [Salário mais elevado],
MIN (salário) AS [Salário mais baixo]
FROM Pessoa
Salário mais elevado Salário mais baixo
235000 86000
Exemplos práticos
• Pretende-se saber a idade da pessoa mais nova e a idade da pessoa
mais velha da tabela Pessoa.
• ?
• Qual o país com mais e com menos população?
• ?
• Nota: também “funciona” alfabeticamente.
SUM
A função SUM devolve a soma de uma determinada coluna.
Pretende-se saber o total de salários da tabela Pessoa.
SELECT SUM (salário) AS [Total de Salários]
FROM Pessoa
E quanto é 10% do total dos salários?
Id Nome Idade Salário Telefone Cod_postal
42 António Dias 43 94000 7896544 1000
5 Célia Morais 36 170000 1234565 1000
32 Florinda Simões 35 147000 4000
37 Isabel Espada 28 86000 2040
49 José António 17 210000 1000
14 Nascimento Augusto 35 220000 4561233 2300
75 Pedro Santos 42 235000 2040
Total de Salários
1162000
AVG
A função AVG devolve a média dos valores de uma determinada coluna.
• Pretende-se saber a média das idades da tabela Pessoa.
SELECT AVG (idade) AS [Média de Idades]
FROM Pessoa Média de idades
33.714285714285714
Agrupando a informação
• As funções de agregação são uma ferramenta útil quando usada para
obter informação resumida sobre o resultado de um comando
SELECT.
• No entanto, estas funções podem ser particularmente úteis no
tratamento de informação de forma agrupada, não como um todo, mas
em grupos mais pequenos.
Agrupando a informação
• Pretende-se mostrar as comissões e respetivos valores, ordenando o
resultado por Id da tabela comissão.
SELECT Id_comissão, Valor
FROM Comissão
ORDER BY Id_comissão
SELECT SUM(Valor) AS Total
FROM Comissão
Id_comissão Valor Id_comissão Valor
14 2600 37 120
14 400 37 5500
14 3750 37 14230
14 10500 37 20
25 370 40 20
25 2400 42 150
25 100 42 20
Total
40180
Agrupando a informação
• No entanto, se o objectivo fosse obter a soma das comissões por cada
Id_comissão, o resultado apresentado não seria o pretendido.
• Para resolver essas questões é necessário, antes de aplicar as funções de
agregação, possuir a informação agrupada.
SELECT campo1, campo2, ... campon
FROM tabela 1 , tabela 2, .... tabela n
[WHERE Condição ]
[GROUP BY ............]
Cláusula GROUP BY
• Esta cláusula divide o resultado de um SELECT em grupos de
resultados que irão ser tratados com as funções de agregação.
 A cláusula GROUP BY é utilizada para agrupar informação.
 Os registos são processados em grupos de características semelhantes.
 As funções de agregação podem ser utilizadas para obter informação
sobre cada um dos grupos.
Agrupando a informação
• Pretende-se mostrar as comissões e respetivos valores, ordenando o
resultado por Id da tabela comissão.
SELECT Id_comissão, Valor
FROM Comissão
ORDER BY Id_comissão
SELECT SUM(Valor) AS Total
FROM Comissão
Id_comissão Valor Id_comissão Valor
14 2600 37 120
14 400 37 5500
14 3750 37 14230
14 10500 37 20
25 370 40 20
25 2400 42 150
25 100 42 20
Total
40180
Agrupando a informação
• Pretende-se saber, para cada Id, o total de valores de comissões.
SELECT Id_comissão, SUM(Valor) AS Total
FROM Comissão
GROUP BY Id_comissão Id_comissão Total
14 17250
25 2870
37 19870
40 20
42 170
Exercícios práticos
• Pretende-se saber, para cada Id, o maior valor de comissão?
• Pretende-se saber para cada Id, o maior valor de comissão,
efectuando a ordenação descendente por maior valor de comissão?
Resposta
SELECT MAX(Valor) AS Maior, Id_comissão
FROM Comissão
GROUP BY Id_comissão
ORDER BY MAX(Valor) DESC
Maior Id_comissão
14230 37
10500 14
2400 25
150 42
20 40
• Microsoft.jet.oledb.4.0
• microsoft.ace.oledb.12.0
• Connection String
• Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:AccessFile.accdb;
Jet OLEDB:Database Password=MyDbPassword;
• Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:mydatabase.mdb;
Jet OLEDB:Database Password=MyDbPassword;
conn = new
System.Data.OleDb.OleDbConnection(@"Provider=Microsoft.ACE.OLED
B.12.0;Data Source=C:test.accdb")
•
• using (var conn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data
Source=C:BC207test.accdb"))
• using (var comm = conn.CreateCommand())
• {
• comm.CommandText = "SELECT password FROM HAHA";
• comm.CommandType = CommandType.Text;
• conn.Open();
• var returnValue = comm.ExecuteScalar();
• MessageBox.Show(returnValue.ToString());
• ExecuteScalar is typically used when your query returns a single value.
If it returns more, then the result is the first column of the first row.
An example might be SELECT @@IDENTITY AS 'Identity'.
• •ExecuteReader is used for any result set with multiple rows/columns
(e.g., SELECT col1, col2 from sometable).
• •ExecuteNonQuery is typically used for SQL statements without
results (e.g., UPDATE, INSERT, etc.).
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
//
// Create new SqlCommand object.
//
using (SqlCommand command = new SqlCommand("SELECT * FROM Dogs1", connection))
{
SqlDataReader reader = command.ExecuteReader();
while (reader.Read())
{
int weight = reader.GetInt32(0); // Weight int
string name = reader.GetString(1); // Name string
string breed = reader.GetString(2); // Breed string
Console.WriteLine("Weight = {0}, Name = {1}, Breed = {2}", weight, name, breed);
}
}
}

Weitere ähnliche Inhalte

Was ist angesagt?

Modelo Relacional, Rede e Hierárquico
Modelo Relacional, Rede e HierárquicoModelo Relacional, Rede e Hierárquico
Modelo Relacional, Rede e Hierárquico
rosimaracorsino
 

Was ist angesagt? (20)

Banco de Dados II Aula 14 - Projeto de Banco de Dados e Estudo de Caso (Postg...
Banco de Dados II Aula 14 - Projeto de Banco de Dados e Estudo de Caso (Postg...Banco de Dados II Aula 14 - Projeto de Banco de Dados e Estudo de Caso (Postg...
Banco de Dados II Aula 14 - Projeto de Banco de Dados e Estudo de Caso (Postg...
 
Banco de Dados II Aula 08 - Linguagem de Consulta SQL (Comandos DML)
Banco de Dados II Aula 08 - Linguagem de Consulta SQL (Comandos DML)Banco de Dados II Aula 08 - Linguagem de Consulta SQL (Comandos DML)
Banco de Dados II Aula 08 - Linguagem de Consulta SQL (Comandos DML)
 
Psi-mod-13
Psi-mod-13Psi-mod-13
Psi-mod-13
 
Aprendendo a Usar o Netbeans
Aprendendo a Usar o NetbeansAprendendo a Usar o Netbeans
Aprendendo a Usar o Netbeans
 
Modelação de Dados
Modelação de DadosModelação de Dados
Modelação de Dados
 
Banco de Dados I - Aula 10 - Banco de Dados Relacional (Modelo Físico)
Banco de Dados I - Aula 10 - Banco de Dados Relacional (Modelo Físico)Banco de Dados I - Aula 10 - Banco de Dados Relacional (Modelo Físico)
Banco de Dados I - Aula 10 - Banco de Dados Relacional (Modelo Físico)
 
Psi-mod-15
Psi-mod-15Psi-mod-15
Psi-mod-15
 
Banco de Dados - MySQL Basico
Banco de Dados - MySQL BasicoBanco de Dados - MySQL Basico
Banco de Dados - MySQL Basico
 
Aula10 sql-ddl
Aula10 sql-ddlAula10 sql-ddl
Aula10 sql-ddl
 
Banco de Dados (parte 01)
Banco de Dados (parte 01)Banco de Dados (parte 01)
Banco de Dados (parte 01)
 
Banco de Dados I - Aula 03 - Conceitos de Sistemas de Banco de Dados
Banco de Dados I - Aula 03 - Conceitos de Sistemas de Banco de DadosBanco de Dados I - Aula 03 - Conceitos de Sistemas de Banco de Dados
Banco de Dados I - Aula 03 - Conceitos de Sistemas de Banco de Dados
 
Estrutura de Dados - Aula 02 - Estrutura de Dados e TAD
Estrutura de Dados - Aula 02 - Estrutura de Dados e TADEstrutura de Dados - Aula 02 - Estrutura de Dados e TAD
Estrutura de Dados - Aula 02 - Estrutura de Dados e TAD
 
Banco de Dados I - Aula 11 - Linguagem de Consulta SQL (Comandos DDL)
Banco de Dados I - Aula 11 - Linguagem de Consulta SQL (Comandos DDL)Banco de Dados I - Aula 11 - Linguagem de Consulta SQL (Comandos DDL)
Banco de Dados I - Aula 11 - Linguagem de Consulta SQL (Comandos DDL)
 
Estrutura de Dados - Aula 02 - Estrutura de Dados e TAD
Estrutura de Dados - Aula 02 - Estrutura de Dados e TADEstrutura de Dados - Aula 02 - Estrutura de Dados e TAD
Estrutura de Dados - Aula 02 - Estrutura de Dados e TAD
 
Estrutura de Dados - Aula 02
Estrutura de Dados - Aula 02Estrutura de Dados - Aula 02
Estrutura de Dados - Aula 02
 
Banco de Dados I Aula 02 - Introdução aos Bancos de Dados
Banco de Dados I  Aula 02 - Introdução aos Bancos de DadosBanco de Dados I  Aula 02 - Introdução aos Bancos de Dados
Banco de Dados I Aula 02 - Introdução aos Bancos de Dados
 
Aula 2 - POO: Fundamentos da linguagem Java
Aula 2 - POO: Fundamentos da linguagem JavaAula 2 - POO: Fundamentos da linguagem Java
Aula 2 - POO: Fundamentos da linguagem Java
 
Modelo Relacional, Rede e Hierárquico
Modelo Relacional, Rede e HierárquicoModelo Relacional, Rede e Hierárquico
Modelo Relacional, Rede e Hierárquico
 
Aula 02 - Principios da Orientação a Objetos (POO)
Aula 02 - Principios da Orientação a Objetos (POO)Aula 02 - Principios da Orientação a Objetos (POO)
Aula 02 - Principios da Orientação a Objetos (POO)
 
Linguagem SQL
Linguagem SQLLinguagem SQL
Linguagem SQL
 

Andere mochten auch

Linguagens de programação 12º M11
Linguagens de programação 12º M11Linguagens de programação 12º M11
Linguagens de programação 12º M11
Luis Ferreira
 
Configuração de dispositivos de io
Configuração de dispositivos de ioConfiguração de dispositivos de io
Configuração de dispositivos de io
Luis Ferreira
 
Projecto de investigação simplificado susana a.
Projecto de investigação simplificado   susana a.Projecto de investigação simplificado   susana a.
Projecto de investigação simplificado susana a.
Susana Alentejano
 
Projecto dissertação - plano de investigação
Projecto dissertação - plano de investigaçãoProjecto dissertação - plano de investigação
Projecto dissertação - plano de investigação
Luis Pedro
 
Linguagens de programação 12º M12
Linguagens de programação 12º M12Linguagens de programação 12º M12
Linguagens de programação 12º M12
Luis Ferreira
 
Redes de Comunicação 11º M11 - TGPSI
Redes de Comunicação 11º M11 - TGPSIRedes de Comunicação 11º M11 - TGPSI
Redes de Comunicação 11º M11 - TGPSI
Luis Ferreira
 
歡迎來到妖精們的根據地
歡迎來到妖精們的根據地歡迎來到妖精們的根據地
歡迎來到妖精們的根據地
coporo
 
Презентация проекта Аргус-М
Презентация проекта Аргус-МПрезентация проекта Аргус-М
Презентация проекта Аргус-М
kulibin
 

Andere mochten auch (20)

Projeto de Investigação do Curso de Doutoramento
Projeto de Investigação do Curso de DoutoramentoProjeto de Investigação do Curso de Doutoramento
Projeto de Investigação do Curso de Doutoramento
 
ticEduca2016
ticEduca2016ticEduca2016
ticEduca2016
 
Linguagens de programação 12º M11
Linguagens de programação 12º M11Linguagens de programação 12º M11
Linguagens de programação 12º M11
 
Configuração de dispositivos de io
Configuração de dispositivos de ioConfiguração de dispositivos de io
Configuração de dispositivos de io
 
Sessão 2 app
Sessão 2 appSessão 2 app
Sessão 2 app
 
Módulo 9 - Introdução à Programação Orientada a Objectos
Módulo 9 - Introdução à Programação Orientada a Objectos Módulo 9 - Introdução à Programação Orientada a Objectos
Módulo 9 - Introdução à Programação Orientada a Objectos
 
Unidade 2 - Processador de texto (Aula 1 e 2)
Unidade 2 - Processador de texto (Aula 1 e 2)Unidade 2 - Processador de texto (Aula 1 e 2)
Unidade 2 - Processador de texto (Aula 1 e 2)
 
Projecto de investigação simplificado susana a.
Projecto de investigação simplificado   susana a.Projecto de investigação simplificado   susana a.
Projecto de investigação simplificado susana a.
 
Comunicação de dados - Módulo 1
Comunicação de dados - Módulo 1Comunicação de dados - Módulo 1
Comunicação de dados - Módulo 1
 
Projecto dissertação - plano de investigação
Projecto dissertação - plano de investigaçãoProjecto dissertação - plano de investigação
Projecto dissertação - plano de investigação
 
Linguagens de programação 12º M12
Linguagens de programação 12º M12Linguagens de programação 12º M12
Linguagens de programação 12º M12
 
Plano de Comunicação e Gestão Educacional (Pré-Projeto)
Plano de Comunicação e Gestão Educacional (Pré-Projeto)Plano de Comunicação e Gestão Educacional (Pré-Projeto)
Plano de Comunicação e Gestão Educacional (Pré-Projeto)
 
Redes de Comunicação 11º M11 - TGPSI
Redes de Comunicação 11º M11 - TGPSIRedes de Comunicação 11º M11 - TGPSI
Redes de Comunicação 11º M11 - TGPSI
 
Novos professores nas escolas.
Novos professores nas escolas.Novos professores nas escolas.
Novos professores nas escolas.
 
1º Congresso Nacional de Professores de Informática 2015
1º Congresso Nacional de Professores de Informática 20151º Congresso Nacional de Professores de Informática 2015
1º Congresso Nacional de Professores de Informática 2015
 
Informação digital na gestão e organização escolar
Informação digital na gestão e organização escolarInformação digital na gestão e organização escolar
Informação digital na gestão e organização escolar
 
歡迎來到妖精們的根據地
歡迎來到妖精們的根據地歡迎來到妖精們的根據地
歡迎來到妖精們的根據地
 
Презентация проекта Аргус-М
Презентация проекта Аргус-МПрезентация проекта Аргус-М
Презентация проекта Аргус-М
 
A Hole in One: Courtney Love Charms #CannesLions #OgilvyCannes
A Hole in One: Courtney Love Charms #CannesLions #OgilvyCannes A Hole in One: Courtney Love Charms #CannesLions #OgilvyCannes
A Hole in One: Courtney Love Charms #CannesLions #OgilvyCannes
 
Energia punto de apoyo para el desarrollo
Energia punto de apoyo para el desarrolloEnergia punto de apoyo para el desarrollo
Energia punto de apoyo para el desarrollo
 

Ähnlich wie Psi m14

Apostila Curso Php My Sql(Portugues)
Apostila Curso Php My Sql(Portugues)Apostila Curso Php My Sql(Portugues)
Apostila Curso Php My Sql(Portugues)
guestcc491
 
Javascript para CSharpers 4 - POO
Javascript para CSharpers 4 - POOJavascript para CSharpers 4 - POO
Javascript para CSharpers 4 - POO
Wesley Lemos
 
Php curso de php com my sql
Php   curso de php com my sqlPhp   curso de php com my sql
Php curso de php com my sql
robinhoct
 
364722271-Modulo-III-Linguagem-SQL-Versao-Final.pdf
364722271-Modulo-III-Linguagem-SQL-Versao-Final.pdf364722271-Modulo-III-Linguagem-SQL-Versao-Final.pdf
364722271-Modulo-III-Linguagem-SQL-Versao-Final.pdf
QuitriaSilva550
 

Ähnlich wie Psi m14 (20)

Apostila Curso Php My Sql(Portugues)
Apostila Curso Php My Sql(Portugues)Apostila Curso Php My Sql(Portugues)
Apostila Curso Php My Sql(Portugues)
 
TDC2016SP - Trilha Banco de Dados
TDC2016SP - Trilha Banco de DadosTDC2016SP - Trilha Banco de Dados
TDC2016SP - Trilha Banco de Dados
 
Angular >= 2 - One Framework Mobile & Desktop
Angular >= 2 - One Framework Mobile & DesktopAngular >= 2 - One Framework Mobile & Desktop
Angular >= 2 - One Framework Mobile & Desktop
 
Tdc2016 trilha-banco-influx.ppt
Tdc2016 trilha-banco-influx.pptTdc2016 trilha-banco-influx.ppt
Tdc2016 trilha-banco-influx.ppt
 
InfluxDb: como monitorar milhares de dados por segundo em real time
InfluxDb: como monitorar milhares de dados por segundo em real time InfluxDb: como monitorar milhares de dados por segundo em real time
InfluxDb: como monitorar milhares de dados por segundo em real time
 
Express2012simples 130312140529-phpapp01
Express2012simples 130312140529-phpapp01Express2012simples 130312140529-phpapp01
Express2012simples 130312140529-phpapp01
 
424928
424928424928
424928
 
Javascript para CSharpers 4 - POO
Javascript para CSharpers 4 - POOJavascript para CSharpers 4 - POO
Javascript para CSharpers 4 - POO
 
TDC2016SP - Trilha BigData
TDC2016SP - Trilha BigDataTDC2016SP - Trilha BigData
TDC2016SP - Trilha BigData
 
O RDA no controle de autoridades do Sistema de Bibliotecas da Universidade de...
O RDA no controle de autoridades do Sistema de Bibliotecas da Universidade de...O RDA no controle de autoridades do Sistema de Bibliotecas da Universidade de...
O RDA no controle de autoridades do Sistema de Bibliotecas da Universidade de...
 
Apostila curso php_my_sql(portugues)
Apostila curso php_my_sql(portugues)Apostila curso php_my_sql(portugues)
Apostila curso php_my_sql(portugues)
 
Hibernate-consultas
Hibernate-consultasHibernate-consultas
Hibernate-consultas
 
Nas internas do CartolaFC: como é a nova arquitetura do game feita para supor...
Nas internas do CartolaFC: como é a nova arquitetura do game feita para supor...Nas internas do CartolaFC: como é a nova arquitetura do game feita para supor...
Nas internas do CartolaFC: como é a nova arquitetura do game feita para supor...
 
Tradutor de Pig Latin
Tradutor de Pig LatinTradutor de Pig Latin
Tradutor de Pig Latin
 
Php curso de php com my sql
Php   curso de php com my sqlPhp   curso de php com my sql
Php curso de php com my sql
 
Agbd aula4 sql_ddl
Agbd aula4 sql_ddlAgbd aula4 sql_ddl
Agbd aula4 sql_ddl
 
-Aula 4 - Programacao do 8085.ppt
-Aula 4 - Programacao do 8085.ppt-Aula 4 - Programacao do 8085.ppt
-Aula 4 - Programacao do 8085.ppt
 
364722271-Modulo-III-Linguagem-SQL-Versao-Final.pdf
364722271-Modulo-III-Linguagem-SQL-Versao-Final.pdf364722271-Modulo-III-Linguagem-SQL-Versao-Final.pdf
364722271-Modulo-III-Linguagem-SQL-Versao-Final.pdf
 
BD I - Aula 10 A - Introducao a SQL
BD I - Aula 10 A - Introducao a SQLBD I - Aula 10 A - Introducao a SQL
BD I - Aula 10 A - Introducao a SQL
 
Aula10 topologia extendida com roteamento
Aula10   topologia extendida com roteamentoAula10   topologia extendida com roteamento
Aula10 topologia extendida com roteamento
 

Mehr von Luis Ferreira (9)

IMEI Módulo 8 (Curso profissional de Gestão de Equipamentos Informáticos)
IMEI Módulo 8 (Curso profissional de Gestão de Equipamentos Informáticos)IMEI Módulo 8 (Curso profissional de Gestão de Equipamentos Informáticos)
IMEI Módulo 8 (Curso profissional de Gestão de Equipamentos Informáticos)
 
Módulo 12 - Introdução aos sistemas de informação
Módulo 12 - Introdução aos sistemas de informaçãoMódulo 12 - Introdução aos sistemas de informação
Módulo 12 - Introdução aos sistemas de informação
 
Módulo 5 Arquitetura de Computadores
Módulo 5 Arquitetura de ComputadoresMódulo 5 Arquitetura de Computadores
Módulo 5 Arquitetura de Computadores
 
Arquitetura de computadores Módulo 4
Arquitetura de computadores Módulo 4Arquitetura de computadores Módulo 4
Arquitetura de computadores Módulo 4
 
Plano de Comunicação Digital e Gestão Educacional
Plano de Comunicação Digital e Gestão EducacionalPlano de Comunicação Digital e Gestão Educacional
Plano de Comunicação Digital e Gestão Educacional
 
Leadership Starratt
Leadership StarrattLeadership Starratt
Leadership Starratt
 
Redes de Comunicação 11º M1 - TGPSI
Redes de Comunicação 11º M1 - TGPSIRedes de Comunicação 11º M1 - TGPSI
Redes de Comunicação 11º M1 - TGPSI
 
SDAC 12º - M9 TGEI
SDAC 12º - M9 TGEISDAC 12º - M9 TGEI
SDAC 12º - M9 TGEI
 
Apresentação da Dissertação
Apresentação da DissertaçãoApresentação da Dissertação
Apresentação da Dissertação
 

Kürzlich hochgeladen

Aula 03 - Filogenia14+4134684516498481.pptx
Aula 03 - Filogenia14+4134684516498481.pptxAula 03 - Filogenia14+4134684516498481.pptx
Aula 03 - Filogenia14+4134684516498481.pptx
andrenespoli3
 
Os editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptxOs editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptx
TailsonSantos1
 
matematica aula didatica prática e tecni
matematica aula didatica prática e tecnimatematica aula didatica prática e tecni
matematica aula didatica prática e tecni
CleidianeCarvalhoPer
 
SSE_BQ_Matematica_4A_SR.pdfffffffffffffffffffffffffffffffffff
SSE_BQ_Matematica_4A_SR.pdfffffffffffffffffffffffffffffffffffSSE_BQ_Matematica_4A_SR.pdfffffffffffffffffffffffffffffffffff
SSE_BQ_Matematica_4A_SR.pdfffffffffffffffffffffffffffffffffff
NarlaAquino
 
Teoria heterotrófica e autotrófica dos primeiros seres vivos..pptx
Teoria heterotrófica e autotrófica dos primeiros seres vivos..pptxTeoria heterotrófica e autotrófica dos primeiros seres vivos..pptx
Teoria heterotrófica e autotrófica dos primeiros seres vivos..pptx
TailsonSantos1
 
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
PatriciaCaetano18
 

Kürzlich hochgeladen (20)

Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptxSlides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
 
Aula 03 - Filogenia14+4134684516498481.pptx
Aula 03 - Filogenia14+4134684516498481.pptxAula 03 - Filogenia14+4134684516498481.pptx
Aula 03 - Filogenia14+4134684516498481.pptx
 
Os editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptxOs editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptx
 
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdf
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdfProjeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdf
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdf
 
Plano de aula Nova Escola períodos simples e composto parte 1.pptx
Plano de aula Nova Escola períodos simples e composto parte 1.pptxPlano de aula Nova Escola períodos simples e composto parte 1.pptx
Plano de aula Nova Escola períodos simples e composto parte 1.pptx
 
PROJETO DE EXTENSÃO I - Radiologia Tecnologia
PROJETO DE EXTENSÃO I - Radiologia TecnologiaPROJETO DE EXTENSÃO I - Radiologia Tecnologia
PROJETO DE EXTENSÃO I - Radiologia Tecnologia
 
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdf
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdfRecomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdf
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdf
 
matematica aula didatica prática e tecni
matematica aula didatica prática e tecnimatematica aula didatica prática e tecni
matematica aula didatica prática e tecni
 
SSE_BQ_Matematica_4A_SR.pdfffffffffffffffffffffffffffffffffff
SSE_BQ_Matematica_4A_SR.pdfffffffffffffffffffffffffffffffffffSSE_BQ_Matematica_4A_SR.pdfffffffffffffffffffffffffffffffffff
SSE_BQ_Matematica_4A_SR.pdfffffffffffffffffffffffffffffffffff
 
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
 
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptx
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptxSlides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptx
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptx
 
Teoria heterotrófica e autotrófica dos primeiros seres vivos..pptx
Teoria heterotrófica e autotrófica dos primeiros seres vivos..pptxTeoria heterotrófica e autotrófica dos primeiros seres vivos..pptx
Teoria heterotrófica e autotrófica dos primeiros seres vivos..pptx
 
PROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdf
PROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdfPROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdf
PROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdf
 
TCC_MusicaComoLinguagemNaAlfabetização-ARAUJOfranklin-UFBA.pdf
TCC_MusicaComoLinguagemNaAlfabetização-ARAUJOfranklin-UFBA.pdfTCC_MusicaComoLinguagemNaAlfabetização-ARAUJOfranklin-UFBA.pdf
TCC_MusicaComoLinguagemNaAlfabetização-ARAUJOfranklin-UFBA.pdf
 
PROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdf
PROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdfPROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdf
PROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdf
 
Aula de jornada de trabalho - reforma.ppt
Aula de jornada de trabalho - reforma.pptAula de jornada de trabalho - reforma.ppt
Aula de jornada de trabalho - reforma.ppt
 
Projeto de Extensão - DESENVOLVIMENTO BACK-END.pdf
Projeto de Extensão - DESENVOLVIMENTO BACK-END.pdfProjeto de Extensão - DESENVOLVIMENTO BACK-END.pdf
Projeto de Extensão - DESENVOLVIMENTO BACK-END.pdf
 
Aula sobre o Imperialismo Europeu no século XIX
Aula sobre o Imperialismo Europeu no século XIXAula sobre o Imperialismo Europeu no século XIX
Aula sobre o Imperialismo Europeu no século XIX
 
EDUCAÇÃO ESPECIAL NA PERSPECTIVA INCLUSIVA
EDUCAÇÃO ESPECIAL NA PERSPECTIVA INCLUSIVAEDUCAÇÃO ESPECIAL NA PERSPECTIVA INCLUSIVA
EDUCAÇÃO ESPECIAL NA PERSPECTIVA INCLUSIVA
 
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
 

Psi m14

  • 1. Módulo 14 Linguagem de Manipulação de Dados
  • 2. Apresentação • Este módulo pretende introduzir uma linguagem standard de manipulação de dados em sistema de gestão de bases de dados. • Esta linguagem permite a pesquisa, a inserção, a alteração e a remoção de registos numa base de dados. • Neste módulo, os alunos são confrontados com a necessidade de aceder a uma base de dados e retirar de lá a informação necessária ao funcionamento do sistema de informação.
  • 3. Objetivos de Aprendizagem • No final deste módulo os alunos devem ter adquirido conhecimentos, procedimentos e atitudes que lhe permitam: • Utilizar uma linguagem de manipulação de dados. • Pesquisar informação numa base de dados, inserir, apagar e atualizar dados numa base de dados. • Produzir pesquisas complexas recorrendo aos mecanismos próprios do SQL.
  • 4. Âmbito dos Conteúdos • SQL como linguagem “universal” para pesquisas sobre bases de dados. • Apresentação da linguagem SQL. • Pesquisas (“queries”) simples sobre a base de dados (estrutura básica do comando SELECT). • Predicados ALL e DISTINCT 5.
  • 5. Âmbito dos Conteúdos • Pesquisas complexas. Agregação de dados com a instrução SELECT • Lógica e funções de grupo • JOIN como forma de extrair informação de tabelas diferentes com base em critérios de comparação de valores em colunas comuns (INNER JOIN, LEFT JOIN e RIGHT JOIN) • Utilização de sub pesquisas (ou pesquisas encadeadas) • Uniões
  • 6. Bibliografia / Outros Recursos • CARRIÇO, Rui Carriço, Desenho de bases de dados e linguagem SQL em Access, Lisboa: C.T.I, 2002. DAMAS, Luis, • SQL – Structed Query Language, Lisboa: FCA,2003. PEREIRA, José Luis • Tecnologia de bases de dados, FCA,sd. WAZLAWICK, Raul, • Análise e Projecto de Sistemas de Informação Orientados a Objectos. Lisboa: Editora Campus, 2004. • Computador Internet Retroprojetor / Projetor Multimédia Manuais Escolares • Links importantes: • http://sqlzoo.net/wiki/SELECT_basics • http://sourceforge.net/projects/xampp/ • http://dev.mysql.com/doc/refman/5.7/en • http://www.w3schools.com/sql/default.asp • http://Lanapt.com
  • 7.
  • 8. SQL como linguagem “universal” para pesquisas sobre bases de dados. • A SQL (Structured Query Language) é uma linguagem de interrogação para o sistema relacional. Sendo que, embora possua características que permitam criar, alterar e remover todos os componentes de uma base de dados, como tabelas, consultas, chaves, etc., será apresentada como linguagem de manipulação de dados. • A SQL que será apresentada, baseia-se na estrutura de funcionamento do MySql em plataforma Windows. Poderão aparecer algumas diferenças na sintaxe para SGBD distintos: Access MS (Microsoft), o Sql AnyWhere (Sybase) e o Oracle (Oracle).
  • 9. Estrutura básica de expressão de SQL Select - Sintaxe Conceptual: SELECT (projeção da álgebra relacional) FROM (lista das relações) WHERE (predicado da seleção) Estrutural: SELECT a1, a2, a3, ...an (campos pretendidos) FROM r1, r2, r3, ...rn (tabelas dos campos pretendidos) WHERE p (condições a serem satisfeitas) Sendo que a cláusula WHERE é opcional. Ver mais em: MySql 5.7 en/select
  • 10. Select - Aplicações Como exemplo temos a tabela: tbl_codigospostais O mais simples: Select * from tbl_codigospostais; Ou Select codigo, local from tbl_codigospostais; Ou Select tbl_codigospostais.codigo, tbl_codigospostais.local from tbl_codigospostais; Ou Select tbl_codigospostais.* from tbl_codigospostais; Ou Select cp.codigo, cp.local from tbl_codigospostais AS cp; https://www.sqlteaching.com http://sqlzoo.net/wiki/SELECT_basics codigo local 1000 LISBOA 1100 LISBOA 1500 LISBOA 2000 SANTARÉM 2040 RIO MAIOR 2300 TOMAR 4000 PORTO
  • 11. Select - Aplicações Como exemplo temos a tabela: tbl_codigospostais, tbl_clientes O mais simples: Select * from tbl_codigospostais, tbl_clientes; Ou Select codigo, local, codcliente, nome, codigoc from tbl_codigospostais, tbl_clientes; Ou Select tbl_codigospostais.codigo, tbl_codigospostais.local, tbl_clientes.codcliente, tbl_clientes.nome, tbl_clientes.codigoc from tbl_codigospostais, tbl_clientes; Ou Select tbl_codigospostais.*, tbl_clientes.* from tbl_codigospostais, tbl_clientes; Ou Select cp.codigo, cp.local, cl.codcliente, cl.nome, cl.codigoc from tbl_codigospostais AS cp, tbl_clientes as cl; codigo local 1000 LISBOA 1100 LISBOA 1500 LISBOA 2000 SANTARÉM 2040 RIO MAIOR 2300 TOMAR 4000 PORTO codcliente nome codigoc 1 Ana 1100 2 Maria 4000 3 José 1500 4 André 1100 5 Luis 2040 6 Mário 2300 7 Vitor 4000
  • 12. Cláusula WHERE (Restrição) Operador Descrição Exemplo Resultado = Igual a 7=5 Falso > Maior que 7>5 Verdadeiro < Menor que 7<5 Falso >= Maior ou Igual que 7>=5 Verdadeiro <= Menor ou Igual que 7<=5 Falso <> ou != Diferente 7<>5 Verdadeiro A operação de restrição permite restringir o número de linhas a apresentar, que satisfaçam a condição pretendida. No entanto, para efetuar as restrições, é necessária a utilização de operadores: Operadores Relacionais Operadores Lógicos Outros Operadores BETWEEN – permite especificar intervalos de valores. IN – permite especificar conjuntos de valores. IS – permite efetuar o tratamento de nulos (NULL) – strings vazias. LIKE – permite resolver alguns problemas naturais que existem quando se pretende comparar strings. Operador Exemplo AND condição ou atributo AND condição ou atributo OR condição ou atributo OR condição ou atributo NOT NOT condição
  • 13. Select - Aplicações Como exemplo temos a tabela: tbl_codigospostais O mais simples: Select * from tbl_codigospostais where codigo=1000; Ou Select codigo, local from tbl_codigospostais where codigo=1000; Ou Select tbl_codigospostais.codigo, tbl_codigospostais.local from tbl_codigospostais where tbl_codigospostais.codigo=1000; Ou Select tbl_codigospostais.* from tbl_codigospostais where tbl_codigospostais.codigo=1000; Ou Select cp.codigo, cp.local from tbl_codigospostais AS cp where cp.codigo=1000; codigo local 1000 LISBOA 1100 LISBOA 1500 LISBOA 2000 SANTARÉM 2040 RIO MAIOR 2300 TOMAR 4000 PORTO codigo local 1000 LISBOA
  • 14. = SELECT * FROM tbl_codigospostais WHERE local = LISBOA; codigo local 1000 LISBOA 1100 LISBOA 1500 LISBOA 2000 SANTARÉM 2040 RIO MAIOR 2300 TOMAR 4000 PORTO codigo local 1000 LISBOA 1100 LISBOA 1500 LISBOA
  • 15. > SELECT * FROM tbl_codigospostais WHERE codigo > 1100; codigo local 1000 LISBOA 1100 LISBOA 1500 LISBOA 2000 SANTARÉM 2040 RIO MAIOR 2300 TOMAR 4000 PORTO codigo local 1500 LISBOA 2000 SANTARÉM 2040 RIO MAIOR 2300 TOMAR 4000 PORTO
  • 16. < SELECT * FROM tbl_codigospostais WHERE codigo < 1100; codigo local 1000 LISBOA 1100 LISBOA 1500 LISBOA 2000 SANTARÉM 2040 RIO MAIOR 2300 TOMAR 4000 PORTO codigo local 1000 LISBOA
  • 17. <= SELECT * FROM tbl_codigospostais WHERE codigo <= 1100; codigo local 1000 LISBOA 1100 LISBOA 1500 LISBOA 2000 SANTARÉM 2040 RIO MAIOR 2300 TOMAR 4000 PORTO codigo local 1000 LISBOA 1100 LISBOA
  • 18. != SELECT * FROM tbl_codigospostais WHERE codigo != 1100; codigo local 1000 LISBOA 1100 LISBOA 1500 LISBOA 2000 SANTARÉM 2040 RIO MAIOR 2300 TOMAR 4000 PORTOcodigo local 1000 LISBOA 1500 LISBOA 2000 SANTARÉM 2040 RIO MAIOR 2300 TOMAR 4000 PORTO
  • 19. AND SELECT * FROM tbl_codigospostais WHERE (codigo > 1100 AND codigo != 2000); codigo local 1000 LISBOA 1100 LISBOA 1500 LISBOA 2000 SANTARÉM 2040 RIO MAIOR 2300 TOMAR 4000 PORTO codigo local 1500 LISBOA 2040 RIO MAIOR 2300 TOMAR 4000 PORTO
  • 20. AND SELECT * FROM tbl_codigospostais WHERE (codigo < 1100 AND codigo > 1500); ? codigo local 1000 LISBOA 1100 LISBOA 1500 LISBOA 2000 SANTARÉM 2040 RIO MAIOR 2300 TOMAR 4000 PORTO
  • 21. OR SELECT * FROM tbl_codigospostais WHERE (codigo < 1100 OR codigo > 1500); codigo local 1000 LISBOA 1100 LISBOA 1500 LISBOA 2000 SANTARÉM 2040 RIO MAIOR 2300 TOMAR 4000 PORTO codigo local 1000 LISBOA 2000 SANTARÉM 2040 RIO MAIOR 2300 TOMAR 4000 PORTO
  • 22. OR SELECT * FROM tbl_codigospostais WHERE (codigo < 1100 OR codigo > 1500); codigo local 1000 LISBOA 1100 LISBOA 1500 LISBOA 2000 SANTARÉM 2040 RIO MAIOR 2300 TOMAR 4000 PORTO codigo local 1000 LISBOA 2000 SANTARÉM 2040 RIO MAIOR 2300 TOMAR 4000 PORTO
  • 23. NOT SELECT * FROM tbl_codigospostais WHERE NOT (codigo < 1100 OR codigo > 1500); codigo local 1000 LISBOA 1100 LISBOA 1500 LISBOA 2000 SANTARÉM 2040 RIO MAIOR 2300 TOMAR 4000 PORTO codigo local 1100 LISBOA 1500 LISBOA
  • 24. NOT/IS SELECT * FROM tbl_codigospostais WHERE IS NOT NULL; SELECT * FROM tbl_codigospostais WHERE IS NULL; codigo local 1000 LISBOA 1100 LISBOA 1500 LISBOA 2000 SANTARÉM 2040 RIO MAIOR 2300 TOMAR 4000 PORTO codigo local 1000 LISBOA 1100 LISBOA 1500 LISBOA 2000 SANTARÉM 2040 RIO MAIOR 2300 TOMAR 4000 PORTO codigo local
  • 25. NOT SELECT * FROM tbl_codigospostais WHERE NOT (codigo < 1100 OR codigo > 1500); codigo local 1000 LISBOA 1100 LISBOA 1500 LISBOA 2000 SANTARÉM 2040 RIO MAIOR 2300 TOMAR 4000 PORTO codigo local 1100 LISBOA 1500 LISBOA
  • 26. LIKE • Comparação entre um valor e uma cadeia de valores (dados). • É case sensitive. • % todos os carateres de qualquer comprimento • _ todos os carateres de 1 comprimento. SELECT * FROM tbl_codigospostais WHERE local like ‘L%’; codigo local 1000 LISBOA 1100 LISBOA 1500 LISBOA 2000 SANTARÉM 2040 RIO MAIOR 2300 TOMAR 4000 PORTO codigo local 1000 LISBOA 1100 LISBOA 1500 LISBOA
  • 27. LIKE SELECT * FROM tbl_codigospostais WHERE local like ‘_i%’; ? codigo local 1000 LISBOA 1100 LISBOA 1500 LISBOA 2000 SANTARÉM 2040 RIO MAIOR 2300 TOMAR 4000 PORTO
  • 28. LIKE SELECT * FROM tbl_codigospostais WHERE local like ‘_I%’; codigo local 1000 LISBOA 1100 LISBOA 1500 LISBOA 2000 SANTARÉM 2040 RIO MAIOR 2300 TOMAR 4000 PORTO codigo local 1000 LISBOA 1100 LISBOA 1500 LISBOA 2040 RIO MAIOR
  • 29. IN • Especifica a condição para um determinado grupo de valores. • Select * from tbl_codigospostais • Where local IN (‘LISBOA’, ‘PORTO’); codigo local 1000 LISBOA 1100 LISBOA 1500 LISBOA 2000 SANTARÉM 2040 RIO MAIOR 2300 TOMAR 4000 PORTO codigo local 1000 LISBOA 1100 LISBOA 1500 LISBOA 4000 PORTO
  • 30. BETWEEN • Especifica a condição para um intervalo. Útil em datas e valores. • Select * from tbl_codigopostal • Where codigo BETWEEN 1100 AND 2100; codigo local 1000 LISBOA 1100 LISBOA 1500 LISBOA 2000 SANTARÉM 2040 RIO MAIOR 2300 TOMAR 4000 PORTO codigo local 1100 LISBOA 1500 LISBOA 2000 SANTARÉM 2040 RIO MAIOR
  • 31. DISTINCT • Mostra os resultados sem repetir os registos iguais. • Select DISTINCT * from tbl_codigospostais. codigo local 1000 LISBOA 1100 LISBOA 1500 LISBOA 2000 SANTARÉM 2040 RIO MAIOR 2300 TOMAR 4000 PORTO codigo local 1000 LISBOA 1100 LISBOA 1500 LISBOA 2000 SANTARÉM 2040 RIO MAIOR 2300 TOMAR 4000 PORTO
  • 32. ORDER BY A ordenação pode ser realizada através da cláusula ORDER BY no comando SELECT. Esta cláusula, se existir, aparece sempre posicionada no final do comando SELECT. SELECT campo1, campo2, ... campon FROM tabela 1 , tabela 2, .... tabela n [WHERE Condição ] [GROUP BY ............] [HAVING ………] [ORDER BY Campo [ASC | DESC], Campo [ASC | DESC]…] • Onde Campo representa o nome de um Campo, uma Expressão ou a Posição pela qual se pretende ordenar o resultado do SELECT. • ASC indica que a ordenação é ASCendente e DESC indica que a ordenação é DESCendente. • Por defeito, ou seja, caso não seja indicado um tipo de ordenação, esta é efectuada por ordem ascendente.
  • 33. ORDER BY SELECT * FROM tbl_codigospostais WHERE (codigo < 1100 OR codigo > 1500) ORDER BY codigo ASC; codigo local 1000 LISBOA 1100 LISBOA 1500 LISBOA 2000 SANTARÉM 2040 RIO MAIOR 2300 TOMAR 4000 PORTO codigo local 1000 LISBOA 2000 SANTARÉM 2040 RIO MAIOR 2300 TOMAR 4000 PORTO
  • 34. ORDER BY SELECT * FROM tbl_codigospostais ORDER BY codigo ASC, local DESC; codigo local 1000 LISBOA 1100 LISBOA 1500 LISBOA 2000 SANTARÉM 2040 RIO MAIOR 2300 TOMAR 4000 PORTO
  • 35. Seleção de Expressões SELECT codigo, local, codigo + 1000 FROM tbl_codigospostais where código <2000; codigo local 1000 LISBOA 1100 LISBOA 1500 LISBOA 2000 SANTARÉM 2040 RIO MAIOR 2300 TOMAR 4000 PORTO codigo local Expr1 1000 LISBOA 2000 1100 LISBOA 2100 1500 LISBOA 2500
  • 36. Sumario 139-140 (187) +3h • Módulo 14 – Linguagem de manipulação de dados • Comando insert – seleção de expressões. Utilização de funções (linha e grupo).
  • 37. Seleção de Expressões SELECT codigo, local, codigo + 1000 AS ‘Novo Codigo’ FROM tbl_codigospostais where código <2000; codigo local 1000 LISBOA 1100 LISBOA 1500 LISBOA 2000 SANTARÉM 2040 RIO MAIOR 2300 TOMAR 4000 PORTO codigo local Novo Código 1000 LISBOA 2000 1100 LISBOA 2100 1500 LISBOA 2500
  • 38. Funções • Def. Permitem aplicar formulas na query para atingir e formatar resultados. • Estas podem ser funções de linha e funções de grupo. Um função de linha devolve um resultado por linha da tabela acedida. Já uma função de grupo retorna um resultado por grupo de registros.
  • 39. Funções de Linha • Exemplos de Funções de Linha: - LCASE ("UFF") » uff - UPPER ("uff") » UFF - INITCAP (“escola secundária Dom") » Escola Secundária Dom (ORACLE) - CONCAT ("String1", "String2") » String1String2 - SUBSTR ("String", 1, 3) » Str - LENGTH ("UFF") » 3 - IFNULL (SAL, 0) » Se SAL for NULO seu valor será convertido para zero. - ROUND (78.731, 2) » 78.73 (Até 4 p/ baixo, Acima de 4 p/ cima) - ROUND (78.731, 0) » 79 - TRUNC (78.731, 2) » 78.73 - TRUNC (78.731) » 78 - MOD (100, 30) » 10 •MID() - Extract characters from a text field •LEN() - Returns the length of a text field •NOW() - Returns the current system date and time •FORMAT() - Formats how a field is to be displayed
  • 40. Funções de Grupo • Funções de Grupo Existentes: • AVG() - Média • COUNT() – Total de registos • FIRST() – Mostra o primeiro valor • LAST() – Mostra o ultimo valor • MAX() – O máximo (Maior) • MIN() – O Mínimo (valor mais pequeno) • SUM() – Soma dos resultados • VARIANCE(), STDDEV e STDEVP () (Estatísticas)
  • 41. Insert Into • Sintaxe: INSERT INTO TABLE_NAME (column1, column2, column3,...columnN)] VALUES (value1, value2, value3,...valueN); Não é preciso especificar os campos desde que: INSERT INTO TABLE_NAME VALUES (value1,value2,value3,...valueN);
  • 42. INSERT INTO • Inserir registos nas tabelas. • INSERT INTO tbl_codigospostais (codigo, local) • values (2900, ‘Setúbal’); • INSERT INTO tbl_codigospostais (codigo, local) • values (5900, ‘Viana do Castelo’);
  • 43. Update • Sintaxe: UPDATE table_name SET column1 = value1, column2 = value2...., columnN = valueN WHERE [condition]; (na condição pode-se combiner and e or)
  • 44. UPDATE UPDATE from tbl_codigopostal set local= ‘PORTO’ where codigo=2000; codigo local 1000 LISBOA 1100 LISBOA 1500 LISBOA 2000 SANTARÉM 2040 RIO MAIOR 2300 TOMAR 4000 PORTO codigo local 1000 LISBOA 1100 LISBOA 1500 LISBOA 2000 PORTO 2040 RIO MAIOR 2300 TOMAR 4000 PORTO
  • 45. DELETE • Sintaxe: DELETE FROM table_name WHERE [condition]; (na condição pode-se usar o AND e OR). Cuidado ao realizar o: Delete From table;
  • 46. DELETE - Exemplos Delete from tbl_codigopostal where local=‘PORTO’; codigo local 1000 LISBOA 1100 LISBOA 1500 LISBOA 2040 RIO MAIOR 2300 TOMAR codigo local 1000 LISBOA 1100 LISBOA 1500 LISBOA 2000 PORTO 2040 RIO MAIOR 2300 TOMAR 4000 PORTO
  • 47. Juntando várias tabelas • O Modelo Relacional estabelece claramente as regras para a divisão da informação entre tabelas, de forma a evitar a duplicação da informação. • Esta dispersão da informação por diferentes tabelas é facilmente manipulável através da linguagem SQL, um vez que a ligação entre estas será realizada através das chaves estrangeiras.
  • 48. • A junção entre tabelas faz-se colocando na cláusula FROM o conjunto de tabelas que se pretende juntar. SELECT campo1, campo2, ... Campo n FROM tabela 1 , tabela 2, .... tabela n
  • 49. Produto Cartesiano de Tabelas Id Nome Idade Telefone Cod_postal Código Local 71 António Dias 43 789654 1000 1000 Lisboa 54 Célia Morais 36 123456 1000 2000 Santarém 12 Isabel Silva 28 2040 2040 Rio Maior 49 José António 17 333555 2000 4000 Porto Consideremos as seguintes relações (Pessoa e Postal): SELECT * FROM Pessoa, Postal Obtém-se um resultado bastante inesperado e que consiste no produto cartesiano de dois conjuntos de elementos. O produto cartesiano entre as tabelas Pessoa e Postal associa a cada linha da tabela Pessoa o conjunto das linhas da tabela Postal.
  • 50. Produto Cartesiano de Tabelas Id Nome Idade Telefone Cod_postal Código Local 71 António Dias 43 789654 1000 1000 Lisboa 71 António Dias 43 789654 1000 2000 Santarém 71 António Dias 43 789654 1000 2040 Rio Maior 71 António Dias 43 789654 1000 4000 Porto 54 Célia Morais 36 123456 1000 1000 Lisboa 54 Célia Morais 36 123456 1000 2000 Santarém 54 Célia Morais 36 123456 1000 2040 Rio Maior 54 Célia Morais 36 123456 1000 4000 Porto 12 Isabel Silva 28 2040 1000 Lisboa 12 Isabel Silva 28 2040 2000 Santarém 12 Isabel Silva 28 2040 2040 Rio Maior 12 Isabel Silva 28 2040 4000 Porto 49 José António 17 333555 2000 1000 Lisboa 49 José António 17 333555 2000 2000 Santarém 49 José António 17 333555 2000 2040 Rio Maior 49 José António 17 333555 2000 4000 Porto Dado que na tabela Pessoa existem 4 registos e na tabela Postal existem 4 registos, o resultado do produto cartesiano será 4*4 = 16 registos.
  • 51. Produto Cartesiano de Tabelas Id Nome Idade Telefone Cod_postal Código Local 71 António Dias 43 789654 1000 1000 Lisboa 71 António Dias 43 789654 1000 2000 Santarém 71 António Dias 43 789654 1000 2040 Rio Maior 71 António Dias 43 789654 1000 4000 Porto 54 Célia Morais 36 123456 1000 1000 Lisboa 54 Célia Morais 36 123456 1000 2000 Santarém 54 Célia Morais 36 123456 1000 2040 Rio Maior 54 Célia Morais 36 123456 1000 4000 Porto 12 Isabel Silva 28 2040 1000 Lisboa 12 Isabel Silva 28 2040 2000 Santarém 12 Isabel Silva 28 2040 2040 Rio Maior 12 Isabel Silva 28 2040 4000 Porto 49 José António 17 333555 2000 1000 Lisboa 49 José António 17 333555 2000 2000 Santarém 49 José António 17 333555 2000 2040 Rio Maior 49 José António 17 333555 2000 4000 Porto O pretendido seria a junção entre as tabelas Pessoa e Postal. Para tal é necessário, na cláusula WHERE, indicar as chaves estrangeiras de ligação.
  • 52. Produto Cartesiano de Tabelas Id Nome Idade Telefone Cod_postal Código Local 71 António Dias 43 789654 1000 1000 Lisboa 54 Célia Morais 36 123456 1000 1000 Lisboa 12 Isabel Silva 28 2040 2040 Rio Maior 49 José António 17 333555 2000 2000 Santarém SELECT * FROM Pessoa, Postal WHERE Cod_postal = Código
  • 53. Equi-Join • Acontece quando todas as colunas das tabelas são apresentadas e a ligação entre as tabelas é feita através de uma igualdade, dando origem assim a duas colunas de conteúdos exatamente iguais. SELECT * FROM Pessoa, Postal WHERE Cod_postal = Código Id Nome Idade Telefone Cod_postal Código Local 71 António Dias 43 789654 1000 1000 Lisboa 54 Célia Morais 36 123456 1000 1000 Lisboa 12 Isabel Silva 28 2040 2040 Rio Maior 49 José António 17 333555 2000 2000 Santarém
  • 54. Natural Join • Acontece quando todas as colunas envolvidas na ligação entre tabelas são apresentadas sem repetição de colunas. SELECT Pessoa.*, Postal.Local FROM Pessoa, Postal WHERE Cod_postal = Código Id Nome Idade Telefone Cod_postal Local 71 António Dias 43 789654 1000 Lisboa 54 Célia Morais 36 123456 1000 Lisboa 12 Isabel Silva 28 2040 Rio Maior 49 José António 17 333555 2000 Santarém
  • 55. INNER JOIN • Estes dois tipos de ligação entre tabelas fazem parte de um tipo de ligação mais geral denominada INNER JOIN. • Num INNER JOIN, apenas são apresentados os registos em que exista ligação entre as tabelas. http://www.codeproject.com/Articles/33052/Visual-Representation-of- SQL-Joins
  • 56. INNER JOIN • Embora existam diversos tipos de ligação entre tabelas (JOIN), este é o tipo mais comum e utilizado. • Pretende-se selecionar o nome e morada completa (código e localidade) de todas as pessoas da tabela Pessoa. SELECT Nome, Cod_postal, Local FROM Pessoa, Postal Where Cod_postal = Código Nome Cod_postal Local António Dias 1000 Lisboa Célia Morais 1000 Lisboa Isabel Silva 2040 Rio Maior José António 2000 Santarém
  • 57. INNER JOIN • Embora ainda de uso pouco comum, é possível, em alguns sistemas, escrever o mesmo SELECT num formato em que se especifique a natureza do Join (INNER), no mesmo exemplo mas ordenando o resultado por Código Postal. SELECT Nome, Cod_postal, Local FROM Pessoa INNER JOIN Postal ON Pessoa.Cod_postal = Postal.Código ORDER BY Pessoa.Cod_postal Nome Cod_postal Local António Dias 1000 Lisboa Célia Morais 1000 Lisboa José António 2000 Santarém Isabel Silva 2040 Rio Maior
  • 58.
  • 59. OUTER JOIN - LEFT • O conceito do Outer Join é obter numa ligação a totalidade das linhas de uma tabela, ainda que não exista o correspondente valor na outra tabela a que esta está ligada pela junção. • Pretende-se selecionar o nome e morada completa (código e localidade) de todas as pessoas da tabela Pessoa, assim como todos os código postais existentes na tabela Postal. SELECT Nome, Cod_postal, Código, Local FROM Postal LEFT JOIN Pessoa ON Postal.Código = Pessoa.Cod_postal • Todas as linhas da tabela Postal são apresentadas. Se existir correspondente na coluna Cod_postal da tabela Pessoa, são mostrados os dados, senão as entradas da tabela Pessoa são preenchidas a NULL. Nome Cod_postal Código Local António Dias 1000 1000 Lisboa Célia Morais 1000 1000 Lisboa 1100 Lisboa José António 2000 2000 Santarém Isabel Silva 2040 2040 Rio Maior 2300 Tomar 4000 Porto
  • 60. OUTER JOIN • Quando o Outer Join é efectuado à direita, são considerados todos os registos da tabela da direita e apenas os registos correspondentes na tabela da esquerda. • Pretende-se selecionar todas as pessoas da tabela pessoa, assim como os correspondentes valores de comissão. Id Nome Idade Id Id_msg Valor 71 António Dias 43 49 10 1250 12 Isabel Silva 28 49 70 750 49 José António 17 71 12 100 85 João Silva 49 71 15 200
  • 61. OUTER JOIN • Pretende-se selecionar todas as pessoas da tabela pessoa, assim como os correspondentes valores de comissão. SELECT Nome, Valor FROM Comissão RIGHT JOIN Pessoa ON Comissão.Id = Pessoa.Id • Saber todas as pessoas e quais as correspondências na comissão mesmo que não tenham valor. Id Nome Idade Id Id_msg Valor 71 António Dias 43 49 10 1250 12 Isabel Silva 28 49 70 750 49 José António 17 71 12 100 85 João Silva 49 71 15 200 Nome Valor António Dias 100 António Dias 200 Isabel Silva José António 1250 José António 750 João Silva
  • 62. SELF JOIN • O Self Join é uma variante do Inner Join, em que se comparam duas colunas da mesma tabela. • • Pretende-se saber quais os tipos de códigos postais existentes diferentes do local LISBOA. SELECT p1.Código, p2.Local FROM Postal.p1, Postal.p2 WHERE p1.Código = p2.Código AND p2.Local <> “Lisboa”
  • 63. UNION SELECT Id_msg, Mensagem FROM Mensagem UNION SELECT Código, Local FROM PostalId_msg Mensagem 10 Comissão de vendas 30 Vendas extra 40 Refeições 1000 Lisboa 2040 Rio Maior 4000 Porto Uma união não é propriamente uma ligação entre tabelas. A UNION permite juntar o conteúdo de múltiplos comandos SELECT. Pretende-se juntar o código e a descrição da tabela mensagens aos códigos postais. Depois de executados os comandos, os resultados obtidos serão: Na UNION, o número de campos a selecionar em cada um dos comandos SELECT tem de ser igual. O nome dos campos não é relevante, mas o tipo de dados que pode ser agrupado depende de sistema para sistema.
  • 64. Funções de agregação/conjunto/grupo Estas funções, também designadas por Funções Estatísticas, têm por objetivo obter informação sobre conjuntos de linhas especificadas na cláusula WHERE ou sobre grupos de linhas indicadas na cláusula GROUP BY. Função Descrição COUNT(campo) Devolve o número de linhas. MAX(campo) Devolve o maior valor da coluna. MIN(campo) Devolve o menor valor da coluna. SUM(campo) Devolve a soma de todos os valores da coluna. AVG(campo) Devolve a média de todos os valores da coluna.
  • 65. FUNÇÃO COUNT • A função de agregação COUNT devolve o número de linhas que resultam num SELECT. • Pode ser utilizada de três formas distintas: Forma Descrição COUNT (*) Devolve o número de linhas que resulta de um SELECT. COUNT (coluna) Devolve o número de ocorrências na coluna diferentes de NULL. COUNT (DISTINCT coluna) Devolve o número de ocorrências (sem repetições) na coluna.
  • 66. MIN e MAX • As funções de agregação MIN e MAX permitem obter o menor e o maior valor de uma determinada coluna. Exemplo: Pretende-se saber qual o salário mais elevado e o salário mais baixo da tabela Pessoa. SELECT MAX (salário) AS [Salário mais elevado], MIN (salário) AS [Salário mais baixo] FROM Pessoa Salário mais elevado Salário mais baixo 235000 86000
  • 67. Exemplos práticos • Pretende-se saber a idade da pessoa mais nova e a idade da pessoa mais velha da tabela Pessoa. • ? • Qual o país com mais e com menos população? • ? • Nota: também “funciona” alfabeticamente.
  • 68. SUM A função SUM devolve a soma de uma determinada coluna. Pretende-se saber o total de salários da tabela Pessoa. SELECT SUM (salário) AS [Total de Salários] FROM Pessoa E quanto é 10% do total dos salários? Id Nome Idade Salário Telefone Cod_postal 42 António Dias 43 94000 7896544 1000 5 Célia Morais 36 170000 1234565 1000 32 Florinda Simões 35 147000 4000 37 Isabel Espada 28 86000 2040 49 José António 17 210000 1000 14 Nascimento Augusto 35 220000 4561233 2300 75 Pedro Santos 42 235000 2040 Total de Salários 1162000
  • 69. AVG A função AVG devolve a média dos valores de uma determinada coluna. • Pretende-se saber a média das idades da tabela Pessoa. SELECT AVG (idade) AS [Média de Idades] FROM Pessoa Média de idades 33.714285714285714
  • 70. Agrupando a informação • As funções de agregação são uma ferramenta útil quando usada para obter informação resumida sobre o resultado de um comando SELECT. • No entanto, estas funções podem ser particularmente úteis no tratamento de informação de forma agrupada, não como um todo, mas em grupos mais pequenos.
  • 71. Agrupando a informação • Pretende-se mostrar as comissões e respetivos valores, ordenando o resultado por Id da tabela comissão. SELECT Id_comissão, Valor FROM Comissão ORDER BY Id_comissão SELECT SUM(Valor) AS Total FROM Comissão Id_comissão Valor Id_comissão Valor 14 2600 37 120 14 400 37 5500 14 3750 37 14230 14 10500 37 20 25 370 40 20 25 2400 42 150 25 100 42 20 Total 40180
  • 72. Agrupando a informação • No entanto, se o objectivo fosse obter a soma das comissões por cada Id_comissão, o resultado apresentado não seria o pretendido. • Para resolver essas questões é necessário, antes de aplicar as funções de agregação, possuir a informação agrupada. SELECT campo1, campo2, ... campon FROM tabela 1 , tabela 2, .... tabela n [WHERE Condição ] [GROUP BY ............]
  • 73. Cláusula GROUP BY • Esta cláusula divide o resultado de um SELECT em grupos de resultados que irão ser tratados com as funções de agregação.  A cláusula GROUP BY é utilizada para agrupar informação.  Os registos são processados em grupos de características semelhantes.  As funções de agregação podem ser utilizadas para obter informação sobre cada um dos grupos.
  • 74. Agrupando a informação • Pretende-se mostrar as comissões e respetivos valores, ordenando o resultado por Id da tabela comissão. SELECT Id_comissão, Valor FROM Comissão ORDER BY Id_comissão SELECT SUM(Valor) AS Total FROM Comissão Id_comissão Valor Id_comissão Valor 14 2600 37 120 14 400 37 5500 14 3750 37 14230 14 10500 37 20 25 370 40 20 25 2400 42 150 25 100 42 20 Total 40180
  • 75. Agrupando a informação • Pretende-se saber, para cada Id, o total de valores de comissões. SELECT Id_comissão, SUM(Valor) AS Total FROM Comissão GROUP BY Id_comissão Id_comissão Total 14 17250 25 2870 37 19870 40 20 42 170
  • 76. Exercícios práticos • Pretende-se saber, para cada Id, o maior valor de comissão? • Pretende-se saber para cada Id, o maior valor de comissão, efectuando a ordenação descendente por maior valor de comissão?
  • 77. Resposta SELECT MAX(Valor) AS Maior, Id_comissão FROM Comissão GROUP BY Id_comissão ORDER BY MAX(Valor) DESC Maior Id_comissão 14230 37 10500 14 2400 25 150 42 20 40
  • 78. • Microsoft.jet.oledb.4.0 • microsoft.ace.oledb.12.0 • Connection String • Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:AccessFile.accdb; Jet OLEDB:Database Password=MyDbPassword; • Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:mydatabase.mdb; Jet OLEDB:Database Password=MyDbPassword;
  • 80. • using (var conn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:BC207test.accdb")) • using (var comm = conn.CreateCommand()) • { • comm.CommandText = "SELECT password FROM HAHA"; • comm.CommandType = CommandType.Text; • conn.Open(); • var returnValue = comm.ExecuteScalar(); • MessageBox.Show(returnValue.ToString());
  • 81. • ExecuteScalar is typically used when your query returns a single value. If it returns more, then the result is the first column of the first row. An example might be SELECT @@IDENTITY AS 'Identity'. • •ExecuteReader is used for any result set with multiple rows/columns (e.g., SELECT col1, col2 from sometable). • •ExecuteNonQuery is typically used for SQL statements without results (e.g., UPDATE, INSERT, etc.).
  • 82. using (SqlConnection connection = new SqlConnection(connectionString)) { connection.Open(); // // Create new SqlCommand object. // using (SqlCommand command = new SqlCommand("SELECT * FROM Dogs1", connection)) { SqlDataReader reader = command.ExecuteReader(); while (reader.Read()) { int weight = reader.GetInt32(0); // Weight int string name = reader.GetString(1); // Name string string breed = reader.GetString(2); // Breed string Console.WriteLine("Weight = {0}, Name = {1}, Breed = {2}", weight, name, breed); } } }