Documente Academic
Documente Profesional
Documente Cultură
Apresentao
Este mdulo pretende introduzir uma linguagem
standard de manipulao de dados em sistema de
gesto de bases de dados.
Esta linguagem permite a pesquisa, a insero, a
alterao e a remoo de registos numa base de
dados.
Neste mdulo, os alunos so confrontados com a
necessidade de aceder a uma base de dados e retirar
de l a informao necessria ao funcionamento do
sistema de informao.
Objetivos de Aprendizagem
No final deste mdulo os alunos devem ter adquirido
conhecimentos, procedimentos e atitudes que lhe permitam:
Utilizar uma linguagem de manipulao de dados.
Pesquisar informao numa base de dados, inserir, apagar e
atualizar dados numa base de dados.
Produzir pesquisas complexas recorrendo aos mecanismos prprios
do SQL.
Estrutural:
SELECT a1, a2, a3, ...an
(campos pretendidos)
FROM r1, r2, r3, ...rn
(tabelas dos campos pretendidos)
WHERE p
(condies a serem satisfeitas)
Sendo que a clusula WHERE opcional.
Select - Aplicaes
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
1000
1100
1500
2000
2040
2300
4000
local
LISBOA
LISBOA
LISBOA
SANTARM
RIO MAIOR
TOMAR
PORTO
Select - Aplicaes
Como exemplo temos a tabela: tbl_codigospostais, tbl_clientes
codigo
1000
1100
1500
2000
2040
2300
4000
local
LISBOA
LISBOA
LISBOA
SANTARM
RIO MAIOR
TOMAR
PORTO
codcliente
1
2
3
4
5
6
7
nome
Ana
Maria
Jos
Andr
Luis
Mrio
Vitor
codigoc
1100
4000
1500
1100
2040
2300
4000
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;
A operao de restrio permite restringir o nmero de linhas a apresentar, que satisfaam a condio pretendida.
No entanto, para efetuar as restries, necessria a utilizao de operadores:
Operadores Relacionais
Operador
Descrio
=
>
Igual a
Maior que
<
>=
Exempl Resultado
o
7=5
Falso
7>5
Verdadeir
o
7<5
Falso
7>=5 Verdadeir
o
7<=5
Falso
Menor que
Maior ou Igual
que
Operadores
Lgicos
<=
Menor ou Igual
que
Operador
Exemplo
<> ou !=
Diferente
7<>5 Verdadeir
AND
condio ou atributo AND condio ou atributo
o
OR
condio ou atributo OR condio ou atributo
NOT
NOT condio
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
codigo
1000
1100
1500
2000
2040
2300
4000
Select - Aplicaes
Como exemplo temos a tabela: tbl_codigospostais
O mais simples:
Select * from tbl_codigospostais where codigo=1000;
Ou
codigo
1000
local
LISBOA
local
LISBOA
LISBOA
LISBOA
SANTARM
RIO MAIOR
TOMAR
PORTO
codigo
1000
1100
1500
2000
2040
2300
4000
=
SELECT *
FROM tbl_codigospostais
WHERE local = LISBOA;
codigo
1000
1100
1500
local
LISBOA
LISBOA
LISBOA
local
LISBOA
LISBOA
LISBOA
SANTARM
RIO MAIOR
TOMAR
PORTO
>
SELECT *
FROM tbl_codigospostais
WHERE codigo > 1100;
codigo
1500
2000
2040
2300
4000
local
LISBOA
SANTARM
RIO MAIOR
TOMAR
PORTO
codigo
1000
1100
1500
2000
2040
2300
4000
local
LISBOA
LISBOA
LISBOA
SANTARM
RIO MAIOR
TOMAR
PORTO
<
SELECT *
FROM tbl_codigospostais
WHERE codigo < 1100;
codigo
1000
local
LISBOA
codigo
1000
1100
1500
2000
2040
2300
4000
local
LISBOA
LISBOA
LISBOA
SANTARM
RIO MAIOR
TOMAR
PORTO
codigo
1000
1100
1500
2000
2040
2300
4000
<=
SELECT *
FROM tbl_codigospostais
WHERE codigo <= 1100;
codigo
1000
1100
local
LISBOA
LISBOA
local
LISBOA
LISBOA
LISBOA
SANTARM
RIO MAIOR
TOMAR
PORTO
!=
SELECT *
FROM tbl_codigospostais
WHERE codigo != 1100;
codigo
1000
1500
2000
2040
2300
4000
local
LISBOA
LISBOA
SANTARM
RIO MAIOR
TOMAR
PORTO
codigo
1000
1100
1500
2000
2040
2300
4000
local
LISBOA
LISBOA
LISBOA
SANTARM
RIO MAIOR
TOMAR
PORTO
codigo
1000
1100
1500
2000
2040
2300
4000
AND
SELECT *
FROM tbl_codigospostais
WHERE (codigo > 1100 AND codigo !=codigo
2000);local
1500
2040
2300
4000
LISBOA
RIO MAIOR
TOMAR
PORTO
local
LISBOA
LISBOA
LISBOA
SANTARM
RIO MAIOR
TOMAR
PORTO
AND
SELECT *
codigo
1000
1100
1500
2000
2040
2300
4000
FROM tbl_codigospostais
WHERE (codigo < 1100 AND codigo > 1500);
local
LISBOA
LISBOA
LISBOA
SANTARM
RIO MAIOR
TOMAR
PORTO
codigo
1000
1100
1500
2000
2040
2300
4000
OR
SELECT *
FROM tbl_codigospostais
codigo
1000
2000
2040
2300
4000
local
LISBOA
SANTARM
RIO MAIOR
TOMAR
PORTO
local
LISBOA
LISBOA
LISBOA
SANTARM
RIO MAIOR
TOMAR
PORTO
codigo
1000
1100
1500
2000
2040
2300
4000
OR
SELECT *
FROM tbl_codigospostais
codigo
1000
2000
2040
2300
4000
local
LISBOA
SANTARM
RIO MAIOR
TOMAR
PORTO
local
LISBOA
LISBOA
LISBOA
SANTARM
RIO MAIOR
TOMAR
PORTO
codigo
1000
1100
1500
2000
2040
2300
4000
NOT
SELECT *
FROM tbl_codigospostais
codigo
1100
1500
local
LISBOA
LISBOA
local
LISBOA
LISBOA
LISBOA
SANTARM
RIO MAIOR
TOMAR
PORTO
NOT/IS
SELECT *
FROM tbl_codigospostais
WHERE IS NOT NULL;
codigo
1000
1100
1500
2000
2040
2300
4000
local
LISBOA
LISBOA
LISBOA
SANTARM
RIO MAIOR
TOMAR
PORTO
SELECT *
FROM tbl_codigospostais
WHERE IS NULL;
codigo
local
codigo
1000
1100
1500
2000
2040
2300
4000
local
LISBOA
LISBOA
LISBOA
SANTARM
RIO MAIOR
TOMAR
PORTO
codigo
1000
1100
1500
2000
2040
2300
4000
NOT
SELECT *
FROM tbl_codigospostais
codigo
1100
1500
local
LISBOA
LISBOA
local
LISBOA
LISBOA
LISBOA
SANTARM
RIO MAIOR
TOMAR
PORTO
LIKE
Comparao entre um valor e uma cadeia de valores
(dados).
codigo
case sensitive.
1000
1100
% todos os carateres de qualquer comprimento 1500
2000
_ todos os carateres de 1 comprimento.
2040
SELECT *
FROM tbl_codigospostais
WHERE local like L%;
codigo
local
1000 LISBOA
1100 LISBOA
1500 LISBOA
2300
4000
local
LISBOA
LISBOA
LISBOA
SANTAR
M
RIO
MAIOR
TOMAR
PORTO
LIKE
SELECT *
FROM tbl_codigospostais
WHERE local like _i%;
codigo
1000
1100
1500
2000
2040
2300
4000
local
LISBOA
LISBOA
LISBOA
SANTAR
M
RIO
MAIOR
TOMAR
PORTO
codigo
1000
1100
1500
2000
LIKE
SELECT *
FROM tbl_codigospostais
WHERE local like _I%;
2040
codigo
1000
1100
1500
2040
local
LISBOA
LISBOA
LISBOA
RIO
MAIOR
2300
4000
local
LISBOA
LISBOA
LISBOA
SANTAR
M
RIO
MAIOR
TOMAR
PORTO
codigo
1000
1100
1500
2000
2040
2300
4000
IN
codigo
1000
1100
1500
4000
local
LISBOA
LISBOA
LISBOA
PORTO
local
LISBOA
LISBOA
LISBOA
SANTARM
RIO MAIOR
TOMAR
PORTO
codigo
1000
1100
1500
2000
2040
2300
4000
BETWEEN
local
LISBOA
LISBOA
LISBOA
SANTARM
RIO MAIOR
TOMAR
PORTO
local
LISBOA
LISBOA
SANTARM
RIO MAIOR
codigo
1000
1100
1500
2000
2040
2300
4000
DISTINCT
local
LISBOA
LISBOA
LISBOA
SANTARM
RIO MAIOR
TOMAR
PORTO
local
LISBOA
LISBOA
LISBOA
SANTARM
RIO MAIOR
TOMAR
PORTO
ORDER BY
A ordenao pode ser realizada atravs da clusula ORDER BY no comando SELECT. Esta clusula, se
existir, aparece sempre posicionada no final do comando SELECT.
[WHERE Condio ]
[GROUP BY ............]
[HAVING ]
[ORDER BY Campo [ASC | DESC], Campo [ASC | DESC]]
Onde Campo representa o nome de um Campo, uma Expresso ou a Posio pela qual se pretende
ordenar o resultado do SELECT.
ASC indica que a ordenao ASCendente e DESC indica que a ordenao DESCendente.
Por defeito, ou seja, caso no seja indicado um tipo de ordenao, esta efectuada por ordem
ascendente.
codigo
1000
1100
1500
2000
2040
2300
4000
ORDER BY
SELECT *
FROM tbl_codigospostais
WHERE (codigo < 1100 OR codigo > 1500)
codigo
ORDER BY codigo ASC;
1000
2000
2040
2300
4000
local
LISBOA
SANTARM
RIO MAIOR
TOMAR
PORTO
local
LISBOA
LISBOA
LISBOA
SANTARM
RIO MAIOR
TOMAR
PORTO
ORDER BY
SELECT *
FROM tbl_codigospostais
ORDER BY codigo ASC, local DESC;
codigo
1000
1100
1500
2000
2040
2300
4000
local
LISBOA
LISBOA
LISBOA
SANTARM
RIO MAIOR
TOMAR
PORTO
codigo
1000
1100
1500
2000
2040
2300
4000
Seleo de Expresses
codigo
1000
1100
1500
local
LISBOA
LISBOA
LISBOA
Expr1
2000
2100
2500
local
LISBOA
LISBOA
LISBOA
SANTARM
RIO MAIOR
TOMAR
PORTO
codigo
1000
1100
1500
2000
2040
2300
4000
Seleo de Expresses
local
LISBOA
LISBOA
LISBOA
SANTARM
RIO MAIOR
TOMAR
PORTO
codigo
1000
1100
1500
local
LISBOA
LISBOA
LISBOA
Novo Cdigo
2000
2100
2500
Funes
Def. Permitem aplicar formulas na query para atingir e
formatar resultados.
Estas podem ser funes de linha e funes de grupo.
Um funo de linha devolve um resultado por linha da
tabela acedida.
J uma funo de grupo retorna um resultado por grupo
de registros.
Funes de Linha
Funes de Grupo
Funes de Grupo Existentes:
AVG() - Mdia
COUNT() Total de registos
FIRST() Mostra o primeiro valor
LAST() Mostra o ultimo valor
MAX() O mximo (Maior)
MIN() O Mnimo (valor mais pequeno)
SUM() Soma dos resultados
VARIANCE(), STDDEV e STDEVP () (Estatsticas)
Insert Into
Sintaxe:
INSERT INTO TABLE_NAME (column1, column2,
column3,...columnN)]
VALUES (value1, value2, value3,...valueN);
No 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, Setbal);
Update
Sintaxe:
UPDATE table_name
SET column1 = value1, column2 = value2...., columnN =
valueN
WHERE [condition];
(na condio pode-se combiner and e or)
UPDATE
UPDATE from tbl_codigopostal set local= PORTO
where codigo=2000;
codigo
1000
1100
1500
2000
2040
2300
4000
local
LISBOA
LISBOA
LISBOA
SANTARM
RIO MAIOR
TOMAR
PORTO
codigo
1000
1100
1500
2000
2040
2300
4000
local
LISBOA
LISBOA
LISBOA
PORTO
RIO MAIOR
TOMAR
PORTO
DELETE
Sintaxe:
DELETE FROM table_name
WHERE [condition];
(na condio pode-se usar o AND e OR).
Cuidado ao realizar o: Delete From table;
DELETE - Exemplos
Delete from tbl_codigopostalcodigo
1000
where local=PORTO;
1100
1500
2000
2040
2300
4000
local
LISBOA
LISBOA
LISBOA
PORTO
RIO MAIOR
TOMAR
PORTO
codigo
1000
1100
1500
2040
2300
local
LISBOA
LISBOA
LISBOA
RIO MAIOR
TOMAR
Nome
Antnio Dias
Clia Morais
Isabel Silva
Jos Antnio
Idade
43
36
28
17
Telefone
789654
123456
333555
Cod_postal
1000
1000
2040
2000
Cdigo
1000
2000
2040
4000
Local
Lisboa
Santarm
Rio Maior
Porto
SELECT *
FROM Pessoa, Postal
Obtm-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.
Id
Nome
7
1
7
1
7
1
7
1
5
4
5
4
5
4
5
4
1
2
Antnio Dias
Antnio Dias
43
789654
1000
2000 Santarm
Antnio Dias
43
789654
1000
Antnio Dias
43
789654
1000
4000 Porto
Clia Morais
36
123456
1000
1000 Lisboa
Clia Morais
36
123456
1000
2000 Santarm
Clia Morais
36
123456
1000
Clia Morais
36
123456
1000
4000 Porto
Isabel Silva
28
2040
1000 Lisboa
Id
71
71
71
71
54
54
54
54
12
12
12
12
49
49
49
49
Nome
Antnio Dias
Antnio Dias
Antnio Dias
Antnio Dias
Clia Morais
Clia Morais
Clia Morais
Clia Morais
Isabel Silva
Isabel Silva
Isabel Silva
Isabel Silva
Jos Antnio
Jos Antnio
Jos Antnio
Jos Antnio
Idade
43
43
43
43
36
36
36
36
28
28
28
28
17
17
17
17
Telefone
789654
789654
789654
789654
123456
123456
123456
123456
333555
333555
333555
333555
Cod_postal Cdigo
Local
1000
1000 Lisboa
1000
2000 Santarm
1000
2040 Rio Maior
1000
4000 Porto
1000
1000 Lisboa
1000
2000 Santarm
1000
2040 Rio Maior
1000
4000 Porto
2040
1000 Lisboa
2040
2000 Santarm
2040
2040 Rio Maior
2040
4000 Porto
2000
1000 Lisboa
2000
2000 Santarm
2000
2040 Rio Maior
2000
4000 Porto
SELECT *
FROM Pessoa, Postal
WHERE Cod_postal = Cdigo
Id
Nome
7
1
5
4
1
2
4
9
Antnio Dias
Clia Morais
36
Isabel Silva
28
Jos Antnio
17
123456
333555
1000
1000 Lisboa
2040
2000
2000 Santarm
Equi-Join
Acontece quando todas as colunas das tabelas so
apresentadas e a ligao entre as tabelas feita
atravs de uma igualdade, dando origem assim a duas
colunas de contedos exatamente iguais.
SELECT *
FROM Pessoa, Postal
Id
Nome
7
1
5
4
1
2
4
9
Antnio Dias
Clia Morais
36
Isabel Silva
28
Jos Antnio
17
123456
333555
1000
1000 Lisboa
2040
2000
2000 Santarm
Natural Join
Acontece quando todas as colunas envolvidas na
ligao entre tabelas so apresentadas sem repetio
de colunas.
SELECT Pessoa.*, Postal.Local
FROM Pessoa, Postal
WHERE Cod_postal = Cdigo
INNER JOIN
Estes dois tipos de ligao entre tabelas fazem parte de
um tipo de ligao mais geral denominada INNER JOIN.
Num INNER JOIN, apenas so apresentados os registos
em que exista ligao entre as tabelas.
http://www.codeproject.com/Articles/33052/VisualRepresentation-of-SQL-Joins
INNER JOIN
Embora existam diversos tipos de ligao entre tabelas
(JOIN), este o tipo mais comum e utilizado.
Pretende-se selecionar o nome e morada completa
(cdigo e localidade) de todas as pessoas da tabela
Pessoa.
SELECT Nome, Cod_postal, Local
FROM Pessoa, Postal
Where Cod_postal = Cdigo
INNER JOIN
Embora ainda de uso pouco comum, possvel, 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 Cdigo Postal.
SELECT Nome, Cod_postal, Local
FROM Pessoa INNER JOIN Postal
Nome
Cod_postal
Local
Antnio Dias
1000 Lisboa
Clia Morais
1000 Lisboa
Jos Antnio
2000 Santarm
Isabel Silva
2040 Rio Maior
ON Pessoa.Cod_postal = Postal.Cdigo
ORDER BY Pessoa.Cod_postal
Antnio Dias
Clia Morais
1000
1000
Jos Antnio
Isabel Silva
2000
2040
1000
1000
1100
2000
2040
2300
4000
Lisboa
Lisboa
Lisboa
Santarm
Rio Maior
Tomar
Porto
OUTER JOIN
Quando o Outer Join efectuado direita, so 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
comisso.
OUTER JOIN
Pretende-se selecionar todas as pessoas da tabela
pessoa, assim como os correspondentes valores de
comisso.
SELECT Nome, Valor
FROM Comisso RIGHT JOIN Pessoa
Nome
Antnio Dias
Antnio Dias
Isabel Silva
Jos Antnio
Jos Antnio
Joo Silva
Valor
100
200
1250
750
ON Comisso.Id = Pessoa.Id
Saber todas as pessoas e quais as correspondncias na
comisso mesmo que no tenham valor.
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 cdigos postais existentes diferentes do local LISBOA.
UNION
Uma unio no propriamente uma ligao entre tabelas.
A UNION permite juntar o contedo de mltiplos comandos SELECT.
Pretende-se juntar o cdigo e a descrio da tabela mensagens aos cdigos
postais.
Depois de executados os comandos, os resultados obtidos sero:
Id_msg
10
30
40
1000
2040
4000
Mensagem
Comisso de vendas
Vendas extra
Refeies
Lisboa
Rio Maior
Porto
Funes de agregao/conjunto/grupo
Estas funes, tambm designadas por Funes Estatsticas, tm por objetivo obter informao sobre conjuntos de
linhas especificadas na clusula WHERE ou sobre grupos de linhas indicadas na clusula GROUP BY.
Funo
Descrio
MIN(campo)
SUM(campo)
AVG(campo)
FUNO COUNT
A funo de agregao COUNT devolve o nmero de
linhas que resultam num SELECT.
Pode ser utilizada de trs formas distintas:
Forma
COUNT (*)
COUNT (coluna)
COUNT (DISTINCT coluna)
Descrio
Devolve o nmero de linhas que resulta de um SELECT.
Devolve o nmero de ocorrncias na coluna diferentes de NULL.
Devolve o nmero de ocorrncias (sem repeties) na coluna.
MIN e MAX
As funes de agregao MIN e MAX permitem obter o menor e o
maior valor de uma determinada coluna.
Exemplo: Pretende-se saber qual o salrio mais elevado e o salrio mais baixo da
tabela Pessoa.
SELECT MAX (salrio) AS [Salrio mais elevado],
MIN (salrio) AS [Salrio mais baixo]
FROM Pessoa
Exemplos prticos
Pretende-se saber a idade da pessoa mais nova e a
idade da pessoa mais velha da tabela Pessoa.
?
Qual o pas com mais e com menos populao?
?
Nota: tambm funciona alfabeticamente.
Id
42
5
32
37
49
14
75
SUM
Nome
Antnio Dias
Clia Morais
Florinda Simes
Isabel Espada
Jos Antnio
Nascimento Augusto
Pedro Santos
Idade
43
36
35
28
17
35
42
Salrio
Telefone
94000 7896544
170000 1234565
147000
86000
210000
220000 4561233
235000
Cod_postal
1000
1000
4000
2040
1000
2300
2040
AVG
A funo AVG devolve a mdia dos valores de uma determinada coluna.
Pretende-se saber a mdia das idades da tabela Pessoa.
SELECT AVG (idade) AS [Mdia de Idades]
FROM Pessoa
Mdia de idades
33.714285714285714
Agrupando a informao
Agrupando a informao
Pretende-se mostrar as comisses e respetivos valores, ordenando o resultado por Id da
tabela comisso.
SELECT Id_comisso, Valor
FROM Comisso
ORDER BY Id_comisso
Id_comisso
14
14
14
14
25
25
25
Valor
2600
400
3750
10500
370
2400
100
Total
40180
Id_comisso
37
37
37
37
40
42
42
Valor
120
5500
14230
20
20
150
20
Agrupando a informao
No entanto, se o objectivo fosse obter a soma das comisses por cada Id_comisso, o
resultado apresentado no seria o pretendido.
Para resolver essas questes necessrio, antes de aplicar as funes de agregao,
possuir a informao agrupada.
SELECT campo1, campo2, ... campon
FROM tabela
[WHERE Condio ]
[GROUP BY ............]
Clusula GROUP BY
Esta clusula divide o resultado de um SELECT em grupos de
resultados que iro ser tratados com as funes de agregao.
A clusula GROUP BY utilizada para agrupar informao.
Os registos so processados em grupos de caractersticas semelhantes.
As funes de agregao podem ser utilizadas para obter informao
sobre cada um dos grupos.
Agrupando a informao
Pretende-se mostrar as comisses e respetivos valores, ordenando o resultado por Id da
tabela comisso.
SELECT Id_comisso, Valor
FROM Comisso
ORDER BY Id_comisso
Id_comisso
14
14
14
14
25
25
25
Valor
2600
400
3750
10500
370
2400
100
Total
40180
Id_comisso
37
37
37
37
40
42
42
Valor
120
5500
14230
20
20
150
20
Agrupando a informao
Pretende-se saber, para cada Id, o total de valores de
comisses.
SELECT Id_comisso, SUM(Valor) AS Total
FROM Comisso
GROUP BY Id_comisso
Id_comisso
Total
14
25
37
40
42
17250
2870
19870
20
170
Exerccios prticos
Pretende-se saber, para cada Id, o maior valor de
comisso?
Pretende-se saber para cada Id, o maior valor de
comisso, efectuando a ordenao descendente por
maior valor de comisso?
Resposta
SELECT MAX(Valor) AS Maior, Id_comisso
FROM Comisso
GROUP BY Id_comisso
ORDER BY MAX(Valor) DESC
Maior
Id_comisso
14230
10500
2400
150
20
37
14
25
42
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=Micros
oft.ACE.OLEDB.12.0;Data Source=C:\test.accdb")
comm.CommandType = CommandType.Text;
conn.Open();
MessageBox.Show(returnValue.ToString());
// Weight int