Escolar Documentos
Profissional Documentos
Cultura Documentos
Banco de Dados
Sumario
Objetivos Gerais
Esse material tem por objetivo revisar os conhecimentos adquiridos na 1ª. etapa e
aprofundar na linguagem SQL.
Página |5
1. A Linguagem SQL
Segundo Ramalho (2001), a linguagem SQL é a linguagem padrão dos bancos de dados.
Oracle, SQL server, Interbase, Access, entre outras, fazem uso dessa linguagem para criar e
manter seus bancos de dados. Dominar a linguagem SQL é uma tarefa obrigatória para
todos os desenvolvedores de sistema que trabalham com bancos de dados. Programas
criados em linguagens como Delphi, Visual Basic, Java e outras utilizam rotinas escritas
em SQL para acessar um banco de dados.
A Linguagem SQL surgiu na IBM, e é uma abreviação de Structured Query Language. Ela
foi criada para definir, modificar e consultar dados contidos em um banco de dados
relacional, outra grande contribuição da IBM, que em 1970, através de E.F. Code, propôs
esse modelo.
A simplicidade dessa linguagem fez com que ela se tornasse um padrão para acesso a banco
de dados e um comitê foi criado para padronizá-la na tentativa de torná-la independente de
plataforma. O padrão SQL é definido pelo ANSI (American National Standards Institute).
Aprender SQL é o primeiro passo para se tornar um programador de qualquer dialeto SQL.
De acordo com sua finalidade, a Linguagem SQL pode ser dividida em três grupos de
comandos:
2. Revisão MySql
O MySQL, sistema de gerenciamento de banco de dados SQL Open Source mais popular, é
desenvolvido, distribuído e tem suporte da MySQL AB. A MySQL AB é uma empresa
comercial, fundada pelos desenvolvedores do MySQL, cujo negócio principal é fornecer
serviços relacionados ao sistema de gerenciamento de banco de dados MySQL.
O MySQL tem a vantagem de ser TOTALMENTE GRATUITO tanto para uso comercial,
quanto para uso privado.
2.1. Interface
Após clicar na opção, abrirá uma aba, solicitando o nome para o banco de dados, como
mostra a figura:
Clique em finish para finalizar e confirmar a criação do banco de dados. Veja no OBJECT
BROWSER, em SCHEMAS, como mostra a figura:
Se for de sua preferência codificar, ou seja, usar as linhas de comando, utilize o editor de
texto para desenvolver bancos, tabelas, etc., como mostra a figura:
P á g i n a | 10
Agora vamos iniciar o processo de criação de tabelas sem fazer a digitação do comando. Na
barra de botões de inicialização rápida existe uma opção de criação de tabelas, como mostra
a figura:
Antes de clicar no botão CREATE A NEW TABLE, escolha o banco em que deseja criar a
tabela. No OBJECT BROWSER, com o botão direito do mouse, clique sobre o banco e
escolha a opção SET AS DEFAULT SCHEMA (figura 18).
P á g i n a | 11
Feito isso, você pode dar continuidade ao processo de criação das tabelas, clicando no
botão indicado na figura acima.
Depois do processo mostrado acima, clique em CREATE NEW TABLE. Na própria janela
do MySQL aparecerá uma nova aba para a criação de uma nova tabela, como mostra a
figura 09:
Para melhor visualizar a criação dos campos da tabela, clique sobre as duas setas no canto
superior direito (figura 09). Em seguida, a janela ficará um pouco diferente, como mostra a
figura 20:
Faça agora o preenchimento dos campos, montando a estrutura da tabela, como mostra a
figura 10.
Figura 11: Janela para a criação de tabelas com os campos a serem criados
Clique em APPLY. Como é comum ao utilizar a ferramenta gráfica, aparecerá uma janela
do assistente, como mostra a figura 11:
P á g i n a | 14
Mais uma vez clique em APPLY para dar continuidade ao processo de criação da tabela, de
acordo com a figura 12:
P á g i n a | 15
Pronto! Criamos as tabelas do nosso banco de dados, mas ainda não sabemos exatamente
que tipo de dados devemos utilizar. Então veremos a seguir todos os tipos de dados com
que o MySQL trabalha.
2.4.1. Numéricos
Os dados numéricos podem ser divididos em dois grandes grupos: com e sem vírgula
flutuante, isto é, com e sem casas decimais.
TinyInt: é um número inteiro com ou sem signo. Com signo a margem de valores válidos é
de -128 até 127. Sem signo, a margem de valores é de 0 até 255.
SmallInt: número inteiro com ou sem signo. Com signo, a margem de valores válidos é de
-32768 até 32767. Sem signo, a margem de valores válidos é de 0 até 65535.
P á g i n a | 17
MediumInt: número inteiro com ou sem signo. Com signo, a margem de valores válidos
vai de –8.388.608 até 8.388.607. Sem signo, a margem de valores é de 0 até 16777215.
Integer, Int: número inteiro com ou sem signo. Com signo a margem de valores válidos
vai de -2147483648 até 2147483647. Sem signo, a margem de valores é de 0 até
429.496.295.
BigInt: número inteiro com ou sem signo. Com signo a margem de valores válidos vai de -
9.223.372.036.854.775.808 até 9.223.372.036.854.775.807. Sem signo, a margem de
valores é de 0 até 18.446.744.073.709.551.615.
Float: número pequeno em vírgula flutuante de precisão simples. Os valores válidos vão de
- 3.402823466E+38 até -1.175494351E-38,0 e de 175494351E-38 até 3.402823466E+38.
xReal, Double: número em vírgula flutuante de dupla precisão. Os valores permitidos vão
desde -1.7976931348623157E+308 até -2.2250738585072014E-308, 0 e desde
2.2250738585072014E-308 até 1.7976931348623157E+308
2.4.2. Data
Na hora de armazenar datas, há que se ter em conta que MySQL não verifica de uma
maneira estrita se uma data é válida ou não. Simplesmente comprova que o mês está
compreendido entre 0 e 12 e que o dia está compreendido entre 0 e 31.
Date: tipo data, armazena uma data. A margem de valores vai de 1º de janeiro de 1001 a 31
de dezembro de 9999. O formato de armazenamento é ano-mês-dia.
Year: armazena um ano. A margem de valores permitidos vai do ano 1901 ao ano 2155. O
campo pode ter tamanho dois ou tamanho 4 dependendo de se queremos armazenar o ano
com dois ou quatro algarismos.
2.4.3. Cadeia
Char(n): armazena uma cadeia de longitude fixa. A cadeia poderá conter de 0 até 255
caracteres.
VarChar(n): armazena uma cadeia de longitude variável. A cadeia poderá conter de 0 até
255 caracteres. Dentro dos tipos de cadeia podem-se distinguir dois subtipos: os tipo Text e
os tipo Blob (Binary Large Object). A diferença entre um tipo e outro é o tratamento que
recebem na hora de ordená-los e compará-los. Na ordenação do tipo BLOB leva-se em
conta as letras maiúsculas e minúsculas e na ordenação do tipoTEXT isso não é
considerado.
Enum: campo que pode ter um único valor de uma lista específica/especificada. O tipo
Enum aceita até 65535 valores diferentes.
Set: campo que pode conter nenhum, um ou vários valores de uma lista. A lista pode ter o
máximo de 64 valores.
P á g i n a | 21
3 Comandos
3.1 SELECT
Sintaxe:
Para retornar apenas as colunas desejadas, basta indicar os seus respectivos nomes na
instrução.
No exemplo a seguir foram selecionadas as colunas o nome, salário e cidade.
Exemplo:
Exemplo:
3.2 ORDER BY
Utilizado para definir a ordem em que os resultados serão mostrados. Com o Order by, é
possível ordenar resultados de forma ascendente (ASC) ou descendente (DESC) utilizando
vários campos.
Exemplo:
Ordenação Descendente
Ordenação Ascendente
3.3 MAX
Sintaxe
3.4 MIN
Sintaxe
3.5 AVG
Sintaxe
3.6 Count
Sintaxe
SELECT count(cod_funcionario)
FROM tripulante;
SELECT COUNT(*) FROM nome_tabela;
3.7 SUM
Sintaxe
Determina que cada conteúdo deverá ser selecionado apenas uma vez, mesmo que o
registro esteja duplicado na tabela.
Sintaxe:
SELECT DISTINCT <CAMPO1>, <CAMPO2>
Determina que todos os registros serão selecionados, mesmo aqueles que estão em
duplicidade.
Sintaxe:
SELECT DISTINCT <CAMPO1>, <CAMPO2>
Sintaxe:
SELECT * FROM <TABELA> WHERE <expressão booleana> Exemplos:
SELECT * FROM PRODUTOS WHERE COD_FORNEC= 405
P á g i n a | 26
Os operadores lógicos são representados pela seguinte simbologia: >, < , = , <>. Já os
operadores de múltiplas condições são:
Sintaxe:
3.13 Like
O operador LIKE permite procurar strings que atendam determinado padrão de pesquisa.
Exemplos:
Consulta que retorna os registros dos produtos cujos nomes começam com a letra "M"
Consulta que retorna os registros dos produtos cujos nomes começam com a letra "M" e
terminam com a letra "a"
Consulta que retorna os registros dos produtos cujos nomes começam com a letra "M"
ou começam com a letra "A”, e com a data de validade igual a 30/10/2007.
P á g i n a | 27
3.14 IN
Exemplos:
Consulta que retorna os registros dos alunos cujos números de matrícula sejam 405 e
410.
3.15 BETWEEN
Consulta que retorna os registros dos alunos com idade entre 19 e 22 anos
Até agora, todos os dados recebidos foram simplesmente os que estavam armazenados em
uma tabela do banco de dados. As funções (MAX, MIN, AVG, SUM, COUNT) são
utilizadas juntamente com a cláusula GROUP BY para agregar um conjunto de registros:
P á g i n a | 28
Exemplos:
Consulta que retorna a soma das mensalidades pagas por cada aluno (agrupadas por
aluno).
A cláusula WHERE determina quais registros são usados para construir grupos. Entretanto,
não há meios de usar a cláusula WHERE para eliminar grupos inteiros, depois que eles
foram calculados. A cláusula que faz isso é a HAVING. O formato é HAVING
<condição>, onde <condição> é uma expressão booleana que utiliza funções agregadas ao
invés de campos.
Exemplos:
Consulta que calcula a soma das mensalidades de cada aluno. Mostrar na consulta
apenas os alunos cuja soma das mensalidades seja acima de 1000.
Exemplo:
Uma cláusula SQL JOIN é usada para combinar as linhas de duas ou mais tabelas, com
base em um campo comum entre elas.
P á g i n a | 29
A cláusula inner join permite que os dados de mais de uma tabela relacionada sejam
conectados entre si.
Esse operador retorna todas as linhas das várias tabelas em que a condição de junção for
atendida.
Exemplos:
ou
O LEFT JOIN retorna todas as linhas da tabela da esquerda (table 1), com as linhas
correspondentes na tabela direita (table 2). O resultado é NULL no lado direito.
SELECT column_name(s)
FROM table1
LEFT JOIN table2 ON table1.column_name=table2.column_name;
P á g i n a | 30
O RIGHT JOIN retorna todas as linhas da tabela da direita (table 2), com as linhas
correspondentes na tabela à esquerda (table 1). O resultado é NULL no lado esquerdo.
SELECT column_name(s)
FROM table1
RIGHT JOIN table2 ON table1.column_name=table2.column_name;
O FULL OUTER JOIN retorna todas as linhas da tabela da esquerda (table 1) e da tabela da
direita (table 2).
SELECT column_name(s)
FROM table1
FULL OUTER JOIN table2 ON table1.column_name=table2.column_name;
P á g i n a | 31
Agora vamos modificar os dados de modo que o banco de dados execute uma ação.
Inserção de registros.
Sintaxe:
Exemplo:
3.20.2 UPDATE
Atualizar registros.
Sintaxe:
Exemplo:
3.20.3 DELETE
Exclusão de registros:
Sintaxe:
Exemplos:
Uma subconsulta é uma instrução SELECT dentro de uma instrução INSERT, DELETE,
UPDATE ou mesmo SELECT.
3.21.1 Cláusula IN
sintaxe:
where atributo_ou_expressão in ( subconsulta )
Exemplos:
Buscar o nome dos médicos com consultas marcadas para o dia 13 de junho de 2006.
select nome
from Médicos
where codm in (select codm
from Consultas
where data = ‘06/06/13’)
Exemplos:
buscar o nome dos pacientes com idade superior a 21 anos que têm consulta marcada
select nome
from Pacientes
where idade > 21
and codp in (select codp
from Consultas)
Exemplos:
select nome
from Funcionários
where idade < any (select idade
from Funcionários)
Exemplos:
buscar o nome dos funcionários que recebem salários superiores aos salários pagos no
departamento enfermaria.
select nome
from Funcionários
where salário > all (select salário
from Funcionários
where departamento = ‘enfermaria’)
Exemplos:
P á g i n a | 34
buscar o nome e o RG dos médicos que possuem a mesma especialidade do médico João
(RG = 1000010000).
select nome, RG
from Médicos
where RG < > 1000010000
and especialidade = (select especialidade
from Médicos
where RG = 1000010000)
Exemplos:
select nome
from Médicos m
where exists (select *
from consultas
where data = ‘06/06/13’
and codm = m.codm)
Exemplos:
Buscar os nomes dos médicos que têm consulta marcada com todos os pacientes
(princípio do operador de divisão da álgebra relacional).
select m.nome
from Médicos m
where not exists (select *
from Pacientes p
P á g i n a | 35
Interpreta-se da seguinte forma: “buscar os nomes dos médicos tais que não existam
pacientes que não tenham consultas marcadas com eles”
from (subconsulta) as nome_tabela _ permite a geração de uma tabela derivada, cujo nome
é nome_tabela, que é utilizada no processamento da consulta externa.
Permite uma otimização eficiente da consulta, pois restringe linhas e colunas das tabelas
envolvidas antes de realizar um produto cartesiano ou junção.
Exemplos:
Buscar os dados dos médicos com consultas para 13 de junho de 2006 e os horários das
suas consultas.
Exemplos:
select Amb.*
from (select nroa, andar
from ambulatorios) as Amb
join (select nroa
from Medicos
where cidade = ‘Fpolis') as M_ort
on Amb.nroa = M_ort.nroa
Há momentos em que vocês podem querer restringir uma cláusula HAVING por valores
diferentes de uma consulta externa. Isto é, HAVING realiza filtro relacionado ao resultado
da consulta principal.
P á g i n a | 36
Suponha que tenhamos que escrever uma consulta que irá calcular o montante de descontos
para aqueles clientes que gastaram mais de R$ 150.000 em produtos no ano de 2008, sem
incluir os valores dos impostos.
Exemplos:
SELECT Outer_H.[CustomerID]
, SUM(Outer_H.[SubTotal]) AS TotalPurchase
, SUM(Outer_H.[SubTotal]) * .10 AS Rebate
FROM [Sales].[SalesOrderHeader] AS Outer_H
WHERE YEAR(Outer_H.[OrderDate]) = '2008'
GROUP BY Outer_H.[CustomerID]
HAVING (SELECT SUM(Inner_H.[SubTotal]) FROM
[Sales].[SalesOrderHeader] AS Inner_H
WHERE Inner_H.[CustomerID] = Outer_H.[CustomerID]
AND YEAR(Inner_H.[OrderDate]) = '2008') > 150000
ORDER BY Rebate DESC;
select
(select max(sal) from emp),
(select max(salary) from employees)
From dual;
3.22.1 FIRST
Como essa função só é aceita no MS Access, uma alternativa é utilizar o seguinte script:
3.22.2 LAST
Como essa função só é aceita no MS Access, uma alternativa é utilizar o seguinte script:
3.22.3 UCASE
MySQL UCASE () altera todos os caracteres de uma string para maiúsculas. O UCASE () é
um sinônimo de UPPER ()
SELECT UCASE('myteststring');
3.22.3 TRIM
A função TRIM foi criada originalmente para cortar o caractere de espaço ASCII de 7 bits
(valor 32) do texto. No conjunto de caracteres Unicode, há um caractere de espaço
adicional denominado caractere de espaço incondicional, que tem um valor decimal de
160. Em geral, esse caractere é usado em páginas da Web como a entidade HTML
 . Por si só, a função TRIM não remove esse caractere de espaço incondicional. Para
obter um exemplo de como cortar caracteres de espaço do texto, consulte Remover espaços
e caracteres não imprimíveis do texto.
3.22.4 RTRIM
3.22.5 LTRIM
3.22.6 REPLACE
SELECT REPLACE('abcdefghicde','cde','xxx');
3.22.7 LOWER
SELECT LOWER('myteststring');
3.22.8 LPAD
MySQL LPAD() Preenche com caracteres à esquerda (LPAD) até o tamanho limite
estabelecido:
SELECT LPAD('Hellow',10,'**');
3.22.9 RPAD
MySQL RPAD() Preenche com caracteres à direita (RPAD) até o tamanho limite
estabelecido:
SELECT RPAD('Hellow',10,'**');
3.22.9 SUBSTR
SELECT SUBSTR('w3resource',4,3);
P á g i n a | 39
Bibliografia
Projeto de Banco de Dados - Uma Visão Prática - Felipe Nery Rodrigues Machado
e Mauricio Pereira de Abreu – Editora Érica