Baixe 51260222 - bd2 - apostila - sql - 2 e outras Notas de estudo em PDF para Física, somente na Docsity!
Apostila de SQL
1. Introdução
A primeira versão da linguagem SQL, chamada SEQUEL (Structured Query
English Language), surgiu em 1974 nos laboratórios da IBM (Califórnia).
Entre 1976 e 1977 ela foi revisada e ampliada, tendo então o seu nome
alterado para SQL.
Devido ao sucesso da nova forma de consulta e manipulação de dados dentro
de um ambiente de banco de dados, sua utilização tornou-se cada vez maior.
Vários SGBD’s atuais utilizam o SQL como a linguagem padrão para o acesso
às bases de dados. Entre eles podemos citar:
DB2 da IBM
ORACLE da Oracle Corporation;
RDB da Digital
SYBASE da Sybase INC
SQL Server da Microsoft
Ingres da Computer Associates
Em 1982 o American National Standard Institute (ANSI) tornou a SQL a
linguagem padrão para a manipulação de dados em ambiente relacional.
Linguagem de definição de dados (DDL)
Permite ao usuário a definição da estrutura e organização dos dados
armazenados, e das relações existentes entre eles.
Linguagem de manipulação de dados (DML)
Permite a um usuário, ou a um programa de aplicação, a execução de
operações de inclusão, remoção, seleção ou atualização de dados previamente
armazenados na base de dados.
Controle de acesso
Protege os dados de manipulações não autorizadas.
Integridade dos dados
Auxilia no processo de definição da integridade dos dados, protegendo contra
corrupções e inconsistências geradas por falhas do sistema de computação, ou
por erros nos programas de aplicação.
3. Vantagens e Desvantagens da Linguagem SQL
Podemos apontar as seguintes vantagens no uso da linguagem SQL:
Independência de fabricante
A linguagem SQL é adotada por praticamente todos os SGBD’s relacionais
existentes no mercado, além de ser uma linguagem padronizada (ANSI). Com
isso, pelo menos em tese, posso mudar de SGBD sem me preocupar em alterar
os programas de aplicação.
Portabilidade entre plataformas de hardware e software
Pode ser utilizada tanto em máquinas Intel rodando Windows, passando por
workstations RISC rodando UNIX, até mainframes rodando sistemas
operacionais proprietários.
Redução dos custos com treinamento
Com base no item anterior, as aplicações podem se movimentar de um
ambiente para o outro sem que seja necessária uma reciclagem da equipe de
desenvolvimento.
Usa inglês estruturado de alto nível
O SQL é formado por um conjunto bem simples de sentenças em inglês,
oferecendo um rápido e fácil entendimento.
Permite consultas interativas
Permite aos usuários acesso fácil e rápido aos dados a partir de um front end
que permita a edição e a submissão de comandos SQL.
4. Tabelas dos Exemplos
As tabelas a seguir serão usadas nos exemplos que se seguem:
CLIENTE (cod_cli, nome_cli, endereco, cidade, cep, uf)
VENDEDOR (cod_vend, nome_vend, sal_fixo, faixa_comiss)
PEDIDO ( num_ped, prazo_entr, cd_cli, cd_vend)
ITEM_PEDIDO (no_ped, cd_prod, qtd_ped)
PRODUTO (cod_prod, unid_prod, desc_prod, val_unit)
5. Criação e Destruição de Tabelas
O comando CREATE TABLE é usado para criar uma tabela. A sua forma
geral é:
CREATE TABLE <nome_tabela>
(<descrição das colunas>,
<descrição das chaves>);
onde:
<nome_tabela> dever ser substituído pelo nome da tabela a ser criada.
<descrição das colunas> deve ser substituída pela relação das colunas
da tabela e seus respectivos tipos de dados (por exemplo, smallint, char,
varchar, integer, number, float e etc).
<descrição das chaves> deve ser substituída pela lista das colunas que
são tratadas como chaves estrangeiras.
Algumas colunas podem receber o valor NULL (nulo), e a coluna definida
como chave primária, além de não poder receber NULL, deve ser uma coluna
UNIQUE (sem repetições; isto é, chave primária)
Script de Criação das Tabelas dos Exemplos
create table cliente ( cod_cli smallint not null, nome_cli varchar(40) not null, endereco varchar(40) null, cidade varchar(20) null, cep char(08) null, uf char(02) null, primary key (cod_cli));
create table vendedor ( cod_vend smallint not null, nome_vend varchar(40) not null, sal_fixo number(9,2) not null,
6. Executando Consultas sobre as Tabelas
6.1 Selecionando Colunas Específicas de uma Tabela
SELECT <lista_de_colunas>
FROM <nome_tabela>;
Problema:
Listar todos os produtos com as respectivas descrições, unidades e valores
unitários.
select desc_prod,unid_prod,val_unit from produto;
DESC_PROD UNI VAL_UNIT
Chapa de Aco kg 2, Cimento kg 4, parafuso 3.0X10.5 mm kg 2 Fio plastico m , Solvente PRW l 5 5 linhas selecionadas.
Problema:
Listar os nomes dos clientes, as cidade e os estados onde eles estão
localizados.
select nome_cli,cidade,uf from cliente;
NOME_CLI CIDADE UF
Supermercado Carrefour rio de janeiro rj Supermercado Baratao rio de janeiro rj Supermercado Arariboia niteroi rj UFF niteroi rj CSN volta redonda rj Pegeout resende rj Ind. Quimicas Paulistas sao paulo sp Ford Caminhoes sao paulo sp Riocel Celulose guaiba rs Elevadores Sur guaiba rs
6.2 Selecionando todas as Colunas de uma Tabela
SELECT *
FROM <nome_tabela>;
Problema:
Listar o conteúdo de todas as tabelas da base de dados dos exemplos.
select * from cliente;
COD_CLI NOME_CLI ENDERECO
CIDADE CEP UF
1000 Supermercado Carrefour Av. das Americas rio de janeiro 20000001 rj 2000 Supermercado Baratao Rua Rolando Lero rio de janeiro 20000002 rj 3000 Supermercado Arariboia Rua Itaoca niteroi 20000003 rj 4000 UFF Cidade Univers. niteroi 20000004 rj 5000 CSN Rua do Aco volta redonda 20000005 rj 6000 Pegeout Rodovia Pres. Dutra resende 20000006 rj 7000 Ind. Quimicas Paulistas Rua Tuiuti sao paulo 11000001 sp 8000 Ford Caminhoes Rua Henry Ford sao paulo 11000002 sp 9000 Riocel Celulose Rua Gen. Arouca guaiba 30000001 rs 10000 Elevadores Sur Rua Planejada guaiba 30000001 rs
select * from produto;
COD_PROD UNI DESC_PROD VAL_UNIT
100 kg Chapa de Aco 2, 200 kg Cimento 4, 300 kg parafuso 3.0X10.5 mm 2 400 m Fio plastico , 500 l Solvente PRW 5
6.3 Selecionando Apenas Alguns Registros da Tabela
SELECT <lista_de_colunas>
FROM <nome_tabela>
WHERE <condição_de_seleção>;
Onde a cláusula WHERE tem a seguinte forma:
WHERE <nome_da_coluna>
6.3.1 Operadores Relacionais:
= igual
<> ou != diferente
< menor que
> maior que
>= maior ou igual a
<= menor ou igual a
Quando a coluna é do tipo caracter , o deve estar entre aspas simples
Exemplo: 'parafuso'
Observação:
Na linguagem SQL existe diferença entre caracteres maiúsculos e minúsculos;
logo, 'PARAFUSO' é diferente de 'parafuso'.
Problema:
Listar o número do pedido, o código do produto e a quantidade pedida dos
itens de um pedido, onde a quantidade pedida seja igual a 500.
select no_ped,cd_prod,qtd_ped from item_pedido where qtd_ped = 500;
NO_PED CD_PROD QTD_PED
5 linhas selecionadas.
Problema:
Quais são os clientes localizados na cidade de Niterói?
select nome_cli from cliente where cidade = 'niteroi';
NOME_CLI
Supermercado Arariboia UFF 2 linhas selecionadas.
6.3.2 Operadores Lógicos
AND conjunção
OR disjunção
NOT negação
Problema:
Quais são os produtos que têm unidade igual a 'kg' e valor unitário maior do
que R$ 2,00?
select desc_prod from produto where unid_prod = 'kg' and val_unit > 2.00;
DESC_PROD
Chapa de Aco Cimento 2 linhas selecionadas.
6.3.3 Operadores BETWEEN e NOT BETWEEN
WHERE <nome_coluna> BETWEEN AND
WHERE <nome_coluna> NOT BETWEEN AND
Este operador possibilita a seleção de uma faixa de valores sem a necessidade
do uso dos operadores >=, <= e AND.
e têm que ter o mesmo tipo de dado que <nome_coluna>.
Problema:
Liste o código e a descrição dos produtos que tenham o valor unitário na faixa
de R$ 0,10 a R$ 3,00.
select cod_prod,desc_prod from produto where val_unit between 0.10 and 3.00;
COD_PROD DESC_PROD
100 Chapa de Aco 300 parafuso 3.0X10.5 mm 400 Fio plastico 3 linhas selecionadas.
6.3.4 Operadores LIKE e NOT LIKE
WHERE <nome_coluna> LIKE
WHERE <nome_coluna> NOT LIKE
Aplicáveis apenas a colunas dos tipos CHAR e VARCHAR.
Funcionam de modo análogo aos operadores = e <>, porém o poder dos
operadores LIKE e NOT LIKE está na utilização dos símbolos % e _ , que
podem fazer o papel de “coringa”:
% substitui uma palavra
_ substitui um caracter qualquer
Exemplos:
'apis%' se aplicaria às seguintes cadeias de caracteres:
'lapis preto'
'lapis cera'
'lapis borracha'
'broca n_' se aplicaria às seguintes cadeias de caractere:
'broca n1'
'broca n9'
'broca n3'
Problema:
Listar todos os produtos que tenham a sua unidade começando por k (lembre-
se de que a coluna unid_prod foi definida como char(03)).
select cod_prod,desc_prod from produto where unid_prod like 'k__';
COD_PROD DESC_PROD
100 Chapa de Aco 200 Cimento 300 parafuso 3.0X10.5 mm 3 linhas selecionadas.
Problema:
Listar todos os vendedores cujos os nome não comecem por 'A'.
A utilização do valor nulo (NULL) é problemática, pois as diversas
implementações da linguagem SQL podem adotar qualquer representação para
o valor nulo.
Problema:
Mostrar os clientes que não tenham endereço cadastrado.
select nome_cli from cliente where endereco is null;
NOME_CLI
0 linhas selecionadas.
6.4 Ordenando os Dados Selecionandos
SELECT <lista_de_colunas>
FROM <nome_tabela>
WHERE <condição_de_seleção>
ORDER BY {<nome_coluna>|<num_col> [ASC|DESC]}
Onde <nome_coluna> se refere à coluna segundo a qual as linhas serão
ordenadas, e <num_col> se refere à posição relativa da coluna na
<lista_de_colunas> projetadas, contada da esquerda para a direita, e não à
posição na tabela original.
As cláusulas ASC e DESC denotam ordenação ascendente e descendente
respectivamente. A forma ascendente de ordenação é assumida caso nenhuma
opção seja informada explicitamente.
Problema:
Mostrar em ordem alfabética a lista de vendedores e seus respectivos salários
fixos.
select nome_vend,sal_fixo from vendedor order by nome_vend;
NOME_VEND SAL_FIXO
Ana Cristina 2100 Armando Pinto 2500 Cassia Andrade 900 Maria Paula 900 Paulo Alberto 1500 5 linhas selecionadas.
Problema:
Listar os nomes, as cidades e os estados de todos os clientes, ordenados por
estado e cidade de forma descendente.
select nome_cli,cidade,uf from cliente order by uf desc,cidade desc;
NOME_CLI CIDADE UF
Ind. Quimicas Paulistas sao paulo sp Ford Caminhoes sao paulo sp Riocel Celulose guaiba rs Elevadores Sur guaiba rs CSN volta redonda rj Supermercado Carrefour rio de janeiro rj Supermercado Baratao rio de janeiro rj Pegeout resende rj Supermercado Arariboia niteroi rj UFF niteroi rj 10 linhas selecionadas.
Problema:
Mostrar a descrição e o valor unitário de todos os produtos que tenham
unidade 'kg' em ordem ascendente de valor unitário.
select desc_prod,val_unit from produto where unid_prod = 'kg' order by 2;
DESC_PROD VAL_UNIT
parafuso 3.0X10.5 mm 2 Chapa de Aco 2, Cimento 4, 3 linhas selecionadas.