SELECT Professor: Virgílio Fries Müller www. vfm.com.br Schedule: Timing Topic 40 minutes Lecture 25 minutes Practice 65 minutes Total
Select Schedule: Timing Topic 30 minutes Lecture 20 minutes Practice 50 minutes Total
O Comando SELECT SELECT identifica as colunas SELECT [DISTINCT] {*, column [alias],...} FROM table; SELECT identifica as colunas FROM identifica as tabelas
Selecionando linhas SQL> SELECT * 2 FROM depto; SQL> SELECT depto_num, depto_loc 2 FROM depto; SQL> SELECT enome, sal, sal+300 2 FROM emp; SQL> SELECT enome, sal, 12*sal+100 2 FROM emp; SQL> SELECT deptno, dname, loc 2 FROM dept;
Definindo Alias para Colunas SQL> SELECT enome AS nome, sal AS salario 2 FROM emp; NOME SALARIO ------------- --------- ... SQL> SELECT enome "Nome", 2 sal*12 “Salario Anual" 3 FROM emp; Nome Salario Anual ------------- ------------- ...
Eliminando Linhas Duplicadas DISTINCT SQL> SELECT DISTINCT depto_num 2 FROM emp; DEPTO_NUM --------- 10 20 30 SQL> SELECT DISTINCT deptno, job 2 FROM emp;
Restringindo consultas e ordenando resultados
Utilizando a Cláusula WHERE SQL> SELECT enome, cargo, depto_num 2 FROM emp 3 WHERE cargo='CAIXA'; ENOME CARGO DEPTO_NUM ---------- --------- --------- RONALDO CAIXA 30 MANUEL CAIXA 20 PAULO CAIXA 20 LUCIANO CAIXA 10
Operadores de Comparação = > >= < <= <> Significado Igual a Maior que Maior ou igual a Menor que Menor ou igual a Diferente de
Outros Operadores Operador BETWEEN ...AND... IN(lista) LIKE IS NULL Significado Entre dois valores (inclusive) Satisfaz uma lista de valores Satisfaz um padrão de caracteres É um valor nulo (null)
Operador BETWEEN SQL> SELECT enome, sal 2 FROM emp 3 WHERE sal BETWEEN 1000 AND 1500; ENOME SAL ---------- --------- MARIA 1250 SERGIO 1500 MATHEUS 1250 PAULO 1100 LUCIANO 1300 limite inferior superior
Operador IN SQL> SELECT enum, enome, sal, ger 2 FROM emp 3 WHERE ger IN (7902, 7566, 7788); ENUM ENOME SAL GER --------- ---------- --------- --------- 7902 JOSE 3000 7566 7369 MANUEL 800 7902 7788 FABIO 3000 7566 7876 PAULO 1100 7788
Operador LIKE Utilize o operador LIKE para realizar pesquisas por padrões (wildcards). % substitui zero ou mais caracteres _ substitui um único caracter SQL> SELECT enome 2 FROM emp 3 WHERE enome LIKE ‘M%'; SQL> SELECT ename, hiredate 2 FROM emp 3 WHERE hiredate LIKE '%81';
Operador IS NULL Testando valores nulos (null) SQL> SELECT enome, ger 2 FROM emp 3 WHERE ger IS NULL; ENOME GER ---------- --------- CARLOS SQL> SELECT ename, job, comm 2 FROM emp 3 WHERE comm IS NULL; ENAME JOB COMM -------- ----------- ------ KING PRESIDENT BLAKE MANAGER CLARK MANAGER ...
Operadores Lógicos Operador AND OR NOT Significado Retorna TRUE se a condição de ambos os componentes for TRUE Retorna TRUE se a condição de um dos componentes for TRUE Retorna TRUE se a condição for FALSE (vise-versa)
Operador NOT SQL> SELECT enome, cargo 2 FROM emp 3 WHERE cargo NOT IN('CAIXA','GERENTE','ANALISTA'); ENOME CARGO ---------- --------- CARLOS PRESIDENTE MARIA VENDEDOR CELSO VENDEDOR SERGIO VENDEDOR MATHEUS VENDEDOR
Cláusula ORDER BY SQL> SELECT enome, cargo, depto_num, dtinicio 2 FROM emp 3 ORDER BY dtinicio DESC; ENOME CARGO DEPTO_NUM DTINICIO ---------- --------- --------- --------- PAULO CAIXA 20 12-JAN-83 FABIO ANALISTA 20 09-DEC-82 LUCIANO CAIXA 10 23-JAN-82 RONALDO CAIXA 30 03-DEC-81 JOSE ANALISTA 20 03-DEC-81 CARLOS PRESIDENTE 10 17-NOV-81 MARIA VENDEDOR 30 28-SEP-81 ... 14 rows selected.
Manipulando dados
O Comando UPDATE Modificando linhas existentes com o comando UPDATE. Modifique mais de uma linha por vez especificando uma condição na cláusula WHERE. Não esqueça o COMMIT UPDATE table SET column = value [, column = value] [WHERE condition];
Atualizando linhas em uma tabela Linhas específicas podem ser modificadas utilizando a cláusula WHERE. Todas as linhas da tabela são modificadas se a cláusula WHERE for omitida. SQL> UPDATE emp 2 SET depto_num = 20 3 WHERE enum = 7782; 1 row updated. SQL> UPDATE emp 2 SET depto_num = 20; 14 rows updated. Note: The EMPLOYEE table has the same data as the EMP table. SQL> SELECT ename, deptno 2 FROM employee; ENAME DEPTNO ---------- --------- KING 20 BLAKE 20 CLARK 20 JONES 20 MARTIN 20 ALLEN 20 TURNER 20 ... 14 rows selected.
Eliminando Linhas de uma Tabela Linhas específicas podem ser eliminadas utilizando a cláusula WHERE. Todas as linhas da tabela são eliminadas se a cláusula WHERE for omitida. SQL> DELETE FROM depto 2 WHERE depto_nome = 'DESENVOLVIMENTO'; 1 row deleted. SQL> DELETE FROM depto; 4 rows deleted. SQL> SELECT * 2 FROM department 3 WHERE dname = 'DEVELOPMENT'; no rows selected. SQL> DELETE FROM emp 2 WHERE hiredate > TO_DATE('01.01.97', 'DD.MM.YY'); 1 row deleted.
Exibindo dados de múltiplas tabelas
Joins Utilize uma junção para consultar dados de mais de uma tabela. Especifique a condição de junção na cláusula WHERE. Informe o nome da tabela junto com o nome da coluna, se tabelas diferentes possuírem colunas com os mesmos nomes. SELECT table1.column, table2.column FROM table1, table2 WHERE table1.column1 = table2.column2;
Criando Alias para Tabelas SQL> SELECT emp.enum, emp.enome, emp.depto_num, 2 depto.depto_num, depto.depto_loc 3 FROM emp, depto 4 WHERE emp.depto_num = depto.depto_num; SQL> SELECT e.enum, e.enome, e.depto_num, 2 d.depto_num, d.depto_loc 3 FROM emp e, depto d 4 WHERE e.depto_num = d.depto_num;
Funções de Grupo (Agregação)
O que são Funções de Grupo? Funções de grupo operam em conjuntos de linhas, produzindo um resultado por grupo. EMP DEPTO_NUM SAL --------- --------- 10 2450 10 5000 10 1300 20 800 20 1100 20 3000 20 2975 30 1600 30 2850 30 1250 30 950 30 1500 “o maior salário da tabela EMP” MAX(SAL) --------- 5000
Tipos de Funções de Grupo AVG (média) COUNT (contagem) MAX (máximo) MIN (mínimo) SUM (soma)
Utilizando Funções de Grupo SELECT column, group_function(column) FROM table [WHERE condition] [ORDER BY column]; Class Management Note Stress the use of DISTINCT and group functions ignoring null values. ALL is the default and is very rarely specified.
Funções AVG e SUM Utilize o AVG e SUM apenas para dados numéricos SQL> SELECT AVG(sal), MAX(sal), 2 MIN(sal), SUM(sal) 3 FROM emp 4 WHERE cargo LIKE ‘VEND%'; AVG(SAL) MAX(SAL) MIN(SAL) SUM(SAL) -------- --------- --------- --------- 1400 1600 1250 5600
Funções MIN e MAX Utilize MIN e MAX para qualquer tipo de dado SQL> SELECT MIN(dtinicio), MAX(dtinicio) 2 FROM emp; MIN(DTINI MAX(DTINI --------- --------- 17-DEZ-80 12-JAN-83 SQL> SELECT MIN(ename), MAX(ename) 2 FROM emp; MIN(ENAME) MAX(ENAME) ---------- ---------- ADAMS WARD
Função COUNT COUNT(*) retorna o número de linhas na tabela SQL> SELECT COUNT(*) 2 FROM emp 3 WHERE depto_num = 30; COUNT(*) --------- 6 Class Management Note Demo: l5count1.sql, l5count2.sql Purpose: To illustrate using the COUNT(*) and COUNT(expr) functions.
Função COUNT COUNT(coluna) retorna o número de linhas não nulas da tabela SQL> SELECT COUNT(comis) 2 FROM emp 3 WHERE depto_num = 30; COUNT(COMIS) ------------ 4 SQL> SELECT COUNT(deptno) 2 FROM emp; COUNT(DEPTNO) ------------- 14 SQL> SELECT COUNT(DISTINCT (deptno)) 2 FROM emp; COUNT(DISTINCT(DEPTNO)) ----------------------- 3
Criando Grupos de Dados: A Cláusula GROUP BY SELECT column, group_function(column) FROM table [WHERE condition] [GROUP BY group_by_expression] [ORDER BY column]; Divida as linhas de uma tabela em pequenos grupos usando a cláusula GROUP BY.
A Cláusula GROUP BY Colunas utilizadas em funções de grupo não precisam estar listadas no GROUP BY. SQL> SELECT AVG(sal) 2 FROM emp 3 GROUP BY depto_num; AVG(SAL) --------- 2916.6667 2175 1566.6667 Class Management Note Demonstrate the query with and without the DEPTNO in the SELECT statement. SQL> SELECT deptno, AVG(sal) 2 FROM emp 3 GROUP BY deptno 4 ORDER BY AVG(sal); DEPTNO AVG(SAL) ---------- ------------ 30 1566.6667 20 2175 10 2916.6667
Criando Grupos de Dados EMP DEPTO_NUM SAL --------- --------- 10 2450 10 5000 10 1300 20 800 20 1100 20 3000 20 2975 30 1600 30 2850 30 1250 30 950 30 1500 2916.6667 DEPTO_NUM AVG(SAL) --------- --------- 10 2916.6667 20 2175 30 1566.6667 2175 “média salarial por departamento” 1566.6667
Utilizando GROUP BY em Múltiplas Colunas SQL> SELECT depto_num, cargo, sum(sal) 2 FROM emp 3 GROUP BY depto_num, cargo; DEPTO_NUM CARGO SUM(SAL) --------- --------- --------- 10 CAIXA 1300 10 GERENTE 2450 10 PRESIDENTE 5000 20 ANALISTA 6000 20 CAIXA 1900 ... 9 rows selected.
TRABALHANDO COM O BANCO DE DADOS REALIZADO NA AVALIAÇÃO Select * From disciplinas
Select estados.nome, Estados.siglas, Cidades.nome From Estados Inner join cidades On estados.id.estado = cidade.id_estado
resultado
Select a. nome as aluno, e. nome as estado. E. sigla, c Select a.nome as aluno, e.nome as estado. E.sigla, c.nome as cidade from alunos as a inner join cidades as c on c.id.cidade = a.id.cidade inner join estado as e on e.id_estado = c.id_estado
Resultado
FIM! POR FAVOR ESTUDE-ME EM CASA! Schedule: Timing Topic 30 minutes Lecture 20 minutes Practice 50 minutes Total