SQL BÁSICO Prof. Suelane Garcia Introdução 2 Linguagem SQL (Structured Query Language) Linguagem de Consulta Estruturada padrão para acesso a Banco de Dados. Usada em inúmeros Sistemas de Gerenciamento de Banco de Dados Relacional (SGBDR), como: MySQL; SQL Server; Oracle; Sybase; ACCESS; DB2; PostgreSQL. Cada gerenciador de banco de dados pode usar um "dialeto" do SQL, como: T-SQL (Transaction Structured Query Language) utilizado no SQL Server; PL/SQL utilizado pelo Oracle, JET SQL utilizado pelo Access)
Introdução 3 Modelo de Banco de Dados Este modelo de banco de dados que será utilizado ao longo do curso como base para a realização dos exercícios práticos. Modelo Conceitual - Sistema de Controle de Vinícola Introdução 4 Modelo Físico Tabelas Modelo Físico - Sistema de Controle de Vinícola
5 Grupos de Comandos SQL Linguagem SQL 6 Grupos de Comandos DDL (Data Definition Language) DML (Data Manipulation Language) CREATE DATABASE DROP DATABASE CREATE TABLE DROP TABLE ALTER TABLE CREATE INDEX DROP INDEX ALTER INDEX TRUNCATE INSERT UPDATE DELETE DQL (Data Query Language) DCL (Data Control Language) SELECT GRANT REVOKE
7 Criando e Eliminando Banco de Dados Criando e Eliminando Banco de Dados 8 CREATE DATABASE: comando utilizado para criar um banco de dados. CREATE DATABASE <nome-banco> CREATE DATABASE VINICOLA DROP DATABASE: comando utilizado para excluir um banco de dados. DROP DATABASE <nome-banco> DROP DATABASE VINICOLA
9 Criando a Estrutura de Tabelas CREATE TABLE Criando a Estrutura de Tabelas 10 CREATE TABLE: comando utilizado para criar uma tabela no banco de dados. CREATE TABLE <nome-tabela> ( <nome-coluna1><tipo-de-dado><constraint-coluna>, <nome-coluna2><tipo-de-dado><constraint-coluna>, <constraints-de-tabela>)
Criando a Estrutura de Tabelas 11 Tipos de Dados Criando a Estrutura de Tabelas 12 CREATE TABLE Reserva( CPF INTEGER NOT NULL, Num_Vinho INTEGER NOT NULL, Ano INTEGER, qtde varchar(4), Valor FLOAT, PRIMARY KEY(CPF, Num_Vinho), FOREIGN KEY (CPF) REFERENCES cliente(cpf), FOREIGN KEY (Num_Vinho) REFERENCES vinho(num_vinho) )
Criando a Estrutura de Tabelas 13 Tipos de Constraints (Restrições) Tipos de Constraints (Restrições) 14 CHAVE PRIMÀRIA (Primary Key): é a coluna, ou grupo de colunas, que permite identificar um único registro na tabela. A chave primária pode ser simples (contem um campo) ou composta (contem dois campos ou mais). 1- Chave primária simples CREATE TABLE CLIENTE ( CPF INTEGER NOT NULL PRIMARY KEY, Nome_Cliente VARCHAR(50) NULL ) 2 Chave primária simples CREATE TABLE CLIENTE ( CPF INTEGER NOT NULL, Nome_Cliente VARCHAR(50) NULL, PRIMARY KEY (CPF) )
Tipos de Constraints (Restrições) 15 CHAVE PRIMÁRIA 3 Chave primária composta CREATE TABLE Reserva( CPF INTEGER NOT NULL, Num_Vinho INTEGER NOT NULL, Ano INTEGER, qtde varchar(4), Valor FLOAT, PRIMARY KEY (CPF, Num_Vinho), FOREIGN KEY (CPF) REFERENCES Clientes(CPF), FOREIGN KEY (Num_Vinho) REFERENCES Vinhos(Num_Vinho)) Tipos de Constraints (Restrições) 16 CHAVE ESTRANGEIRA (Foreign Key): é o campo que estabelece o relacionamento entre duas tabelas. FOREIGN KEY (nome-coluna) REFERENCES <nome-tabela>(nome-coluna-referenciada) ON UPDATE <acao> ON DELETE <acao> Obs.: A opção acao determina qual ação o banco de dados deve tomar quando for excluída ou alterada uma linha da tabela que contém referência a esta chave. Pode ser: - SET NULL: altera o conteúdo da coluna para nulo, perdendo a referência, sem deixar valores inconsistentes; - SET DEFAULT: altera o conteúdo da coluna para o valor especificado na cláusula DEFAULT se houver; - CASCADE: exclui ou altera todos os registros que se relacionam a eles; - NO ACTION: em caso de alteração, não modifica os valores que se relacionam a eles; - RESTRICT: não permite a exclusão da chave primária.
Tipos de Constraints (Restrições) 17 CHAVE ESTRANGEIRA 1 Chave estrangeira CREATE TABLE Reserva( CPF INTEGER NOT NULL, Num_Vinho INTEGER NOT NULL, Ano INTEGER, qtde varchar(4), Valor FLOAT, PRIMARY KEY (CPF, Num_Vinho), FOREIGN KEY (CPF) REFERENCES Clientes(CPF), FOREIGN KEY (Num_Vinho) REFERENCES Vinhos(Num_Vinho)) Tipos de Constraints (Restrições) 18 CHAVE ESTRANGEIRA - A Cláusula ON DELETE CASCADE e ON UPDATE CASCADE A utilização de uma cláusula ON DELETE CASCATE em uma declaração de constraint de FOREIGN KEY especifica que se houver uma tentativa de apagar uma linha com uma chave primária referenciada por chaves estrangeiras em linhas existentes em outras tabelas, também serão apagadas todas as linhas que contém essas chaves estrangeiras. 2 Chave estrangeira com cláusula CASCADE CREATE TABLE Reserva( CPF INTEGER NOT NULL, Num_Vinho INTEGER NOT NULL, Ano INTEGER, qtde varchar(4), Valor FLOAT, PRIMARY KEY (CPF, Num_Vinho), FOREIGN KEY (CPF) REFERENCES Clientes(CPF), FOREIGN KEY (Num_Vinho) REFERENCES Vinhos(Num_Vinho) ON DELETE CASCADE, ON UPDATE CASCADE )
Tipos de Constraints (Restrições) 19 DEFAULT: utilizada para atribuir um conteúdo-padrão a uma coluna da tabela, sempre que for incluída uma nova linha da tabela. CREATE TABLE Vinho ( Num_Vinho INTEGER NOT NULL, Nome_Vinho VARCHAR(50) NOT NULL, Cod_Tipo_Vinho integer DEFAULT 5, PRIMARY KEY (Num_Vinho) ) UNIQUE: Indica que não pode haver repetição no conteúdo da coluna. CREATE TABLE Vinicola ( Cod_Vinicola integer PRIMARY KEY, Nome_Vinicola varchar(50) UNIQUE, End_Vinicola varchar (100) ) Tipos de Constraints (Restrições) 20 NOT NULL: Indica que o conteúdo de uma coluna não poderá ser Nulo. CREATE TABLE Vinho ( Num_Vinho INTEGER NOT NULL, Nome_Vinho VARCHAR(50) NULL, Cod_Tipo_Vinho integer, PRIMARY KEY (Num_Vinho) ) CHECK: utilizada para criar um domínio para uma coluna. CREATE TABLE Vinho ( Num_Vinho INTEGER NOT NULL, Nome_Vinho VARCHAR(50) NOT NULL, Cod_Tipo_Vinho Integer CHECK (Cod_Tipo_Vinho = 1 OR Cod_Tipo_Vinho) = 5), PRIMARY KEY (Num_Vinho))
21 Excluindo a Estrutura de Tabelas DROP TABLE Excluindo a Estrutura de Tabelas 22 DROP TABLE: comando utilizado para excluir uma tabela do banco de dados. DROP TABLE <nome_tabela> DROP TABLE CLIENTE
23 Alteração de Estrutura de Tabela ALTER TABLE Alteração de Estrutura da Tabela 24 ALTER TABLE: utilizado para alterar a estrutura de uma tabela, como inclusão/exclusão de campos e constraints e alteração de tipo de dados. 1. Adicionando uma coluna ALTER TABLE <nome-tabela> ADD <nome-coluna> <tipo-de-dado><constraints> ALTER TABLE cliente ADD email VARCHAR (80) 2. Excluindo uma coluna ALTER TABLE <nome-tabela> DROP COLUMN <nome-coluna> ALTER TABLE cliente DROP COLUMN email
Alteração de Estrutura da Tabela 25 ALTER TABLE 3. Alterando uma coluna ALTER TABLE <nome-tabela> ALTER COLUMN <nome-coluna><tipo-dado><constraints> ALTER TABLE cliente ALTER COLUMN nome_cliente VARCHAR (60) NULL 4. Adicionando uma restrição (constraint) ALTER TABLE <nome-tabela> ADD <constraint> ALTER TABLE Cliente ADD PRIMARY KEY (cod_cliente) Alteração de Estrutura da Tabela 26 ALTER TABLE 5. Excluindo uma restrição (constraint) ALTER TABLE <nome-tabela> DROP CONSTRAINT <constraint> ALTER TABLE Cliente DROP CONSTRAINT PK CLIENTE 7C8480AE 6. Renomeia uma coluna sp_rename '<nome-tabela>.<nome-coluna>', 'nome-coluna-novo', 'COLUMN' sp_rename 'Vinho.tipo_vinho', 'cod_tipo_vinho', 'COLUMN'
Alteração de Estrutura da Tabela 27 ALTER TABLE 7. Renomeia uma tabela sp_rename '<nome-tabela-atual>.'<nome-tabela-novo>' sp_rename 'Vinho', 'VinhoNovo' 8. Renomeia o banco de dados sp_renamedb '<nome-banco-atual>.'<nome-banco-novo>' sp_renamedb 'Vinicola', 'Vinicola_Nova' 28 Criando, Excluindo e Alterando Índice CREATE INDEX DROP INDEX ALTER INDEX
Criando, Excluindo e Alterando Índice 29 CREATE INDEX: recurso físico que visa otimizar a recuperação de uma informação por um método de acesso. O índice serve para prover um acesso rápido a linhas das tabelas. CREATE [UNIQUE] INDEX <nome-indice> ON tabela (coluna [, coluna,...] [ASC I DESC]) Opção Descrição UNIQUE Nome-indice Tabela Coluna Identifica que esse índice não permite repetição de conteúdo da chave (lista de colunas) Nome do objeto que será criado Nome da tabela que contém a(s) coluna(s) Lista de colunas que compõem a chave de indexação ASC Determina que a ordem de indexação será ascendente. É o padrão. DESC Determina que a ordem de indexação será descendente. Criando, Excluindo e Alterando Índice 30 CREATE INDEX 1 cria índice para um campo. CREATE INDEX xcliente ON Cliente (nome_cliente) 2 cria índice com UNIQUE CREATE UNIQUE INDEX xcliente ON Cliente (nome_cliente) 3 cria índice com ordenação definida CREATE INDEX xcodcliente ON Cliente (codcliente DESC) 4 cria índice com dois campos CREATE INDEX xcidade ON Cidade (SGESTADO, CDCIDADE)
Criando, Excluindo e Alterando Índice 31 DROP INDEX: Exclui o índice de uma tabela. DROP INDEX <nome-tabela>.<nome-indice> DROP INDEX Cliente.xCliente ALTER INDEX: Altera o índice de uma tabela. 1 Recriando um índice ALTER INDEX xcliente ON Cliente.Cod_Cliente REBUILD; 2 Desabilitando um índice ALTER INDEX xcliente ON Cliente.Cod_Cliente DISABLE 32 Controle de Permissão de Acesso GRANT REVOKE
Controle de Permissão de Acesso 33 GRANT: garantia de privilégios de acesso. GRANT {ALL lista-privilegios} ON { nome-tabela/view [lista-colunas]} TO {public lista-usuarios} [WITH GRANT OPTION] Controle de Permissão de Acesso 34 GRANT 1: Permite só consultas ao usuário Felipe na tabela Cliente. GRANT SELECT ON Cliente TO Felipe WITH GRANT OPTION 2: Concede ao usuário sa os privilégios de seleção, inclusão e alteração na tabela Cliente. GRANT SELECT, INSERT, UPDATE ON Cliente TO sa 3: Permite todos os privilégios a todos os usuários sobre a tabela cliente. GRANT ALL PRIVILEGES ON cliente TO public 4: Concede aos usuários Felipe e Mauricio o privilégio de seleção na tabela Cliente. GRANT SELECT ON cliente TO Felipe, Mauricio
Controle de Permissão de Acesso 35 REVOKE: revoga os privilégios de acesso. REVOKE [lista-privilegios] ON [nome-tabela/view] FROM [lista-usuários] 1: Retirar o privilégio de seleção sobre a tabela Cliente do usuário Mauricio REVOKE select ON Cliente FROM Mauricio 2: Revogar os privilégios de selecionar concedidos a todos os usuários sobre a tabela Cliente. REVOKE select ON Cliente FROM public 3: Retirar os privilégios de atualização e inserção concedidos ao usuário sa sobre a tabela Cliente. REVOKE insert, update ON Cliente FROM sa 36 Manipulando dados INSERT DELETE UPDATE
Manipulação de Dados - INSERT 37 INSERT: Inclui registros (linhas) em tabelas INSERT INTO <nome-tabela> (<lista-colunas>) VALUES (<lista-valores) 1: INSERT INTO Cliente VALUES (1, Mariana Ximenes, '25251454') 2: INSERT INTO Clientes (CPF, Nome_Cliente, Tel_Cliente) VALUES (1, 'Mariana Ximenes', '25251454') Manipulação de Dados - INSERT 38 INSERT Inserindo Registros Usando um SELECT INSERT INTO <nome-tabela> (<lista-de-colunas>) SELECT <lista-de-colunas> FROM <nome-tabela> WHERE <condicao-de-selecao>; 1 INSERT INTO tmpvinho SELECT * FROM Vinho 2 INSERT INTO tmpvinho (Num_Vinho, Nome_Vinho) SELECT Num_Vinho, Nome_Vinho FROM Vinho 3 INSERT INTO tmpvinho SELECT Num_vinho, valor * 1.33 FROM Reserva
39 Manipulando dados DELETE TRUNCATE Manipulação de Dados - DELETE 40 DELETE: Permite excluir linhas da tabela. DELETE FROM <nome-tabela> WHERE <condicao-de-selecao> Quando utiliza-se a cláusula WHERE, as linhas especificadas serão excluídas 1: DELETE FROM cliente WHERE cod_cliente = 10 Quando a cláusula WHERE é omitida, todas as linhas da tabela serão excluídas. 2: DELETE FROM cliente
Manipulação de Dados - TRUNCATE 41 TRUNCATE TABLE Remove todas as linhas de uma tabela sem registrar as exclusões de linhas individuais. TRUNCATE TABLE é mais rápida e utiliza menos recursos de sistema e log de transações. TRUNCATE TABLE <nome-tabela> TRUNCATE TABLE Cliente Obs.: O TRUNCATE é um comando de definição de estrutura de dados (DDL). 42 Manipulando dados UPDATE
Manipulação de Dados - UPDATE 43 UPDATE: Permite alterar o conteúdo de um campo ou mais campos. UPDATE <nome-tabela> SET {<nome-coluna> = <expressao>} WHERE <condicao-de-selecao>; 1: alterando um campo UPDATE Reserva SET Valor = 50 WHERE Ano = 2013 2: alterando três campos UPDATE Reserva SET Valor = 50, qtde = 30, ano = '2012' WHERE Ano = 2013 3: alterando o campo com valor calculado UPDATE Reserva SET Valor = Valor * 2.5 WHERE Ano = 2013 4: alterando um campo com valor calculado de dois campos UPDATE Reserva SET Valor = Valor * Qtde WHERE Ano = 2013 44 Recuperando dados com a instrução SELECT
Recuperando dados com o SELECT 45 SELECT SELECT * {DISTINCT nome-coluna expressao [alias} FROM <nome-tabela> SELECT identifica as colunas a serem exibidas FROM identifica a tabela que contem essas colunas Recuperando dados com o SELECT 46 SELECT Selecionando todas as colunas 1: declarando todos os campos da tabela SELECT cpf, nome_cliente, Tel_Cliente FROM Cliente 2: utilizando o asterisco (*). SELECT * FROM Cliente Selecionando colunas específicas : declarando apenas algumas colunas da tabela. SELECT cpf, nome_cliente FROM Cliente
Recuperando dados com o SELECT 47 SELECT com DISTINCT O DISTINCT é utilizado para eliminar linhas duplicadas no resultado. 1 SELECT DISTINCT Tipo_Vinho FROM Vinho 2 SELECT DISTINCT cpf, nome_cliente FROM Cliente Recuperando dados com o SELECT 48 Ordenando o Resultado (ORDER BY) SELECT <lista-colunas> FROM <nome-tabela> WHERE <condicao-de-selecao> ORDER BY {<nome-coluna> <num-col> [ASC DESC]}
Recuperando dados com o SELECT 49 Ordenando o Resultado (ORDER BY) 1: ordenação ascendente SELECT Nome_Cliente FROM Cliente ORDER BY Nome_Cliente ASC 2: ordenação descendente SELECT Nome_Cliente FROM Cliente ORDER BY Nome_Cliente DESC 3: ordenação descendente SELECT Nome_Cliente FROM Cliente ORDER BY Nome_Cliente DESC, CPF 4: ordenação pela posição da coluna no select SELECT Nome_Cliente FROM Cliente ORDER BY 1 Obs.: Caso tenha mais de um campo para ser ordenado, o gerenciador de banco de dados primeiro ordenará pelo primeiro campo, em seguida pelo segundo e assim por diante. Recuperando dados com o SELECT 50 Usando Apelidos de Consulta (Alias) : Apelido para coluna (Campo) Sem aspas SELECT Cod_Vinicola AS Vinho, Nome_Vinicola AS Vinicola FROM vinicola Com aspas SELECT Cod_Vinicola AS "Número Vinícola", End_Vinicola END FROM vinicola : Apelido para tabela SELECT End_Vinicola END FROM vinicola AS A
Recuperando dados com o SELECT 51 Operadores Aritméticos 1 SELECT NUM_VINHO, VALOR + 200 FROM Reserva 2 SELECT NUM_VINHO, (VALOR * qtde) FROM Reserva Operador Descrição + Somar - Subtrair * Multiplicar / Dividir Operador de Concatenação Um operador de concatenação: Vincula colunas ou strings de caracteres a outras colunas; É representado por + (sinal de soma). : SELECT NOME_VINHO + ' - ' + TIPO_VINHO FROM VINHOS Recuperando dados com o SELECT 52 Filtrando as linhas retornadas usando a cláusula WHERE A cláusula WHERE é especificada após a cláusula FROM. Quando a condição definida for verdadeira, a linha será mostrada, do contrário não mostrará a linha. SELECT * {DISTINCT <nome-coluna> expressao [alias} FROM <nome-tabela> WHERE <condicao> : declarando apenas algumas colunas da tabela. SELECT cpf, nome_cliente FROM Cliente WHERE cpf > 26072418414
Recuperando dados com o SELECT 53 Operadores Relacionais Operador Significado = Igual Cod_Cliente = 1 < Menor que Cod_Cliente < 12 <= Menor ou igual a Cod_Cliente <= 12 > Maior que Cod_Cliente > 20 >= Maior ou igual a Cod_Cliente > = 20!= ou <> Diferente Cod_Cliente!= 10 Cod_Cliente <> 10 SELECT Nome_Cliente FROM Cliente WHERE (Cod_Cliente >= 10 AND Cod_Cliente <= 100) Recuperando dados com o SELECT 54 Operadores Lógicos Operador Significado AND E condição 1 AND condição 2 OR Ou condição 1 OR condição 2 NOT Não/Negação NOT condição Usando o Operador AND AND exige que as duas condições sejam verdadeiras. SELECT Num_Vinho, Ano FROM RESERVA WHERE Num_Vinho > 100 AND ANO = 2013
Recuperando dados com o SELECT 55 Usando o Operador OR OR exige que uma das condições seja verdadeira. SELECT Num_Vinho, Ano FROM RESERVA WHERE Num_Vinho > 100 OR ANO = 2013 Usando o Operador NOT NOT É utilizado para inverter o resultado de uma expressão lógica, negando o resultado da condição. SELECT Num_Vinho, Ano FROM RESERVA WHERE NOT (Num_Vinho > 100) 56 Utilizando Operadores Especiais
Utilizando Operadores Especiais 57 Operadores IS NULL e IS NOT NULL Use a condição de IS NULL para verificar se o campo é nulo (vazio) e IS NOT NULL para verificar se o campo não é nulo (possui conteúdo). WHERE <nome_coluna> IS NULL WHERE <nome_coluna> IS NOT NULL 1: SELECT Nome_Cliente WHERE Tel_Cliente IS NULL 2: SELECT Nome_Cliente WHERE Tel_Cliente IS NOT NULL Utilizando Operadores Especiais 58 Operador BETWEEN e NOT BETWEEN O BETWEEN serve para determinar um intervalo de busca. Utilizada para realizar buscas que indiquem um intervalo de números, datas, etc. O NOT BETWEEN serve para buscar todos os registros que não estejam no intervalo definido. WHERE <nome-coluna> BETWEEN <valor1> AND <valor2> WHERE <nome-coluna> NOT BETWEEN <valor1> AND <valor2> 1: SELECT CPF, num_vinho FROM Reserva WHERE num_vinho BETWEEN 20550 AND 23500 2: SELECT CPF, num_vinho FROM Reserva WHERE num_vinho NOT BETWEEN 20550 AND 23500
Utilizando Operadores Especiais 59 Operadores IN e NOT IN O IN compara se o valor está contido no conjunto de valores definidos e o NOT IN verifica se o valor não está contido no conjunto. WHERE <nome-coluna> IN <lista-valores> WHERE <nome-coluna> NOT IN (<lista-valores>) 1: SELECT Nome_Vinho FROM Vinho WHERE num_vinho IN (10,20,30) 2: SELECT Nome_Vinho FROM Vinho WHERE num_vinho NOT IN (10,20,30) Utilizando Operadores Especiais 60 Operadores LIKE e NOT LIKE Permite comparar cadeias de caracteres utilizando padrões de comparação para um ou mais caracteres. WHERE <nome-coluna> LIKE <valor> WHERE <nome-coluna> NOT LIKE <valor> Expressão Explicação LIKE 'A%' Todas as palavras que iniciem com a letra A. LIKE '%A' Todas as palavras que terminem com a letra A. LIKE '%A%' LIKE 'A_' LIKE '_A' LIKE '_A_' LIKE '%A_' LIKE '_A%' Todas que tenham a letra A em qualquer posição String de dois caracteres que tenha a primeira letra A e o segundo caractere seja qualquer outro. String de dois caracteres cujo primeiro caractere seja qualquer um e a ultima letra seja A String de três caracteres cuja segunda letra seja A, independentemente, do primeiro ou do último caractere. Todos que tenham a letra A na penúltima posição e a última seja qualquer outro caractere. Todos que tenham a letra A na segunda posição e o primeiro caractere seja qualquer um.
Utilizando Operadores Especiais 61 LIKE / NOT LIKE 1: Busca os clientes com o nome que inicie com R. SELECT * FROM Cliente WHERE Nome_Cliente LIKE R% 2: Busca os clientes que tenham a letra b na segunda posição do nome. SELECT * FROM Cliente WHERE Nome_Cliente LIKE _b% 3: Busca os clientes com a letra C no início e a letra R na terceira posição do nome. SELECT * FROM AUTOR WHERE Nome_Autor LIKE C_r% Utilizando Operadores Especiais 62 LIKE / NOT LIKE 4: Busca apenas os preços que comecem com o algarismo 1 e tenham apenas um algarismo após o 1. SELECT CPF, Num_Vinho FROM Reserva WHERE Valor LIKE 1_% 5: Busca os clientes com o nome que não iniciem com R. SELECT * FROM Cliente WHERE Nome_Cliente NOT LIKE R%
63 Funções de Agregação Funções de Agregação 64 Existem diversas funções de grupo que são implementadas pelo padrão SQL. Essas funções auxiliam a computar uma variedade de medidas baseadas em valores dos campos do banco de dados. As principais funções de grupo são: Função Ação COUNT Retorna o número de linhas afetadas pelo comando. SUM Retorna o somatório do valor dos campos especificados AVG Retorna a média aritmética dos valores dos campos MIN Retorna o menor valor do campo de um grupo de linhas. MAX Retorna o maior valor do campo de um grupo de linhas Obs.: Os campos com funções de agregação devem receber um apelido.
Funções de Agregação 65 MAX : Retorna o valor máximo para tipos de dados numéricos, de caractere e de data. : retorna maior código do cliente SELECT MAX (Cod_Cliente) FROM Cliente MIN: Retorna o valor mínimo. : retorna menor código do cliente SELECT MIN (Cod_Cliente) FROM Cliente AVG: Extrai a média aritmética de um determinado grupo de linhas. : retorna a média aritmética do valor do vinho SELECT AVG (VALOR) FROM Reserva Funções de Agregação 66 SUM: Retorna o valor total de um determinado campo em um determinado grupo de linhas. 1: SELECT SUM (Valor) FROM Reserva 2: SELECT SUM (Preco_Venda) * 1.2 FROM CD COUNT: Retorna o número de linhas que atende a uma determinada condição. 1: retorna o número de linhas de uma tabela SELECT COUNT (*) FROM CLiente 2: retorna o número de linhas com valores não nulos para o campo especificado. SELECT COUNT (nome_cliente) FROM CLiente
67 Conversão de Tipo de Dado Conversão de Tipos de Dado 68 CAST: Permite realizar a conversão entre tipos de dados. CAST (tipo-dado-origem AS tipo_dado_destino) 1: SELECT CAST (AVG(Valor) AS Decimal (10,2)) preco FROM Reserva 2: SELECT CAST ( 11/02/2002 AS Date) Coluna 3: SELECT CAST ( 12 AS Integer) * 5 Coluna FROM Reserva
69 Agrupamento de Dados Agrupamento de Dados 70 GROUP BY: Permite dividir as linhas de uma tabela em grupos menores. Todas as colunas da lista SELECT que não são funções de grupo devem estar incluídas na cláusula GROUP BY. SELECT <Nome-Coluna>, Funcao-Grupo (Nome-Coluna) FROM <Nome-Tabela> WHERE <condicao> GROUP BY <expressao-grupo> ORDER BY <nome-colunas> 1: Usando o GROUP BY para uma coluna. SELECT num_vinho, SUM (valor) FROM Reserva GROUP BY num_vinho 2: Usando o GROUP BY para várias colunas. SELECT num_vinho, Ano, SUM (valor) FROM Reserva GROUP BY num_vinho, Ano
Agrupamento de Dados 71 HAVING: Permite dividir as linhas de uma tabela em grupos menores. SELECT <Nome-Coluna>, Funcao_Grupo (Nome-Coluna) FROM <Nome-Tabela> WHERE <condicao> GROUP BY <expressao-grupo> HAVING <condicao> ORDER BY <nome-colunas> 1: SELECT num_vinho, SUM (valor) FROM Reserva GROUP BY num_vinho HAVING Sum (Valor) < 1000 2: SELECT count(*) as total_vinho FROM Reserva GROUP BY num_vinho HAVING count (*) > 10 72 Consulta em Múltiplas Tabelas
Consulta em Múltiplas Tabelas 73 União de Tabelas (JOIN) Para realizar a união de tabelas, basta acrescentarmos após a cláusula FROM do comando SELECT as tabelas que queremos unir. Devemos colocar na cláusula WHERE a condição de união das tabelas, ou seja, as respectivas chaves primárias e estrangeiras. INNER JOIN: junção entre tabelas onde são incluídas somente as linhas que satisfazem a condição do join. SELECT tabela1.campo, tabela2.campo FROM tabela1 INNER JOIN tabela2 ON (tabela1.chaveprimaria = tabela2.chaveprimaria) Sintaxe ANSI SELECT Reserva.Num_Vinho, Vinho.Nome_Vinho FROM Reseva INNER JOIN Vinho ON (Reserva.Num_VInho = Vinho.Num_Vinho) Sintaxe SQL Server SELECT Reserva.Num_Vinho, Vinho.Nome_Vinho FROM Reseva, Vinho WHERE Reserva.Num_VInho = Vinho.Num_Vinho Consulta em Múltiplas Tabelas 74 de junção (JOIN) com três tabelas Sintaxe ANSI SELECT Reserva.Num_Vinho, Vinho.Nome_Vinho FROM Reseva INNER JOIN Vinho ON (Reserva.Num_Vinho = Vinho.Num_Vinho) INNER JOIN Cliente ON (Reserva.Cod_Cliente = Cliente.Cod_Cliente) Sintaxe SQL Server SELECT Reserva.Num_Vinho, Vinho.Nome_Vinho FROM Reseva, Vinho, Cliente WHERE Reserva.Num_VInho = Vinho.Num_Vinho AND Reserva.Cod_Cliente = Cliente.Cod_Cliente
Consulta em Múltiplas Tabelas 75 CROSS JOIN: junção entre tabelas que inclui cada uma das combinações de todas as linhas entre as tabelas. Apresenta o produto cartesiano. SELECT tabela1.campo, tabela2.campo FROM tabela1 CROSS JOIN tabela2 Sintaxe ANSI SELECT Reserva.Num_Vinho, Vinho.Nome_Vinho FROM Reseva CROSS JOIN Vinho Sintaxe SQL Server SELECT Reserva.Num_Vinho, Vinho.Nome_Vinho FROM Reseva, Vinho Consulta em Múltiplas Tabelas 76 União de Tabelas Externas (OUTER JOIN) Quando uma linha não satisfaz a condição de união entre as tabelas, a linha não será mostrada no resultado da busca. Isso acontece porque o banco de dados, não podendo estabelecer a relação entre as colunas que estão sendo unidas na busca, coloca NULL onde o dado não existe. LEFT OUTER JOIN: são incluídas todas as linhas da tabela à esquerda. SELECT tabela1.campo, tabela2.campo FROM tabela1 LEFT OUTER JOIN tabela2 ON (tabela1.chaveprimaria = tabela2.chaveprimaria) Sintaxe ANSI SELECT Reserva.Num_Vinho, Vinho.Nome_Vinho FROM Vinho LEFT OUTER JOIN Vinho ON (Vinho.Num_VInho = Reserva.Num_Vinho) Sintaxe SQL Server SELECT Reserva.Num_Vinho, Vinho.Nome_Vinho FROM Vinho, Reserva WHERE Vinho.Num_VInho *= Reserva.Num_Vinho
Consulta em Múltiplas Tabelas 77 RIGHT OUTER JOIN: são incluídas todas as linhas da tabela à direita. SELECT tabela1.campo, tabela2.campo FROM tabela1 RIGHT OUTER JOIN tabela2 ON (tabela1.chaveprimaria = tabela2.chaveprimaria) Sintaxe ANSI SELECT Reserva.Num_Vinho, Vinho.Nome_Vinho FROM Vinho RIGHT OUTER JOIN Vinho ON (Vinho.Num_VInho = Reserva.Num_Vinho) Sintaxe SQL Server SELECT Reserva.Num_Vinho, Vinho.Nome_Vinho FROM Vinho, Reserva WHERE Vinho.Num_VInho =* Reserva.Num_Vinho Obs. *= Inclui todas as linhas da tabela à esquerda = * Inclui todas as linhas da tabela à direita Consulta em Múltiplas Tabelas 78 FULL OUTER JOIN: são incluídas todas as linhas da tabela que satisfazem a expressão e também as que não satisfazem. SELECT tabela1.campo, tabela2.campo FROM tabela1 FULL OUTER JOIN tabela2 ON (tabela1.chaveprimaria = tabela2.chaveprimaria) Sintaxe ANSI SELECT Reserva.Num_Vinho, Vinho.Nome_Vinho FROM Vinho FULL OUTER JOIN Vinho ON (Vinho.Num_VInho = Reserva.Num_Vinho)
79 Subconsultas (subqueries) Subconsultas (subqueries) 80 SUBQUERY: é quando o resultado de uma consulta é utilizado por outra consulta de forma encadeada e no mesmo comando SQL. SUBCONSULTA utilizando EXISTS/NOT EXISTS SELECT Nome_Cliente FROM Cliente WHERE EXISTS (SELECT cod_cliente FROM Reserva WHERE Cliente.cod_Cliente = Reserva.Cod_Cliente) SELECT Nome_Cliente FROM Cliente WHERE NOT EXISTS (SELECT cod_cliente FROM Reserva WHERE Cliente.cod_Cliente = Reserva.Cod_Cliente)
81 SUBCONSULTA utilizando IN/NOT IN SELECT Nome_Cliente FROM Cliente WHERE cod_cliente IN (SELECT DISTINCT cod_cliente FROM Reserva) SELECT Nome_Cliente FROM Cliente WHERE cod_cliente NOT IN (SELECT DISTINCT cod_cliente FROM Reserva) ' 82 EXERCÍCIOS
83 BIBLIOGRAFIA HEUSER, Carlos Alberto. Projeto de banco de dados. 6.ed. Porto Alegre: Bookman, 2010. 282p. ISBN 9788577803828. Número de Chamada: 681.3.061.1 H524p 6.ed. SILBERSCHATZ, Abraham; KORT, Henry F.; SUDARSHAN, S. (Coaut.). Sistema de banco de dados. 5.ed. Rio de Janeiro: Elsevier, Campus 2006. 781 p. ISBN 9788535211078. Número de Chamada: 681.3.061.1 S576dP 5.ed. ELMASRI, Ramez; NAVATHE, Shamkant B. Sistemas de bancos de dados. 4.ed. São Paulo: Pearson/Addison Wesley, 2005. 724 p. ISBN 9788588639171. Número de Chamada: 681.3.061.1 E43fP 4.ed. MACHADO, Felipe Nery Rodrigues; ABREU, Mauricio Pereira de. Projeto de banco de dados: uma visão prática. 15 ed. São Paulo: Érica, 2007. 300 p. ISBN 9788571943124. Número de Chamada: 681.3.061.1 M131p 15.ed. DATE, C. J. Introdução a sistemas de bancos de dados. Rio de Janeiro: Campus, 2000. 803p. ISBN 85-352-0560-8. Número de Chamada: 681.3.061.1 D257inP CARDOSO, Virginia. Sistema de Banco de Dados: uma abordagem introdutória e aplicada. São Paulo. Editora Saraiva, 2012.143p.ISBN: 9788502162822 GUIMARAES, Célio Cardoso. Fundamentos de Banco de dados: modelagem, projeto e linguagem SQL.Campinas, SP.Editora da Unicamp,2003.269p.ISBN: 8526806335