Anda di halaman 1dari 204

Disciplina SQL

Prof. M.Sc. lvaro F Pinheiro

*SQL

Caractersticas:
Pode ser utilizado por uma grande faixa de usurios, mesmo com pouca experincia em programao; o uma linguagem no procedural; o Reduz o tempo necessrio para a criao e manuteno de sistemas; o uma linguagem similar ao ingls.
o

Prof. M.Sc. lvaro F Pinheiro

*Plano de Aula
o o o o o o o o o o o o o o o o o o

SQL (Reviso) Categorias (Reviso) BD Acessos Create Table Create Index Alter Table Insert Update Delete Select Projeo Seleo Juno Consulta Bsica Alias Campos Calculados Valores Nulos Duplicidade

Prof. M.Sc. lvaro F Pinheiro

*Plano de Aula
o o o o o o o o o o o o o o o o o o

Condicionamento Ordenao Funes Funes Unica Linha Funes de Grupo Funes Caractere Funes Numrica Funes Data Funes Aninhamento Funes Converso CASE Produto Cartesiano Equijuno No-equijuno Juno externa Autojuno Aninhamento de Grupo de Dados Subconsultas

Prof. M.Sc. lvaro F Pinheiro

*Plano de Aula
o o o o o o o o o o o o o o o o o

Grupo de Dados Grupo de Dados com ROLLUP Grupo de Dados com CUBE Subconsultas com ANY Subconsultas com ALL Subconsultas Correlatas Subconsultas com EXISTS Unio Interseco Subtrao Macrosubstituio Seleo de Seleo Anlise Top-N Transaes Vises Vises Simples Vises Complexas

Prof. M.Sc. lvaro F Pinheiro

*SQL Categorias
o o

Data Definition Language (DDL)


(Create ..., Drop ..., Alter ...);

Data Manipulation Language (DML)


(Insert ..., Update ..., Delete ...);

Data Query Language (DQL)


(Select ...);

Data Transaction Language (DTL)


(Savepoint ..., Rollback ..., Commit ...);

Data Control Language (DCL)


(Grant ..., Revoke ...);

Prof. M.Sc. lvaro F Pinheiro

*BD Acesso
SQLServer o Usurio: sa; Senha: senha definida. Postgre Usurio: root; Senha: sem senha.

Oracle o Usurio: SYSTEM; Senha: manager.


MySQL Usurio: root; Senha: sem senha. Firebird Usurio: sysdba; Senha: masterkey.
Prof. M.Sc. lvaro F Pinheiro

*BD SQLServer (Principais Tipos de Dados)


TINYINT: Armazena valores numricos inteiros. SMALLINT: Armazena valores numricos inteiros. INT: Armazena valores numricos inteiros. BIGINT: Armazena valores numricos inteiros. NUMERIC(18,0): Armazena valores numricos com casas decimais, utilizando preciso. DECIMAL(18,0): Tem as mesmas funcionalidades do tipo NUMERIC. FLOAT: Armazena valores numricos aproximados com preciso de ponto flutuante. REAL: Armazena valores numricos aproximados com preciso de ponto flutuante. BIT: Armazena bits ou seja somente poder conter os valores lgicos 0 ou 1. SMALLDATETIME: Armazena data e hora, com preciso de minutos. DATETIME: Armazena data e hora, com preciso de centsimos de segundos. TIME: Armazena somente hora. Pode armazenar segundos at a frao de 9999999 DATE: Armazena somente data. CHAR(N): Armazena N caracteres fixos (at 8.000) no formato no Unicode, com espaos em branco. VARCHAR(N): Armazena N caracteres (at 8.000) no formato no Unicode TEXT: Armazena caracteres no formato no Unicode. NCHAR(N): Armazena N caracteres fixos (at 4.000) no formato Unicode, com espaos em branco. NVARCHAR(N): Armazena N caracteres (at 4.000) no formato Unicode. NTEXT: Armazena caracteres no formato Unicode. IMAGE: Armazena dados no formato binrio.

Prof. M.Sc. lvaro F Pinheiro

*BD Postgre (Principais Tipos de Dados)


bigint: inteiro de oito bytes com sinal. bit: cadeia de bits de comprimento fixo. varbit(n): cadeia de bits de comprimento varivel. Bool: booleano lgico (verdade/falso). bytea: dados binrios. varchar(n): cadeia de caracteres de comprimento varivel. char(n): cadeia de caracteres de comprimento fixo. date: data de calendrio (ano, ms,dia). float8: nmero de ponto flutuante de preciso dupla. Int: inteiro de quatro bytes com sinal. numeric[(p, s)]: numrico exato com preciso selecionvel. decimal [(p, s)] : numrico exato com preciso selecionvel. real: nmero de ponto flutuante de preciso simples. smallint: inteiro de dois bytes com sinal. text: cadeia de caracteres de comprimento varivel. time: hora do dia. timestamp: data e hora.

Prof. M.Sc. lvaro F Pinheiro

*BD Oracle (Principais Tipos de Dados)


VARCHAR2(n): Conjunto de caracteres de tamanho varivel. NUMBER(p, e): Representa um nmero. LONG: Conjunto de caracteres de tamanho varivel. DATE: Um valor de data. LONG RAW: Dados binrios.. CHAR(n): Conjunto de caracteres de tamanho fixo. BLOB, CLOB, NCLOB e BFILE: Tipos de dados para contedos binrios..

Prof. M.Sc. lvaro F Pinheiro

*BD MySQL (Principais Tipos de Dados)


BOOL: Booleano. SMALLINT: inteiros pequenos. INT: inteiros regulares. INTEGER: o mesmo que INT. BIGINT: inteiros grandes. FLOAT(preciso): nmeros de ponto flutuante de preciso simples ou dupla. DOUBLE: nmeros de ponto flutuante de preciso dupla. DECIMAL[(M,D)]: nmero de ponto flutuante armazenado como char. DATE: data. Exibido como YYYY-MM-DD. TIME: hora. Exibido como HH:MM:SS. DATETIME: data e hora. Exibido como YYYY-MM-DD HH:MM:SS. CHAR: o mesmo que CHAR(1). VARCHAR(n): varivel string de tamanho varivel. TINYBLOB: BLOB pequeno. TINYTEXT: TEXT pequeno. BLOB: BLOB normal. TEXT: TEXT normal. LONGBLOB: BLOB longo. LONGTEXT: TEXT longo.

Prof. M.Sc. lvaro F Pinheiro

*Criar Tabelas

CREATE TABLE nome_tabela [(definio_create,...)] [table_options] [select_statement] definio_create: nome_coluna tipo [NOT NULL | NULL] [DEFAULT valor_padro] [[PRIMARY] KEY] | [CONSTRAINT [symbol]] PRIMARY KEY (index_col_name,...) | INDEX [nome_indice] (index_nome_coluna,...) | [CONSTRAINT [symbol]] UNIQUE [INDEX] [index_name] (index_col_name,...) | [CONSTRAINT [symbol]] FOREIGN KEY [index_name] (index_col_name,...) definio_referncia: REFERENCES nome_tabela [(index_nome_coluna,...)] [ON DELETE opo_referncia] [ON UPDATE opo_referncia] opo_referncia: RESTRICT | CASCADE | SET NULL | SET DEFAULT

Prof. M.Sc. lvaro F Pinheiro

*Criar Tabelas

Dica:
o

possvel criar uma tabela a partir de uma subconsulta. CREATE TABLE tabela [coluna, ...] AS subconsulta;

Prof. M.Sc. lvaro F Pinheiro

*Criar Tabelas
Tmp:
o
o o o o o o o o

Nmero (PK).
Nmero (PK), nmero inteiro, auto-incremento; Nome, literal varivel(30), no nulo. Nmero (PK), nmero inteiro; Nome, literal varivel(30), no nulo; Fator, nmero real. Nmero (PK), numrico; Nome, literal varivel (50), no nulo; Departamento, (FK) numrico, atualizao cascata, excluso restrita.

Cargo:

Departamento:

Empregado:

Prof. M.Sc. lvaro F Pinheiro

*Criar Tabelas (Autonumerao)


--SQLServer CREATE TABLE CARGO ( NUMERO INTEGER IDENTITY( 1, 1), NOME VARCHAR(30) NOT NULL, PRIMARY KEY (NUMERO) ); --Postgre|Oracle CREATE TABLE CARGO ( NUMERO INTEGER, NOME VARCHAR(30) NOT NULL, PRIMARY KEY (NUMERO) ); CREATE SEQUENCE CARGOSEQ INCREMENT BY 1 START WITH 1;

Prof. M.Sc. lvaro F Pinheiro

*Criar Tabelas (Autonumerao)


--MySQL CREATE TABLE CARGO ( NUMERO INTEGER AUTO_INCREMENT, NOME VARCHAR(30) NOT NULL, PRIMARY KEY (NUMERO) ); --Firebird CREATE TABLE CARGO ( NUMERO INTEGER, NOME VARCHAR(30) NOT NULL, PRIMARY KEY (NUMERO) ); CREATE GENERATOR CARGOGEN; CREATE TRIGGER CARGOTRI FOR CARGO ACTIVE BEFORE INSERT POSITION 0 AS BEGIN NEW.NUMERO = GEN_ID(CARGOGEN, 1); END;
Prof. M.Sc. lvaro F Pinheiro

*Criar Tabelas
CREATE TABLE TMP ( NUMERO INTEGER PRIMARY KEY ); CREATE TABLE DEPARTAMENTO ( NUMERO INTEGER, NOME VARCHAR(30) NOT NULL, FATOR DECIMAL(3,2), PRIMARY KEY (NUMERO) );

Prof. M.Sc. lvaro F Pinheiro

*Criar Tabelas
--SQLServer | Postgre | MySQL | Firebird CREATE TABLE EMPREGADO ( NUMERO INTEGER, NOME VARCHAR(50) NOT NULL, DEPARTAMENTO INTEGER, PRIMARY KEY (NUMERO), FOREIGN KEY (DEPARTAMENTO) REFERENCES DEPARTAMENTO (NUMERO) ON UPDATE CASCADE ); --Oracle CREATE TABLE EMPREGADO ( NUMERO INTEGER, NOME VARCHAR(50) NOT NULL, DEPARTAMENTO INTEGER, PRIMARY KEY (NUMERO), FOREIGN KEY (DEPARTAMENTO) REFERENCES DEPARTAMENTO (NUMERO) );

Prof. M.Sc. lvaro F Pinheiro

*Inserir Linhas

INSERT [INTO] nome_tabela [(nome_coluna,...)] VALUES ((expresso | DEFAULT),...),(...),... | [INTO] nome_tabela [(nome_coluna,...)] SELECT ...

Prof. M.Sc. lvaro F Pinheiro

*Inserir Linhas

Dicas:
o o o

Pode-se inserir linha a linha; Pode-se dependendo do BD inserir uma lista; Pode-se inserir linhas de uma tabela em outra;
No se usa a clusula VALUE e sim SELECT.

Prof. M.Sc. lvaro F Pinheiro

*Inserir Registros

Cargo:
o o o o o o

Nmero, Nome; 1, Analista Trainee; 2, Analista Junior; 3, Analista Pleno; 4, Analista Snior; 5, Analista Master.

Prof. M.Sc. lvaro F Pinheiro

*Inserir Linhas
--SQLServer | MySql | Firebird INSERT INTO CARGO (NOME) VALUES ('ANALISTA TRAINEE'); INSERT INTO CARGO (NOME) VALUES ('ANALISTA JUNIOR'); INSERT INTO CARGO (NOME) VALUES ('ANALISTA PLENO'); INSERT INTO CARGO (NOME) VALUES ('ANALISTA SNIOR'); INSERT INTO CARGO (NOME) VALUES ('ANALISTA MASTER'); INSERT INTO CARGO (NOME) VALUES ('CONSULTOR'); --Postgre INSERT INTO CARGO (NUMERO, NOME) VALUES (nextval('CARGOSEQ'), INSERT INTO CARGO (NUMERO, NOME) VALUES (nextval('CARGOSEQ'), INSERT INTO CARGO (NUMERO, NOME) VALUES (nextval('CARGOSEQ'), INSERT INTO CARGO (NUMERO, NOME) VALUES (nextval('CARGOSEQ'), INSERT INTO CARGO (NUMERO, NOME) VALUES (nextval('CARGOSEQ'), INSERT INTO CARGO (NUMERO, NOME) VALUES (nextval('CARGOSEQ'), --Oracle INSERT INTO CARGO (NUMERO, NOME) VALUES (CARGOSEQ.NextVal, INSERT INTO CARGO (NUMERO, NOME) VALUES (CARGOSEQ.NextVal, INSERT INTO CARGO (NUMERO, NOME) VALUES (CARGOSEQ.NextVal, INSERT INTO CARGO (NUMERO, NOME) VALUES (CARGOSEQ.NextVal, INSERT INTO CARGO (NUMERO, NOME) VALUES (CARGOSEQ.NextVal, INSERT INTO CARGO (NUMERO, NOME) VALUES (CARGOSEQ.NextVal,

'ANALISTA TRAINEE'); 'ANALISTA JUNIOR'); 'ANALISTA PLENO'); 'ANALISTA SNIOR'); 'ANALISTA MASTER'); 'CONSULTOR');

'ANALISTA TRAINEE'); 'ANALISTA JUNIOR'); 'ANALISTA PLENO'); 'ANALISTA SNIOR'); 'ANALISTA MASTER'); 'CONSULTOR');

Prof. M.Sc. lvaro F Pinheiro

*Inserir Linhas
Departamento:
o o o o o o o o o

Nmero, Nome, Fator; 10, Administrao (Admin), 1.75; 20, Marketing (Mkt), 1.85; 50, Compras (Com), 2. 73; 60, Tecnologia (Tec), 1.55; 80, Vendas (Ven), 1.87; 90, Executivo (Exec), 1.92; 110, Contabilidade (Contab), 2.35; 190, Contratos (Ctt), 2.23.

Prof. M.Sc. lvaro F Pinheiro

*Inserir Linhas
INSERT INTO DEPARTAMENTO (NUMERO, NOME, FATOR) VALUES (10, 'ADMINISTRAO (ADMIN)', 1.75); INSERT INTO DEPARTAMENTO (NUMERO, NOME, FATOR) VALUES (20, 'MARKETING (MKT)', 1.85); INSERT INTO DEPARTAMENTO (NUMERO, NOME, FATOR) VALUES (50, 'COMPRAS (COM)', 2.73); INSERT INTO DEPARTAMENTO (NUMERO, NOME, FATOR) VALUES (60, 'TECNOLOGIA (TEC)', 1.55); INSERT INTO DEPARTAMENTO (NUMERO, NOME, FATOR) VALUES (80, 'VENDAS (VEN)', 1.87); INSERT INTO DEPARTAMENTO (NUMERO, NOME, FATOR) VALUES (90, 'EXECUTIVO (EXEC)', 1.92); INSERT INTO DEPARTAMENTO (NUMERO, NOME, FATOR) VALUES (110, 'CONTABILIDADE (CONTAB)', 2.35); INSERT INTO DEPARTAMENTO (NUMERO, NOME, FATOR) VALUES (190, 'CONTRATOS (CTT)', 2.23);

Prof. M.Sc. lvaro F Pinheiro

*Inserir Linhas
Empregados:
o o o o o o o o o o o

Nmero, Nome, Departamento; 100, Antnio Palmeira, 10; 101, Jos Figueira, 20; 102, Maria Mangueira, 10; 103, Joo Abacateiro, 50; 104, Carlos Castanheiro, 60; 107, Mnica Videira, 90; 124, Pedro Laranjeira, 80; 141, Tiago Pessegueiro, 110; 142, Renata Videira, 80; 143, Gabriel Macieira, 110;

Prof. M.Sc. lvaro F Pinheiro

*Inserir Linhas
INSERT INTO EMPREGADO VALUES (100, 'ANTNIO PALMEIRA', 10); INSERT INTO EMPREGADO VALUES (101, 'JOS FIGUEIRA', 20); INSERT INTO EMPREGADO VALUES (102, 'MARIA MANGUEIRA', 10); INSERT INTO EMPREGADO VALUES (103, 'JOO ABACATEIRO', 50); INSERT INTO EMPREGADO VALUES (104, 'CARLOS CASTANHEIRO', 60); INSERT INTO EMPREGADO VALUES (107, 'MNICA VIDEIRA', 90); INSERT INTO EMPREGADO VALUES (124, 'PEDRO LARANJEIRA', 80); INSERT INTO EMPREGADO VALUES (141, 'TIAGO PESSEGUEIRO', 110); INSERT INTO EMPREGADO VALUES (142, 'RENATA VIDEIRA', 80); INSERT INTO EMPREGADO VALUES (143, 'GABRIEL MACIEIRA', 110);

Prof. M.Sc. lvaro F Pinheiro

*Alterar Tabelas

ALTER TABLE nome_tbl especificao_alter [, especificao_alter ...] especificao_alter: ADD [COLUMN] definio_create [FIRST | AFTER nome_coluna ] | ADD [COLUMN] (definio_create, definio_create,...) | ADD INDEX [nome_indice] (index_nome_col,...) | ADD [CONSTRAINT [symbol]] PRIMARY KEY (index_col_name,...) | ADD [CONSTRAINT [symbol]] UNIQUE [index_name] (index_col_name,...) | ADD [CONSTRAINT [symbol]] FOREIGN KEY [index_name] (index_col_name,...) [definio_referncia] | ALTER [COLUMN] nome_col {SET DEFAULT literal | DROP DEFAULT} | CHANGE [COLUMN] nome_col_antigo definio_create [FIRST | AFTER nome_coluna] | MODIFY [COLUMN] definio_create [FIRST | AFTER nome_coluna] | DROP [COLUMN] nome_col | DROP PRIMARY KEY | DROP INDEX nome_indice | RENAME [TO] nome_nova_tbl | ORDER BY col

Prof. M.Sc. lvaro F Pinheiro

*Alterar Tabelas
Empregados:
o o o o o o o o o o o

Nmero (PK), nmero inteiro; Nome, literal varivel (50), no nulo; excluir; Primeironome, literal varivel (25), no nulo; Sobrenome, literal varivel (25) no nulo; Departamento, (FK) nmero inteiro; Cargo, (FK) nmero inteiro, atualizao cascata; Salrio, nmero real; Comisso, nmero inteiro; Nascimento, data; Apelido, literal fixo(10), no nulo; Gerente, nmero inteiro.

Prof. M.Sc. lvaro F Pinheiro

*Alterar Tabelas
--SQLServer ALTER TABLE EMPREGADO ADD PRIMEIRONOME VARCHAR(25), SOBRENOME VARCHAR(25), CARGO INTEGER, SALARIO REAL, COMISSAO INTEGER, NASCIMENTO DATE, APELIDO VARCHAR(10), GERENTE INTEGER;

--Postgre | MySQL | Firebird ALTER TABLE EMPREGADO ADD PRIMEIRONOME VARCHAR(25), ADD SOBRENOME VARCHAR(25), ADD CARGO INTEGER, ADD SALARIO REAL, ADD COMISSAO INTEGER, ADD NASCIMENTO DATE, ADD APELIDO VARCHAR(10), ADD GERENTE INTEGER;

Prof. M.Sc. lvaro F Pinheiro

*Alterar Tabelas
--Oracle ALTER TABLE EMPREGADO ADD (PRIMEIRONOME VARCHAR(25), SOBRENOME VARCHAR(25), CARGO INTEGER, SALARIO REAL, COMISSAO INTEGER, NASCIMENTO DATE, APELIDO VARCHAR(10), GERENTE INTEGER);

Prof. M.Sc. lvaro F Pinheiro

*Alterar Tabelas
--SQLServer ALTER TABLE EMPREGADO ADD FOREIGN KEY (CARGO) REFERENCES CARGO (NUMERO) ON UPDATE CASCADE, FOREIGN KEY (GERENTE) REFERENCES EMPREGADO (NUMERO); --Postgre | MySQL | Firebird ALTER TABLE EMPREGADO ADD FOREIGN KEY (CARGO) REFERENCES CARGO (NUMERO) ON UPDATE CASCADE, ADD FOREIGN KEY (GERENTE) REFERENCES EMPREGADO (NUMERO); --Oracle ALTER TABLE EMPREGADO ADD FOREIGN KEY (CARGO) REFERENCES CARGO; ALTER TABLE EMPREGADO ADD FOREIGN KEY (GERENTE) REFERENCES EMPREGADO;

Prof. M.Sc. lvaro F Pinheiro

*Alterar Linhas

UPDATE nome_tabela SET nome_coluna1=expr1 [, nome_coluna2=expr2 ...] [WHERE definio] [ORDER BY ...]

Prof. M.Sc. lvaro F Pinheiro

*Alterar Linhas

Pode-se alterar linha; Pode-se alterar listas; Pode-se alterar subconsultas; Pode-se alterar linhas com base em outra tabela.

Prof. M.Sc. lvaro F Pinheiro

*Funes
SQLServer | Postgre | MySQL | Firebird SUBSTRING(string texto, posicao_inicial, tamanho) - retorna uma string com o comprimento definido em "tamanho" extraida da string "texto", a partir da "posicao_inicial;
Oracle: SUBSTR

SQLServer CHARINDEX( string pesquisado, campo, posicao_inicial) retorna a posio do string pesquisado dentro do campo informado.
Postgre: STRPOS Oracle | MySQL: INSTR Firebird: POSITION
Prof. M.Sc. lvaro F Pinheiro

*Alterar Linhas
Fazendo uso das funes substring e charindex separar o contedo do campo Nome nos campos Primeironome e Sobrenome. Depois apagar o campo Nome ficando:
o o o o o o o o o o o

Nmero, Primeironome, Sobrenome, Departamento; 100, Antnio, Palmeira, 10; 101, Jos, Figueira, 20; 102, Maria, Mangueira, 10; 103, Joo, Abacateiro, 50; 104, Carlos, Castanheiro, 60; 107, Mnica, Videira, 90; 124, Pedro, Laranjeira, 80; 141, Tiago, Pessegueiro, 80; 142, Renata, Videira, 80; 143, Gabriel, Macieira, 110;

Prof. M.Sc. lvaro F Pinheiro

*Alterar Linhas
--SQLServer UPDATE EMPREGADO SET PRIMEIRONOME = SUBSTRING(NOME,1,CHARINDEX(' ',NOME)-1), SOBRENOME = SUBSTRING(NOME,CHARINDEX(' ',nome)+1,100);

--Postgre UPDATE EMPREGADO SET PRIMEIRONOME = SUBSTRING(NOME,1,STRPOS(NOME, ' ')-1), SOBRENOME = SUBSTRING(NOME,STRPOS(NOME, ' ')+1,100);
--Oracle UPDATE EMPREGADO SET PRIMEIRONOME = SUBSTR(NOME,1,INSTR(NOME, ' ')-1), SOBRENOME = SUBSTR(NOME,INSTR(NOME, ' ')+1,100); --MySQL UPDATE EMPREGADO SET PRIMEIRONOME = SUBSTRING(NOME,1,INSTR(NOME, ' ')-1), SOBRENOME = SUBSTRING(NOME,INSTR(NOME, ' ')+1,100); --Firebird UPDATE EMPREGADO SET PRIMEIRONOME = SUBSTRING(NOME FROM 1 FOR POSITION(' ', NOME)-1), SOBRENOME = SUBSTRING(NOME FROM POSITION(' ', NOME)+1 FOR 100);

Prof. M.Sc. lvaro F Pinheiro

*Alterar Tabela
--SQLServer | Postgre | Oracle | MySQL ALTER TABLE EMPREGADO DROP COLUMN NOME;

--Firebird ALTER TABLE EMPREGADO DROP NOME;

Prof. M.Sc. lvaro F Pinheiro

*Alterar Linhas

Atualizar as linhas de Empregado com os valores:


o
o o o o o o o o o o

Nmero, Primeironome, Sobrenome, Cargo, Departamento, Gerente, Salrio, Comisso, Nascimento, Apelido; 100, Antnio, Palmeira, 1, 10, nulo, 1000, nulo, 01/07/80, Tonho; 101, Jos, Figueira, 1, 20, 100, 1500, nulo, 18/05/70, Z; 102, Maria, Mangueira, 2, 10, 100, 2000, 3, 22/07/80, Ma; 103, Joo, Abacateiro, 3, 50, 100, 1500, 2, 03/03/71, Jo; 104, Carlos, Castanheiro, nulo, 60, 100, 2500, 3, 01/01/65, Ca; 107, Mnica, Videira, 1, 90, nulo, 1000, 2, 15/02/60, Mo; 124, Pedro, Laranjeira, 2, 80, 107, 1100, nulo, 30/07/83, Pedroca; 141, Tiago, Pessegueiro, 3, 80, 107, 2000, 2, 21/06/78, Ti; 142, Renata, Videira, 4, 80, 107, 1500, nulo, 02/12/72, R; 143, Gabriel, Macieira, nulo, 110, 107, 2000, 2, 11/11/81, Biel;

Prof. M.Sc. lvaro F Pinheiro

*Alterar Linhas
--SQLServer | Postgre | Oracle UPDATE EMPREGADO SET CARGO=1, GERENTE=NULL, SALARIO=1000, COMISSAO=NULL, NASCIMENTO='01/07/80', APELIDO='TONHO' WHERE NUMERO=100; UPDATE EMPREGADO SET CARGO=1, GERENTE=100, SALARIO=1500, COMISSAO=NULL, NASCIMENTO='18/05/70', APELIDO='Z' WHERE NUMERO=101; UPDATE EMPREGADO SET CARGO=2, GERENTE=100, SALARIO=2000, COMISSAO=3, NASCIMENTO='22/07/80', APELIDO='MA' WHERE NUMERO=102; UPDATE EMPREGADO SET CARGO=3, GERENTE=100, SALARIO=1500, COMISSAO=2, NASCIMENTO='03/03/71', APELIDO='JO' WHERE NUMERO=103; UPDATE EMPREGADO SET CARGO=NULL, GERENTE=100, SALARIO=2500, COMISSAO=3, NASCIMENTO='01/01/65', APELIDO='CA' WHERE NUMERO=104; UPDATE EMPREGADO SET CARGO=1, GERENTE=NULL, SALARIO=1000, COMISSAO=2, NASCIMENTO='15/02/60', APELIDO='MO' WHERE NUMERO=107; UPDATE EMPREGADO SET CARGO=2, GERENTE=107, SALARIO=1100, COMISSAO=NULL, NASCIMENTO='30/07/83', APELIDO='PEDROCA' WHERE NUMERO=124; UPDATE EMPREGADO SET CARGO=3, GERENTE=107, SALARIO=2000, COMISSAO=2, NASCIMENTO='21/06/78', APELIDO='TI' WHERE NUMERO=141; UPDATE EMPREGADO SET CARGO=4, GERENTE=107, SALARIO=1500, COMISSAO=NULL, NASCIMENTO='02/12/72', APELIDO='RE' WHERE NUMERO=142; UPDATE EMPREGADO SET CARGO=NULL, GERENTE=107, SALARIO=2000, COMISSAO=2, NASCIMENTO='11/11/81', APELIDO='BIEL' WHERE NUMERO=143;

OBS: Data no formato DD/MM/AAAA


Prof. M.Sc. lvaro F Pinheiro

*Alterar Linhas
--MySQL UPDATE EMPREGADO SET CARGO=1, GERENTE=NULL, SALARIO=1000, COMISSAO=NULL, NASCIMENTO='80/07/01', APELIDO='TONHO' WHERE NUMERO=100; UPDATE EMPREGADO SET CARGO=1, GERENTE=100, SALARIO=1500, COMISSAO=NULL, NASCIMENTO='70/05/18', APELIDO='Z' WHERE NUMERO=101; UPDATE EMPREGADO SET CARGO=2, GERENTE=100, SALARIO=2000, COMISSAO=3, NASCIMENTO='80/07/22', APELIDO='MA' WHERE NUMERO=102; UPDATE EMPREGADO SET CARGO=3, GERENTE=100, SALARIO=1500, COMISSAO=2, NASCIMENTO='71/03/03', APELIDO='JO' WHERE NUMERO=103; UPDATE EMPREGADO SET CARGO=NULL, GERENTE=100, SALARIO=2500, COMISSAO=3, NASCIMENTO='65/01/01', APELIDO='CA' WHERE NUMERO=104; UPDATE EMPREGADO SET CARGO=1, GERENTE=NULL, SALARIO=1000, COMISSAO=2, NASCIMENTO='60/02/15', APELIDO='MO' WHERE NUMERO=107; UPDATE EMPREGADO SET CARGO=2, GERENTE=107, SALARIO=1100, COMISSAO=NULL, NASCIMENTO='83/07/30', APELIDO='PEDROCA' WHERE NUMERO=124; UPDATE EMPREGADO SET CARGO=3, GERENTE=107, SALARIO=2000, COMISSAO=2, NASCIMENTO='78/06/21', APELIDO='TI' WHERE NUMERO=141; UPDATE EMPREGADO SET CARGO=4, GERENTE=107, SALARIO=1500, COMISSAO=NULL, NASCIMENTO='72/12/02', APELIDO='RE' WHERE NUMERO=142; UPDATE EMPREGADO SET CARGO=NULL, GERENTE=107, SALARIO=2000, COMISSAO=2, NASCIMENTO='81/11/11', APELIDO='BIEL' WHERE NUMERO=143;

OBS: Data no formato AAA/MM/DD


Prof. M.Sc. lvaro F Pinheiro

*Alterar Linhas
--Firebird UPDATE EMPREGADO SET CARGO=1, GERENTE=NULL, SALARIO=1000, COMISSAO=NULL, NASCIMENTO='07/01/80', APELIDO='TONHO' WHERE NUMERO=100; UPDATE EMPREGADO SET CARGO=1, GERENTE=100, SALARIO=1500, COMISSAO=NULL, NASCIMENTO='05/18/70', APELIDO='Z' WHERE NUMERO=101; UPDATE EMPREGADO SET CARGO=2, GERENTE=100, SALARIO=2000, COMISSAO=3, NASCIMENTO='07/22/80', APELIDO='MA' WHERE NUMERO=102; UPDATE EMPREGADO SET CARGO=3, GERENTE=100, SALARIO=1500, COMISSAO=2, NASCIMENTO='03/03/71', APELIDO='JO' WHERE NUMERO=103; UPDATE EMPREGADO SET CARGO=NULL, GERENTE=100, SALARIO=2500, COMISSAO=3, NASCIMENTO='01/01/65', APELIDO='CA' WHERE NUMERO=104; UPDATE EMPREGADO SET CARGO=1, GERENTE=NULL, SALARIO=1000, COMISSAO=2, NASCIMENTO='02/15/60', APELIDO='MO' WHERE NUMERO=107; UPDATE EMPREGADO SET CARGO=2, GERENTE=107, SALARIO=1100, COMISSAO=NULL, NASCIMENTO='07/30/83', APELIDO='PEDROCA' WHERE NUMERO=124; UPDATE EMPREGADO SET CARGO=3, GERENTE=107, SALARIO=2000, COMISSAO=2, NASCIMENTO='06/21/78', APELIDO='TI' WHERE NUMERO=141; UPDATE EMPREGADO SET CARGO=4, GERENTE=107, SALARIO=1500, COMISSAO=NULL, NASCIMENTO='12/02/72', APELIDO='RE' WHERE NUMERO=142; UPDATE EMPREGADO SET CARGO=NULL, GERENTE=107, SALARIO=2000, COMISSAO=2, NASCIMENTO='11/11/81', APELIDO='BIEL' WHERE NUMERO=143;

OBS: Data no formato MM/DD/AAAA


Prof. M.Sc. lvaro F Pinheiro

*Criar ndices

CREATE [UNIQUE] INDEX nome_indice ON nome_tabela (index_col_name,...) index_col_name: col_name [(length)] [ASC | DESC]

Prof. M.Sc. lvaro F Pinheiro

*Criar ndices

Criar ndices por:


o o o o o o

Primeironome e Sobrenome; Salrio; Comisso; Cargo; Departamento; Apelido (nico).

Prof. M.Sc. lvaro F Pinheiro

*Criar ndices
CREATE INDEX EMPREGADOIX1 ON EMPREGADO (PRIMEIRONOME); CREATE INDEX EMPREGADOIX2 ON EMPREGADO (SOBRENOME); CREATE INDEX EMPREGADOIX3 ON EMPREGADO (SALARIO); CREATE INDEX EMPREGADOIX4 ON EMPREGADO (COMISSAO); CREATE INDEX EMPREGADOIX5 ON EMPREGADO (CARGO); CREATE INDEX EMPREGADOIX6 ON EMPREGADO (DEPARTAMENTO); CREATE UNIQUE INDEX EMPREGADOIX7 ON EMPREGADO (APELIDO);

Prof. M.Sc. lvaro F Pinheiro

*Dicionrio de Dados

Prtica: Visualizar a estrutura das tabelas Empregados e Departamentos.

Prof. M.Sc. lvaro F Pinheiro

*Dicionrio de Dados
--SQLServer SELECT * FROM SYSOBJECTS O INNER JOIN SYSCOLUMNS C ON O.ID=C.ID WHERE O.NAME = 'DEPARTAMENTO';

--Postgre SELECT a.attnum, a.attname AS field, t.typname AS type, a.attlen AS length, a.atttypmod AS lengthvar, a.attnotnull AS notnull, c.relname AS name FROM pg_class c, pg_attribute a, pg_type t WHERE c.relname = 'departamento' and a.attnum > 0 and a.attrelid = c.oid and a.atttypid = t.oid ORDER BY c.relname
--Oracle | MySQL DESCRIBE DEPARTAMENTO;
Prof. M.Sc. lvaro F Pinheiro

*Consulta
SELECT [ ALL | DISTINCT ] [ TOP n ] [ table_name. | table_alias. | view_name. ] * | column_name [ [ AS ] column_alias ] | expression [ [ AS ] column_alias ] [ ..., n ] [ INTO new_table ] FROM table [ AS table_alias ] [ ( column_alias_1, [ column_alias_2, ..., n ] ) ] | view_name [ AS table_alias ] [ INNER JOIN | LEFT [ OUTER ] JOIN | RIGHT [ OUTER ] JOIN table [ ON search_conditions ] | [ WHERE search_conditions | WHERE column_name =* column_name ] [ GROUP BY { group_by_expression, [ ..., n ] } ] [ HAVING search_conditions ] [ UNION query ] [ ORDER BY { order_by_expression [ ASC | DESC ] , [ ..., n ] } ]

Prof. M.Sc. lvaro F Pinheiro

*Projeo

Prtica: Visualizar os campos: Nmero e


Nome (Primeironome || || Sobrenome).

Dicas:
o o o

Operador de concatenao (||); Em alguns BD se usa (+) para concatenao; Concatena colunas ou strings de caracteres a outras colunas.

Prof. M.Sc. lvaro F Pinheiro

*Projeo
--SQLServer SELECT NUMERO, PRIMEIRONOME + ' ' + SOBRENOME AS NOME FROM EMPREGADO; --Postgre | Oracle | Firebird SELECT NUMERO, PRIMEIRONOME || ' ' || SOBRENOME AS NOME FROM EMPREGADO; --MySQL SELECT NUMERO, CONCAT(PRIMEIRONOME, ' ', SOBRENOME) AS NOME FROM EMPREGADO;

Prof. M.Sc. lvaro F Pinheiro

*Seleo

Prtica: Visualizar os registros dos empregados do departamento 20 ou 80 dos campos: Nmero; Primeironome;
Sobrenome; e Departamento.

Prof. M.Sc. lvaro F Pinheiro

*Seleo
SELECT NUMERO, PRIMEIRONOME, SOBRENOME, DEPARTAMENTO FROM EMPREGADO WHERE DEPARTAMENTO = 20 OR DEPARTAMENTO = 80;

Prof. M.Sc. lvaro F Pinheiro

*Juno

Prtica: Visualizar os registros dos empregados juntamente com o nome do departamento: Nmero (Empregados);
Primeironome (Empregados); Sobrenome (Empregados); Departamento (Empregados); e Nome (Departamentos).

Prof. M.Sc. lvaro F Pinheiro

*Juno
SELECT E.NUMERO, E.PRIMEIRONOME, E.SOBRENOME, E.DEPARTAMENTO, D.NOME FROM EMPREGADO E INNER JOIN DEPARTAMENTO D ON E.DEPARTAMENTO = D.NUMERO;

Prof. M.Sc. lvaro F Pinheiro

*Consulta Bsica
Prtica: Visualizar todos os registros e todos os campos da tabela departamentos.

Dicas:
As instrues SQL no fazem distino entre maisculas e minsculas; o As instrues SQL podem estar em uma ou mais linhas; o As palavras-chave no podem ser abreviadas ou quebradas; o Normalmente as clusulas so colocadas em linhas separadas; o Os recuos so utilizados para dar mais legibilidade.
o

Prof. M.Sc. lvaro F Pinheiro

*Consulta Bsica
SELECT * FROM DEPARTAMENTO;

Prof. M.Sc. lvaro F Pinheiro

*Apelido

Prtica: Visualizar todos os registros nos campos Nmero, Nome (Primeironome + + Sobrenome) e aps a consulta ser realizada observar o nome do campo para a expresso Nome. Finalize repetindo a consulta colocando o apelido Nome do Funcionrio.

Prof. M.Sc. lvaro F Pinheiro

*Apelido
--SQLServer SELECT NUMERO, PRIMEIRONOME + ' ' + SOBRENOME FROM EMPREGADO; SELECT NUMERO, PRIMEIRONOME + ' ' + SOBRENOME AS NOME FROM EMPREGADO; --Postgre | Oracle | Firebird SELECT NUMERO, PRIMEIRONOME || ' ' || SOBRENOME FROM EMPREGADO; SELECT NUMERO, PRIMEIRONOME || ' ' || SOBRENOME AS NOME FROM EMPREGADO; --MySQL SELECT NUMERO, CONCAT(PRIMEIRONOME, ' ', SOBRENOME) FROM EMPREGADO; SELECT NUMERO, CONCAT(PRIMEIRONOME, ' ', SOBRENOME) AS NOME FROM EMPREGADO;

Prof. M.Sc. lvaro F Pinheiro

*Campos Calculados
Prtica: Visualizar o Sobrenome, o salrio, e o lquido dos empregados, considerando que todos possuem um desconto de 10% de INSS. Dicas:
o

Operadores aritmticos:
Adicionar:+ Subtrair: Multiplicar: * Dividir: / retorna o quociente

Funes matemticas:
Potenciao: POWER(nmero, potncia) Radiciao: SQRT(nmero) Diviso: % | MOD retorna o resto

Prof. M.Sc. lvaro F Pinheiro

*Campos Calculados

Dicas:
o

Precedncia de Operadores:
A multiplicao e a diviso tm prioridade sobre a adio e subtrao; Os operadores com a mesma prioridade so avaliados da esquerda para a direita; Os parnteses so usados para forar a avaliao priorizada e para esclarecer as instrues.

Prof. M.Sc. lvaro F Pinheiro

SELECT SOBRENOME, SALARIO, SALARIO - (SALARIO*0.10) AS LIQUIDO FROM EMPREGADO;

Prof. M.Sc. lvaro F Pinheiro

*Valores Nulos
Prtica: Visualizar o Sobrenome e o Salrio Bruto (Salrio + Comisso). Obs: A Comisso representa um percentual aplicado sobre o salrio. Dicas:
o o o o

Nulo uma valor que no est disponvel; Nulo um valor desconhecido; Nulo no a mesma coisa que zero; Nulo no a mesma coisa que espao em branco.

Prof. M.Sc. lvaro F Pinheiro

*Valores Nulos
SELECT SOBRENOME, SALARIO + (SALARIO * COMISSAO / 100) AS BRUTO FROM EMPREGADO;

Prof. M.Sc. lvaro F Pinheiro

*Valores Nulos

Prtica: Visualizar o Sobrenome e o Salrio Bruto (Salrio + Comisso). Obs: Quando a Comisso for nula deve-se substituir por zero.

Dicas:
o o o o

Para Oracle usar NVL(campo, valor) Para MySQL usar IFNULL(campo, valor) Para SQLServer usar ISNULL(campo, valor) Para Postgre | Firebird usar COALESCE(campo,0)

Prof. M.Sc. lvaro F Pinheiro

--SQLServer SELECT SOBRENOME, SALARIO + (SALARIO * ISNULL(COMISSAO,0) / 100) AS BRUTO FROM EMPREGADO; --Postgre | Firebird SELECT SOBRENOME, SALARIO + (SALARIO * COALESCE(COMISSAO,0) / 100) AS BRUTO FROM EMPREGADO; --Oracle SELECT SOBRENOME, SALARIO + (SALARIO * NVL(COMISSAO,0) / 100) AS BRUTO FROM EMPREGADO; --MySQL SELECT SOBRENOME, SALARIO + (SALARIO * IFNULL(COMISSAO,0) / 100) AS BRUTO FROM EMPREGADO;

Prof. M.Sc. lvaro F Pinheiro

*Duplicidade Prtica: Visualizar o Sobrenome dos Empregados. Dica:


o

A exibio default das consultas de todas as linhas, incluindo linhas duplicadas.

Prtica: Visualizar o Sobrenome dos Empregados sem duplicidade.


Prof. M.Sc. lvaro F Pinheiro

*Duplicidade
SELECT SOBRENOME FROM EMPREGADO; SELECT DISTINCT SOBRENOME FROM EMPREGADO;

Prof. M.Sc. lvaro F Pinheiro

*Condicionamento
Prtica: Visualizar o Nmero e Sobrenome de todos os empregados do departamento 90. Dicas:
o o

Selees so realizadas pela clusula WHERE; Operadores de Comparao:


Igual a: = Maior que: > Maior que ou igual a: >= Menor que: < Menor que ou igual a: <= Diferente de: <>

Prof. M.Sc. lvaro F Pinheiro

SELECT NUMERO, SOBRENOME FROM EMPREGADO WHERE DEPARTAMENTO = 90;

Prof. M.Sc. lvaro F Pinheiro

*Condicionamento
Prtica: Visualizar o Nmero, Sobrenome e Nascimento de todos os empregados que nasceram em 22/07/80.

Dicas:
As strings de caracteres e valores de data aparecem entre aspas simples; o Os valores de caractere fazem distino entre maisculas e minsculas; o Os valores de data fazem distino entre formatos; o O formato de data default DD-MON-YY.
o
Prof. M.Sc. lvaro F Pinheiro

--SQLServer | postgre | Oracle SELECT NUMERO, SOBRENOME, NASCIMENTO FROM EMPREGADO WHERE NASCIMENTO = '22/07/80'; --MySQL SELECT NUMERO, SOBRENOME, NASCIMENTO FROM EMPREGADO WHERE NASCIMENTO = '80/07/22'; --Firebird SELECT NUMERO, SOBRENOME, NASCIMENTO FROM EMPREGADO WHERE NASCIMENTO = '07/22/80';

Prof. M.Sc. lvaro F Pinheiro

*Condicionamento
Prtica: Visualizar o Nmero, Sobrenome e Nascimento de todos os empregados que nasceram entre (inclusive) 01/01/70 e 31/12/80. Dicas:
o

Outros Operadores de Comparao:


Intervalo fechado: BETWEEN Est contido: IN Contm: LIKE
Para representar qualquer caractere: % Para representar caractere da posio: _

nulo: IS NULL
Prof. M.Sc. lvaro F Pinheiro

*Condicionamento
--SQLServer | postgre | Oracle SELECT NUMERO, SOBRENOME, NASCIMENTO FROM EMPREGADO WHERE NASCIMENTO BETWEEN '01/01/70' AND '31/12/80'; --MySQL SELECT NUMERO, SOBRENOME, NASCIMENTO FROM EMPREGADO WHERE NASCIMENTO BETWEEN '70/01/01' AND '80/12/31'; --Firebird SELECT NUMERO, SOBRENOME, NASCIMENTO FROM EMPREGADO WHERE NASCIMENTO BETWEEN '01/01/70' AND '12/31/80';

Prof. M.Sc. lvaro F Pinheiro

*Condicionamento
Prtica: Visualizar o Nmero, Sobrenome e Departamento de todos os empregados que pertencem aos departamentos: 10, 20, 50, 60, 80 ou 90.

Dicas:
o

Outros Operadores de Comparao:


Intervalo fechado: BETWEEN Pertence: IN Contm: LIKE
Para representar qualquer caractere: % Para representar caractere da posio: _

nulo: IS NULL

Prof. M.Sc. lvaro F Pinheiro

*Condicionamento
SELECT NUMERO, SOBRENOME, DEPARTAMENTO FROM EMPREGADO WHERE DEPARTAMENTO IN (10, 20, 50, 60, 80, 90);

Prof. M.Sc. lvaro F Pinheiro

*Condicionamento
Prtica: Visualizar o Nmero e Sobrenome de todos os empregados que possuem eira no sobrenome. Dicas:
o

Outros Operadores de Comparao:


Intervalo fechado: BETWEEN Pertence: IN Contm: LIKE
Para representar qualquer caractere: % Para representar caractere da posio: _

nulo: IS NULL

Prof. M.Sc. lvaro F Pinheiro

*Condicionamento
SELECT NUMERO, SOBRENOME FROM EMPREGADO WHERE SOBRENOME LIKE %EIRA%;

Prof. M.Sc. lvaro F Pinheiro

*Condicionamento
Prtica: Visualizar o Nmero e Sobrenome de todos os empregados que no possuem comisso. Dicas:
o

Outros Operadores de Comparao:


Intervalo fechado: BETWEEN Pertence: IN Contm: LIKE
Para representar qualquer caractere: % Para representar caractere da posio: _

nulo: IS NULL

Prof. M.Sc. lvaro F Pinheiro

*Condicionamento
SELECT NUMERO, SOBRENOME FROM EMPREGADO WHERE COMISSAO IS NULL;

Prof. M.Sc. lvaro F Pinheiro

*Condicionamento Prtica: Visualizar o Nmero, Sobrenome e Salrio de todos os empregados que possuem salrio entre (inclusive) 1500 e 2000, dos departamentos 20, 50 e 80. Dicas:
o

Operadores Lgicos:
Verdadeiro para ambas expresses verdadeiras: AND Verdadeiro bastando uma das expresses verdadeiras: OR Inverso da expresso: NOT

Prof. M.Sc. lvaro F Pinheiro

SELECT NUMERO, SOBRENOME, SALARIO, DEPARTAMENTO FROM EMPREGADO WHERE SALARIO BETWEEN 1500 AND 2000 AND DEPARTAMENTO IN (20, 50, 80);

Prof. M.Sc. lvaro F Pinheiro

*Regras de Precedncia

1 Operadores Aritmticos; 2 Operador de Concatenao; 3 Condies de Comparao; 4 IS [NOT] NULL, [NOT] LIKE, [NOT] IN; 5 [NOT] BETWEEN; 6 Condio lgica NOT; 7 Condio lgica AND; 8 Condio lgica OR.

Prof. M.Sc. lvaro F Pinheiro

*Ordenao Prtica: Visualizar o Sobrenome e o Salrio dos Empregados ordenados por Salrio em ordem decrescente.

Dicas:
o o o o o

Sintaxe da ordenao: [ORDER BY {coluna, expr} [ASC|DESC]]; possvel utilizar o alias na clusula de ordenao; possvel utilizar a posio da coluna na ordenao; Pode-se classificar por colunas que no estejam no select; Pode-se classificar por N colunas

Prof. M.Sc. lvaro F Pinheiro

*Ordenao
SELECT SOBRENOME, SALARIO FROM EMPREGADO ORDER BY SALARIO DESC;

Prof. M.Sc. lvaro F Pinheiro

*Funes
Funes so recursos avanados do SQL e podem ser utilizadas para efetuar o seguinte:
o o o o o

Executar clculos; Modificar itens de dados individuais; Manipular a sada para grupos de linhas; Formatar datas e nmeros para exibio; Converter tipos de dados de coluna.

Dicas:
o o

Algumas funes utilizam argumentos; Sempre retornam um valor.

Prof. M.Sc. lvaro F Pinheiro

*Funes (Tipos)

Funes de uma nica Linha


o

Operam somente linhas nicas e retornam um resultado por linha. Podem manipular grupos de linhas para fornecer um resultado e so mais conhecidas como funes de grupo.

Funes de Vrias Linhas


o

Prof. M.Sc. lvaro F Pinheiro

*Funes (nica Linha) Servem para manipular itens de dados; Aceitam um ou mais argumentos; Retornam um valor para cada linha retornada; So do tipo:
o

Caractere, Numricas, Data, Converso e Gerais; SELECT, WHERE e ORDER BY.

Podem ser usadas em clusulas:


o

Prof. M.Sc. lvaro F Pinheiro

*Funes (Caractere)

LOWER converte para minsculas; UPPER converte para maisculas; SUBSTRING retorna o substring de uma string; LENGTH retorna o nmero de caracteres; CHARINDEX retorna a posio de um string; REPLACE - substitui uma string por outra string; RTRIM | LTRIM | TRIM retira brancos.

Prof. M.Sc. lvaro F Pinheiro

*Funes (Caractere)

Prticas:
o o o o o o

Exibir todos os Primeironomes em minsculas; Exibir todos os Sobrenomes em maisculas; Exibir os 3 primeiros caracteres do Sobrenome; Exibir o tamanho do Sobrenome; Exibir a posio no ( no nome do departamento; Trocar no nome de departamento: Admin para Adm; Exec para Exe; e Contab para Con.

Prof. M.Sc. lvaro F Pinheiro

*Funes (Caractere)
--Exibir todos os Primeironomes em minsculas SELECT LOWER(PRIMEIRONOME) AS PRIMEIRONOME FROM EMPREGADO; --Exibir todos os Sobrenomes em maisculas SELECT UPPER(SOBRENOME) AS PRIMEIRONOME FROM EMPREGADO; --Exibir os 3 primeiros caracteres do Sobrenome

--SQLServer | Postgre | MySQL SELECT SUBSTRING(SOBRENOME,1,3) FROM EMPREGADO;


--Oracle SELECT SUBSTR(SOBRENOME,1,3) FROM EMPREGADO; --Firebird SELECT SUBSTRING(SOBRENOME FROM 1 FOR 3) FROM EMPREGADO;

Prof. M.Sc. lvaro F Pinheiro

*Funes (Caractere)
--Exibir o tamanho do Sobrenome --SQLServer SELECT LEN(SOBRENOME) FROM EMPREGADO; --Postgre | Oracle | MySQL SELECT LENGTH(SOBRENOME) FROM EMPREGADO; --Firebird SELECT CHAR_LENGTH(SOBRENOME) FROM EMPREGADO;

Prof. M.Sc. lvaro F Pinheiro

*Funes (Caractere)
--Exibir a posio no ( no nome do departamento --SQLServer SELECT CHARINDEX('(', NOME) FROM DEPARTAMENTO; --Postgre SELECT STRPOS(NOME, '(') FROM DEPARTAMENTO; --Oracle | MySQL SELECT INSTR(NOME, '(') FROM DEPARTAMENTO; --Firebird SELECT POSITION('(' IN NOME) FROM DEPARTAMENTO;

Prof. M.Sc. lvaro F Pinheiro

--Trocar no nome de departamento: Admin para Adm; Exec para Exe; e Contab para Con.

SELECT REPLACE(NOME, '(ADMIN)', '(ADM)'), REPLACE(NOME, '(EXEC)', '(EXE)'), REPLACE(NOME, '(CONTAB)', '(CON)') FROM DEPARTAMENTO;

Prof. M.Sc. lvaro F Pinheiro

*Funes (Aninhamento) Prtica: Exibir o tamanho do Apelido concatenado com o Sobrenome com os brancos e depois sem os brancos. Dicas:
Funes de uma nica linha podem ser aninhadas em qualquer nvel; o As funes aninhadas so avaliadas do nvel mais interno para o mais externo.
o
Prof. M.Sc. lvaro F Pinheiro

*Funes (Aninhamento)
--Exibir o tamanho do Apelido concatenado com o Sobrenome com os brancos --SQLServer SELECT LEN(APELIDO + ' ' + SOBRENOME) FROM EMPREGADO;

--Postgre | Oracle SELECT LENGTH(APELIDO || ' ' || SOBRENOME) FROM EMPREGADO;


--MySQL SELECT LENGTH(CONCAT(APELIDO, ' ', SOBRENOME)) FROM EMPREGADO; --Firebird SELECT CHAR_LENGTH(APELIDO || ' ' || SOBRENOME) FROM EMPREGADO; --Exibir o tamanho do Apelido concatenado com o Sobrenome sem os brancos --SQLServer SELECT LEN(RTRIM(APELIDO) + ' ' + SOBRENOME) FROM EMPREGADO; --Postgre | Oracle SELECT LENGTH(RTRIM(APELIDO) || ' ' || SOBRENOME) FROM EMPREGADO; --MySQL SELECT LENGTH(CONCAT(RTRIM(APELIDO), ' ', SOBRENOME)) FROM EMPREGADO; --Firebird SELECT CHAR_LENGTH(TRIM(APELIDO) || ' ' || SOBRENOME) FROM EMPREGADO;

Prof. M.Sc. lvaro F Pinheiro

*Funes (Numrica)

ROUND arredonda a coluna; TRUNC trunca a coluna; Prticas:


o o o

Exibir o Fator; Exibir o Fator arredondando para 1 decimal; Exibir o Fator truncando para 1 decimal.

Prof. M.Sc. lvaro F Pinheiro

*Funes (Numrica)
--Exibir o Fator SELECT FATOR FROM DEPARTAMENTO;

--Exibir o Fator arredondando para 1 decimal SELECT ROUND(FATOR,1) FROM DEPARTAMENTO;


--Exibir o Fator truncando para 1 decimal. --SQLServer --SELECT ROUND(FATOR, 1, 2) FROM DEPARTAMENTO; --Postgre | Oracle | Firebird SELECT TRUNC(FATOR, 1) FROM DEPARTAMENTO;

--MySQL SELECT TRUNCATE(FATOR, 1) FROM DEPARTAMENTO;

Prof. M.Sc. lvaro F Pinheiro

*Funes (Numrica) MOD | % retorna o resto da diviso. Prticas:


o o

Visualizar o quociente da diviso de 5 por 2; Visualizar o resto da diviso de 5 por 2;

Dicas:
o

Para exibir dados que no esto inseridos em tabelas do banco de dados pode-se fazer uso de uma tabela fictcia usada para exibir resultados chamada de DUAL.

Prof. M.Sc. lvaro F Pinheiro

*Funes (Numrica)
--Visualizar o quociente da diviso de 5 por 2 --SQLServer | Firebird SELECT 5 / 2 FROM TMP; --Postgre | MySQL SELECT 5 / 2; --Oracle SELECT 5 / 2 FROM DUAL;

Prof. M.Sc. lvaro F Pinheiro

*Funes (Numrica)
--Visualizar o resto da diviso de 5 por 2 --SQLServer SELECT 5 % 2 FROM TMP; --Postgre | MySQL SELECT 5 MOD 2; --Oracle SELECT MOD (5, 2) FROM DUAL; --Firebird SELECT MOD(5, 2) FROM TMP;

Prof. M.Sc. lvaro F Pinheiro

*Funes (Data)
Prtica: Visualizar a data e hora corrente;
Dicas:
Sintaxe: GETDATE | SYSDATE Os Bancos de Dados (BD) armazenam as datas em formato de nmero inteiro: sculo, ano, ms, dia, horas, minutos e segundos; o O formato de exibio default depende do BD, mas no geral utilizado a exibio DD-MMM-AA; o Pode-se adicionar ou subtrair (aritmtica com datas)
o o
Prof. M.Sc. lvaro F Pinheiro

*Aritmtica de Datas

Dicas:
o o o o o

Operao; Resultado; Descrio Data+Nmero; Data; Adiciona dias a datas Data-Nmero; Data; Subtrai dias a datas Data-Data; Dias; Subtrai uma data de outra Data+Nmero/24; Data; Adiciona hora a datas

Prof. M.Sc. lvaro F Pinheiro

*Aritmtica de Datas

Prticas Exiba e verifique o retorno:


o o o o o

Exibir a data corrente; Exibir Data+Nmero; Exibir Data-Nmero; Exibir Data-Data; Exibir Data+Nmero/24.

Prof. M.Sc. lvaro F Pinheiro

*Aritmtica de Datas
--SQLServer SELECT GETDATE() FROM TMP; SELECT GETDATE() + 1 FROM TMP; SELECT GETDATE() - 1 FROM TMP; SELECT GETDATE() - '13/11/67' FROM TMP; SELECT GETDATE() + 10/24 FROM TMP; SELECT YEAR(GETDATE()) FROM TMP; SELECT MONTH(GETDATE()) FROM TMP; SELECT DAY(GETDATE()) FROM TMP;

Prof. M.Sc. lvaro F Pinheiro

*Aritmtica de Datas
--Postgre SELECT CURRENT_TIMESTAMP; SELECT CURRENT_TIMESTAMP + INTERVAL '1DAY'; SELECT CURRENT_TIMESTAMP - INTERVAL '1DAY'; SELECT CURRENT_TIMESTAMP - '13/11/67'; SELECT CURRENT_TIMESTAMP + INTERVAL '5HOURS'; SELECT EXTRACT(YEAR FROM CURRENT_TIMESTAMP); SELECT EXTRACT(MONTH FROM CURRENT_TIMESTAMP); SELECT EXTRACT(DAY FROM CURRENT_TIMESTAMP);

Prof. M.Sc. lvaro F Pinheiro

*Aritmtica de Datas
--Oracle SELECT SYSDATE FROM DUAL; SELECT SYSDATE + 1 FROM DUAL; SELECT SYSDATE - 1 FROM DUAL; SELECT SYSDATE - '13/11/67' FROM DUAL; SELECT SYSDATE + 10/24 FROM DUAL; SELECT YEAR(SYSDATE) FROM DUAL; SELECT MONTH(SYSDATE) FROM DUAL; SELECT DAY(SYSDATE) FROM DUAL;

Prof. M.Sc. lvaro F Pinheiro

*Aritmtica de Datas
--MySQL SELECT CURRENT_TIMESTAMP; SELECT CURRENT_TIMESTAMP + 1; SELECT CURRENT_TIMESTAMP - 1; SELECT CURRENT_TIMESTAMP - '13/11/67'; SELECT CURRENT_TIMESTAMP + 10/24; SELECT EXTRACT(YEAR FROM CURRENT_TIMESTAMP); SELECT EXTRACT(MONTH FROM CURRENT_TIMESTAMP); SELECT EXTRACT(DAY FROM CURRENT_TIMESTAMP);

Prof. M.Sc. lvaro F Pinheiro

*Aritmtica de Datas
--Firebird SELECT CURRENT_TIMESTAMP FROM TMP; SELECT CURRENT_TIMESTAMP + 1 FROM TMP; SELECT CURRENT_TIMESTAMP - 1 FROM TMP; SELECT CURRENT_TIMESTAMP + 10/24 FROM TMP; SELECT EXTRACT(YEAR FROM CURRENT_TIMESTAMP) FROM TMP; SELECT EXTRACT(MONTH FROM CURRENT_TIMESTAMP) FROM TMP; SELECT EXTRACT(DAY FROM CURRENT_TIMESTAMP) FROM TMP;

Prof. M.Sc. lvaro F Pinheiro

*Funo de Converso

Dica: CAST Prticas: o Exibir a converso do salrio para string.

Prof. M.Sc. lvaro F Pinheiro

*Funo de Converso
SELECT CAST(SALARIO AS CHAR(10)) FROM EMPREGADO;

Prof. M.Sc. lvaro F Pinheiro

*CASE

CASE permite uso de expresses condicionais.

Sintaxe:
o

CASE expr WHEN cond THEN retorno [WHEN condN THEN retornoN] [ELSE retorno] END

Prof. M.Sc. lvaro F Pinheiro

*CASE

Prticas:
o o

Visualizar Nmero, Sobrenome, Salrio e Departamento dos empregados; Visualizar Nmero, Sobrenome, Salrio e Departamento dos empregados aplicando 10% de aumento nos salrios dos depart. 10 e 20, 15% dos depart. 80 e 90, e 5% nos demais.

Prof. M.Sc. lvaro F Pinheiro

*CASE
SELECT NUMERO, SOBRENOME, CASE WHEN DEPARTAMENTO IN (10,20) THEN SALARIO + (SALARIO*0.10) WHEN DEPARTAMENTO IN (80,90) THEN SALARIO + (SALARIO*0.15) ELSE SALARIO + (SALARIO*0.5) END AS SALARIO, DEPARTAMENTO FROM EMPREGADO;

Prof. M.Sc. lvaro F Pinheiro

*Produto Cartesiano

Um produto cartesiano ser formado quando uma condio de juno for omitida e como consequncia todas as linhas da primeira tabela sero unidas a todas a linhas da segunda tabela.

Prof. M.Sc. lvaro F Pinheiro

*Produto Cartesiano

Prticas:
o

Visualizar Nmero, Sobrenome e Nome de Departamento dos empregados no colocando a juno das tabelas e observe o resultado.

Prof. M.Sc. lvaro F Pinheiro

*Produto Cartesiano
--Todos SELECT E.NUMERO, E.SOBRENOME, D.NOME FROM EMPREGADO E, DEPARTAMENTO D; --SQLServer | Postgre | Oracle | MySQL SELECT E.NUMERO, E.SOBRENOME, D.NOME FROM EMPREGADO E CROSS JOIN DEPARTAMENTO D;

Prof. M.Sc. lvaro F Pinheiro

*Juno

Quando forem necessrios dados de mais de uma tabela no banco de dados, ser usada uma condio de juno. As linhas de uma tabela podem ser unidas a linhas de outra tabela de acordo com os valores comuns existentes nas colunas correspondentes, ou seja, em geral colunas de chave primria e chave estrangeira.

Prof. M.Sc. lvaro F Pinheiro

*Juno
Dicas:
Quando criar uma instruo SELECT que una tabelas, coloque o nome da tabela antes do nome da coluna para fins de clareza e para melhorar o acesso ao banco de dados; o Caso aparea o mesmo nome de coluna em mais de uma tabela, o nome da coluna deve vir antecedido do nome da tabela (AMBGUIDADE); o Para unir N tabelas, necessrio um mnimo de N-1 condies de juno. Por exemplo, para unir 4 tabelas, necessrio um mnimo de 3 junes. Essa regra pode no se aplicar se sua tabela tiver uma chave primria concatenada. Nesse caso, ser necessrio mais de uma coluna para identificar exclusivamente cada linha; o Para melhorar a sintaxe deve-se apelidar as tabelas.
o

Prof. M.Sc. lvaro F Pinheiro

*Juno (Tipos)

Eqijuno No-eqijuno Juno externa Autojuno

Prof. M.Sc. lvaro F Pinheiro

*Equijuno

Dica:
Tambm chamadas de junes simples ou internas.

Prtica:
Exibir o Sobrenome do empregado e o Nome do departamento de um empregado.

Prof. M.Sc. lvaro F Pinheiro

*Equijuno
SELECT E.SOBRENOME, D.NOME FROM EMPREGADO E INNER JOIN DEPARTAMENTO D ON E.DEPARTAMENTO = D.NUMERO;

Prof. M.Sc. lvaro F Pinheiro

*Equijuno
Prtica: Determine o nome do cargo e do departamento de um empregado. Dica: Observe que nas junes simples ou internas se no existe uma relao a tupla no gerada.
Tupla: Cada linha formada por uma lista ordenada de colunas representa um registro. Os registros no precisam conter informaes em todas as colunas, podendo assumir valores nulos quando assim se fizer necessrio.

Prof. M.Sc. lvaro F Pinheiro

*Equijuno
SELECT E.SOBRENOME, C.NOME, D.NOME FROM EMPREGADO E INNER JOIN CARGO C ON E.CARGO = C.NUMERO INNER JOIN DEPARTAMENTO D ON E.DEPARTAMENTO = D.NUMERO;

Prof. M.Sc. lvaro F Pinheiro

*No-Equijuno

So junes que no usam condies de igualdade. Prtica: Exibir o Nmero, Sobrenome, nome do cargos de cada empregados que podem ser galgados na empresa.

Prof. M.Sc. lvaro F Pinheiro

SELECT E.NUMERO, E.SOBRENOME, C.NOME FROM EMPREGADO E INNER JOIN CARGO C ON C.NUMERO > E.CARGO;

Prof. M.Sc. lvaro F Pinheiro

*Juno Externa
Quando se deseja exibir dados que no possuem uma relao comum entre tabelas. Dicas:
Em banco como Oracle pode-se utilizar a extenso (+) e em SQL Server (*); o S pode ser utilizado de um lado da expresso; o No se pode utilizar o operador IN e nem o OR.
o

Prtica: Exibir o Nmero, Sobrenome, Apelido, nome do cargo de todos os empregados, mesmo daqueles que ainda no possuem cargos atribudos.

Prof. M.Sc. lvaro F Pinheiro

SELECT E.NUMERO, E.SOBRENOME, E.APELIDO, C.NOME FROM EMPREGADO E RIGHT JOIN CARGO C ON C.NUMERO = E.CARGO;

Prof. M.Sc. lvaro F Pinheiro

*Autojuno

Quando se une uma tabela a ela mesma. Prtica: Exibir o Nmero, Primeironome dos empregados e o Nmero e o Primeironome dos seus respectivos gerentes.

Prof. M.Sc. lvaro F Pinheiro

*Autojuno
SELECT E.NUMERO, E.PRIMEIRONOME, G.NUMERO, G.PRIMEIRONOME FROM EMPREGADO E LEFT JOIN EMPREGADO G ON E.GERENTE = G.NUMERO;

Prof. M.Sc. lvaro F Pinheiro

*Funes de Grupo
Operam um conjunto de linhas, as funes de grupo operam em conjuntos de linhas para fornecer um resultado por grupo. Esses conjuntos podem ser a tabela inteira ou dividida em grupos.

Dicas:
Funes de grupo so mais conhecidas como funes agregadas. AVG, COUNT, MAX, MIN e SUM; o ALL faz com que a funo considere todos os valores, inclusive as duplicidades; o DISTINCT faz com que a funo considere somente valores no duplicados; o Todas as funes de grupos ignoram valores nulos, para garantir a aplicabilidade para todos os registros use (*).
o

Prof. M.Sc. lvaro F Pinheiro

*Funes de Grupo

Prticas:
o o o o o

Exibir a mdia de salrios pago pelo empregador; Exibir o somatrio dos salrios; Exibir a quantidade de empregados; Exibir o maior salrio; Exibir o menor salrio.

Prof. M.Sc. lvaro F Pinheiro

*Funes de Grupo
SELECT AVG(SALARIO) FROM EMPREGADO; SELECT SUM(SALARIO) FROM EMPREGADO; SELECT COUNT(SALARIO) FROM EMPREGADO; SELECT MAX(SALARIO) FROM EMPREGADO; SELECT MIN(SALARIO) FROM EMPREGADO;

Prof. M.Sc. lvaro F Pinheiro

*Grupo de Dados

Usa-se o GROUP BY para dividir as linhas de uma tabela em grupos. Prticas:


o o o o o

Exibir a mdia de salrios pagos por Departamento; Exibir o somatrio dos salrios pagos por Cargo; Exibir a quantidade de empregados por gestor; Exibir o maior salrio por gestor; Exibir o menor salrio por gestor.

Prof. M.Sc. lvaro F Pinheiro

*Grupo de Dados
SELECT D.NOME, AVG(E.SALARIO) AS MEDIAS FROM DEPARTAMENTO D INNER JOIN EMPREGADO E ON D.NUMERO = E.DEPARTAMENTO GROUP BY D.NOME; SELECT C.NOME, SUM(E.SALARIO) AS SOMATORIO FROM CARGO C INNER JOIN EMPREGADO E ON C.NUMERO = E.CARGO GROUP BY C.NOME; SELECT G.SOBRENOME, COUNT(E.NUMERO) AS QTDE FROM EMPREGADO G INNER JOIN EMPREGADO E ON G.NUMERO = E.GERENTE GROUP BY G.SOBRENOME; SELECT G.SOBRENOME, MAX(E.SALARIO) AS MAIORSALARIO FROM EMPREGADO G INNER JOIN EMPREGADO E ON G.NUMERO = E.GERENTE GROUP BY G.SOBRENOME; SELECT G.SOBRENOME, MIN(E.SALARIO) AS MENORSALARIO FROM EMPREGADO G INNER JOIN EMPREGADO E ON G.NUMERO = E.GERENTE GROUP BY G.SOBRENOME;

Prof. M.Sc. lvaro F Pinheiro

*Grupo de Dados (Filtros)

Usa-se o HAVING para filtrar as linhas de uma tabela em grupos.


Prticas:
o o

Exibir a mdia de salrios pagos por Departamento cujo a mdia seja maior ou igual a 2000; Exibir o somatrio dos salrios pagos por Cargo cujo o somatrio seja menor que 1500.

Prof. M.Sc. lvaro F Pinheiro

*Grupo de Dados (Filtros)


SELECT D.NOME, AVG(E.SALARIO) AS MEDIAS FROM DEPARTAMENTO D INNER JOIN EMPREGADO E ON D.NUMERO = E.DEPARTAMENTO GROUP BY D.NOME HAVING AVG(E.SALARIO) >= 2000; SELECT D.NOME, SUM(E.SALARIO) AS MEDIAS FROM DEPARTAMENTO D INNER JOIN EMPREGADO E ON D.NUMERO = E.DEPARTAMENTO GROUP BY D.NOME HAVING AVG(E.SALARIO) < 1500;

Prof. M.Sc. lvaro F Pinheiro

*Grupo de Dados (ROLLUP)


Usa-se o ROLLUP para produzir linhas superagregadas pela referncia cruzada de colunas. O agrupamento ROLLUP produz um conjunto de resultados que contm as linhas agrupadas normais e os valores de subtotais. Prticas:
o

Exibir o somatrio de Salrio agrupado por Departamento e Cargo dos empregados com Nmero de Departamento menor que 60, exibindo os subtotais de Departamento e Cargo.

Prof. M.Sc. lvaro F Pinheiro

*Grupo de Dados (ROLLUP)


--Todos SELECT CAST(DEPARTAMENTO AS CHAR), CAST(CARGO AS CHAR), SUM(SALARIO) FROM EMPREGADO WHERE DEPARTAMENTO < 60 GROUP BY DEPARTAMENTO, CARGO UNION SELECT '', 'TOTAL', COALESCE(SUM(SALARIO), 0) FROM EMPREGADO; --SQLServer | Oracle SELECT DEPARTAMENTO, CARGO, SUM(SALARIO) FROM EMPREGADO WHERE DEPARTAMENTO < 60 GROUP BY ROLLUP (DEPARTAMENTO, CARGO); --MySQL SELECT DEPARTAMENTO, CARGO, SUM(SALARIO) FROM EMPREGADO WHERE DEPARTAMENTO < 60 GROUP BY DEPARTAMENTO, CARGO WITH ROLLUP;

Prof. M.Sc. lvaro F Pinheiro

*Grupo de Dados (CUBE)


Usa-se o CUBE para produzir um conjunto de resultados que contm as linhas de ROLLUP e as linhas de tabulao cruzada. Pode-se us-lo para produzir valores de tabulao cruzada com uma instruo SELECT simples. Prticas:
o

Exibir o somatrio de Salrio agrupado por Departamento e Cargo dos empregados com Nmero de Departamento menor que 60, exibindo a referncia cruzada de Departamento e Cargo.

Prof. M.Sc. lvaro F Pinheiro

*Grupo de Dados (CUBE)


--SQLServer | Oracle SELECT DEPARTAMENTO, CARGO, SUM(SALARIO) FROM EMPREGADO WHERE DEPARTAMENTO < 60 GROUP BY CUBE (DEPARTAMENTO, CARGO);

Prof. M.Sc. lvaro F Pinheiro

*Ordenao de Dados

Usa-se o ORDER BY para classificar as linhas de uma seleo.

Prticas:
o o

Exibir a mdia de salrios pagos por Departamento em ordem decrescente; Exibir o somatrio dos salrios pagos por Cargo em ordem ascendente.

Prof. M.Sc. lvaro F Pinheiro

*Ordenao de Dados
SELECT D.NOME, AVG(E.SALARIO) AS MEDIAS FROM DEPARTAMENTO D INNER JOIN EMPREGADO E ON D.NUMERO = E.DEPARTAMENTO GROUP BY D.NOME ORDER BY AVG(E.SALARIO) DESC; SELECT C.NOME, SUM(E.SALARIO) AS MEDIAS FROM CARGO C INNER JOIN EMPREGADO E ON C.NUMERO = E.CARGO GROUP BY C.NOME ORDER BY 1 ASC;

Prof. M.Sc. lvaro F Pinheiro

*Grupo de Dados (Aninhamento)

As funes de grupo podem ser aninhadas at uma profundidade de dois. Prtica:


o

Exibir o salrio mdio mximo pago por Departamento.

Prof. M.Sc. lvaro F Pinheiro

*Grupo de Dados (Aninhamento)


--Oracle SELECT MAX(AVG(E.SALARIO)) AS MEDIAS FROM EMPREGADO E GROUP BY E.DEPARTAMENTO;

Prof. M.Sc. lvaro F Pinheiro

*Subconsulta

Consiste em executar uma consulta (externa) a partir de outra consulta (interna). Dicas:
Existem operadores que retornam apenas uma linha (=, <>, >, >=, <, <=) e o que retorna vrias linhas (IN); o Coloque subconsultas entre parnteses; o A quantidade de nveis de subconsultas dependem do banco de dados.
o

Prtica:
o

Quais os empregados possuem salrio maior que o de Pedroca?

Prof. M.Sc. lvaro F Pinheiro

*Subconsulta
SELECT APELIDO, SALARIO FROM EMPREGADO WHERE SALARIO > (SELECT SALARIO FROM EMPREGADO WHERE APELIDO='PEDROCA');

Prof. M.Sc. lvaro F Pinheiro

*Subconsulta

Prtica:
o

Qual o nome (Primeironome + Sobrenome) dos empregados possuem o menor salrio?

Prof. M.Sc. lvaro F Pinheiro

*Subconsulta
--SQLSever SELECT PRIMEIRONOME + ' ' + SOBRENOME AS NOME, SALARIO FROM EMPREGADO WHERE SALARIO = (SELECT MIN(SALARIO) FROM EMPREGADO);

--Postgre | Oracle | Firebird SELECT PRIMEIRONOME || ' ' || SOBRENOME AS NOME, SALARIO FROM EMPREGADO WHERE SALARIO = (SELECT MIN(SALARIO) FROM EMPREGADO);
--MySQL SELECT CONCAT(PRIMEIRONOME, ' ', SOBRENOME) AS NOME, SALARIO FROM EMPREGADO WHERE SALARIO = (SELECT MIN(SALARIO) FROM EMPREGADO);

Prof. M.Sc. lvaro F Pinheiro

*Subconsulta

Prtica:
o

Exibir o menor Salrio por Departamento onde o menor Salrio seja o maior que o menor Salrio do Departamento de cdigo 50.

Prof. M.Sc. lvaro F Pinheiro

*Subconsulta
SELECT D.NOME, MIN(E.SALARIO) FROM EMPREGADO E INNER JOIN DEPARTAMENTO D ON E.DEPARTAMENTO = D.NUMERO GROUP BY D.NOME HAVING MIN(E.SALARIO) > (SELECT MIN(SALARIO) FROM EMPREGADO WHERE DEPARTAMENTO = 50);

Prof. M.Sc. lvaro F Pinheiro

*Subconsulta

Prtica:
o o o o o o

O que h de errado com a instruo abaixo? SELECT Numero, Sobrenome FROM Empregado WHERE Salario = (SELECT MIN(Salario) FROM Empregado GROUP BY Departamento);

Prof. M.Sc. lvaro F Pinheiro

*Subconsulta
A subconsulta retornou mais de 1 valor. Isso no permitido quando a subconsulta segue um =, !=, <, <= , >, >= ou quando ela usada como uma expresso.

Prof. M.Sc. lvaro F Pinheiro

*Subconsulta (ANY)

Prtica:
o

Exibir Nmero, Sobrenome, Salrio dos empregados que possuirem algum salrio menor que o menor salrio do departamento de cdigo 50.

Prof. M.Sc. lvaro F Pinheiro

*Subconsulta (ANY)
SELECT NUMERO, SOBRENOME, SALARIO FROM EMPREGADO WHERE SALARIO < ANY (SELECT MIN(SALARIO) FROM EMPREGADO WHERE DEPARTAMENTO = 50);

Prof. M.Sc. lvaro F Pinheiro

*Subconsulta (ALL)

Prtica:
o

Exibir Nmero, Sobrenome, Salrio dos todos os empregados que possuirem salrio menor que o menor salrio do departamento de cdigo 50.

Prof. M.Sc. lvaro F Pinheiro

*Subconsulta (ALL)
SELECT NUMERO, SOBRENOME, SALARIO FROM EMPREGADO WHERE SALARIO < ALL (SELECT MIN(SALARIO) FROM EMPREGADO WHERE DEPARTAMENTO = 50);

Prof. M.Sc. lvaro F Pinheiro

*Subconsulta (Correlacionadas)

Ocorre quando uma subconsulta faz referncia a uma coluna de uma tabela referenciada na instruo me. Uma subconsulta correlacionada avaliada uma vez para cada linha processada pela instruo me. A instruo me pode ser uma instruo SELECT, UPDATE ou DELETE.

Prtica:
o

Exibir todos os empregados (Sobrenome, Salrio e Nmero do Departamento) que ganham acima do salrio mdio de seus respectivos departamentos.

Prof. M.Sc. lvaro F Pinheiro

*Subconsulta (Correlacionadas)
SELECT EXT.SOBRENOME, EXT.SALARIO, EXT.DEPARTAMENTO FROM EMPREGADO EXT WHERE EXT.SALARIO > (SELECT AVG(ITN.SALARIO) FROM EMPREGADO ITN WHERE ITN.DEPARTAMENTO = EXT.DEPARTAMENTO);

Prof. M.Sc. lvaro F Pinheiro

*Subconsulta (EXISTS)

O operador EXISTS testa a existncia de linhas no conjunto de resultados da subconsulta. Se o valor da linha de uma subconsulta for encontrado: A pesquisa na consulta interna no continuar; e A condio ser indicada por um flag TRUE. Se o valor de linha de uma subconsulta no for encontrado: A condio ser indicada por um flag FALSE; A pesquisa continuar na consulta interna.

Prtica:
o

Exibir os empregados (Sobrenome, Salrio e Nmero do Departamento) com no mnimo uma pessoa subordinada a eles.

Prof. M.Sc. lvaro F Pinheiro

*Subconsulta (EXISTS)
SELECT EXT.SOBRENOME, EXT.SALARIO, EXT.DEPARTAMENTO FROM EMPREGADO EXT WHERE EXISTS (SELECT 'X' FROM EMPREGADO ITN WHERE ITN.GERENTE = EXT.NUMERO);

Prof. M.Sc. lvaro F Pinheiro

*Unio
Retorna todas as linhas selecionadas por uma consuta. Use esse operador para retornar todas as linhas de vrias tabelas e eliminar as linhas duplicadas. Dicas:
Necessriamente os campos das tabelas unidas devem possuir os mesmos tipos de dados; o Os campos devem estar posicionados na mesma ordem; o A quantidade de campos deve ser a mesma; o A clusula ORDER BY deve ser utilizada no final da unio.
o

Prtica:
o

Exibir a unio das tabelas Cargo e Departamento para os campos Nmero e Nome.

Prof. M.Sc. lvaro F Pinheiro

*Unio
SELECT NUMERO, NOME FROM CARGO UNION SELECT NUMERO, NOME FROM DEPARTAMENTO;

Prof. M.Sc. lvaro F Pinheiro

*Interseco

Serve para retornar todas as linhas comuns a vrias consultas.

Prtica:
o

Exibir a interseco das tabelas Cargo e Departamento para os campos Nmero e Nome.

Prof. M.Sc. lvaro F Pinheiro

*Interseco
--SQLServer | Postgre | Oracle SELECT NUMERO, NOME FROM CARGO INTERSECT SELECT NUMERO, NOME FROM DEPARTAMENTO;

--MySQL SELECT NUMERO, NOME FROM CARGO INNER JOIN DEPARTAMENTO USING (NUMERO, NOME);

Prof. M.Sc. lvaro F Pinheiro

*Subtrao

Serve para obter linhas retornadas pela primeira consulta e ausentes na segunda consulta. Prtica:
o

Exibir a subtrao das tabelas Cargo e Departamento para os campos Nmero e Nome.

Prof. M.Sc. lvaro F Pinheiro

*Subtrao
--SQLServer | Oracle SELECT NUMERO, NOME FROM CARGO MINUS SELECT NUMERO, NOME FROM DEPARTAMENTO; --Postgre SELECT NUMERO, NOME FROM CARGO EXCEPT SELECT NUMERO, NOME FROM DEPARTAMENTO; --MySQL SELECT DISTINCT NUMERO, NOME FROM CARGO WHERE (NUMERO, NOME) NOT IN (SELECT NUMERO, NOME FROM DEPARTAMENTO);

Prof. M.Sc. lvaro F Pinheiro

*Macrosubstituio

Alguns bancos permitem passagem de parmetros com o uso de variveis de substituio. Dicas: o No Oracle a macrosubstituio com (&); o No SQLServer a macrosubstituio com (:); Prtica:
o

Exibir o Sobrenome do empregado que possuir o Nmero informado pelo usurio.

Prof. M.Sc. lvaro F Pinheiro

*Macrosubstituio
SELECT SOBRENOME FROM EMPREGADO WHERE NUMERO = :Informe_Numero;

Prof. M.Sc. lvaro F Pinheiro

*Seleo de Seleo
Alguns BD permitem a seleco de dados nas clusulas SELECT e FROM.

Exemplo: o Oracle
SELECT CARGO FROM (SELECT C.NOME AS CARGO, AVG(E.SALARIO) AS MEDIASALARIO FROM CARGO C INNER JOIN EMPREGADO E ON C.NUMERO = E.CARGO GROUP BY C.NOME);

SQLServer
SELECT E.NUMERO, E.SOBRENOME, E.SALARIO, E.DEPARTAMENTO AS DEPCOD, (SELECT D.NOME FROM DEPARTAMENTO D WHERE D.NUMERO = E.DEPARTAMENTO) AS DEPNOME FROM EMPREGADO E;

Prof. M.Sc. lvaro F Pinheiro

*Anlise Top-N

Alguns BD permitem a seleco das N primeiras linhas que satisfazem a uma determinada seleo. Prtica: o Exibir os 2 primeiros registros de empregados cujos os salrios sejam menores que 2000.

Prof. M.Sc. lvaro F Pinheiro

*Anlise Top-N
--SQLServer SELECT TOP 2 NUMERO, APELIDO, SALARIO FROM EMPREGADO WHERE SALARIO < 2000;

--Postgre | MySQL SELECT NUMERO, APELIDO, SALARIO FROM EMPREGADO WHERE SALARIO < 2000 LIMIT 2;
--Oracle SELECT NUMERO, APELIDO, SALARIO FROM EMPREGADO WHERE SALARIO < 2000 AND ROWNUM <= 2; --Firebird SELECT FIRST 2 NUMERO, APELIDO, SALARIO FROM EMPREGADO WHERE SALARIO < 2000;

Prof. M.Sc. lvaro F Pinheiro

*Apagar

Apagar registros: DELETE FROM nome [WHERE definio] [ORDER BY ...]; Apagar e recriar tabela: TRUNCATE TABLE nome_tabela; Apagar tabela: DROP TABLE nome_tabela;

Prof. M.Sc. lvaro F Pinheiro

*Transaes
Tratamento de dados de forma atmica. Dica: Em alguns BD as instrues DDL e DCL so automticas.

Prticas:
o o o o o o o o o o o

Exibir os dados da tabela Empregado; Salvar um ponto A; Apagar todos os empregados do Departamento 50; Exibir os dados da tabela Empregado; Salvar um ponto B; Apagar todos os empregados com Salrio = 1000; Exibir os dados da tabela Empregado; Restaurar o ponto A; Exibir os dados da tabela Empregado; Restaurar o ponto B; Exibir os dados da tabela Empregado.

Prof. M.Sc. lvaro F Pinheiro

*Transaes
--SQLServer SAVE TRANSACTION A; SELECT * FROM DEPARTAMENTO; DELETE FROM DEPARTAMENTO WHERE NUMERO = 110; SELECT * FROM DEPARTAMENTO; UPDATE DEPARTAMENTO SET NOME = 'TESTE' WHERE NUMERO = 90; SELECT * FROM DEPARTAMENTO; ROLLBACK TRANSACTION A; SAVE TRANSACTION B; INSERT INTO DEPARTAMENTO (NUMERO, NOME) VALUES (200, 'TESTE2'); SELECT * FROM DEPARTAMENTO; COMMIT TRANSACTION B; SELECT * FROM DEPARTAMENTO;

Prof. M.Sc. lvaro F Pinheiro

*Viso
Serve para apresentar combinaes ou subconjuntos lgicos de dados atravs de views de tabelas. A view uma tabela lgica baseada em uma tabela ou em outra view. Ela no contm dados prprios, mas uma janela por meio da qual os dados das tabelas podem ser vistos e algumas vezes alterados. As tabelas nas quais uma view se baseia so denominadas de tabelas-base. A view armazenada como uma instruo SELECT no dicionrio de dados. Dicas:
o o o o

Serve para restringir o acesso a dados; Serve para facilitar as consultas complexas; Serve para permitir a independncia dos dados; Serve para apresentar diferentes vises dos mesmos dados.

Prof. M.Sc. lvaro F Pinheiro

*Viso

View Simples o Cria dados a partir de uma tabela apenas; o No contm funes e nem grupo de dados; o Permite operaes DML.
View Complexas o Cria dados a partir de vrias tabelas; o Contm funes ou grupo de dados; o Nem sempre permite operaes DML.

Prof. M.Sc. lvaro F Pinheiro

*Viso

Sintaxe:

CREATE VIEW [ schema_name . ] view_name [ (column [ ,...n ] ) ] AS select_statement;

Prof. M.Sc. lvaro F Pinheiro

*Viso Simples

Prtica: Criar uma viso denominada VISAO_1, que contenha os campos Nmero, Primeironome, Sobrenome dos empregados do departamento 80. Depois de criada insira um novo registro nessa viso. Finalizando exiba todos os dados da tabela Empregado.

Prof. M.Sc. lvaro F Pinheiro

CREATE VIEW VISAO_1 AS SELECT NUMERO, PRIMEIRONOME, SOBRENOME FROM EMPREGADO WHERE DEPARTAMENTO=80;

INSERT INTO VISAO_1 VALUES (200, 'ANTONIETA', 'LARANJEIRA');


SELECT * FROM EMPREGADO;

Prof. M.Sc. lvaro F Pinheiro

*Viso Complexa

Prtica: Criar uma viso denominada VISAO_2, que contenha os campos Nome (Primeironome + + Sobrenome) e o campo Salariobase (Salrio 500) dos empregados do departamento 30. Depois de criada tente insir um novo registro nessa viso. Finalizando exiba todos os dados da tabela Empregado.

Prof. M.Sc. lvaro F Pinheiro

CREATE VIEW VISAO_2 AS SELECT (PRIMEIRONOME + ' ' + SOBRENOME) AS NOME, (SALARIO - 500) AS SALARIOBASE FROM EMPREGADO WHERE DEPARTAMENTO=10;

INSERT INTO VISAO_2 VALUES ('JULIETA PEREIRA', 400);


SELECT * FROM EMPREGADO;

Prof. M.Sc. lvaro F Pinheiro

*Usurio
Criar novos usurios para o BD. Sintaxe: o SQLServer
CREATE LOGIN login WITH PASSWORD = senha'; CREATE USER usuario FOR LOGIN [operador] WITH DEFAULT_SCHEMA = [dbo]; o Oracle CREATE USER usuario IDENTIFIED BY senha';

Prtica: Criar um novo usurio.

Prof. M.Sc. lvaro F Pinheiro

--Para adicionar um usurio ao banco de dados do SQL Server voc tem que seguir trs passos: --Primeiro: voc deve criar um login, que um "cara" que tem permissso de se logar no SQL Sever

CREATE LOGIN USUARIO WITH PASSWORD = 'senha';


--Segundo: voc deve criar um usurio para o banco de dados que deseja mapeando esse usurio para o --login criado, assim seu usurio conseguir se logar no SQL Server e entrar no banco de dados desejado. CREATE USER USUARIO FROM LOGIN USUARIO;

--Terceiro: voc deve dar ou remover permisses ao usurio porque at o segundo passo o usurio criado s --tem direito a entrar no banco de dados, dando as permisses o usurio j pode operar no banco de dados. --Se o usurio for comum voc pode adicion-lo apenas as roles de db_reader e db_writer, que permitir que --o usurio faa select, insert, delete e update em todas as tabelas do referido banco de dados.
EXEC SP_ADDROLEMEMBER 'DB_DATAREADER', 'USUARIO'

Prof. M.Sc. lvaro F Pinheiro

*Privilgios

Fornecer acesso aos objetos dos BD.

Sintaxe: o GRANT privilgio ON objeto TO usurio;


Exemplos:
o o

GRANT CREATE TABLE, CREATE VIEW TO operador1; GRANT SELECT ON EMPREGADO TO operador1;

Prof. M.Sc. lvaro F Pinheiro

*Privilgios

Retirar acesso aos objetos dos BD.

Sintaxe: o REVOKE privilgio ON objeto FROM usurio;


Exemplos:
o o

REVOKE CREATE TABLE, CREATE VIEW FROM operador1; REVOKE SELECT ON EMPREGADO FROM operador1;

Prof. M.Sc. lvaro F Pinheiro

*Sequencia

Alguns bancos como o Postgre e o Oracle possuem um objeto chamado de sequencia que equivale no SQLServer a regra de IDENTITY( 1, 1). Sintaxe:
CREATE [TEMPORARY | TEMP] SEQUENCE name [INCREMENT [BY] increment ] [MINVALUE minvalue | NO MINVALUE] [MAXVALUE maxvalue | NO MAXVALUE] [START [ WITH ] start] [CACHE cache] [[ NO ] CYCLE]

Prof. M.Sc. lvaro F Pinheiro

*Funes
Funes SQLServer ASCII(string) pega o valor em ASCII da string CHAR(integer) troca inteiro do ASCII em um caracter LEN(string) Identifica o comprimento de uma expresso em caracteres LOWER(string) converte uma string uppercase para lowercase. LTRIM(string) remove os espaos em branco

Prof. M.Sc. lvaro F Pinheiro

*Funes
Funes SQLServer PATINDEX(posicao, expressao) devolve a posico de uma string dentro de um texto. Se no encontrar, retorna zero. REPLICATE(string, integer) repete N vezes um caractere especificado REVERSE(string) retorna o inverso de uma expressao RTRIM(string) remove os espaos em branco direita de uma string SPACE(integer) que retorna o nmero de espaos em branco informados no parmetro

Prof. M.Sc. lvaro F Pinheiro

*Funes
Funes SQLServer STUFF(string texto, X, Y, string texto_a_inserir) apaga da string "texto" os y caracteres a partir da posio x e os substitui por "texto_a_inserir" SUBSTRING(string texto, posicao_inicial, tamanho) retorna uma string com o comprimento definido em "tamanho" extraida da string "texto", a partir da "posicao_inicial"

UPPER(string) retorna string em maiusculas


DATEADD (parte, numero, data) adiciona um valor a parte de uma data

Prof. M.Sc. lvaro F Pinheiro

*Funes
Funes SQLServer DATEDIFF (parte, data inicial, data final) subtrai a data inicial da data final, indicando o resultado na unidade definida em "parte" GETDATE() retorna a data atual do sistema DATENAME (parte, data) retorna o nome da parte de uma data DATEPART(parte, data) retorna a parte de uma data CAST(expressao as datatype) converte uma expressao no datatype informado

Prof. M.Sc. lvaro F Pinheiro

*Funes
Funes SQLServer COL_LENGTH(nome_da_tabela, nome_da_coluna) retorna o tamanho da coluna COL_NAME(id_da_tabela, id_da_coluna) retorna o nome da coluna DATALENGTH(expressao) retorna o numero de bytes usados para armazenar a expressao DB_ID(nome_do_banco) retorna o ID do banco informado DB_NAME(id_do_banco) retorna o nome do banco

Prof. M.Sc. lvaro F Pinheiro

*Funes
Funes SQLServer HOST_ID() retorna a ID da estao que est acessando o SQL Server HOST_NAME() retorna o nome da estao que est acessando o SQL Server IDENT_INCR(nome_da_tabela_ou_view) retorna o valor incrementado IDENT_SEED(tabela_ou_view) retorna o valor inicial da coluna INDEX_COL(nome_da_tabela, indice_id, chave_id) retorna o nome da coluna que participa do ndice

Prof. M.Sc. lvaro F Pinheiro

*Funes
Funes SQLServer ISNULL(expressao, valor) se a expressao for null, troca pelo valor especificado ISNUMERIC(expressao) retorna 1 se a expressao for numerica e 0 se no for NEWID() retorna um novo valor do tipo uniqueidentifier NULLIF(expressao_1, expressao_2) retorna nulo se as duas expressoes forem equivalentes. Se no forem, retorna a primeira expressao. OBJECT_ID(nome_do_objeto) retorna o ID de um objeto, a partir do nome fornecido
Prof. M.Sc. lvaro F Pinheiro

*Funes
Funes SQLServer OBJECT_NAME(ID_do_objeto) retorna o nome do objeto, a partir do ID fornecido PARSENAME(objeto, parte) retorna a parte do nome de um objeto, desde que tenha sido qualificado STATS_DATE(tabela_id, indice_id) retorna a data em que as estatsticas do ndice foram atualizadas SUSER_SID(nome_do_usuario) retorna o ID do usuario informado SUSER_NAME(usuario_id) retorna o id do usurio no servidor. O argumento opcional.

Prof. M.Sc. lvaro F Pinheiro

*Funes
Funes SQLServer ABS(numero) retorna o valor absoluto do numero ACOS(float) retorna o arco-coseno do numero informado ASIN(float) retorna o arco-seno do numero informado ATAN(float) retorna o arco-tangente do numero informado ATN2(Float expressao_1, float expressao_2) arco-tangente do valor definido pela diviso da primeira expresso pela segunda

Prof. M.Sc. lvaro F Pinheiro

*Funes
Funes SQLServer CEILING(numero) retorna o menor inteiro que seja maior ou igual ao numero informado COS(float) retorna o coseno do numero informado COT(float) retorna o cotangente do numero informado DEGREES(numero) converte radianos para graus EXP(float) retorna o exponencial de um numero especificado

Prof. M.Sc. lvaro F Pinheiro

*Funes
Funes SQLServer FLOOR(numero) retorna o maior inteiro que seja menor ou igual ao numero informado LOG(float) retorna o logaritmo natural do numero informado LOG10(float) retorna o logaritmo base 10 do numero informado PI() retorna o valor de PI 3.1415926535897931. POWER(numero, potencia) retorna o valor elevado potencia informada

Prof. M.Sc. lvaro F Pinheiro

*Funes
Funes SQLServer RADIANS(numero) converte graus para radianos RAND(expressao) um nmero aleatrio entre 0 e 1. Expresso opcional e ser usada como semente da cadeia pseudo-aleatria ROUND(numero, precisao, arredonda_ou_trancar) arredonda ou tranca o numero fornecido de acordo com a precisao informada. Se o terceiro parametro no for passado para a funao, o numero arredondado. Se quiser que o numero seja truncado, deve-se fornecer o valor 1 SIGN(numero) retorna sinal positivo, negativo ou zero do numero

Prof. M.Sc. lvaro F Pinheiro

*Funes
Funes SQLServer SIN(float) retorna o seno do angulo especificado SQRT(float) retorna a raiz quadrada de um numero TAN(float) retorna a tangente de um numero informado SQUARE(float) retorna o quadrado de um numero

Prof. M.Sc. lvaro F Pinheiro

*Objetos Postgree

Prof. M.Sc. lvaro F Pinheiro

Tables Views Functions Domains Rules Triggers Indices Sequences Composite Types Enum Types Base Types Aggregates Operators

*Vnculos
A grande vantagem dos vnculos de banco de dados que eles permitem aos usurios acessarem dados de um banco de dados remoto de modo que eles fiquem conectados por meio do conjunto de privilgios do proprietrio do objeto. Em outras palavras, um usurio local pode acessar um banco de dados remoto sem necessariamente ser um usurio do banco de dados remoto.

Sintaxe: o Para criao de vnculo: CREATE PUBLIC DATABASE LINK banco USING usurio; o Para acessar dados: SELECT * FROM objeto@banco;
Prof. M.Sc. lvaro F Pinheiro

*BD SQLServer (Tipos de Dados)


TINYINT: Armazena valores numricos inteiros, variando de 0 a 256 SMALLINT: Armazena valores numricos inteiros, variando de -32.768 a 32.767 INT: Armazena valores numricos inteiros, variando de -2.147.483.648 a 2.147.483.647 BIGINT: Armazena valores numricos inteiros, variando de -9.223.372.036.854.775.808 a -9.223.372.036.854.775.807 SMALLMONEY: Valores numricos decimais variando de -214,748.3648 a 214,748.3647 MONEY: Valores numricos decimais variando de -922,337,203,685,477.5808 a +922,337,203,685,477.5807 NUMERIC(18,0): Armazena valores numricos com casas decimais, utilizando preciso. DECIMAL(18,0): Tem as mesmas funcionalidades do tipo NUMERIC, a diferena que o DECIMAL faz parte do padro ANSI e NUMERIC mantido por compatibilidade. FLOAT: Armazena valores numricos aproximados com preciso de ponto flutuante, variando de -1.79E + 308 a 1.79E + 308 REAL: Armazena valores numricos aproximados com preciso de ponto flutuante, variando de -3.40E + 38 a 3.40E + 38 BIT: Armazena bits ou seja somente poder conter os valores lgicos 0 ou 1. SMALLDATETIME: Armazena data e hora, com preciso de minutos. DATETIME: Armazena data e hora, com preciso de centsimos de segundos. TIME: Armazena somente hora. Pode armazenar segundos at a frao de 9999999 DATE: Armazena somente data. DATETIME2: uma combinao dos tipos de dados DATE e TIME. A diferena para o tipo DATETIME a preciso ao armazenar as horas. DATETIMEOFFSET: Armazena valores data e hora com a combinao da hora do dia com o fuso horrio. O intervalo de deslocamento do fuso horrio de -14:00 a +14:00 CHAR(N): Armazena N caracteres fixos (at 8.000) no formato no Unicode. ir sempre armazenar preenchendo o restante com espaos em branco. VARCHAR(N): Armazena N caracteres (at 8.000) no formato no Unicode VARCHAR(MAX): Armazena caracteres no formato no Unicode. MAX indica que o mximo a ser armazenado pode chegar a 2^31-1 bytes TEXT: Armazena caracteres no formato no Unicode. Esse tipo de dado suporte at 2.147.483.647 caracteres e existem funes especficas para trabalhar com esse tipo. NCHAR(N): Armazena N caracteres fixos (at 4.000) no formato Unicode, preenchido o restante com espaos em branco. NVARCHAR(N): Armazena N caracteres (at 4.000) no formato Unicode. NVARCHAR(MAX): Armazena caracteres no formato Unicode. MAX indica que o mximo a ser armazenado pode chegar a 2^31-1 bytes NTEXT: Armazena caracteres no formato Unicode. Esse tipo de dado suporte at 1.073.741.823 caracteres e existem funes especficas para trabalhar com esse tipo. BINARY(N): Armazena dados no formato binrio, podendo chegar at 8.000 bytes. Ser preenchido com espaos em brancos at completar o tamanho do campo. VARBINARY(N): Armazena dados no formato binrio, podendo chegar at 8.000 bytes. VARBINARY(MAX): Armazena dados no formato binrio, podendo chegar at 2^31-1 bytes IMAGE: Armazena dados no formato binrio, podendo chegar at 2,147,483,647 bytes SQL_VARIANT: Armazena todos os tipos de dados em um mesmo campo de uma tabela, com exceo dos tipos TEXT, NTEXT, TIMESTAMP e SQL_VARIANT TIMESTAMP: Este tipo de dados permite a gerao automatica de um valor binrio para um campo de uma tabela. UNIQUEIDENTIFIER: Esse tipo de dados utilizado para a criao de um identificador global e nico para uma tabela do SQL Server. GEOMETRY: Armazena dados espaciais utilizando representao plana da Terra (Flat Earth) GEOGRAPHY: Armazena dados espaciais utilizando representao redonda da Terra (Round Earth) HIERARCHYID: usado para representar uma posio em uma hierarquia. XML: Armazena dados no formato XML, no podendo exceder a 2Gb

Prof. M.Sc. lvaro F Pinheiro

*BD Postgre (Tipos de Dados)


bigint: int8 - inteiro de oito bytes com sinal bigserial: serial8 - inteiro de oito bytes autoincremental bit: cadeia de bits de comprimento fixo bit varying(n): varbit(n) - cadeia de bits de comprimento varivel Boolean: bool - booleano lgico (verdade/falso) box: caixa retangular em plano 2D bytea: dados binrios character varying(n): varchar(n) - cadeia de caracteres de comprimento varivel character(n): char(n) - cadeia de caracteres de comprimento fixo cidr: endereo de rede IP circle: crculo em plano 2D date: data de calendrio (ano, ms,dia) double precision: float8 - nmero de ponto flutuante de preciso dupla inet: endereo de hospedeiro IP integer: int, int4 - inteiro de quatro bytes com sinal interval(p): intervalo de tempo de uso geral line: linha infinita em plano 2D (no implementado) lseg: segmento de linha em plano 2D macaddr: endereo MAC money: valor monetrio numeric[(p, s)]: decimal [(p, s)] - numrico exato com preciso selecionvel path: caminho geomtrico aberto e fechado em plano 2D point: ponto geomtrico em plano 2D polygon: caminho geomtrico fechado em plano 2D real: float4 - nmero de ponto flutuante de preciso simples smallint: int2 - inteiro de dois bytes com sinal serial: serial4 - inteiro de quatro bytes autoincremental text: cadeia de caracteres de comprimento varivel time[(p)][ without time zone ]: hora do dia time[(p)]: with time zone - timetz hora do dia, incluindo a zona horria timestamp[(p)]: without time zone timestamp data e hora timestamp[(p)] [ with time zone ] timestamptz data e hora, incluindo a zona horria

Prof. M.Sc. lvaro F Pinheiro

*BD Oracle (Tipos de Dados)


VARCHAR2(comprimento): Conjunto de caracteres (string) de tamanho varivel. NUMBER(p, e): Representa um nmero com uma preciso de p e uma escala de e. LONG: Conjunto de caracteres de tamanho varivel com at 2 gigabytes (231-1 bytes). DATE: Um valor de data entre 1 de Janeiro de 4712 AC e 31 de Dezembro de 4712 DC. RAW(comprimento): Dados binrios em bruto de comprimento varivel. O comprimento mximo de 255 bytes. LONG RAW: Dados binrios em bruto com um comprimento varivel e de tamanho mximo igual a 2 gigabytes. ROWID: String hexadecimal que representa o endereo nico de uma linha numa tabela. CHAR(comprimento): Conjunto de caracteres de tamanho fixo. O comprimento mximo de 255 bytes e o comprimento por omisso de 1 byte. BLOB, CLOB, NCLOB e BFILE: Tipos de dados para contedos binrios at 4 Gigabytes internos ou externos (BFILE) base de dados. NVARCHAR2, MLSLABEL e NCHAR: Outros tipos de dados possveis mas menos usados.

Prof. M.Sc. lvaro F Pinheiro

*BD MySQL (Tipos de Dados)


TINYINT[(M)]: inteiros muitos pequenos BIT: o mesmo que TINYINT BOOL: o mesmo que TINYINT SMALLINT[(M)]: inteiros pequenos MEDIUMINT[(M)]: inteiros de tamanho mdio INT[(M)]: inteiros regulares INTEGER[(M)]: o mesmo que INT BIGINT[(M)]: inteiros grandes FLOAT(preciso): nmeros de ponto flutuante de preciso simples ou dupla FLOAT[(M,D)]: nmeros de ponto flutuante de preciso simples. O mesmo que FLOAT(4) DOUBLE[(M,D)]: nmeros de ponto flutuante de preciso dupla. O mesmo que FLOAT(8) DOUBLE: O mesmo que DOUBLE[(M,D)] PRECISION[(M,D)]: o mesmo que DOUBLE[(M,D)] REAL[(M,D)]: O mesmo que DOUBLE[(M,D)] DECIMAL[(M,D)]: nmero de ponto flutuante armazenado como char NUMERIC[(M,D)]: O mesmo que DECIMAL DEC[(M,D)]: O mesmo que DECIMAL DATE: 1000-01-01 a 9999-12-31 data. Exibido como YYYY-MM-DD TIME: -838:59:59 a 838:59:59 hora. Exibido como HH:MM:SS DATETIME: 1000-01-01 00:00:00 a 9999-12-31 23:59:59 data e hora. Exibido como YYYY-MM-DD HH:MM:SS TIMESTAMP[(M)]: 1970-01-01 00:00:00 a algum momento em 2037. Depende do limite do sistema operacional registro de data e hora til para transaes. Os formatos de exibio podem ser: CHAR: o mesmo que CHAR(1) VARCHAR(M) [BINARY]: varivel string de tamanho varivel. O mesmo que [BINARY]. TINYBLOB: BLOB pequeno TINYTEXT: TEXT pequeno BLOB: BLOB normal TEXT: TEXT normal MEDIUMBLOB: BLOB mdio MEDIUMTEXT: TEXT mdio LONGBLOB: BLOB longo LONGTEXT: TEXT longo

Prof. M.Sc. lvaro F Pinheiro

Anda mungkin juga menyukai