1 Nesta seção, o estudante será introduzido aos conceitos básicos de banco de dados. Termos utilizados para fazer referências a entidades serão definidos. Uma breve explicação sobre o que é um sistema gerenciador de banco de dados relacional e como os dados são inseridos e recuperados de um banco de dados também consta desta seção. As tabelas do banco de dados de demonstração serão examinadas. Objetivos: Ao final desta seção, o estudante deverá ter a capacidade de: – Estabelecer o propósito da linguagem SQL; – Definir um sistema de gerenciamento de banco de dados relacional; – Listar e definir termos de banco de dados; – Relacionar as tabelas que estão no banco de dados de demonstração; – Reconhecer e descrever como os dados são inseridos e recuperados de um banco de dados. SQL Server Introdução a SQL Conceitos Básicos e Termos
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
1
Nesta seção, o estudante será introduzido aos conceitos básicos de banco de dados. Termos utilizados para fazer referências a entidades serão definidos. Uma breve explicação sobre o que é um sistema gerenciador de banco de dados relacional e como os dados são inseridos e recuperados de um banco de dados também consta desta seção. As tabelas do banco de dados de demonstração serão examinadas.
Objetivos:
Ao final desta seção, o estudante deverá ter a capacidade de:
– Estabelecer o propósito da linguagem SQL;
– Definir um sistema de gerenciamento de banco de dados relacional;
– Listar e definir termos de banco de dados;
– Relacionar as tabelas que estão no banco de dados de demonstração;
– Reconhecer e descrever como os dados são inseridos e recuperados de um banco de dados.
SQL Server Introdução a SQL
Conceitos Básicos e Termos
2
SQL Server Introdução a SQL
A Linguagem SQL
Structured Query Language (Linguagem Estruturada de Consulta)
– Possui uma estrutura semelhante à linguagem natural (na língua inglesa);
– Não inclui nenhuma referência para explicitar caminhos de acesso;
– É uma maneira de recuperação e manipulação de dados em um banco de dados;
– Pode ser utilizada em um terminal on-line;
– Pode ser utilizada na forma de SQL embutida por um programa de aplicação;
– Possui uma ampla gama de operações de atualização;
– Utilizada para administração.
3
SQL Server Introdução a SQL
Bancos de Dados
Definição:
Uma coleção de dados na qual existem relacionamentos entre os elementos dos dados.
Exemplo:– Distribuidora de livros:
» Informações sobre os livros
» Informações sobre os editores
» Informações sobre os autores
sales
titles
publishers authors
pubs
storesstor_idstor_namestor_addresscitystatezip
4
SQL Server Introdução a SQL
Sistema de Gerenciamento de Bancos de Dados
Definição
Software que facilita a definição de estruturas de bancos de dados e o armazenamento e recuperação de dados dessas estruturas.
Gerenc. de Ar- mazenamento
“user”
Distribuidor
sales
titles
publishers authors
pubs
storesstor_idstor_namestor_addresscitystatezip
5
SQL Server Introdução a SQL
Termos
Tabela (relação)– Um grupo de linhas, ou um grupo de listas de
valores: “uma relação”.
Coluna (atributo)– Análoga a um campo de um registro;
– Cada coluna de determinada linha possui um valor de dado único;
– Cada coluna é de um tipo único de dado.
Linha (tupla)– Análoga a um registro de um arquivo;
– Todas as linhas de uma tabela possuem o mesmo grupo de colunas.
Chave primária– Uma ou mais colunas com valores que são
únicos na tabela e que dessa forma podem ser utilizados para identificar as suas linhas.
Domínio– Grupo de valores válidos para uma determinada
coluna.
6
SQL Server Introdução a SQL
Tabelas
Modelo Relacional
Em um banco de dados relacional, todos os dados estão em tabelas. Uma tabela possui dados relacionados a uma classe particular de objetos.
Tabelas são compostas de linhas e colunas.
Existe exatamente um valor de dado em cada coluna de cada linha.
Exemplo: A tabela de editores (publishers) possui informações sobre os editores.
Linhas
Nomes das colunas
Colunas
pub_name city statepub_id
1389
0736
0877
Algodata Infosystems
New Moon Books
Binnet & Hardley
Berkeley
Boston
Washington
CA
MA
DC
7
Linhas e Colunas
Colunas
– Cada coluna possui um nome;
– Cada coluna contém dados sobre um aspecto do conteúdo da tabela;
– Cada coluna contém dados de um tipo único, como inteiros, caracteres, etc.
Linhas– Cada linha contém dados relacionados a uma
ocorrência do assunto da tabela;
– Linhas não estão em nenhuma ordem particular.
SQL Server Introdução a SQL
pub_id pub_name city state
Berkeley
Boston
Washington
CA
MA
Algodata Infosystems
New Moon Books
Binnet & Hardley
1389
0736
0877 DC
Linha
Coluna
pub_id pub_name city state
1389
0736
0877
Algodata Infosystems
New Moon Books
Binnet & Hardley
Berkeley
Boston
Washington
CA
MA
DC
8
Acesso a Dados / Chaves Primárias
O nome da tabela, nome da coluna e a linha determinam um item de dados unicamente.
stores table
SQL Server Introdução a SQL
stor_id stor_name stor_address city state zip
7131 Doc-U-MatQualityLaundry andBooks
24-A AvrogadoWay
Rem-ulade
WA 98014
980566380 Eric theRead Books
788 Catamau-gus Ave.
Seat-tle
WA
7896 FricativeBookshop
89 Madison St.
Frem-ont
CA 90019
7067 News &Brews
577 First St. LosGatos
CA 96745
7066 Barnum’s 567 PasadenaAve.
Tustin 92789
8042 Bookbeat 679 Carson St.
Port-land
OR 89076
CA
9
SQL Server Introdução a SQL
Acesso a Dados / Chaves Primárias (continuação)
Pode-se fazer acesso a toda linha por uma única chave primária.
Em toda linha, alguma coluna ou grupo de colunas identifica exclusivamente a linha.
pub_name city statepub_id
1389
0736
0877
Algodata Infosystems
New Moon Books
Binnet & Hardley
Berkeley
Boston
Washington
CA
MA
DC
10
SQL Server Introdução a SQL
Pessoal de Banco de dados / Funções
Usuário de Banco de Dados – Recuperação de dados
– Atualização de dados
– Inserção de dados
– Remoção de dados
Projetista do Banco de Dados – Projeto do banco de dados
– Criação de tabelas
– Regras de negócios / integridade referencial
Programador de Aplicação de Banco de Dados– Embutir SQL no código
– Projetar e escrever formulários para interface do usuário
Administrador do Sistema de Banco de Dados– Instalação do sistema
– Cópias de segurança e restauração
– Performance e segurança
11
SQL Server Introdução a SQL
Criando uma Tabela
O administrador ou projetista do sistema de banco de dados criará tabelas com o comando seguinte:
Create table stores
(stor_id char(4) not null,
stor_name varchar(40) not null,
stor_address varchar(40) null,
city varchar(20) null,
state char(20) null,
zip char(5) null)
go
Uma vez que a tabela esteja criada, os dados podem ser nela inseridos.
Insere os dados
insert into stores (stor_id, stor_name, stor_address, city, state, zip) values (‘7066’, ’Barnum’s’, ’567 Pasadena Ave.’, ’Tustin’, ’CA’, ’92789’)
go
12
SQL Server Introdução a SQL
Criando uma Tabela (continuação)
insert into stores (stor_id, stor_name, stor_address, city, state, zip) values ('7067', 'News & Brews', '577 First St.', 'Los Gatos', 'CA','96745')
go
insert into stores (stor_id, stor_name, stor_address, city, state, zip) values ('8042', 'Bookbeat', '679 Carson St.', 'Portland', 'OR','89076')
go
13
SQL Server Introdução a SQL
Recuperação de dados da tabela
Recuperando os dados
select * from stores
go
Resultado:
7066 Barnum's 567 Pasadena Ave. Tustin CA 92789
7067 News & Brews 577 First St. Los Gatos CA 96745
publishers - Editores que publicaram os livrosque este distribuidor possui.
pub_id Código de identificação único para um editor.
pub_name Nome do editor
city Cidade do editor
state Estado do editor
authors - Autores que escreveram um ou mais livros.
au_id Número da identidade do autor
au_lname Último sobrenome
au_fname Prenome
phone Telefone
address Endereço
city Cidade
state Estado
zip C.E.P.
contract 0=Não existe contrato para este livro
1=Existe contrato para este livro
17
SQL Server Introdução a SQL
Definição das Colunas (continuação)
titles - Livros que estão para ser publicados ou que já foram publicados e são oferecidos por este distribuidor.
title_id Código identificador único para um título
title Nome do livro
type Tipo do livro (negócios, psicologia, etc.)
pub_id Código para o editor deste livro
price Preço da unidade
advance Adiantamento pago ao autor
royalty Royalty correspondente ao livro
ytd_sales Número de livros vendidos para as lojas
notes Comentários adicionais
pubdate Data da publicação
18
SQL Server Introdução a SQL
Definição das Colunas (continuação)
titleauthor - Autores para cada livro e livros para cada autor.
au_id Código do autor que escreveu este livro
title_id Código do livro escrito por este autor
au_ord Ordem dos direitos deste autor (autor n.1, autor n.2)
royaltyper Percentual dos direitos autorais que este autor recebe. (Lembre-se que mais de um autor pode escrever um livro.)
roysched - Faixa de vendas para cada livro e os respectivos direitos autorais dos autores.
title_id Código do livro para o qual as faixas de direitos autorais se aplicam
lorange Limite inferior de número de livros vendidos
hirange Limite superior de número de livros vendidos
royalty Royalty para esta faixa de livros vendidos
19
SQL Server Introdução a SQL
Definição das Colunas (continuação)
stores - Lojas que vendem livros deste distribuidor.
stor_id Código identificador único para uma loja
stor_name Nome da loja
stor_address Endereço
city Cidade
state Estado
zip C.E.P.
sales - Datas de vendas para pedidos de livros de várias lojas.
stor_id Código da loja que pediu este livro
ord_num Código identificador do pedido
date Data do pedido
qty Número de exemplares pedidos deste título
payterms Termos de pagamento
title_id Código do livro pedido
20
discounts - Tipos de descontos disponíveis.
discounttype Três tipos de descontosstor_id Código da loja para a qual
este desconto se aplicalowqty Número mínimo de livros
para este descontohighqty Número máximo de livros
para este descontodiscount Percentual de desconto
SQL Server Introdução a SQL
21
SQL Server Introdução a SQL
Sumário
Structured Query Language (SQL) - Linguagem bem semelhante à língua natural (na língua inglesa), que se constitui numa maneira de recuperar e manipular dados.
Banco de Dados - Uma coleção de dados na qual existem relacionamentos entre os elementos dos dados.
Sistema de Gerenciamento de Banco de Dados - Software que facilita a definição de estruturas de banco de dados e o armazenamento e recuperação de dados dessas estruturas.
Funções de Banco de Dados - Usuário de banco de dados, Projetista de banco de dados, Programador de aplicação de banco de dados, Administrador do sistema de banco de dados.
Convenção de nomenclatura - banco_de_dados. proprietário.nome_da_tabela.nome_da_coluna
22
SQL Server Introdução a SQL
Questões de Revisão:
1. O que significa SQL?
2. Qual a definição de domínio?
3. Indique duas características da linguagem SQL.
4. Qual o outro termo usado para nomear
uma tabela?
5. Que tabela contém o endereço da loja?
6. Que tabela contém o número identificador dos editores?
7. Que cabeçalho de coluna é usado para registrar a data de publicação de um livro?
8. Que tabela e coluna possuem os dados sobre contratos existentes?
9. Que tabela é usada para armazenar informações sobre o custo de um livro?
10. Existem três colunas ‘city’ no banco de dados pubs. Liste o nome completo que faz referência a estas três colunas.
23
SQL Server Introdução a SQL
Recuperação Básica de Dados I
Nesta seção o estudante aprenderá como utilizar as declarações básicas do SQL para recuperar dados de um banco de dados. Para que isto seja feito, é necessário que a interface da linguagem SQL seja utilizada.
Objetivos:
Ao final desta seção, o estudante deverá ter capacidade de:
– Entrar no banco de dados usando isql;
– Conectar-se com o banco de dados apropriado;
– Consultar o banco de dados recuperando dados em uma coluna;
– Consultar o banco de dados recuperando dados em uma linha;
– Consultar o banco de dados usando condições para restringir os dados recuperados;
– Utilizar expressões booleanas na condição da consulta;
– Utilizar um editor para modificar o buffer do SQL.
24
SQL Server Introdução a SQL
SQL Server: Uma Visão Geral
BCP - Bulk Copy tool
db-library
db-library
SQL ServerTM
ReportWorkbench
DataWorkbenchISQL
APT-Library
APT-SQL APTWorkbench
Utilitário SQL Interativo,Linha de comando
Cliente baseadoem interfacesgráficas parafazer acesso àsfacilidades doSQL Server
Gerador derelatórios
Entradas ou saídas deinformações em grandevolume, com base emlinha de comando e interface gráfica
Ferramentas de desenvolvimentode aplicações baseadas em formulários e dirigidasa eventos
25
SQL Server Introdução a SQL
Entrando no SQL Interativo (ISQL)
Conectando com o banco de dados:
– Digite isql e pressione <Enter>;
– Quando a senha (password) for pedida, pressione <Enter>;
– Isto significa que você está conectado com o mesmo nome da sua máquina hospedeira, e que você não possui uma senha.
Sintaxe:
UNIX ou DOS:
isql -Unome_do_usuário -Psenha
VMS:
isql/user=nome_do_usuário/password=senha
Exemplo:
isql -Ufred -Psecret
1>
26
SQL Server Introdução a SQL
Usando ISQL
A interface SQL– Linhas numeradas aparecem como um prompt;
– Você agora pode utilizar declarações SQL;
– Os prompts subseqüentes, gerados após pressionar <Enter>, são incrementados;
– Para começar o prompt em 1, digite reset (isto limpará o buffer do SQL);
– Para executar um comando SQL digite go sozinho numa linha.
Mais de uma declaração select pode ser executada com o comando go.
Saindo do ISQL:
Sintaxe:
{quit | exit}
Exemplo:
1> quit
ready 15:54:05
27
SQL Server Introdução a SQL
Escolhendo um banco de dados
Para se conectar a um banco de dados:
Sintaxe:
use nome_do_banco_de_dados
Exemplo:
use pubs
go
master
pubs
model
“user”
28
SQL Server Introdução a SQL
Recuperação Simples- Select/From
Utilizados para recuperar dados em um banco de dados.
– A sentença SELECT especifica as colunas que você deseja recuperar.
– A sentença FROM especifica a tabela ou tabelas de onde você deseja recuperar os dados.
– Usada para selecionar linhas que contenham campos que correspondem a porções especificadas de uma série de caracteres (string de caracteres).
– Utilizada apenas com dados do tipo char, varchar e datetime.
– Pode usar curingas.
– Curinga Significado
% qualquer string com nenhum ou mais caracteres
_ um único caracter
[ ] um único caracter na faixa especificada
[^] um único caracter fora da faixa especificada
– Inclua o(s) curinga(s) e a string de caracteres entre aspas simples ou duplas.
Exemplo (like):select stor_name /* Encontra as lojas cujos nomes */from stores /* começam com a letra B
maiúscula*/where stor_name like 'B%'
Exemplo (not like):select stor_name /* Encontra as lojas cujos nomes */from stores /* não começam com B
maiúsculo */where stor_name not like 'B%'
38
SQL Server Introdução a SQL
Caracteres Correspondentes (continuação)
Exemplo(especifica número de caracteres):select stor_id, stor_name /*Encontra lojas que possuem*/
from stores /*código com quatro dígitos, dos quais */
where stor_id like '70__' /*os primeiros dois são “70” */
Exemplo(faixa de caracteres):select stor_name /*Encontra as lojas cujos nomes */
from stores /*começam com qualquer letra maiúscula*/
where stor_name like '[D-F]%' /*entre D e F, inclusive */
Exemplo (fora da faixa de caracteres especificados):select stor_name /*Encontra as lojas cujo nome
*/
from stores /*não começa com nenhuma letra */
where stor_name like '[^D-F]%' /*maiúscula entre D e F */
Existe alguma outra maneira de conseguir os mesmos resultados?
Exemplo (duas faixas):select stor_name /* Encontra as lojas cujos
nomes */
from stores /* começam com A,B,C ou de G a Z */
where stor_name like '[A-C,G-Z]%'
39
SQL Server Introdução a SQL
Select/From/Where - Listas
A Chave IN
– Permite ao usuário selecionar valores que correspondam a qualquer um de uma lista de valores.
Exemplo (in):select stor_name, city, state /*Encontra as
lojas de*/
from stores /*Washington e da */
where state in ('CA', 'WA') /*Califórnia*/
Exemplo (not in):select stor_name, city, state /*Encontra as lojas
que não*/
from stores /*estão nem na Califórnia,*/
where state not in ('CA', 'WA')/*nem em Washington*/
40
SQL Server Introdução a SQL
Select/From/Where - Condições de Conexão
Condições de conexão com operadores lógicos (AND/OR).
AND– Agrupa duas ou mais condições.
– Retorna resultados apenas quando todas as condições são verdadeiras.
Exemplo (and):select stor_name, city, state /*Encontra as
lojas que*/
from stores /*estão em Fremont, */
where state = 'CA’ and city ='Fremont' /*na Califórnia*/
OR– Conecta duas ou mais condições.
– Retorna resultados quando qualquer das condições é verdadeira.
– É inclusivo.
Exemplo (or):select stor_name, city, state /*Encontra as lojas que
estão*/
from stores /*na Califórnia ou na cidade */
where state = 'CA' or city = 'Portland' /* de Portland */
41
SQL Server Introdução a SQL
Condições de Conexão (continuação)
Quando mais de um operador lógico é utilizado, a ordem em que eles são avaliados é a seguinte: not, and, or.
Parênteses podem modificar o significado de uma instrução, para forçar uma outra ordem de avaliação.
Exemplo (sem parênteses):select title_id, type, advance
from titles
where type='business' or type='psycology'
and advance > 5500
Resultado:
title_id type advance
----------- ----------------- ---------------
BU1032 business 5,000.00BU1111 business 5,000.00BU2075 business 10,125.00BU7832 business 5,000.00PS1372 psychology 7,000.00PS2106 psychology 6,000.00
(6 rows affected)
42
SQL Server Introdução a SQL
Condições de Conexão (continuação)
Exemplo (usando parênteses com AND e OR):
select title_id, type, advance /*Encontra os títulos de livros*/
from titles /*que estão na categoria de */
where (type='business' or type='psycology')
and advance > 5500 /*negócios ou de psicologia */
/*e tiveram um adiantamento */
/*maior que $5500 */
Resultado:
title_id type advance
----------- ----------------- ---------------
BU2075 business 10,125.00
PS1372 psychology 7,000.00
PS2106 psychology 6,000.00
(3 rows affected)
43
SQL Server Introdução a SQL
Editando o Buffer SQL
Usos:– Corrigir erros de sintaxe SQL;
– Corrigir erros tipográficos.
Sintaxe simplificada:– {vi | edit}
Exemplo:
select from
stores
vi (or edit)
/* Você está agora em um arquivo temporário */
/* Modifique ou corrija a declaração SQL */
/* Escreva o conteúdo deste arquivo */
/* Saia do vi (ou edit) */
select * from
stores
go
44
SQL Server Introdução a SQL
Editando o Buffer SQL (continuação)
Salva a declaração SQL atual:– Declarações longas;
– Comandos executados mais de uma vez em momentos diferentes;
– Declaração existente é modificada (anteriormen-te salva).
Exemplo:
select stor_name, city, state
from stores
where state in ('CA, 'WA')
vi (or edit)
/*Você está agora num arquivo temporário*/
/*Modifique ou corrija o código SQL se você precisar*/
/*Escreva o conteúdo deste arquivo com outro nome*/
/*Saia do vi (ou edit)*/
reset
:r nome_do_arquivo
/*O buffer de comandos agora contém todas as linhas do nome_do_arquivo*/
go
45
SQL Server Introdução a SQL
Português para SQL
Português para SQL - Palavras Chave
PORTUGUÊS SQL
entre e incluindo between
sem duplicatas distinct
igual a um dos seguintes in
similar like
listar, encontrar select
onde, que where
Português para SQL
Liste todas as informações das lojas.select *
from stores
ou
select stor_id, stor_name, stor_address, city, state, zip
from stores
Para cada lista de lojas, mostre o número identificador e o nome da loja.
select stor_name, stor_id
from stores
46
SQL Server Introdução a SQL
Português para SQL (continuação)
Liste as cidades em que as lojas se encontram.select city
from stores
Como você traduziria o seguinte comando para o português?
select state
from stores
Liste as lojas que pediram livros.select distinct stor_id from sales
Encontre o código das lojas que pediram uma quantidade de livros superior a 20.
select distinct stor_id, qty
from sales
where qty > 20
Encontre as lojas que não estão localizadas na Califórnia.
select stor_name
from stores
where state != ‘CA’
47
SQL Server Introdução a SQL
Português para SQL (continuação)
Encontre o endereço da loja chamada ‘News & Brews’.
select stor_name, stor_address
from stores
where stor_name = ‘News & Brews’
Encontre as lojas que têm um número de identificação entre 7067 e 8000.
select stor_id, stor_name
from stores
where stor_id between ‘7067’ and ‘8000’
Ache todas as lojas cujo nome começa com B.select stor_name
from stores
where stor_name like ‘B%’
Como você traduziria o seguinte comando para o português?
select *
from stores
where stor_name not like ‘B%’
48
SQL Server Introdução a SQL
Sumário
isql - Entrando no banco de dados.
go - Mais de uma declaração select pode ser executada com a declaração go.
reset - Limpa o buffer SQL.
use nome_do_banco_de_dados - Para se conectar a um banco de dados.
Recuperando dados - select nomes_das_colunas from nome_da_tabela
where condições-de_busca
Chave distinct - Elimina linhas duplicatas na saída.
Sentença where - Determina exatamente que linhas serão recuperadas.
Operadores de Comparação - (=): igual a; (>): maior que; (<): menor que; (>=):maior que ou igual a; (<=): menor que ou igual a; (!=) ou (<>): diferente; (!>): não maior que; (!<): não menor que.
49
SQL Server Introdução a SQL
between - Faixa inclusiva: valores superior e inferior da faixa são incluídos na busca.
not between - Exclui os valores superior e inferior da faixa especificada.
like - Usada para localizar dados char, varchar e datetime.
% qualquer string com zero ou mais caracteres;
_ qualquer caracter único;
[ ] qualquer caracter único numa determinada faixa;
[^] qualquer caracter único fora de determinada faixa
and / or - Condições de conexão com operadores lógicos.
in - Valores selecionados que correspondam a qualquer um de uma lista de valores.
50
SQL Server Introdução a SQL
Lab: Recuperação Básica de Dados I
Escreva as declarações SQL que você deve usar para responder as questões abaixo. Estas questões podem ser respondidas usando o banco de dados pubs e consultando as tabelas stores e titles.
1. Conecte-se ao nível do sistema operacional. (Seu instrutor lhe fornecerá uma senha e um username.)
2. Conecte-se ao SQL Server. (Seu instrutor lhe fornecerá uma senha e um username.)
3. Você estará usando tabelas do banco de dados pubs nessa prática. Componha o seu ambiente de forma que você possa recuperar informações desse banco de dados.
4. Tenha certeza de que os dados na tabela ‘stores’ são os mesmos que o instrutor vem usando nas demonstrações.
5. Quais são os nomes de todas as lojas? (Apenas os nomes deverão ser a saída.)
51
SQL Server Introdução a SQL
Lab: Recuperação Básica de Dados I (continuação)
6. Que lojas estão localizadas no estado de Washington?
7. Exiba todas as informações da tabela titles.
8. Liste os tipos de livros disponíveis.
9. Liste todos os títulos existentes e a data em que foram publicados.
10. Liste os livros que custam mais de $10.
11. Liste todos os tipos de livros de négocios.
12. Encontre todos os livros que falam sobre culinária (por exemplo: mod_cook e trad_cook).
13. Encontre todos os livros que têm a palavra “Computer” em seus títulos.
14. Encontre um livro de psicologia que custe mais de $20.
52
SQL Server Introdução a SQL
Lab: Recuperação Básica de Dados I (continuação)
15. Liste os livros que têm um preço na faixa entre $10 e $20.
16. Encontre as categorias de livros que o editor número “0877” publica.
17. Que livros estão classificados nas categorias mod_cook, trad_cook e business (negócios)? (Use apenas uma declaração.)
18. Encontre os livros cujos títulos começam com letras entre A e F.
19. O que faz a seguinte declaração SQL?select title_id, type
from titles
where title_id like ‘_C%’
20. O que faz a seguinte declaração SQL?select title_id, pubdate
from titles
where pubdate > ‘12/31/86’
53
Lab: Recuperação Básica de Dados I (continuação)
Se você tiver mais tempo...
1. Encontre o título do livro que está na cate-goria (type) psicologia, custa mais de $20 e tem a palavra ‘Computer’ no título.
2. Encontre os livros que tiveram um adianta-mento superior a $5000 e venderam menos de 4000 cópias.
3. Que categorias de livros venderam um total de 4000 a 5000 cópias?
4. Que livros venderam mais de 10000 cópias e custam menos de $10, na categoria de negócios (business) e de culinária moderna (modern cooking)?
SQL Server Introdução a SQL
54
SQL Server Introdução a SQL
Recuperação Básica de Dados II
Nesta seção, o estudante aprenderá a reordenar os resultados de uma consulta de dados. Além de aprender a lidar com valores nulos, o estudante aprenderá a obter dados derivados através da utilização de operações aritméticas.
Objetivos:
Ao final desta seção, o estudante deverá ser capaz de:
– Renomear cabeçalhos de colunas nos dados recuperados;
– Utilizar as funções numéricas na recuperação de dados;
– Definir o significado de um valor nulo;
– Classificar a saída de dados.
55
SQL Server Introdução a SQL
Renomeando Colunas
O usuário pode estabelecer um outro nome para ser utilizado na saída da declaração select, ao invés do nome da coluna.
Exemplo (módulo - encontra os números ímpares):select total_sales, ytd_sales%2, title_id
from titles
where ytd_sales%2 = 1
60
SQL Server Introdução a SQL
Conversão de Tipos Para Expressões Numéricas
A função CONVERT:– Converte expressões de um tipo de dados para
outro;
– Usada na lista_de_seleção e no comando where;
– Não se pode converter uma expressão char que contém caracteres não numéricos para uma inteira (int).
Sintaxe:convert (tipo_de_dado, expressão)
Exemplo (erro - tipos de dados incompatíveis):select stor_id * 10
from stores
Resultado:Msg 257, Level 16, State 1, line 1:
Implicit conversion from datatype 'char' to 'int' is not allowed.
Use the CONVERT function to run this query.
Exemplo:select convert(int,stor_id)*10
from stores
61
SQL Server Introdução a SQL
Conversão de Tipos para Expressões Numéricas (continuação)
Resultado:
----------------
71310
63800
78960
70670
70660
80420
(6 rows affected)
Com tipo de dados money e um outro tipo dado, como float, um cifrão ($) pode ser usado opcionalmente na frente do 'outro tipo' de dado para executar a computação.
Exemplo (omitindo o $):select price * 1.10, title
from titles
where type = 'business'
62
SQL Server Introdução a SQL
Conversão de Tipos para Expressões Numéricas (continuação)
O comando ORDER BY classifica os resultados da consulta (em ordem ascendente, caso nada seja especificado).– Itens especificados em uma sentença order by
Função convert - Convert expressões de um tipo de dados para outro.
($) - Com o tipo de dados money e ‘outro tipo’ de dados, como float, o cifrão ($) pode ser usado em frente ao ‘outro tipo’ de dados para executar a computação.
Null Value (valor nulo) - Implica num valor desconhecido. Computações envolvendo nulos resultam em nulo.
is null - Usado para selecionar colunas contendo valores nulos (null values).
Sentença order by - Classifica os resultados da consulta (normalmente em ordem ascendente, se nada mais for especificado).
70
SQL Server Introdução a SQL
Lab: Recuperação Básica de Dados II
Use o banco de dados pubs e as tabelas stores, titles e authors para responder às questões abaixo.
1. Mude o cabeçalho da coluna stor_id para CÓDIGO e o stor_name para NOME_LOJA quando for listar os dados das lojas.
2. Aproximadamente quantos livros têm que ser vendidos para pagar o adiantamento sobre cada livro?
3. Qual a renda gerada por cada título? Coloque o título RENDA para o resultado e CÓDIGO para title_id.
4. Um aumento de 15% no preço por livro está projetado para o ano que vem. Liste os preços antigos e novos usando PREÇO_ ANTIGO e PREÇO_NOVO como cabeçalhos.
5. Que títulos ainda não receberam um preço?
71
SQL Server Introdução a SQL
6. Que editores ainda não decidiram sobre adiantamentos ou resolveram não dar um adiantamento?
7. Classifique a tabela titles por tipo (type) e cada tipo por preço (price).
8. Encontre os autores que moram na Califórnia (‘CA ‘). Liste-os em ordem alfabética por seus sobrenomes, juntamente com seus telefones.
9. Encontre os livros que têm renda total inferior a $10000. (Dica: vendas totais (ytd_sales) é em número de livros e não em valor monetário.)
72
SQL Server Introdução a SQL
Organizando Dados e Resumindo Resultados
Nesta seção o estudante aprenderá como usar as funções agregadas de construção. O estudante verá que os dados de saída podem ser organizados e manipulados para responder questões relacionadas ao conteúdo do banco de dados. Funções serão usadas em dados agrupados e será apresentada uma outra forma para utilizar uma condição para saída de dados.
Objetivos:
Ao final desta seção, o estudante deverá ser capaz de:
– Usar as funções de agregação;
– Organizar dados em grupos (group by);
– Estabelecer condições em grupos (having).
73
SQL Server Introdução a SQL
Funções de Agregação
– Funções de agregação, com exceção do count(*), ignoram valores nulos;
– Sum e Avg só funcionam com valores numéricos;
– Apenas uma linha é retornada (se uma sentença group by não tiver sido usada);
– Não podem ser utilizadas num comando where;
– Podem ser aplicados a todas as linhas em uma tabela ou num grupo de uma tabela.
Liste a última data que um livro foi pedido.select max(date) from sales
Liste o preço do livro mais barato disponível.select min(price) from titles
Qual é a média dos preços dos livros que o editor '0736' publica?
select avg(price) from titles
where pub_id='0736'
Liste a quantidade total de livros que foram vendidos este ano.
select sum(ytd_sales) from titles
Liste o número total de títulos de livros.select count(title_id) from titles
81
SQL Server Introdução a SQL
Lab: Funções de Agregação
Este exercício usa as tabelas titles e sales do banco de dados pubs. Cada questão deve ser respondida com uma declaração SQL.
1. Quantos livros estão disponíveis neste banco de dados?
2. Quantos editores publicaram livros?
3. Se o preço de todos os livros sofrer um aumento de 15% próximo ano, qual será o preço médio do custo de um livro no próximo ano em comparação a este ano?
4. Quantos livros da categoria de negócios (business) foram vendidos?
5. Suponha que qualquer adiantamento que ainda não foi decidido é de $5000. Encontre o adiantamento médio.
82
SQL Server Introdução a SQL
Select / Group by
A sentença GROUP BY divide os dados em grupos.– Normalmente utilizada com uma função de
agregação na lista_de_seleção;
– Todos os valores nulos na coluna group by são tratados como um grupo.
Sintaxe simplificada:
select [distinct] lista_de_seleção
[from tabela [,...]}
[where condições_de_busca]
[group by [all] expressão_s/_funções_agregadas [,...]]
[order by coluna
/número_da_lista_de_seleção
/expressão [asc | desc ] ],...]]
Uso incorreto de uma função de agregação:
Exemplo (uso incorreto - todos os tipos terão o mesmo preço):
Exemplo:select title_id, sum(qty) /*Quantos livros foram
vendidos*/
from sales /*de cada título?*/
group by title_id
Exemplo:select stor_id, sum(qty) /*Quantos livros foram
vendidos*/
from sales /*para cada loja?*/
group by stor_id
85
SQL Server Introdução a SQL
Select / Group by (continuação)
Agrupamentos podem ser feitos através do nome_de_coluna ou qualquer expressão que não contenha uma função de agregação. Agrupamentos não podem ser feitos através do título_de_coluna (ou alias).
Exemplo:select 'ID#: ' + title_id, sum(qty)
from sales
group by 'ID#: ' + title_id
Nem todos os itens da lista_de_seleção precisam ser valores fixos ou um valor agregado para cada grupo.
Exemplo:select title_id, stor_id, sum(qty)
from sales
group by title_id
Exemplo (funções agregadas aninhadas):select avg(sum(qty)) /*Mostra a média da quantidade*/
from sales /*de todos os livros vendidos */
group by title_id
86
SQL Server Introdução a SQL
Select / Group by / Where
Uma sentença WHERE elimina linhas antes do agrupamento.
– Aplica uma condição à tabela antes dos grupos serem formados;
where ytd_sales > 4000 /*mais de 4000 cópias e lista */
having pubdate > '06/12/85' /*aqueles que têm data de */
/* publicação > 6/12/85 */
OU
select title_id, pubdate, ytd_sales, price
from titles
where ytd_sales > 4000
and pubdate > '06/12/85'
90
SQL Server Introdução a SQL
Select/Group by/Having (continuação)
Exemplo:select title_id, sum(qty) /*Quantos exemplares foram
*/
from sales /*vendidos dos títulos mais */
group by title_id /*vendidos (>50)?*/
having sum(qty) > 50
Exemplo:select title_id, sum(qty) /*Quais dos títulos mais
*/
from sales /*vendidos foram vendidos entre */
where date between /*os dias 13/09/85 e 22/05/87? */
“09/13/85” and “05/22/87”
group by title_id
having sum(qty) > 50
91
SQL Server Introdução a SQL
Português para SQL
PORTUGUÊS SQL
organizar por group by
cada/todo group by
condição pós-agrupamento having
Encontre o adiantamento máximo que foi dado em cada categoria (type) de livro.
select max(advance), type from titles
group by type
Qual é a média dos preços dos livros em cada categoria?
select type, avg(price) from titles
group by type
Para cada editor publicando mais de cinco livros, encontre o preço médio de todos os seus títulos.
select pub_id, avg(price) from titles
group by pub_id
having count(*) > 5
Por que uma sentença WHERE não serviria no exemplo acima?
92
SQL Server Introdução a SQL
Sumário
count - soma o número de linhas que pertencem à condição.
max - Encontra o valor máximo.
min - Encontra o valor mínimo.
sum - Encontra o valor total dos valores na coluna especificada.
avg - Encontra a média dos valores na coluna especificada.
isnull - Seleciona um valor nulo para ser considerado.
Sentença group by - Divide dados em grupos.
Sentença where -Elimina linhas antes de agrupar.
Modificador all - Pode ser usado com group by.
93
SQL Server Introdução a SQL
Sumário (continuação)
Sentença having - Estabelece condições para a sentença group by.
Sintaxe - select [distinct]lista_de_seleção
[from tabela [,...]
[where condições_de_busca]
[group by [all]expressão_s/_funções_agregadas[, ...]] [havingcondições_de_busca]
94
SQL Server Introdução a SQL
Lab: Group by
6. Qual é a média de preços de um livro:
a) by type?
b) by publisher?
7. Qual é o custo do livro mais barato e do mais caro para cada categoria de livros?
8. Quantos livros cada editor vendeu este ano?
9. Para os editores que possuem títulos com preços inferiores a $10, calcule a média dos preços de todos os seus livros.
10. Quantos livros existem em cada categoria?
95
SQL Server Introdução a SQL
Junções
(Joins)
A operação de junção (join) é a marca registrada do modelo relacional. Nesta seção, o estudante aprenderá os conceitos de colunas relacionadas de uma tabela para outra. O estudante aprenderá como efetuar uma junção em uma ou mais tabelas.
Objetivos:
Ao final desta seção, o estudante deverá ser capaz de executar:
– Uma junção baseada numa igualdade;
– Uma junção com outras condições incluídas;
– Uma junção que une uma tabela a ela mesma (self-join);
– Uma junção que inclui linhas não corres-pondentes (outer join);
– Uma junção de mais de duas tabelas.
96
SQL Server Introdução a SQL
Consultando Duas Tabelas
A operação de junção recupera dados de duas ou mais tabelas.
– A junção é a marca registrada do modelo relacional.
– Ela combina tabelas através da correspondência de valores de linhas em cada tabela.
Exemplo:
Liste stor_id, stor_name, title_id e qty orde-nadas pela venda de cada livro:
stor_id stor_name
7067 News & Brews
7066
8042
Barnum’s
Bookbeat
stores... title_id ...
7896
8042
8042
7131
7066
7067
7067
TC3218
stor_id qty
PS3333
TC3218
BU1032
BU7832
PS2091
PS7777
75
90
40
200
100
200
250
sales
stor_id stor_name title_id qty
706770677066
8042
8042
News & BrewsNews & BrewsBarnum’sBookbeatBookbeat
PS2091
PS7777BU7832PS3333
TC3218
200
2501009040
resultado
97
SQL Server Introdução a SQL
Que Tabelas Utilizar
Decida que colunas você precisa ver.
Use o diagrama de esquema para encontrar as tabelas para usar.
Siga as linhas de relacionamento para encontar a junção que você precisa usar para conectar as tabelas.
Exemplo:JunçãoListe stor_name, title_id e qty pedidos para cada livro vendido.
title_id title type pub_id price advance royalty ytd_sales notes pubdate
.....
.....
.....
.....
.....
.....
.....
.....
.....
.....
.....
.....
.....
.....
.....
.....
.....
.....
pub_name city statepub_id
1389
0736
0877
Algodata Infosystems
New Moon Books
Binnet & Hardley
Berkeley
Boston
Washington
CA
MA
DC
073607361389087708770877138908771389
publishers
titles
100
SQL Server Introdução a SQL
Operação Join
Join é uma operação multi-tabela.
– SELECT: Se o nome da coluna for ambíguo, ou seja, se mais de uma coluna nas tabelas especificadas na declaração de origem (from) possuírem o mesmo nome, o nome da coluna deve ser precedido por um nome de tabela.
– FROM: Duas ou mais tabelas listadas na declaração de origem (from) indicam ao SQL Server que uma junção é desejada.
» Tabelas podem estar localizadas no mesmo banco de dados ou em bancos de dados diferentes.
– WHERE: Colunas são comparadas; elas devem ter valores similares (valores pertencentes ao mesmo domínio). Não é necessário que o tipo de dado seja o mesmo, mas deve ser um tipo que o SQL Server converta automaticamente.
» (int, smallint, tinyint, decimal, real, float ou money)
» (char, varchar, datetime e smalldatetime)
– Valores nulos não participam da operação de junção.
– As colunas na condição de junção não precisam estar na sentença de seleção (select clause).
Cooking with Computers:Surreptitious Balance Sheets11.95
Straight Talk About Computers19.99
Silicon Valley Gastronomic Treats19.99
The Busy Executive's Database Guide19.99
Prolonged Data Deprivation: Four Case Studies19.99
(8 rows affected)
113
SQL Server Introdução a SQL
Exemplo (self-join e not-equal join):
select distinct t1.title_idfrom sales s1, sales s2where s1.title_id = s2.title_id /* Que livros são vendidos */and s1.stor_id != s2.stor_id /* por mais de uma loja? */
------------------------------------------Barnum’s Sushi, Anyone?Bookbeat Life Without FearBarnum’s The Gourmet MicrowaveBookbeat The Gourmet MicrowaveNews & Brews Is Anger the Enemy?Barnum’s But Is It User Friendly?Bookbeat But Is It User Friendly?Fricative Bookshop Sushi, Anyone?Barnum’s Secrets of Silicon Valley...(65 rows affected)
As tabelas stores, sales, titles, publishers, titleauthor, discounts e authors são usadas nesse exercício. Estas tabelas podem ser encontradas no banco de dados pubs.
1. Que title_id's (códigos dos livros) foram pedidos por cada loja?
2. Qual o nome do autor que escreveu o livro com o código (title_id) MC2222?
3. Que descontos foram oferecidos à loja ‘Eric the Read Books’?
4. Que autores moram na mesma cidade que um editor?
5. Que autores moram na mesma cidade?
(Em que cidades moram mais de um autor?) (self-join)
122
Lab: Joins (continuação)
Se você tiver mais tempo...
6. Que livros foram publicados no mesmo dia?
7. Quantos livros cada autor vendeu?
8. Liste os livros que possuem mais de um autor.
9. Um cliente telefonou para pedir um livro, eles apenas sabiam que era um livro de psicologia escrito por uma mulher chamada Ann ou Anne. Qual o nome completo da autora e o título do livro?
10. Liste todos os autores e, se existir um editor na cidade em que eles moram, liste o pub_name. (outer-join)
SQL Server Introdução a SQL
123
SQL Server Introdução a SQL
Subconsultas e Uniões
Nesta seção, o estudante aprenderá como consultar o banco de dados usando seleções aninhadas (subconsultas).
Objetivos
Ao final desta seção, o estudante deverá ser capaz de:
– Executar uma consulta com níveis múltiplos;
– Usar uma subconsulta com operadores comparativos;
– Usar uma subconsulta para um teste de existência;
– Usar uma união para combinar resultados de consultas.
124
SQL Server Introdução a SQL
Subconsultas - Um Exemplo Introdutório
Questão - Que títulos são publicados por New Moon Books?
Usando duas declarações select:1. Encontrar o código (pub_id) para New Moon
Books.select pub_id
from publishers
where pub_name = 'New Moon Books'
pub_id
---------
0736
2. Encontrar os títulos dos livros associados com o código do editor.
Subconsultas- Um Exemplo Introdutório (continuação)
Usando uma declaração de junção:select title
from titles, publishers
where titles.pub_id = publishers.pub_id
and publishers.pub_name = 'New Moon Books'
Utilizando uma subconsulta:select title
from titles
where pub_id =
(select pub_id
from publishers
where pub_name = 'New Moon Books')
126
SQL Server Introdução a SQL
Escrevendo Subconsultas
Uma subconsulta é uma declaração select, usada como uma expressão, como parte de outra declaração select, update, insert ou delete.
A subconsulta (select aninhado) é resolvida e os resultados substituídos na consulta mais externa.
Se a declaração where da consulta mais externa incluir o nome de uma coluna, esta deverá ser compatível, para a junção (join), com a coluna nomeada na lista_de_seleção da subconsulta (ou seja: mesmo domínio).
Uma subconsulta não pode incluir os comandos order by e compute ou a chave into.
127
SQL Server Introdução a SQL
Escrevendo Subconsultas (continuação)
Sintaxe simplificada:select lista_de_seleção
[from {tabela} [,...]]
[where condições_de_busca]=
(select lista-de_seleção_da_subconsulta
[from {tabela} [,...]
[where condições_de_busca]
[group by expressão_s/_funções agregadas [,...]]
[having condições_de_busca])
[group by expressão_s/_funções agregadas [,...]]
[having condições_de_busca])
[order by {{tabela}.]coluna
|número_da_lista_de_seleção
|expressão} [asc | desc] [,...]]
[compute agregador_de_linha (coluna) [,...]
[by coluna [,...]] [,...]]
Razões para usar subconsultas:
Muitas junções podem ser estabelecidas como uma subconsulta.– Às vezes é mais fácil de entender do que uma
junção que executa a mesma função.
Executa algumas tarefas que de outra forma seriam impossíveis.
128
SQL Server Introdução a SQL
Subconsultas - Restrições
Uma lista_de_seleção da subconsulta só pode incluir um nome de coluna (com exceção daquelas que são utilizadas em conjunto com a cláusula exists), ou seja, mais de um valor de coluna não pode ser retornado.
A chave distinct não pode ser utilizada com subconsultas que incluem uma sentença group by.
As sentenças where ou having de uma declaração select, insert, update ou delete podem conter uma subconsulta.
Apenas as colunas da lista_de_seleção da declaração mais externa podem ser exibidas.
129
SQL Server Introdução a SQL
Múltiplos Níveis de Aninhamento
Uma subconsulta pode conter uma ou mais subconsultas.– Não existe nível máximo de aninhamento.
Exemplo (dois níveis):select title /*Que livros Blochet_Halls*/
Computer Phobic and Non-Phobic Individuals: Behavior ...
Onions, Leeks, and Garlic: Cooking secrets of the Mediterranean
(8 rows affected)
SQL Server Introdução a SQL
139
SQL Server Introdução a SQL
Exists
EXISTS e NOT EXISTS são usados para implementar duas operações da teoria de grupos.
– EXISTS - Interseção: todos os elementos que pertencem a ambos os grupos.
– NOT EXISTS - Diferença: os elementos que pertencem apenas ao primeiro dos dois grupos.
– A chave exists não é precedida por um nome de coluna.
– Normalmente, a lista_de_seleção da subconsulta será " * " já que a função exists retorna verdadeiro (true) ou falso (false), e não dados.
– exists (subconsulta):
True se linhas são retornadas
False se linhas não são retornadas
– not exists (subconsulta):
True se linhas não são retornadas
False se linhas são retornadas
Sintaxe simplificada:select lista_de_seleção
[from {tabela} [,...]]
[where {exists | not exists}]
(subconsulta)
140
SQL Server Introdução a SQL
Exists (continuação)
Exemplo (interseção entre authors e publishers):
select distinct city /*Em que cidades estão */
from authors /*localizados tanto um autor*/
where exists /*quanto um editor*/
(select *
from publishers
where authors.city = publishers.city)
Resultado:
city
--------------------------
Berkeley
(1 row affected)
authors.city
publishers.city
141
SQL Server Introdução a SQL
Exists (continuação)
Exemplo (diferença entre authors e publishers):
select distinct city /*Em que cidades mora um autor*/
from authors /*mas não mora um editor */
where not exists
(select *
from publishers
where authors.city = publishers.city)
Resultado:
city
-----------------------
Gary
Covelo
Oakland
Lawrence
SanJose
Ann Arbor
Corvallis
Nashville
...
(15 rows affected)
publishers.city
authors.city
142
SQL Server Introdução a SQL
Português para SQL
Quais são os códigos dos livros (title_id's) que a loja Eric the Read Books pediu?
select title_id
from sales
where stor_id =
(select stor_id
from stores
where stor_name = 'Eric the Read Books')
Qual o título do livro mais caro?select title_id
from titles
where price =
(select max(price) from titles)
PORTUGUÊS SQL
encontre ao menos uma linha exists
Que lojas pediram livros de psicologia?select distinct stor_id
from sales
where exists
(select *
from titles
where sales.title_id = titles.title_id
and type = 'psychology')
143
SQL Server Introdução a SQL
Sumário
Subconsulta - É uma declaração select, usada como uma expressão, como parte de outra declaração select, update, insert ou delete.
Resultados - Substituídos na consulta mais externa.
Subconsulta - Pode conter uma ou mais subconsultas.
any e all - Modificadores de operadores de compa-ração; apenas um valor é retornado.
exists - Interseção
not exists - Diferença
Sintaxe - select lista_de_seleção
[from {tabela} [,...]]
[where condições_de_busca]=
(select lista_de_seleção_subconsulta
[from {tabela} [,...]
[where condições_de_busca]
[group by expressão_s/_funções_agregadas [,...]]
[having condições_de-busca])
[group by expressão_s/_funções_agregadas [,...]]
[having condições_de-busca])
[order by {{tabela}.]coluna
|número_da_lista_de_seleção
|expressão} [asc | desc] [,...]]
[compute agregador_de_linha (coluna) [,...]
[by coluna [,...]] [,...]]
144
SQL Server Introdução a SQL
Lab: Subconsultas
Use selects aninhados para responder estas questões. As tabelas sales, authors, titles, titleauthor, stores e publishers serão usadas para respondê-las. Estas tabelas estão localizadas no banco de dados pubs.
1. Que autores moram na mesma cidade da 'Algodata Infosystems'?
2. Quantos livros a loja 'Bookbeat' pediu?
3. Que editores publicaram livros de négocios (business)?
4. Que livros não foram pedidos?
5. Que autores são publicados por 'New Moon Books' ?
6. Que livros custam mais que o preço mínimo corrente?
7. Que livros os editores de Massachusetts imprimiram?
145
SQL Server Introdução a SQL
Lab: Subconsultas (continuação)
8. Que livros foram publicados mas não foram vendidos? (use marcas de existência)
9. Que autores escreveram livros sobre culinária (cooking)?
Responda a questão abaixo com uma junção (join) e com uma consulta aninhada.
10. Que livros são publicados por ‘New Moon Books’?
junção
Aninhamento
146
Lab: Subconsultas (continuação)
Se você tiver mais tempo...
Tente responder as questões a seguir e verifique se elas podem ser resolvidas usando uma junção (join) e uma subconsulta. (Elas podem ser respondidas por mais de um método.)
1. Qual o nome do editor que vende o livro mais caro?
2. Que livros requerem um adiantamento superior ao maior adiantamento pago pelo editor ‘Algodata Infosystems’?
3. Que autores possuem o mesmo sobrenome?
4. Que lojas não pediram nenhum livro?
SQL Server Introdução a SQL
147
SQL Server Introdução a SQL
Uniões
Permite ao usuário combinar o resultado de mais de uma seleção.
Exemplo:select city, state from authors
union
select city, state from publishers
union
select city, state from stores
order by state, city
Descarta as linhas duplicatas (a não ser que a opção all seja utilizada)
Sintaxe GeralConsulta 1
[union [all] Consulta n]...
[sentença order by]
[sentença compute]
onde Consulta 1 é:
select lista_de_seleção
[sentença into]
[sentença from] [sentença where]
[sentença group by] [sentença having]
e Consulta n é:
select lista_de_seleção
[sentença from] [sentença where]
[sentença group by] [sentença having]
authors.city
publishers.city
stores.city
148
SQL Server Introdução a SQL
Regras de Uniões
Qualquer número de operadores de união pode aparecer em uma Declaração SQL Transacional.
Operadores de união são avaliados da esquerda para a direita.Por exemplo,
X union all (Y union Z)
pode não ser equivalente a
(X union all Y) union Z
(use parênteses para controlar a ordem de avaliação)
Todas as listas de seleção, na declaração união, devem ter o mesmo número de expressões.
As expressões nas listas de seleção são processadas em ordem.
Expressões correspondentes nas listas de seleção devem ser do mesmo tipo de dados ou uma conversão implícita dos dados deve ser possível, ou, por fim, sua conversão explícita deve ser especificada.
149
SQL Server Introdução a SQL
Regras de Uniões (continuação)
Os nomes das colunas no resultado são tirados da primeira consulta na declaração de união - especifique cabeçalhos de colunas apenas na primeira consulta.
Order by e compute são permitidos apenas após todas as consultas - não podem ser usados em cada consulta individualmente.
As sentenças group by e having podem aparecer apenas nas consultas individuais, não podem ser usadas para o resultado final.
A sentença into pode ser utilizada apenas na primeira consulta - para criar uma nova tabela resultante.
O operador de união não pode ser usado com a declaração create view ou com a sentença for browse.
150
SQL Server Introdução a SQL
Lab: Uniões
As tabelas authors, stores, publishers, titles, titleauthor, discounts e sales do banco de dados pubs são usadas para este exercício.
1. Que estados aparecem no banco de dados?
2. Que livros são ou escritos ou editados na Califórnia (CA)?
Usando junção:
Usando união:
3. Que livros custam mais que o preço médio dos livros, ou têm um desconto superior ao desconto médio?
151
SQL Server Introdução a SQL
Definição e Manipulação de Dados
Nesta seção o estudante aprenderá a criar uma tabela, inserir dados numa tabela, atualizar dados numa tabela e apagar dados de uma tabela.
Objetivos:
Ao final desta seção, o estudante deverá ser capaz de:
– Criar uma tabela a partir de uma tabela existente;
– Inserir dados em uma tabela;
– Atualizar dados em uma tabela;
– Apagar dados de uma tabela.
152
SQL Server Introdução a SQL
Criando uma Tabela a Partir de Outra Existente
Chave INTO usada para criar uma tabela a partir de uma tabela existente:
Sintaxe:select lista_de_seleção
[into tabela
[from {tabela} [,...]]
[where condições_de_busca]
Exemplo (tabela criada, dados carregados):select *
into new_titles
from titles
Exemplo (tabela criada, dados não carregados):select *
A sentença INSERT adiciona valores de dados a uma tabela já existente.– O SQL Server verifica, no momento da entrada
do dado, se o valor inserido é do tipo correto de dado.
» Se o valor for muito longo, o SQL Server trunca-o para o comprimento especificado; nenhuma mensagem de aviso é dada.
– Algumas colunas são definidas de forma a permitirem valores nulos.
» Para inserir um valor nulo (null value), em uma coluna que permite valores nulos, especifique null ou não especifique nenhum valor.
– Todos os valores do tipo char e datetime devem ser incluídos entre aspas simples ou duplas.
» Para inserir uma string de caracteres mais longa do que uma linha, use uma barra invertida (\) antes de escrever a próxima linha.
» Para inserir aspas como um caracter, use o tipo oposto de aspas, ou seja, se o usuário deseja inserir aspas simples como um caractere, deverá incluir todos os dados a serem inseridos entre aspas duplas.
154
SQL Server Introdução a SQL
Inserindo Dados (continuação)
Sintaxe simplificada insert [into] nome_da_tabela
[(lista_de_colunas)] values
{valores(lista_de_valores)|declaração_select}
Adicionar uma única linha:
Exemplo (linha completa):insert into new_pubs
values
('9945', 'Mysteries Galore', 'Kansas City', 'KS')
/*Acrescentando o nome de um novo editor*/
Exemplo (inserindo uma aspa simples):insert into new_pubs
Exemplo (inserindo dados de uma outra tabela):insert into new_pubs (pub_id, pub_name, city, state)
select pub_id, pub_name, city, state
from publishers
Exemplo (inserindo dados, usando uma subcon-sulta):
insert into new_pubs /*Insere novos editores*/
select * /*da área de Boston*/
from mass_publishers
where pub_id in
(select pub_id
from mass_publishers
where city = 'Boston')
SQL Server Introdução a SQL
156
SQL Server Introdução a SQL
Modificação de Dados - Atualizando Dados
A sentença UPDATE modifica o valor de uma ou mais colunas numa tabela (modifica os valores dos dados em linhas existentes, coluna a coluna).– A sentença SET determina as colunas a serem
modificadas.
– A sentença FROM determina de que tabelas os dados estão sendo originados, se mais de uma tabela estiver sendo usada para determinar o valor da nova coluna.
– A sentença WHERE determina as linhas a serem modificadas.
– Não é possível atualizar múltiplas tabelas numa mesma declaração de atualização (update).
Sintaxe simplificada:update nome_da_tabela
set nome_da_coluna = {expressão | null}
[, nome_da_coluna = {expressão | null}] ...
[from nome_da_tabela, nome_da_tabela, ...]
[where condições-de_busca]
Exemplo (modifica os dados com base num valor constante):
update new_pubs /*O nome de */
set pub_name = "New Publisher's Name" /*um editor */
where pub_name = "New Moon Books" /*mudou */
157
SQL Server Introdução a SQL
Atualizando Dados (continuação)
Exemplo (modifica dados em todas as linhas que atendem ao critério especificado):
update new_titles
set contract = 0
where pub_id = '1389'
Exemplo (altera dados em todas as linhas - sem condições):
update new_titles
set advance = 0
Exemplo (altera dados em uma tabela com base em dados de outra):
update new_titles
set contract = 0
from new_titles, publishers
where new_titles.pub_id = publishers.pub_id
and pub_name = 'New Moon Books'
Exemplo (atualização usando uma subconsulta):update new_titles /*Atualiza o total de vendas*/
set ytd_sales = /*por 'BU1032'*/
(select sum(qty)
from sales
where title_id = 'BU1032')
where title_id = 'BU1032'
158
SQL Server Introdução a SQL
Modificação de Dados - Removendo Dados
A sentença DELETE remove dados selecio-nados de uma tabela.– A chave FROM (depois do delete) é opcional.
– A chave FROM (extensão da sintaxe) permite que dados sejam apagados de uma tabela com base em dados armazenados em outras tabelas.
– A sentença WHERE especifica as linhas que serão apagadas. Caso esta sentença seja omitida, todas as linhas serão removidas.
Sintaxe:delete [from] {nome_da_tabela}
[from {nome_da_tabela}] [,...]
[where condições_de_busca]
Exemplo (remove dados de uma tabela, com base numa constante):
delete from new_pubs
where pub_name = 'Mysteries Galore'
Exemplo:delete from new_titles /*Apaga os dados de todos
os*/
where price > $15 /*livros que custam mais de $15*/
159
SQL Server Introdução a SQL
Removendo Dados (continuação)
Exemplo (apaga linhas com base em dados de outras tabelas):
delete new_titles
from new_titles, new_pubs
where new_titles.pub_id = new_pubs.pub_id
and pub_name = "Jardin's Inc."
Exemplo (remove linhas usando uma subconsulta):
delete from new_titles /*Apaga todos os títulos de livros*/
where title_id in /*de qualquer autor de Utah*/
(select title_id
from titleauthor
where au_id in
(select au_id
from authors
where state = 'UT'))
160
SQL Server Introdução a SQL
Removendo Definições de Dados
DROP TABLE remove a definição de uma tabela e todos os dados do banco de dados.
Sintaxe:
drop table nome_da_tabela [, nome_da_tabela] ...
Exemplo:
drop table new_titles
161
SQL Server Introdução a SQL
Sumário
Chave into - Cria uma tabela a partir de outra já existente.
select lista_de_seleção
[into tabela]
[from {tabela} [,..]]
[where condições_de_busca]
Sentença delete - Remove os dados selecionados de uma tabela.
delete [from] {nome_da_tabela}
[where condições_de_busca]
drop table - remove a definição de uma tabela e todos os dados do banco de dados.
drop nome_da_tabela
[,nome_da_tabela]...
Sentença insert - Acrescenta dados a uma tabela já existente.
insert [into] nome_da_tabela
[(lista_de_colunas)]
{values(lista_de_valores)|declaração_select}
162
SQL Server Introdução a SQL
Sumário (continuação)
Sentença update - Modifica o valor de uma ou mais colunas numa tabela (muda os valores de dados de linhas existentes).
update nome_da_tabela
set nome_da_coluna = {expressão | null}
[, set nome-da_coluna = {expressão |null}
[from nome_da_tabela, nome_da_tabela, ...]
[where condições_de_busca]
163
SQL Server Introdução a SQL
Lab: Definições de Dados
Neste exercício você criará sua própria tabela.
1. Usando select into, crie uma tabela chamada addressN (onde N é o seu número de usuário) que possui as mesmas colunas que a tabela authors. (Dica: use uma sentença where falsa).
2. Insira duas linhas de dados na tabela addressN (crie entradas de dados fictícias).
3. Insira dados na tabela addressN através da recuperação de todos os autores que moram em Palo Alto e San Jose, a partir da tabela authors. (Dica: use insert com uma declaração select)
4. Modifique um valor existente: o código postal (zip) das pessoas que moram em Palo Alto mudou para ‘94333’.
5. Apague todas as entradas que têm o nome da cidade San Jose.