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;
Top Related