Você está na página 1de 39

UTRAMIG – FUNDAÇÃO DE ENSINO PARA O TRABALHO

Banco de Dados

CURSO TÉCNICO EM INFORMÁTICA


DISCIPLINA: BANCO DE DADOS
ETAPA: 2ª
Página |2

Sumario

Objetivos Gerais ..................................................................................................................... 4


1. A Linguagem SQL ............................................................................................................. 5
2. Revisão MySql ................................................................................................................... 6
2.1. Interface ....................................................................................................................... 7
2.2. Criando um Banco de Dados (Esquema) ..................................................................... 7
2.3. Criando Tabela ............................................................................................................ 9
2.4. Tipos de Dados .......................................................................................................... 16
2.4.1. Numéricos ........................................................................................................... 16
2.4.2. Data..................................................................................................................... 18
2.4.3. Cadeia ................................................................................................................. 20
3 Comandos .......................................................................................................................... 22
3.1 SELECT ..................................................................................................................... 22
3.2 ORDER BY ................................................................................................................ 23
3.3 MAX ........................................................................................................................... 24
3.4 MIN ............................................................................................................................ 24
3.5 AVG ........................................................................................................................... 24
3.6 Count .......................................................................................................................... 24
3.7 SUM ........................................................................................................................... 25
3.8 Select Distinct ............................................................................................................. 25
3.9 Select All .................................................................................................................... 25
3.10 Cláusula Where......................................................................................................... 25
3.11 Selecionando a partir de parâmetros ......................................................................... 26
3.12 Verificando Campo nulo – IS NULL ....................................................................... 26
3.13 Like ........................................................................................................................... 26
3.14 IN .............................................................................................................................. 27
3.15 BETWEEN ............................................................................................................... 27
3.16 Cláusula GROUP BY ............................................................................................... 27
3.17 Cláusula HAVING ................................................................................................... 28
3.18 Cláusula UNION ...................................................................................................... 28
3.19 Cláusula JOINS ........................................................................................................ 28
3.19.1 INNER JOIN ..................................................................................................... 29
3.19.2 LEFT JOIN ........................................................................................................ 29
3.19.3 RIGHT JOIN ..................................................................................................... 30
3.19.3 FULL OUTER JOIN ......................................................................................... 30
3.20 Instruções SQL para Inserir, Atualizar e Excluir Registros. .................................... 31
3.20.1 INSERT INTO ................................................................................................... 31
3.20.2 UPDATE ........................................................................................................... 31
3.20.3 DELETE ............................................................................................................ 31
3.21 Subconsultas SQL .................................................................................................... 32
3.21.1 Cláusula IN ........................................................................................................ 32
3.21.2 Cláusula ANY ................................................................................................... 33
3.21.3 Cláusula ALL .................................................................................................... 33
3.21.4 Cláusula EXISTS ............................................................................................... 34
3.21.5 Subconsultas na Cláusula FROM ...................................................................... 35
3.21.5 Subconsulta Correlacionada na Cláusula HAVING .......................................... 35
Página |3

3.21.6 Subconsulta SELECT ........................................................................................ 36


3.22 Outras Funções ......................................................................................................... 36
3.22.1 FIRST ................................................................................................................ 36
3.22.2 LAST ................................................................................................................. 37
3.22.3 UCASE .............................................................................................................. 37
3.22.3 TRIM ................................................................................................................. 37
3.22.4 RTRIM .............................................................................................................. 37
3.22.5 LTRIM ............................................................................................................... 37
3.22.6 REPLACE ......................................................................................................... 38
3.22.7 LOWER ............................................................................................................. 38
3.22.8 LPAD ................................................................................................................. 38
3.22.9 RPAD ............................................................................................................... 38
3.22.9 SUBSTR ........................................................................................................... 38
Bibliografia ........................................................................................................................... 39
Página |4

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:

 DDL (DATA DEFINITION LANGUAGE)


É a parte da linguagem SQL em que os comandos são responsáveis pela criação de
objetos, tais como tabelas, índices, visões etc. Entre esses comandos podemos citar:
Create Table, Create View, Create Index.
 DML (DATA MANIPULATION LANGUAGE)
É a parte da linguagem SQL em que os comandos executam consultas e alterações
nos dados. Entre os comandos encontram-se: Select, Update, Delete.
 DCL (DATA CONTROL LANGUAGE)
Relaciona-se, basicamente, com a segurança do banco de dados. Os comandos
DCL são: Grant, Revoke.
Página |6

2. Revisão MySql

Figura 01– Logo 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.

Os recursos do MySQL incluem:


 Capacidade de lidar com um número ilimitado de usuários;
 Capacidade de manipular mais de cinquenta milhões (50.000.000) de registros;
 Execução muito rápida de comandos, provavelmente o mais rápido do mercado.

Após da instalação do MySQL (http://www.devmedia.com.br/instalando-e-configurando-a-


nova-versao-do-mysql/25813), vamos utilizar o próprio MySQL para conhecer um pouco
de sua interface.
Página |7

2.1. Interface

A interface do MySQL é simples, mas eficaz. Nela podemos executar os comandos em


linhas de comando ou na interface gráfica.

Figura 02– Interface Mysql

2.2. Criando um Banco de Dados (Esquema)

O primeiro passo é criar uma base de dados.


 Dê um clique na imagem
Página |8

Após clicar na opção, abrirá uma aba, solicitando o nome para o banco de dados, como
mostra a figura:

Figura 03– Criando Schema Mysql

 Digite o nome do banco de dados


 Vamos dar o nome de “teste” para este banco. Após nomeá-lo, clique em APPLY.
Em seguida, aparecerá uma janela (assistente de criação), mostrando o código
utilizado. Mais uma vez clique em APPLY, de acordo com a figura.
Página |9

Figura 04– Schema Mysql

Clique em finish para finalizar e confirmar a criação do banco de dados. Veja no OBJECT
BROWSER, em SCHEMAS, como mostra a figura:

Figura 05: OBJECT BROWSER

2.3. Criando Tabela

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

Figura 06: Espaço para codificar

Quando queremos bloquear a inserção de valores negativos em uma coluna utilizamos o


parâmetro UNSIGNED e, assim, somente valores maiores ou iguais a zero poderão ser
incluídos naquele campo, como segue exemplo abaixo:

CREATE TABLE ou (SCHEMA) cliente (


cod_cliente bigint AUTO_INCREMENT,
nome VARCHAR (50) NOT NULL,
morada TEXT,
estado ENUM ('casado','solteiro') DEFAULT
'casado',
telefone CHAR(9),
ordenado DECIMAL(10,2) UNSIGNED,
PRIMARY KEY (cod_cliente)
);

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:

Figura 07– Botões de inicialização rápida – criar tabelas

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.

Figura 08: Definindo como o banco padrão

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:

Figura 09 : janela para a criação de tabelas


P á g i n a | 12

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:

Figura 10: janela para a criação de tabelas melhorada

Faça agora o preenchimento dos campos, montando a estrutura da tabela, como mostra a
figura 10.

Observe que foram sugeridas algumas colunas para criar o exemplo:

 cod: int, primary key, not null


 nome: varchar(45)
 endereco: varchar(80)
P á g i n a | 13

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

Figura 12 : assistente de criação de tabelas

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

Figura 13: finalizando a criação de tabelas

Clique em FINISH para finalizar e confirmar a criação da tabela.

Veja novamente no OBJECT BROWSER, expanda a pasta TABLES e lá estará a tabela


criada com seus atributos, como mostra a figura 14:
P á g i n a | 16

Figura 14: Explore das bases de dados

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. Tipos de Dados

Para fazer o preenchimento dos campos são utilizados 3 tipos de dados:


 Numérico
 Data
 Cadeia

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.

Bit ou Bool: um número inteiro que pode ser 0 ou 1.

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

Decimal, Dec, Numeric: número em vírgula flutuante desempacotado. O número


armazena-se como uma cadeia.
P á g i n a | 18

Tabela – Tipos de dados

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.

DateTime: Combinação de data e hora. A margem de valores vai de 1º de janeiro de 1001


de 0 hora, 0 minuto e 0 segundo 31 de dezembro de 9999 às 23 horas, 59 minutos e 59
segundos. O formato de armazenamento é ano-mês-dia horas:minutos:segundos.

TimeStamp: Combinação de data e hora. A margem vai de 1º de janeiro de 1970 ao ano


2037. O formato de armazenamento depende do tamanho do campo:
P á g i n a | 19

Tabela – Tipos de Formato Data

Time: armazena uma hora. O formato de armazenamento é 'HH:MM:SS'.

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.

Tabela – Formato Data 2


P á g i n a | 20

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.

Existe uma diferença de armazenamento entre os tipos Char e Varchar:

Tabela – Char e Varchar

O tipo blob é utilizado para armazenar arquivos binários.

TinyText e TinyBlob: coluna com uma longitude máxima de 255 caracteres.

Blob e Text: texto com o máximo de 65535 caracteres.

MediumBlob e MediumText: texto com o máximo de 16.777.215 caracteres.

LongBlob e LongText: texto com o máximo de 16 caracteres 4.294.967.295. Há que se ter


em conta que, devido aos protocolos de comunicação, os pacotes podem ter o máximo 16
Mb.

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

Tabela – Tipo Dados Cadeia


P á g i n a | 22

3 Comandos

3.1 SELECT

O comando select do SQL é usado para efetuar consultas no banco de dados.

Sintaxe:

SELECT nome_coluna, nome_coluna


FROM nome_tabela;

SELECT * FROM nome_tabela;

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:

SELECT nome, salário, cidade


FROM empregados;

No exemplo baixo, usamos as cláusulas Select e From.


O * (asterisco) indica que todas as colunas da tabela devem ser retornadas.

Exemplo:

SELECT * FROM empregados;


P á g i n a | 23

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:

SELECT nome, salário, cidade FROM empregados


ORDER BY nome;

O resultado da consulta será ordenado pela coluna nome.

Ordenação Descendente

SELECT nome, salário, cidade FROM empregados


ORDER BY nome DESC;

O resultado da consulta será ordenado pela coluna nome na forma descendente.

Ordenação Ascendente

SELECT nome, salário, cidade FROM empregados


ORDER BY nome ASC;

O resultado da consulta será ordenado pela coluna nome na forma ascendente.

Ordenar através de dois campos

ORDER BY nome, DESC salario;

O resultado da consulta ordenará os registros pela coluna nome, organizando os dados do


maior para o menor salário.
P á g i n a | 24

3.3 MAX

A função max() retorna o maior valor da coluna selecionada.

Sintaxe

SELECT MAX(nome_coluna) FROM nome_tabela;

A consulta abaixo retornará o maior salário da tabela empregado.

SELECT MAX(salário)FROM empregados;

3.4 MIN

A função min() retorna o menor valor da coluna selecionada.

Sintaxe

SELECT MIN(nome_coluna) FROM nome_tabela;

Ao contrário da função MAX(), a consulta abaixo retornará o menor salário da tabela


empregado.

SELECT MIN(salário)FROM empregados;

3.5 AVG

A função avg() retorna o valor médio de uma coluna numérica.

Sintaxe

SELECT AVG(nome_coluna) FROM nome_tabela;

Na consulta abaixo, a função AVG() retornará o salário médio da tabela empregados.

SELECT AVG(salário)FROM empregados;

3.6 Count

A função count() retorna o número de linhas que corresponde a um critério especificado.

Sintaxe

SELECT COUNT(nome_coluna) FROM nome_tabela;


P á g i n a | 25

A seguinte consulta devolve a quantidade de funcionários na tabela tripulante, ou seja, o


número de registros existentes nessa tabela.

SELECT count(cod_funcionario)
FROM tripulante;
SELECT COUNT(*) FROM nome_tabela;

3.7 SUM

A função SUM() retorna a soma total de uma coluna numérica.

Sintaxe

SELECT SUM(nome_coluna) FROM nome_coluna;

3.8 Select Distinct

Determina que cada conteúdo deverá ser selecionado apenas uma vez, mesmo que o
registro esteja duplicado na tabela.

Sintaxe:
SELECT DISTINCT <CAMPO1>, <CAMPO2>

3.9 Select All

Determina que todos os registros serão selecionados, mesmo aqueles que estão em
duplicidade.

Sintaxe:
SELECT DISTINCT <CAMPO1>, <CAMPO2>

3.10 Cláusula Where

É usada depois da cláusula FROM. É semelhante a uma instrução condicional e seu


objetivo é retornar registros que satisfaçam uma condição. O formato da cláusula WHERE
é:
WHERE <EXPRESSÃO BOOLEANA>

A <expressão booleana> é constituída de uma ou mais operações lógicas que serão


avaliadas como verdadeiro ou falso para cada registro.

Sintaxe:
SELECT * FROM <TABELA> WHERE <expressão booleana> Exemplos:
SELECT * FROM PRODUTOS WHERE COD_FORNEC= 405
P á g i n a | 26

3.11 Selecionando a partir de parâmetros

SELECT * FROM PRODUTOS

WHERE COD_FORNEC = [INFORME O CODIGO DO FORNECEDOR]

3.12 Verificando Campo nulo – IS NULL

SELECT * FROM PRODUTOS WHERE COD_FORNEC = IS NULL;

Os operadores lógicos são representados pela seguinte simbologia: >, < , = , <>. Já os
operadores de múltiplas condições são:

AND – para ter ambas as condições satisfeitas.

OR – para ter qualquer uma das condições satisfeitas.

Sintaxe:

SELECT * FROM <TABELA> WHERE <expressão booleana> AND <expressão


booleana>
Exemplo:

SELECT * FROM PRODUTOS

WHERE COD_FORNEC= 405 AND DTA_VALID = #01/10/2007#

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"

SELECT * FROM PRODUTOS WHERE NOME_PROD LIKE "M*"

Consulta que retorna os registros dos produtos cujos nomes começam com a letra "M" e
terminam com a letra "a"

SELECT * FROM PRODUTOS WHERE NOME_PROD LIKE "M*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

SELECT * FROM PRODUTOS

WHERE (NOME_PROD LIKE "M*" OR NOME_PROD LIKE "A*") AND


DTA_VALID = #30/10/2007#

3.14 IN

Compara um campo com uma lista de valores.

Exemplos:

Consulta que retorna os registros dos alunos cujos números de matrícula sejam 405 e
410.

SELECT * FROM ALUNO

WHERE MATRICULA IN (405,410)

Consulta que retorna os registros dos alunos que tenham 19 ou 22 anos.

SELECT * FROM ALUNO WHERE IDADE IN (19, 22)

Consulta que retorna os registros dos alunos que são de MG, SP ou RJ

SELECT * FROM ALUNO

WHERE UF IN ("MG", "SP", "RJ")

3.15 BETWEEN

O operador BETWEEN é um atalho para ver se um determinado campo está em um


intervalo.
Exemplo:

Consulta que retorna os registros dos alunos com idade entre 19 e 22 anos

SELECT * FROM ALUNO

WHERE IDADE BETWEEN 19 AND 22;

3.16 Cláusula GROUP BY

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

Mais de uma função agregada pode ser usada em uma consulta.

Exemplos:

Consulta que retorna a soma das mensalidades pagas por cada aluno (agrupadas por
aluno).

SELECT COD_ALUNO, SUM(VALOR) FROM MENSALIDADE GROUP BY


COD_ALUNO

Consulta que retorna a soma das mensalidades agrupadas por mês.

SELECT MES, SUM(VALOR) FROM MENSALIDADE GROUP BY MES


DISTINCT COD_ALUNO FROM MENSALIDADE

3.17 Cláusula HAVING

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.

SELECT COD_ALUNO, SUM (VALOR) FROM MENSALIDADE GROUP BY


COD_ALUNO
HAVING SUM (VALOR) > 1000

3.18 Cláusula UNION

As consultas união combinam campos correspondentes de duas ou mais tabelas.

Exemplo:

SELECT NOME, CIDADE FROM FORNEC_BH


UNION
SELECT NOME, CIDADE FROM FORNEC_SP

3.19 Cláusula JOINS

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

3.19.1 INNER JOIN

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:

Consulta para junção da tabela ALUNO e MENSALIDADE

SELECT * FROM ALUNO INNER JOIN MENSALIDADE


ON ALUNO.COD_ALUNO = MENSALIDADE.COD_ALUNO

ou

SELECT * FROM ALUNO, MENSALIDADE


WHERE ALUNO.COD_ALUNO = MENSALIDADE.COD_ALUNO.

3.19.2 LEFT JOIN

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

3.19.3 RIGHT JOIN

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;

3.19.3 FULL OUTER JOIN

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

3.20 Instruções SQL para Inserir, Atualizar e Excluir Registros.

Agora vamos modificar os dados de modo que o banco de dados execute uma ação.

As principais ações são: inserir, atualizar e excluir registros.

3.20.1 INSERT INTO

Inserção de registros.

Sintaxe:

INSERT INTO <nome da tabela> (campo1, campo2,...) VALUES (valor do


campo1, valor do campo2, ...)

Exemplo:

(como a chave primária é o campo CODIGO, se alguém tentar incluir um registro


cujo campo CODIGO já exista, ocorrerá um erro de inserção e o registro não será
incluído).
INSERT INTO ALUNO (CODIGO, NOME, IDADE) VALUES ("1010",
"Eduardo Gomes", 18).

3.20.2 UPDATE

Atualizar registros.

Sintaxe:

UPDATE <nome da tabela>

SET <campo1=expressão> , <campo2=expressão> , ... WHERE <condição>

Exemplo:

Atualizar o campo IDADE do aluno cujo CODIGO é "1010" para 20 anos.

UPDATE ALUNO SET IDADE=20


WHERE CODIGO="1010"

3.20.3 DELETE

Exclusão de registros:

Sintaxe:

DELETE FROM <nome da tabela> WHERE <condição>


P á g i n a | 32

Exemplos:

Eliminar o registro do produto cujo CODIGO é "120001".

DELETE FROM PRODUTOS WHERE CODIGO="1200001"

3.21 Subconsultas SQL

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’)

passo 1: execução da subconsulta


passo 2: execução da consulta externa: comparação das tuplas da consulta externa
com a relação resultante da subconsulta
 otimização: filtra, na subconsulta, apenas atributos e tuplas de interesse para
a execução da consulta externa
 passos válidos para as cláusulas IN, ANY e ALL

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)

Observação: o SQL padrão define cláusulas EXCEPT e INTERSECT para especificação


de uma diferença e de uma intersecção, respectivamente, entre duas consultas SQL (no
mesmo estilo da cláusula UNION). O MySQL não implementa essas cláusulas.
P á g i n a | 33

3.21.2 Cláusula ANY

Permite outras formas de comparação elemento-conjunto:

= any (subconsulta) (= in)


> any (subconsulta) verdadeiro se o atributo comparado for maior que algum valor
de atributo das tuplas resultantes da subconsulta
< any (subconsulta)
< > any (subconsulta)

Exemplos:

buscar o nome de todos os funcionários, exceto o mais idoso

select nome
from Funcionários
where idade < any (select idade
from Funcionários)

3.21.3 Cláusula ALL

Condição a ser satisfeita para todos os elementos de um conjunto:

= all (subconsulta) _ igual a todos


> all (subconsulta) _ maior que todos
< all (subconsulta) _ menor que todos
< > all (subconsulta) _ diferente de todos ( = not in)

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’)

Observação: a omissão das 3 cláusulas de subconsulta já vistas em uma consulta SQL


indica uma comparação do tipo elemento-elemento (neste caso, a subconsulta deve retornar
uma tabela com uma única tupla).

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)

3.21.4 Cláusula EXISTS

Exist (subconsulta) _ verdadeiro se a tabela resultante da subconsulta não for vazia na


avaliação de uma tupla associada à tabela da consulta externa.

Processa a subconsulta na avaliação de cada tupla da consulta externa.

Exemplos:

Buscar o nome dos médicos com consultas para 13 de junho de 2006

select nome
from Médicos m
where exists (select *
from consultas
where data = ‘06/06/13’
and codm = m.codm)

Atributos do resultado da subconsulta são irrelevantes. Importa apenas saber se existem


tuplas na resposta da subconsulta.

A cláusula EXISTS implementa o quantificador existencial do cálculo relacional.

Veja a consulta acima escrita no cálculo relacional:

{t.nome | t _ Médicos _ _ c _ Consultas (c.data = ‘06/06/13’ _ t.codm = c.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

where not exists (select *


from Consultas c
where p.codp = c.codp
and m.codm = c.codm))

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”

3.21.5 Subconsultas na Cláusula FROM

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.

select Medicos.*, C.hora


from Medicos join
(select codm, hora
from Consultas
where data = '06/06/13') as C
on Médicos.codm = C.codm

Exemplos:

Buscar o número e o andar dos ambulatórios em que médicos de Florianópolis fazem


atendimento.

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

3.21.5 Subconsulta Correlacionada na Cláusula HAVING

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;

3.21.6 Subconsulta SELECT

As subconsultas podem ser colocadas na cláusula SELECT.

O exemplo abaixo pretende listar os salários máximos da tabela EMP e EMPLOYEES


usando apenas um query e mostrando os resultados numa linha única:

select
(select max(sal) from emp),
(select max(salary) from employees)
From dual;

3.22 Outras Funções

3.22.1 FIRST

A função First () retorna o primeiro valor da coluna selecionada.

SELECT FIRST(column_name) FROM table_name;

Como essa função só é aceita no MS Access, uma alternativa é utilizar o seguinte script:

SELECT column_name FROM table_name


ORDER BY column_name ASC LIMIT 1;
P á g i n a | 37

3.22.2 LAST

A função LAST () retorna o último valor da coluna selecionada.

SELECT LAST(column_name) FROM table_name;

Como essa função só é aceita no MS Access, uma alternativa é utilizar o seguinte script:

SELECT column_name FROM table_name ORDER BY column_name DESC


LIMIT 1;

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
&nbsp. 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.

SELECIONAR TRIM (‘guarnição‘);

3.22.4 RTRIM

MySQL RTRIM () remove os espaços à direita de uma string.

SELECIONAR TRIM (‘guarnição‘);

3.22.5 LTRIM

MySQL RTRIM () remove os espaços à esquerda de uma string.

SELECIONAR TRIM (‘guarnição‘);


P á g i n a | 38

3.22.6 REPLACE

Substitui todas as ocorrências de um valor da cadeia de caracteres especificado por outro


valor de cadeia de caracteres.

SELECT REPLACE('abcdefghicde','cde','xxx');

3.22.7 LOWER

MySQL LOWER () altera todos os caracteres de uma string para minúsculas.

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

MySQL SUBSTR () retorna o número especificado de caracteres a partir de uma posição


particular de uma determinada cadeia. SUBSTR () é um sinônimo para SUBSTRING ().

SELECT SUBSTR('w3resource',4,3);
P á g i n a | 39

Bibliografia

 Modelagem de dados – Carlos Barbieri – Editora Express

 Projeto de Banco de Dados - Uma Visão Prática - Felipe Nery Rodrigues Machado
e Mauricio Pereira de Abreu – Editora Érica

 Modelagem Conceitual e Projeto de Banco de Dados - Paulo Cougo

 MySQL 5.6 Reference Manual. Disponível em:


<http://dev.mysql.com/doc/refman/5.6/en/>. Acesso em: 02 de agosto de 2018

 MySQL Guia do Programador – André Milaniv- Editora Novatec

Você também pode gostar