Gilberto B. Oliveira 1
Banco de Dados - II
Consultas BásicasMySQL – Sakila 0.8
Gilberto B. Oliveira 2
Comando SQL
SELECT * | <campo1>, …, <campoN>
FROM <tabela1>, …, <tabelaN>
[WHERE [NOT] <condição1> AND | OR [NOT] <condiçãoN>
GROUP BY <campo1>, …, <campoN>
ORDER BY <campo1>, …, <campoN>
HAVING FUNC(<campo1>) = <condição1> ...]
Gilberto B. Oliveira 3
SELECT [*]todos os campos
Selecionar todos os campos de customer onde o campo customer_id seja menor que 5.
USE sakila;
SELECT *
FROM customer
WHERE customer_id < 50;
Gilberto B. Oliveira 4
SELECT <campo>...informar campos específicos
Selecionar first_name, picture, username, e password de staff
SELECT first_name, picture, username, password
FROM staff;
Gilberto B. Oliveira 5
SELECT[...] WHERE[...]filtrando linhas
Selecionar payment_id, rental_id, amount e payment_date de payment onde a payment_date é anterior ou igual a 31 de maio de 2005
SELECT payment_id, rental_id, amount, payment_date
FROM payment
WHERE payment_date <= '20050531';
Gilberto B. Oliveira 6
ALIASExemplo1
Selecionar da tabela s first_name e last_name, e da tabela a address de staff como s e address como a onde o campo address_id da tabela a é igual ao address_id da tabela s
SELECT s.first_name, s.last_name, a.address
FROM staff AS s, address AS a
WHERE a.address_id = s.address_id;
Gilberto B. Oliveira 7
ALIASExemplo2
Selecionar da tabela f title, e da tabela l name de filme como f e language como l onde o campo language_id da tabela l é igual ao language_id da tabela f
SELECT f.title, l.name
FROM film AS f, language AS l
WHERE l.language_id = f.language_id;
Gilberto B. Oliveira 8
[WHERE X = Y]igual a...
Selecionar name de category onde category_id seja igual a 7
SELECT name
FROM category
WHERE category_id = 7;
Gilberto B. Oliveira 9
[WHERE X > Y]maior que...
Selecionar first_name e last_name de actor onde actor_id é maior que 190
SELECT first_name, last_name
FROM actor
WHERE actor_id > 190;
Gilberto B. Oliveira 10
[WHERE X < Y]menor que...
Selecionar title, length e rating de film onde length é menor que 50
SELECT title, length, rating
FROM film
WHERE length < 50;
Gilberto B. Oliveira 11
[WHERE X != Y]diferente de...
Selecionar o title e rating de film onde o rating seja diferente de ‘NC-17’ (proibido para menores de 18 anos)
SELECT title, rating
FROM film
WHERE rating <> 'NC17';
Gilberto B. Oliveira 12
[WHERE X >= Y]maior ou igual a...
Selecionar da tabela c first_name e da tabela p amount de customer como c junto com payment como p sendo da tabela c o customer_id igual ao customer_id da tabela p onde o amount da tabela p seja maior ou igual a 10.0
SELECT c.first_name, p.amount
FROM customer AS c INNER JOIN payment AS p
ON c.customer_id = p.customer_id
WHERE p.amount >= 10.0;
Gilberto B. Oliveira 13
Filtrando Stringscaractere curinga %
Selecionar country da tabela co e city da tabela ci de country como co e city como ci sendo country_id da tabela co igual ao country_id da tabela ci onde o country da tabela co começa com as letra Br.
SELECT co.country, ci.city
FROM city AS ci INNER JOIN country AS co
ON co.country_id = ci.country_id
WHERE co.country LIKE 'BR%';
Gilberto B. Oliveira 14
Filtrando Stringsum caractere _
Selecionar first_name e last_name de customer onde o first_name começa com Mari e tem mais “um único caractere qualquer”.SELECT first_name, last_name
FROM customer
WHERE first_name LIKE 'Mari_';
Gilberto B. Oliveira 15
Operador LógicoOR
Selecionar name, address, ‘zip code’, phone, city e country de customer_list onde country é igual a 'JAPAN' ou country é igual a 'FRANCE'
SELECT name, address, 'zip code', phone, city, country
FROM customer_list
WHERE country LIKE 'JAPAN' OR country LIKE 'FRANCE';
Gilberto B. Oliveira 16
Operador LógicoAND
Selecionar da tabela c name , title e da tabela f rental_rate de film como f junto com film_category como fc sendo o film_id de f igual ao film_id de fc junto com category como c sendo category_id de c igual a category_id de cf onde category de c é igual a 11 e rental_rate de f é menor ou igual a 2.00SELECT c.name, f.title, f.rental_rate
FROM film AS f INNER JOIN film_category AS fc
ON f.film_id = fc.film_id INNER JOIN category AS c
ON c.category_id = fc.category_id
WHERE c.category_id = 11 AND f.rental_rate <= 2.00;
Gilberto B. Oliveira 17
Operador LógicoNOT
Selecionar da tabela f first_name, da tabela r rental_date e return_date de staff como s junto com rental como r sendo staff_id de s igual a staff_id de r onde staff_id NÃO é igual a 2 e return_date seja NULL
SELECT s.first_name, r.rental_date, r.return_date
FROM staff AS s INNER JOIN rental AS r
ON s.staff_id = r.staff_id
WHERE NOT s.staff_id = 1 AND return_date IS NULL;
Gilberto B. Oliveira 18
BETWEENExemplo 1
Selecionar da tabela c first_name e email, da tabela r rental_date e return_date de customer como c junto com rental como r sendo o customer_id da tabela c igual ao customer_id da tabela r onde o rental_date da tabela r esteja “entre” ‘2005-08-01’ e ‘2005-08-15’ (ou seja, entre os dias primeiro e quinze de agosto de 2005)
SELECT c.first_name, c.email, r.rental_date, r.return_date
FROM customer AS c INNER JOIN rental AS r
ON c.customer_id = r.customer_id
WHERE r.rental_date BETWEEN '20050801' AND '20050815';
Gilberto B. Oliveira 19
BETWEENExemplo 2
Selecionar customer_id, staff_id, rental_id e amount de payment onde amount esteja “entre” 10.00 e 15.00 (ou seja, entre dez e quinze)
SELECT customer_id, staff_id, rental_id, amount
FROM payment
WHERE amount BETWEEN 10.00 AND 15.00;
Gilberto B. Oliveira 20
INExemplo 1
Selecionar first_name, last_name e film_info de actor_info onde last_name seja igual a [CAGE] ou igual a [WOOD] ou igual a [GUINESS]
SELECT first_name, last_name, film_info
FROM actor_info
WHERE last_name IN('CAGE', 'WOOD', 'GUINESS');
Gilberto B. Oliveira 21
INExemplo 2
Selecionar country da tabela co, city da tabela ci e address da tabela a de country como co junto com city como ci sendo country_id da tabela co igual a country_id da tabela ci junto com address como a sendo city_id da tabela ci igual a city_id da tabela a onde o country da tabela co seja igual a [BRAZIL] ou igual a [ARGENTINA] ou igual a [PERU] ou igual a [COLOMBIA] ou igual a [MEXICO]
SELECT co.country, ci.city, a.address
FROM country AS co INNER JOIN city AS ci
ON co.country_id = ci.country_id INNER JOIN address AS a
ON ci.city_id = a.city_id
WHERE co.country IN('BRAZIL', 'ARGENTINA', 'PERU', 'COLOMBIA', 'MEXICO');