40
Disciplina: BANCO DE DADOS II Aula Estrutura Liguagem SQL Prof. Izaac Espíndola [email protected] 03/09/2012

Banco de Dados

Embed Size (px)

Citation preview

Page 1: Banco de Dados

Disciplina: BANCO DE DADOS II

Aula Estrutura Liguagem SQL

Prof. Izaac Espíndola [email protected]

03/09/2012

Page 2: Banco de Dados

Estrutura da Linguagem

SQL DQL (Data Query Language)

SELECT Usado para Projetar , Ordenar o processo de exibição dos

dados.

DML (Data Manipulation Language)

DELETE, INSERT, UPDATE Usado diretamente para Manipulação de Dados.

DDL (Data Definition Language)

DROP, TRUNCATE, CREATE, ALTER Usado para manipular estrutura dos databases.

DCL

REVOKE, GRANT Usado para permitir ou bloquear acessos a estrutura e dados.

Page 3: Banco de Dados

TIPOS DE DADOS

CHAR

Variáveis ou constantes que armazenam valores alfanuméricos com no máximo de 255 caracteres.

Exemplo:

Pagamento CHAR(40);

VARCHAR2

Variáveis que armazenam valores alfanuméricos de tamanho variável até o tamanho máximo de 2000.

Exemplo:

Nome VARCHAR2(45);

Page 4: Banco de Dados

TIPOS DE DADOS

NUMBER

Variáveis ou constantes que armazenam valores numéricos com no máximo de 38 caracteres. Caso não seja informado o tamanho, o default é 38. Também pode ser definido precisão escalar.

Exemplos:

Recibo NUMBER(2);

Codigo CONSTANT NUMBER(4) :=1;

Preco NUMBER(7,2)

Page 5: Banco de Dados

TIPOS DE DADOS

DATE

Variáveis ou constantes que armazenam data, hora (com minutos e segundo e o século).

Exemplo:

Data_receb DATE;

BOOLEAN

Variáveis ou constantes que armazenam TRUE, FALSE ou NULL.

Exemplo:

Flag BOOLEAN;

Page 6: Banco de Dados

DDL (Data Definition Language)

Comando Create

Create Table <nome> (

<campo> <tipo>(<tamanho>) [NOT NULL],

...

[CONSTRAINT "PK_<tableName>“] primary key (<campo1>,[<campo2>,...,<campon>]),

[CONSTRAINT “FK_<tableName>“][foreign key] (<campo>) REFERENCES <table>(campo)

);

Page 7: Banco de Dados

DDL

Exemplo Oracle: Create table pessoa (

cod_pessoa number(5) NOT NULL,

nome varchar2(150) NOT NULL,

endereco varchar2(150) ,

fone varchar2(11) ,

tipo char(1) NOT NULL,

CONSTRAINT “PK_PESSOA” primary key (cod_pessoa)

);

Page 8: Banco de Dados

DDL

Exemplo 1 MySql:

Create table pessoa (

cod_pessoa numeric(5) NOT NULL,

nome varchar(150) NOT NULL,

endereco varchar(150),

fone varchar(11),

tipo char(1) NOT NULL,

CONSTRAINT PK_COD_PESSOA PRIMARY KEY

(COD_PESSOA)

);

Dessa forma você cria a chave primária junto com a

tabela.

Page 9: Banco de Dados

DDL

Exemplo 2 MySql:

Create table pessoa (

cod_pessoa numeric(5) NOT NULL,

nome varchar(150) NOT NULL,

endereco varchar(150),

fone varchar(11),

tipo char(1) NOT NULL

);

alter table pessoa add primary key (cod_pessoa);

Dessa forma você Cria e depois alterar a tabela

criando a chave que você queira.

ALTER TABLE pessoa DROP PRIMARY KEY ;

Elimana a chave primaria criada.

Page 10: Banco de Dados

DDL

Exemplo Oracle: Create table funcionario (

cod_pessoa number(5) NOT NULL,

cod_cargo number(5) NOT NULL,

salario number(5,2) ,

CONSTRAINT “PK_FUNC” primary key (cod_pessoa),

CONSTRAINT “FK_PESSOA” foreign key (cod_pessoa)

references pessoa(cod_pessoa),

CONSTRAINT “FK_CARGO” foreign key (cod_cargo)

references cargo(cod_cargo)

);

Page 11: Banco de Dados

DDL

Exemplo MySQL: Create table funcionario (

cod_pessoa numeric(5),

cod_cargo numeric(5),

salario numeric(5,2),

CONSTRAINT PK_FUNC primary key (cod_pessoa),

CONSTRAINT FK_PESSOA foreign key (cod_pessoa)

references pessoa(cod_pessoa),

CONSTRAINT FK_CARGO foreign key (cod_cargo)

references cargo(cod_cargo)

);

Page 12: Banco de Dados

DDL

Comando Alter Oracle Modificando uma coluna

Alter Table <nome> MODIFY (

<campo> <tipo>(<tamanho>) [NOT NULL]

);

Ex:

Alter Table pessoa MODIFY (

nome varchar2(200) NOT NULL

);

Page 13: Banco de Dados

DDL

Comando Alter MySQL Modificando uma coluna

Alter Table <nome> CHANGE COLUMN (

<campo> <tipo>(<tamanho>) [NOT NULL]

);

Ex:

Alter Table pessoa CHANGE COLUMN (

nome varchar(200) NOT NULL

);

Page 14: Banco de Dados

DDL

Comando Alter Oracle Adicionando uma coluna

Alter table <nome> add (

<campo> <tipo>(<tamanho>) [NOT NULL]

);

Ex: Alter table funcionario add (

data date NOT NULL

);

Page 15: Banco de Dados

DDL

Comando Alter MySQL Adicionando uma coluna

Alter table <nome> add column (

<campo> <tipo>(<tamanho>) [NOT NULL]

);

Ex: Alter table funcionario add column (

data date NOT NULL

);

Page 16: Banco de Dados

DDL

Comando Alter Oracle Eliminando uma coluna

Alter Table <nome> DROP (

<campo>

);

Ex:

Alter Table funcionario DROP (

data

);

Page 17: Banco de Dados

DDL

Comando Alter MySQL Eliminando uma coluna

Alter Table <nome> drop column(

<campo>

);

Ex:

Alter Table funcionario DROP COLUMN(

data

);

Page 18: Banco de Dados

DDL

Comando Drop Oracle

Excluindo uma tabela

DROP TABLE [<esquema>.]<tabela> [CASCADE CONSTRAINTS];

Ex:

DROP TABLE pessoa [CASCADE CONSTRAINTS];

Page 19: Banco de Dados

DDL

Comando Drop MySQL

Excluindo uma tabela

DROP TABLE [<esquema>.]<tabela> ;

Ex:

DROP TABLE pessoa ;

Page 20: Banco de Dados

Criação de Tabelas CREATE TABLE <tabela> „(„ <coluna> <tipo da coluna> [ restrição do atributo ] { , <coluna> <tipo da coluna> [ restrição do atributo ] } [ <restrição da tabela> { , <restrição da tabela> } ] „)‟

CREATE TABLE DEPARTAMENTO (Nome VARCHAR(15) NOT NULL,

Numero INTEGER PRIMARY KEY);

CREATE TABLE EMPREGADO (Nome VARCHAR(30) NOT NULL,

CPF CHAR(9) NOT NULL,

Data-Nasc DATE,

Endereço VARCHAR(30),

Sexo CHAR(1),

Salário INTEGER,

Supervisor CHAR(9) REFERENCES EMPREGADO,

Dept INTEGER REFERENCES DEPARTAMENTO,

PRIMARY KEY (CPF),

UNIQUE (Nome));

Page 21: Banco de Dados

Alteração de Tabelas

ALTER TABLE <tabela> <lista de alterações na tabela>

ALTER TABLE EMPREGADO

ADD COLUMN Cor_predileta CORES;

ALTER TABLE EMPREGADO

ADD FOREIGN KEY chave_dept

REFERENCES DEPARTAMENTO

ON DELETE RESTRICT

ON UPDATE CASCADE;

ALTER TABLE EMPREGADO

ADD CONSTRAINT salario_minimo

CHECK (Salario >= 10000);

Page 22: Banco de Dados

COMANDOS DE MANIPULAÇÃO

DE DADOS EM BANCO

INSERT, DELETE, UPDATE e SELECT. Os comando relacionados são utilizados através de sintaxe que utilizam valores para realizar procedimentos ralacionados

Para controlar as transações com o banco de dados (iniciadas implicitamente com qualquer comando de modificação de dados), utiliza-se os comandos COMMIT, SAVEPOINT e ROLLBACK.

Para garantir que os dados a serem manipulados não serão alterados ou excluídos por outros usuários, utiliza-se o comandos LOCK TABLE ou o comando SELECT com a cláusula FOR UPDATE.

Page 23: Banco de Dados

Comandos de Manipulação de Dados

INSERT INTO <tabela> [ ( <lista de colunas> ) ] ( VALUES ( <lista de valores> ) | <comando SELECT> )

UPDATE <tabela> SET <coluna> = <valor> {, <coluna> = <valor>} [ WHERE <condição de seleção> ]

DELETE FROM <tabela> [ WHERE <condição de seleção> ]

Page 24: Banco de Dados

DML (Data Manipulation Language)

Comando Insert

Insert into [<esquema.>]<tabela> [(campo1,...,campon)] values

(valor1,...,valorn);

Ex.:

Insert into cargo (cod_cargo,descricao) values (1,‟Caixa‟);

Insert into pessoa (cod_pessoa,nome,endereco,fone,tipo) values

(1,‟Bruno‟,‟meu_endereco‟,‟99999999‟,‟F‟);

Insert into funcionario (cod_pessoa,cod_cargo,salario) values

(1,1,‟250.33‟);

Page 25: Banco de Dados

DML

Comando Update

update [<esquema.>]<tabela> set campo1 =

valor1,...,campon = valorn WHERE condição

Ex.:

Update pessoa set endereco = „novo_endereco‟, fone =

null where cod_pessoa = 1;

Update funcionario set salario = „650.60‟ where

cod_pessoa = 1

Page 26: Banco de Dados

DML

Comando Delete

Delete from [<esquema.>]<tabela> WHERE

condição

Ex.:

Delete from funcionario where cod_pessoa = 1;

Delete from pessoa where cod_pessoa = 1;

Page 27: Banco de Dados

SQL como linguagem de consulta

para usuários finais

A proposta inicial da SQL era prover uma interface de consulta “natural” para usuários finais através do comando SELECT. Logo se percebeu que isto só seria possível em consultas muito simples, devido à complexidade da linguagem.

Consulta: Para cada departamento com mais de 2 empregados, obtenha o nome do departamento e o número de empregados que ganham mais de 30.000.

SELECT D.Nome, COUNT(*) FROM DEPARTAMENTO AS D, EMPREGADO AS E WHERE D.Número=E.Dept AND E.Salário > 30000 AND E.Dept IN (SELECT Dept FROM EMPREGADO GROUP BY Dept HAVING COUNT(*) > 2) GROUP BY D.Nome;

Page 28: Banco de Dados

DML

Comando Select

Select {* | <campo1,...,campon>} from <tabela> [where condição]

Ex.:

/* Listando todos os atributos de todas as pessoas */

Select * from pessoa;

/* Listando nome e endereco de todas as pessoas */

Select nome,endereco from pessoa;

/* Listando nome e cargo de todos os funcionários */

Select pessoa.nome, cargo.descricao from pessoa, cargo,

funcionario where pessoa.cod_pessoa = funcionario.cod_pessoa

and funcionario.cod_cargo=cargo.cod_cargo;

Page 29: Banco de Dados

DML

Comando Select

Consultas encadeadas /* Listar o cliente que possui mais pontos*/

Select pessoa.nome from pessoa, cliente where

cliente.pontos = (select MAX(cliente.pontos) from

cliente) and pessoa.cod_pessoa = cliente.cod_pessoa;

Page 30: Banco de Dados

DML

Comando Select

Cláusula Distinct /* Listando todos os cargos que possuem ao menos um

funcionário*/

Select distinct cargo.descricao from funcionario,

cargo where funcionario.cod_cargo = cargo.cod_cargo;

Page 31: Banco de Dados

DML

Comando Select

Cláusula Group By /* Listando os cargos e a quantidade de

funcionários em cada cargo agrupados por

cargo */

select cod_cargo, count(cod_cargo) as soma

from funcionario group by

funcionario.cod_cargo

Page 32: Banco de Dados

DML

Comando Select

Cláusula Having /* Listando os cargos e a quantidade de

funcionários em cada cargo agrupados por

cargo, porém só para aqueles cargos que

possuem mais de dois funcionários atrelados

a ele. */

select cod_cargo, count(cod_cargo) as soma

from funcionario group by

funcionario.cod_cargo having count(*) >= 2;

Page 33: Banco de Dados

DML

Comando Select

Cláusula order by /* Listando o nome dos clientes em ordem alfabética */

Select pessoa.nome from pessoa where pessoa.tipo = „C‟

order by pessoa.nome;

/* Listando os salários em ordem decrescente */

Select funcionario.salario from funcionario order by

salario desc;

Page 34: Banco de Dados

DML

Comando Select Cláusulas in e or /* Listando o nome dos funcionários cujo cargo seja

caixa ou embalador */

Select pessoa.nome from pessoa,funcionario,cargo where

pessoa.cod_pessoa = funcionario.cod_pessoa and

funcionario.cod_cargo = cargo.cod_cargo and

cargo.descricao in („caixa‟,‟embalador‟);

Select pessoa.nome from pessoa,funcionario,cargo where

pessoa.cod_pessoa = funcionario.cod_pessoa and

funcionario.cod_cargo = cargo.cod_cargo and

cargo.descricao = „caixa‟ or cargo.descricao =

‟embalador‟;

Page 35: Banco de Dados

DML

Comando Select Funções (MAX, MIN, SUM, AVG, COUNT) /* Mostrar o valor do maior salário dos funcionários */

Select MAX (salario) from Funcionario

/* Mostrar qual o a média de pontos dos clientes */

Select AVG (pontos) from Cliente

/* Mostrar quantos clientes possuem mais de 1000 pontos */

Select COUNT (*) from Cliente where pontos > 1000

/* Mostrar as despesas com pagamento de salário dos funcionários que

o supermercado possui */

Select SUM (salario) from Funcionario

Page 36: Banco de Dados

Condições de junção em SQL

SELECT EMPREGADO.Nome, Sexo,Data_Nasc, Salário,

DEPARTAMENTO.Nome

FROM DEPARTAMENTO INNER JOIN EMPREGADO

ON DEPARTAMENTO.Número = EMPREGADO.Dept

WHERE Salário>=30000;

SELECT EMPREGADO.Nome, Sexo,Data_Nasc, Salário,

DEPARTAMENTO.Nome

FROM DEPARTAMENTO, EMPREGADO

WHERE DEPARTAMENTO.Número = EMPREGADO.Dept

AND Salário>=30000;

As consultas acima são equivalentes

Page 37: Banco de Dados
Page 38: Banco de Dados
Page 39: Banco de Dados
Page 40: Banco de Dados

40

Fim