Fundamentos de Banco de Dados Relacionais
-
Upload
alvaro-farias-pinheiro -
Category
Technology
-
view
545 -
download
3
description
Transcript of Fundamentos de Banco de Dados Relacionais
![Page 1: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/1.jpg)
BANCO DE DADOS
https://www.facebook.com/alvarofpinheiroaulas/br.linkedin.com/in/alvarofpinheiro/
http://www.alvarofpinheiro.eti.br
![Page 2: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/2.jpg)
Objetivos
●Visão abrangente da Linguagem SQL e suas extensões;●Conhecimento dos conceitos de banco de dados relacionais;●Conhecimento detalhado dos comandos SQL ANSI;●Apresentação de ferramentas para manipulação de SQL;●Conhecimento dos comandos DDL, DML, DCL, DTL e DQL;●Criação de consultas complexas;●Otimização de consultas; e●Utilização de SQL Embutido.
http://www.alvarofpinheiro.eti.br
![Page 3: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/3.jpg)
Referências
●HEUSER, Carlos. Projeto de Banco de Dados. Porto Alegre: Editora Sagra, 1998.
●DATE, C. Introdução a Sistemas de Banco de Dados. São Paulo: EditoraCampos, 2008.
●XAVIER, Fabrício. SQL dos Conceitos às Consultas Complexas. São Paulo: Editora Ciência Moderna, 2009.
●OLIVEIRA, Haley. Postgresql 8 Referencia. The PostgreSQL Global Development Group, 2005.
●OLIVEIRA, Haley. Postgresql 8 Tutorial. The PostgreSQL Global Development Group, 2005.
●MISTRY, Ross. Introducing Microsoft SQL Server 2008 R2. Washington: Microsoft Press, 2010.
●ORACLE. MySQL 5.5 Reference Guide. 2011
http://www.alvarofpinheiro.eti.br
![Page 4: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/4.jpg)
SQL
Definições
●Linguagem de Consulta Estruturada é uma linguagem de pesquisa declarativa para banco de dados relacional baseadas na álgebra relacional.●O SQL surgiu na década de 70 na IBM baseado no modelo relacional de Codd. É o padrão para banco de dados relacionais e é mantido pela American National Standards Institute (ANSI) e International Standards Organization (ISO). Existindo várias versões revisadas do SQL ANSI/ISO, as quais são: 1986, 1987, 1992, 1999 e 2003. E além desses padronizações, existem as extensões inseridas pelos desenvolvedores de banco de dados.
http://www.alvarofpinheiro.eti.br
![Page 5: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/5.jpg)
Características:Pode ser utilizado por uma grande faixa de usuários, mesmo com pouca experiência em programação;É uma linguagem não procedural;Reduz o tempo necessário para a criação e manutençãode sistemas;É uma linguagem similar ao inglês.
SQL
http://www.alvarofpinheiro.eti.br
![Page 6: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/6.jpg)
o Create Tableo Create Indexo Alter Tableo Inserto Updateo Deleteo Selecto Projeçãoo Seleçãoo Junçãoo Consulta Básicao Aliaso Campos Calculadoso Valores Nuloso Duplicidade
Linguagem
http://www.alvarofpinheiro.eti.br
![Page 7: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/7.jpg)
o Condicionamentoo Ordenaçãoo Funçõeso Funções Unica Linhao Funções de Grupoo Funções Caractereo Funções Numéricao Funções Datao Funções Aninhamentoo Funções Conversãoo CASEo Produto Cartesianoo Equijunçãoo Não-equijunçãoo Junção externao Autojunçãoo Aninhamento de Grupo de Dadoso Subconsultas
Linguagem
http://www.alvarofpinheiro.eti.br
![Page 8: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/8.jpg)
o Grupo de Dadoso Grupo de Dados com ROLLUPo Grupo de Dados com CUBEo Subconsultas com ANYo Subconsultas com ALLo Subconsultas Correlataso Subconsultas com EXISTSo Uniãoo Intersecçãoo Subtraçãoo Macrosubstituiçãoo Seleção de Seleçãoo Análise Top-No Transaçõeso Visõeso Visões Simpleso Visões Complexas
Linguagem
http://www.alvarofpinheiro.eti.br
![Page 9: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/9.jpg)
o Data Definition Language (DDL) (Create ..., Drop ..., Alter ...);
o Data Manipulation Language (DML) (Insert ..., Update ..., Delete ...);
o Data Query Language (DQL) (Select ...);
o Data Transaction Language (DTL) (Savepoint ..., Rollback ..., Commit ...);
o Data Control Language (DCL) (Grant ..., Revoke ...);
SQL Categorias
http://www.alvarofpinheiro.eti.br
![Page 10: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/10.jpg)
SQL
Data Definition Language (DDL)
●Comandos para definição de estruturas de dados, também conhecidos como metadados:●CREATE TABLE●CREATE INDEX●CREATE VIEW●DROP TABLE●DROP INDEX●DROP VIEW●ALTER TABLE
http://www.alvarofpinheiro.eti.br
![Page 11: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/11.jpg)
SQL
Data Definition Language (DDL)
●Constraints:●UNIQUE
●PRIMARY KEY
●FOREIGN KEY
●Rules:●RESTRICT
●CASCADE
http://www.alvarofpinheiro.eti.br
![Page 12: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/12.jpg)
SQL
Data Manipulation Language (DML)
●Comandos usados para manutenção dos dados:●INSERT
●UPDATE
●DELETE
http://www.alvarofpinheiro.eti.br
![Page 13: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/13.jpg)
SQL
Data Query Language (DQL)
●Comando para consultas de dados:●SELECT
http://www.alvarofpinheiro.eti.br
![Page 14: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/14.jpg)
SQL
Data Transaction Language (DTL)
●Comandos para controle de transações:●BEGIN TRANSACTION | START TRANSACTION
●COMMIT
●ROLLBACK
http://www.alvarofpinheiro.eti.br
![Page 15: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/15.jpg)
SQL
Data Control Language (DCL)
●Comando para autorização de acesso aos dados:●GRANT
●REVOKE
http://www.alvarofpinheiro.eti.br
![Page 16: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/16.jpg)
SQL
Argumento do SELECT
●SELECT
●FROM
●IN
●JOIN
●WHERE
●GROUP BY
●HAVING
●ORDER BY
http://www.alvarofpinheiro.eti.br
![Page 17: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/17.jpg)
SQL
Operadores Lógicos
AND
OR
NOT
http://www.alvarofpinheiro.eti.br
![Page 18: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/18.jpg)
SQL
Operadores de Comparação
< <= > >= = !=
IS NULL
LIKE
IN
BETWEEN
EXISTS
http://www.alvarofpinheiro.eti.br
![Page 19: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/19.jpg)
SQL
Funções Agregadas
●COUNT()
●SUM()
●AVG()
●MAX()
●MIN()
http://www.alvarofpinheiro.eti.br
![Page 20: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/20.jpg)
SQL
Predicados
ALL
TOP
DISTINCT
http://www.alvarofpinheiro.eti.br
![Page 21: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/21.jpg)
SQL
Subqueries
●EXISTS
●Seleção da Seleção
●SubConsulta
http://www.alvarofpinheiro.eti.br
![Page 22: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/22.jpg)
●SQLServero Usuário: sa; Senha: senha definida.
●Postgre Usuário: root; Senha: sem senha.
●Oracleo Usuário: SYSTEM; Senha: manager.
●MySQL Usuário: root; Senha: sem senha.
●Firebird Usuário: sysdba; Senha: masterkey.
BD Acesso
http://www.alvarofpinheiro.eti.br
![Page 23: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/23.jpg)
TINYINT: Armazena valores numéricos inteiros.SMALLINT: Armazena valores numéricos inteiros.INT: Armazena valores numéricos inteiros.BIGINT: Armazena valores numéricos inteiros.NUMERIC(18,0): Armazena valores numéricos com casas decimais, utilizando precisão.DECIMAL(18,0): Tem as mesmas funcionalidades do tipo NUMERIC.FLOAT: Armazena valores numéricos aproximados com precisão de ponto flutuante.REAL: Armazena valores numéricos aproximados com precisão de ponto flutuante.BIT: Armazena bits ou seja somente poderá conter os valores lógicos 0 ou 1.SMALLDATETIME: Armazena data e hora, com precisão de minutos.DATETIME: Armazena data e hora, com precisão de centésimos de segundos.TIME: Armazena somente hora. Pode armazenar segundos até a fração de 9999999DATE: Armazena somente data.CHAR(N): Armazena N caracteres fixos (até 8.000) no formato não Unicode, com espaços em branco.VARCHAR(N): Armazena N caracteres (até 8.000) no formato não UnicodeTEXT: Armazena caracteres no formato não Unicode.NCHAR(N): Armazena N caracteres fixos (até 4.000) no formato Unicode, com espaços em branco.NVARCHAR(N): Armazena N caracteres (até 4.000) no formato Unicode.NTEXT: Armazena caracteres no formato Unicode.IMAGE: Armazena dados no formato binário.
BD SQLServer (Principais Tipos de Dados)
http://www.alvarofpinheiro.eti.br
![Page 24: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/24.jpg)
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 variável.Bool: booleano lógico (verdade/falso).bytea: dados binários.varchar(n): cadeia de caracteres de comprimento variável.char(n): cadeia de caracteres de comprimento fixo.date: data de calendário (ano, mês,dia).float8: número de ponto flutuante de precisão dupla.Int: inteiro de quatro bytes com sinal.numeric[(p, s)]: numérico exato com precisão selecionável.decimal [(p, s)] : numérico exato com precisão selecionável.real: número de ponto flutuante de precisão simples.smallint: inteiro de dois bytes com sinal.text: cadeia de caracteres de comprimento variável.time: hora do dia.timestamp: data e hora.
http://www.alvarofpinheiro.eti.br
![Page 25: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/25.jpg)
BD Oracle (Principais Tipos de Dados)VARCHAR2(n): Conjunto de caracteres de tamanho variável.NUMBER(p, e): Representa um número.LONG: Conjunto de caracteres de tamanho variável.DATE: Um valor de data.LONG RAW: Dados binários..CHAR(n): Conjunto de caracteres de tamanho fixo.BLOB, CLOB, NCLOB e BFILE: Tipos de dados para conteúdos binários..
http://www.alvarofpinheiro.eti.br
![Page 26: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/26.jpg)
BD MySQL (Principais Tipos de Dados)BOOL: Booleano.SMALLINT: inteiros pequenos.INT: inteiros regulares.INTEGER: o mesmo que INT.BIGINT: inteiros grandes.FLOAT(precisão): números de ponto flutuante de precisão simples ou dupla.DOUBLE: números de ponto flutuante de precisão dupla.DECIMAL[(M,D)]: número 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): variável string de tamanho variável.TINYBLOB: BLOB pequeno.TINYTEXT: TEXT pequeno.BLOB: BLOB normal.TEXT: TEXT normal.LONGBLOB: BLOB longo.LONGTEXT: TEXT longo.
http://www.alvarofpinheiro.eti.br
![Page 27: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/27.jpg)
CREATE TABLE nome_tabela [(definição_create,...)] [table_options] [select_statement]definição_create:
nome_coluna tipo [NOT NULL | NULL] [DEFAULT valor_padrão][[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,...)
definição_referência:REFERENCES nome_tabela [(index_nome_coluna,...)]
[ON DELETE opção_referência][ON UPDATE opção_referência]
opção_referência:RESTRICT | CASCADE | SET NULL | SET DEFAULT
Criar Tabelas
http://www.alvarofpinheiro.eti.br
![Page 28: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/28.jpg)
●Dica:
o É possível criar uma tabela a partir de uma subconsulta. ● CREATE TABLE tabela [coluna, ...] AS subconsulta;
Criar Tabelas
http://www.alvarofpinheiro.eti.br
![Page 29: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/29.jpg)
●Tmp:o Número (PK).
●Cargo:o Número (PK), número inteiro, auto-incremento;o Nome, literal variável(30), não nulo.
●Departamento:o Número (PK), número inteiro;o Nome, literal variável(30), não nulo;o Fator, número real.
●Empregado:o Número (PK), numérico;o Nome, literal variável (50), não nulo;o Departamento, (FK) numérico,
atualização cascata, exclusão restrita.
Criar Tabelas
http://www.alvarofpinheiro.eti.br
![Page 30: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/30.jpg)
--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 (Autonumeração)
http://www.alvarofpinheiro.eti.br
![Page 31: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/31.jpg)
--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 CARGOACTIVE BEFORE INSERT POSITION 0ASBEGINNEW.NUMERO = GEN_ID(CARGOGEN, 1);END;
Criar Tabelas (Autonumeração)
http://www.alvarofpinheiro.eti.br
![Page 32: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/32.jpg)
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
http://www.alvarofpinheiro.eti.br
![Page 33: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/33.jpg)
--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 UPDATE CASCADE);
--OracleCREATE TABLE EMPREGADO (NUMERO INTEGER,NOME VARCHAR(50) NOT NULL,DEPARTAMENTO INTEGER,PRIMARY KEY (NUMERO),FOREIGN KEY (DEPARTAMENTO) REFERENCES DEPARTAMENTO (NUMERO));
Criar Tabelas
http://www.alvarofpinheiro.eti.br
![Page 34: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/34.jpg)
INSERT [INTO] nome_tabela [(nome_coluna,...)]VALUES ((expressão | DEFAULT),...),(...),...| [INTO] nome_tabela [(nome_coluna,...)]SELECT ...
Inserir Linhas
http://www.alvarofpinheiro.eti.br
![Page 35: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/35.jpg)
●Dicas:o Pode-se inserir linha a linha;o Pode-se dependendo do BD inserir uma lista;o Pode-se inserir linhas de uma tabela emoutra;
Não se usa a cláusula VALUE e sim SELECT.
Inserir Linhas
http://www.alvarofpinheiro.eti.br
![Page 36: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/36.jpg)
●Cargo:o Número, Nome;o 1, Analista Trainee;o 2, Analista Junior;o 3, Analista Pleno;o 4, Analista Sênior;o 5, Analista Master.
Inserir Registros
http://www.alvarofpinheiro.eti.br
![Page 37: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/37.jpg)
--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 SÊNIOR');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 SÊNIOR');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 SÊNIOR');INSERT INTO CARGO (NUMERO, NOME) VALUES (CARGOSEQ.NextVal, 'ANALISTA MASTER');INSERT INTO CARGO (NUMERO, NOME) VALUES (CARGOSEQ.NextVal, 'CONSULTOR');
Inserir Linhas
http://www.alvarofpinheiro.eti.br
![Page 38: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/38.jpg)
●Departamento:o Número, Nome, Fator;o 10, Administração (Admin), 1.75;o 20, Marketing (Mkt), 1.85;o 50, Compras (Com), 2. 73;o 60, Tecnologia (Tec), 1.55;o 80, Vendas (Ven), 1.87;o 90, Executivo (Exec), 1.92;o 110, Contabilidade (Contab), 2.35;o 190, Contratos (Ctt), 2.23.
Inserir Linhas
http://www.alvarofpinheiro.eti.br
![Page 39: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/39.jpg)
INSERT INTO DEPARTAMENTO (NUMERO, NOME, FATOR) VALUES (10, 'ADMINISTRAÇÃO (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
http://www.alvarofpinheiro.eti.br
![Page 40: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/40.jpg)
●Empregados:o Número, Nome, Departamento;o 100, Antônio Palmeira, 10;o 101, José Figueira, 20;o 102, Maria Mangueira, 10;o 103, João Abacateiro, 50;o 104, Carlos Castanheiro, 60;o 107, Mônica Videira, 90;o 124, Pedro Laranjeira, 80;o 141, Tiago Pessegueiro, 110;o 142, Renata Videira, 80;o 143, Gabriel Macieira, 110;
Inserir Linhas
http://www.alvarofpinheiro.eti.br
![Page 41: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/41.jpg)
INSERT INTO EMPREGADO VALUES (100, 'ANTÔNIO PALMEIRA', 10);INSERT INTO EMPREGADO VALUES (101, 'JOSÉ FIGUEIRA', 20);INSERT INTO EMPREGADO VALUES (102, 'MARIA MANGUEIRA', 10);INSERT INTO EMPREGADO VALUES (103, 'JOÃO ABACATEIRO', 50);INSERT INTO EMPREGADO VALUES (104, 'CARLOS CASTANHEIRO', 60);INSERT INTO EMPREGADO VALUES (107, 'MÔNICA 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
http://www.alvarofpinheiro.eti.br
![Page 42: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/42.jpg)
ALTER TABLE nome_tbl especificação_alter [, especificação_alter ...]especificação_alter:
ADD [COLUMN] definição_create [FIRST | AFTER nome_coluna ]| ADD [COLUMN] (definição_create, definição_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,...)
[definição_referncia]| ALTER [COLUMN] nome_col {SET DEFAULT literal | DROP DEFAULT}| CHANGE [COLUMN] nome_col_antigo definição_create
[FIRST | AFTER nome_coluna]| MODIFY [COLUMN] definição_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
http://www.alvarofpinheiro.eti.br
![Page 43: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/43.jpg)
●Empregados:Número (PK), número inteiro;
Nome, literal variável (50), não nulo; excluir;Primeironome, literal variável (25), não nulo;
Sobrenome, literal variável (25) não nulo;Departamento, (FK) número inteiro;Cargo, (FK) número inteiro, atualização cascata;Salário, número real;Comissão, número inteiro;Nascimento, data;Apelido, literal fixo(10), não nulo;Gerente, número inteiro.
Alterar Tabelas
http://www.alvarofpinheiro.eti.br
![Page 44: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/44.jpg)
--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
http://www.alvarofpinheiro.eti.br
![Page 45: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/45.jpg)
--OracleALTER TABLE EMPREGADOADD (PRIMEIRONOME VARCHAR(25),SOBRENOME VARCHAR(25),CARGO INTEGER,SALARIO REAL,COMISSAO INTEGER,NASCIMENTO DATE,APELIDO VARCHAR(10),GERENTE INTEGER);
Alterar Tabelas
http://www.alvarofpinheiro.eti.br
![Page 46: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/46.jpg)
--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);
--OracleALTER TABLE EMPREGADOADD FOREIGN KEY (CARGO) REFERENCES CARGO;ALTER TABLE EMPREGADOADD FOREIGN KEY (GERENTE) REFERENCES EMPREGADO;
Alterar Tabelas
http://www.alvarofpinheiro.eti.br
![Page 47: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/47.jpg)
UPDATE nome_tabelaSET nome_coluna1=expr1 [, nome_coluna2=expr2 ...][WHERE definição][ORDER BY ...]
Alterar Linhas
http://www.alvarofpinheiro.eti.br
![Page 48: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/48.jpg)
●Pode-se alterar linha;●Pode-se alterar listas;●Pode-se alterar subconsultas;●Pode-se alterar linhas com base em outratabela.
Alterar Linhas
http://www.alvarofpinheiro.eti.br
![Page 49: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/49.jpg)
●SQLServer | Postgre | MySQL | Firebird● SUBSTRING(string texto, posicao_inicial, tamanho) - retorna uma string com o comprimento definido em"tamanho" extraida da string "texto", a partir da"posicao_inicial“;
● Oracle: SUBSTR
●SQLServer● CHARINDEX( string pesquisado, campo, posicao_inicial) – retorna a posição do string pesquisado dentro do campo informado.
● Postgre: STRPOS● Oracle | MySQL: INSTR● Firebird: POSITION
Funções
http://www.alvarofpinheiro.eti.br
![Page 50: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/50.jpg)
●Fazendo uso das funções substring e charindex separaro conteúdo do campo Nome nos campos Primeironomee Sobrenome. Depois apagar o campo Nome ficando:
o Número, Primeironome, Sobrenome, Departamento;o 100, Antônio, Palmeira, 10;o 101, José, Figueira, 20;o 102, Maria, Mangueira, 10;o 103, João, Abacateiro, 50;o 104, Carlos, Castanheiro, 60;o 107, Mônica, Videira, 90;o 124, Pedro, Laranjeira, 80;o 141, Tiago, Pessegueiro, 80;o 142, Renata, Videira, 80;o 143, Gabriel, Macieira, 110;
Alterar Linhas
http://www.alvarofpinheiro.eti.br
![Page 51: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/51.jpg)
--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
http://www.alvarofpinheiro.eti.br
![Page 52: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/52.jpg)
--SQLServer | Postgre | Oracle | MySQLALTER TABLE EMPREGADODROP COLUMN NOME;
--FirebirdALTER TABLE EMPREGADODROP NOME;
Alterar Tabela
http://www.alvarofpinheiro.eti.br
![Page 53: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/53.jpg)
●Atualizar as linhas de Empregado com os valores:
o Número, Primeironome, Sobrenome, Cargo, Departamento, Gerente, Salário, Comissão, Nascimento, Apelido;o 100, Antônio, Palmeira, 1, 10, nulo, 1000, nulo, 01/07/80, Tonho;o 101, José, Figueira, 1, 20, 100, 1500, nulo, 18/05/70, Zé;o 102, Maria, Mangueira, 2, 10, 100, 2000, 3, 22/07/80, Ma;o 103, João, Abacateiro, 3, 50, 100, 1500, 2, 03/03/71, Jo;o 104, Carlos, Castanheiro, nulo, 60, 100, 2500, 3, 01/01/65, Ca;o 107, Mônica, Videira, 1, 90, nulo, 1000, 2, 15/02/60, Mo;o 124, Pedro, Laranjeira, 2, 80, 107, 1100, nulo, 30/07/83, Pedroca;o 141, Tiago, Pessegueiro, 3, 80, 107, 2000, 2, 21/06/78, Ti;o 142, Renata, Videira, 4, 80, 107, 1500, nulo, 02/12/72, Rê;o 143, Gabriel, Macieira, nulo, 110, 107, 2000, 2, 11/11/81, Biel;
Alterar Linhas
http://www.alvarofpinheiro.eti.br
![Page 54: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/54.jpg)
--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 ANSI AAAA/MM/DD
http://www.alvarofpinheiro.eti.br
![Page 55: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/55.jpg)
--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
http://www.alvarofpinheiro.eti.br
![Page 56: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/56.jpg)
--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
http://www.alvarofpinheiro.eti.br
![Page 57: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/57.jpg)
CREATE [UNIQUE] INDEX nome_indiceON nome_tabela (index_col_name,...)
index_col_name:col_name [(length)] [ASC | DESC]
Criar Índices
http://www.alvarofpinheiro.eti.br
![Page 58: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/58.jpg)
●Criar índices por:o Primeironome e Sobrenome;o Salário;o Comissão;o Cargo;o Departamento;o Apelido (Único).
Criar Índices
http://www.alvarofpinheiro.eti.br
![Page 59: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/59.jpg)
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
http://www.alvarofpinheiro.eti.br
![Page 60: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/60.jpg)
●Prática: Visualizar a estrutura das tabelasEmpregados e Departamentos.
Dicionário de Dados
http://www.alvarofpinheiro.eti.br
![Page 61: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/61.jpg)
--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;
Dicionário de Dados
http://www.alvarofpinheiro.eti.br
![Page 62: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/62.jpg)
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
http://www.alvarofpinheiro.eti.br
![Page 63: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/63.jpg)
●Prática: Visualizar os campos: Número e
Nome (Primeironome || ‘ ‘ || Sobrenome).
●Dicas:o Operador de concatenação (||);o Em alguns BD se usa (+) para concatenação;o Concatena colunas ou strings de caracteres a outras colunas.
Projeção
http://www.alvarofpinheiro.eti.br
![Page 64: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/64.jpg)
--SQLServerSELECT NUMERO, PRIMEIRONOME + ' ' + SOBRENOME AS NOME FROM EMPREGADO;
--Postgre | Oracle | FirebirdSELECT NUMERO, PRIMEIRONOME || ' ' || SOBRENOME AS NOME FROM EMPREGADO;
--MySQLSELECT NUMERO, CONCAT(PRIMEIRONOME, ' ', SOBRENOME) AS NOME FROM EMPREGADO;
Projeção
http://www.alvarofpinheiro.eti.br
![Page 65: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/65.jpg)
●Prática: Visualizar os registros dos empregados do departamento 20 ou 80 dos campos: Número; Primeironome; Sobrenome; e
Departamento.
Seleção
http://www.alvarofpinheiro.eti.br
![Page 66: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/66.jpg)
SELECT NUMERO, PRIMEIRONOME, SOBRENOME, DEPARTAMENTOFROM EMPREGADOWHERE DEPARTAMENTO = 20 OR DEPARTAMENTO = 80;
Seleção
http://www.alvarofpinheiro.eti.br
![Page 67: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/67.jpg)
●Prática: Visualizar os registros dos empregados juntamente com o nome do departamento: Número (Empregados);
Primeironome (Empregados); Sobrenome(Empregados); Departamento (Empregados); e Nome (Departamentos).
Junção
http://www.alvarofpinheiro.eti.br
![Page 68: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/68.jpg)
SELECT E.NUMERO, E.PRIMEIRONOME, E.SOBRENOME, E.DEPARTAMENTO,D.NOMEFROM EMPREGADO E INNER JOIN DEPARTAMENTO DON E.DEPARTAMENTO = D.NUMERO;
Junção
http://www.alvarofpinheiro.eti.br
![Page 69: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/69.jpg)
●Prática: Visualizar todos os registros e todos oscampos da tabela departamentos.
●Dicas:o As instruções SQL não fazem distinção entre maiúsculas e minúsculas;o As instruções SQL podem estar em uma ou mais linhas;o As palavras-chave não podem ser abreviadas ou quebradas;o Normalmente as cláusulas são colocadas em linhas separadas;o Os recuos são utilizados para dar mais legibilidade.
Consulta Básica
http://www.alvarofpinheiro.eti.br
![Page 70: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/70.jpg)
SELECT FROM DEPARTAMENTO;
Consulta Básica
http://www.alvarofpinheiro.eti.br
![Page 71: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/71.jpg)
●Prática: Visualizar todos os registros noscampos Número, Nome (Primeironome + ‘ ‘ + Sobrenome) e após a consulta ser realizada observar o nome do campo para a expressão Nome. Finalize repetindo a consulta colocando o apelido Nome do Funcionário.
Apelido
http://www.alvarofpinheiro.eti.br
![Page 72: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/72.jpg)
--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 FROM EMPREGADO;
--MySQLSELECT NUMERO, CONCAT(PRIMEIRONOME, ' ', SOBRENOME) FROM EMPREGADO;SELECT NUMERO, CONCAT(PRIMEIRONOME, ' ', SOBRENOME) AS NOME FROM EMPREGADO;
Apelido
http://www.alvarofpinheiro.eti.br
![Page 73: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/73.jpg)
●Prática: Visualizar o Sobrenome, o salário, e o líquidodos empregados, considerando que todos possuem um desconto de 10% de INSS.
●Dicas:o Operadores aritméticos:
Adicionar:+ Subtrair: - Multiplicar: Dividir: / “retorna o quociente”
o Funções matemáticas:
Potenciação: POWER(número, potência) Radiciação: SQRT(número) Divisão: % | MOD “retorna o resto”
Campos Calculados
http://www.alvarofpinheiro.eti.br
![Page 74: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/74.jpg)
●Dicas:o Precedência de Operadores:
A multiplicação e a divisão têm prioridade sobre a adição e subtração; Os operadores com a mesma prioridade são avaliados da esquerdapara a direita; Os parênteses são usados para forçar a avaliação priorizada e paraesclarecer as instruções.
Campos Calculados
http://www.alvarofpinheiro.eti.br
![Page 75: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/75.jpg)
SELECT SOBRENOME, SALARIO, SALARIO - (SALARIO0.10) AS LIQUIDOFROM EMPREGADO;
http://www.alvarofpinheiro.eti.br
Campos Calculados
![Page 76: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/76.jpg)
●Prática: Visualizar o Sobrenome e o SalárioBruto (Salário + Comissão). Obs: A Comissãorepresenta um percentual aplicado sobre o salário.
●Dicas:o Nulo é uma valor que não está disponível;o Nulo é um valor desconhecido;o Nulo não é a mesma coisa que zero;o Nulo não é a mesma coisa que espaço embranco.
Valores Nulos
http://www.alvarofpinheiro.eti.br
![Page 77: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/77.jpg)
SELECT SOBRENOME, SALARIO + (SALARIO COMISSAO / 100) AS BRUTOFROM EMPREGADO;
Valores Nulos
http://www.alvarofpinheiro.eti.br
![Page 78: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/78.jpg)
●Prática: Visualizar o Sobrenome e o SalárioBruto (Salário + Comissão). Obs: Quando a Comissão for nula deve-se substituir por zero.
●Dicas:o Para Oracle usar NVL(campo, valor)o Para MySQL usar IFNULL(campo, valor)o Para SQLServer usar ISNULL(campo, valor)o Para Postgre | Firebird usar COALESCE(campo,0)
Valores Nulos
http://www.alvarofpinheiro.eti.br
![Page 79: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/79.jpg)
--SQLServerSELECT SOBRENOME, SALARIO + (SALARIO ISNULL(COMISSAO,0) / 100) AS BRUTO FROM EMPREGADO;
--Postgre | FirebirdSELECT SOBRENOME, SALARIO + (SALARIO COALESCE(COMISSAO,0) / 100) AS BRUTO FROM EMPREGADO;
--OracleSELECT SOBRENOME, SALARIO + (SALARIO NVL(COMISSAO,0) / 100) AS BRUTO FROM EMPREGADO;
--MySQLSELECT SOBRENOME, SALARIO + (SALARIO IFNULL(COMISSAO,0) / 100) AS BRUTO FROM EMPREGADO;
Valores Nulos
http://www.alvarofpinheiro.eti.br
![Page 80: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/80.jpg)
●Prática: Visualizar o Sobrenome dos Empregados.
●Dica:o A exibição default das consultas é de todasas linhas, incluindo linhas duplicadas.
●Prática: Visualizar o Sobrenome dos Empregados sem duplicidade.
Duplicidade
http://www.alvarofpinheiro.eti.br
![Page 81: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/81.jpg)
SELECT SOBRENOME FROM EMPREGADO;
SELECT DISTINCT SOBRENOME FROM EMPREGADO;
Duplicidade
http://www.alvarofpinheiro.eti.br
![Page 82: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/82.jpg)
●Prática: Visualizar o Número e Sobrenome de todosos empregados do departamento 90.
●Dicas:o Seleções são realizadas pela cláusula WHERE;o Operadores de Comparação:
Igual a: = Maior que: > Maior que ou igual a: >= Menor que: < Menor que ou igual a: <= Diferente de: <>
Condicionamento
http://www.alvarofpinheiro.eti.br
![Page 83: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/83.jpg)
SELECT NUMERO, SOBRENOMEFROM EMPREGADOWHERE DEPARTAMENTO = 90;
Condicionamento
http://www.alvarofpinheiro.eti.br
![Page 84: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/84.jpg)
●Prática: Visualizar o Número, Sobrenome e Nascimento de todos os empregados quenasceram em 22/07/80.
●Dicas:o As strings de caracteres e valores de data aparecem entre aspas simples;o Os valores de caractere fazem distinção entre maiúsculas e minúsculas;o Os valores de data fazem distinção entre formatos;o O formato de data default é DD-MON-YY.
Condicionamento
http://www.alvarofpinheiro.eti.br
![Page 85: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/85.jpg)
--SQLServer | postgre | OracleSELECT NUMERO, SOBRENOME, NASCIMENTO FROM EMPREGADO WHERE NASCIMENTO = '22/07/80';
--MySQLSELECT NUMERO, SOBRENOME, NASCIMENTO FROM EMPREGADO WHERE NASCIMENTO = '80/07/22';
--FirebirdSELECT NUMERO, SOBRENOME, NASCIMENTO FROM EMPREGADO WHERE NASCIMENTO = '07/22/80';
Condicionamento
http://www.alvarofpinheiro.eti.br
![Page 86: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/86.jpg)
●Prática: Visualizar o Número, Sobrenome e Nascimento de todos os empregados quenasceram entre (inclusive) 01/01/70 e 31/12/80.
●Dicas:o Outros Operadores de Comparação:
Intervalo fechado: BETWEEN Está contido: IN Contém: LIKE
Para representar qualquer caractere: % Para representar caractere da posição: _
É nulo: IS NULL
Condicionamento
http://www.alvarofpinheiro.eti.br
![Page 87: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/87.jpg)
--SQLServer | postgre | OracleSELECT NUMERO, SOBRENOME, NASCIMENTO FROM EMPREGADO WHERE NASCIMENTOBETWEEN '01/01/70' AND '31/12/80';
--MySQLSELECT NUMERO, SOBRENOME, NASCIMENTO FROM EMPREGADO WHERE NASCIMENTOBETWEEN '70/01/01' AND '80/12/31';
--FirebirdSELECT NUMERO, SOBRENOME, NASCIMENTO FROM EMPREGADO WHERE NASCIMENTOBETWEEN '01/01/70' AND '12/31/80';
Condicionamento
http://www.alvarofpinheiro.eti.br
![Page 88: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/88.jpg)
●Prática: Visualizar o Número, Sobrenome e Departamento de todos os empregados quepertencem aos departamentos: 10, 20, 50, 60, 80 ou90.
●Dicas:o Outros Operadores de Comparação:
Intervalo fechado: BETWEEN Pertence: IN Contém: LIKE
Para representar qualquer caractere: % Para representar caractere da posição: _
É nulo: IS NULL
Condicionamento
http://www.alvarofpinheiro.eti.br
![Page 89: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/89.jpg)
SELECT NUMERO, SOBRENOME, DEPARTAMENTOFROM EMPREGADOWHERE DEPARTAMENTO IN (10, 20, 50, 60, 80, 90);
Condicionamento
http://www.alvarofpinheiro.eti.br
![Page 90: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/90.jpg)
●Prática: Visualizar o Número e Sobrenome de todos os empregados que possuem ‘eira’ no sobrenome.
●Dicas:o Outros Operadores de Comparação:
Intervalo fechado: BETWEEN Pertence: IN Contém: LIKE
Para representar qualquer caractere: % Para representar caractere da posição: _
É nulo: IS NULL
Condicionamento
http://www.alvarofpinheiro.eti.br
![Page 91: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/91.jpg)
SELECT NUMERO, SOBRENOMEFROM EMPREGADOWHERE SOBRENOME LIKE ‘%EIRA%’;
Condicionamento
http://www.alvarofpinheiro.eti.br
![Page 92: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/92.jpg)
●Prática: Visualizar o Número e Sobrenome de todos os empregados que não possuemcomissão.
●Dicas:o Outros Operadores de Comparação:
Intervalo fechado: BETWEEN Pertence: IN Contém: LIKE
Para representar qualquer caractere: % Para representar caractere da posição: _
É nulo: IS NULL
Condicionamento
http://www.alvarofpinheiro.eti.br
![Page 93: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/93.jpg)
SELECT NUMERO, SOBRENOMEFROM EMPREGADOWHERE COMISSAO IS NULL;
Condicionamento
http://www.alvarofpinheiro.eti.br
![Page 94: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/94.jpg)
●Prática: Visualizar o Número, Sobrenome e Salário de todos os empregados quepossuem salário entre (inclusive) 1500 e 2000, dos departamentos 20, 50 e 80.
●Dicas:o Operadores Lógicos:
Verdadeiro para ambas expressões verdadeiras: AND Verdadeiro bastando uma das expressões verdadeiras: OR Inverso da expressão: NOT
Condicionamento
http://www.alvarofpinheiro.eti.br
![Page 95: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/95.jpg)
SELECT NUMERO, SOBRENOME, SALARIO, DEPARTAMENTOFROM EMPREGADOWHERE SALARIO BETWEEN 1500 AND 2000AND DEPARTAMENTO IN (20, 50, 80);
Condicionamento
http://www.alvarofpinheiro.eti.br
![Page 96: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/96.jpg)
●1 – Operadores Aritméticos;●2 – Operador de Concatenação;●3 – Condições de Comparação;●4 – IS [NOT] NULL, [NOT] LIKE, [NOT] IN;●5 – [NOT] BETWEEN;●6 – Condição lógica NOT;●7 – Condição lógica AND;●8 – Condição lógica OR.
Regras de Precedência
http://www.alvarofpinheiro.eti.br
![Page 97: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/97.jpg)
●Prática: Visualizar o Sobrenome e o Saláriodos Empregados ordenados por Salário emordem decrescente.
●Dicas:o Sintaxe da ordenação: [ORDER BY {coluna, expr} [ASC|DESC]];o É possível utilizar o alias na cláusula de ordenação;o É possível utilizar a posição da coluna na ordenação;o Pode-se classificar por colunas que não estejam no select;o Pode-se classificar por N colunas
Ordenação
http://www.alvarofpinheiro.eti.br
![Page 98: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/98.jpg)
SELECT SOBRENOME, SALARIOFROM EMPREGADOORDER BY SALARIO DESC;
Ordenação
http://www.alvarofpinheiro.eti.br
![Page 99: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/99.jpg)
●Funções são recursos avançados do SQL e podem ser utilizadas para efetuar o seguinte:
o Executar cálculos;o Modificar itens de dados individuais;o Manipular a saída para grupos de linhas;o Formatar datas e números para exibição;o Converter tipos de dados de coluna.
●Dicas:o Algumas funções utilizam argumentos;o Sempre retornam um valor.
Funções
http://www.alvarofpinheiro.eti.br
![Page 100: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/100.jpg)
●Funções de uma Única Linhao Operam somente linhas únicas e retornamum resultado por linha.
●Funções de Várias Linhaso Podem manipular grupos de linhas parafornecer um resultado e são mais conhecidascomo funções de grupo.
Funções (Tipos)
http://www.alvarofpinheiro.eti.br
![Page 101: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/101.jpg)
●Servem para manipular itens de dados;●Aceitam um ou mais argumentos;●Retornam um valor para cada linharetornada;
●São do tipo:o Caractere, Numéricas, Data, Conversão e Gerais;
●Podem ser usadas em cláusulas:o SELECT, WHERE e ORDER BY.
Funções (Única Linha)
http://www.alvarofpinheiro.eti.br
![Page 102: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/102.jpg)
●LOWER – converte para minúsculas;●UPPER – converte para maiúsculas;●SUBSTRING – retorna o substring de uma string;●LENGTH – retorna o número de caracteres;●CHARINDEX – retorna a posição de um string;●REPLACE - substitui uma string por outra string;●RTRIM | LTRIM | TRIM – retira brancos.
Funções (Caractere)
http://www.alvarofpinheiro.eti.br
![Page 103: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/103.jpg)
●Práticas:o Exibir todos os Primeironomes em minúsculas;o Exibir todos os Sobrenomes em maiúsculas;o Exibir os 3 primeiros caracteres do Sobrenome;o Exibir o tamanho do Sobrenome;o Exibir a posição no ‘(‘ no nome do departamento;o Trocar no nome de departamento: Admin para Adm;
Exec para Exe; e Contab para Con.
Funções (Caractere)
http://www.alvarofpinheiro.eti.br
![Page 104: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/104.jpg)
--Exibir todos os Primeironomes em minúsculasSELECT LOWER(PRIMEIRONOME) AS PRIMEIRONOME FROM EMPREGADO;
--Exibir todos os Sobrenomes em maiúsculasSELECT UPPER(SOBRENOME) AS PRIMEIRONOME FROM EMPREGADO;
--Exibir os 3 primeiros caracteres do Sobrenome
--SQLServer | Postgre | MySQLSELECT SUBSTRING(SOBRENOME,1,3) FROM EMPREGADO;
--OracleSELECT SUBSTR(SOBRENOME,1,3) FROM EMPREGADO;
--FirebirdSELECT SUBSTRING(SOBRENOME FROM 1 FOR 3) FROM EMPREGADO;
Funções (Caractere)
http://www.alvarofpinheiro.eti.br
![Page 105: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/105.jpg)
--Exibir o tamanho do Sobrenome
--SQLServerSELECT LEN(SOBRENOME) FROM EMPREGADO;
--Postgre | Oracle | MySQLSELECT LENGTH(SOBRENOME) FROM EMPREGADO;
--FirebirdSELECT CHAR_LENGTH(SOBRENOME) FROM EMPREGADO;
Funções (Caractere)
http://www.alvarofpinheiro.eti.br
![Page 106: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/106.jpg)
--Exibir a posição no ‘(‘ no nome do departamento
--SQLServerSELECT CHARINDEX('(', NOME) FROM DEPARTAMENTO;
--PostgreSELECT STRPOS(NOME, '(') FROM DEPARTAMENTO;
--Oracle | MySQLSELECT INSTR(NOME, '(') FROM DEPARTAMENTO;
--FirebirdSELECT POSITION('(' IN NOME) FROM DEPARTAMENTO;
Funções (Caractere)
http://www.alvarofpinheiro.eti.br
![Page 107: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/107.jpg)
--Trocar no nome de departamento: Admin para Adm; Exec para Exe;e Contab para Con.
SELECTREPLACE(NOME, '(ADMIN)', '(ADM)'),REPLACE(NOME, '(EXEC)', '(EXE)'),REPLACE(NOME, '(CONTAB)', '(CON)')FROM DEPARTAMENTO;
http://www.alvarofpinheiro.eti.br
Funções (Caractere)
![Page 108: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/108.jpg)
●Prática: Exibir o tamanho do Apelidoconcatenado com o Sobrenome com osbrancos e depois sem os brancos.
●Dicas:o Funções de uma única linha podem ser aninhadas em qualquer nível;o As funções aninhadas são avaliadas do nívelmais interno para o mais externo.
Funções (Aninhamento)
http://www.alvarofpinheiro.eti.br
![Page 109: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/109.jpg)
--Exibir o tamanho do Apelido concatenado com o Sobrenome com os brancos
--SQLServerSELECT LEN(APELIDO + ' ' + SOBRENOME) FROM EMPREGADO;
--Postgre | OracleSELECT LENGTH(APELIDO || ' ' || SOBRENOME) FROM EMPREGADO;
--MySQLSELECT LENGTH(CONCAT(APELIDO, ' ', SOBRENOME)) FROM EMPREGADO;
--FirebirdSELECT CHAR_LENGTH(APELIDO || ' ' || SOBRENOME) FROM EMPREGADO;
--Exibir o tamanho do Apelido concatenado com o Sobrenome sem os brancos
--SQLServerSELECT LEN(RTRIM(APELIDO) + ' ' + SOBRENOME) FROM EMPREGADO;
--Postgre | OracleSELECT LENGTH(RTRIM(APELIDO) || ' ' || SOBRENOME) FROM EMPREGADO;
--MySQLSELECT LENGTH(CONCAT(RTRIM(APELIDO), ' ', SOBRENOME)) FROM EMPREGADO;
--FirebirdSELECT CHAR_LENGTH(TRIM(APELIDO) || ' ' || SOBRENOME) FROM EMPREGADO;
Funções (Aninhamento)
http://www.alvarofpinheiro.eti.br
![Page 110: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/110.jpg)
●ROUND – arredonda a coluna;●TRUNC – trunca a coluna;
●Práticas:o Exibir o Fator;o Exibir o Fator arredondando para 1 decimal;o Exibir o Fator truncando para 1 decimal.
Funções (Numérica)
http://www.alvarofpinheiro.eti.br
![Page 111: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/111.jpg)
--Exibir o FatorSELECT FATOR FROM DEPARTAMENTO;
--Exibir o Fator arredondando para 1 decimalSELECT ROUND(FATOR,1) FROM DEPARTAMENTO;
--Exibir o Fator truncando para 1 decimal.
--SQLServer--SELECT ROUND(FATOR, 1, 2) FROM DEPARTAMENTO;
--Postgre | Oracle | FirebirdSELECT TRUNC(FATOR, 1) FROM DEPARTAMENTO;
--MySQLSELECT TRUNCATE(FATOR, 1) FROM DEPARTAMENTO;
Funções (Numérica)
http://www.alvarofpinheiro.eti.br
![Page 112: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/112.jpg)
●MOD | % – retorna o resto da divisão.
●Práticas:o Visualizar o quociente da divisão de 5 por 2;o Visualizar o resto da divisão de 5 por 2;
●Dicas:o Para exibir dados que não estão inseridos emtabelas do banco de dados pode-se fazer usode uma tabela fictícia usada para exibirresultados chamada de DUAL.
Funções (Numérica)
http://www.alvarofpinheiro.eti.br
![Page 113: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/113.jpg)
--Visualizar o quociente da divisão de 5 por 2
--SQLServer | FirebirdSELECT 5 / 2 FROM TMP;
--Postgre | MySQLSELECT 5 / 2;
--OracleSELECT 5 / 2 FROM DUAL;
Funções (Numérica)
http://www.alvarofpinheiro.eti.br
![Page 114: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/114.jpg)
--Visualizar o resto da divisão de 5 por 2
--SQLServerSELECT 5 % 2 FROM TMP;
--Postgre | MySQLSELECT 5 MOD 2;
--OracleSELECT MOD (5, 2) FROM DUAL;
--FirebirdSELECT MOD(5, 2) FROM TMP;
Funções (Numérica)
http://www.alvarofpinheiro.eti.br
![Page 115: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/115.jpg)
●Prática: Visualizar a data e hora corrente;
●Dicas:o Sintaxe: GETDATE | SYSDATEo Os Bancos de Dados (BD) armazenam as datasem formato de número inteiro: século, ano, mês, dia, horas, minutos e segundos;o O formato de exibição default depende do BD, mas no geral é utilizado a exibição DD-MMM-AA;o Pode-se adicionar ou subtrair (aritmética com datas)
Funções (Data)
http://www.alvarofpinheiro.eti.br
![Page 116: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/116.jpg)
●Dicas:o Operação; Resultado; Descriçãoo Data+Número; Data; Adiciona dias a dataso Data-Número; Data; Subtrai dias a dataso Data-Data; Dias; Subtrai uma data de outrao Data+Número/24; Data; Adiciona hora a datas
Aritmética de Datas
http://www.alvarofpinheiro.eti.br
![Page 117: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/117.jpg)
●Práticas – Exiba e verifique o retorno:o Exibir a data corrente;o Exibir Data+Número;o Exibir Data-Número;o Exibir Data-Data;o Exibir Data+Número/24.
Aritmética de Datas
http://www.alvarofpinheiro.eti.br
![Page 118: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/118.jpg)
--SQLServerSELECT GETDATE() FROM TMP;SELECT GETDATE() + 1 FROM TMP;SELECT GETDATE() - 1 FROM TMP;SELECT GETDATE() - '13/11/67' FROM TMP;SELECT GETDATE() + 10/24 FROM TMP;SELECT YEAR(GETDATE()) FROM TMP;SELECT MONTH(GETDATE()) FROM TMP;SELECT DAY(GETDATE()) FROM TMP;
Aritmética de Datas
http://www.alvarofpinheiro.eti.br
![Page 119: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/119.jpg)
--PostgreSELECT CURRENT_TIMESTAMP;SELECT CURRENT_TIMESTAMP + INTERVAL '1DAY';SELECT CURRENT_TIMESTAMP - INTERVAL '1DAY';SELECT CURRENT_TIMESTAMP - '13/11/67';SELECT CURRENT_TIMESTAMP + INTERVAL '5HOURS';SELECT EXTRACT(YEAR FROM CURRENT_TIMESTAMP);SELECT EXTRACT(MONTH FROM CURRENT_TIMESTAMP);SELECT EXTRACT(DAY FROM CURRENT_TIMESTAMP);
Aritmética de Datas
http://www.alvarofpinheiro.eti.br
![Page 120: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/120.jpg)
--OracleSELECT SYSDATE FROM DUAL;SELECT SYSDATE + 1 FROM DUAL;SELECT SYSDATE - 1 FROM DUAL;SELECT SYSDATE - '13/11/67' FROM DUAL;SELECT SYSDATE + 10/24 FROM DUAL;SELECT YEAR(SYSDATE) FROM DUAL;SELECT MONTH(SYSDATE) FROM DUAL;SELECT DAY(SYSDATE) FROM DUAL;
Aritmética de Datas
http://www.alvarofpinheiro.eti.br
![Page 121: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/121.jpg)
--MySQLSELECT CURRENT_TIMESTAMP;SELECT CURRENT_TIMESTAMP + 1;SELECT CURRENT_TIMESTAMP - 1;SELECT CURRENT_TIMESTAMP - '13/11/67';SELECT CURRENT_TIMESTAMP + 10/24;SELECT EXTRACT(YEAR FROM CURRENT_TIMESTAMP);SELECT EXTRACT(MONTH FROM CURRENT_TIMESTAMP);SELECT EXTRACT(DAY FROM CURRENT_TIMESTAMP);
Aritmética de Datas
http://www.alvarofpinheiro.eti.br
![Page 122: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/122.jpg)
--FirebirdSELECT CURRENT_TIMESTAMP FROM TMP;SELECT CURRENT_TIMESTAMP + 1 FROM TMP;SELECT CURRENT_TIMESTAMP - 1 FROM TMP;SELECT CURRENT_TIMESTAMP + 10/24 FROM TMP;SELECT EXTRACT(YEAR FROM CURRENT_TIMESTAMP) FROM TMP;SELECT EXTRACT(MONTH FROM CURRENT_TIMESTAMP) FROM TMP;SELECT EXTRACT(DAY FROM CURRENT_TIMESTAMP) FROM TMP;
Aritmética de Datas
http://www.alvarofpinheiro.eti.br
![Page 123: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/123.jpg)
●Dica: CAST
●Práticas:o Exibir a conversão do salário para string.
Função de Conversão
http://www.alvarofpinheiro.eti.br
![Page 124: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/124.jpg)
SELECT CAST(SALARIO AS CHAR(10)) FROM EMPREGADO;
Função de Conversão
http://www.alvarofpinheiro.eti.br
![Page 125: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/125.jpg)
●CASE – permite uso de expressões condicionais.
●Sintaxe:o CASE expr WHEN cond THEN retorno
[WHEN condN THEN retornoN] [ELSE retorno]
o END
CASE
http://www.alvarofpinheiro.eti.br
![Page 126: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/126.jpg)
●Práticas:o Visualizar Número, Sobrenome, Salário e Departamento dos empregados;o Visualizar Número, Sobrenome, Salário e Departamento dos empregados aplicando 10% de aumento nos salários dos depart. 10 e 20, 15% dos depart. 80 e 90, e 5% nos demais.
CASE
http://www.alvarofpinheiro.eti.br
![Page 127: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/127.jpg)
SELECT NUMERO, SOBRENOME,CASEWHEN DEPARTAMENTO IN (10,20) THEN SALARIO + (SALARIO0.10) WHEN DEPARTAMENTO IN (80,90) THEN SALARIO + (SALARIO0.15) ELSE SALARIO + (SALARIO0.5)
END AS SALARIO, DEPARTAMENTO
FROM EMPREGADO;
CASE
http://www.alvarofpinheiro.eti.br
![Page 128: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/128.jpg)
●Um produto cartesiano será formado quando umacondição de junção for omitida e comoconsequência todas as linhas da primeira tabelaserão unidas a todas a linhas da segunda tabela.
Produto Cartesiano
http://www.alvarofpinheiro.eti.br
![Page 129: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/129.jpg)
●Práticas:o Visualizar Número, Sobrenome e Nome de Departamento dos empregados não colocando a junção das tabelas e observe o resultado.
Produto Cartesiano
http://www.alvarofpinheiro.eti.br
![Page 130: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/130.jpg)
--TodosSELECT E.NUMERO, E.SOBRENOME, D.NOME FROM EMPREGADO E, DEPARTAMENTO D;
--SQLServer | Postgre | Oracle | MySQLSELECT E.NUMERO, E.SOBRENOME, D.NOME FROM EMPREGADO E CROSS JOIN DEPARTAMENTO D;
Produto Cartesiano
http://www.alvarofpinheiro.eti.br
![Page 131: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/131.jpg)
●Quando forem necessários dados de mais de uma tabela no banco de dados, será usada umacondição de junção. As linhas de uma tabelapodem ser unidas a linhas de outra tabela de acordo com os valores comuns existentes nascolunas correspondentes, ou seja, em geralcolunas de chave primária e chave estrangeira.
Junção
http://www.alvarofpinheiro.eti.br
![Page 132: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/132.jpg)
●Dicas:
o Quando criar uma instrução SELECT que una tabelas, coloque o nome da tabela antes do nome da coluna para fins de clareza e para melhorar o acesso ao banco de dados;o Caso apareça o mesmo nome de coluna em mais de umatabela, o nome da coluna deve vir antecedido do nome da tabela(AMBÍGUIDADE);o Para unir N tabelas, é necessário um mínimo de N-1 condiçõesde junção. Por exemplo, para unir 4 tabelas, é necessário um mínimo de 3 junções. Essa regra pode não se aplicar se suatabela tiver uma chave primária concatenada. Nesse caso, seránecessário mais de uma coluna para identificar exclusivamentecada linha;o Para melhorar a sintaxe deve-se apelidar as tabelas.
Junção
http://www.alvarofpinheiro.eti.br
![Page 133: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/133.jpg)
●Eqüijunção●Não-eqüijunção●Junção externa●Autojunção
Junção (Tipos)
http://www.alvarofpinheiro.eti.br
![Page 134: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/134.jpg)
●Dica:● Também chamadas de junções simples ou internas.
●Prática:● Exibir o Sobrenome do empregado e o Nome do departamento de um empregado.
Equijunção
http://www.alvarofpinheiro.eti.br
![Page 135: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/135.jpg)
SELECT E.SOBRENOME, D.NOMEFROM EMPREGADO EINNER JOIN DEPARTAMENTO DON E.DEPARTAMENTO = D.NUMERO;
Equijunção
http://www.alvarofpinheiro.eti.br
![Page 136: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/136.jpg)
●Prática: Determine o nome do cargo e do departamento de um empregado.
●Dica: Observe que nas junções simples ouinternas se não existe uma relação a tupla não é gerada.
●Tupla: Cada linha formada por uma lista ordenada de colunas representa um registro. Os registros não precisam conter informações em todas as colunas, podendo assumir valores nulos quando assim se fizer necessário.
Equijunção
http://www.alvarofpinheiro.eti.br
![Page 137: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/137.jpg)
SELECT E.SOBRENOME, C.NOME, D.NOMEFROM EMPREGADO E INNER JOIN CARGO CON E.CARGO = C.NUMEROINNER JOIN DEPARTAMENTO DON E.DEPARTAMENTO = D.NUMERO;
Equijunção
http://www.alvarofpinheiro.eti.br
![Page 138: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/138.jpg)
●São junções que não usam condições de igualdade.
●Prática: Exibir o Número, Sobrenome, nome do cargos de cada empregados que podem ser galgados na empresa.
Não-Equijunção
http://www.alvarofpinheiro.eti.br
![Page 139: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/139.jpg)
SELECT E.NUMERO, E.SOBRENOME, C.NOMEFROM EMPREGADO EINNER JOIN CARGO CON C.NUMERO > E.CARGO;
Não-Equijunção
http://www.alvarofpinheiro.eti.br
![Page 140: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/140.jpg)
●Quando se deseja exibir dados que não possuem uma relação comum entre tabelas.
●Dicas:
o Em banco como Oracle pode-se utilizar a extensão (+) e emSQL Server ();o Só pode ser utilizado de um lado da expressão;o Não se pode utilizar o operador IN e nem o OR.
●Prática: Exibir o Número, Sobrenome, Apelido, nome do cargo de todos osempregados, mesmo daqueles que ainda não possuem cargos atribuídos.
Junção Externa
http://www.alvarofpinheiro.eti.br
![Page 141: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/141.jpg)
SELECT E.NUMERO, E.SOBRENOME, E.APELIDO, C.NOMEFROM EMPREGADO ERIGHT JOIN CARGO CON C.NUMERO = E.CARGO;
Junção Externa
http://www.alvarofpinheiro.eti.br
![Page 142: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/142.jpg)
●Quando se une uma tabela a ela mesma.
●Prática: Exibir o Número, Primeironome dos empregados e o Número e o Primeironome dos seus respectivos gerentes.
Autojunção
http://www.alvarofpinheiro.eti.br
![Page 143: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/143.jpg)
SELECT E.NUMERO, E.PRIMEIRONOME, G.NUMERO, G.PRIMEIRONOMEFROM EMPREGADO E LEFT JOIN EMPREGADO GON E.GERENTE = G.NUMERO;
Autojunção
http://www.alvarofpinheiro.eti.br
![Page 144: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/144.jpg)
●Operam um conjunto de linhas, as funções de grupo operam em conjuntos de linhas para fornecer um resultado por grupo. Esses conjuntos podem ser a tabela inteira ou dividida em grupos.
●Dicas:
o Funções de grupo são mais conhecidas como funçõesagregadas. AVG, COUNT, MAX, MIN e SUM;o ALL faz com que a função considere todos os valores, inclusive as duplicidades;o DISTINCT faz com que a função considere somente valores nãoduplicados;o Todas as funções de grupos ignoram valores nulos, paragarantir a aplicabilidade para todos os registros use ().
Funções de Grupo
http://www.alvarofpinheiro.eti.br
![Page 145: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/145.jpg)
●Práticas:o Exibir a média de salários pago pelo empregador;o Exibir o somatório dos salários;o Exibir a quantidade de empregados;o Exibir o maior salário;o Exibir o menor salário.
Funções de Grupo
http://www.alvarofpinheiro.eti.br
![Page 146: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/146.jpg)
SELECT AVG(SALARIO) FROM EMPREGADO;
SELECT SUM(SALARIO) FROM EMPREGADO;
SELECT COUNT(SALARIO) FROM EMPREGADO;
SELECT MAX(SALARIO) FROM EMPREGADO;
SELECT MIN(SALARIO) FROM EMPREGADO;
Funções de Grupo
http://www.alvarofpinheiro.eti.br
![Page 147: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/147.jpg)
●Usa-se o GROUP BY para dividir as linhas de uma tabela em grupos.
●Práticas:o Exibir a média de salários pagos por Departamento;o Exibir o somatório dos salários pagos por Cargo;o Exibir a quantidade de empregados por gestor;o Exibir o maior salário por gestor;o Exibir o menor salário por gestor.
Grupo de Dados
http://www.alvarofpinheiro.eti.br
![Page 148: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/148.jpg)
SELECT D.NOME, AVG(E.SALARIO) AS MEDIASFROM DEPARTAMENTO D INNER JOIN EMPREGADO EON 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 EON 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
http://www.alvarofpinheiro.eti.br
![Page 149: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/149.jpg)
●Usa-se o HAVING para filtrar as linhas de umatabela em grupos.
●Práticas:o Exibir a média de salários pagos por Departamento cujo a média sejamaior ou igual a 2000;o Exibir o somatório dos salários pagos por Cargo cujo o somatório sejamenor que 1500.
Grupo de Dados (Filtros)
http://www.alvarofpinheiro.eti.br
![Page 150: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/150.jpg)
SELECT D.NOME, AVG(E.SALARIO) AS MEDIASFROM DEPARTAMENTO D INNER JOIN EMPREGADO EON 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 (Filtros)
http://www.alvarofpinheiro.eti.br
![Page 151: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/151.jpg)
●Usa-se o ROLLUP para produzir linhassuperagregadas pela referência cruzada de colunas. O agrupamento ROLLUP produz um conjunto de resultados que contém as linhasagrupadas normais e os valores de subtotais.
●Práticas:o Exibir o somatório de Salário agrupado por Departamento e Cargo dos empregados com Número de Departamento menor que 60, exibindo ossubtotais de Departamento e Cargo.
Grupo de Dados (ROLLUP)
http://www.alvarofpinheiro.eti.br
![Page 152: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/152.jpg)
--TodosSELECT CAST(DEPARTAMENTO AS CHAR), CAST(CARGO AS CHAR), SUM(SALARIO)FROM EMPREGADOWHERE DEPARTAMENTO < 60GROUP BY DEPARTAMENTO, CARGOUNIONSELECT '', '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 (ROLLUP)
http://www.alvarofpinheiro.eti.br
![Page 153: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/153.jpg)
●Usa-se o CUBE para produzir um conjunto de resultados que contém as linhas de ROLLUP e as linhas de tabulação cruzada. Pode-se usá-lo paraproduzir valores de tabulação cruzada com umainstrução SELECT simples.
●Práticas:o Exibir o somatório de Salário agrupado por Departamento e Cargo dos empregados com Número de Departamento menor que 60, exibindo a referência cruzada de Departamento e Cargo.
Grupo de Dados (CUBE)
http://www.alvarofpinheiro.eti.br
![Page 154: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/154.jpg)
--SQLServer | OracleSELECT DEPARTAMENTO, CARGO, SUM(SALARIO)FROM EMPREGADOWHERE DEPARTAMENTO < 60GROUP BY CUBE (DEPARTAMENTO, CARGO);
Grupo de Dados (CUBE)
http://www.alvarofpinheiro.eti.br
![Page 155: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/155.jpg)
●Usa-se o ORDER BY para classificar as linhas de uma seleção.
●Práticas:o Exibir a média de salários pagos por Departamento em ordemdecrescente;o Exibir o somatório dos salários pagos por Cargo em ordem ascendente.
Ordenação de Dados
http://www.alvarofpinheiro.eti.br
![Page 156: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/156.jpg)
SELECT D.NOME, AVG(E.SALARIO) AS MEDIASFROM DEPARTAMENTO D INNER JOIN EMPREGADO EON 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;
Ordenação de Dados
http://www.alvarofpinheiro.eti.br
![Page 157: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/157.jpg)
●As funções de grupo podem ser aninhadas atéuma profundidade de dois.
●Prática:o Exibir o salário médio máximo pago por Departamento.
Grupo de Dados (Aninhamento)
http://www.alvarofpinheiro.eti.br
![Page 158: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/158.jpg)
--OracleSELECT MAX(AVG(E.SALARIO)) AS MEDIASFROM EMPREGADO EGROUP BY E.DEPARTAMENTO;
Grupo de Dados (Aninhamento)
http://www.alvarofpinheiro.eti.br
![Page 159: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/159.jpg)
●Consiste em executar uma consulta (externa) a partir de outra consulta(interna).
●Dicas:
o Existem operadores que retornam apenas uma linha (=, <>, >, >=, <, <=) e o que retorna várias linhas (IN);o Coloque subconsultas entre parênteses;o A quantidade de níveis de subconsultas dependem do banco de dados.
●Prática:
o Quais os empregados possuem salário maior que o de Pedroca?
Subconsulta
http://www.alvarofpinheiro.eti.br
![Page 160: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/160.jpg)
SELECT APELIDO, SALARIOFROM EMPREGADOWHERE SALARIO > (SELECT SALARIO FROM EMPREGADO WHERE APELIDO='PEDROCA');
Subconsulta
http://www.alvarofpinheiro.eti.br
![Page 161: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/161.jpg)
●Prática:
o Qual o nome (Primeironome + Sobrenome) dos empregadospossuem o menor salário?
Subconsulta
http://www.alvarofpinheiro.eti.br
![Page 162: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/162.jpg)
--SQLSeverSELECT PRIMEIRONOME + ' ' + SOBRENOME AS NOME, SALARIO FROM EMPREGADOWHERE SALARIO = (SELECT MIN(SALARIO) FROM EMPREGADO);
--Postgre | Oracle | FirebirdSELECT 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
http://www.alvarofpinheiro.eti.br
![Page 163: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/163.jpg)
●Prática:
o Exibir o menor Salário por Departamento onde o menor Salárioseja o maior que o menor Salário do Departamento de código 50.
Subconsulta
http://www.alvarofpinheiro.eti.br
![Page 164: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/164.jpg)
SELECT D.NOME, MIN(E.SALARIO)FROM EMPREGADO EINNER JOIN DEPARTAMENTO DON E.DEPARTAMENTO = D.NUMEROGROUP BY D.NOMEHAVING MIN(E.SALARIO) > (SELECT MIN(SALARIO) FROM EMPREGADO WHERE DEPARTAMENTO = 50);
Subconsulta
http://www.alvarofpinheiro.eti.br
![Page 165: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/165.jpg)
●Prática:
o O que há de errado com a instrução abaixo?
o SELECT Numero, Sobrenomeo FROM Empregadoo WHERE Salario = (SELECT MIN(Salario)o FROM Empregadoo GROUP BY Departamento);
Subconsulta
http://www.alvarofpinheiro.eti.br
![Page 166: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/166.jpg)
A subconsulta retornou mais de 1 valor. Isso não é permitido quando a subconsulta segue um =, !=, <, <= , >, >= ou quando ela é usada como uma expressão.
Subconsulta
http://www.alvarofpinheiro.eti.br
![Page 167: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/167.jpg)
●Prática:
o Exibir Número, Sobrenome, Salário dos empregadosque possuirem algum salário menor que o menor saláriodo departamento de código 50.
Subconsulta (ANY)
http://www.alvarofpinheiro.eti.br
![Page 168: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/168.jpg)
SELECT NUMERO, SOBRENOME, SALARIOFROM EMPREGADOWHERE SALARIO < ANY(SELECT MIN(SALARIO) FROM EMPREGADO WHERE DEPARTAMENTO = 50);
Subconsulta (ANY)
http://www.alvarofpinheiro.eti.br
![Page 169: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/169.jpg)
●Prática:
o Exibir Número, Sobrenome, Salário dos todos os empregadosque possuirem salário menor que o menor salário do departamento de código 50.
Subconsulta (ALL)
http://www.alvarofpinheiro.eti.br
![Page 170: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/170.jpg)
SELECT NUMERO, SOBRENOME, SALARIOFROM EMPREGADOWHERE SALARIO < ALL(SELECT MIN(SALARIO) FROM EMPREGADO WHERE DEPARTAMENTO = 50);
Subconsulta (ALL)
http://www.alvarofpinheiro.eti.br
![Page 171: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/171.jpg)
●Ocorre quando uma subconsulta faz referência a uma coluna de uma tabelareferenciada na instrução mãe. Uma subconsulta correlacionada é avaliadauma vez para cada linha processada pela instrução mãe. A instrução mãepode ser uma instrução SELECT, UPDATE ou DELETE.
●Prática:
o Exibir todos os empregados (Sobrenome, Salário e Número do Departamento) que ganham acima do salário médio de seusrespectivos departamentos.
Subconsulta (Correlacionadas)
http://www.alvarofpinheiro.eti.br
![Page 172: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/172.jpg)
SELECT EXT.SOBRENOME, EXT.SALARIO, EXT.DEPARTAMENTOFROM EMPREGADO EXTWHERE EXT.SALARIO >(SELECT AVG(ITN.SALARIO)FROM EMPREGADO ITNWHERE ITN.DEPARTAMENTO = EXT.DEPARTAMENTO);
Subconsulta (Correlacionadas)
http://www.alvarofpinheiro.eti.br
![Page 173: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/173.jpg)
●O operador EXISTS testa a existência de linhas no conjunto de resultados dasubconsulta. Se o valor da linha de uma subconsulta for encontrado: A pesquisa na consulta interna não continuará; e A condição será indicada porum flag TRUE. Se o valor de linha de uma subconsulta não for encontrado: A condição será indicada por um flag FALSE; A pesquisa continuará na consultainterna.
●Prática:
o Exibir os empregados (Sobrenome, Salário e Número do Departamento) com no mínimo uma pessoa subordinada a eles.
Subconsulta (EXISTS)
http://www.alvarofpinheiro.eti.br
![Page 174: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/174.jpg)
SELECT EXT.SOBRENOME, EXT.SALARIO, EXT.DEPARTAMENTOFROM EMPREGADO EXTWHERE EXISTS(SELECT 'X'FROM EMPREGADO ITNWHERE ITN.GERENTE = EXT.NUMERO);
Subconsulta (EXISTS)
http://www.alvarofpinheiro.eti.br
![Page 175: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/175.jpg)
●Retorna todas as linhas selecionadas por uma consuta. Use esse operadorpara retornar todas as linhas de várias tabelas e eliminar as linhas duplicadas.
●Dicas:
o Necessáriamente os campos das tabelas unidas devem possuiros mesmos tipos de dados;o Os campos devem estar posicionados na mesma ordem;o A quantidade de campos deve ser a mesma;o A cláusula ORDER BY deve ser utilizada no final da união.
●Prática:
o Exibir a união das tabelas Cargo e Departamento para oscampos Número e Nome.
União
http://www.alvarofpinheiro.eti.br
![Page 176: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/176.jpg)
SELECT NUMERO, NOMEFROM CARGOUNIONSELECT NUMERO, NOMEFROM DEPARTAMENTO;
União
http://www.alvarofpinheiro.eti.br
![Page 177: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/177.jpg)
●Serve para retornar todas as linhas comuns a várias consultas.
●Prática:
o Exibir a intersecção das tabelas Cargo e Departamento para oscampos Número e Nome.
Intersecção
http://www.alvarofpinheiro.eti.br
![Page 178: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/178.jpg)
--SQLServer | Postgre | OracleSELECT NUMERO, NOME FROM CARGO INTERSECT SELECT NUMERO, NOME FROM DEPARTAMENTO;
--MySQLSELECT NUMERO, NOME FROM CARGO INNER JOIN DEPARTAMENTO USING (NUMERO, NOME);
Intersecção
http://www.alvarofpinheiro.eti.br
![Page 179: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/179.jpg)
●Serve para obter linhas retornadas pela primeira consulta e ausentes nasegunda consulta.
●Prática:
o Exibir a subtração das tabelas Cargo e Departamento para oscampos Número e Nome.
Subtração
http://www.alvarofpinheiro.eti.br
![Page 180: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/180.jpg)
--SQLServer | OracleSELECT NUMERO, NOME FROM CARGO MINUS SELECT NUMERO, NOME FROM DEPARTAMENTO;
--PostgreSELECT NUMERO, NOME FROM CARGO EXCEPT SELECT NUMERO, NOME FROM DEPARTAMENTO;
--MySQLSELECT DISTINCT NUMERO, NOME FROM CARGO WHERE (NUMERO, NOME) NOT IN (SELECT NUMERO, NOME FROM DEPARTAMENTO);
Subtração
http://www.alvarofpinheiro.eti.br
![Page 181: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/181.jpg)
●Alguns bancos permitem passagem de parâmetros com o uso de variáveis de substituição.
●Dicas:o No Oracle a macrosubstituição é com (&);o No SQLServer a macrosubstituição é com (:);
●Prática:
o Exibir o Sobrenome do empregado que possuir o Númeroinformado pelo usuário.
Macrosubstituição
http://www.alvarofpinheiro.eti.br
![Page 182: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/182.jpg)
SELECT SOBRENOMEFROM EMPREGADOWHERE NUMERO = :Informe_Numero;
Macrosubstituição
http://www.alvarofpinheiro.eti.br
![Page 183: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/183.jpg)
●Alguns BD permitem a selecão de dados nas cláusulas SELECT e FROM.
●Exemplo:o Oracle
● SELECT CARGO FROM● (SELECT C.NOME AS CARGO, AVG(E.SALARIO) AS MEDIASALARIO● FROM CARGO C INNER JOIN EMPREGADO E● ON C.NUMERO = E.CARGO● GROUP BY C.NOME);
o SQLServer● SELECT E.NUMERO, E.SOBRENOME, E.SALARIO, E.DEPARTAMENTO AS DEPCOD, (SELECT D.NOME FROM DEPARTAMENTO D WHERE D.NUMERO = E.DEPARTAMENTO) AS DEPNOME● FROM EMPREGADO E;
Seleção de Seleção
http://www.alvarofpinheiro.eti.br
![Page 184: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/184.jpg)
●Alguns BD permitem a selecão das N primeiras linhas que satisfazem a uma determinada seleção.
●Prática:o Exibir os 2 primeiros registros de empregados cujos os saláriossejam menores que 2000.
Análise Top-N
http://www.alvarofpinheiro.eti.br
![Page 185: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/185.jpg)
--SQLServerSELECT TOP 2 NUMERO, APELIDO, SALARIO FROM EMPREGADOWHERE SALARIO < 2000;
--Postgre | MySQLSELECT NUMERO, APELIDO, SALARIO FROM EMPREGADOWHERE SALARIO < 2000 LIMIT 2;
--OracleSELECT NUMERO, APELIDO, SALARIO FROM EMPREGADOWHERE SALARIO < 2000 AND ROWNUM <= 2;
--FirebirdSELECT FIRST 2 NUMERO, APELIDO, SALARIO FROM EMPREGADOWHERE SALARIO < 2000;
Análise Top-N
http://www.alvarofpinheiro.eti.br
![Page 186: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/186.jpg)
Apagar registros:DELETE FROM nome
[WHERE definição][ORDER BY ...];
Apagar e recriar tabela:TRUNCATE TABLE nome_tabela;
Apagar tabela:DROP TABLE nome_tabela;
Apagar
http://www.alvarofpinheiro.eti.br
![Page 187: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/187.jpg)
●Tratamento de dados de forma atômica.
●Dica: Em alguns BD as instruções DDL e DCL são automáticas.
●Práticas:o Exibir os dados da tabela Empregado;o Salvar um ponto A;o Apagar todos os empregados do Departamento 50;o Exibir os dados da tabela Empregado;o Salvar um ponto B;o Apagar todos os empregados com Salário = 1000;o Exibir os dados da tabela Empregado;o Restaurar o ponto A;o Exibir os dados da tabela Empregado;o Restaurar o ponto B;o Exibir os dados da tabela Empregado.
Transações
http://www.alvarofpinheiro.eti.br
![Page 188: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/188.jpg)
--SQLServerSAVE TRANSACTION A;SELECT FROM DEPARTAMENTO;DELETE FROM DEPARTAMENTO WHERE NUMERO = 110;SELECT FROM DEPARTAMENTO;UPDATE DEPARTAMENTO SET NOME = 'TESTE' WHERE NUMERO = 90;SELECT FROM DEPARTAMENTO;ROLLBACK TRANSACTION A;SAVE TRANSACTION B;INSERT INTO DEPARTAMENTO (NUMERO, NOME) VALUES (200, 'TESTE2');SELECT FROM DEPARTAMENTO;COMMIT TRANSACTION B;SELECT FROM DEPARTAMENTO;
Transações
http://www.alvarofpinheiro.eti.br
![Page 189: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/189.jpg)
●Serve para apresentar combinações ou subconjuntos lógicos de dados através de views de tabelas. A view é uma tabela lógica baseada em umatabela ou em outra view. Ela não contém dados próprios, mas é uma janelapor meio da qual os dados das tabelas podem ser vistos e algumas vezesalterados. As tabelas nas quais uma view se baseia são denominadas de tabelas-base. A view é armazenada como uma instrução SELECT no dicionário de dados.
●Dicas:o Serve para restringir o acesso a dados;o Serve para facilitar as consultas complexas;o Serve para permitir a independência dos dados;o Serve para apresentar diferentes visões dos mesmos dados.
Visão
http://www.alvarofpinheiro.eti.br
![Page 190: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/190.jpg)
●View Simpleso Cria dados a partir de uma tabela apenas;o Não contém funções e nem grupo de dados;o Permite operações DML.
●View Complexaso Cria dados a partir de várias tabelas;o Contém funções ou grupo de dados;o Nem sempre permite operações DML.
Visão
http://www.alvarofpinheiro.eti.br
![Page 191: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/191.jpg)
●Sintaxe:
●CREATE VIEW [ schema_name . ] view_name●[ (column [ ,...n ] ) ] ●AS select_statement;
Visão
http://www.alvarofpinheiro.eti.br
![Page 192: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/192.jpg)
●Prática: Criar uma visão denominada VISAO_1, que contenha os camposNúmero, Primeironome, Sobrenome dos empregados do departamento 80. Depois de criada insira um novo registro nessa visão. Finalizando exiba todosos dados da tabela Empregado.
Visão Simples
http://www.alvarofpinheiro.eti.br
![Page 193: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/193.jpg)
CREATE VIEW VISAO_1 ASSELECT NUMERO, PRIMEIRONOME, SOBRENOME FROM EMPREGADOWHERE DEPARTAMENTO=80;
INSERT INTO VISAO_1 VALUES (200, 'ANTONIETA', 'LARANJEIRA');
SELECT FROM EMPREGADO;
Visão Simples
http://www.alvarofpinheiro.eti.br
![Page 194: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/194.jpg)
●Prática: Criar uma visão denominada VISAO_2, que contenha os camposNome (Primeironome + ‘ ‘ + Sobrenome) e o campo Salariobase (Salário –500) dos empregados do departamento 30. Depois de criada tente insir um novo registro nessa visão. Finalizando exiba todos os dados da tabelaEmpregado.
Visão Complexa
http://www.alvarofpinheiro.eti.br
![Page 195: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/195.jpg)
CREATE VIEW VISAO_2 ASSELECT (PRIMEIRONOME + ' ' + SOBRENOME) AS NOME, (SALARIO - 500) AS SALARIOBASEFROM EMPREGADO WHERE DEPARTAMENTO=10;
INSERT INTO VISAO_2 VALUES ('JULIETA PEREIRA', 400);
SELECT FROM EMPREGADO;
Visão Complexa
http://www.alvarofpinheiro.eti.br
![Page 196: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/196.jpg)
●Criar novos usuários para o BD.
●Sintaxe:o SQLServer
●CREATE LOGIN login●WITH PASSWORD = ‘senha';●CREATE USER usuario●FOR LOGIN [operador]●WITH DEFAULT_SCHEMA = [dbo];
o Oracle●CREATE USER usuario●IDENTIFIED BY ‘senha';
●Prática: Criar um novo usuário.
Usuário
http://www.alvarofpinheiro.eti.br
![Page 197: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/197.jpg)
--Para adicionar um usuário ao banco de dados do SQL Server você tem que seguir três passos:
--Primeiro: você deve criar um login, que é um "cara" que tem permisssão de se logar no SQL Sever
CREATE LOGIN USUARIO WITH PASSWORD = 'senha';
--Segundo: você deve criar um usuário para o banco de dados que deseja mapeando esse usuário para o--login criado, assim seu usuário 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 permissões ao usuário porque até o segundo passo o usuário criado só--tem direito a entrar no banco de dados, dando as permissões o usuário já pode operar no banco de dados.--Se o usuário for comum você pode adicioná-lo apenas as roles de db_reader e db_writer, que permitirá que--o usuário faça select, insert, delete e update em todas as tabelas do referido banco de dados.
EXEC SP_ADDROLEMEMBER 'DB_DATAREADER', 'USUARIO'
Usuário
http://www.alvarofpinheiro.eti.br
![Page 198: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/198.jpg)
●Fornecer acesso aos objetos dos BD.
●Sintaxe:o GRANT privilégio ON objeto TO usuário;
●Exemplos:o GRANT CREATE TABLE, CREATE VIEW TO operador1;o GRANT SELECT ON EMPREGADO TO operador1;
Privilégios
http://www.alvarofpinheiro.eti.br
![Page 199: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/199.jpg)
●Retirar acesso aos objetos dos BD.
●Sintaxe:o REVOKE privilégio ON objeto FROM usuário;
●Exemplos:o REVOKE CREATE TABLE, CREATE VIEW FROM operador1;o REVOKE SELECT ON EMPREGADO FROM operador1;
Privilégios
http://www.alvarofpinheiro.eti.br
![Page 200: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/200.jpg)
●Alguns bancos como o Postgre e o Oracle possuem um objeto chamado de sequencia que equivale no SQLServer a regra de IDENTITY( 1, 1).
●Sintaxe:● CREATE [TEMPORARY | TEMP] SEQUENCE name
● [INCREMENT [BY] increment ]● [MINVALUE minvalue | NO MINVALUE]● [MAXVALUE maxvalue | NO MAXVALUE]● [START [ WITH ] start]● [CACHE cache]● [[ NO ] CYCLE]
Sequência
http://www.alvarofpinheiro.eti.br
![Page 201: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/201.jpg)
Funções SQLServer
ASCII(string)pega o valor em ASCII da string
CHAR(integer)troca inteiro do ASCII em um caracter
LEN(string)Identifica o comprimento de uma expressão em caracteres
LOWER(string)converte uma string uppercase para lowercase.
LTRIM(string)remove os espaços em branco
Funções
http://www.alvarofpinheiro.eti.br
![Page 202: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/202.jpg)
Funções SQLServer
PATINDEX(posicao, expressao)devolve a posicão de uma string dentro de um texto. Se não encontrar, retornazero.
REPLICATE(string, integer)repete N vezes um caractere especificado
REVERSE(string)retorna o inverso de uma expressao
RTRIM(string)remove os espaços em branco à direita de uma string
SPACE(integer)que retorna o número de espaços em branco informados no parâmetro
Funções
http://www.alvarofpinheiro.eti.br
![Page 203: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/203.jpg)
Funções SQLServer
STUFF(string texto, X, Y, string texto_a_inserir)apaga da string "texto" os y caracteres a partir da posição x e os substitui por"texto_a_inserir"
SUBSTRING(string texto, posicao_inicial, tamanho)retorna uma string com o comprimento definido em "tamanho" extraida dastring "texto", a partir da "posicao_inicial"
UPPER(string)retorna string em maiusculas
DATEADD (parte, numero, data)adiciona um valor a parte de uma data
Funções
http://www.alvarofpinheiro.eti.br
![Page 204: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/204.jpg)
Funções SQLServer
DATEDIFF (parte, data inicial, data final) subtrai a data inicial da data final, indicando o resultado na unidade definida em"parte"
GETDATE()retorna a data atual do sistema
DATENAME (parte, data)retorna o nome da parte de uma data
DATEPART(parte, data)retorna a parte de uma data
CAST(expressao as datatype)converte uma expressao no datatype informado
Funções
http://www.alvarofpinheiro.eti.br
![Page 205: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/205.jpg)
Funções SQLServer
COL_LENGTH(nome_da_tabela, nome_da_coluna)retorna o tamanho da coluna
COL_NAME(id_da_tabela, id_da_coluna) retorna o nome da coluna
DATALENGTH(expressao)retorna o numero de bytes usados para armazenar a expressao
DB_ID(nome_do_banco)retorna o ID do banco informado
DB_NAME(id_do_banco)retorna o nome do banco
Funções
http://www.alvarofpinheiro.eti.br
![Page 206: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/206.jpg)
Funções SQLServer
HOST_ID()retorna a ID da estação que está acessando o SQL Server
HOST_NAME()retorna o nome da estação 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
Funções
http://www.alvarofpinheiro.eti.br
![Page 207: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/207.jpg)
Funções SQLServer
ISNULL(expressao, valor)se a expressao for null, troca pelo valor especificado
ISNUMERIC(expressao)retorna 1 se a expressao for numerica e 0 se não for
NEWID()retorna um novo valor do tipo uniqueidentifier
NULLIF(expressao_1, expressao_2)retorna nulo se as duas expressoes forem equivalentes. Se não forem, retornaa primeira expressao.
OBJECT_ID(nome_do_objeto)retorna o ID de um objeto, a partir do nome fornecido
Funções
http://www.alvarofpinheiro.eti.br
![Page 208: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/208.jpg)
Funções SQLServer
OBJECT_NAME(ID_do_objeto)retorna o nome do objeto, a partir do ID fornecido
PARSENAME(objeto, parte)retorna a parte do nome de um objeto, desde que tenha sido qualificado
STATS_DATE(tabela_id, indice_id)retorna a data em que as estatísticas do índice foram atualizadas
SUSER_SID(nome_do_usuario)retorna o ID do usuario informado
SUSER_NAME(usuario_id)retorna o id do usuário no servidor. O argumento é opcional.
Funções
http://www.alvarofpinheiro.eti.br
![Page 209: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/209.jpg)
Funções SQLServer
ABS(numero)retorna o valor absoluto do numero
ACOS(float)retorna o arco-coseno do numero informado
ASIN(float)retorna o arco-seno do numero informado
ATAN(float)retorna o arco-tangente do numero informado
ATN2(Float expressao_1, float expressao_2)arco-tangente do valor definido pela divisão da primeira expressão pelasegunda
Funções
http://www.alvarofpinheiro.eti.br
![Page 210: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/210.jpg)
Funções SQLServer
CEILING(numero)retorna o menor inteiro que seja maior ou igual ao numero informado
COS(float)retorna o coseno do numero informado
COT(float)retorna o cotangente do numero informado
DEGREES(numero)converte radianos para graus
EXP(float)retorna o exponencial de um numero especificado
Funções
http://www.alvarofpinheiro.eti.br
![Page 211: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/211.jpg)
Funções SQLServer
FLOOR(numero)retorna o maior inteiro que seja menor ou igual ao numero informado
LOG(float)retorna o logaritmo natural do numero informado
LOG10(float)retorna o logaritmo base 10 do numero informado
PI()retorna o valor de PI 3.1415926535897931.
POWER(numero, potencia)retorna o valor elevado à potencia informada
Funções
http://www.alvarofpinheiro.eti.br
![Page 212: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/212.jpg)
Funções SQLServer
RADIANS(numero)converte graus para radianos
RAND(expressao)um número aleatório entre 0 e 1. Expressão é opcional e será usada comosemente da cadeia pseudo-aleatória
ROUND(numero, precisao, arredonda_ou_trancar)arredonda ou tranca o numero fornecido de acordo com a precisao informada. Se o terceiro parametro não for passado para a funçao, 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
Funções
http://www.alvarofpinheiro.eti.br
![Page 213: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/213.jpg)
Funções SQLServer
SIN(float)retorna o seno do angulo especificado
SQRT(float)retorna a raiz quadrada de um numero
TAN(float)retorna a tangente de um numero informado
SQUARE(float)retorna o quadrado de um numero
Funções
http://www.alvarofpinheiro.eti.br
![Page 214: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/214.jpg)
●Tables●Views●Functions●Domains●Rules●Triggers●Indices●Sequences●Composite Types●Enum Types●Base Types●Aggregates●Operators
Objetos (Postgre)
http://www.alvarofpinheiro.eti.br
![Page 215: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/215.jpg)
●A grande vantagem dos vínculos de banco de dados é que eles permitem aosusuários acessarem dados de um banco de dados remoto de modo que elesfiquem conectados por meio do conjunto de privilégios do proprietário do objeto. Em outras palavras, um usuário local pode acessar um banco de dados remoto sem necessariamente ser um usuário do banco de dados remoto.
●Sintaxe:o Para criação de vínculo:
CREATE PUBLIC DATABASE LINK banco USING ‘usuário’;
o Para acessar dados: SELECT FROM objeto@banco;
Vínculos
http://www.alvarofpinheiro.eti.br
![Page 216: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/216.jpg)
Para haver comunicação entre uma página e um banco
de dados se usa SQL. A SQL Injection ou Injeção de
SQL é uma técnica muito fácil e muito poderosa. Não
são necessários scanners para achar sites vulneráveis e
os comandos são enviados diretamente no navegador.
O único pré-requisito para usar essa técnica é um
conhecimento básico de SQL, que são todos em inglês e
simples, dessa forma favorecendo a um invasor.
SQL Injection
http://www.alvarofpinheiro.eti.br
![Page 217: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/217.jpg)
Baseado no exemplo a seguir:
campo_usuario = Request.Form(“usuário”)
campo_senha = Request.Form(“senha”)
SELECT (usuario,senha) FROM cadastro
WHERE usuario=’ || campo_usuario || ‘
AND senha=’ || campo_senha || ‘
SQL Injection
http://www.alvarofpinheiro.eti.br
![Page 218: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/218.jpg)
Se o usuário e a senha estiverem corretos o login é
efetuado.
Se digitarmos um código malicioso, como ’ OR ‘1’=‘1´,
sempre o login será validado.
SELECT (usuario,senha) FROM cadastro
WHERE usuario=’ ‘ OR ‘1’=’1 ‘ AND senha=’ ‘ OR ‘1’=’1 ‘
SQL Injection
http://www.alvarofpinheiro.eti.br
![Page 219: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/219.jpg)
Pode-se usar o Google para achar páginas vulneráveis e
verificar como o login é feito nas páginas da web. Um dos testes
é usar o comando allinurl. Ele retornar somente páginas que
tenham determinados termos na URL.
Exemplos:
allinurl:”admin/index.asp”
allinurl:”admin/login.asp”
allinurl:”admin/default.asp”
allinurl:”admin/admin.asp”
SQL Injection
http://www.alvarofpinheiro.eti.br
![Page 220: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/220.jpg)
Uma forma de prevenção é nunca passar
valores diretamente em strings SQL e não
deixe claro a finalidade dos campos.
SQL Injection
http://www.alvarofpinheiro.eti.br
![Page 221: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/221.jpg)
Aula
http://www.alvarofpinheiro.eti.br
![Page 222: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/222.jpg)
Aula
http://www.alvarofpinheiro.eti.br
![Page 223: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/223.jpg)
Aula
http://www.alvarofpinheiro.eti.br
![Page 224: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/224.jpg)
Aula
http://www.alvarofpinheiro.eti.br
![Page 225: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/225.jpg)
Aula
http://www.alvarofpinheiro.eti.br
![Page 226: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/226.jpg)
Aula
http://www.alvarofpinheiro.eti.br
![Page 227: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/227.jpg)
Aula
http://www.alvarofpinheiro.eti.br
![Page 228: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/228.jpg)
Aula
http://www.alvarofpinheiro.eti.br
![Page 229: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/229.jpg)
Aula
http://www.alvarofpinheiro.eti.br
![Page 230: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/230.jpg)
Aula
http://www.alvarofpinheiro.eti.br
![Page 231: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/231.jpg)
Aula
http://www.alvarofpinheiro.eti.br
![Page 232: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/232.jpg)
Aula
http://www.alvarofpinheiro.eti.br
![Page 233: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/233.jpg)
Aula
http://www.alvarofpinheiro.eti.br
![Page 234: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/234.jpg)
http://www.alvarofpinheiro.eti.br
Exercício--Obs: utilizado SQL Server 2008 R2
--Estruturas
--Exemplo de dados: livro, periódico, revista, CD, DVD, ...
CREATE TABLE [dbo].[BIBLIO_TIPOSDEITENS] (
[ID_TDI] int IDENTITY(1, 1) NOT NULL,
[VC_TDI_ITEM] varchar(50) COLLATE SQL_Latin1_General_CP1_CI_AI NULL,
[NU_TDI_QTDEDIASDEVOLUCAO] int NULL,
CONSTRAINT [PK_BIBLIO_TIPOSDEITENS] PRIMARY KEY CLUSTERED ([ID_TDI])
)
ON [PRIMARY]
GO
--Exemplo de dados: português, inglês, espanhol, ...
CREATE TABLE [dbo].[BIBLIO_IDIOMAS] (
[ID_IDI] int IDENTITY(1, 1) NOT NULL,
[VC_IDI_NOME] varchar(50) COLLATE SQL_Latin1_General_CP1_CI_AI NULL,
CONSTRAINT [PK_BIBLIO_IDIOMAS] PRIMARY KEY CLUSTERED ([ID_IDI])
)
ON [PRIMARY]
GO
![Page 235: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/235.jpg)
http://www.alvarofpinheiro.eti.br
Exercício--Exemplo de dados: ltc, mcgrawhill, ...
CREATE TABLE [dbo].[BIBLIO_EDITORAS] (
[ID_EDI] int IDENTITY(1, 1) NOT NULL,
[VC_EDI_NOME] varchar(100) COLLATE SQL_Latin1_General_CP1_CI_AI NULL,
[VC_EDI_LOCALIZACAO] varchar(1000) COLLATE SQL_Latin1_General_CP1_CI_AI
NULL,
CONSTRAINT [PK_BIBLIO_EDITORAS] PRIMARY KEY CLUSTERED ([ID_EDI])
)
ON [PRIMARY]
GO
--Exemplo de dados: romance, ficcção, ... (são os gêneros)
CREATE TABLE [dbo].[BIBLIO_CLASSIFICACAOLITERARIA] (
[ID_CLA] int IDENTITY(1, 1) NOT NULL,
[VC_CLA_NOME] varchar(100) COLLATE SQL_Latin1_General_CP1_CI_AI NULL,
CONSTRAINT [PK_BIBLIO_CLASSIFICACAOLITERARIA] PRIMARY KEY
CLUSTERED ([ID_CLA])
)
ON [PRIMARY]
GO
![Page 236: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/236.jpg)
http://www.alvarofpinheiro.eti.br
Exercício--Exemplo de dados: roger presmann, ian summerville, ...
CREATE TABLE [dbo].[BIBLIO_AUTORES] (
[ID_AUT] int IDENTITY(1, 1) NOT NULL,
[VC_AUT_NOME] varchar(100) COLLATE SQL_Latin1_General_CP1_CI_AI NULL,
CONSTRAINT [PK_BIBLIO_AUTORES] PRIMARY KEY CLUSTERED ([ID_AUT])
)
ON [PRIMARY]
GO
![Page 237: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/237.jpg)
http://www.alvarofpinheiro.eti.br
Exercício--Exemplo de dados: engenharia de software, introdução a banco de dados, ...
CREATE TABLE [dbo].[BIBLIO_ACERVO] (
[ID_ACE] int IDENTITY(1, 1) NOT NULL,
[VC_ACE_TITULODAOBRA] varchar(500) COLLATE
SQL_Latin1_General_CP1_CI_AI NULL,
[VC_ACE_SUBTITULO] varchar(500) COLLATE SQL_Latin1_General_CP1_CI_AI
NULL,
[DT_ACE_AQUISICAO] varchar(10) COLLATE SQL_Latin1_General_CP1_CI_AI
NULL,
[VC_ACE_EXEMPLAR] varchar(10) COLLATE SQL_Latin1_General_CP1_CI_AI
NULL,
[VC_ACE_VOLUME] varchar(10) COLLATE SQL_Latin1_General_CP1_CI_AI NULL,
[NU_ACE_PERIODICO] varchar(10) COLLATE SQL_Latin1_General_CP1_CI_AI
NULL,
[VC_ACE_EDICAO] varchar(10) COLLATE SQL_Latin1_General_CP1_CI_AI NULL,
[ID_EDI] int NULL,
[ID_CLA] int NULL,
[ID_TDI] int NULL,
[ID_IDI] int NULL,
[NU_ACE_ANODAEDICAO] int NULL,
![Page 238: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/238.jpg)
http://www.alvarofpinheiro.eti.br
Exercício[NU_ACE_NUMPAGINAS] int NULL,
[VC_ACE_CUTTER] varchar(25) COLLATE SQL_Latin1_General_CP1_CI_AI NULL,
[VC_ACE_CDU] varchar(25) COLLATE SQL_Latin1_General_CP1_CI_AI NULL,
[VC_ACE_ISBN] varchar(25) COLLATE SQL_Latin1_General_CP1_CI_AI NULL,
[VC_ACE_ISNN] varchar(25) COLLATE SQL_Latin1_General_CP1_CI_AI NULL,
[BI_ACE_CAPA] image NULL,
[NU_ACE_CAPA] bigint NULL,
[VC_ACE_CAPA] varchar(50) COLLATE SQL_Latin1_General_CP1_CI_AI NULL,
[VC_ACE_DIGITALIZACAO] varchar(100) COLLATE SQL_Latin1_General_CP1_CI_AI
NULL,
CONSTRAINT [PK_BIBLIO_ACERVO] PRIMARY KEY CLUSTERED ([ID_ACE]),
CONSTRAINT [FK_BIBLIO_ACERVO_BIBLIO_CLASSIFICACAOLITERARIA]
FOREIGN KEY ([ID_CLA]) REFERENCES [dbo].[BIBLIO_CLASSIFICACAOLITERARIA]
([ID_CLA]) ON UPDATE CASCADE ON DELETE CASCADE,
CONSTRAINT [FK_BIBLIO_ACERVO_BIBLIO_EDITORAS] FOREIGN KEY ([ID_EDI])
REFERENCES [dbo].[BIBLIO_EDITORAS] ([ID_EDI]) ON UPDATE CASCADE ON
DELETE CASCADE,
CONSTRAINT [FK_BIBLIO_ACERVO_BIBLIO_IDIOMAS] FOREIGN KEY ([ID_IDI])
REFERENCES [dbo].[BIBLIO_IDIOMAS] ([ID_IDI]) ON UPDATE CASCADE ON
DELETE CASCADE,
![Page 239: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/239.jpg)
http://www.alvarofpinheiro.eti.br
ExercícioCONSTRAINT [FK_BIBLIO_ACERVO_BIBLIO_TIPOSDEITENS] FOREIGN KEY
([ID_TDI]) REFERENCES [dbo].[BIBLIO_TIPOSDEITENS] ([ID_TDI]) ON UPDATE
CASCADE ON DELETE CASCADE
)
ON [PRIMARY]
GO
CREATE TABLE [dbo].[BIBLIO_EMPRESTIMOS] (
[ID_EMP] int IDENTITY(1, 1) NOT NULL,
[ID_PES] int NOT NULL,
[ID_ACE] int NOT NULL,
[DT_EMP_EMPRESTIMO] varchar(10) COLLATE SQL_Latin1_General_CP1_CI_AI
NULL,
[DT_EMP_DEVOLUCAO] varchar(10) COLLATE SQL_Latin1_General_CP1_CI_AI
NULL,
CONSTRAINT [PK_BIBLIO_EMPRESTIMOS] PRIMARY KEY CLUSTERED
([ID_EMP])
)
ON [PRIMARY]
GO
![Page 240: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/240.jpg)
http://www.alvarofpinheiro.eti.br
Exercício--Questões
--1.Mostre os livros que tem ano de edição superior a 2000. (0,5)
SELECT ID_ACE, VC_ACE_TITULODAOBRA, NU_ACE_ANODAEDICAO
FROM BIBLIO_ACERVO
WHERE NU_ACE_ANODAEDICAO > 2000
ORDER BY NU_ACE_ANODAEDICAO;
--2.Mostre os livros cujos os títulos iniciem com A, E ou O. (0,5)
SELECT ID_ACE, VC_ACE_TITULODAOBRA
FROM BIBLIO_ACERVO
WHERE (VC_ACE_TITULODAOBRA LIKE 'A%')
OR (VC_ACE_TITULODAOBRA LIKE 'E%') OR
(VC_ACE_TITULODAOBRA LIKE 'O%');
--3.Mostre os livros que possuem apenas um autor. (0,5)
SELECT ACE.ID_ACE, ACE.VC_ACE_TITULODAOBRA, AUT.VC_AUT_NOME
FROM BIBLIO_ACERVOAUTORES AA
INNER JOIN BIBLIO_ACERVO ACE ON ACE.ID_ACE = AA.ID_ACE
INNER JOIN BIBLIO_AUTORES AUT ON AUT.ID_AUT = AA.ID_AUT
![Page 241: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/241.jpg)
http://www.alvarofpinheiro.eti.br
Exercício--4.Mostre os livros e o nomes dos autores das editoras de código 1, 2, 3 ou 4.
(0,5)
SELECT ACE.ID_ACE, ACE.VC_ACE_TITULODAOBRA, AUT.VC_AUT_NOME
FROM BIBLIO_ACERVOAUTORES AA
INNER JOIN BIBLIO_ACERVO ACE ON ACE.ID_ACE = AA.ID_ACE
INNER JOIN BIBLIO_AUTORES AUT ON AUT.ID_AUT = AA.ID_AUT
WHERE ACE.ID_EDI IN (1,2,3,4);
--5.Quais livros são encontrados nos gêneros ficção e romance, e quantos livros
desses livros existem por ano de edição. (0,5)
SELECT G.VC_CLA_NOME, A.NU_ACE_ANODAEDICAO, COUNT(A.ID_ACE) AS
QTDE
FROM BIBLIO_ACERVO A
INNER JOIN BIBLIO_CLASSIFICACAOLITERARIA G ON A.ID_CLA = G.ID_CLA
WHERE (G.VC_CLA_NOME LIKE '%FICÇÃO%')
OR (G.VC_CLA_NOME LIKE '%ROMANCE%')
GROUP BY G.VC_CLA_NOME, A.NU_ACE_ANODAEDICAO;
![Page 242: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/242.jpg)
http://www.alvarofpinheiro.eti.br
Exercício--6.Mostre os 10 livros que mais empréstimo possuem. (0,5)
SELECT TOP 10 A.ID_ACE, A.VC_ACE_TITULODAOBRA, COUNT(E.ID_EMP) AS
QTDE
FROM BIBLIO_EMPRESTIMOS E
INNER JOIN BIBLIO_ACERVO A ON E.ID_ACE = A.ID_ACE
GROUP BY A.ID_ACE, A.VC_ACE_TITULODAOBRA;
--7.Mostre todos os livros por tipo de itens. (0,5)
SELECT T.VC_TDI_ITEM, A.VC_ACE_TITULODAOBRA
FROM BIBLIO_ACERVO A
INNER JOIN BIBLIO_TIPOSDEITENS T ON A.ID_TDI = T.ID_TDI
ORDER BY 1,2;
![Page 243: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/243.jpg)
http://www.alvarofpinheiro.eti.br
Exercício--8.Mostre a quantidade de livros no acervo, quantos foram emprestados e
devolvidos no ano corrente. (0,5)
SELECT 'QTDE LIVROS NO ACERVO' AS TITULO, COUNT(A.ID_ACE) AS QTDE
FROM BIBLIO_ACERVO A
UNION
SELECT 'QTDE LIVROS EMPRESTADOS' AS TITULO, COUNT(E.ID_EMP) AS QTDE
FROM BIBLIO_EMPRESTIMOS E WHERE
CAST(SUBSTRING(E.DT_EMP_EMPRESTIMO, 7,4) AS INTEGER) =
YEAR(GETDATE())
UNION
SELECT 'QTDE LIVROS DEVOLVIDOS' AS TITULO, COUNT(E.ID_EMP) AS QTDE
FROM BIBLIO_EMPRESTIMOS E WHERE
CAST(SUBSTRING(E.DT_EMP_DEVOLUCAO, 7,4) AS INTEGER) =
YEAR(GETDATE());
--9.Mostre os gêneros que não possuem livros cadastrados. (0,5)
SELECT G.ID_CLA, G.VC_CLA_NOME
FROM BIBLIO_CLASSIFICACAOLITERARIA G
WHERE G.ID_CLA NOT IN
(SELECT DISTINCT A.ID_CLA FROM BIBLIO_ACERVO A)
![Page 244: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/244.jpg)
http://www.alvarofpinheiro.eti.br
Exercício--10.Mostre a média de empréstimo de livros por mês. (0,5)
SELECT SUBSTRING(E.DT_EMP_EMPRESTIMO,7,4) AS ANO,
SUBSTRING(E.DT_EMP_EMPRESTIMO,4,2) AS MES, AVG(E.ID_EMP) AS MEDIA
FROM BIBLIO_EMPRESTIMOS E
GROUP BY SUBSTRING(E.DT_EMP_EMPRESTIMO,7,4),
SUBSTRING(E.DT_EMP_EMPRESTIMO,4,2);
--11.Mostre os livros com a descrição de finos os que possuem até 100 páginas,
médios os que estejam entre 100 e 300 e grossos com mais de 300 páginas. (0,5)
SELECT A.ID_ACE, A.VC_ACE_TITULODAOBRA, A.NU_ACE_NUMPAGINAS,
CASE
WHEN A.NU_ACE_NUMPAGINAS < 100 THEN 'FINOS'
WHEN A.NU_ACE_NUMPAGINAS BETWEEN 100 AND 300 THEN 'MÉDIOS'
ELSE 'GROSSOS'
END AS ESPESSURA
FROM BIBLIO_ACERVO A;
![Page 245: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/245.jpg)
http://www.alvarofpinheiro.eti.br
Exercício--12.Mostre os livros por gênero com quantidade de empréstimos maior que 100.
(0,5)
SELECT G.VC_CLA_NOME, COUNT(E.ID_EMP) AS QTDE
FROM BIBLIO_ACERVO A
INNER JOIN BIBLIO_CLASSIFICACAOLITERARIA G ON A.ID_CLA = G.ID_CLA
INNER JOIN BIBLIO_EMPRESTIMOS E ON A.ID_ACE = E.ID_ACE
GROUP BY G.VC_CLA_NOME
HAVING COUNT(E.ID_EMP) > 100;
--13.Mostre os livros agrupados gênero e idioma. (0,5)
SELECT G.VC_CLA_NOME, I.VC_IDI_NOME
FROM BIBLIO_ACERVO A
INNER JOIN BIBLIO_CLASSIFICACAOLITERARIA G ON A.ID_CLA = G.ID_CLA
INNER JOIN BIBLIO_IDIOMAS I ON A.ID_IDI = I.ID_IDI
GROUP BY G.VC_CLA_NOME, I.VC_IDI_NOME;
![Page 246: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/246.jpg)
http://www.alvarofpinheiro.eti.br
Exercício--14.Mostre os 2 idiomas que possuem livros que mais são emprestados. (0,5)
SELECT TOP 2 I.VC_IDI_NOME, COUNT(E.ID_EMP)
FROM BIBLIO_ACERVO A
INNER JOIN BIBLIO_IDIOMAS I ON A.ID_IDI = I.ID_IDI
INNER JOIN BIBLIO_EMPRESTIMOS E ON A.ID_ACE = E.ID_ACE
GROUP BY I.VC_IDI_NOME
ORDER BY 2 DESC;
--15.Mostre os livros que não possuem classificação literária. (0,5)
SELECT A.VC_ACE_TITULODAOBRA
FROM BIBLIO_ACERVO A
WHERE ID_CLA IS NULL;
--16.Mostre os livros que nunca foram emprestados. (0,5)
SELECT A.VC_ACE_TITULODAOBRA
FROM BIBLIO_ACERVO A
WHERE A.ID_ACE NOT IN
(SELECT E.ID_ACE FROM BIBLIO_EMPRESTIMOS E);
![Page 247: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/247.jpg)
http://www.alvarofpinheiro.eti.br
Exercício--17.Mostre os livros por quantidade de gêneros e o total de livros no acervo. (0,5)
SELECT G.VC_CLA_NOME, COUNT(A.ID_ACE) AS QTDE
FROM BIBLIO_ACERVO A
INNER JOIN BIBLIO_CLASSIFICACAOLITERARIA G ON A.ID_CLA = G.ID_CLA
GROUP BY G.VC_CLA_NOME
UNION
SELECT 'TOTAL', COUNT(A.ID_ACE) AS QTDE
FROM BIBLIO_ACERVO A;
--18.Mostre os livros que tenham no mínimo um empréstimo. (0,5)
SELECT A.VC_ACE_TITULODAOBRA
FROM BIBLIO_ACERVO A
INNER JOIN BIBLIO_EMPRESTIMOS E ON A.ID_ACE = E.ID_ACE;
--19.Exibir a quantidade de livros agrupado por idioma com a quantidade menor
que 60. (0,5)
SELECT I.VC_IDI_NOME, COUNT(A.ID_ACE) AS QTDE
FROM BIBLIO_ACERVO A
INNER JOIN BIBLIO_IDIOMAS I ON A.ID_IDI = I.ID_IDI
GROUP BY I.VC_IDI_NOME
HAVING COUNT(A.ID_ACE) < 60;
![Page 248: Fundamentos de Banco de Dados Relacionais](https://reader036.fdocuments.net/reader036/viewer/2022081720/559b73bc1a28ab6f4f8b45b4/html5/thumbnails/248.jpg)
http://www.alvarofpinheiro.eti.br
Exercício--20.Quais os livros estão em atraso nas devoluções (prazo de 5 dias para
devolução). (0,5)
SELECT A.VC_ACE_TITULODAOBRA
FROM BIBLIO_ACERVO A
INNER JOIN BIBLIO_EMPRESTIMOS E ON A.ID_ACE = E.ID_ACE
WHERE GETDATE() > (CAST(E.DT_EMP_EMPRESTIMO AS DATETIME) + 5)
AND E.DT_EMP_DEVOLUCAO IS NULL;