SQL (Structured Querie Language) Escola Secundária de Emídio Navarro 2001/2002 Estruturas, Tratamento e Organização de Dados



Documentos relacionados
Comandos de Manipulação

Tarefa Orientada 13 Agrupamento e sumário de dados

SQL Linguagem de Manipulação de Dados. Banco de Dados Profa. Dra. Cristina Dutra de Aguiar Ciferri

SQL UMA ABORDAGEM INTERESSANTE

1. Assinale as afirmações que são verdadeiras e as que são falsas, corrigindo-as:

Linguagem de Consulta Estruturada SQL- DML

Programação SQL. INTRODUÇÃO II parte

António Rocha Nuno Melo e Castro

Structured Query Language (SQL)

Programação SQL. Manipulação de Dados. DML Data Manipulation Language

Tarefa Orientada 10 Obter informação a partir de uma tabela

Tarefa Orientada 16 Vistas

SQL TGD/JMB 1. Projecto de Bases de Dados. Linguagem SQL

Tarefa Orientada 15 Manipulação de dados

Definida pelo American National Standard Institute (ANSI) em 1986

Banco de Dados. Marcio de Carvalho Victorino Exercícios SQL

UNIVERSIDADE FEDERAL DE SANTA MARIA - UFSM COLÉGIO AGRÍCOLA DE FREDERICO WESTPHALEN BANCO DE DADOS II

DML - SELECT Agrupando Dados

Uma expressão básica em SQL consiste em três cláusulas: select, from e where.

SQL (Structured Query Language)

3) Palavra-chave distinct (select-from). Obter apenas os pibs distintos entre si.

Tarefa Orientada 14 Subconsultas

Structured Query Language (SQL) SQL é uma linguagem normalizada (ANSI) para consultas e actualizações de bases de dados relacionais.

COMPETÊNCIAS ESPECÍFICAS Compreender e utilizar a linguagem SQL, na construção e manutenção de uma base de dados.

Bases de Dados 2005/2006. Aula 5

IF685 Gerenciamento de Dados e Informação - Prof. Robson Fidalgo 1

Banco de Dados. Prof. Antonio

Princípio dos anos 70 IBM desenvolve a linguagem Sequel para o System R. Standards ISO e ANSI SQL-86, SQL-89, SQL-92, SQL:1999, SQL:2003

Pedro F. Carvalho OCP Oracle g LINGUAGEM SQL. São José do Rio Preto

SQL DML. Frederico D. Bortoloti

EXEMPLOS DE COMANDOS NO SQL SERVER

Ex.: INSERT INTO tmpautor (CDAUTOR, NMAUTOR) VALUES (1, Renato Araújo )

Introdução à Banco de Dados. Nathalia Sautchuk Patrício

Os dados no MySQL são armazenado em tabelas. Uma tabela é uma colecção de informação relacionada e consiste em colunas e linhas.

SQL Structured Query Language

Tarefa Orientada 12 Junção Externa, Auto-Junção e União

1. SQL Instrumental Select Delete Update Insert Group by Having Unnion All...

Básico da Linguagem SQL. Definição de Esquemas em SQL. SQL(Structured Query Language)

Introdução ao SQL Avançado

SQL comando SELECT. SELECT [DISTINCT] <campos> FROM <tabela> [condição] [ ; ] Paulo Damico - MDK Informática Ltda.

Bases de Dados. DML Data Manipulation Language Parte 1

Prof.: Clayton Maciel Costa

NOME SEXO CPF NASCIMENTO SALARIO

Principais Instruções em SQL. Contidas nesta apostila as principais instruções em SQL para a manutenção em Bancos de Dados.

Principais Instruções em SQL

Programação SQL. Introdução

PROGRAMA. Aquisição dos conceitos teóricos mais importantes sobre bases de dados contextualizados à luz de exemplos da sua aplicação no mundo real.

PROGRAMA. Objectivos Gerais :

BANCO DE DADOS -INTRODUÇÃO AO SQL. Prof. Angelo Augusto Frozza, M.Sc.

Treinamento sobre SQL

Linguagem de Consulta Estruturada (SQL)

Projeto de Banco de Dados

Banco de Dados I Linguagem SQL Parte 2. Autor: Prof. Cláudio Baptista Adaptado por: Prof. Ricardo Antonello

Linguagem SQL. Comandos Básicos

O que são Bancos de Dados?

Linguagem de Consulta - SQL

Tarefa Orientada 19 Triggers

SQL. Prof. Márcio Bueno.

PHP INTEGRAÇÃO COM MYSQL PARTE 1

SQL BANCO DE DADOS. Linguagem de consulta SQL. Linguagem de consulta SQL. Linguagem de Consulta Estruturada

Álgebra Relacional. Conjunto de operações que usa uma ou duas relações como entrada e gera uma relação de saída. Operações básicas:

Bases de Dados 2007/2008. Aula 1. Referências

SQL (Tópicos) Structured Query Language

EXERCÍCIOS PRÁTICOS. Banco de Dados

DESENVOLVIMENTO DE SOFTWARE

ORACLE 11 G INTRODUÇÃO AO ORACLE, SQL,PL/SQL. Carga horária: 32 Horas

Ex.: INSERT INTO tmpautor (CDAUTOR, NMAUTOR) VALUES (1, Renato Araújo )

UFCD 787. Administração de base de dados. Elsa Marisa S. Almeida

LINGUAGEM SQL. DML - Linguagem de Manipulação de Dados

Tarefa Orientada 11 Junção Interna

LINGUAGEM SQL PARA CONSULTAS EM MICROSOFT ACCESS

Banco de Dados. Structured Query Language SQL. Prof. Walteno Martins Parreira Jr 1.

MANUAL DO EXCEL. Um campo é um espaço que contém determinada informação (ex: Nome do cliente X, Telefone do Sr. Y)

Banco de Dados. Maurício Edgar Stivanello

Exemplo Clínica. Exemplo Clínica. Exemplo Clínica. Exemplo Clínica. (

Linguagem de Banco de Dados DML Exercícios

Principais Comandos SQL Usados no MySql

Aplicações de Escritório Electrónico

Sistemas de Bases de Dados Relacionais Introdução ao SQL. Interrogações diversas sobre a Base de Dados Northwind

Introdução ao SQL. Aécio Costa

Exercícios de Lógica Exercícios de Fixação 08

EXCEL TABELAS DINÂMICAS

Rápida revisão do Modelo Relacional

Banco de Dados Oracle 10g: Introdução à Linguagem SQL

BASES DE DADOS I LTSI/2. Universidade da Beira Interior, Departamento de Informática Hugo Pedro Proença, 2010/2011

LINGUAGEM SQL. SQL Server 2008 Comandos iniciais

Linguagem SQL - Structured Query Language

DESENVOLVIMENTO DE SOFTWARE

Consultas SQL Parte II

SQL (Linguagem de Consulta Estruturada)

Introdução à Engenharia da Computação. Banco de Dados Professor Machado

Linguagem SQL - Structured Query Language

IMPLEMENTAÇÃO DE BANCO DE DADOS

ANÁLISE E PROJETO DE BANCO DE DADOS

FICHA ORIENTADA Nº1. Barra de fórmulas. Área de trabalho T E C N O L O G I A S D E I N F O R M A Ç Ã O E C O M U N I C A Ç Ã O

Faculdade Pitágoras 16/08/2011. Curso Superior de Tecnologia: Banco de Dados Sistemas para Internet

SQL é uma linguagem de consulta que implementa as operações da álgebra relacional de forma bem amigável.

SQL consulta com operadores

SQL. SQL (Structured Query Language) Comando CREATE TABLE. SQL é uma linguagem de consulta que possibilita:

BASES DE DADOS I LTSI/2. Universidade da Beira Interior, Departamento de Informática Hugo Pedro Proença, 2010/2011

Transcrição:

SQL (Structured Querie Language) SQL é mais que uma linguagem de interrogação estruturada. Inclui características para a definição da estrutura de dados, para alterar os dados de uma base de dados, e para especificar esquemas de segurança. Estas características agrupam-se do seguinte modo: DDL Data Definition Language DML Data Manipulation Language DCL Data Control Language Numa base de dados relacional, toda a informação está logicamente organizada em tabelas. Podemos considerar a existência de dois tipos de tabelas numa base de dados: as tabelas base que efectivamente estão armazenadas num suporte físico da base de dados as tabelas virtuais que só existem em resultado da execução de um conjunto de comandos de consulta, executados sobre as tabelas base. A palavra inglesa querie designa uma consulta à base de dados e consiste na execução de uma ou mais operações sobre tabelas. As queries ou consultas podem ser executadas sobre as tabelas base ou sobre as tabelas virtuais que resultam de outras consultas. Do ponto de vista lógico, o resultado de uma consulta (querie) é uma tabela. A diferença entre uma tabela base e uma tabela virtual é basicamente a seguinte: as tabelas base existem fisicamente como estruturas de dados; as tabelas virtuais (resultados de queries) existem apenas como um conjunto de comandos que permitem extrair informação da base de dados. Pág. 1 de 16

Noções Elementares São válidos os seguintes operadores aritméticos: Soma + Subtracção - Multiplicação * Divisão / Os operadores lógicos são: AND, OR e NOT. Predicados Um predicado é uma condição que pode ser realizada para produzir um valor verdadeiro, falso ou desconhecido. São eles: Comparação (=, <, >, <>, <=, =>) Entre (... BETWEEN... AND..., IN, NOT IN) LIKE NULL Quantificadores (ALL, SOME, ANY) EXISTS, NOT EXISTS As cláusulas são expressões realizadas em tabelas que se usam para derivar tabelas, tais como FROM, WHERE, GROUP BY, HAVING e ORDER BY. Pág. 2 de 16

Linguagem de Manipulação de Dados (DML Data Manipulation Language) É utilizada para efectuar operações de selecção, ordenação, cálculo de informação guardada em tabelas, entre outras. Select Queries Cláusula SELECT Permite extrair informação de uma Base de Dados (DB Data Base). Sintaxe: SELECT <lista_campos> FROM <lista_tabelas> Consulta todos os autores da tabela Autores: SELECT Autor FROM Autores Consulta todos os campos da tabela Autores: SELECT * FROM Autores Consulta todos os autores visualizando o dobro da sua idade: SELECT Autor, Idade * 2 AS [Idades] FROM Autores Cláusula WHERE Permite estabelecer condições entre campos da tabela(s) ou até mesmo envolvendo input s digitados pelo utilizador. Sintaxe: SELECT <lista_campos> FROM <lista_tabelas> WHERE <critério> as listas são separadas por vírgulas se desejarmos seleccionar todos os campos usamos * Pág. 3 de 16

Uma consulta à tabela no sentido de obter apenas os elementos relativos às editoras situadas na cidade de Lisboa: SELECT Pubid, Nome AS [Nome Editora], Morada, Cod_Postal, Cidade, Telefone FROM Editoras WHERE Cidade= Lisboa Consulta o nome e morada de todas as editoras da cidade de Lisboa: SELECT Nome, Morada FROM Editoras WHERE Cidade= Lisboa Consulta o Nome, Região e Cidade quando a região toma o valor CA e a cidade é Lisboa: SELECT Nome, Região, Cidade FROM Editoras WHERE Região= CA AND Cidade= Lisboa Utilizar na cláusula WHERE LIKE Destina-se a comparar strings com padrão. Consulta os nomes de todos os autores que tenham Lopes no nome: SELECT Autor FROM Autores WHERE Autor LIKE *Lopes* Consulta o(s) código(s) e descrição(ões) do(s) produto(s) quando na descrição está envolvida a palavra sumos: SELECT Prod_Cod, Prod_Descrição FROM Produtos WHERE Prod_Descrição LIKE *sumos* Pág. 4 de 16

Utilizar na cláusula WHERE BETWEEN AND Consulta todos os nomes e cidades onde o campo Pubid toma valores entre 10 e 20: SELECT Nome, Cidade FROM Editoras WHERE Pubid BETWEEN 10 AND 20 Utilizar na cláusula WHERE IN Consulta todos os nomes e cidades onde o campo região toma valores no conjunto ( NY, CA, AK ): SELECT Nome, Cidade FROM Editoras WHERE Região IN ( NY, CA, AK ) Cláusula WHERE na ligação de duas ou mais tabelas Sintaxe: SELECT <tabela1.colunaa>, <tabela2.colunaa> FROM <tabela1>, <tabela2> WHERE <tabela1.colunaa> = <tabela2.colunaa> Consulta todas as linhas da tabela Títulos e da tabela Autores com o mesmo campo Au_ID. Se existir algum título para o qual não foi introduzido código de um Autor, o mesmo não aparecerá (se o código do autor não for chave primária). SELECT Titulos.Titulo, Autores.Autor FROM Titulos, Autores WHERE Titulos.Au_ID = Autores.Au_ID Esta operação designa-se por INNER JOIN, como se verá na devida altura. Pág. 5 de 16

Cláusula AS Permite alterar o cabeçalho (titulo) que irá aparecer na listagem obtida. SELECT Titulos.Titulo AS [Titulo do Livro], Autores.Autor AS [Autor do Livro] FROM Titulos.Autores WHERE Titulos.Au_ID = Autores.Au_ID Funções agregadas COUNT(<nome_campo>) Devolve o número de linhas em que o campo <nome_campo> não é nulo MAX(<nome_campo>) Devolve o maior valor para o campo <nome_campo> MIN(<nome_campo>) Devolve o menor valor para o campo <nome_campo> SUM(<nome_campo>) Devolve a soma dos conteúdos do campo <nome_campo> AVG(<nome_campo>) Devolve a média dos conteúdos do campo <nome_campo> FIRST(<nome_campo>) Devolve o valor do primeiro registo da tabela ou Querie LAST(<nome_campo>) Devolve o valor do último registo da tabela ou Querie Devolve o número de elementos da tabela Produtos: SELECT COUNT(Prod_Codigo) AS [Total] FROM Produtos Se não for mencionado o Nome da coluna [Total], é por defeito Expr1000. Como tal, é conveniente atribuir um título à coluna. Pág. 6 de 16

Devolve o menor, o maior e o preço médio dos livros: SELECT COUNT(Unidades) AS [Nº Elementos], MIN(Preço_Unidades) AS Min, MAX(Preço_Unidades) AS Max, AVG(Preço_Unidades) AS Média FROM Preços_Livros Consulta os livros com menor preço SELECT titulo, anopublicação, preço FROM titulos, preços WHERE titulos.codpreco = precos.codpreco AND Preco = (SELECT Min(preco) FROM precos) Cláusula INNER JOIN Estabelece ligação entre duas ou mais tabelas através de campos chave. SELECT titulos.titulo, autores.autor FROM titulos, autores.titulos INNER JOIN autores ON titulos.au_id = autores.au_id Poderíamos escrever o mesmo comando com uma cláusula WHERE (talvez mais prático). SELECT titulos.titulo, titulos.isbn, autores.autor, editoras.nome FROM titulos, autores, editoras WHERE editoras.editid = titulos.editid AND titulos.au_id = autores.au_id Pág. 7 de 16

Cláusulas LEFT JOIN e RIGHT JOIN Uma cláusula RIGHT JOIN inclui todos os registos da segunda tabela (à direita), mesmo que não exista nenhuma relação com a primeira tabela (à esquerda). Listar todas as editoras, mesmo que não tenham nenhum titulo publicado: SELECT titulos.titulo, editoras.nome FROM titulos, editoras titulos RIGHT JOIN editoras ON titulos.editid = editoras.auid A cláusula LEFT JOIN inclui todos os registos da primeira tabela (à esquerda), mesmo que não exista nenhuma relação com a segunda tabela (à direita). Listar todos os titulos, mesmo os que não tenham editoras: SELECT titulos.titulo, editoras.nome FROM titulos, editoras titulos LEFT JOIN editoras ON titulos.editid = editoras.auid Predicado ALL ALL Se não incluir um dos predicados referidos, ALL é assumido e todos os registos que verificam as condições são devolvidos. Dois exemplos equivalentes: SELECT ALL FROM titulos, autores WHERE editoras.editid = titulos.editid SELECT * FROM titulos, autores WHERE editoras.editid = titulos.editid Pág. 8 de 16

Predicado DISTINCT Esta cláusula omite todos os registos que contêm dados duplicados nos campos seleccionados. Por outras palavras, se o querie contiver um campo com o mesmo valor em mais do que uma linha, a cláusula DISTINCT elimina todos os duplicados. Lista as editoras que têm pelo menos um titulo publicado: SELECT editoras.nome FROM titulos, editoras WHERE editoras.editid = titulos.edit.id Este querie devolve tantas linhas quantos os títulos que existem na tabela de títulos. Para eliminar a repetição do nome das editoras, usa-se: SELECT DISTINCT editoras.nome FROM titulos, editoras WHERE editoras.editid = titulos.edit.id Predicado DISTINCTROW Omite dados baseados em registos duplicados, mas não referentes a campos duplicados. SELECT DISTINCTROW titulos.titulo, titulos.anoedicao, autores.autor, editoras.nome AS Editora FROM editoras, titulos.(editoras RIGHT JOIN titulos ON editoras.editid = titulos.editid) LEFT JOIN autores ON titulos.au_id = autores.au_id WHERE (editoras.nome = [Insira Nome]) ORDER BY titulos.titulo Observa que na sexta linha existe [Insira Nome]. Isto significa que é solicitado ao utilizador que insira um nome para depois efectuar-se a comparação. Deste modo, quando se utiliza uma string entre parêntesis rectos que não seja o nome de um campo, o SQL solicita ao utilizador que insira um valor (string ou não) pelo teclado. Pág. 9 de 16

Cláusula ORDER BY Permite ordenar a listagem pelo campo referido, por ordem crescente: SELECT au_id, autor FROM autores ORDER BY autor Consulta as regiões e cidades por ordem descendente e ascendente respectivamente: SELECT regiao, cidade FROM editoras ORDER BY regiao DESC, cidade ASC Cláusulas TOP n e TOP n PERCENT Estas cláusulas servem para limitar o número de registos num conjunto de resultados. TOP n Devolve os primeiros n registos. Quando utilizamos a cláusula TOP por vezes recorre-se ao uso da cláusula ORDER BY. SELECT TOP 5 * FROM precos_livros ORDER BY unidades DESC TOP n PERCENT Devolve os primeiros n porcentos de registos. SELECT TOP 5 PERCENT * FROM preco_livros ORDER BY unidades DESC Pág. 10 de 16

Cláusula GROUP BY Agrupar os resultados das queries segundo um determinando critério. GROUP BY <coluna1>, <coluna2>,..., <colunan> Consulta o número de elementos da tabela Produtos para cada categoria de Produto: SELECT prod_categoria AS Categoria, COUNT(prod_categoria) AS [Nº Elementos] FROM Produtos GROUP BY prod_categoria A cláusula GROUP BY especifica o modo como queremos agrupar o resultado da função agregada. Consulta o menor preço, maior preço e preço médio dos produtos por categoria: SELECT prod_categoria AS Categoria, COUNT(prod_categoria) AS [Nº Elementos], MIN(prod_preco) AS Min, MAX(prod_preco) AS Max, AVG(prod_preco) AS Média FROM Produtos GROUP BY prod_categoria SELECT ISBN AS Código, COUNT(au_ID) AS [Nº Elementos] FROM Titulos GROUP BY ISBN Pág. 11 de 16

Cláusula HAVING Podemos utilizar a cláusula HAVING para aplicar um filtro ao resultado de um querie ao contrário da cláusula WHERE que aplica um filtro a toda(s) a(s) tabela(s) envolvida(s). Vejamos o mesmo querie com a aplicação de um filtro, para limitar as categorias de produtos a bolachas e aperitivos. SELECT prod_categoria AS Categoria, COUNT(prod_categoria) AS [Nº Elementos], MIN(prod_preco) AS Min, MAX(prod_preco) AS Max, AVG(prod_preco) AS Média FROM Produtos GROUP BY prod_categoria HAVING prod_categoria IN [ Bolachas, Aperitivos ] Podemos formatar os resultados numéricos obtidos (Visual Basic): SELECT prod_categoria AS categoria, FORMAT(COUNT(prod_categoria), 000 ) AS [Nº Elementos] FORMAT(MIN(prod_preco), $00 ) AS Min, FORMAT(MAX(prod_preco), $00 ) AS Max, FORMAT(AVG(prod_preco), $00 ) AS Média FROM Produtos GROUP BY prod_categoria Vejamos exemplos que involvem mais que uma tabela: Consulta o nome dos autores e o númerode titulos publicados pelos mesmos: SELECT autores.autor, COUNT(titulos.titulo) FROM titulos, autores WHERE titulos.au_id = autores.au_id GROUP BY autores.autor Pág. 12 de 16

Consulta os autores que escrevam mais de um titulo SELECT autores.autor, COUNT(titulos.titulo) FROM titulos, autores WHERE titulos.au_id = autores.au_id GROUP BY autores.autor HAVING COUNT(titulos.titulo)>1 Revisão: SELECT titulos.titulo, titulos.anoedicao, autores.autor, editoras.nome AS Editora FROM editoras, titulos, autores, (editoras RIGHT JOIN titulos ON editoras.editid = titulos.editid) LEFT JOIN autores ON titulos.au_id = autores.au_id ORDER BY titulos.titulo Observe que o nome de um campo quando possui um ou mais espaços, deve estar envolvido entre parêntesis rectos. Pág. 13 de 16

Nomes Alternativos para Tabelas Um nome alternativo para uma tabela deve ser definido na cláusula FROM. O nome alternativo pode depois ser usado tanto na cláusula SELECT como na cláusula WHERE. Por exemplo: para abreviar o nome da tabela autores para au, escreve-se: SELECT au.autor, COUNT(titulos.titulo) FROM titulos, autores AS au WHERE titulos.au_id = au.au_id ACTION QUERIES As Action Queries não devolvem um conjunto de registos. Apenas modificam o conteúdo de uma ou mais tabelas. Comando INSERT INTO O comando INSERT serve para inserir novas linhas, ou parte de novas linhas, numa tabela. Sintaxe: INSERT INTO <destino> [IN <externaldatabase>][(<campo1>[,<campo2>...)]] SELECT [<origem>.]<campo1>[,<campo2>[,...] FROM <expressão> INSERT INTO <destino> [(<campo1>[,<campo2>,...])] VALUES (<valor1>[,<valor2>,...]) Existem duas maneiras principais de o utilizar: Selecciona todos os registos da tabela Novo Cliente e adiciona-o à tabela Clientes: INSERT INTO Clientes SELECT [Novo Cliente].* FROM [Novo Cliente] Pág. 14 de 16

Selecciona todos os registos da tabela Ajudantes que verificam a condição DataSalario < Now()-30 e adiciona-os à tabela empregados: INSERT INTO Empregados SELECT Ajudantes.* FROM Ajudantes WHERE [Data Salário] < Now() - 30 Insere um registo na tabela autores co os valores especificados: INSERT INTO autores(au_id, autor, idade) VALUES (11, Francisco Manuel,30) Outro processo equivalente será: INSERT INTO autores(au_id, autor, idade) SELECT 11, Francisco Manuel, 30 Actualizar Registos Usa-se a cláusula UPDATE para actualizar um registo numa tabela. Sintaxe: UPDATE <tabela> SET <coluna1> = <valor1> SET <coluna2> = <valor2>... SET <colunan> = <valorn> WHERE <critério> Aumenta os preços dos produtos da categoria Bebidas em 3%: UPDATE produtos SET prodpreco = 1.03 * prodpreco WHERE prodcategoria = Bebidas A cláusula especifica a operação a efectuar nas colunas. Pág. 15 de 16

Atribui ao campo relatorio o valor 5 em todos os registos onde a condição relatorio = 2 se verifica: UPDATE Empregados SET relatorio = 5 WHERE relatorio = 2 Apaga Registo(s) A cláusula DELETE é utilizada para eliminar registos. Remover os registos cujos empregados sejam do tipo Provisório DELETE * FROM empregados WHERE tipo = Provisório Remover todos os empregados e os seus registos de (remover numa relação do lado N) DELETE pagamentos.* FROM empregados, pagamentos, empregados INNER JOIN pagamentos ON empregados.empregadoid = pagamento.empregadoid WHERE tipo = Provisório Nota: O comando DELETE apaga o registo e não valores isolados da tabela. Pág. 16 de 16