segunda-feira, 4 de junho de 2007

SQL

Structured Query language SQL

É uma linguagem de pesquisa declarativa e de programação para banco de dados relacional. O SQL foi desenvolvido no início da década de 70 nos laboratórios da IBM, no projeto System R, que tinha por objetivo demonstrar a viabilidade da implementação do modelo relacional proposto por E. F. Codd. O nome original da linguagem era SEQUEL, acrônimo para "Structured English Query Language".A linguagem SQL foi desenvolvida pela IBM, visando realizar operações em SGBDs. Ela é subdividida em quatro categorias:

  • Linguagem de definição de dados(DDL):
  • Linguagem de manipulação de dados(DML)
  • Linguagem de controle de dados (DCL)
  • Linguagem de controle de Transação(TCL)


DDL Data Defition Language:

  • CREATE – Para crier objetos de banco de dados.
  • ALTER – Alterar estrutura de objetos no banco de dados.
  • DROP – Excluir objetos no Banco de dados.
  • TRUNCATE –Exclui todos os registros de uma tabela.
  • RENAME – Renomeia objetos de banco de dados

Exemplos:

a) CREATE:
   Create table <Nome_da_tabela> (<Nome_do_campo>  <tipo> <tamanho> <requerido>); 
b) ALTER:
    Alter table <Nome_da_tabela> add <Nome_do_campo>  <tipo> <tamanho> <requerido>;  

c) DROP
Excluindo uma coluna
   Alter table <Nome_da_tabela> drop <Nome_do_campo>
;

Excluido uma tabela
   Drop table <Nome_da_tabela> 


DML Data Manipulation Language:

• SELECT – Seleciona dados.
• INSERT – Insere dados numa tabela
• UPDATE – Altera registros de uma tabela.
• DELETE – Apaga registros de uma tabela.

Exemplo:

d) Select:

Select From Where

e) Insert:

Insert Into Values

f) UpDate:
UpDate  Set =  ;

g) Delete:
Delete from  Where   ;



DCL Data Controul Language:
o GRANT – Concede privilégios a usuários sobre objetos do banco (gives user's access privileges to database)
o REVOKE – Retira privilégios de usuários (withdraw access privileges given with the GRANT command)
Exemplo:
h) Grant:

Grant on to

i) Revoke:
Revoke  on   from   


TCL

Transaction Control Language (TCL) Comandos que gerenciam manipulações através de DML sobre os registros de uma banco de dados. Esse gerenciamento e feito através de controle de transações. (statements are used to manage the changes made by DML statements. It allows statements to be grouped together into logical transactions).
o COMMIT – Confirma operação realizada. Aplica definitivamente, fisicamente a operação realizada.
o SAVEPOINT – Marca pontos onde a transação pode ser efetivada ou não.
o ROLLBACK – Cancela uma operação iniciada pelo START TRANSACTION.
o START TRANSACTION/ BEGIN TRANS – Incia uma transação.
o SET TRANSACTION – Configura uma transação, como nível de isolamento e seguimentos de Rollback.



Um Script de exemplo - Inerbase/ Fire Bird


CREATE DATABASE 'G:\\BancoCurso.gdb'
USER 'SYSDBA' PASSWORD 'masterkey'
PAGE_SIZE 4096;


/******************************************************************************/
/* DOMAIN */
/******************************************************************************/


CREATE DOMAIN MOEDA AS NUMERIC(15,2) DEFAULT 0;
CREATE DOMAIN BOOLEAN AS CHAR(1) DEFAULT 'F' CHECK(VALUE IN ('F','T'));


/******************************************************************************/
/* Tables */
/******************************************************************************/

CREATE TABLE CLIENTES (
ID_CLIENTE INTEGER NOT NULL,
NOME VARCHAR(60) NOT NULL,
CPF CHAR(11) NOT NULL,
ENDERECO VARCHAR(60) NOT NULL,
BAIRRO VARCHAR(40) NOT NULL,
CIDADE VARCHAR(40) NOT NULL,
ESTADO CHAR(2) NOT NULL,
DATACAD TIMESTAMP NOT NULL,
STATUS BOOLEAN
);



CREATE TABLE ITENS (
ID_PEDIDO INTEGER NOT NULL,
ID_PRODUTO INTEGER NOT NULL,
QUANTIDADE INTEGER NOT NULL,
PRECOVENDA MOEDA NOT NULL
);

CREATE TABLE PEDIDOS (
ID_PEDIDO INTEGER NOT NULL,
ID_CLIENTE INTEGER NOT NULL,
DATAPED TIMESTAMP NOT NULL
);

CREATE TABLE PRODUTOS (
ID_PRODUTO INTEGER NOT NULL,
DESCRICAO VARCHAR(60) NOT NULL,
PRECOCOMPRA MOEDA NOT NULL,
QUANTIDADE INTEGER NOT NULL
);


/******************************************************************************/
/* Primary Keys */
/******************************************************************************/

ALTER TABLE CLIENTES ADD PRIMARY KEY (ID_CLIENTE);
ALTER TABLE PEDIDOS ADD PRIMARY KEY (ID_PEDIDO);
ALTER TABLE PRODUTOS ADD PRIMARY KEY (ID_PRODUTO);
ALTER TABLE ITENS ADD PRIMARY KEY(ID_PEDIDO, ID_PRODUTO);


/******************************************************************************/
/* Foreign Keys */
/******************************************************************************/


ALTER TABLE ITENS ADD FOREIGN KEY (ID_PRODUTO) REFERENCES PRODUTOS (ID_PRODUTO);
ALTER TABLE ITENS ADD FOREIGN KEY (ID_PEDIDO) REFERENCES PEDIDOS (ID_PEDIDO);
ALTER TABLE PEDIDOS ADD FOREIGN KEY (ID_CLIENTE) REFERENCES CLIENTES (ID_CLIENTE);



/******************************************************************************/
/* ÍNDICES */
/******************************************************************************/

CREATE INDEX IDX_NOMECLI ON CLIENTES(NOME);
CREATE UNIQUE INDEX IDX_CPF_CLI ON CLIENTES(CPF);
CREATE INDEX IDX_DATAPED ON PEDIDOS(DATAPED);
CREATE UNIQUE INDEX IDX_DESCRICAO_PROD ON PRODUTOS(DESCRICAO);

/******************************************************************************/
/* VISÕES */
/******************************************************************************/


SET TERM ^ ;
CREATE VIEW TOTAL_VENDIDO_PRODUTO(Produto, QTDE_vendida,Valor_vendido) AS
SELECT
produtos.descricao, sum(itens.quantidade) ,SUM(itens.quantidade* itens.PRECOVENDA)
FROM
produtos, itens , pedidos
WHERE
produtos.id_produto = ITENS.id_produto AND
itens.id_pedido = pedidos.id_pedido

group BY
produtos.descricao


^

/******************************************************************************/
/* Generators */
/******************************************************************************/

CREATE GENERATOR GEN_ID_CLIENTE;

CREATE GENERATOR GEN_ID_PRODUTO;

/******************************************************************************/
/* Stored Procedures */
/******************************************************************************/

SET TERM ^ ;

CREATE PROCEDURE CALCULATOTALPEDIDO (
PNUMPEDIDO INTEGER)RETURNS (VSOMA NUMERIC(15,2))
AS
BEGIN
SELECT SUM(QUANTIDADE * PRECOVENDA) FROM ITENS WHERE ID_PEDIDO = :PNUMPEDIDO INTO :VSOMA;
suspend;
END
^


/******************************************************************************/
/* Triggers */
/******************************************************************************/

SET TERM ^ ;

/* Trigger: TRG_INCREMENTA_CLIENTE */
CREATE TRIGGER TRG_INCREMENTA_CLIENTE FOR CLIENTES
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
NEW.ID_CLIENTE = GEN_ID(GEN_ID_CLIENTE, 1);
END;
^


/* Trigger: TRG_INCREMENTA_PRODUTO */
CREATE TRIGGER TRG_INCREMENTA_PRODUTO FOR PRODUTOS
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
NEW.ID_PRODUTO = GEN_ID(GEN_ID_PRODUTO, 1);
END
^


2 comentários:

  1. mto bom o artigo, exatamente o que eu estava procurando. abandonaram o blog?

    []s
    Diogo

    ResponderExcluir
  2. Oi Diogo, não abandonamos o bolg nãó, é que estamos sobrecarregados de trabalho, de maneira que não tem sobrado tempo. Mas, ainda neste final de semana pretendo postar alguma coisa.
    Obriado por vc estar sempre prestigiando nosso trabalho aqui no Estação ZN. obrigado tb pelo seu comentário!
    Fique a vontade para expor suas idéias, colocar dúvidas, ou acrescentar algo que vc julgue pertinente.
    Abração!!

    ResponderExcluir