49
SISTEMAS DE INFORMAÇÃO BANCO DE DADOS SQL PROF: EDSON THIZON

Aula SQL Basico

Embed Size (px)

Citation preview

Page 1: Aula SQL Basico

SISTEMAS DE INFORMAÇÃOBANCO DE DADOS

SQL

PROF: EDSON THIZON

Page 2: Aula SQL Basico

Histórico Entre 1974 e 1979, o San José Research Laboratory da IBM desenvolveu um SGDB relacional que ficou conhecido como Sistema R.

Para a criação e acesso aos dados foi adotada uma linguagem chamada SEQUEL, mais tarde rebatizada SQL (Structured QueryLanguage).

Embora a query em sua definição, a SQL foi projetada de forma a permitir que além de consultas (queries), inserções, alterações e deleções fossem feitas, além da própria criação das tabelas e campos.

Dividiu-se a SQL então em duas partes:-DDL: Data Description Language (Linguagem de Descrição de Dados);-DML: Data Manipulation Language (Linguagem de Manipulação de Dados).

Page 3: Aula SQL Basico

Conceito

• SQL ( STRUCTURED QUERY LANGUAGE)

• Uma linguagem utilizada para consultar , atualizar e gerenciar Banco de Dados .

• Uma linguagem de aplicação para Banco de Dados relacionais , e não um sistema ou uma linguagem de programação .

Page 4: Aula SQL Basico

DDLA DDL, uma parte muito pequena da SQL, permite a criação e

manutenção do dicionário de dados. O dicionário de dados contém a definição de cada tabela, de cada campo, enfim, contém a definição da base de dados propriamente dita. Em outras palavras, o dicionário de dados guarda dados sobre os dados.

Embora existam algumas outras construções, a mais importante das construções da DDL é a destinada a criação de tabelas. Por exemplo, a sentença para a criação das tabelas funcionário, cidade, e setor, poderia ser como segue:

Adotada como padrão mundial pela ISSO em 1987, é uma linguagem exclusiva de banco de dados Cliente/Servidor;

Não dispõe dos seguinte recursos:- Repetição e desvio;- Comandos para manipulação de telas e impressão de relatórios;

Os Fabricantes de SGBD podem expandir a linguagem SQL padrão ANSI, desde que os comandos básicos sejam aceitos.

Page 5: Aula SQL Basico

DML

É a parte mais ampla da SQL. Permite pesquisar, alterar, incluir e deletar dados da base de dados. São quatro as sentenças mais importantes da DML:

• SELECT: permite a pesquisa de dados;• UPDATE: permite a atualização de dados;• DELETE: permite a deleção de dados;• INSERT: permite a inclusão de dados.

Page 6: Aula SQL Basico

LIMITES DO ORACLE RDBMS

ITEM LIMITETabela na Base de dados Não há limites.Linhas por Tabelas Não há limitesColunas por tabelas 254Indices por tabelas Não há limitesTebelas ou views joined emuma query

Não há limites

Niveis de ninho de subqueries 30Caracteres em um nome 255Colunas por índices 16

Page 7: Aula SQL Basico

TIPOS DE DADOS(DATATYPES)

TIPO DESCRIÇÃO DO TIPO DE DADOChar(n) Tamanho Fixo, pode conter uma seqüência de 1 a 255

bytes alfanuméricos;Varchar2(n) Tamanho Variável, pode conter uma seqüência de 1 a

2000 bytes - alfanuméricos.Long Tamanho Variável até 2 Gigabytes alfanuméricos

nota : só pode existir uma coluna long em cada tabelaNumber(p,s) Numérico com sinal e ponto decimal,

sendo precisão de 1 a 38 dígitosRaw Binário - Variável até 255 bytesLong Raw Binário - Variável até 2 gigabytes - imagemDate Data c/ hora, minuto e segundo

Page 8: Aula SQL Basico

Passos para utilizar o Banco de Dados Oracle :

1- Localize o ícone Start Database e execute-o;2- Localize o ícone SQL Plus e execute-o;3- Utilize o Usuário: SCOTT e a Senha: TIGER;

Tabelas utilizadas nos exemplos:

EMP ( EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO);EMPNO = Código do Empregado MGR = Código do GerenteENAME = Nome do Empregado SAL = SalárioJOB = Função do Empregado COMM = ComissãoHIREDATE= Data de Nascimento DEPTNO = Código Departamento

DEPT (DEPTNO, DNAME, LOC)DEPTNO = Código Departamento DNAME = Nome do Departamento LOC = Localização

SALGRADE (GRADE, LOSAL, HISAL)GRADE = Nível do Salário LOSAL = Menor Salário no Nível HISAL = Maior Salário no Nível

Page 9: Aula SQL Basico

Verificando estrutura da tabela

Desc EMP;

Desc DEPT;

Desc SALGRADE;

Page 10: Aula SQL Basico

SELECT- Lista os atributos desejados como resultados de uma consulta;- Corresponde a operação de projeção da álgebra relacional;- Lista de atributos pode ser substituído por “*” (todos);

From- Lista de relação (tabelas) a serem usados na execução da expressão;

WHERE-São definidos critérios de pesquisa envolvendo atributos das relações (tabelas) definidas na cláusula from ; -Corresponde ao predicado da operação de seleção da álgebra relacional;-Comando opcional;

Page 11: Aula SQL Basico

Exemplos:

1- Selecionar todos os atributos de cada empregado:SELECT *FROM emp;

2- Selecionar todos os empregados com emprego de Gerente (Manager) e ordenado por nome;

SELECT *FROM empWHERE job = ‘MANAGER’;

Page 12: Aula SQL Basico

Comparação de Valores• = Igual • > maior• >= Maior ou igual• < Menor• <= Menor ou igual• != Não Igual • <> Diferente

• And E• Or OU

Page 13: Aula SQL Basico

3- Selecionar os nomes de todos os empregados Gerentes com salários maior que R$ 500,00

SELECT enameFROM empWhere job = ‘MANAGER’ and sal > 500;

4- Selecionar o nome dos empregados do departamento 10 com salario maior que 600.

SELECT ENAME FROM EMP WHERE DEPTNO=10 AND SAL>600;

Page 14: Aula SQL Basico

Order By

- Especifica a seqüência de ordenação da tabela criada pela consulta; - Comando opcional;- Qualificador opcional : asc / desc.

Select A1, A2,...,AnFrom r1,r2,...rmWhere P

Onde A são os campos a serem selecionados, R são as tabelas, e P é uma condição.

Page 15: Aula SQL Basico

5- Selecionar o nome do empregado em ordem alfabética:

SELECT enameFROM empORDER BY ename;

6- Selecionar para cada empregado o seu nome e a sua função ordenado primeiramente por função e depois por empregado:

SELECT ename, jobFROM empORDER BY job, ename

Page 16: Aula SQL Basico

COMANDO DE COMPAÇÃO DE VALORES

Between

Faz uma pesquisa entre uma faixa de valores para um campo da tabela.

Not BetweenFaz uma pesquisa descartando uma faixa de valores.

Page 17: Aula SQL Basico

Exemplo

Selecionar todos empregados que tem comissao entre 0 e 1000

Select * from empwhere comm between 0 and 1000;

Selecionar o nome dos gerentes com salario entre 1000 e 3000.

SELECT ENAME FROM EMPWHERE JOB='MANAGER' AND SAL between 1000

AND 3000;

Page 18: Aula SQL Basico

INConsulta a presença de um campo em um conjunto de

valores

NOT IN

Consulta a não presença de um campo em um conjunto de valores

Page 19: Aula SQL Basico

Exemplo

Selecionar o nome dos empregados com códigos 7499, 7566, 7788.

SELECT EMPNO, ENAME FROM EMP WHERE EMPNO IN (7566,7788, 7499);

Selecionar o nome dos empregados que não possuem os códigos 7499, 7566, 7788.

SELECT EMPNO, ENAME FROM EMP WHERE EMPNO IN (7566,7788, 7499);

Page 20: Aula SQL Basico

Like

Compara a existência de uma caracter em uma determinada posição em uma string.‘_‘ Testa a existência de um caracter não nulo na posição;‘%’ representa qualquer seqüência de n caracteres.

Not Like

Compara a não existência de um caracter em uma determinada posição em uma string.

Page 21: Aula SQL Basico

Exemplo

Selecionar o nome e código dos empregados que o nome inicia com a letra 'C'.SELECT EMPNO,ENAME

FROM EMP WHERE ENAME LIKE 'C%';

SELECT * FROM EMPWHERE ENAME NOT LIKE ‘%FORD%’

Neste caso localiza todos os empregados que não possuem sobrenome “FORD” .

Page 22: Aula SQL Basico

Is Null

Verifica se o valor do campo comparado é zero ou vazio;

Is Not Null

Verifica se o valor do campo comparado não é zero ou vazio;

Page 23: Aula SQL Basico

Exemplo

Selecionar o nome, código e salario dos empregados que não possuem comm.

SELECT EMPNO,ENAME,SAL

FROM EMP

WHERE COMM IS NULL;

E os que possuem:

SELECT EMPNO,ENAME,SAL

FROM EMP

WHERE COMM IS NOT NULL;

Page 24: Aula SQL Basico

Operadores Aritméticos

+ adição

- Subtração

* Multiplicação

/ Divisão

Page 25: Aula SQL Basico

ExemploSelecionar o nome dos empregados, seu salário e o salário mais 300:

Select ename, sal, sal + 300

from emp

Selecionar o nome dos empregados, seu salário e 10 % do salário:

Select ename, sal, sal *0.10

from emp

Page 26: Aula SQL Basico

Usando Coluna Alias

Select ename As nome, sal salario

from emp;

Nome salario

------------------------- --------------

........

Page 27: Aula SQL Basico

Usando o comando de concatenação

Concatena colunas ou caracteres com outras colunas

(||)

Exemplo

Select ename ||job as “Empregado”

from emp

Page 28: Aula SQL Basico

Eliminando Linhas Duplicadas

Para Eliminar as linhas duplicadas use a palavra DISTINCT na cláusula SELECT.

Exemplo:

Select Distinct deptno

form emp;

Page 29: Aula SQL Basico

Lista de Exercícios 1

Page 30: Aula SQL Basico

Funções Numéricas

retorna a raiz quadrada de 25SQRT(25)SQRT

Se SAL maior que O retorna +1

Se SAL menor que 0 retorna -1

Se SaL igual a 0 retorna 0.

Sign(sal)Sign

Retorna o sal elevado ao quadrado.

Power(sal,2)Power

Retorna o resto da divisão de sal/comm

Mod(sal,comm)Mod

Sal é truncado para 2 dígitos após o ponto decimal.

TRUNC(SAL,2)Trunc

sal é arredondado para 2 casas apos o ponto decimal

ROUND(SAL,2)Round

NVL NVL(COMM,0) se o valor for nulo é substituído por 0

Page 31: Aula SQL Basico

ExemploSelecionar o nome dos empregados, seu salário e o salário mais 300 com duas casas decimais:

Select ename, round(sal,2), round(sal + 300,2)

from emp

Selecionar o nome dos empregados, seu salário e 10 % do salário sem nenhuma casa decimal:

Select ename, sal, trunc(sal *0.10)

from emp

Page 32: Aula SQL Basico

Funções de data

TRUNCA A DATA PARA A PRIMEIRA DATA DO 'FMT'

TRUNC(SYSDATE,FMT)TRUNC

RETORNA A DATA TOMANDO COMO PARAMETRO O 'FMT'

LAST_DAY(SYSDATE)LAST_DAY

PROCURA UMA SEXTA-FEIRA APÓS HIREDATE

NEXT_DAY(HIREDATE,'FRIDAY')

NEXT_DAY

CALCULA O NÚMERO DE MESES BETWEEN ENTRE AS DATAS

MONTHS_BETWEEN(HIREDATE,SYSDATE)

MONTHS_BETWEEN

ADICIONA 5 MESES NA DATA HIREDATE

ADD_MONTHS(HIREDATE,5)ADD_MONTHS

Page 33: Aula SQL Basico

Funções de caracteres

RETORNA UMA PARTE DA STRING, PASSADO O CARACTER INICIAL E A QUANTIDADE A RETORNAR

SUBSTR(JOB,1,3)Substr

RETORNA A STRING EM MAIÚSCULO

UPPER(ENAME)Upper

RETORNA A STRING EM MINÚSCULO

LOWER(ENAME)Lower

RETORNA O NÚMERO DE CARACTERES QUE A STRING POSSUI

LENGTH(ENAME)length

RETORNA A STRING COM A PRIMEIRA LETRA EM MAIÚSCULO

INITCAP(ENAME)initcap

TRIM TRIM(JOB) retira os espaços em brancoda direita e esquerda

Page 34: Aula SQL Basico

Funções de conversão

CONVERTE AS 3 ULTIMAS (EM FORMATO CHAR) PARA MUMBER.

TO_NUMBER(SUBSTR(‘$150’,2,3))

TO_NUMBER

CONVERTE COLUNAS DO TIPO CHAR PARA O FORMATO DE DATA.

TO_DATE(‘15/05/90’,’DD/MM/YY’)

TO_DATE

CONVERTE COLUNAS DO TIPO NUMBER E DATA PARA CHAR.

TO_CHAR(SYSDADE,’YY’)TO_CHAR

ResultadoExemploFunções

Page 35: Aula SQL Basico

FUNÇÕESAVG ([DISTINCT | ALL] n) - valor médio de n, ignorando valores nulos.

COUNT ([DISTINCT | ALL] expr * ) - número de vezes que a expressão de número EXPR avalia algo diferente de NULO. '*' faz com que COUNT conte todas as linhas selecionadas, incluindo duplicadas e linhas com nulos.

MAX ([DISTINCT | ALL] expr) - valor máximo de exprMIN ([DISTINCT | ALL] expr) - valor mínimo de minSUM ([DISTINCT | ALL] n) - soma os valores de n ignorando valores nulosNVL(expr, 0) - converte um valor nulo.

Exemplo

Select max(sal), Min(sal)from emp;

Page 36: Aula SQL Basico

Exemplo

Selecionar a média de salário.

SELECT AVG(SAL)

FROM EMP;

Selecionar a quantidade de empregados.

SELECT COUNT(ENAME)

FROM EMP;

Selecionar total de salário pago pela empresa.

SELECT SUM(SAL)

FROM EMP;

Selecionar o maior salario entre os gerentes.

SELECT MAX(SAL)

FROM EMP

WHERE JOB='MANAGER';

Page 37: Aula SQL Basico

GROUP BY

Forma grupos com as tuplas da tabela especificada na cláusula from, que possuem o mesmo valor no atributo especificado na cláusula grupo by;

Para ter resultado em ordem, deve ser especificado também a clausula order by(após a clausula group by).

Exemplo

Select deptno, count(empno)from empgroup by deptno;

REGRA PARA UTILIZAR FUNÇÕES DE GRUPO: Se você incluir uma função de grupo em um comando SELECT, você não pode selecionar resultados individuais a menos que a coluna individual apareça na cláusula GROUP BY.

Page 38: Aula SQL Basico

ExemplosSelecionar a média salarial de cada departamento.

- SELECT AVG(SAL), DEPTNO

FROM EMP

GROUP BY DEPTNO;

Selecionar a média salarial de cada profissão.

- SELECT AVG(SAL), JOB

FROM EMP

GROUP BY JOB;

Page 39: Aula SQL Basico

HAVING

Having é para os grupos o que o where é para as linhas. Em outras palavras, é utilizado para eliminar grupos, onde where é utilizado para eliminar linhas.

Exemplo:Select curso_alu, avg(idade)from alunosgroup by curso_aluhaving aveg(idade) > 18;

Page 40: Aula SQL Basico

Exemplos• Selecionar a mediA de salario dos departamentos

com media superiora 700.SELECT AVG(SAL), DEPTNO

FROM EMPGROUP BY DEPTNOHAVING AVG(SAL)>700;

• Selecionar a media salarial das funções com media inferior a 1550.

SELECT AVG(SAL), JOB FROM EMPGROUP BY JOB HAVING AVG(SAL)<1550;

Page 41: Aula SQL Basico

Lista de Exercícios 2

Page 42: Aula SQL Basico

Subconsultas (básica)

Exemplos:

1- Empregados que possuem salário maior do que a média:

SELECT ENAME, SAL

FROM EMP

WHERE SAL > (SELECT AVG(SAL) FROM EMP);

Page 43: Aula SQL Basico

Cont...

Exemplos:

2- Empregados que possuem salário menor do que a média dos MANAGER com seu respectivo cargo:

SELECT ENAME, SOB, SAL

FROM EMP

WHERE SAL < (SELECT AVG(SAL) FROM EMP WHERE JOB = ‘MANAGER’);

Page 44: Aula SQL Basico

Junções (JOIN)

EQUI-JOIN

O relacionamento entre a tabela EMP e a tabela DEPT é um EQUI-JOIN, onde os valores na coluna DEPTNO em ambas as tabelas são iguais. O operador de comparação ' = ' é utilizado.

A condição de Join é especificada na cláusula WHERE.Para juntar as duas tabelas EMP e DEPT, digite:

SELECT ENAME, JOB, DNAMEFROM EMP, DEPTWHERE EMP.DEPTNO = DEPT.DEPTNO;

Page 45: Aula SQL Basico

Cont...

Caso deseje-se listar colunas que são ambíguas para ambas as tabelas, deve-se especificar no nome da tabela ANTES DO nome da coluna desejada. Exemplo:

SELECT DEPT.DEPTNO, ENAME, JOB, DNAMEFROM EMP, DEPTWHERE DEPT.DEPTNO = EMP.DEPTNOORDER BY DEPT.DEPTNO;

Page 46: Aula SQL Basico

Cont..NON- EQUI-JOIN

O relacionamento entre EMP e SALGRADE caracteriza um NON-EQUI-JOIN, onde nenhuma coluna em EMP corresponde diretamente a uma coluna em SALGRADE. Neste caso, um operador diferente do = precisa ser utilizado. No caso abaixo utilizamos o BETWEEN. Para determinar a qual faixa salarial um determinado empregado se encaixa, usamos:

SELECT E.ENAME, E.SAL, S.GRADEFROM EMP E, SALGRADE SWHERE E.SAL BETWEEN S.LOSAL AND S.HISAL;

Page 47: Aula SQL Basico

DICA:

o número de joins = número de tabelas - 1

Page 48: Aula SQL Basico

Lista de Exercícios 3

Page 49: Aula SQL Basico

Rodando um Script no SQL Plus

• Para rodar um Script digite:

• @CAMINHO DO ARQUIVO

Exemplo:@c:\aeroporto_exercicios_revisao.sql