Antes de iniciar o trabalho é importante lembrar que a nossa ênfase esta sobre o banco
MySQL.
DDL
Exemplo(s):
Exemplo(s):
Troca o esquema atual, ou seja, seta o esquema passado como parâmetro como default.
Na prática isso quer dizer que os comandos subseqüentes irão ser executados sobre o banco
escolhido.
Exemplo(s):
USE MeuBanco
Cria uma nova tabela, ou seja, a estrutura da mesma, descrevendo os campos que
comporão os registros desta tabela. A tabela será criada dentro do esquema que estiver setado
como esquema default. Aqui dizemos como as entidades serão abstraídas para o banco, quais os
tipos de cada atributo e podemos informar sobre as restrições de chave.
• Para definir campos obrigatórios usamos após o tipo do campo a expressão “NOT NULL”,
se quiser definir explicitamente que o campo pode ser nulo coloque após o tipo do campo
“NULL”, que é o qualificador default.
• Para definir uma chave primária usamos ao final da definição dos campos a expressão
“PRIMARY KEY (<campo1> [, <campo2>, ...])”, a melhor forma e mais documentada cria
uma constrainf restrição nomeada para melhor gerenciar.
• Para definir uma chave estrangeira usamos ao final da definição dos campos a expressão
“FOREIGN KEY (<campotabela>) REFERENCES <tabelaorigem (<campo>)>”, da mesma
forma que na chave primária é melhor criar uma constraint nomeada.
• Para definir uma chave única usamos ao final da definição dos campos a expressão
“UNIQUE KEY (<campotabela>, [<campotabela2, ...>])”, da mesma forma que na chave
primária é melhor criar uma constraint nomeada.
• Podemos também definir um campo onde o valor da chave seja criado automaticamente,
neste caso o campo deverá ser numérico, por exemplo, do tipo “integer”, também
devemos colocar a expressão “AUTO_INCREMENT” após o tipo do campo.
• Podemos criar uma restrição conforme uma expressão booleana qualquer, usando
inclusive as funções disponíveis no SGBD, usamos a clausula “CHECK” para criar a
restrição por expressão booleana.
Exemplo(s):
Elimina a tabela com nome especificado, esta tabela deve estar no esquema atualmente
em uso. Este comando deve ser usado com critério visto que além da estrutura da tabela também
são eliminados os registros da tabela (dados).
Exemplo(s):
Exemplo(s):
Exemplo(s):
DML
Para os exemplos a seguir considere as seguintes tabelas com mais alguns campos:
Insert into <tabela> (campo-1, ..., campo-n) values (valor-1, ..., valor-n)
Insere dados em uma tabela. Inserir dados em uma tabela significa incluir uma linha na
tabela, veja que para isso ocorrer os dados inseridos devem respeitar as regras que foram
definidas na estrutura da tabela. Não se pode esquecer que é necessário sempre definir a
estrutura da tabela, assim como suas restrições que guiarão os comandos DDL.
Exemplo(s):
Permite seleção de registros de uma ou mais tabelas. Este comando é bastante poderoso,
pois permite seleções filtradas, seleções consolidadas e seleções com relacionamento de mais de
uma tabela. Os Selects podem diminuir bastante o trabalho de um desenvolvedor.
Exemplo(s):
Listar todos os campos da tabela produtos que tiverem estoque baixo (<10):
SELECT * FROM Produtos WHERE qtdEstoque<10
Listar todos os campos da tabela que tiverem valor unitário maior que 0.50 e menor que 1.00:
SELECT * FROM Produtos WHERE valorUnit>0.50 AND
valorUnit<1.00
Listar todos os campos de produtos ordenados da maior quantidade em estoque para menor:
SELECT * FROM Produtos ORDER BY qtdEstoque DESC
Listar a descrição tanto de tipos de produtos, quanto de produtos, fazendo a relação correta entre
os dois:
SELECT a.descricao, b.descricao
ROM TiposProduto as a, Produtos as b
WHERE a.id_TipoProd=b.cd_TipoProd
O mesmo da seleção anterior acrescentando o campo valor_unit e informado que será ordenado
por ele:
SELECT a.descricao, b.descricao, valorUnit
FROM TiposProduto as a, Produtos as b
WHERE a.id_TipoProd=b.cd_TipoProd
ORDER BY valorUnit
Listar todos os campos de todos os produtos por ordem do que tem maior valor armazenado
SELECT *, (valorUnit*qtdEstoque) as total
FROM Produtos
ORDER BY total DESC
Listar todos os produtos que sejam do tipo 1 e que também estejam com estoque baixo, menos de
10 unidades:
SELECT * FROM Produtos WHERE cd_TipoProd=1 and
qtdEstoque<10
Listar todos os tipos de produto que não tem produto associado a ele:
SELECT * FROM TiposProduto
WHERE id_TipoProd NOT IN
(SELECT DISTINCT cd_TipoProd FROM Produtos)
Modifica dados de uma tabela. O desenvolvedor deve especificar quais campos e valores
devem ser alterados, assim como fornecer uma condição capaz de individualizar o conjunto de
registros que devem ser afetados, o uso de Update sem Where pode ser desastroso, já que
modifica todos os registros da tabela. O Update irá fazer uma varredura na tabela procurando
pelas linhas que satisfazem a condição lógica. Nas linhas verdadeiras serão aplicadas às
alterações.
Exemplo(s):
Elimina registros de uma tabela. A chave esta na expressão lógica que permitirá filtrar
qual conjunto de registros devem ser apagados, mais uma vez é desastroso usar o delete sem a
clausula where bem definida. Note que o comando delete não possui lista de campos, já que
sempre é uma linha inteira que será excluída. Note que é possível executar o comando delete e
este não apagar nenhuma linha, neste caso o teste booleano para todas as linhas foi falso.
Exemplo(s):
EXERCÍCIO PRÁTICO
Exemplo com migração de dados de uma tabela não normalizada para um esquema apropriado:
Tarefas:
Nesta etapa devemos analisar os dados, procurar por imperfeições de digitação e deixar o
mais padronizado possível, o uso de SELECTs de vários tipos e UPDATE são os principais
nesta fase.
• Note que a ordem de criação é importante, já que na definição das chaves estrangeiras
fazemos referência a tabela mãe.