Você está na página 1de 40

Aula Estrutura Liguagem SQL

Prof. Izaac Espndola


izaac@faculdadeguararapes.edu.br 03/09/2012

Disciplina: BANCO

DE DADOS II

Estrutura da Linguagem SQL

DQL (Data Query Language)

SELECT

Usado para Projetar , Ordenar o processo de exibio dos dados. DML (Data Manipulation Language)

DELETE, INSERT, UPDATE

Usado diretamente para Manipulao 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.

TIPOS DE DADOS

CHAR
Variveis ou constantes que armazenam valores alfanumricos com no mximo de 255 caracteres.

Exemplo:
Pagamento CHAR(40); VARCHAR2 Variveis que armazenam valores alfanumricos de tamanho varivel at o tamanho mximo de 2000.

Exemplo:
Nome VARCHAR2(45);

TIPOS DE DADOS

NUMBER
Variveis ou constantes que armazenam valores numricos com no mximo de 38 caracteres. Caso no seja informado o tamanho, o default 38. Tambm pode ser definido preciso escalar.

Exemplos: Recibo NUMBER(2); Codigo CONSTANT NUMBER(4) :=1;


Preco NUMBER(7,2)

TIPOS DE DADOS

DATE
Variveis ou constantes que armazenam data, hora (com minutos e segundo e o sculo).

Exemplo:
Data_receb DATE; BOOLEAN Variveis ou constantes que armazenam TRUE, FALSE ou NULL. Exemplo: Flag BOOLEAN;

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)

);

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) );

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 primria junto com a tabela.

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.

DDL

Exemplo Oracle:
funcionario ( number(5) NOT NULL, number(5) NOT NULL, number(5,2) , PK_FUNC primary key (cod_pessoa), FK_PESSOA foreign key (cod_pessoa) pessoa(cod_pessoa), FK_CARGO foreign key (cod_cargo) cargo(cod_cargo)

Create table cod_pessoa cod_cargo salario CONSTRAINT CONSTRAINT references CONSTRAINT references );

DDL

Exemplo MySQL:
funcionario ( numeric(5), numeric(5), numeric(5,2), PK_FUNC primary key (cod_pessoa), FK_PESSOA foreign key (cod_pessoa) pessoa(cod_pessoa), FK_CARGO foreign key (cod_cargo) cargo(cod_cargo)

Create table cod_pessoa cod_cargo salario CONSTRAINT CONSTRAINT references CONSTRAINT references );

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 );

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 );

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 );

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 );

DDL

Comando Alter Oracle

Eliminando uma coluna


Alter Table <nome> DROP ( <campo> ); Ex: Alter Table funcionario DROP ( data );

DDL

Comando Alter MySQL

Eliminando uma coluna


Alter Table <nome> drop column( <campo> ); Ex: Alter Table funcionario DROP COLUMN( data );

DDL

Comando Drop Oracle

Excluindo uma tabela

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

Ex: DROP TABLE pessoa [CASCADE CONSTRAINTS];

DDL

Comando Drop MySQL

Excluindo uma tabela

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

Ex: DROP TABLE pessoa ;

Criao de Tabelas
CREATE TABLE <tabela> ( <coluna> <tipo da coluna> [ restrio do atributo ] { , <coluna> <tipo da coluna> [ restrio do atributo ] } [ <restrio da tabela> { , <restrio da tabela> } ] )
CREATE TABLE DEPARTAMENTO (Nome Numero VARCHAR(15) INTEGER NOT NULL, PRIMARY KEY); NOT NULL, NOT NULL,

CREATE TABLE EMPREGADO (Nome VARCHAR(30) CPF CHAR(9) Data-Nasc DATE, Endereo VARCHAR(30), Sexo CHAR(1), Salrio INTEGER, Supervisor CHAR(9) Dept INTEGER PRIMARY KEY (CPF), UNIQUE (Nome));

REFERENCES EMPREGADO, REFERENCES DEPARTAMENTO,

Alterao de Tabelas
ALTER TABLE <tabela> <lista de alteraes 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);

COMANDOS DE MANIPULAO
DE DADOS EM BANCO INSERT, DELETE, UPDATE e SELECT. Os comando relacionados so utilizados atravs de sintaxe que utilizam valores para realizar procedimentos ralacionados Para controlar as transaes com o banco de dados (iniciadas implicitamente com qualquer comando de modificao de dados), utiliza-se os comandos COMMIT, SAVEPOINT e ROLLBACK.

Para garantir que os dados a serem manipulados no sero alterados ou excludos por outros usurios, utiliza-se o comandos LOCK TABLE ou o comando SELECT com a clusula FOR UPDATE.

Comandos de Manipulao de Dados


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

UPDATE <tabela> SET <coluna> = <valor> {, <coluna> = <valor>} [ WHERE <condio de seleo> ]

DELETE FROM <tabela> [ WHERE <condio de seleo> ]

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);

DML

Comando Update
update [<esquema.>]<tabela> set campo1 = valor1,...,campon = valorn WHERE condio
Ex.: Update pessoa set endereco = novo_endereco, fone = null where cod_pessoa = 1; Update funcionario set salario = 650.60 where cod_pessoa = 1

DML

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

Ex.:
Delete from funcionario where cod_pessoa = 1;

Delete from pessoa where cod_pessoa = 1;

SQL como linguagem de consulta para usurios finais


A proposta inicial da SQL era prover uma interface de consulta natural para usurios finais atravs do comando SELECT. Logo se percebeu que isto s seria possvel em consultas muito simples, devido complexidade da linguagem. Consulta: Para cada departamento com mais de 2 empregados, obtenha o nome do departamento e o nmero de empregados que ganham mais de 30.000. SELECT D.Nome, COUNT(*) FROM DEPARTAMENTO AS D, EMPREGADO AS E WHERE D.Nmero=E.Dept AND E.Salrio > 30000 AND E.Dept IN (SELECT Dept FROM EMPREGADO GROUP BY Dept HAVING COUNT(*) > 2) GROUP BY D.Nome;

DML

Comando Select
Select {* | <campo1,...,campon>} from <tabela> [where condio] 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 funcionrios */ Select pessoa.nome, cargo.descricao from pessoa, cargo, funcionario where pessoa.cod_pessoa = funcionario.cod_pessoa and funcionario.cod_cargo=cargo.cod_cargo;

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;

DML

Comando Select

Clusula Distinct

/* Listando todos os cargos que possuem ao menos um funcionrio*/ Select distinct cargo.descricao from funcionario, cargo where funcionario.cod_cargo = cargo.cod_cargo;

DML
Comando

Select

Clusula Group By /* Listando os cargos e a quantidade de funcionrios em cada cargo agrupados por cargo */ select cod_cargo, count(cod_cargo) as soma from funcionario group by funcionario.cod_cargo

DML

Comando Select

Clusula Having

/* Listando os cargos e a quantidade de funcionrios em cada cargo agrupados por cargo, porm s para aqueles cargos que possuem mais de dois funcionrios atrelados a ele. */ select cod_cargo, count(cod_cargo) as soma from funcionario group by funcionario.cod_cargo having count(*) >= 2;

DML

Comando Select

Clusula order by

/* Listando o nome dos clientes em ordem alfabtica */ Select pessoa.nome from pessoa where pessoa.tipo = C order by pessoa.nome; /* Listando os salrios em ordem decrescente */ Select funcionario.salario from funcionario order by salario desc;

DML

Comando Select

Clusulas in e or

/* Listando o nome dos funcionrios 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;

DML

Comando Select

Funes (MAX, MIN, SUM, AVG, COUNT)

/* Mostrar o valor do maior salrio dos funcionrios */ Select MAX (salario) from Funcionario

/* Mostrar qual o a mdia 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 salrio dos funcionrios que o supermercado possui */ Select SUM (salario) from Funcionario

Condies de juno em SQL


SELECT EMPREGADO.Nome, Sexo,Data_Nasc, Salrio, DEPARTAMENTO.Nome FROM DEPARTAMENTO, EMPREGADO WHERE DEPARTAMENTO.Nmero = EMPREGADO.Dept AND Salrio>=30000; SELECT EMPREGADO.Nome, Sexo,Data_Nasc, Salrio, DEPARTAMENTO.Nome FROM DEPARTAMENTO INNER JOIN EMPREGADO ON DEPARTAMENTO.Nmero = EMPREGADO.Dept WHERE Salrio>=30000;

As consultas acima so equivalentes

Fim

40

Você também pode gostar