Escolar Documentos
Profissional Documentos
Cultura Documentos
SQL Básico
SQL Básico
Livros-texto (entre muitos outros): Banco de Dados, Uma Viso Prtica,Felipe Machado e Mauricio Abreu, Ed. rica, 1999. Modelagem Conceitual e Projeto de Banco de Dados, Paulo Cougo, Ed. Campus, 1997.
Mini-mundo
CONCEITOS BSICOS
Um banco de dados computadorizado pode ser criado e mantido por um grupo de programas de aplicao escritos especificamente para aquela tarefa ou por um SISTEMA DE GERNCIA DE BANCOS DE DADOS (SGBD). Um SGBD uma coleo de programas de propsito geral que facilita o processo de definir, construir e manipular bancos de dados para vrias aplicaes. Definir um banco de dados significa especificar os tipos de dados a serem armazenados juntamente com uma descrio detalhada de cada tipo. Construir o banco de dados o processo de armazenar os dados em algum meio de armazenamento controlado pelo SGBD. Manipular um banco de dados compreende certas funes como consultar o banco de dados para recuperar dados especficos, atualizar o banco de dados para refletir mudanas percebidas no mini-mundo e produzir relatrios a partir dos dados. O banco de dados e o SGBD juntos so chamados genericamente de SISTEMA DE BANCOS DE DADOS.
Definio do BD (Meta-dados)
BD armazenado
Disciplina
Pr-Requisito
Histrico-Escolar
SISTEMA DE INFORMAO
Sistema de informao: Dados; SGBD; O hardware e o sistema operacional; As pessoas que usam e administram os dados; Os programas de aplicao que acessam e atualizam os dados; Os programadores que desenvolvem essas aplicaes.
LINGUAGEM SQL
O nome "SQL" significa "Structured Query Language" - Linguagem Estruturada de Pesquisa. Essa linguagem, de grande utilizao, teve seus fundamentos no modelo relacional de Codd (l970). Sua primeira verso recebeu o nome de SEQUEL ("Structured English Query Language"), sendo definida por D. D. CHAMBERLIN, entre outros, em 1974, nos laboratrios de pesquisa da IBM (Califrnia). Em 1975, foi implementado um prottipo de aplicao dessa nova linguagem. Entre 1976 e 1977, o SEQUEL foi revisado e ampliado, e teve seu nome alterado para "SQL" por razes jurdicas. A SQL se tornou um padro de fato, no mundo dos ambientes de banco de dados relacionais. Em 1982, o American National Standard Institute (ANSI) tornou a SQL padro oficial de linguagem em ambiente relacional. Infelizmente, como todo padro que se preze, existem hoje vrios dialetos SQL, cada um, evidentemente, tentando ser mais padronizado que o outro. A linguagem SQL foi desenvolvida especialmente para o ambiente relacional, podendo ser adaptada a qualquer ambiente no relacional.
A LINGUAGEM SQL
* * * * * *
Linguagem interativa de consulta (query AdHoc); Linguagem de programao para acesso a banco de dados; Linguagem de administrao de banco de dados; Linguagem cliente/servidor; Linguagem para banco de dados distribudo; Caminho de acesso a outros bancos de dados em diferentes mquinas.
FUNES DE UM SGBD
Definio de Dados (DDL)- permite ao usurio a definio da estrutura e organizao dos dados armazenados, e as relaes que existem entre eles; Manipulao de Dados (DML)- permite ao usurio ou a um programa de aplicao, a incluso, remoo, seleo ou atualizao de dados previamente armazenados no banco; Controle de Acesso- protege os dados de manipulaes no autorizadas; Compartilhamento de Dados- coordena o compartilhamento dos dados por usurios concorrentes, sem contudo interferir na ao de cada um deles; Integridade dos Dados- auxilia no processo de definio da integridade dos dados, protegendo contra corrupes, inconsistncias e falhas do sistema de computao.
* *
Independncia de Fabricante- A SQL oferecida em praticamente todos os SGBD'S, e os que ainda no tm esto se encaminhando para l. Com isso posso mudar de SGBD sem me preocupar com o novo que vai chegar; Portabilidade Entre Computadores- A SQL pode ser utilizada desde um computador pessoal, passando por uma estao de trabalho, at um computador de grande porte; Reduo dos Custos com Treinamento- Baseado no item anterior, as aplicaes podem se movimentar de um ambiente para o outro sem que seja necessria uma reciclagem da equipe de desenvolvimento; Ingls Estruturado de Alto Nvel- A SQL formada por um conjunto bem simples de sentenas em ingls, oferecendo um rpido e fcil entendimento; Consulta Interativa- A SQL prov um acesso rpido aos dados, fornecendo respostas ao usurio, a questes complexas, em minutos ou segundos; Mltiplas Vises dos Dados- A SQL permite ao criador do banco de dados levar diferentes vises dos dados a diferentes usurios;
Definio Dinmica dos Dados- Por meio da SQL, podem-se alterar, expandir ou incluir, dinamicamente, as estruturas dos dados armazenados com a mxima flexibilidade.
O EXEMPLO
Todo o nosso percurso pela linguagem SQL ser efetuado com base no exemplo de modelo de dados apresentado na figura abaixo:
0:N
PEDIDO PEDIDO
1:1
POSS UI
1:N
0:N
1:N
FAZ
TIRA
TEM
1:1
CLIENTE CLIENTE
1:1
VENDEDOR VENDEDOR
1:1
PRODUTO PRODUTO
TABELA CLIENTE
Cd. do cliente 720 870 110 222 830 130 410 20 157 180 260 290 390 234 Nome do cliente Ana Flvio Jorge Lcia Mauricio Edmar Rodolfo Beth Paulo Lvio Susana Renato Sebastio Jos Endereo Rua 17 n 19 Av. Pres. Vargas 10 Rua Caiap 123 Rua Itabira 123 L.9 Av. Paulista 1236 Rua da Praia sn Largo da Lapa 27 s Av. Climrio n.45 Tv. Moraes c/3 Av. Beira Mar n.1256 Rua Lopes Mendes 12 Rua Meireles n.123 Rua da Igreja n.10 Quadra 3bl.3 sl. 1003 Cidade Niteri So Paulo Curitiba B.Horizonte So Paulo Salvador Rio de Janeiro So Paulo Londrina Florianpolis Niteri So Paulo Uberaba Braslia CEP 24358310 22763931 30078500 22124391 3012683 30079300 30078900 25679300 30077500 30046500 30225900 30438700 22841650 UF RJ SP PR MG SP BA RJ SP PR SC RJ SP MG DF CGC 12113231/0001-34 22535126/9387-9 14512764/9834-9 28315213/9348-8 32816985/7465-6 23463284/234-9 12835128/2346-9 32485126/7326-8 32848223/324-4 12736571/2347-4 21763571/232-9 13276571/1231-4 32176547/213-3 21763576/1232-3 IE 2134 4631 2985 9343 7121 7431 9280 1923 2530 1820 9071 2931
TABELA VENDEDOR
Cdigo do Vendedor 209 111 11 240 720 213 101 310 250 Nome do Vendedor Jos Carlos Joo Antnio Felipe Jonas Joo Josias Maurcio Salrio Fixo 1.800 2.490 2.780 9.500 4.600 2.300 2.650 870 2.930 Faixa de Comisso C A C C A A C B B
Quantidade
10 35 20 9 18 5 5 8 7 3 10 30 32 6 45 20 10 10 10 70 37 40 10 35 18 17 40 6 10 43 8
TABELA PEDIDO
Nmero do Pedido 121 97 101 137 148 189 104 203 98 143 105 111 103 91 138 108 119 127 Prazo de Entrega 20 20 15 20 20 15 30 30 20 30 15 20 20 20 20 15 30 10 Cdigo do Cliente 410 720 720 720 720 870 110 830 410 20 180 260 260 260 260 290 390 410 Cdigo do Vendedor 209 101 101 720 101 213 101 250 209 111 240 240 11 11 11 310 250 11
TABELA PRODUTO
Cdigo do produto 25 31 78 22 30 53 13 45 87 77 Unidade do produto Kg BAR L M SAC M G M M M Descrio do produto Queijo Chocolate Vinho Linho Acar Linha Ouro Madeira Cano Papel Valor unitrio 0,97 0,87 2,00 0,11 0,30 1,80 6,18 0,25 1,97 1,05
VISO GRFICA
CLIENTE CLIENTE Cdigo do cliente Cdigo do cliente Nome do cliente Nome do cliente Endereo Endereo Cidade Cidade CEP CEP UF UF CGC CGC IE IE PEDIDO PEDIDO Nmero do pedido Nmero do pedido Prazo de entrega Prazo de entrega Cdigo do cliente Cdigo do cliente Cdigo do vendedor Cdigo do vendedor ITEM DO PEDIDO ITEM DO PEDIDO Nmero do pedido Nmero do pedido Cdigo do produto Cdigo do produto Quantidade Quantidade Valor Unitrio Valor Unitrio
PRODUTO PRODUTO Cdigo do produto Cdigo do produto Descrio Descrio Unidade Unidade Val. Unit. Val. Unit.
Nome do vendedor Nome do vendedor Faixa de comisso Faixa de comisso Salrio fixo Salrio fixo
: Chave primria
: Chave estrangeira
Create Table Cliente (Cd. do cliente Number Not Null Unique; Nome do cliente VarChar(20); Endereo VarChar(50); Cidade VarChar(20); CEP VarChar(9); UF VarChar(2); CGC VarChar(12); IE VarChar(20); Primary Key (Cd. do cliente)).
Create Table Pedido (Nmero do pedido Number Not Null Unique; Prazo de entrega Date Not Null; Cd. do cliente Number; Cd. do vendedor Number Not Null; Primary Key (Nmero do pedido); Foreign Key (Cd. do cliente); References Cliente; Foreign Key (Cd. do vendedor); References Vendedor ).
Create Table Vendedor (Cd. do vendedor Number Not Null Unique; Nome do vendedor VarChar(20) Not Null; Faixa de comisso Number Not Null; Salrio Fixo Number Not Null; Primary Key(Cd. do vendedor)).
Create Table Produto (Cd. do produto Number Not Null Unique; Descrio VarChar(50); Unidade Varchar(3); Valor Unitrio Number Not Null; Primary Key (Cd. do Produto)).
Forma:
Problema: Listar todos os produtos com respectivas descries, unidades e valores unitrios. Problema: Listar o nome do cliente, com seu endereo e CGC. Problema: Listar o nome e salrio dos vendedores. Problema: Listar o nome e o percentual de 20% de cada salrio (criar uma coluna virtual).
Forma:
Problema: Listar todas as colunas de vendedor. Problema: Listar todas as colunas de produto.
Forma:
Select <nome(s) da(s) coluna(s)> From <tabela> Where <nome da coluna> <operador> <valor>
OPERADORES RELACIONAIS
= <> < > >= <= Igual Diferente Menor do que Maior do que Maior ou igual do que Menor ou igual do que
Observaes:
Quando a coluna do tipo caractere, o <valor> deve estar entre aspas. Ex.: 'PARAFUSO'. Na linguagem SQL, existe a diferenciao entre maisculas e minsculas em alguns SGBDs, logo 'PARAFUSO' diferente de parafuso.
Problema: Listar o cdigo do produto e a quantidade dos itens do pedido com a quantidade igual a 35. Problema: Listar os clientes que moram em So Paulo. Problema: Listar os vendedores com salrio maior ou igual a R$ 2.300,00.
Problema: Listar o nome e a cidade dos clientes no residentes no Rio de Janeiro (RJ).
OPERADOR DE CONCATENAO
Exemplo: Select (cdigo_do_produto || ||
Problema: Listar os produtos que tenham unidade igual a M e valor unitrio maior que R$1,00. Problema: Listar os empregados com salrio no intervalo de R$ 2.300,00 R$ 2.650,00, inclusive. Problema: Listar os empregados com salrio fora do intervalo de R$ 2.300,00 R$ 2.650,00, inclusive. Problema: Liste os clientes e seus respectivos endereos; dos que moram em So Paulo ou estejam na faixa de CEP entre 30077000 e 30079000. Problema: Mostrar todos os pedidos que no tenham prazo de entrega igual a 15 dias.
Operadores Between e NOT Between Forma: Where <nome da coluna> Between <valor1> AND <valor2>
Where <nome da coluna> NOT Between <valor1> AND <valor2> Problema: Listar o cdigo e a descrio dos produtos que tenham o valor unitrio na faixa de R$0.32 at R$2.00. Problema: Listar os vendedores com salrio fixo no intervalo de 1.800,00 3.650,00. Problema: Listar os vendedores com salrio fixo fora do intervalo de 1.800,00 3.650,00.
Forma:
Where <nome da coluna> Like <valor> Where <nome da coluna> NOT Like <valor>
Os operadores LIKE e NOT LIKE s trabalham sobre colunas que sejam do tipo CHAR. % - substitui uma palavra _ - substitui um caractere Problema: Listar os produtos que tenham a sua unidade comeando por K. Problema: Listar os vendedores que no comeam por Jo Problema: Listar as cidades cujo o nome inicia com a letra B.
OPERADORES IN E NOT IN
OPERADORES IS NULL E IS NOT NULL Forma: Where <nome da coluna> IS NULL <valores>
Where <nome da coluna> IS NOT NULL <valores> Problema: Mostrar os clientes que no tenham inscrio estadual. Problema: Mostrar todos os vendedores que tenham faixa de comisso.
From <tabela> Where <condio(es)> Order By <nome da(s) coluna(s)> ou Order By <nmero da coluna>
DESC ASC
Problema: Mostrar em ordem alfabtica a lista de vendedores e seus respectivos salrios fixos. Problema: Listar os nomes, cidades e estados de todos os clientes, ordenados por estado e cidade de forma decrescente. Problema: Mostrar a descrio e o valor unitrio de todos os produtos que tenham a unidade KG, em ordem de valor unitrio ascendente.
TOTALIZANDO COLUNA(SUM)
CALCULANDO MDIAS(AVG)
CONTANDO OS REGISTROS(COUNT)
Forma:
Select COUNT(*)
Problema: Quantos vendedores ganham acima de R$ 2.500,00 de salrio fixo? Problema: Determinar o nmero de clientes e o nmero de estados cadastrados.
Forma: Select <nome da(s) coluna(s)> From <tabela> Where condio(es) Group By <nome da(s) coluna(s)> Order By <nome da(s) coluna(s)>
Problema: Listar o nmero de produtos que cada pedido contm. Problema: Listar os clientes, sendo os mesmos agrupados por UF e ordenados por nome do cliente.
Problema: Listar os pedidos que tm mais do que 3 produtos. Problema: Listar o total do salrio fixo a cada vendedor, cujo total acima de 2.000,00. Agrupados por faixa de comisso.
At agora viemos trabalhando com a recuperao de dados sobre uma nica tabela, mas o conceito de banco de dados rene, evidentemente, vrias tabelas diferentes. Para que possamos recuperar informaes de um banco de dados temos, muitas vezes, a necessidade de acessar simultaneamente vrias tabelas. Algumas dessas consultas necessitam realizar uma juno (JOIN) entre tabelas, para desta poder extrair as informaes necessrias para a consulta formulada.
O qualificador de nome consiste no nome da tabela seguido de um ponto e o nome da coluna na tabela. Exemplo: O qualificador de nome para a coluna DESCRIO da tabela PRODUTO ser: PRODUTO.descrio Os qualificadores de nome so utilizados em uma consulta para efetivar a juno (JOIN) entre tabelas, uma vez que o relacionamento entre tabelas realizado por meio de chaves estrangeiras.
Problema: Juntar a tabela cliente com pedido. Problema: Quais os clientes que fizeram os pedidos? Listar pelo nome de cliente. Obs.: A equao apresentada na clusula where chamada de EQUAO DE JUNO. Podemos utilizar as clusulas LIKE, NOT LIKE, IN, NOT IN, NUL, NOT NULL e mistur-las com os operadores AND, OR e NOT, dentro de uma clusula WHERE na juno entre tabelas. Problema: Quais os clientes que tm prazo de entrega superior a 15 dias e que pertencem aos estados de So Paulo (SP) ou Rio de Janeiro (RJ)?
Problema: Mostrar os clientes e seus respectivos prazos de entrega, ordenados do maior para o menor. Obs.: Para que no seja necessrio escrever todo o nome da tabela nas qualificaes de nome, podemos utilizar ALIASES (sinnimos) definidos na prpria consulta. A definio dos ALIASES feita na clusula FROM e utilizada normalmente nas outras clusulas (Where, Order By, Group By, Having, Select).
Problema: Apresentar os vendedores (ordenados) que emitiram pedidos com prazos de entrega superiores a 15 dias e tenham salrios fixos igual ou superior a R$ 1.000,00.
UTILIZANDO CONSULTAS ENCADEADAS (SUBQUERIES) O que uma subquery? Em linhas gerais, quando o resultado de uma consulta utilizada por outra consulta, de forma encadeada e contida no mesmo comando SQL.
Problema: Que produtos participam em qualquer pedido cuja quantidade seja 10? Problema: Quais vendedores ganham um salrio fixo abaixo da mdia? Problema: Quais os produtos que no esto presentes em nenhum pedido?
Forma:
Problema: Apagar todos os vendedores com faixa de comisso nula. Problema: Apagar todos os registros de pedidos realizados por vendedores fantasmas (operao caa-fantasma).
UTILIZANDO VIEWS
As tabelas criadas em um banco de dados relacional tm existncia fsica dentro do sistema de computao. Muitas vezes necessrio criar tabelas que no ocupem espao fsico, mas que possam ser utilizadas como as tabelas normais. Essas so chamadas de VIEWS (tabelas virtuais). Como as TABELAS REAIS, as VIEWS devem ser criadas.
(<nome da(s) coluna(s)>) as Select <nome da(s) coluna(s)> From<nome da tabela> Where <condio>
As VIEWS so utilizadas para se ter uma particular viso de uma tabela, para que no seja necessria a utilizao do conjunto como um todo.
Problema: Criar uma VIEW que contenha s os produtos pedidos a metro. Problema: Cria uma VIEW contendo o cdigo do vendedor, o seu nome e o salrio fixo mdio no ano.