1. MySQL
O comando SELECT
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:
A linguagem SQL
As sublinguagens do MySQL ( DML, DDL, DCL)
O comando SELECT
Seleccionar todos os registos
Seleccionar todas as colunas
Projecção
Restrição
Operadores relacionais
Operadores lógicos
Outros operadores
Graciano Torrão
( http://gracianotorrao.com )
Programação e Sistemas de Informação
3. A linguagem SQL
Structured Query Language, ou Linguagem de Consulta Estruturada ou SQL, é uma linguagem de
pesquisa declarativa para bases de dados relacionais.
O facto de ser declarativa apresenta a vantagem de permitir expressar aquilo que se pretende sem
ter que entrar em grandes detalhes sobre a localização física e forma como os dados se encontram
armazenados.
Possui um formato Open Source designado por MySQL(http://www.mysql.com)
A linguagem SQL é constituída por três sublinguagens:
DML – Data Manipulation Language ( SELECT, INSERT, UPDATE, DELETE, …)
DDL – Data Definition Language (CREATE, ALTER, DROP, …)
DCL – Data Control Language (GRANT, REVOKE, ...)
Graciano Torrão
( http://gracianotorrao.com )
Programação e Sistemas de Informação
4. O comando SELECT
A interrogação de qualquer base de dados relacional faz-se sempre utilizando o comando
SELECT que é, sem sombra de dúvidas, o comando mais utilizado e importante da linguagem.
A sintaxe do comando SELECT é a seguinte:
SELECT campo1, campo2, campo3, ..., campon, *
FROM tabela1, tabela2, … tabelak
[WHERE condição]
[GROUP BY …]
[HAVING …]
[ORDER BY ...]
Graciano Torrão
( http://gracianotorrao.com )
Programação e Sistemas de Informação
5. Tabela 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),
mysql> describe Produto;
('alho', 1, 12),
+--------+--------------+------+-----+---------+----------------+
('cebola', 1332.50, 5),
| Field | Type
| Null | Key | Default | Extra
|
('couve', 13.00, 100);
+--------+--------------+------+-----+---------+----------------+
| codigo | int(11)
| NO
| PRI | NULL
| auto_increment |
| nome
| varchar(15) | NO
|
| NULL
|
|
| preco | decimal(4,2) | NO
|
| NULL
|
|
| stock | smallint(6) | NO
|
| NULL
|
|
+--------+--------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)
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)
Graciano Torrão
( http://gracianotorrao.com )
Programação e Sistemas de Informação
7. Seleccionar todas as colunas
Quando pretendemos mostrar todas as colunas de uma tabela, em vez de escrever os nomes de
todas elas, podemos utilizar o caracter *(asterisco).
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 |
+--------+---------+-------+-------+
É equivalente a ...
mysql> select codigo, nome, preco, stock 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 |
+--------+---------+-------+-------+
Graciano Torrão
( http://gracianotorrao.com )
Programação e Sistemas de Informação
8. Projecção
É a operação que permite obter um subconjunto das colunas que formam a tabela.
mysql> select nome from Produto;
+---------+
| nome
|
+---------+
| batata |
| cenoura |
| laranja |
| alho
|
| cebola |
| couve
|
+---------+
mysql> select codigo, stock from Produto;
+--------+-------+
| codigo | stock |
+--------+-------+
|
1 |
40 |
|
2 |
45 |
|
3 |
100 |
|
4 |
12 |
|
5 |
5 |
|
6 |
100 |
+--------+-------+
Graciano Torrão
( http://gracianotorrao.com )
Programação e Sistemas de Informação
9. Restrição ( WHERE)
A operação de restrição permite restringir o número de linhas a exibir, mediante a avaliação de uma
condição fornecida.
mysql> select * from Produto where stock > 40;
+--------+---------+-------+-------+
| codigo | nome
| preco | stock |
+--------+---------+-------+-------+
|
2 | cenoura | 12.00 |
45 |
|
3 | laranja | 11.30 |
100 |
|
6 | couve
| 13.00 |
100 |
+--------+---------+-------+-------+
A sintaxe do comando SELECT utilizando a cláusula WHERE é a seguinte:
SELECT *
FROM tabela
WHERE condição;
Graciano Torrão
( http://gracianotorrao.com )
Programação e Sistemas de Informação
10. Restrição ( WHERE)
continuação...
Da mesma forma que na operação de projecção o * significa todas as colunas, uma condição que
seja satisfeita por todas as linhas faz com que todas sejam exibidas.
mysql> select * from Produto where 1 = 1;
+--------+---------+-------+-------+
| 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 |
+--------+---------+-------+-------+
1=1
VERDADEIRO
Ou
mysql> select * from Produto where codigo = codigo;
+--------+---------+-------+-------+
| 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 |
+--------+---------+-------+-------+
Graciano Torrão
( http://gracianotorrao.com )
Programação e Sistemas de Informação
11. Restrição ( WHERE)
continuação...
No caso da condição ter um valor lógico falso, nenhuma linha é exibida.
mysql> select * from Produto where 1 <> 1;
Empty set (0.00 sec)
1 <> 1
FALSO
Graciano Torrão
( http://gracianotorrao.com )
Programação e Sistemas de Informação
12. Operadores relacionais
O resultado de uma operação lógica é sempre verdadeiro ou falso.
Estes podem ser utilizados com o cláusula WHERE de forma a obter as linhas pretendidas.
Os operadores relacionais são os seguintes:
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
<=
Menos ou igual que
7 <= 5
FALSO
<>
diferente
7 <> 5
VERDADEIRO
Graciano Torrão
( http://gracianotorrao.com )
Programação e Sistemas de Informação
13. Operadores lógicos
Os operadores lógicos funciona, sempre com operandos lógicos ou com expressões que devolvam
valores lógicos.
Operador
Exemplo
AND
Condição 1 AND Condição2
OR
Condição 1 OR Condição2
NOT
NOT Condição2
mysql> select * from Produto where stock > 10 AND stock < 50;
+--------+---------+-------+-------+
| codigo | nome
| preco | stock |
+--------+---------+-------+-------+
|
1 | batata | 32.30 |
40 |
|
2 | cenoura | 12.00 |
45 |
|
4 | alho
| 1.00 |
12 |
+--------+---------+-------+-------+
3 rows in set (0.00 sec)
Graciano Torrão
( http://gracianotorrao.com )
Programação e Sistemas de Informação
14. Operadore BETWEEN
Este operador permite especificar intervalos de valores.
A sintaxe é a seguinte:
SELECT ...
FROM ...
WHERE valor [NOT] BETWEEN valor 1 AND valor2
mysql> select * from Produto where stock between 40 AND 45;
+--------+---------+-------+-------+
| codigo | nome
| preco | stock |
+--------+---------+-------+-------+
|
1 | batata | 32.30 |
40 |
|
2 | cenoura | 12.00 |
45 |
+--------+---------+-------+-------+
2 rows in set (0.00 sec)
Graciano Torrão
( http://gracianotorrao.com )
Programação e Sistemas de Informação
15. Operador IN
Este operador permite verificar se algo faz ou não parte de um conjunto de valores especificado entre
parêntesis.
A sintaxe é a seguinte:
SELECT ...
FROM ...
WHERE valor [NOT] IN (valor1, valor2, valor3)
mysql> select * from Produto where stock in (0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100);
+--------+---------+-------+-------+
| codigo | nome
| preco | stock |
+--------+---------+-------+-------+
|
1 | batata | 32.30 |
40 |
|
3 | laranja | 11.30 |
100 |
|
6 | couve
| 13.00 |
100 |
+--------+---------+-------+-------+
3 rows in set (0.00 sec)
Graciano Torrão
( http://gracianotorrao.com )
Programação e Sistemas de Informação
16. Operador IS
Este operador permite realizar comparações de valores com NULL.
O valor NULL representa a ausência de valor.
A sintaxe é a seguinte:
SELECT ...
FROM ...
WHERE campo IS [NOT] NULL
mysql> select * from Produto where preco is null;
Empty set (0.01 sec)
mysql> select * from Produto where preco is not null;
+--------+---------+-------+-------+
| 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)
Graciano Torrão
( http://gracianotorrao.com )
Programação e Sistemas de Informação
17. Operador LIKE (comparação de strings)
O operador LIKE permite realizar comparações entre strings.
Uma string é uma cadeia de caracteres que funciona como um todo.
O operador LIKE torna-se articularmente útil se utilizado conjuntamente com os caracteres genéricos
(WildCards).
WildCard
Significado
%
Qualquer conjunto de zero ou mais
caracteres
_ (underscore)
Um caracter qualquer
mysql> select * from Produto where nome like 'c%';
+--------+---------+-------+-------+
| codigo | nome
| preco | stock |
+--------+---------+-------+-------+
|
2 | cenoura | 12.00 |
45 |
|
5 | cebola | 99.99 |
5 |
|
6 | couve
| 13.00 |
100 |
+--------+---------+-------+-------+
3 rows in set (0.00 sec)
Graciano Torrão
( http://gracianotorrao.com )
Programação e Sistemas de Informação
18. Dúvidas?
Escola Secundária
D. Afonso Sanches
Vila do Conde
Graciano Torrão
18
( graciano.torrao@gmail.com )
( http://gracianotorrao.com )
Programação e Sistemas de Informação