Básico de SQL na Prática:
DDM e DDL
Prof. André Luiz F. Alves
A Linguagem de Definição de Dados (DDL) da SQL
• CREATE [TABLE | VIEW | INDEX] – Criação de uma tabela (CREATE TABLE) de uma visão (CREATE VIEW) ou de um índice (CREATE INDEX).
• ALTER TABLE – Alteração da definição (meta- esquema) de uma tabela, com a adição de uma coluna à esquerda.
• DROP [TABLE | VIEW | INDEX] – Destruição (dados e definição) de uma tabela básica (DROP
TABLE), de uma visão (DROP VIEW) ou de um índice
Linguagem DDL da SQL
• FUNCIONÁRIO(matricula, nome_func, endereco, salario, cod_departamento )
DROP TABLE IF EXISTS `empresa`.`Funcionario`;
CREATE TABLE Funcionario(
matricula SMALLINT NOT NULL, nome_func CHAR(30),
endereco VARCHAR(50), salario DECIMAL,
cod_depto SMALLINT,
PRIMARY KEY (matricula) )
Linguagem DDL da SQL
• DEPARTAMENTO (cod_dep, sigla, nome_depto, mat_diretor )
CREATE TABLE `departamento` (
`cod_dep` smallint(6) NOT NULL,
`sigla` char(30), `nome` varchar(100),
`mat_diretor` smallint(6), PRIMARY KEY (`cod_dep`),
CONSTRAINT `FK_departamento_1` FOREIGN KEY (`mat_diretor`) REFERENCES
`funcionario` (`matricula`)
Exercícios
Linguagem DDL da SQL: Alteração em tabelas
ALTER TABLE `departamento` ADD UNIQUE INDEX
`Index_sigla`(`sigla`);
ALTER TABLE `funcionario`
ADD CONSTRAINT `FK_funcionário_depart`
FOREIGN KEY (`cod_depto`)
REFERENCES `departamento` (`cod_dep`) ON DELETE RESTRICT ON UPDATE RESTRICT;
Porque a Chave Estrangeira acima não foi criada no
Comando CREATE TABLE?
Linguagem SQL
• Comentários:
– Com delimitadores: /* e */
• Estas marcam delimitam o escopo de um comentário em uma consulta. Esta pode ser inclusive maior que uma linha.
– Sem delimitadores: --
• A marca acima indica que, a partir daquele
ponto, tudo que se seguir até o final da linha
representa um comentário.
Linguagem de Manipulação de Dados (DML) da SQL
Quatro comandos integram esta classe:
• SELECT – Seleção de atributos de uma tabela
• INSERT – Inclusão de uma ou várias tuplas em uma tabela
• DELETE – Remoção de uma ou várias tuplas de uma tabela
• UPDATE – Atualização de valores de atributos
DML da SQL
O comando INSERT: Temos dois formatos possíveis:
INSERT INTO tabela [ ( nome-do atributo [ , nome-do atributo ] ) ]
VALUES ( valor-constante [ , valor-constante ] ) ou
INSERT INTO tabela [ ( nome-do atributo [ , nome-do atributo ] ) ]
sub-consulta
DML da SQL
Os comandos abaixo funcionam?
INSERT INTO Funcionario ( matricula, nome_func, cod_depto) VALUES ( 11344, 'Jorge de Abreu', 7321) INSERT INTO departamento(cod_dep,sigla, nome, mat_diretor)
VALUES ( 7100, 'CPD','Centro de Processamento de Dados', 1115)
FOREIGN KEY CONSTRAINT FAILS...
DML da SQL
Por enquanto esqueçamos as Chaves Estrangeiras...
INSERT INTO departamento(cod_dep,sigla, nome, mat_diretor) VALUES ( 7100, 'CPD','Centro de Processamento de Dados', null) Ou
INSERT INTO departamento(cod_dep,sigla, nome)
VALUES ( 7100, 'CPD','Centro de Processamento de Dados')
DML da SQL
Cod_dpto
INSERT INTO Funcionario ( matricula, nome_func, cod_depto) VALUES ( 11344, 'Jorge de Abreu', 7321)
válido
DML da SQL
E Os Departamentos vão ficar sem diretor?
O comando UPDATE:
Formato Geral:
UPDATE tabela
SET atributo = expressão [ , atributo = expressão ] [WHERE condição]
Exemplos:
update departamento set mat_diretor = 11344
DML da SQL
O presidente mandou atualizar para R$ 500,00 todos os salários inferiores a R$ 300.
update Funcionário SET salario =500 where salario <=300;
O endereço de um funcionário foi cadastrado errado.
UPDATE Funcionário SET endereco = ‘Rua Mena Barreto, 20’ WHERE nome_func = ‘Jorge de Abreu Soares’
Novo Salário dos Funcionários do CPD: R$ 1200,00
update Funcionario SET salario =1200
where cod_dpto = 7100;
DML da SQL
O comando DELETE
Formato Geral: DELETE FROM tabela [WHERE condição]
Este comando remove todas as tuplas de uma tabela, segundo a especificação da cláusula WHERE, caso exista. Se esta não existir, todas as instâncias da tabela são removidas; contudo, a descrição da tabela no catálogo do sistema permanece intacta.
DELETE FROM Funcionário
WHERE nome_func = ‘João da Silva’
E se o funcionário for demetido?
DML da SQL
• SELECT: Este comando, um dos mais utilizados pelos usuários de Sistemas Gerenciadores de Banco de Dados, tem a função principal de recuperar dados de uma ou mais tabelas do banco de dados,
possivelmente segundo algum critério.
Formato Geral:
SELECT [ALL | DISTINCT] lista-de-seleção FROM tabela [nome-correlato]
[ , tabela [nome-correlato] ] [ WHERE condição ]
[ GROUP BY atributo [ , atributo ] ] [ HAVING condição ]
[ ORDER BY atributo [ , atributo ] [ASC | DESC] ]
• Consulta simples com recuperação de alguns campos:
SELECT matricula, nome_func FROM Funcionário
DML da SQL
• Pesquisando com LIKE
SELECT * FROM funcionario
WHERE nome_func like '%ABREU%';
• Uso do qualificador DISTINCT:
SELECT DISTINCT cod_dpto FROM Funcionário
DML da SQL
• Consulta simples com qualificação::
SELECT matricula, nome_func, endereco, salario FROM Funcionário WHERE matricula < 11000
DML da SQL
• Consulta simples com ordenação SELECT matricula, nome_func
FROM Funcionário WHERE matricula >= 11000 ORDER BY nome_func
DML da SQL
SELECT matricula, nome_func FROM Funcionário
WHERE matricula >= 11000
ORDER BY nome_func DESC
• Consulta de junção
SELECT *
FROM Departamento as d,Funcionario as f
WHERE (f.cod_depto = d.cod_dep) AND (d.sigla='CPD')
Pesquisa mais sobre Junção (JOIN) no manual do MySql.
A Linguagem SQL oferece muito mais recursos. Um bom profissional de informática deve conhecer mais....