SlideShare una empresa de Scribd logo
1 de 13
MySQL
O comando SELECT

ordenação

Escola Secundária
D. Afonso Sanches
Vila do Conde

Graciano Torrão
( http://gracianotorrao.com )

Programação e Sistemas de Informação
Introdução:
Ordenação por uma coluna
Ordenação por várias colunas
Selecção de expressões
Ordenação por posição
Ordenação e NULL
Eliminação de repetições

Graciano Torrão
( http://gracianotorrao.com )

Programação e Sistemas de Informação
Tabelas que vamos utilizar como exemplo:
#criar a tabela
CREATE TABLE Produto
(
codigo INT NULL PRIMARY KEY AUTO_INCREMENT,
nome VARCHAR(15) NOT NULL,
preco DECIMAL(4,2) NOT NULL,
stock SMALLINT NOT NULL
) TYPE=InnoDB;
#inserir dados de teste
INSERT INTO Produto (nome, preco, stock) VALUES
('batata', 32.30, 40),
('cenoura', 12, 45),
('laranja', 11.3, 100),
('alho', 1, 12),
('cebola', 1332.50, 5),
('couve', 13.00, 100);

mysql> select * from Produto;
+--------+---------+-------+-------+
| codigo | nome
| preco | stock |
+--------+---------+-------+-------+
|
1 | batata | 32.30 |
40 |
|
2 | cenoura | 12.00 |
45 |
|
3 | laranja | 11.30 |
100 |
|
4 | alho
| 1.00 |
12 |
|
5 | cebola | 99.99 |
5 |
|
6 | couve
| 13.00 |
100 |
+--------+---------+-------+-------+
6 rows in set (0.00 sec)

#criar a tabela
CREATE TABLE t1
(
c1 INT PRIMARY KEY,
c2 VARCHAR(15) NOT NULL,
c3 DECIMAL(4,2) NULL,
c4 INT NULL
) TYPE=InnoDB;
#inserir dados de teste
INSERT INTO t1 VALUES
(3, "joana", 3, 1),
(1, "carla", 3, NULL),
(2, "ana", 4.8, 7),
(6, "maria", 3, NULL),
(4, "catarina", 3, 2),
(5, "margarida", 67.4, NULL),
(7, "isabel", 3.2, 0);
mysql> select * from t1;
+----+-----------+-------+------+
| c1 | c2
| c3
| c4
|
+----+-----------+-------+------+
| 1 | carla
| 3.00 | NULL |
| 2 | ana
| 4.80 |
7 |
| 3 | joana
| 3.00 |
1 |
| 4 | catarina | 3.00 |
2 |
| 5 | margarida | 67.40 | NULL |
| 6 | maria
| 3.00 | NULL |
| 7 | isabel
| 3.20 |
0 |
+----+-----------+-------+------+
7 rows in set (0.00 sec)

Graciano Torrão
( http://gracianotorrao.com )

Programação e Sistemas de Informação
Ordenação
Quando estamos a utilizar o comando SELECT e pretendemos obter os resultados organizados
de uma determinada forma, devemos recorrer à cláusula ORDER BY.

A sintaxe do comando SELECT é a seguinte:
SELECT campo1, campo2, campo3, ..., campon, *
FROM tabela1, tabela2, … tabelak
…
[ORDER BY campo [ASC|DESC], campo [ASC|DESC], ...]

Graciano Torrão
( http://gracianotorrao.com )

Programação e Sistemas de Informação
Ordenação por uma coluna
Basta indicar na cláusula ORDER BY qual o nome da coluna pela qual pretendemos ordenar os
resultados.
mysql> select * from Produto order by stock;
+--------+---------+-------+-------+
| codigo | nome
| preco | stock |
+--------+---------+-------+-------+
|
17 | cebola | 99.99 |
5 |
|
16 | alho
| 1.00 |
12 |
|
13 | batata | 32.30 |
40 |
|
14 | cenoura | 12.00 |
45 |
|
15 | laranja | 11.30 |
100 |
|
18 | couve
| 13.00 |
100 |
+--------+---------+-------+-------+
6 rows in set (0.00 sec)

mysql> select nome from Produto order by nome asc;
+---------+
| nome
|
+---------+
| alho
|
| batata |
| cebola |
| cenoura |
| couve
|
| laranja |
+---------+
6 rows in set (0.00 sec)

mysql> select * from Produto order by stock;
+--------+---------+-------+-------+
| codigo | nome
| preco | stock |
+--------+---------+-------+-------+
|
17 | cebola | 99.99 |
5 |
|
16 | alho
| 1.00 |
12 |
|
13 | batata | 32.30 |
40 |
|
14 | cenoura | 12.00 |
45 |
|
15 | laranja | 11.30 |
100 |
|
18 | couve
| 13.00 |
100 |
+--------+---------+-------+-------+
6 rows in set (0.00 sec)

mysql> select nome from Produto order by nome desc;
+---------+
| nome
|
+---------+
| laranja |
| couve
|
| cenoura |
| cebola |
| batata |
| alho
|
+---------+
6 rows in set (0.00 sec)

Graciano Torrão
( http://gracianotorrao.com )

Programação e Sistemas de Informação
Ordenação por uma coluna

continuação

Exemplos com a tabela t1.
mysql> select * from t1 order by c3 asc;
+----+-----------+-------+------+
| c1 | c2
| c3
| c4
|
+----+-----------+-------+------+
| 1 | carla
| 3.00 | NULL |
| 3 | joana
| 3.00 |
1 |
| 4 | catarina | 3.00 |
2 |
| 6 | maria
| 3.00 | NULL |
| 7 | isabel
| 3.20 |
0 |
| 2 | ana
| 4.80 |
7 |
| 5 | margarida | 67.40 | NULL |
+----+-----------+-------+------+
7 rows in set (0.00 sec)

mysql> select c2 from t1 order by c2;
+-----------+
| c2
|
+-----------+
| ana
|
| carla
|
| catarina |
| isabel
|
| joana
|
| margarida |
| maria
|
+-----------+
7 rows in set (0.00 sec)

mysql> select * from t1 order by c3 desc;
+----+-----------+-------+------+
| c1 | c2
| c3
| c4
|
+----+-----------+-------+------+
| 5 | margarida | 67.40 | NULL |
| 2 | ana
| 4.80 |
7 |
| 7 | isabel
| 3.20 |
0 |
| 1 | carla
| 3.00 | NULL |
| 3 | joana
| 3.00 |
1 |
| 4 | catarina | 3.00 |
2 |
| 6 | maria
| 3.00 | NULL |
+----+-----------+-------+------+
7 rows in set (0.00 sec)

mysql> select c2 from t1 order by c2 desc;
+-----------+
| c2
|
+-----------+
| maria
|
| margarida |
| joana
|
| isabel
|
| catarina |
| carla
|
| ana
|
+-----------+
7 rows in set (0.00 sec)

Graciano Torrão
( http://gracianotorrao.com )

Programação e Sistemas de Informação
Ordenação por várias colunas
Quando a ordenação se pretende por mais do que uma coluna, basta ir acrescentanto à cláusula
ORDER BY os nomes das colunas pelos quais se irão fazer as várias subordenações.
mysql> select stock, nome from Produto order by stock, nome;
+-------+---------+
| stock | nome
|
+-------+---------+
|
5 | cebola |
|
12 | alho
|
|
40 | batata |
|
45 | cenoura |
|
100 | couve
|
|
100 | laranja |
+-------+---------+
6 rows in set (0.00 sec)

mysql> select stock, nome from Produto order by stock, nome desc;
+-------+---------+
| stock | nome
|
+-------+---------+
|
5 | cebola |
|
12 | alho
|
|
40 | batata |
|
45 | cenoura |
|
100 | laranja |
|
100 | couve
|
+-------+---------+
6 rows in set (0.00 sec)

Graciano Torrão
( http://gracianotorrao.com )

Programação e Sistemas de Informação
Ordenação por várias colunas

continuação

Exemplos com a tabela t1
mysql> select c3, c2 from t1 order by c3, c2;
+-------+-----------+
| c3
| c2
|
+-------+-----------+
| 3.00 | carla
|
| 3.00 | catarina |
| 3.00 | joana
|
| 3.00 | maria
|
| 3.20 | isabel
|
| 4.80 | ana
|
| 67.40 | margarida |
+-------+-----------+
7 rows in set (0.00 sec)
mysql> select c3, c2 from t1 order by c3, c2 desc;
+-------+-----------+
| c3
| c2
|
+-------+-----------+
| 3.00 | maria
|
| 3.00 | joana
|
| 3.00 | catarina |
| 3.00 | carla
|
| 3.20 | isabel
|
| 4.80 | ana
|
| 67.40 | margarida |
+-------+-----------+
7 rows in set (0.00 sec)

Graciano Torrão
( http://gracianotorrao.com )

Programação e Sistemas de Informação
Ordenação por expressões
Nem sempre desejamos obter os resultados ordenados a partir de uma coluna existente mas de um
qualquer cálculo que realizamos (expressão).
Nesse caso a ordenação será feita pela coluna resultante da expressão avaliada.
mysql> select nome, stock - codigo from Produto;
+---------+----------------+
| nome
| stock - codigo |
+---------+----------------+
| batata |
27 |
| cenoura |
31 |
mysql> select nome, stock - codigo as expr1 from Produto;
| laranja |
85 |
+---------+-------+
| alho
|
-4 |
| expr1 |
| cebola | nome
|
-12 |
+---------+-------+
| couve
|
82 |
| batata |
27 |
+---------+----------------+
6 rows in | cenoura |
set (0.00 sec) 31 |
select nome, stock - codigo as expr1 from Produto order by expr1;
| laranja mysql>85 |
|
+---------+-------+
| alho
|
-4 |
| cebola || nome
-12 | | expr1 |
| couve +---------+-------+
|
82 |
| cebola
-12 |
+---------+-------+ |
|set (0.00 |sec) -4 |
alho
6 rows in
| batata |
27 |
| cenoura |
31 |
| couve
|
82 |
| laranja |
85 |
+---------+-------+
6 rows in set (0.00 sec)

Graciano Torrão
( http://gracianotorrao.com )

Programação e Sistemas de Informação
Ordenação por expressões

continuação

Exemplos com a tabela t1.
mysql> select c3, 2 * c3 as dobro from t1 order by dobro;
+-------+--------+
| c3
| dobro |
+-------+--------+
| 3.00 |
6.00 |
| 3.00 |
6.00 |
| 3.00 |
6.00 |
| 3.00 |
6.00 |
| 3.20 |
6.40 |
| 4.80 |
9.60 |
| 67.40 | 134.80 |
+-------+--------+
7 rows in set (0.00 sec)

mysql> select c1, c2 from t1 order by c1 - c3;
+----+-----------+
| c1 | c2
|
+----+-----------+
| 5 | margarida |
| 2 | ana
|
| 1 | carla
|
| 3 | joana
|
| 4 | catarina |
| 6 | maria
|
| 7 | isabel
|
+----+-----------+
7 rows in set (0.00 sec)

Graciano Torrão
( http://gracianotorrao.com )

Programação e Sistemas de Informação
Ordenação e NULL
O tratamento que é dado ao valor NULL varia de sistema para sistema.
Neste caso acontece o seguinte:
mysql> select * from t1;
+----+-----------+-------+------+
| c1 | c2
| c3
| c4
|
+----+-----------+-------+------+
| 1 | carla
| 3.00 | NULL |
| 2 | ana
| 4.80 |
7 |
| 3 | joana
| 3.00 |
1 |
| 4 | catarina | 3.00 |
2 |
| 5 | margarida | 67.40 | NULL |
| 6 | maria
| 3.00 | NULL |
| 7 | isabel
| 3.20 |
0 |
+----+-----------+-------+------+
7 rows in set (0.00 sec)

mysql> select * from t1 order by c4 asc;
+----+-----------+-------+------+
| c1 | c2
| c3
| c4
|
+----+-----------+-------+------+
| 1 | carla
| 3.00 | NULL |
| 5 | margarida | 67.40 | NULL |
| 6 | maria
| 3.00 | NULL |
| 7 | isabel
| 3.20 |
0 |
| 3 | joana
| 3.00 |
1 |
| 4 | catarina | 3.00 |
2 |
| 2 | ana
| 4.80 |
7 |
+----+-----------+-------+------+
7 rows in set (0.00 sec)

mysql> select * from t1 order by c4 desc;
+----+-----------+-------+------+
| c1 | c2
| c3
| c4
|
+----+-----------+-------+------+
| 2 | ana
| 4.80 |
7 |
| 4 | catarina | 3.00 |
2 |
| 3 | joana
| 3.00 |
1 |
| 7 | isabel
| 3.20 |
0 |
| 1 | carla
| 3.00 | NULL |
| 5 | margarida | 67.40 | NULL |
| 6 | maria
| 3.00 | NULL |
+----+-----------+-------+------+
7 rows in set (0.00 sec)

Graciano Torrão
( http://gracianotorrao.com )

Programação e Sistemas de Informação
Eliminação de repetições
Por vezes torna-se necessário eliminar as linhas repetidas. Nesses casos recorremos à cláusula
DISTINCT.
mysql> select * from Postal;
+--------+---------------+
| codigo | localidade
|
+--------+---------------+
|
1000 | LISBOA
|
|
1100 | LISBOA
|
|
1200 | LISBOA
|
|
1500 | LISBOA
|
|
2000 | SANTAREM
|
|
2300 | TOMAR
|
|
3000 | COIMBRA
|
|
4000 | PORTO
|
|
4100 | PORTO
|
|
4200 | PORTO
|
|
4480 | VILA DO CONDE |
|
9000 | FUNCHAL
|
+--------+---------------+
12 rows in set (0.01 sec)

mysql> select all localidade
from Postal;
+---------------+
| localidade
|
+---------------+
| LISBOA
|
| LISBOA
|
| LISBOA
|
| LISBOA
|
| SANTAREM
|
| TOMAR
|
| COIMBRA
|
| PORTO
|
| PORTO
|
| PORTO
|
| VILA DO CONDE |
| FUNCHAL
|
+---------------+
12 rows in set (0.00 sec)

mysql> select distinct
localidade from Postal;
+---------------+
| localidade
|
+---------------+
| LISBOA
|
| SANTAREM
|
| TOMAR
|
| COIMBRA
|
| PORTO
|
| VILA DO CONDE |
| FUNCHAL
|
+---------------+
7 rows in set (0.00 sec)

Graciano Torrão
( http://gracianotorrao.com )

Programação e Sistemas de Informação
Dúvidas?

Escola Secundária
D. Afonso Sanches
Vila do Conde

Graciano Torrão

13

( graciano.torrao@gmail.com )
( http://gracianotorrao.com )

Programação e Sistemas de Informação

Más contenido relacionado

Destacado

Apresentação formação web - up marketing digital - módulo ii - 2º fds
Apresentação   formação web - up marketing digital - módulo ii - 2º fdsApresentação   formação web - up marketing digital - módulo ii - 2º fds
Apresentação formação web - up marketing digital - módulo ii - 2º fdsRangel Javier
 
Progweb Aula8
Progweb Aula8Progweb Aula8
Progweb Aula8softeam
 
Banco de dadados MySQL com PHP
Banco de dadados MySQL com PHPBanco de dadados MySQL com PHP
Banco de dadados MySQL com PHPLeonardo Soares
 
Recursos e Benefícios do MySQL
Recursos e Benefícios do MySQLRecursos e Benefícios do MySQL
Recursos e Benefícios do MySQLMySQL Brasil
 
MySQL para Desenvolvedores de Produto
MySQL para Desenvolvedores de ProdutoMySQL para Desenvolvedores de Produto
MySQL para Desenvolvedores de ProdutoMySQL Brasil
 
BANCO DE DADOS RELACIONAIS
BANCO DE DADOS RELACIONAIS BANCO DE DADOS RELACIONAIS
BANCO DE DADOS RELACIONAIS Antonio Pedro
 
Tutorial - Criando Banco com MySQL Workbench
Tutorial - Criando Banco com MySQL WorkbenchTutorial - Criando Banco com MySQL Workbench
Tutorial - Criando Banco com MySQL WorkbenchDaniel Brandão
 
Banco de Dados Não Relacionais vs Banco de Dados Relacionais
Banco de Dados Não Relacionais vs Banco de Dados RelacionaisBanco de Dados Não Relacionais vs Banco de Dados Relacionais
Banco de Dados Não Relacionais vs Banco de Dados Relacionaisalexculpado
 
Banco de Dados - MySQL Basico
Banco de Dados - MySQL BasicoBanco de Dados - MySQL Basico
Banco de Dados - MySQL BasicoRangel Javier
 
Cadangan skrip-jawapan-kertas-3-spm-2014-bahagian-b
Cadangan skrip-jawapan-kertas-3-spm-2014-bahagian-bCadangan skrip-jawapan-kertas-3-spm-2014-bahagian-b
Cadangan skrip-jawapan-kertas-3-spm-2014-bahagian-bMohd Muzlimi Junoh
 
Modelos de banco de dados
Modelos de banco de dadosModelos de banco de dados
Modelos de banco de dadosEdgar Stuart
 

Destacado (14)

O comando SELECT (JOIN)
O comando SELECT (JOIN)O comando SELECT (JOIN)
O comando SELECT (JOIN)
 
Apresentação formação web - up marketing digital - módulo ii - 2º fds
Apresentação   formação web - up marketing digital - módulo ii - 2º fdsApresentação   formação web - up marketing digital - módulo ii - 2º fds
Apresentação formação web - up marketing digital - módulo ii - 2º fds
 
Progweb Aula8
Progweb Aula8Progweb Aula8
Progweb Aula8
 
Banco de dadados MySQL com PHP
Banco de dadados MySQL com PHPBanco de dadados MySQL com PHP
Banco de dadados MySQL com PHP
 
MySQL - the database
MySQL - the databaseMySQL - the database
MySQL - the database
 
My sql apresentação
My sql apresentaçãoMy sql apresentação
My sql apresentação
 
Recursos e Benefícios do MySQL
Recursos e Benefícios do MySQLRecursos e Benefícios do MySQL
Recursos e Benefícios do MySQL
 
MySQL para Desenvolvedores de Produto
MySQL para Desenvolvedores de ProdutoMySQL para Desenvolvedores de Produto
MySQL para Desenvolvedores de Produto
 
BANCO DE DADOS RELACIONAIS
BANCO DE DADOS RELACIONAIS BANCO DE DADOS RELACIONAIS
BANCO DE DADOS RELACIONAIS
 
Tutorial - Criando Banco com MySQL Workbench
Tutorial - Criando Banco com MySQL WorkbenchTutorial - Criando Banco com MySQL Workbench
Tutorial - Criando Banco com MySQL Workbench
 
Banco de Dados Não Relacionais vs Banco de Dados Relacionais
Banco de Dados Não Relacionais vs Banco de Dados RelacionaisBanco de Dados Não Relacionais vs Banco de Dados Relacionais
Banco de Dados Não Relacionais vs Banco de Dados Relacionais
 
Banco de Dados - MySQL Basico
Banco de Dados - MySQL BasicoBanco de Dados - MySQL Basico
Banco de Dados - MySQL Basico
 
Cadangan skrip-jawapan-kertas-3-spm-2014-bahagian-b
Cadangan skrip-jawapan-kertas-3-spm-2014-bahagian-bCadangan skrip-jawapan-kertas-3-spm-2014-bahagian-b
Cadangan skrip-jawapan-kertas-3-spm-2014-bahagian-b
 
Modelos de banco de dados
Modelos de banco de dadosModelos de banco de dados
Modelos de banco de dados
 

O comando SELECT (ordenação)

  • 1. MySQL O comando SELECT ordenação Escola Secundária D. Afonso Sanches Vila do Conde Graciano Torrão ( http://gracianotorrao.com ) Programação e Sistemas de Informação
  • 2. Introdução: Ordenação por uma coluna Ordenação por várias colunas Selecção de expressões Ordenação por posição Ordenação e NULL Eliminação de repetições Graciano Torrão ( http://gracianotorrao.com ) Programação e Sistemas de Informação
  • 3. Tabelas que vamos utilizar como exemplo: #criar a tabela CREATE TABLE Produto ( codigo INT NULL PRIMARY KEY AUTO_INCREMENT, nome VARCHAR(15) NOT NULL, preco DECIMAL(4,2) NOT NULL, stock SMALLINT NOT NULL ) TYPE=InnoDB; #inserir dados de teste INSERT INTO Produto (nome, preco, stock) VALUES ('batata', 32.30, 40), ('cenoura', 12, 45), ('laranja', 11.3, 100), ('alho', 1, 12), ('cebola', 1332.50, 5), ('couve', 13.00, 100); mysql> select * from Produto; +--------+---------+-------+-------+ | codigo | nome | preco | stock | +--------+---------+-------+-------+ | 1 | batata | 32.30 | 40 | | 2 | cenoura | 12.00 | 45 | | 3 | laranja | 11.30 | 100 | | 4 | alho | 1.00 | 12 | | 5 | cebola | 99.99 | 5 | | 6 | couve | 13.00 | 100 | +--------+---------+-------+-------+ 6 rows in set (0.00 sec) #criar a tabela CREATE TABLE t1 ( c1 INT PRIMARY KEY, c2 VARCHAR(15) NOT NULL, c3 DECIMAL(4,2) NULL, c4 INT NULL ) TYPE=InnoDB; #inserir dados de teste INSERT INTO t1 VALUES (3, "joana", 3, 1), (1, "carla", 3, NULL), (2, "ana", 4.8, 7), (6, "maria", 3, NULL), (4, "catarina", 3, 2), (5, "margarida", 67.4, NULL), (7, "isabel", 3.2, 0); mysql> select * from t1; +----+-----------+-------+------+ | c1 | c2 | c3 | c4 | +----+-----------+-------+------+ | 1 | carla | 3.00 | NULL | | 2 | ana | 4.80 | 7 | | 3 | joana | 3.00 | 1 | | 4 | catarina | 3.00 | 2 | | 5 | margarida | 67.40 | NULL | | 6 | maria | 3.00 | NULL | | 7 | isabel | 3.20 | 0 | +----+-----------+-------+------+ 7 rows in set (0.00 sec) Graciano Torrão ( http://gracianotorrao.com ) Programação e Sistemas de Informação
  • 4. Ordenação Quando estamos a utilizar o comando SELECT e pretendemos obter os resultados organizados de uma determinada forma, devemos recorrer à cláusula ORDER BY. A sintaxe do comando SELECT é a seguinte: SELECT campo1, campo2, campo3, ..., campon, * FROM tabela1, tabela2, … tabelak … [ORDER BY campo [ASC|DESC], campo [ASC|DESC], ...] Graciano Torrão ( http://gracianotorrao.com ) Programação e Sistemas de Informação
  • 5. Ordenação por uma coluna Basta indicar na cláusula ORDER BY qual o nome da coluna pela qual pretendemos ordenar os resultados. mysql> select * from Produto order by stock; +--------+---------+-------+-------+ | codigo | nome | preco | stock | +--------+---------+-------+-------+ | 17 | cebola | 99.99 | 5 | | 16 | alho | 1.00 | 12 | | 13 | batata | 32.30 | 40 | | 14 | cenoura | 12.00 | 45 | | 15 | laranja | 11.30 | 100 | | 18 | couve | 13.00 | 100 | +--------+---------+-------+-------+ 6 rows in set (0.00 sec) mysql> select nome from Produto order by nome asc; +---------+ | nome | +---------+ | alho | | batata | | cebola | | cenoura | | couve | | laranja | +---------+ 6 rows in set (0.00 sec) mysql> select * from Produto order by stock; +--------+---------+-------+-------+ | codigo | nome | preco | stock | +--------+---------+-------+-------+ | 17 | cebola | 99.99 | 5 | | 16 | alho | 1.00 | 12 | | 13 | batata | 32.30 | 40 | | 14 | cenoura | 12.00 | 45 | | 15 | laranja | 11.30 | 100 | | 18 | couve | 13.00 | 100 | +--------+---------+-------+-------+ 6 rows in set (0.00 sec) mysql> select nome from Produto order by nome desc; +---------+ | nome | +---------+ | laranja | | couve | | cenoura | | cebola | | batata | | alho | +---------+ 6 rows in set (0.00 sec) Graciano Torrão ( http://gracianotorrao.com ) Programação e Sistemas de Informação
  • 6. Ordenação por uma coluna continuação Exemplos com a tabela t1. mysql> select * from t1 order by c3 asc; +----+-----------+-------+------+ | c1 | c2 | c3 | c4 | +----+-----------+-------+------+ | 1 | carla | 3.00 | NULL | | 3 | joana | 3.00 | 1 | | 4 | catarina | 3.00 | 2 | | 6 | maria | 3.00 | NULL | | 7 | isabel | 3.20 | 0 | | 2 | ana | 4.80 | 7 | | 5 | margarida | 67.40 | NULL | +----+-----------+-------+------+ 7 rows in set (0.00 sec) mysql> select c2 from t1 order by c2; +-----------+ | c2 | +-----------+ | ana | | carla | | catarina | | isabel | | joana | | margarida | | maria | +-----------+ 7 rows in set (0.00 sec) mysql> select * from t1 order by c3 desc; +----+-----------+-------+------+ | c1 | c2 | c3 | c4 | +----+-----------+-------+------+ | 5 | margarida | 67.40 | NULL | | 2 | ana | 4.80 | 7 | | 7 | isabel | 3.20 | 0 | | 1 | carla | 3.00 | NULL | | 3 | joana | 3.00 | 1 | | 4 | catarina | 3.00 | 2 | | 6 | maria | 3.00 | NULL | +----+-----------+-------+------+ 7 rows in set (0.00 sec) mysql> select c2 from t1 order by c2 desc; +-----------+ | c2 | +-----------+ | maria | | margarida | | joana | | isabel | | catarina | | carla | | ana | +-----------+ 7 rows in set (0.00 sec) Graciano Torrão ( http://gracianotorrao.com ) Programação e Sistemas de Informação
  • 7. Ordenação por várias colunas Quando a ordenação se pretende por mais do que uma coluna, basta ir acrescentanto à cláusula ORDER BY os nomes das colunas pelos quais se irão fazer as várias subordenações. mysql> select stock, nome from Produto order by stock, nome; +-------+---------+ | stock | nome | +-------+---------+ | 5 | cebola | | 12 | alho | | 40 | batata | | 45 | cenoura | | 100 | couve | | 100 | laranja | +-------+---------+ 6 rows in set (0.00 sec) mysql> select stock, nome from Produto order by stock, nome desc; +-------+---------+ | stock | nome | +-------+---------+ | 5 | cebola | | 12 | alho | | 40 | batata | | 45 | cenoura | | 100 | laranja | | 100 | couve | +-------+---------+ 6 rows in set (0.00 sec) Graciano Torrão ( http://gracianotorrao.com ) Programação e Sistemas de Informação
  • 8. Ordenação por várias colunas continuação Exemplos com a tabela t1 mysql> select c3, c2 from t1 order by c3, c2; +-------+-----------+ | c3 | c2 | +-------+-----------+ | 3.00 | carla | | 3.00 | catarina | | 3.00 | joana | | 3.00 | maria | | 3.20 | isabel | | 4.80 | ana | | 67.40 | margarida | +-------+-----------+ 7 rows in set (0.00 sec) mysql> select c3, c2 from t1 order by c3, c2 desc; +-------+-----------+ | c3 | c2 | +-------+-----------+ | 3.00 | maria | | 3.00 | joana | | 3.00 | catarina | | 3.00 | carla | | 3.20 | isabel | | 4.80 | ana | | 67.40 | margarida | +-------+-----------+ 7 rows in set (0.00 sec) Graciano Torrão ( http://gracianotorrao.com ) Programação e Sistemas de Informação
  • 9. Ordenação por expressões Nem sempre desejamos obter os resultados ordenados a partir de uma coluna existente mas de um qualquer cálculo que realizamos (expressão). Nesse caso a ordenação será feita pela coluna resultante da expressão avaliada. mysql> select nome, stock - codigo from Produto; +---------+----------------+ | nome | stock - codigo | +---------+----------------+ | batata | 27 | | cenoura | 31 | mysql> select nome, stock - codigo as expr1 from Produto; | laranja | 85 | +---------+-------+ | alho | -4 | | expr1 | | cebola | nome | -12 | +---------+-------+ | couve | 82 | | batata | 27 | +---------+----------------+ 6 rows in | cenoura | set (0.00 sec) 31 | select nome, stock - codigo as expr1 from Produto order by expr1; | laranja mysql>85 | | +---------+-------+ | alho | -4 | | cebola || nome -12 | | expr1 | | couve +---------+-------+ | 82 | | cebola -12 | +---------+-------+ | |set (0.00 |sec) -4 | alho 6 rows in | batata | 27 | | cenoura | 31 | | couve | 82 | | laranja | 85 | +---------+-------+ 6 rows in set (0.00 sec) Graciano Torrão ( http://gracianotorrao.com ) Programação e Sistemas de Informação
  • 10. Ordenação por expressões continuação Exemplos com a tabela t1. mysql> select c3, 2 * c3 as dobro from t1 order by dobro; +-------+--------+ | c3 | dobro | +-------+--------+ | 3.00 | 6.00 | | 3.00 | 6.00 | | 3.00 | 6.00 | | 3.00 | 6.00 | | 3.20 | 6.40 | | 4.80 | 9.60 | | 67.40 | 134.80 | +-------+--------+ 7 rows in set (0.00 sec) mysql> select c1, c2 from t1 order by c1 - c3; +----+-----------+ | c1 | c2 | +----+-----------+ | 5 | margarida | | 2 | ana | | 1 | carla | | 3 | joana | | 4 | catarina | | 6 | maria | | 7 | isabel | +----+-----------+ 7 rows in set (0.00 sec) Graciano Torrão ( http://gracianotorrao.com ) Programação e Sistemas de Informação
  • 11. Ordenação e NULL O tratamento que é dado ao valor NULL varia de sistema para sistema. Neste caso acontece o seguinte: mysql> select * from t1; +----+-----------+-------+------+ | c1 | c2 | c3 | c4 | +----+-----------+-------+------+ | 1 | carla | 3.00 | NULL | | 2 | ana | 4.80 | 7 | | 3 | joana | 3.00 | 1 | | 4 | catarina | 3.00 | 2 | | 5 | margarida | 67.40 | NULL | | 6 | maria | 3.00 | NULL | | 7 | isabel | 3.20 | 0 | +----+-----------+-------+------+ 7 rows in set (0.00 sec) mysql> select * from t1 order by c4 asc; +----+-----------+-------+------+ | c1 | c2 | c3 | c4 | +----+-----------+-------+------+ | 1 | carla | 3.00 | NULL | | 5 | margarida | 67.40 | NULL | | 6 | maria | 3.00 | NULL | | 7 | isabel | 3.20 | 0 | | 3 | joana | 3.00 | 1 | | 4 | catarina | 3.00 | 2 | | 2 | ana | 4.80 | 7 | +----+-----------+-------+------+ 7 rows in set (0.00 sec) mysql> select * from t1 order by c4 desc; +----+-----------+-------+------+ | c1 | c2 | c3 | c4 | +----+-----------+-------+------+ | 2 | ana | 4.80 | 7 | | 4 | catarina | 3.00 | 2 | | 3 | joana | 3.00 | 1 | | 7 | isabel | 3.20 | 0 | | 1 | carla | 3.00 | NULL | | 5 | margarida | 67.40 | NULL | | 6 | maria | 3.00 | NULL | +----+-----------+-------+------+ 7 rows in set (0.00 sec) Graciano Torrão ( http://gracianotorrao.com ) Programação e Sistemas de Informação
  • 12. Eliminação de repetições Por vezes torna-se necessário eliminar as linhas repetidas. Nesses casos recorremos à cláusula DISTINCT. mysql> select * from Postal; +--------+---------------+ | codigo | localidade | +--------+---------------+ | 1000 | LISBOA | | 1100 | LISBOA | | 1200 | LISBOA | | 1500 | LISBOA | | 2000 | SANTAREM | | 2300 | TOMAR | | 3000 | COIMBRA | | 4000 | PORTO | | 4100 | PORTO | | 4200 | PORTO | | 4480 | VILA DO CONDE | | 9000 | FUNCHAL | +--------+---------------+ 12 rows in set (0.01 sec) mysql> select all localidade from Postal; +---------------+ | localidade | +---------------+ | LISBOA | | LISBOA | | LISBOA | | LISBOA | | SANTAREM | | TOMAR | | COIMBRA | | PORTO | | PORTO | | PORTO | | VILA DO CONDE | | FUNCHAL | +---------------+ 12 rows in set (0.00 sec) mysql> select distinct localidade from Postal; +---------------+ | localidade | +---------------+ | LISBOA | | SANTAREM | | TOMAR | | COIMBRA | | PORTO | | VILA DO CONDE | | FUNCHAL | +---------------+ 7 rows in set (0.00 sec) Graciano Torrão ( http://gracianotorrao.com ) Programação e Sistemas de Informação
  • 13. Dúvidas? Escola Secundária D. Afonso Sanches Vila do Conde Graciano Torrão 13 ( graciano.torrao@gmail.com ) ( http://gracianotorrao.com ) Programação e Sistemas de Informação

Notas del editor

  1. {}