K19 k03 sql e modelo relacional, Exercícios de Sistemas de Gerenciamento do Banco de Dados (SGBD). Centro Universitário do Maranhão (UNICEUMA)
clauberbarros
clauberbarros3 de Junho de 2015

K19 k03 sql e modelo relacional, Exercícios de Sistemas de Gerenciamento do Banco de Dados (SGBD). Centro Universitário do Maranhão (UNICEUMA)

PDF (1 MB)
42 páginas
10Números de download
1000+Número de visitas
1Número de comentários
Descrição
Modelagem de Banco de Ddos
20pontos
Pontos de download necessários para baixar
este documento
baixar o documento
Pré-visualização3 páginas / 42
Esta é apenas uma pré-visualização
3 shown on 42 pages
baixar o documento
Esta é apenas uma pré-visualização
3 shown on 42 pages
baixar o documento
Esta é apenas uma pré-visualização
3 shown on 42 pages
baixar o documento
Esta é apenas uma pré-visualização
3 shown on 42 pages
baixar o documento

TREINAMENTOS

SQL e Modelo Relacional

Modelo Relacional e SQL

30 de julho de 2012

Sumário i

Sobre a K19 1

Seguro Treinamento 2

Termo de Uso 3

Cursos 4

1 Introdução 1 1.1 SGBD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.2 MySQL Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.3 Bases de dados (Databases) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.4 Criando uma base de dados no MySQL Server . . . . . . . . . . . . . . . . . . . . . . . . 2 1.5 Tabelas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.6 Tabelas no MySQL Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.7 CRUD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.8 Restrições . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 1.9 Exercícios de Fixação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

2 Consultas 9 2.1 SELECT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 2.2 WHERE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 2.3 Exercícios de Fixação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 2.4 ORDER BY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 2.5 Exercícios de Fixação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 2.6 Funções de Agrupamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 2.7 Exercícios de Fixação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 2.8 GROUP BY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 2.9 Exercícios de Fixação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 2.10 DISTINCT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 2.11 LIMIT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

www.k19.com.br i

SUMÁRIO ii

3 Relacionamentos 17 3.1 UNIQUE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 3.2 Exercícios de Fixação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 3.3 Exercícios Complementares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 3.4 Chaves Primárias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 3.5 Chaves Estrangeiras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 3.6 One to One . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 3.7 Exercícios de Fixação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 3.8 Exercícios Complementares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 3.9 One to Many ou Many to One . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 3.10 Exercícios de Fixação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 3.11 Exercícios Complementares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 3.12 Many to Many . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 3.13 Exercícios de Fixação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 3.14 Exercícios Complementares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

4 Subqueries, Joins e Unions 25 4.1 Subqueries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 4.2 Exercícios de Fixação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 4.3 Exercícios Complementares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 4.4 Joins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 4.5 Exercícios de Fixação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 4.6 Exercícios Complementares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 4.7 Unions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 4.8 Exercícios de Fixação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 4.9 Exercícios Complementares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

A Respostas 31

ii www.k19.com.br

1 SUMÁRIO

Sobre a K19

A K19 é uma empresa especializada na capacitação de desenvolvedores de software. Sua equipe é composta por profissionais formados em Ciência da Computação pela Universidade de São Paulo (USP) e que possuem vasta experiência em treinamento de profissionais para área de TI.

O principal objetivo da K19 é oferecer treinamentos de máxima qualidade e relacionados às prin- cipais tecnologias utilizadas pelas empresas. Através desses treinamentos, seus alunos se tornam capacitados para atuar no mercado de trabalho.

Visando a máxima qualidade, a K19 mantém as suas apostilas em constante renovação e melho- ria, oferece instalações físicas apropriadas para o ensino e seus instrutores estão sempre atualizados didática e tecnicamente.

www.k19.com.br 1

SUMÁRIO 2

Seguro Treinamento

Na K19 o aluno faz o curso quantas vezes quiser!

Comprometida com o aprendizado e com a satisfação dos seus alunos, a K19 é a única que pos- sui o Seguro Treinamento. Ao contratar um curso, o aluno poderá refazê-lo quantas vezes desejar mediante a disponibilidade de vagas e pagamento da franquia do Seguro Treinamento.

As vagas não preenchidas até um dia antes do início de uma turma da K19 serão destinadas ao alunos que desejam utilizar o Seguro Treinamento. O valor da franquia para utilizar o Seguro Treina- mento é 10% do valor total do curso.

2 www.k19.com.br

3 SUMÁRIO

Termo de Uso

Termo de Uso

Todo o conteúdo desta apostila é propriedade da K19 Treinamentos. A apostila pode ser utilizada livremente para estudo pessoal . Além disso, este material didático pode ser utilizado como material de apoio em cursos de ensino superior desde que a instituição correspondente seja reconhecida pelo MEC (Ministério da Educação) e que a K19 seja citada explicitamente como proprietária do material.

É proibida qualquer utilização desse material que não se enquadre nas condições acima sem o prévio consentimento formal, por escrito, da K19 Treinamentos. O uso indevido está sujeito às medidas legais cabíveis.

www.k19.com.br 3

SUMÁRIO 4

K01- Lógica de Programação

K11 - Orientação a Objetos em Java

K12 - Desenvolvimento Web com JSF2 e JPA2

K21 - Persistência com JPA2 e Hibernate

K22 - Desenvolvimento Web Avançado com JFS2, EJB3.1 e CDI

K23 - Integração de Sistemas com Webservices, JMS e EJB

K31 - C# e Orientação a Objetos

K32 - Desenvolvimento Web com ASP.NET MVC

TRE INA

ME NT

OS

TREINAMENTOSTREINAMENTOS Conheça os nossos cursos

www.k19.com.br/cursos

4 www.k19.com.br

INTRODUÇÃO

C A

P Í

T U

L O

1 SGBD

Qualquer empresa necessita armazenar os dados relacionados ao seu negócio. Por exemplo, uma livraria deve manter as informações dos livros que são comercializados por ela. Um banco precisa registrar os dados dos seus clientes. Uma escola deve guardar as informações dos seus alunos.

Hoje em dia, utilizar papel para registrar os dados de uma empresa não é uma boa alternativa. O espaço físico necessário gera custos altos para empresa. Em geral, a consulta das informações registradas é demorada. O risco de um acidente destruir os dados armazenados em papel é alto.

Em vários aspectos, utilizar computadores para o armazenamento de dados é uma abordagem melhor do que utilizar papel. Os dados podem ser armazenados, por exemplo, em arquivos de texto ou planilhas. Contudo, existem sistemas especializados na persistência de dados que oferecem re- cursos mais sofisticados e eficientes para esse tipo de objetivo. Esses sistemas são conhecidos como Sistemas Gerenciadores de Bancos de Dados - SGBD.

Os principais SGBDs adotados nas empresas utilizam o Modelo Relacional para definir a organi- zação das informações armazenadas e a linguagem SQL para permitir a manipulação desses dados.

Eis uma lista dos SGBDs mais utilizados nas empresas:

• MySQL Server

• Oracle Database

• SQL Server

• PostgreSQL

MySQL Server

Neste treinamento, utilizaremos o MySQL Server, que é mantido pela Oracle e amplamente utili- zado em aplicações comerciais. Para instalar o MySQL Server, você pode consultar o artigo disponível em nosso site: http://www.k19.com.br/artigos/instalando-mysql/

Bases de dados (Databases)

Um sistema gerenciador de banco de dados é capaz de gerenciar informações de diversos siste- mas ao mesmo tempo. Por exemplo, as informações dos clientes de um banco, além dos produtos de uma loja virtual ou dos livros de uma livraria.

www.k19.com.br 1

INTRODUÇÃO 2

Suponha que os dados fossem mantidos sem nenhuma separação lógica. Implementar regras de segurança específicas seria extremamente complexo. Tais regras criam restrições quanto ao con- teúdo que pode ser acessado por cada usuário. Por exemplo, determinado usuário poderia ter per- missão de acesso aos dados dos clientes do banco, mas não às informações dos produtos da loja virtual, ou dos livros da livraria.

Para obter uma organização melhor, os dados são armazenados separadamente em um SGBD. Daí surge o conceito de base de dados (database). Uma base de dados é um agrupamento lógico das informações de um determinado domínio.

Criando uma base de dados no MySQL Server

Para criar uma base de dados no MySQL Server, podemos utilizar o comando CREATE DATA- BASE.

mysql > CREATE DATABASE livraria; Query OK, 1 row affected (0.02 sec)

Terminal 1.1: Criando uma base de dados.

Podemos utilizar o comando SHOW DATABASES para listar as bases de dados existentes.

mysql > show databases; +--------------------+ | Database | +--------------------+ | information_schema | | livraria | | mysql | | test | +--------------------+ 4 rows in set (0.03 sec)

Terminal 1.2: Listando as bases de dados existentes.

Repare que, além da base de dados livraria, há outras três bases. Essas bases foram criadas au- tomaticamente pelo próprio MySQL Server para teste ou para armazenar configurações.

Quando uma base de dados não é mais necessária, ela pode ser removida através do comando DROP DATABASE.

mysql > DROP DATABASE livraria; Query OK, 0 rows affected (0.08 sec)

Terminal 1.3: Destruindo uma base de dados.

Tabelas

Um servidor de banco de dados é dividido em bases de dados com o intuito de separar as infor- mações de domínios diferentes. Nessa mesma linha de raciocínio, podemos dividir os dados de uma base a fim de agrupá-los segundo as suas correlações. Essa separação é feita através de tabelas. Por exemplo, no sistema de um banco, é interessante separar o saldo e o limite de uma conta, do nome e CPF de um cliente. Então, poderíamos criar uma tabela para os dados relacionados às contas e outra para os dados relacionados aos clientes.

2 www.k19.com.br

3 INTRODUÇÃO

Cliente nome idade cpf José 27 31875638735 Maria 32 30045667856

Conta numero saldo limite 1 1000 500 2 2000 700

Tabela 1.1: Tabelas para armazenar os dados relacionados aos clientes e às contas

Uma tabela é formada por registros (linhas) e os registros são formados por campos (colunas). Por exemplo, considere uma tabela para armazenar as informações dos clientes de um banco. Cada registro dessa tabela armazena em seus campos os dados de um determinado cliente.

Tabelas no MySQL Server

As tabelas no MySQL Server são criadas através do comando CREATE TABLE. Na criação de uma tabela, é necessário definir quais são os nomes e os tipos das colunas.

mysql > CREATE TABLE ‘livraria ‘.‘Livro ‘ ( -> ‘titulo ‘ VARCHAR (255), -> ‘preco ‘ DOUBLE -> ) -> ENGINE=MyISAM;

Query OK, 0 rows affected (0.14 sec)

Terminal 1.4: Criando uma tabela.

As tabelas de uma base de dados podem ser listadas através do comando SHOW TABLES. Antes de utilizar esse comando, devemos selecionar uma base de dados através do comando USE.

mysql > USE livraria; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A

Database changed mysql > SHOW TABLES; +--------------------+ | Tables_in_livraria | +--------------------+ | Livro | +--------------------+ 1 row in set (0.00 sec)

Terminal 1.5: Listando as tabelas de uma base de dados.

Se uma tabela não for mais desejada, ela pode ser removida através do comando DROP TABLE.

mysql > DROP TABLE Livro; Query OK, 0 rows affected (0.00 sec)

Terminal 1.6: Destruindo uma tabela.

Também podemos alterar a estrutura de uma tabela com o comando ALTER TABLE.

mysql > ALTER TABLE Livro RENAME livros; Query OK, 0 rows affected (0.00 sec)

Terminal 1.7: Alterando o nome da tabela.

mysql > ALTER TABLE Livro ADD paginas INTEGER; Query OK, 0 rows affected (0.00 sec)

www.k19.com.br 3

INTRODUÇÃO 4

Terminal 1.8: Adicionando uma coluna.

mysql > ALTER TABLE Livro DROP COLUMN paginas; Query OK, 0 rows affected (0.00 sec)

Terminal 1.9: Removendo uma coluna.

CRUD

As operações básicas para manipular os dados persistidos são: inserir, ler, alterar e remover.

Essas operações são realizadas através de uma linguagem de consulta denominada SQL (Structu- red Query Language). Essa linguagem oferece quatro comandos básicos: INSERT, SELECT, UPDATE e DELETE. Esses comandos são utilizados para inserir, ler, alterar e remover registros, respectiva- mente.

mysql > INSERT INTO Livro (titulo , preco) VALUES (’Java ’, 98.75); Query OK, 1 row affected (0.00 sec)

Terminal 1.10: Inserindo um registro.

mysql > SELECT * FROM Livro; +--------+-------+ | titulo | preco | +--------+-------+ | Java | 98.75 | +--------+-------+ 1 row in set (0.00 sec)

Terminal 1.11: Selecionando registros.

mysql > UPDATE Livro SET preco = 115.9 WHERE titulo = ’Java ’; Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0

Terminal 1.12: Alterando registros.

mysql > SELECT * FROM Livro; +--------+-------+ | titulo | preco | +--------+-------+ | Java | 115.9 | +--------+-------+ 1 row in set (0.00 sec)

Terminal 1.13: Selecionando registros.

mysql > DELETE FROM Livro WHERE titulo = ’Java ’; Query OK, 1 row affected (0.00 sec)

Terminal 1.14: Removendo registros.

mysql > SELECT * FROM Livro; Empty set (0.00 sec)

Terminal 1.15: Selecionando registros.

4 www.k19.com.br

5 INTRODUÇÃO

Restrições

Podemos estabelecer algumas restrições sobre os valores armazenados nas tabelas para manter a consistência dos dados. Por exemplo, é possível obrigar que um determinado campo possua sempre um valor não nulo.

No MySQL Server, quando criamos uma tabela, podemos adicionar a restrição NOT NULL nas colunas que são obrigatórias.

mysql > CREATE TABLE ‘livraria ‘.‘Livro ‘ ( -> ‘titulo ‘ VARCHAR (255) NOT NULL , -> ‘preco ‘ DOUBLE NOT NULL -> ) -> ENGINE=MyISAM;

Query OK, 0 rows affected (0.14 sec)

Terminal 1.16: Aplicando o comando NOT NULL nas colunas obrigatórias.

Também podemos definir, no MySQL Server, que uma coluna não pode possuir valores repetidos através do comando UNIQUE.

mysql > CREATE TABLE ‘livraria ‘.‘Livro ‘ ( -> ‘titulo ‘ VARCHAR (255) NOT NULL UNIQUE , -> ‘preco ‘ DOUBLE NOT NULL -> ) -> ENGINE=MyISAM;

Query OK, 0 rows affected (0.14 sec)

Terminal 1.17: Aplicando o comando UNIQUE na coluna titulo.

Exercícios de Fixação

1 Abra um terminal, crie e acesse uma pasta com o seu nome.

cosen@k19 :~$ mkdir rafael cosen@k19 :~$ cd rafael/ cosen@k19 :~/ rafael$

Terminal 1.18: Criando e acessando uma pasta com o seu nome.

2 Estando dentro da sua pasta, acesse o MySQL Server utilizando o usuário root e a senha root.

k19@k19 -11:~/ rafael$ mysql -u root -p Enter password:

Terminal 1.19: Logando no MySQL Server.

3 Caso exista uma base de dados chamada livraria, remova-a. Utilize o comando SHOW DATA- BASES para listar as bases de dados existentes e o comando DROP DATABASE para remover a base livraria se ela existir.

mysql > SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | livraria |

www.k19.com.br 5

INTRODUÇÃO 6

| mysql | | test | +--------------------+ 4 rows in set (0.00 sec)

mysql > DROP DATABASE livraria; Query OK, 1 row affected (0.12 sec)

Terminal 1.20: Listando as bases de dados existentes e removendo a base livraria.

4 Crie uma nova base de dados chamada livraria. Utilize o comando CREATE DATABASE. Você vai utilizar esta base nos exercícios seguintes.

mysql > CREATE DATABASE livraria; Query OK, 1 row affected (0.00 sec)

Terminal 1.21: Criando a base livraria.

5 Abra um editor de texto e digite o código abaixo para criar uma tabela com o nome Editora. Depois salve o arquivo com o nome create-table-editora.sql dentro da pasta com o seu nome.

1 USE livraria; 2 CREATE TABLE Editora ( 3 id BIGINT NOT NULL AUTO_INCREMENT , 4 nome VARCHAR (255) NOT NULL , 5 email VARCHAR (255) NOT NULL , 6 ) 7 ENGINE = InnoDB;

Código SQL 1.1: Criando a tabela Editora

6 Dentro do terminal, use o comando source para executar o arquivo que você acabou de criar.

mysql > source create -table -editora.sql Database changed Query OK, 0 rows affected (0.08 sec)

Terminal 1.22: Executando a tabela Editora.

7 Abra um novo editor de texto e digite o código abaixo para criar uma tabela com o nome Livro. Em seguida, salve o arquivo com o nome create-table-livro.sqldentro da pasta com o seu nome.

1 USE livraria; 2 CREATE TABLE Livro ( 3 id BIGINT NOT NULL AUTO_INCREMENT , 4 titulo VARCHAR (255) NOT NULL , 5 preco DOUBLE NOT NULL , 6 ) 7 ENGINE = InnoDB;

Código SQL 1.2: Criando a tabela Livro

8 Dentro do terminal, use o comando sourcepara executar o código do arquivo create-table-livro.sql.

mysql > source create -table -livro.sql Database changed Query OK, 0 rows affected (0.08 sec)

Terminal 1.23: Executando a tabela Livro.

9 Abra um novo editor de texto e digite o código abaixo para adicionar alguns registros na tabela

6 www.k19.com.br

7 INTRODUÇÃO

Editora. Depois salve o arquivo com o nome adicionando-registros-editora.sqldentro da pasta com o seu nome.

1 INSERT INTO Editora (nome , email) VALUES (’Oreilly ’, ’oreilly@email.com’); 2 3 INSERT INTO Editora (nome , email) VALUES (’Wrox’, ’wrox@email.com’); 4 5 INSERT INTO Editora (nome , email) VALUES (’Apress ’, ’apress@email.com’);

Código SQL 1.3: Adicionando registros na tabela Editora

10 Dentro do terminal, execute o arquivo que você acabou de criar para adicionar alguns registro na tabela Editora.

mysql > source adicionando -registros -editora.sql Query OK, 1 row affected (0.03 sec)

Query OK, 1 row affected (0.04 sec)

Query OK, 1 row affected (0.04 sec)

Terminal 1.24: Inserindo editoras.

11 Abra um novo editor de texto e digite o código abaixo para adicionar alguns registros na tabela Livro. Depois salve o arquivo com o nome adicionando-registros-livro.sql dentro da pasta com o seu nome.

1 INSERT INTO Livro (titulo , preco) VALUES (’Aprendendo C#’, 89.90); 2 3 INSERT INTO Livro (titulo , preco) VALUES (’Introdução ao JSF 2’, 122.90); 4 5 INSERT INTO Livro (titulo , preco) VALUES (’JSF 2 Avançado ’, 149.90);

Código SQL 1.4: Adicionando alguns registros na tabela Livro

12 Dentro do terminal, execute o arquivo que você acabou de criar para adicionar alguns registros na Livro.

mysql > source adicionando -registros -livro.sql Query OK, 1 row affected (0.02 sec)

Query OK, 1 row affected (0.04 sec)

Query OK, 1 row affected (0.04 sec)

Terminal 1.25: Inserindo livros.

13 Consulte os registros da tabela Editora e da tabela Livro. Utilize o comando SELECT.

mysql > SELECT * FROM Editora; +----+---------+-------------------+ | id | nome | email | +----+---------+-------------------+ | 1 | Oreilly | oreilly@email.com | | 2 | Wrox | wrox@email.com | | 3 | Apress | apress@email.com | +----+---------+-------------------+ 3 rows in set (0.00 sec)

Terminal 1.26: Selecionando as editoras.

mysql > SELECT * FROM Livro; +----+-----------------------+-------+

www.k19.com.br 7

INTRODUÇÃO 8

| id | titulo | preco |+----+-----------------------+-------+| 1 | Aprendendo C# ←- | 89.9 || 2 | Introdução ao JSF 2 | 122.9 || 3 | JSF 2 Avançado | 149.9 |+----+-----------------------+-------+ 3 rows in set (0.00 sec)

Terminal 1.27: Selecionando os livros.

14 Altere alguns dos registros da tabela Livro. Utilize o comando UPDATE.

mysql > UPDATE Livro SET preco =92.9 WHERE id=1; Query OK, 1 row affected (0.07 sec) Rows matched: 1 Changed: 1 Warnings: 0

Terminal 1.28: Alterando livros.

15 Altere alguns dos registros da tabela Editora. Utilize o comando UPDATE.

mysql > UPDATE Editora SET nome=’OReilly ’ WHERE id=1; Query OK, 1 row affected (0.09 sec) Rows matched: 1 Changed: 1 Warnings: 0

Terminal 1.29: Alterando editoras.

16 Remova alguns registros da tabela Livro. Utilize o comando DELETE.

mysql > DELETE FROM Livro WHERE id=2; Query OK, 1 row affected (0.07 sec)

Terminal 1.30: Removendo livros.

8 www.k19.com.br

CONSULTAS

C A

P Í

T U

L O

2 SELECT

Através do comando SELECT, podemos recuperar as informações armazenadas em um banco de dados. Para utilizar o comando SELECT, devemos indicar as tabelas que serão consultadas e as colunas que queremos recuperar.

No exemplo abaixo, as colunas nome e email são recuperadas da tabela Aluno.

1 SELECT nome , email FROM Aluno;

Código SQL 2.1: Recuperando as colunas nome e email da tabela Aluno

Aluno nome email Rafael Cosentino rafael.cosentino@k19.com.br Jonas Hirata jonas.hirata@k19.com.br

Tabela 2.1: Resultado da consulta: SELECT nome, email FROM Aluno

Quando todas as colunas devem ser recuperadas, é mais prático utilizar o caractere “*”. Veja o exemplo abaixo:

1 SELECT * FROM Aluno;

Código SQL 2.2: Recuperando todas as colunas da tabela Aluno

Aluno nome email telefone altura Rafael Cosentino cosentino@k19.com.br 11 23873791 1.87 Jonas Hirata hirata@k19.com.br 11 23873791 1.76

Tabela 2.2: Resultado da consulta: SELECT * FROM Aluno

É possível recuperar colunas de várias tabelas. Nesse caso, os registros das tabelas consultadas são “cruzados”. Veja o exemplo abaixo:

1 SELECT * FROM Aluno , Professor;

Código SQL 2.3: Recuperando todas as colunas das tabelas Aluno e Professor

www.k19.com.br 9

CONSULTAS 10

Aluno x Professor nome email telefone altura nome codigo Rafael Cosentino cosentino@k19.com.br 11 23873791 1.87 Marcelo Martins 1 Rafael Cosentino cosentino@k19.com.br 11 23873791 1.87 Rafael Lobato 2 Jonas Hirata hirata@k19.com.br 11 23873791 1.76 Marcelo Martins 1 Jonas Hirata hirata@k19.com.br 11 23873791 1.76 Rafael Lobato 2

Tabela 2.3: Resultado da consulta: SELECT * FROM Aluno, Professor

Duas tabelas podem ter colunas com o mesmo nome. Nesse caso, para recuperá-las, devemos eliminar a ambiguidade utilizando os nomes das tabelas.

1 SELECT Aluno.nome , Professor.nome FROM Aluno , Professor;

Código SQL 2.4: Recuperando as colunas nome das tabelas Aluno e Professor

Aluno x Professor nome nome Rafael Cosentino Marcelo Martins Rafael Cosentino Rafael Lobato Jonas Hirata Marcelo Martins Jonas Hirata Rafael Lobato

Tabela 2.4: Resultado da consulta: SELECT Aluno.nome, Professor.nome FROM Aluno, Professor

As tabelas e as colunas consultadas podem ser “apelidadas”. Esse recurso pode facilitar a criação das consultas e a análise dos resultados. Para isso, devemos utilizar o comando AS.

1 SELECT a.nome AS aluno_nome , p.nome AS professor_nome FROM Aluno AS a, Professor AS p;

Código SQL 2.5: Utilizando “apelidos” nas tabelas e colunas

Aluno x Professor aluno_nome professor_nome Rafael Cosentino Marcelo Martins Rafael Cosentino Rafael Lobato Jonas Hirata Marcelo Martins Jonas Hirata Rafael Lobato

Tabela 2.5: Resultado da consulta: SELECT a.nome AS aluno_nome, p.nome AS professor_nome FROM Aluno AS a, Professor AS p

WHERE

Os resultados de uma consulta podem ser filtrados através do comando WHERE. Veja o exemplo abaixo.

1 SELECT * FROM Aluno WHERE altura > 1.80;

10 www.k19.com.br

11 CONSULTAS

Código SQL 2.6: Aplicando o comando WHERE

Aluno nome email telefone altura Rafael Cosentino cosentino@k19.com.br 11 23873791 1.87

Tabela 2.6: Resultado da consulta: SELECT * FROM Aluno WHERE altura > 1.80

Eis uma lista de algumas funções e operadores de comparação do MySQL Server que podem ser utilizados com o comando WHERE:

• =

1 SELECT * FROM Aluno WHERE altura = 1.8;

• <> ou !=

1 SELECT * FROM Aluno WHERE altura <> 1.8; 2 SELECT * FROM Aluno WHERE altura != 1.8;

• <=

1 SELECT * FROM Aluno WHERE altura <= 1.8;

• <

1 SELECT * FROM Aluno WHERE altura < 1.8;

• >=

1 SELECT * FROM Aluno WHERE altura >= 1.8;

• >

1 SELECT * FROM Aluno WHERE altura > 1.8;

• IS

1 SELECT * FROM Aluno WHERE aprovado IS TRUE;

• IS NOT

1 SELECT * FROM Aluno WHERE aprovado IS NOT TRUE;

• IS NULL

1 SELECT * FROM Aluno WHERE nome IS NULL;

• IS NOT NULL

1 SELECT * FROM Aluno WHERE nome IS NOT NULL;

www.k19.com.br 11

CONSULTAS 12

• BETWEEEN . . . AND . . .

1 SELECT * FROM Aluno WHERE altura BETWEEN 1.5 AND 1.8;

• NOT BETWEEEN . . . AND . . .

1 SELECT * FROM Aluno WHERE altura NOT BETWEEEN 1.5 AND 1.8;

• LIKE

1 SELECT * FROM Aluno WHERE nome LIKE ’Rafael%’;

• NOT LIKE

1 SELECT * FROM Aluno WHERE nome NOT LIKE ’Rafael%’;

• IN()

1 SELECT * FROM Aluno WHERE altura IN (1.5, 1.6, 1.7, 1.8);

• NOT IN()

1 SELECT * FROM Aluno WHERE altura NOT IN (1.5, 1.6, 1.7, 1.8);

Eis uma lista dos operadores lógicos do MySQL Server que também podem ser utilizados com o comando WHERE.

• NOT ou !

1 SELECT * FROM Aluno WHERE NOT altura = 1.80; 2 SELECT * FROM Aluno WHERE ! (altura = 1.80);

• AND ou &&

1 SELECT * FROM Aluno WHERE altura < 1.8 AND nome LIKE ’Rafael%’; 2 SELECT * FROM Aluno WHERE altura < 1.8 && nome LIKE ’Rafael%’;

• OR ou ||

1 SELECT * FROM Aluno WHERE altura < 1.8 OR nome LIKE ’Rafael%’; 2 SELECT * FROM Aluno WHERE altura < 1.8 || nome LIKE ’Rafael%’;

• XOR

1 SELECT * FROM Aluno WHERE altura < 1.8 XOR nome LIKE ’Rafael%’;

Exercícios de Fixação

1 Crie uma tabela Aluno com as colunas nome (VARCHAR(255)), email (VARCHAR(255)) telefone (VARCHAR(10)), altura (DECIMAL(3,2)) e aprovado (TINYINT(1)).

1 CREATE TABLE Aluno(

12 www.k19.com.br

13 CONSULTAS

2 nome VARCHAR (255), 3 email VARCHAR (255), 4 telefone VARCHAR (255), 5 altura DECIMAL (3,2), 6 aprovado TINYINT (1) 7 ) 8 ENGINE = InnoDB;

Código SQL 2.27: Resposta do exercício

2 Insira alguns registros na tabela evitando valores repetidos.

3 Utilizando a cláusula WHERE refaça os exemplos criando uma consulta para cada tipo de opera- dor.

1 SELECT * FROM Aluno WHERE altura = 1.8; 2 SELECT * FROM Aluno WHERE altura != 1.8; 3 SELECT * FROM Aluno WHERE altura <= 1.8; 4 SELECT * FROM Aluno WHERE altura < 1.8; 5 SELECT * FROM Aluno WHERE altura >= 1.8; 6 SELECT * FROM Aluno WHERE altura > 1.8; 7 SELECT * FROM Aluno WHERE aprovado IS TRUE; 8 SELECT * FROM Aluno WHERE aprovado IS NOT TRUE; 9 SELECT * FROM Aluno WHERE nome IS NULL; 10 SELECT * FROM Aluno WHERE nome IS NOT NULL; 11 SELECT * FROM Aluno WHERE altura BETWEEN 1.5 AND 1.8; 12 SELECT * FROM Aluno WHERE altura NOT BETWEEEN 1.5 AND 1.8; 13 SELECT * FROM Aluno WHERE nome LIKE ’Rafael%’; 14 SELECT * FROM Aluno WHERE nome NOT LIKE ’Rafael%’; 15 SELECT * FROM Aluno WHERE altura IN (1.5, 1.6, 1.7, 1.8); 16 SELECT * FROM Aluno WHERE altura NOT IN (1.5, 1.6, 1.7, 1.8); 17 SELECT * FROM Aluno WHERE NOT altura = 1.80; 18 SELECT * FROM Aluno WHERE altura < 1.8 AND nome LIKE ’Rafael%’; 19 SELECT * FROM Aluno WHERE altura < 1.8 OR nome LIKE ’Rafael%’; 20 SELECT * FROM Aluno WHERE altura < 1.8 XOR nome LIKE ’Rafael%’;

Código SQL 2.28: Resposta do exercício

Obs: nas consultas utilize valores que façam sentido de acordo com os valores que você inseriu na tabela.

ORDER BY

Os resultados de uma consulta podem ser ordenados através do comando ORDER BY. Para utilizar esse comando, é necessário indicar as colunas que serão utilizadas na ordenação dos registros. Veja o exemplo abaixo.

1 SELECT * FROM Aluno ORDER BY altura;

Código SQL 2.29: Ordenando os registros da tabela Aluno pela coluna altura

Aluno nome email telefone altura Jonas Hirata hirata@k19.com.br 11 23873791 1.76 Rafael Cosentino cosentino@k19.com.br 11 23873791 1.87

Tabela 2.7: Resultado da consulta: SELECT * FROM Aluno ORDER BY altura

www.k19.com.br 13

CONSULTAS 14

No exemplo acima, dois registros podem possuir a mesma altura. É possível definir uma se- gunda coluna para “desempatar”. Analogamente, podemos definir uma terceira coluna depois uma quarta e assim sucessivamente. Observe o código abaixo.

1 SELECT * FROM Aluno ORDER BY altura , nome;

Código SQL 2.30: Definindo uma sequência de colunas para realizar a ordenação dos registros

Para obter uma ordenação invertida, devemos aplicar o comando DESC. Esse comando é o con- trário do comando ASC. Esses comandos são utilizados na consulta abaixo.

1 SELECT * FROM Aluno ORDER BY altura DESC , nome ASC;

Código SQL 2.31: Aplicando os comandos DESC e ASC

Essa última consulta, ordena os registros utilizando a coluna altura de forma decrescente. Caso ocorra um “empate” a coluna nome será utilizada de forma crescente para tentar “desempatar”.

Exercícios de Fixação

4 Utilizando a tabela Aluno crie uma consulta que traga todos os alunos, sendo que os primeiro devem ser listados os alunos aprovados e em seguida os reprovados.

1 SELECT * FROM Aluno ORDER BY aprovado DESC;

Código SQL 2.32: Resposta do exercício

5 Utilizando a tabela Aluno crie uma consulta que traga todos os alunos aprovados ordenados pelo e-mail. Para desempate utilize as colunas altura (na orderm descrescente) e depois nome.

1 SELECT * FROM Aluno WHERE aprovado = 1 ORDER BY email , altura DESC , nome;

Código SQL 2.33: Resposta do exercício

Funções de Agrupamento

O resultado de uma consulta pode ser processado e algumas informações podem ser obtidas. Por exemplo, podemos obter o valor máximo ou mínimo de uma coluna numérica. É possível contabi- lizar a quantidade de registros obtidos através de uma consulta. Também podemos calcular a soma ou a média de uma coluna numérica entre outras informações.

Eis uma lista com as principais funções de agrupamento do MySQL Server e a sintaxe para aplicá- las:

• COUNT

1 SELECT COUNT (*) FROM Aluno;

• AVG

14 www.k19.com.br

15 CONSULTAS

1 SELECT AVG(altura) FROM Aluno;

• SUM

1 SELECT SUM(altura) FROM Aluno;

• MAX

1 SELECT MAX(altura) FROM Aluno;

• MIN

1 SELECT MIN(altura) FROM Aluno;

• VARIANCE

1 SELECT VARIANCE(altura) FROM Aluno;

• STD ou STDDEV

1 SELECT STD(altura) FROM Aluno; 2 SELECT STDDEV(altura) FROM Aluno;

Exercícios de Fixação

6 Utilizando a tabela Aluno crie uma consulta calcule a média das alturas dos alunos reprova- dos.

1 SELECT AVG(altura) FROM Aluno WHERE aprovado = 0;

Código SQL 2.41: Resposta do exercício

7 Utilizando a tabela Aluno crie uma consulta calcule a variância das alturas dos alunos com mais de 1,7m.

1 SELECT VARIANCE(altura) FROM Aluno WHERE altura > 1.7;

Código SQL 2.42: Resposta do exercício

GROUP BY

Os registros obtidos através de uma consulta podem ser agrupados com o comando GROUP BY e uma função de agrupamento pode ser aplicada nos grupos obtidos.

Por exemplo, queremos saber quantos alunos foram aprovados e quantos foram reprovados. Para isso, é necessário agrupar os alunos aprovados e os reprovados e depois contabilizar a quantidade de registros de cada grupo. Veja a consulta abaixo.

1 SELECT aprovado , COUNT (*) FROM Aluno GROUP BY aprovado;

www.k19.com.br 15

CONSULTAS 16

Podemos agrupar os registros utilizando várias colunas. Por exemplo, queremos saber quantos homens e quantas mulheres foram aprovados ou reprovados.

1 SELECT sexo , aprovado , COUNT (*) FROM Aluno GROUP BY sexo , aprovado;

Exercícios de Fixação

8 Utilizando a tabela Aluno crie uma consulta que calcule o número de alunos aprovados cujos nomes começam com a letra A ou terminam com a letra A, mas que não começam textbfe terminam com a letra A. Dê um apelido para a coluna com o número de alunos aprovados.

1 SELECT COUNT (*) AS total_aprovados 2 FROM Aluno WHERE aprovado = 1 AND nome LIKE ’A%’ XOR ’%A’ 3 GROUP BY aprovado;

Código SQL 2.45: Resposta do exercício

DISTINCT

Resultados repeditos de uma consulta podem ser eliminados através do comando DISTINCT. Por exemplo, queremos obter uma lista das cidades onde os alunos nasceram.

1 SELECT DISTINCT(cidade) FROM Aluno;

LIMIT

A quantidade de resultados de uma consulta pode ser limitada através do comando LIMIT. Na consulta abaixo, os 10 primeiros registros da tabela Aluno são recuperados. Se a quantidade de re- gistros nessa tabela for inferior a 10, todos os registros são recuperados.

1 SELECT * FROM Aluno LIMIT 10;

Também podemos descartar os primeiros registros do resultado de uma consulta. Para isso, basta passar dois parâmetros para o comando LIMIT.

1 SELECT * FROM Aluno LIMIT 5, 10;

No exemplo acima, os 5 primeiros registros da tabela Aluno são descartados. O resultado dessa consulta conterá no máximo 10 registros a partir do sexto.

16 www.k19.com.br

RELACIONAMENTOS

C A

P Í

T U

L O

3 UNIQUE

Em alguns casos nossas tabelas precisam ter a garantia de que uma determinada informação seja única dentre os registros. Por exemplo, uma tabela Cliente poderíamos ter uma coluna cpf para representar o número do CPF de um determinado cliente. Nesse caso seria interessante garantir que não sejam inseridos na tabela dois clientes com o mesmo CPF ou que um cliente não seja inserido duas vezes.

Para evitar esse tipo de problema poderíamos realizar uma consulta na tabela Cliente antes de fazermos a inserção afim de verificarmos se já existe algum cliente cadastrado com o CPF que desejamos inserir. Essa abordagem não seria tão ruim se as operações realizadas em um banco de dados não ocorressem de forma concorrente.

Como esse cenário é muito comum, geralmente os SGBDs disponibilizam formas de garantirmos a unicidade de um registro. No caso do MySQL, podemos utilizar a restrição UNIQUE.

1 CREATE TABLE Cliente( 2 nome VARCHAR (255), 3 cpf VARCHAR (20) UNIQUE 4 ) 5 ENGINE = InnoDB;

Código SQL 3.1: Utilizando a restrição UNIQUE

Também podemos apenas alterar uma coluna, caso a tabela já exista.

1 ALTER TABLE Cliente ADD UNIQUE (cpf);

Código SQL 3.2: Adicionando a restrição UNIQUE em uma tabela existente

Em uma tabela podemos ter quantas colunas com a restrição UNIQUE forem necessárias. Por exemplo, na tabela Aluno poderíamos ter a coluna primeiro_nome definida com a restrição UNIQUE e a coluna sexo sem a restrição. Ao tentarmos inserir um aluno do sexo masculino com o primeiro_nome Yuki poderemos ter um problema, pois em alguns países o nome Yuki pode ser usado tanto para ho- mens quanto para mulheres. Nesse caso poderíamos definir a restrição UNIQUE em um índice com- posto pelas colunas primeiro_nome e sexo.

1 CREATE TABLE Aluno ( 2 id INT NOT NULL , 3 primeiro_nome VARCHAR (255) NOT NULL , 4 sexo VARCHAR (255) NOT NULL , 5 UNIQUE INDEX(primeiro_nome , sexo) 6 ) 7 ENGINE = InnoDB ;

Código SQL 3.3: Utilizando a restrição UNIQUE em índices compostos

www.k19.com.br 17

comentários (1)
Fico grato gostei do material
Esta é apenas uma pré-visualização
3 shown on 42 pages
baixar o documento