bd-04 sql comandos.ppt

Upload: nelma-antonio

Post on 26-Feb-2018

239 views

Category:

Documents


0 download

TRANSCRIPT

  • 7/25/2019 BD-04 SQL Comandos.ppt

    1/200

    Disciplina SQL

    Prof. M.Sc. lvaro F Pinheiro

  • 7/25/2019 BD-04 SQL Comandos.ppt

    2/200

    Prof. M.Sc. lvaro F Pinheiro

    Caractersticas:Pode ser utilizado por uma grande faixa de

    usurios, mesmo com pouca experincia em

    programao; uma linguagem no procedural;Reduz o tempo necessrio para a criao e

    manuteno de sistemas;

    uma linguagem similar ao ingls.

    *SQL

  • 7/25/2019 BD-04 SQL Comandos.ppt

    3/200

    Prof. M.Sc. lvaro F Pinheiro

    SQL (Reviso)Categorias (Reviso)

    BD AcessosCreate TableCreate IndexAlter TableInsertUpdateDeleteSelectProjeoSeleoJunoConsulta BsicaAliasCampos CalculadosValores NulosDuplicidade

    *Plano de Aula

  • 7/25/2019 BD-04 SQL Comandos.ppt

    4/200

    Prof. M.Sc. lvaro F Pinheiro

    CondicionamentoOrdenao

    FunesFunes Unica LinhaFunes de GrupoFunes CaractereFunes NumricaFunes DataFunes AninhamentoFunes ConversoCASEProduto CartesianoEquijunoNo-equijunoJuno externaAutojunoAninhamento de Grupo de DadosSubconsultas

    *Plano de Aula

  • 7/25/2019 BD-04 SQL Comandos.ppt

    5/200

    Prof. M.Sc. lvaro F Pinheiro

    Grupo de DadosGrupo de Dados com ROLLUP

    Grupo de Dados com CUBESubconsultas com ANYSubconsultas com ALLSubconsultas CorrelatasSubconsultas com EXISTSUnioIntersecoSubtraoMacrosubstituioSeleo de SeleoAnlise Top-N

    TransaesVisesVises SimplesVises Complexas

    *Plano de Aula

  • 7/25/2019 BD-04 SQL Comandos.ppt

    6/200

    Prof. M.Sc. lvaro F Pinheiro

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

    *SQL Categorias

  • 7/25/2019 BD-04 SQL Comandos.ppt

    7/200

    Prof. M.Sc. lvaro F Pinheiro

    SQLServerUsurio: sa; Senha: senha definida.

    PostgreUsurio: root; Senha: sem senha.

    OracleUsurio: SYSTEM; Senha: manager.

    MySQLUsurio: root; Senha: sem senha.

    Firebird

    Usurio: sysdba; Senha: masterkey.

    *BD Acesso

  • 7/25/2019 BD-04 SQL Comandos.ppt

    8/200

    Prof. M.Sc. lvaro F Pinheiro

    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 UnicodeTEXT: 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.

    *BD SQLServer (Principais Tipos de Dados)

  • 7/25/2019 BD-04 SQL Comandos.ppt

    9/200

    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.

  • 7/25/2019 BD-04 SQL Comandos.ppt

    10/200

    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..

  • 7/25/2019 BD-04 SQL Comandos.ppt

    11/200

    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.

  • 7/25/2019 BD-04 SQL Comandos.ppt

    12/200

    Prof. M.Sc. lvaro F Pinheiro

    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

    *Criar Tabelas

  • 7/25/2019 BD-04 SQL Comandos.ppt

    13/200

    Prof. M.Sc. lvaro F Pinheiro

    Dica: possvel criar uma tabela a partir de uma subconsulta.

    CREATE TABLE tabela [coluna, ...] AS subconsulta;

    *Criar Tabelas

    *C

  • 7/25/2019 BD-04 SQL Comandos.ppt

    14/200

    Prof. M.Sc. lvaro F Pinheiro

    Tmp:Nmero (PK).

    Cargo:Nmero (PK), nmero inteiro, auto-incremento;Nome, literal varivel(30), no nulo.

    Departamento:Nmero (PK), nmero inteiro;Nome, literal varivel(30), no nulo;Fator, nmero real.

    Empregado:Nmero (PK), numrico;Nome, literal varivel (50), no nulo;Departamento, (FK) numrico,

    atualizao cascata, excluso restrita.

    *Criar Tabelas

    *C i T b l (A )

  • 7/25/2019 BD-04 SQL Comandos.ppt

    15/200

    Prof. M.Sc. lvaro F Pinheiro

    --SQLServerCREATE TABLE CARGO (NUMERO INTEGER IDENTITY( 1, 1),

    NOME VARCHAR(30) NOT NULL,PRIMARY KEY (NUMERO));

    --Postgre|OracleCREATE TABLE CARGO (

    NUMERO INTEGER,NOME VARCHAR(30) NOT NULL,PRIMARY KEY (NUMERO));CREATE SEQUENCE CARGOSEQ INCREMENT BY 1 START WITH 1;

    *Criar Tabelas (Autonumerao)

    *C i T b l (A t )

  • 7/25/2019 BD-04 SQL Comandos.ppt

    16/200

    Prof. M.Sc. lvaro F Pinheiro

    --MySQLCREATE TABLE CARGO (NUMERO INTEGER AUTO_INCREMENT,

    NOME VARCHAR(30) NOT NULL,PRIMARY KEY (NUMERO));

    --FirebirdCREATE TABLE CARGO (

    NUMERO INTEGER,NOME VARCHAR(30) NOT NULL,PRIMARY KEY (NUMERO));CREATE GENERATOR CARGOGEN;CREATE TRIGGER CARGOTRI FOR CARGO

    ACTIVE BEFORE INSERT POSITION 0ASBEGINNEW.NUMERO = GEN_ID(CARGOGEN, 1);END;

    *Criar Tabelas (Autonumerao)

    *C i T b l

  • 7/25/2019 BD-04 SQL Comandos.ppt

    17/200

    Prof. M.Sc. lvaro F Pinheiro

    CREATE TABLE TMP (NUMERO INTEGER PRIMARY KEY);

    CREATE TABLE DEPARTAMENTO (NUMERO INTEGER,NOME VARCHAR(30) NOT NULL,FATOR DECIMAL(3,2),PRIMARY KEY (NUMERO)

    );

    *Criar Tabelas

    *C i T b l

  • 7/25/2019 BD-04 SQL Comandos.ppt

    18/200

    Prof. M.Sc. lvaro F Pinheiro

    --SQLServer | Postgre | MySQL | FirebirdCREATE TABLE EMPREGADO (NUMERO INTEGER,NOME VARCHAR(50) NOT NULL,DEPARTAMENTO INTEGER,PRIMARY KEY (NUMERO),FOREIGN KEY (DEPARTAMENTO) REFERENCES DEPARTAMENTO (NUMERO) ON UPDATECASCADE);

    --OracleCREATE TABLE EMPREGADO (NUMERO INTEGER,NOME VARCHAR(50) NOT NULL,DEPARTAMENTO INTEGER,PRIMARY KEY (NUMERO),FOREIGN KEY (DEPARTAMENTO) REFERENCES DEPARTAMENTO (NUMERO));

    *Criar Tabelas

    *I i Li h

  • 7/25/2019 BD-04 SQL Comandos.ppt

    19/200

    Prof. M.Sc. lvaro F Pinheiro

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

    *Inserir Linhas

    *I i Li h

  • 7/25/2019 BD-04 SQL Comandos.ppt

    20/200

    Prof. M.Sc. lvaro F Pinheiro

    Dicas: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.

    *Inserir Linhas

    *I i R i t

  • 7/25/2019 BD-04 SQL Comandos.ppt

    21/200

    Prof. M.Sc. lvaro F Pinheiro

    Cargo:Nmero, Nome;

    1, AnalistaTrainee;2, Analista Junior;3, Analista Pleno;

    4, Analista Snior;5, Analista Master.

    *Inserir Registros

    *I i Li h

  • 7/25/2019 BD-04 SQL Comandos.ppt

    22/200

    Prof. M.Sc. lvaro F Pinheiro

    --SQLServer | MySql | FirebirdINSERT 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');

    --PostgreINSERT INTO CARGO (NUMERO, NOME) VALUES (nextval('CARGOSEQ'), 'ANALISTA TRAINEE');INSERT INTO CARGO (NUMERO, NOME) VALUES (nextval('CARGOSEQ'), 'ANALISTA JUNIOR');

    INSERT INTO CARGO (NUMERO, NOME) VALUES (nextval('CARGOSEQ'), 'ANALISTA PLENO');INSERT INTO CARGO (NUMERO, NOME) VALUES (nextval('CARGOSEQ'), 'ANALISTA SNIOR');INSERT INTO CARGO (NUMERO, NOME) VALUES (nextval('CARGOSEQ'), 'ANALISTA MASTER');INSERT INTO CARGO (NUMERO, NOME) VALUES (nextval('CARGOSEQ'), 'CONSULTOR');

    --OracleINSERT INTO CARGO (NUMERO, NOME) VALUES (CARGOSEQ.NextVal, 'ANALISTA TRAINEE');INSERT INTO CARGO (NUMERO, NOME) VALUES (CARGOSEQ.NextVal, 'ANALISTA JUNIOR');

    INSERT INTO CARGO (NUMERO, NOME) VALUES (CARGOSEQ.NextVal, 'ANALISTA PLENO');INSERT INTO CARGO (NUMERO, NOME) VALUES (CARGOSEQ.NextVal, 'ANALISTA SNIOR');INSERT INTO CARGO (NUMERO, NOME) VALUES (CARGOSEQ.NextVal, 'ANALISTA MASTER');INSERT INTO CARGO (NUMERO, NOME) VALUES (CARGOSEQ.NextVal, 'CONSULTOR');

    *Inserir Linhas

    *I i Li h

  • 7/25/2019 BD-04 SQL Comandos.ppt

    23/200

    Prof. M.Sc. lvaro F Pinheiro

    Departamento: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.

    *Inserir Linhas

    *I i Li h

  • 7/25/2019 BD-04 SQL Comandos.ppt

    24/200

    Prof. M.Sc. lvaro F Pinheiro

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

    *Inserir Linhas

    *I i Li h

  • 7/25/2019 BD-04 SQL Comandos.ppt

    25/200

    Prof. M.Sc. lvaro F Pinheiro

    Empregados: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;

    *Inserir Linhas

    *Inserir Linhas

  • 7/25/2019 BD-04 SQL Comandos.ppt

    26/200

    Prof. M.Sc. lvaro F Pinheiro

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

    *Inserir Linhas

    *Alterar Tabelas

  • 7/25/2019 BD-04 SQL Comandos.ppt

    27/200

    Prof. M.Sc. lvaro F Pinheiro

    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

    *Alterar Tabelas

    *Alterar Tabelas

  • 7/25/2019 BD-04 SQL Comandos.ppt

    28/200

    Prof. M.Sc. lvaro F Pinheiro

    Empregados: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.

    *Alterar Tabelas

    *Alterar Tabelas

  • 7/25/2019 BD-04 SQL Comandos.ppt

    29/200

    Prof. M.Sc. lvaro F Pinheiro

    --SQLServerALTER TABLE EMPREGADOADD PRIMEIRONOME VARCHAR(25),SOBRENOME VARCHAR(25),

    CARGO INTEGER,SALARIO REAL,COMISSAO INTEGER,NASCIMENTO DATE,APELIDO VARCHAR(10),GERENTE INTEGER;

    --Postgre | MySQL | FirebirdALTER TABLE EMPREGADOADD 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;

    *Alterar Tabelas

    *Alterar Tabelas

  • 7/25/2019 BD-04 SQL Comandos.ppt

    30/200

    Prof. M.Sc. lvaro F Pinheiro

    --OracleALTER TABLE EMPREGADOADD (PRIMEIRONOME VARCHAR(25),SOBRENOME VARCHAR(25),

    CARGO INTEGER,SALARIO REAL,COMISSAO INTEGER,NASCIMENTO DATE,APELIDO VARCHAR(10),GERENTE INTEGER);

    *Alterar Tabelas

    *Alterar Tabelas

  • 7/25/2019 BD-04 SQL Comandos.ppt

    31/200

    Prof. M.Sc. lvaro F Pinheiro

    --SQLServerALTER TABLE EMPREGADOADD FOREIGN KEY (CARGO) REFERENCES CARGO (NUMERO) ON UPDATE CASCADE,FOREIGN KEY (GERENTE) REFERENCES EMPREGADO (NUMERO);

    --Postgre | MySQL | FirebirdALTER TABLE EMPREGADOADD FOREIGN KEY (CARGO) REFERENCES CARGO (NUMERO) ON UPDATE CASCADE,ADD FOREIGN KEY (GERENTE) REFERENCES EMPREGADO (NUMERO);

    --Oracle

    ALTER TABLE EMPREGADOADD FOREIGN KEY (CARGO) REFERENCES CARGO;ALTER TABLE EMPREGADOADD FOREIGN KEY (GERENTE) REFERENCES EMPREGADO;

    *Alterar Tabelas

    *Alterar Linhas

  • 7/25/2019 BD-04 SQL Comandos.ppt

    32/200

    Prof. M.Sc. lvaro F Pinheiro

    UPDATE nome_tabelaSET nome_coluna1=expr1 [,

    nome_coluna2=expr2 ...][WHERE definio][ORDER BY ...]

    *Alterar Linhas

    *Alterar Linhas

  • 7/25/2019 BD-04 SQL Comandos.ppt

    33/200

    Prof. M.Sc. lvaro F Pinheiro

    Pode-se alterar linha;Pode-se alterar listas;

    Pode-se alterar subconsultas;Pode-se alterar linhas com base em outratabela.

    Alterar Linhas

    *Funes

  • 7/25/2019 BD-04 SQL Comandos.ppt

    34/200

    Prof. M.Sc. lvaro F Pinheiro

    SQLServer | Postgre | MySQL | Firebird

    SUBSTRING(string texto, posicao_inicial,tamanho) - retorna uma string com o comprimentodefinido em "tamanho" extraida da string "texto", apartir da "posicao_inicial;

    Oracle: SUBSTR

    SQLServerCHARINDEX( string pesquisado, campo,

    posicao_inicial) retorna a posio do stringpesquisado dentro do campo informado.

    Postgre: STRPOSOracle | MySQL: INSTRFirebird: POSITION

    Funes

    *Alterar Linhas

  • 7/25/2019 BD-04 SQL Comandos.ppt

    35/200

    Prof. M.Sc. lvaro F Pinheiro

    Fazendo uso das funes substring e charindex separar

    o contedo do campo Nome nos campos Primeironomee Sobrenome. Depois apagar o campo Nome ficando: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;

    Alterar Linhas

    *Alterar Linhas

  • 7/25/2019 BD-04 SQL Comandos.ppt

    36/200

    Prof. M.Sc. lvaro F Pinheiro

    --SQLServerUPDATE EMPREGADO SETPRIMEIRONOME = SUBSTRING(NOME,1,CHARINDEX(' ',NOME)-1),

    SOBRENOME = SUBSTRING(NOME,CHARINDEX(' ',nome)+1,100);

    --PostgreUPDATE EMPREGADO SETPRIMEIRONOME = SUBSTRING(NOME,1,STRPOS(NOME, ' ')-1),SOBRENOME = SUBSTRING(NOME,STRPOS(NOME, ' ')+1,100);

    --OracleUPDATE EMPREGADO SETPRIMEIRONOME = SUBSTR(NOME,1,INSTR(NOME, ' ')-1),SOBRENOME = SUBSTR(NOME,INSTR(NOME, ' ')+1,100);

    --MySQLUPDATE EMPREGADO SETPRIMEIRONOME = SUBSTRING(NOME,1,INSTR(NOME, ' ')-1),

    SOBRENOME = SUBSTRING(NOME,INSTR(NOME, ' ')+1,100);

    --FirebirdUPDATE EMPREGADO SETPRIMEIRONOME = SUBSTRING(NOME FROM 1 FOR POSITION(' ', NOME)-1),SOBRENOME = SUBSTRING(NOME FROM POSITION(' ', NOME)+1 FOR 100);

    Alterar Linhas

    *Alterar Tabela

  • 7/25/2019 BD-04 SQL Comandos.ppt

    37/200

    Prof. M.Sc. lvaro F Pinheiro

    --SQLServer | Postgre | Oracle | MySQLALTER TABLE EMPREGADODROP COLUMN NOME;

    --FirebirdALTER TABLE EMPREGADODROP NOME;

    Alterar Tabela

    *Alterar Linhas

  • 7/25/2019 BD-04 SQL Comandos.ppt

    38/200

    Prof. M.Sc. lvaro F Pinheiro

    Atualizar as linhas de Empregado com os valores: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;

    Alterar Linhas

    *Alterar Linhas

  • 7/25/2019 BD-04 SQL Comandos.ppt

    39/200

    Prof. M.Sc. lvaro F Pinheiro

    --SQLServer | Postgre | OracleUPDATE EMPREGADO SETCARGO=1, GERENTE=NULL, SALARIO=1000, COMISSAO=NULL,NASCIMENTO='01/07/80', APELIDO='TONHO' WHERE NUMERO=100;UPDATE EMPREGADO SETCARGO=1, GERENTE=100, SALARIO=1500, COMISSAO=NULL,NASCIMENTO='18/05/70', APELIDO='Z' WHERE NUMERO=101;UPDATE EMPREGADO SETCARGO=2, GERENTE=100, SALARIO=2000, COMISSAO=3,NASCIMENTO='22/07/80', APELIDO='MA' WHERE NUMERO=102;UPDATE EMPREGADO SETCARGO=3, GERENTE=100, SALARIO=1500, COMISSAO=2,NASCIMENTO='03/03/71', APELIDO='JO' WHERE NUMERO=103;UPDATE EMPREGADO SETCARGO=NULL, GERENTE=100, SALARIO=2500, COMISSAO=3,NASCIMENTO='01/01/65', APELIDO='CA' WHERE NUMERO=104;

    UPDATE EMPREGADO SETCARGO=1, GERENTE=NULL, SALARIO=1000, COMISSAO=2,NASCIMENTO='15/02/60', APELIDO='MO' WHERE NUMERO=107;UPDATE EMPREGADO SETCARGO=2, GERENTE=107, SALARIO=1100, COMISSAO=NULL,NASCIMENTO='30/07/83', APELIDO='PEDROCA' WHERE NUMERO=124;UPDATE EMPREGADO SETCARGO=3, GERENTE=107, SALARIO=2000, COMISSAO=2,NASCIMENTO='21/06/78', APELIDO='TI' WHERE NUMERO=141;UPDATE EMPREGADO SETCARGO=4, GERENTE=107, SALARIO=1500, COMISSAO=NULL,NASCIMENTO='02/12/72', APELIDO='RE' WHERE NUMERO=142;UPDATE EMPREGADO SETCARGO=NULL, GERENTE=107, SALARIO=2000, COMISSAO=2,NASCIMENTO='11/11/81', APELIDO='BIEL' WHERE NUMERO=143;

    Alterar Linhas

    OBS: Data no formato DD/MM/AAAA

    *Alterar Linhas

  • 7/25/2019 BD-04 SQL Comandos.ppt

    40/200

    Prof. M.Sc. lvaro F Pinheiro

    --MySQLUPDATE EMPREGADO SETCARGO=1, GERENTE=NULL, SALARIO=1000, COMISSAO=NULL,NASCIMENTO='80/07/01', APELIDO='TONHO' WHERE NUMERO=100;UPDATE EMPREGADO SETCARGO=1, GERENTE=100, SALARIO=1500, COMISSAO=NULL,NASCIMENTO='70/05/18', APELIDO='Z' WHERE NUMERO=101;UPDATE EMPREGADO SETCARGO=2, GERENTE=100, SALARIO=2000, COMISSAO=3,NASCIMENTO='80/07/22', APELIDO='MA' WHERE NUMERO=102;UPDATE EMPREGADO SETCARGO=3, GERENTE=100, SALARIO=1500, COMISSAO=2,NASCIMENTO='71/03/03', APELIDO='JO' WHERE NUMERO=103;UPDATE EMPREGADO SETCARGO=NULL, GERENTE=100, SALARIO=2500, COMISSAO=3,NASCIMENTO='65/01/01', APELIDO='CA' WHERE NUMERO=104;

    UPDATE EMPREGADO SETCARGO=1, GERENTE=NULL, SALARIO=1000, COMISSAO=2,NASCIMENTO='60/02/15', APELIDO='MO' WHERE NUMERO=107;UPDATE EMPREGADO SETCARGO=2, GERENTE=107, SALARIO=1100, COMISSAO=NULL,NASCIMENTO='83/07/30', APELIDO='PEDROCA' WHERE NUMERO=124;UPDATE EMPREGADO SETCARGO=3, GERENTE=107, SALARIO=2000, COMISSAO=2,NASCIMENTO='78/06/21', APELIDO='TI' WHERE NUMERO=141;UPDATE EMPREGADO SETCARGO=4, GERENTE=107, SALARIO=1500, COMISSAO=NULL,NASCIMENTO='72/12/02', APELIDO='RE' WHERE NUMERO=142;UPDATE EMPREGADO SETCARGO=NULL, GERENTE=107, SALARIO=2000, COMISSAO=2,NASCIMENTO='81/11/11', APELIDO='BIEL' WHERE NUMERO=143;

    Alterar Linhas

    OBS: Data no formato AAA/MM/DD

    *Alterar Linhas

  • 7/25/2019 BD-04 SQL Comandos.ppt

    41/200

    Prof. M.Sc. lvaro F Pinheiro

    --FirebirdUPDATE EMPREGADO SETCARGO=1, GERENTE=NULL, SALARIO=1000, COMISSAO=NULL,NASCIMENTO='07/01/80', APELIDO='TONHO' WHERE NUMERO=100;UPDATE EMPREGADO SETCARGO=1, GERENTE=100, SALARIO=1500, COMISSAO=NULL,NASCIMENTO='05/18/70', APELIDO='Z' WHERE NUMERO=101;UPDATE EMPREGADO SETCARGO=2, GERENTE=100, SALARIO=2000, COMISSAO=3,NASCIMENTO='07/22/80', APELIDO='MA' WHERE NUMERO=102;UPDATE EMPREGADO SETCARGO=3, GERENTE=100, SALARIO=1500, COMISSAO=2,NASCIMENTO='03/03/71', APELIDO='JO' WHERE NUMERO=103;UPDATE EMPREGADO SETCARGO=NULL, GERENTE=100, SALARIO=2500, COMISSAO=3,NASCIMENTO='01/01/65', APELIDO='CA' WHERE NUMERO=104;

    UPDATE EMPREGADO SETCARGO=1, GERENTE=NULL, SALARIO=1000, COMISSAO=2,NASCIMENTO='02/15/60', APELIDO='MO' WHERE NUMERO=107;UPDATE EMPREGADO SETCARGO=2, GERENTE=107, SALARIO=1100, COMISSAO=NULL,NASCIMENTO='07/30/83', APELIDO='PEDROCA' WHERE NUMERO=124;UPDATE EMPREGADO SETCARGO=3, GERENTE=107, SALARIO=2000, COMISSAO=2,NASCIMENTO='06/21/78', APELIDO='TI' WHERE NUMERO=141;UPDATE EMPREGADO SETCARGO=4, GERENTE=107, SALARIO=1500, COMISSAO=NULL,NASCIMENTO='12/02/72', APELIDO='RE' WHERE NUMERO=142;UPDATE EMPREGADO SETCARGO=NULL, GERENTE=107, SALARIO=2000, COMISSAO=2,NASCIMENTO='11/11/81', APELIDO='BIEL' WHERE NUMERO=143;

    Alterar Linhas

    OBS: Data no formato MM/DD/AAAA

    *Criar ndices

  • 7/25/2019 BD-04 SQL Comandos.ppt

    42/200

    Prof. M.Sc. lvaro F Pinheiro

    CREATE [UNIQUE] INDEX nome_indice

    ON nome_tabela (index_col_name,...)index_col_name: col_name [(length)] [ASC | DESC]

    Criar ndices

    *Criar ndices

  • 7/25/2019 BD-04 SQL Comandos.ppt

    43/200

    Prof. M.Sc. lvaro F Pinheiro

    Criar ndices por:Primeironome e Sobrenome;Salrio;Comisso;Cargo;Departamento;Apelido (nico).

    Criar ndices

    *Criar ndices

  • 7/25/2019 BD-04 SQL Comandos.ppt

    44/200

    Prof. M.Sc. lvaro F Pinheiro

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

    Criar ndices

    *Dicionrio de Dados

  • 7/25/2019 BD-04 SQL Comandos.ppt

    45/200

    Prof. M.Sc. lvaro F Pinheiro

    Prtica: Visualizar a estrutura das tabelasEmpregados e Departamentos.

    Dicionrio de Dados

    *Dicionrio de Dados

  • 7/25/2019 BD-04 SQL Comandos.ppt

    46/200

    Prof. M.Sc. lvaro F Pinheiro

    --SQLServerSELECT * FROM SYSOBJECTS O INNER JOIN SYSCOLUMNS C ON O.ID=C.ID WHERE O.NAME ='DEPARTAMENTO';

    --PostgreSELECTa.attnum,a.attname AS field,t.typname AS type,a.attlen AS length,a.atttypmod AS lengthvar,a.attnotnull AS notnull,c.relname AS nameFROMpg_class c,pg_attribute a,pg_type tWHEREc.relname = 'departamento' anda.attnum > 0and a.attrelid = c.oidand a.atttypid = t.oidORDER BY c.relname

    --Oracle | MySQLDESCRIBE DEPARTAMENTO;

    Dicionrio de Dados

    *Consulta

  • 7/25/2019 BD-04 SQL Comandos.ppt

    47/200

    Prof. M.Sc. lvaro F Pinheiro

    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 ] } ]

    Consulta

    *Projeo

  • 7/25/2019 BD-04 SQL Comandos.ppt

    48/200

    Prof. M.Sc. lvaro F Pinheiro

    Prtica: Visualizar os campos: Nmero eNome (Primeironome || || Sobrenome).

    Dicas:Operador de concatenao (||);Em alguns BD se usa (+) para concatenao;Concatena colunas ou strings de caracteres

    a outras colunas.

    Projeo

    *Projeo

  • 7/25/2019 BD-04 SQL Comandos.ppt

    49/200

    Prof. M.Sc. lvaro F Pinheiro

    --SQLServerSELECT NUMERO, PRIMEIRONOME + ' ' + SOBRENOME AS NOME FROMEMPREGADO;

    --Postgre | Oracle | FirebirdSELECT NUMERO, PRIMEIRONOME || ' ' || SOBRENOME AS NOME FROMEMPREGADO;

    --MySQL

    SELECT NUMERO, CONCAT(PRIMEIRONOME, ' ', SOBRENOME) AS NOME FROMEMPREGADO;

    Projeo

  • 7/25/2019 BD-04 SQL Comandos.ppt

    50/200

    *Seleo

  • 7/25/2019 BD-04 SQL Comandos.ppt

    51/200

    Prof. M.Sc. lvaro F Pinheiro

    SELECT NUMERO, PRIMEIRONOME, SOBRENOME, DEPARTAMENTOFROM EMPREGADOWHERE DEPARTAMENTO = 20 OR DEPARTAMENTO = 80;

    Seleo

    *Juno

  • 7/25/2019 BD-04 SQL Comandos.ppt

    52/200

    Prof. M.Sc. lvaro F Pinheiro

    Prtica: Visualizar os registros dosempregados juntamente com o nome dodepartamento: Nmero (Empregados);

    Primeironome (Empregados); Sobrenome(Empregados); Departamento (Empregados); eNome (Departamentos).

    Juno

    *Juno

  • 7/25/2019 BD-04 SQL Comandos.ppt

    53/200

    Prof. M.Sc. lvaro F Pinheiro

    SELECT E.NUMERO, E.PRIMEIRONOME, E.SOBRENOME, E.DEPARTAMENTO,D.NOMEFROM EMPREGADO E INNER JOIN DEPARTAMENTO D

    ON E.DEPARTAMENTO = D.NUMERO;

    Juno

    *Consulta Bsica

  • 7/25/2019 BD-04 SQL Comandos.ppt

    54/200

    Prof. M.Sc. lvaro F Pinheiro

    Prtica: Visualizar todos os registros e todos oscampos da tabela departamentos.

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

    Consulta Bsica

    *Consulta Bsica

  • 7/25/2019 BD-04 SQL Comandos.ppt

    55/200

    Prof. M.Sc. lvaro F Pinheiro

    SELECT * FROM DEPARTAMENTO;

    Consulta Bsica

    *Apelido

  • 7/25/2019 BD-04 SQL Comandos.ppt

    56/200

    Prof. M.Sc. lvaro F Pinheiro

    Prtica: Visualizar todos os registros noscampos Nmero, Nome (Primeironome + + Sobrenome) e aps a consulta ser

    realizada observar o nome do campo paraa expresso Nome. Finalize repetindo aconsulta colocando o apelido Nome do

    Funcionrio.

    Apelido

    *Apelido

  • 7/25/2019 BD-04 SQL Comandos.ppt

    57/200

    Prof. M.Sc. lvaro F Pinheiro

    --SQLServerSELECT NUMERO, PRIMEIRONOME + ' ' + SOBRENOME FROM EMPREGADO;SELECT NUMERO, PRIMEIRONOME + ' ' + SOBRENOME AS NOME FROM

    EMPREGADO;--Postgre | Oracle | FirebirdSELECT NUMERO, PRIMEIRONOME || ' ' || SOBRENOME FROM EMPREGADO;SELECT NUMERO, PRIMEIRONOME || ' ' || SOBRENOME AS NOME FROMEMPREGADO;

    --MySQLSELECT NUMERO, CONCAT(PRIMEIRONOME, ' ', SOBRENOME) FROMEMPREGADO;SELECT NUMERO, CONCAT(PRIMEIRONOME, ' ', SOBRENOME) AS NOME FROMEMPREGADO;

    Apelido

    *Campos Calculados

  • 7/25/2019 BD-04 SQL Comandos.ppt

    58/200

    Prof. M.Sc. lvaro F Pinheiro

    Prtica: Visualizar o Sobrenome, o salrio, e o lquidodos empregados, considerando que todos possuem umdesconto de 10% de INSS.

    Dicas:

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

    Funes matemticas:

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

    Campos Calculados

    *Campos Calculados

  • 7/25/2019 BD-04 SQL Comandos.ppt

    59/200

    Prof. M.Sc. lvaro F Pinheiro

    Dicas:Precedncia de Operadores:

    A multiplicao e a diviso tm prioridade sobre a adio esubtrao;

    Os operadores com a mesma prioridade so avaliados daesquerda para a direita;Os parnteses so usados para forar a avaliao priorizada e

    para esclarecer as instrues.

    Ca pos Ca cu ados

  • 7/25/2019 BD-04 SQL Comandos.ppt

    60/200

    Prof. M.Sc. lvaro F Pinheiro

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

    *Valores Nulos

  • 7/25/2019 BD-04 SQL Comandos.ppt

    61/200

    Prof. M.Sc. lvaro F Pinheiro

    Prtica: Visualizar o Sobrenome e o SalrioBruto (Salrio + Comisso). Obs: A Comissorepresenta um percentual aplicado sobre osalrio.

    Dicas: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 embranco.

    *Valores Nulos

  • 7/25/2019 BD-04 SQL Comandos.ppt

    62/200

    Prof. M.Sc. lvaro F Pinheiro

    SELECT SOBRENOME, SALARIO + (SALARIO * COMISSAO / 100) AS BRUTOFROM EMPREGADO;

    *Valores Nulos

  • 7/25/2019 BD-04 SQL Comandos.ppt

    63/200

    Prof. M.Sc. lvaro F Pinheiro

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

    Dicas: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)

  • 7/25/2019 BD-04 SQL Comandos.ppt

    64/200

    Prof. M.Sc. lvaro F Pinheiro

    --SQLServerSELECT SOBRENOME, SALARIO + (SALARIO * ISNULL(COMISSAO,0) / 100) ASBRUTO FROM EMPREGADO;

    --Postgre | FirebirdSELECT SOBRENOME, SALARIO + (SALARIO * COALESCE(COMISSAO,0) / 100)AS BRUTO FROM EMPREGADO;

    --OracleSELECT SOBRENOME, SALARIO + (SALARIO * NVL(COMISSAO,0) / 100) ASBRUTO FROM EMPREGADO;

    --MySQLSELECT SOBRENOME, SALARIO + (SALARIO * IFNULL(COMISSAO,0) / 100) ASBRUTO FROM EMPREGADO;

    *Duplicidade

  • 7/25/2019 BD-04 SQL Comandos.ppt

    65/200

    Prof. M.Sc. lvaro F Pinheiro

    Prtica: Visualizar o Sobrenome dosEmpregados.

    Dica:

    A exibio default das consultas de todasas linhas, incluindo linhas duplicadas.

    Prtica: Visualizar o Sobrenome dos

    Empregados sem duplicidade.

    p

    *Duplicidade

  • 7/25/2019 BD-04 SQL Comandos.ppt

    66/200

    Prof. M.Sc. lvaro F Pinheiro

    SELECT SOBRENOME FROM EMPREGADO;

    SELECT DISTINCT SOBRENOME FROM EMPREGADO;

    p

    *Condicionamento

  • 7/25/2019 BD-04 SQL Comandos.ppt

    67/200

    Prof. M.Sc. lvaro F Pinheiro

    Prtica: Visualizar o Nmero e Sobrenome de todosos empregados do departamento 90.

    Dicas:Selees so realizadas pela clusula WHERE;

    Operadores de Comparao:Igual a: =Maior que: >Maior que ou igual a: >=Menor que: E.CARGO;

    *Juno Externa

  • 7/25/2019 BD-04 SQL Comandos.ppt

    125/200

    Prof. M.Sc. lvaro F Pinheiro

    Quando se deseja exibir dados que no possuem uma relao comum entretabelas.

    Dicas:Em banco como Oracle pode-se utilizar a extenso (+) e em

    SQL Server (*);S pode ser utilizado de um lado da expresso;No se pode utilizar o operador IN e nem o OR.

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

    SELECT E.NUMERO, E.SOBRENOME, E.APELIDO, C.NOMEFROM EMPREGADO E

  • 7/25/2019 BD-04 SQL Comandos.ppt

    126/200

    Prof. M.Sc. lvaro F Pinheiro

    FROM EMPREGADO ERIGHT JOIN CARGO CON C.NUMERO = E.CARGO;

    *Autojuno

  • 7/25/2019 BD-04 SQL Comandos.ppt

    127/200

    Prof. M.Sc. lvaro F Pinheiro

    Quando se une uma tabela a ela mesma.

    Prtica: Exibir o Nmero, Primeironome dos

    empregados e o Nmero e o Primeironome dosseus respectivos gerentes.

    SELECT E.NUMERO, E.PRIMEIRONOME, G.NUMERO, G.PRIMEIRONOMEFROM EMPREGADO E LEFT JOIN EMPREGADO G

    *Autojuno

  • 7/25/2019 BD-04 SQL Comandos.ppt

    128/200

    Prof. M.Sc. lvaro F Pinheiro

    FROM EMPREGADO E LEFT JOIN EMPREGADO GON E.GERENTE = G.NUMERO;

    *Funes de Grupo

  • 7/25/2019 BD-04 SQL Comandos.ppt

    129/200

    Prof. M.Sc. lvaro F Pinheiro

    Operam um conjunto de linhas, as funes de grupo operam em conjuntos de

    linhas para fornecer um resultado por grupo. Esses conjuntos podem ser atabela inteira ou dividida em grupos.

    Dicas:Funes de grupo so mais conhecidas como funes

    agregadas. AVG, COUNT, MAX, MIN e SUM;

    ALL faz com que a funo considere todos os valores, inclusiveas duplicidades;DISTINCT faz com que a funo considere somente valores no

    duplicados;Todas as funes de grupos ignoram valores nulos, para

    garantir a aplicabilidade para todos os registros use (*).

    *Funes de Grupo

  • 7/25/2019 BD-04 SQL Comandos.ppt

    130/200

    Prof. M.Sc. lvaro F Pinheiro

    Prticas: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.

  • 7/25/2019 BD-04 SQL Comandos.ppt

    131/200

    *Grupo de Dados

  • 7/25/2019 BD-04 SQL Comandos.ppt

    132/200

    Prof. M.Sc. lvaro F Pinheiro

    Usa-se o GROUP BY para dividir as linhas deuma tabela em grupos.

    Prticas: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.

    SELECT D.NOME, AVG(E.SALARIO) AS MEDIASFROM DEPARTAMENTO D INNER JOIN EMPREGADO E

    *Grupo de Dados

  • 7/25/2019 BD-04 SQL Comandos.ppt

    133/200

    Prof. M.Sc. lvaro F Pinheiro

    ON D.NUMERO = E.DEPARTAMENTOGROUP BY D.NOME;

    SELECT C.NOME, SUM(E.SALARIO) AS SOMATORIOFROM CARGO C INNER JOIN EMPREGADO EON C.NUMERO = E.CARGOGROUP BY C.NOME;

    SELECT G.SOBRENOME, COUNT(E.NUMERO) AS QTDEFROM EMPREGADO G INNER JOIN EMPREGADO E

    ON G.NUMERO = E.GERENTEGROUP BY G.SOBRENOME;

    SELECT G.SOBRENOME, MAX(E.SALARIO) AS MAIORSALARIOFROM EMPREGADO G INNER JOIN EMPREGADO EON G.NUMERO = E.GERENTEGROUP BY G.SOBRENOME;

    SELECT G.SOBRENOME, MIN(E.SALARIO) AS MENORSALARIOFROM EMPREGADO G INNER JOIN EMPREGADO EON G.NUMERO = E.GERENTEGROUP BY G.SOBRENOME;

    *Grupo de Dados (Filtros)

  • 7/25/2019 BD-04 SQL Comandos.ppt

    134/200

    Prof. M.Sc. lvaro F Pinheiro

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

    Prticas: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.

    SELECT D.NOME, AVG(E.SALARIO) AS MEDIASFROM DEPARTAMENTO D INNER JOIN EMPREGADO E

    *Grupo de Dados (Filtros)

  • 7/25/2019 BD-04 SQL Comandos.ppt

    135/200

    Prof. M.Sc. lvaro F Pinheiro

    ON D.NUMERO = E.DEPARTAMENTOGROUP BY D.NOMEHAVING AVG(E.SALARIO) >= 2000;

    SELECT D.NOME, SUM(E.SALARIO) AS MEDIASFROM DEPARTAMENTO D INNER JOIN EMPREGADO EON D.NUMERO = E.DEPARTAMENTOGROUP BY D.NOMEHAVING AVG(E.SALARIO) < 1500;

    *Grupo de Dados (ROLLUP)

  • 7/25/2019 BD-04 SQL Comandos.ppt

    136/200

    Prof. M.Sc. lvaro F Pinheiro

    Usa-se o ROLLUP para produzir linhassuperagregadas pela referncia cruzada decolunas. O agrupamento ROLLUP produz umconjunto de resultados que contm as linhasagrupadas normais e os valores de subtotais.

    Prticas:Exibir o somatrio de Salrio agrupado por Departamento e Cargo dos

    empregados com Nmero de Departamento menor que 60, exibindo ossubtotais de Departamento e Cargo.

    --TodosSELECT CAST(DEPARTAMENTO AS CHAR), CAST(CARGO AS CHAR), SUM(SALARIO)

    O G O

    *Grupo de Dados (ROLLUP)

  • 7/25/2019 BD-04 SQL Comandos.ppt

    137/200

    Prof. M.Sc. lvaro F Pinheiro

    FROM EMPREGADOWHERE DEPARTAMENTO < 60GROUP BY DEPARTAMENTO, CARGO

    UNIONSELECT '', 'TOTAL', COALESCE(SUM(SALARIO), 0)FROM EMPREGADO;

    --SQLServer | OracleSELECT DEPARTAMENTO, CARGO, SUM(SALARIO)FROM EMPREGADOWHERE DEPARTAMENTO < 60GROUP BY ROLLUP (DEPARTAMENTO, CARGO);

    --MySQLSELECT DEPARTAMENTO, CARGO, SUM(SALARIO)FROM EMPREGADOWHERE DEPARTAMENTO < 60GROUP BY DEPARTAMENTO, CARGO WITH ROLLUP;

    *Grupo de Dados (CUBE)

  • 7/25/2019 BD-04 SQL Comandos.ppt

    138/200

    Prof. M.Sc. lvaro F Pinheiro

    Usa-se o CUBE para produzir um conjunto de

    resultados que contm as linhas de ROLLUP e aslinhas de tabulao cruzada. Pode-se us-lo paraproduzir valores de tabulao cruzada com umainstruo SELECT simples.

    Prticas:Exibir o somatrio de Salrio agrupado por Departamento e Cargo dos

    empregados com Nmero de Departamento menor que 60, exibindo areferncia cruzada de Departamento e Cargo.

    --SQLServer | OracleSELECT DEPARTAMENTO, CARGO, SUM(SALARIO)FROM EMPREGADO

    *Grupo de Dados (CUBE)

  • 7/25/2019 BD-04 SQL Comandos.ppt

    139/200

    Prof. M.Sc. lvaro F Pinheiro

    FROM EMPREGADOWHERE DEPARTAMENTO < 60GROUP BY CUBE (DEPARTAMENTO, CARGO);

    *Ordenao de Dados

  • 7/25/2019 BD-04 SQL Comandos.ppt

    140/200

    Prof. M.Sc. lvaro F Pinheiro

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

    Prticas:Exibir a mdia de salrios pagos por Departamento em ordemdecrescente;Exibir o somatrio dos salrios pagos por Cargo em ordem

    ascendente.

    SELECT D.NOME, AVG(E.SALARIO) AS MEDIASFROM DEPARTAMENTO D INNER JOIN EMPREGADO EON D NUMERO E DEPARTAMENTO

    *Ordenao de Dados

  • 7/25/2019 BD-04 SQL Comandos.ppt

    141/200

    Prof. M.Sc. lvaro F Pinheiro

    ON D.NUMERO = E.DEPARTAMENTOGROUP BY D.NOMEORDER BY AVG(E.SALARIO) DESC;

    SELECT C.NOME, SUM(E.SALARIO) AS MEDIASFROM CARGO C INNER JOIN EMPREGADO EON C.NUMERO = E.CARGOGROUP BY C.NOMEORDER BY 1 ASC;

    *Grupo de Dados (Aninhamento)

  • 7/25/2019 BD-04 SQL Comandos.ppt

    142/200

    Prof. M.Sc. lvaro F Pinheiro

    As funes de grupo podem ser aninhadas atuma profundidade de dois.

    Prtica:Exibir o salrio mdio mximo pago por Departamento.

    --OracleSELECT MAX(AVG(E.SALARIO)) AS MEDIASFROM EMPREGADO E

    *Grupo de Dados (Aninhamento)

  • 7/25/2019 BD-04 SQL Comandos.ppt

    143/200

    Prof. M.Sc. lvaro F Pinheiro

    FROM EMPREGADO EGROUP BY E.DEPARTAMENTO;

    *Subconsulta

  • 7/25/2019 BD-04 SQL Comandos.ppt

    144/200

    Prof. M.Sc. lvaro F Pinheiro

    Consiste em executar uma consulta (externa) a partir de outra consulta(interna).

    Dicas:Existem operadores que retornam apenas uma linha (=, , >,

    >=,

  • 7/25/2019 BD-04 SQL Comandos.ppt

    145/200

    Prof. M.Sc. lvaro F Pinheiro

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

    *Subconsulta

  • 7/25/2019 BD-04 SQL Comandos.ppt

    146/200

    Prof. M.Sc. lvaro F Pinheiro

    Prtica:

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

    --SQLSeverSELECT PRIMEIRONOME + ' ' + SOBRENOME AS NOME, SALARIO FROM EMPREGADOWHERE SALARIO = (SELECT MIN(SALARIO) FROM EMPREGADO);

    *Subconsulta

  • 7/25/2019 BD-04 SQL Comandos.ppt

    147/200

    Prof. M.Sc. lvaro F Pinheiro

    WHERE SALARIO = (SELECT MIN(SALARIO) FROM EMPREGADO);

    --Postgre | Oracle | Firebird

    SELECT PRIMEIRONOME || ' ' || SOBRENOME AS NOME, SALARIO FROM EMPREGADOWHERE SALARIO = (SELECT MIN(SALARIO) FROM EMPREGADO);

    --MySQLSELECT CONCAT(PRIMEIRONOME, ' ', SOBRENOME) AS NOME, SALARIO FROM EMPREGADOWHERE SALARIO = (SELECT MIN(SALARIO) FROM EMPREGADO);

    *Subconsulta

  • 7/25/2019 BD-04 SQL Comandos.ppt

    148/200

    Prof. M.Sc. lvaro F Pinheiro

    Prtica:

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

    SELECT D.NOME, MIN(E.SALARIO)FROM EMPREGADO EINNER JOIN DEPARTAMENTO D

    *Subconsulta

  • 7/25/2019 BD-04 SQL Comandos.ppt

    149/200

    Prof. M.Sc. lvaro F Pinheiro

    INNER JOIN DEPARTAMENTO DON E.DEPARTAMENTO = D.NUMEROGROUP BY D.NOME

    HAVING MIN(E.SALARIO) >(SELECT MIN(SALARIO) FROM EMPREGADO WHERE DEPARTAMENTO = 50);

    *Subconsulta

  • 7/25/2019 BD-04 SQL Comandos.ppt

    150/200

    Prof. M.Sc. lvaro F Pinheiro

    Prtica:O que h de errado com a instruo abaixo?

    SELECT Numero, Sobrenome

    FROM EmpregadoWHERE Salario = (SELECT MIN(Salario)FROM EmpregadoGROUP BY Departamento);

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

    *Subconsulta

  • 7/25/2019 BD-04 SQL Comandos.ppt

    151/200

    Prof. M.Sc. lvaro F Pinheiro

    *Subconsulta (ANY)

  • 7/25/2019 BD-04 SQL Comandos.ppt

    152/200

    Prof. M.Sc. lvaro F Pinheiro

    Prtica:Exibir Nmero, Sobrenome, Salrio dos empregados

    que possuirem algum salrio menor que o menor salrio dodepartamento de cdigo 50.

    SELECT NUMERO, SOBRENOME, SALARIOFROM EMPREGADOWHERE SALARIO < ANY

    *Subconsulta (ANY)

  • 7/25/2019 BD-04 SQL Comandos.ppt

    153/200

    Prof. M.Sc. lvaro F Pinheiro

    (SELECT MIN(SALARIO) FROM EMPREGADO WHERE DEPARTAMENTO = 50);

    *Subconsulta (ALL)

  • 7/25/2019 BD-04 SQL Comandos.ppt

    154/200

    Prof. M.Sc. lvaro F Pinheiro

    Prtica:Exibir Nmero, Sobrenome, Salrio dos todos os empregados

    que possuirem salrio menor que o menor salrio do departamentode cdigo 50.

    SELECT NUMERO, SOBRENOME, SALARIOFROM EMPREGADOWHERE SALARIO < ALL

    *Subconsulta (ALL)

  • 7/25/2019 BD-04 SQL Comandos.ppt

    155/200

    Prof. M.Sc. lvaro F Pinheiro

    (SELECT MIN(SALARIO) FROM EMPREGADO WHERE DEPARTAMENTO = 50);

    *Subconsulta (Correlacionadas)

  • 7/25/2019 BD-04 SQL Comandos.ppt

    156/200

    Prof. M.Sc. lvaro F Pinheiro

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

    Prtica:

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

    SELECT EXT.SOBRENOME, EXT.SALARIO, EXT.DEPARTAMENTOFROM EMPREGADO EXTWHERE EXT.SALARIO >

    *Subconsulta (Correlacionadas)

  • 7/25/2019 BD-04 SQL Comandos.ppt

    157/200

    Prof. M.Sc. lvaro F Pinheiro

    (SELECT AVG(ITN.SALARIO)FROM EMPREGADO ITN

    WHERE ITN.DEPARTAMENTO = EXT.DEPARTAMENTO);

    *Subconsulta (EXISTS)

  • 7/25/2019 BD-04 SQL Comandos.ppt

    158/200

    Prof. M.Sc. lvaro F Pinheiro

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

    Prtica:Exibir os empregados (Sobrenome, Salrio e Nmero do

    Departamento) com no mnimo uma pessoa subordinada a eles.

    SELECT EXT.SOBRENOME, EXT.SALARIO, EXT.DEPARTAMENTOFROM EMPREGADO EXTWHERE EXISTS

    *Subconsulta (EXISTS)

  • 7/25/2019 BD-04 SQL Comandos.ppt

    159/200

    Prof. M.Sc. lvaro F Pinheiro

    (SELECT 'X'FROM EMPREGADO ITN

    WHERE ITN.GERENTE = EXT.NUMERO);

    *Unio

  • 7/25/2019 BD-04 SQL Comandos.ppt

    160/200

    Prof. M.Sc. lvaro F Pinheiro

    Retorna todas as linhas selecionadas por uma consuta. Use esse operadorpara 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;Os campos devem estar posicionados na mesma ordem;

    A quantidade de campos deve ser a mesma;A clusula ORDER BY deve ser utilizada no final da unio.

    Prtica:Exibir a unio das tabelas Cargo e Departamento para os

    campos Nmero e Nome.

    SELECT NUMERO, NOMEFROM CARGOUNIONSELECT NUMERO NOME

    *Unio

  • 7/25/2019 BD-04 SQL Comandos.ppt

    161/200

    Prof. M.Sc. lvaro F Pinheiro

    SELECT NUMERO, NOMEFROM DEPARTAMENTO;

    *Interseco

  • 7/25/2019 BD-04 SQL Comandos.ppt

    162/200

    Prof. M.Sc. lvaro F Pinheiro

    Serve para retornar todas as linhas comuns a vrias consultas.

    Prtica:

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

    --SQLServer | Postgre | OracleSELECT NUMERO, NOME FROM CARGO INTERSECT SELECT NUMERO, NOME FROMDEPARTAMENTO;

    *Interseco

  • 7/25/2019 BD-04 SQL Comandos.ppt

    163/200

    Prof. M.Sc. lvaro F Pinheiro

    --MySQL

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

    *Subtrao

  • 7/25/2019 BD-04 SQL Comandos.ppt

    164/200

    Prof. M.Sc. lvaro F Pinheiro

    Serve para obter linhas retornadas pela primeira consulta e ausentes nasegunda consulta.

    Prtica:

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

    --SQLServer | OracleSELECT NUMERO, NOME FROM CARGO MINUS SELECT NUMERO, NOME FROM DEPARTAMENTO;

    *Subtrao

  • 7/25/2019 BD-04 SQL Comandos.ppt

    165/200

    Prof. M.Sc. lvaro F Pinheiro

    --PostgreSELECT NUMERO, NOME FROM CARGO EXCEPT SELECT NUMERO, NOME FROM

    DEPARTAMENTO;

    --MySQLSELECT DISTINCT NUMERO, NOME FROM CARGO WHERE (NUMERO, NOME) NOT IN (SELECTNUMERO, NOME FROM DEPARTAMENTO);

    *Macrosubstituio

  • 7/25/2019 BD-04 SQL Comandos.ppt

    166/200

    Prof. M.Sc. lvaro F Pinheiro

    Alguns bancos permitem passagem de parmetros com o uso de variveis desubstituio.

    Dicas:No Oracle a macrosubstituio com (&);No SQLServer a macrosubstituio com (:);

    Prtica:Exibir o Sobrenome do empregado que possuir o Nmero

    informado pelo usurio.

    SELECT SOBRENOMEFROM EMPREGADOWHERE NUMERO = :Informe_Numero;

    *Macrosubstituio

  • 7/25/2019 BD-04 SQL Comandos.ppt

    167/200

    Prof. M.Sc. lvaro F Pinheiro

    *Seleo de Seleo

  • 7/25/2019 BD-04 SQL Comandos.ppt

    168/200

    Prof. M.Sc. lvaro F Pinheiro

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

    Exemplo:Oracle

    SELECT CARGO FROM(SELECT C.NOME AS CARGO, AVG(E.SALARIO) AS MEDIASALARIOFROM CARGO C INNER JOIN EMPREGADO EON C.NUMERO = E.CARGO

    GROUP BY C.NOME);

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

    *Anlise Top-N

  • 7/25/2019 BD-04 SQL Comandos.ppt

    169/200

    Prof. M.Sc. lvaro F Pinheiro

    Alguns BD permitem a seleco das N primeiras linhas que satisfazem auma determinada seleo.

    Prtica:Exibir os 2 primeiros registros de empregados cujos os salrios

    sejam menores que 2000.

    --SQLServerSELECT TOP 2 NUMERO, APELIDO, SALARIO FROM EMPREGADOWHERE SALARIO < 2000;

    *Anlise Top-N

  • 7/25/2019 BD-04 SQL Comandos.ppt

    170/200

    Prof. M.Sc. lvaro F Pinheiro

    --Postgre | MySQL

    SELECT NUMERO, APELIDO, SALARIO FROM EMPREGADOWHERE SALARIO < 2000 LIMIT 2;

    --OracleSELECT NUMERO, APELIDO, SALARIO FROM EMPREGADOWHERE SALARIO < 2000 AND ROWNUM

  • 7/25/2019 BD-04 SQL Comandos.ppt

    171/200

    Prof. M.Sc. lvaro F Pinheiro

    Apagar registros:DELETE FROM nome [WHERE definio] [ORDER BY ...];

    Apagar e recriar tabela:

    TRUNCATE TABLE nome_tabela;Apagar tabela:DROP TABLE nome_tabela;

    Tratamento de dados de forma atmica

    *Transaes

  • 7/25/2019 BD-04 SQL Comandos.ppt

    172/200

    Prof. M.Sc. lvaro F Pinheiro

    Tratamento de dados de forma atmica.

    Dica: Em alguns BD as instrues DDL e DCL so automticas.

    Prticas: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.

    --SQLServerSAVE TRANSACTION A;SELECT * FROM DEPARTAMENTO;DELETE FROM DEPARTAMENTO WHERE NUMERO = 110;

    *Transaes

  • 7/25/2019 BD-04 SQL Comandos.ppt

    173/200

    Prof. M.Sc. lvaro F Pinheiro

    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;

    Serve para apresentar combinaes ou subconjuntos lgicos de dados

    *Viso

  • 7/25/2019 BD-04 SQL Comandos.ppt

    174/200

    Prof. M.Sc. lvaro F Pinheiro

    Serve para apresentar combinaes ou subconjuntos lgicos de dadosatravs de views de tabelas. A view uma tabela lgica baseada em uma

    tabela ou em outra view. Ela no contm dados prprios, mas uma janelapor meio da qual os dados das tabelas podem ser vistos e algumas vezesalterados. As tabelas nas quais uma view se baseia so denominadas detabelas-base. A view armazenada como uma instruo SELECT nodicionrio de dados.

    Dicas: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.

    *Viso

  • 7/25/2019 BD-04 SQL Comandos.ppt

    175/200

    Prof. M.Sc. lvaro F Pinheiro

    View SimplesCria dados a partir de uma tabela apenas;No contm funes e nem grupo de dados;Permite operaes DML.

    View ComplexasCria dados a partir de vrias tabelas;Contm funes ou grupo de dados;Nem sempre permite operaes DML.

    *Viso

  • 7/25/2019 BD-04 SQL Comandos.ppt

    176/200

    Prof. M.Sc. lvaro F Pinheiro

    Sintaxe:

    CREATE VIEW [ schema_name . ] view_name

    [ (column [ ,...n ] ) ]AS select_statement;

    *Viso Simples

  • 7/25/2019 BD-04 SQL Comandos.ppt

    177/200

    Prof. M.Sc. lvaro F Pinheiro

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

    CREATE VIEW VISAO_1 ASSELECT NUMERO, PRIMEIRONOME, SOBRENOME FROM EMPREGADOWHERE DEPARTAMENTO=80;

  • 7/25/2019 BD-04 SQL Comandos.ppt

    178/200

    Prof. M.Sc. lvaro F Pinheiro

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

    SELECT * FROM EMPREGADO;

    *Viso Complexa

  • 7/25/2019 BD-04 SQL Comandos.ppt

    179/200

    Prof. M.Sc. lvaro F Pinheiro

    Prtica: Criar uma viso denominada VISAO_2, que contenha os camposNome (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 tabelaEmpregado.

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

  • 7/25/2019 BD-04 SQL Comandos.ppt

    180/200

    Prof. M.Sc. lvaro F Pinheiro

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

    SELECT * FROM EMPREGADO;

    C i i BD

    *Usurio

  • 7/25/2019 BD-04 SQL Comandos.ppt

    181/200

    Prof. M.Sc. lvaro F Pinheiro

    Criar novos usurios para o BD.

    Sintaxe:SQLServer

    CREATE LOGIN login WITH PASSWORD = senha'; CREATE USER usuario FOR LOGIN [operador] WITH DEFAULT_SCHEMA = [dbo];

    Oracle CREATE USER usuario IDENTIFIED BY senha';

    Prtica: Criar um novo usurio.

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

  • 7/25/2019 BD-04 SQL Comandos.ppt

    182/200

    Prof. M.Sc. lvaro F Pinheiro

    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 criados--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 permitirque--o usurio faa select, insert, delete e update em todas as tabelas do referido banco de dados.

    EXEC SP_ADDROLEMEMBER 'DB_DATAREADER', 'USUARIO'

    *Privilgios

  • 7/25/2019 BD-04 SQL Comandos.ppt

    183/200

    Prof. M.Sc. lvaro F Pinheiro

    Fornecer acesso aos objetos dos BD.

    Sintaxe:GRANT privilgio ON objeto TO usurio;

    Exemplos:GRANT CREATE TABLE, CREATE VIEW TO

    operador1;GRANT SELECT ON EMPREGADO TO operador1;

    *Privilgios

  • 7/25/2019 BD-04 SQL Comandos.ppt

    184/200

    Prof. M.Sc. lvaro F Pinheiro

    Retirar acesso aos objetos dos BD.

    Sintaxe:REVOKE privilgio ON objeto FROM usurio;

    Exemplos:REVOKE CREATE TABLE, CREATE VIEW FROM

    operador1;REVOKE SELECT ON EMPREGADO FROM operador1;

    *Sequencia

  • 7/25/2019 BD-04 SQL Comandos.ppt

    185/200

    Prof. M.Sc. lvaro F Pinheiro

    Alguns bancos como o Postgre e o Oracle possuem um objeto chamado desequencia 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]

    Funes SQLServer

    *Funes

  • 7/25/2019 BD-04 SQL Comandos.ppt

    186/200

    Prof. M.Sc. lvaro F Pinheiro

    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

    Funes SQLServer

    *Funes

  • 7/25/2019 BD-04 SQL Comandos.ppt

    187/200

    Prof. M.Sc. lvaro F Pinheiro

    PATINDEX(posicao, expressao)devolve a posico de uma string dentro de um texto. Se no encontrar, retornazero.

    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

    Funes SQLServer

    *Funes

  • 7/25/2019 BD-04 SQL Comandos.ppt

    188/200

    Prof. M.Sc. lvaro F Pinheiro

    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

    Funes SQLServer

    *Funes

  • 7/25/2019 BD-04 SQL Comandos.ppt

    189/200

    Prof. M.Sc. lvaro F Pinheiro

    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

    Funes SQLServer

    *Funes

  • 7/25/2019 BD-04 SQL Comandos.ppt

    190/200

    Prof. M.Sc. lvaro F Pinheiro

    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

    Funes SQLServer

    *Funes

  • 7/25/2019 BD-04 SQL Comandos.ppt

    191/200

    Prof. M.Sc. lvaro F Pinheiro

    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

    Funes SQLServer

    *Funes

  • 7/25/2019 BD-04 SQL Comandos.ppt

    192/200

    Prof. M.Sc. lvaro F Pinheiro

    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, retornaa primeira expressao.

    OBJECT_ID(nome_do_objeto)retorna o ID de um objeto, a partir do nome fornecido

    Funes SQLServer

    *Funes

  • 7/25/2019 BD-04 SQL Comandos.ppt

    193/200

    Prof. M.Sc. lvaro F Pinheiro

    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.

    Funes SQLServer

    *Funes

  • 7/25/2019 BD-04 SQL Comandos.ppt

    194/200

    Prof. M.Sc. lvaro F Pinheiro

    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 pelasegunda

    Funes SQLServer

    *Funes

  • 7/25/2019 BD-04 SQL Comandos.ppt

    195/200

    Prof. M.Sc. lvaro F Pinheiro

    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

    Funes SQLServer

    *Funes

  • 7/25/2019 BD-04 SQL Comandos.ppt

    196/200

    Prof. M.Sc. lvaro F Pinheiro

    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

    Funes SQLServer

    *Funes

  • 7/25/2019 BD-04 SQL Comandos.ppt

    197/200

    Prof. M.Sc. lvaro F Pinheiro

    RADIANS(numero)converte graus para radianos

    RAND(expressao)um nmero aleatrio entre 0 e 1. Expresso opcional e ser usada comosemente 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

    Funes SQLServer

    *Funes

  • 7/25/2019 BD-04 SQL Comandos.ppt

    198/200

    Prof. M.Sc. lvaro F Pinheiro

    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

    TablesVie s

    *Objetos Postgree

  • 7/25/2019 BD-04 SQL Comandos.ppt

    199/200

    Prof. M.Sc. lvaro F Pinheiro

    ViewsFunctionsDomainsRulesTriggersIndicesSequencesComposite TypesEnum Types

    Base TypesAggregatesOperators

    A grande vantagem dos vnculos de banco de dados que eles permitem aos i d d d b d d d t d d l

    *Vnculos

  • 7/25/2019 BD-04 SQL Comandos.ppt

    200/200

    usurios acessarem dados de um banco de dados remoto de modo que eles

    fiquem conectados por meio do conjunto de privilgios do proprietrio doobjeto. Em outras palavras, um usurio local pode acessar um banco dedados remoto sem necessariamente ser um usurio do banco de dadosremoto.

    Sintaxe:

    Para criao de vnculo:CREATE PUBLIC DATABASE LINK bancoUSING usurio;

    Para acessar dados:SELECT * FROM objeto@banco;