18
Programação e Sistemas de Informação Programação e Sistemas de Informação Graciano Torrão ( http://gracianotorrao.com ) MySQL MySQL O comando SELECT O comando SELECT Escola Secundária Escola Secundária D. Afonso Sanches D. Afonso Sanches Vila do Conde Vila do Conde

MySQL - O Comando SELECT

Embed Size (px)

Citation preview

Page 1: MySQL - O Comando SELECT

Programação e Sistemas de InformaçãoProgramação e Sistemas de Informação

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

MySQLMySQLO comando SELECTO comando SELECT

Escola SecundáriaEscola SecundáriaD. Afonso SanchesD. Afonso Sanches

Vila do CondeVila do Conde

Page 2: MySQL - O Comando SELECT

Programação e Sistemas de InformaçãoProgramação e Sistemas de Informação

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

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

Introdução:Introdução:

Page 3: MySQL - O Comando SELECT

Programação e Sistemas de InformaçãoProgramação e Sistemas de Informação

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

Structured Query Language, ou Linguagem de Consulta Estruturada ou SQL, é uma linguagem de pesquisa declarativa para bases de dados relacionais.

A linguagem SQLA linguagem SQL

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, ...)

Page 4: MySQL - O Comando SELECT

Programação e Sistemas de InformaçãoProgramação e Sistemas de Informação

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

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, campo

2, campo

3, ..., campo

n, *

FROM tabela1, tabela

2, … tabela

k

[WHERE condição]

[GROUP BY …]

[HAVING …]

[ORDER BY ...]

O comando SELECTO comando SELECT

Page 5: MySQL - O Comando SELECT

Programação e Sistemas de InformaçãoProgramação e Sistemas de Informação

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

#criar a tabela#criar a tabelaCREATE 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 testeINSERT 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);

Tabela que vamos utilizar como exemplo:Tabela que vamos utilizar como exemplo:

mysql> describe Produto;+--------+--------------+------+-----+---------+----------------+| Field | Type | Null | Key | Default | Extra |+--------+--------------+------+-----+---------+----------------+| 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)

mysql> describe Produto;+--------+--------------+------+-----+---------+----------------+| Field | Type | Null | Key | Default | Extra |+--------+--------------+------+-----+---------+----------------+| 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)

Page 6: MySQL - O Comando SELECT

Programação e Sistemas de InformaçãoProgramação e Sistemas de Informação

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

Na sua forma mais simples, basta indicar quais as colunas que queremos exibir, seguidas do nome da tabela.

Seleccionar todos os registos (linhas)Seleccionar todos os registos (linhas)

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 | +--------+---------+-------+-------+

mysql> select nome from Produto;+---------+| nome |+---------+| batata | | cenoura | | laranja | | alho | | cebola | | couve | +---------+

mysql> select preco, codigo, nome, stock from Produto;+-------+--------+---------+-------+| preco | codigo | nome | stock |+-------+--------+---------+-------+| 32.30 | 1 | batata | 40 | | 12.00 | 2 | cenoura | 45 | | 11.30 | 3 | laranja | 100 | | 1.00 | 4 | alho | 12 | | 99.99 | 5 | cebola | 5 | | 13.00 | 6 | couve | 100 | +-------+--------+---------+-------+

mysql> select codigo, stockfrom Produto;+--------+-------+| codigo | stock |+--------+-------+| 1 | 40 | | 2 | 45 | | 3 | 100 | | 4 | 12 | | 5 | 5 | | 6 | 100 | +--------+-------+

Page 7: MySQL - O Comando SELECT

Programação e Sistemas de InformaçãoProgramação e Sistemas de Informação

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

Quando pretendemos mostrar todas as colunas de uma tabela, em vez de escrever os nomes de todas elas, podemos utilizar o caracter *(asterisco).

Seleccionar todas as colunasSeleccionar todas as colunas

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 | +--------+---------+-------+-------+

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 | +--------+---------+-------+-------+

É equivalente a ...

Page 8: MySQL - O Comando SELECT

Programação e Sistemas de InformaçãoProgramação e Sistemas de Informação

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

É a operação que permite obter um subconjunto das colunas que formam a tabela.

ProjecçãoProjecção

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 | +--------+-------+

Page 9: MySQL - O Comando SELECT

Programação e Sistemas de InformaçãoProgramação e Sistemas de Informação

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

A operação de restrição permite restringir o número de linhas a exibir, mediante a avaliação de uma condição fornecida.

Restrição ( WHERE)Restrição ( WHERE)

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;

Page 10: MySQL - O Comando SELECT

Programação e Sistemas de InformaçãoProgramação e Sistemas de Informação

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

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.

Restrição ( WHERE) Restrição ( WHERE) continuação...continuação...

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 | +--------+---------+-------+-------+

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 | +--------+---------+-------+-------+

VERDADEIRO

1 = 1

Page 11: MySQL - O Comando SELECT

Programação e Sistemas de InformaçãoProgramação e Sistemas de Informação

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

No caso da condição ter um valor lógico falso, nenhuma linha é exibida.

Restrição ( WHERE) Restrição ( WHERE) continuação...continuação...

mysql> select * from Produto where 1 <> 1;Empty set (0.00 sec)

FALSO

1 <> 1

Page 12: MySQL - O Comando SELECT

Programação e Sistemas de InformaçãoProgramação e Sistemas de Informação

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

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:

Operadores relacionais Operadores relacionais

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

Page 13: MySQL - O Comando SELECT

Programação e Sistemas de InformaçãoProgramação e Sistemas de Informação

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

Os operadores lógicos funciona, sempre com operandos lógicos ou com expressões que devolvam valores lógicos.

Operadores lógicos Operadores 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)

Page 14: MySQL - O Comando SELECT

Programação e Sistemas de InformaçãoProgramação e Sistemas de Informação

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

Este operador permite especificar intervalos de valores.

Operadore BETWEEN Operadore BETWEEN

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)

A sintaxe é a seguinte:

SELECT ...

FROM ...

WHERE valor [NOT] BETWEEN valor 1 AND valor2

Page 15: MySQL - O Comando SELECT

Programação e Sistemas de InformaçãoProgramação e Sistemas de Informação

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

Este operador permite verificar se algo faz ou não parte de um conjunto de valores especificado entre parêntesis.

Operador IN Operador IN

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)

A sintaxe é a seguinte:

SELECT ...

FROM ...

WHERE valor [NOT] IN (valor1, valor2, valor3)

Page 16: MySQL - O Comando SELECT

Programação e Sistemas de InformaçãoProgramação e Sistemas de Informação

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

Este operador permite realizar comparações de valores com NULL.

O valor NULL representa a ausência de valor.

Operador IS Operador IS

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)

A sintaxe é a seguinte:

SELECT ...

FROM ...

WHERE campo IS [NOT] NULL

Page 17: MySQL - O Comando SELECT

Programação e Sistemas de InformaçãoProgramação e Sistemas de Informação

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

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).

Operador LIKE (comparação de strings) Operador LIKE (comparação de strings)

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)

WildCard Significado

% Qualquer conjunto de zero ou mais caracteres

_ (underscore) Um caracter qualquer

Page 18: MySQL - O Comando SELECT

Programação e Sistemas de InformaçãoProgramação e Sistemas de Informação

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

Dúvidas?Dúvidas?

Escola SecundáriaEscola SecundáriaD. Afonso SanchesD. Afonso Sanches

Vila do CondeVila do Conde

18

Programação e Sistemas de InformaçãoProgramação e Sistemas de Informação

Graciano Torrão( [email protected] )