CryptoMoedas

Desenvolvido por Investing.com

RL Info News - Tecnologia e Informação Feeds

sexta-feira, 17 de agosto de 2012

Curso Linguagem SQL, Lição 05


Lição 05 - Definindo dados

Domínio dos dados
Até agora consideramos que os dados já foram informados pelo usuário. Agora construiremos nossas tabelas. Conheceremos os comandos responsáveis em criar cada tabela, atribuir o um tipo os dados.

Os dados em SQL podem ser dos seguintes tipos:

char [n];
O char é uma cadeia de caracteres de tamanho fixo n que é definido pelo usuário.

varchar [n];
O varchar é uma cadeia de caracteres de tamanho variável sendo que tem como tamanho máximo n que é informado pelo usuário.

date;
Dados com esse formato aceitam datas, dia, mês e ano (com quatro dígitos).

time;
Dados com esse formato aceitam horário, horas, minutos e segundos.

int;
Esse formato aceita números inteiros.

real;
Esse formato aceita números reais.
float [n];
Aceita número flutuante com precisão n definida pelo usuário.

Definição de esquema
Para criar uma tabela utilizamos o comando create table e para definir quem será a chave primária usamos o comando primary key.
Observe o exemplo a seguir onde criaremos tabelas e definiremos a chave primária.

create table cliente (nome varchar(20) not null,
endereco varchar(50),
CPF char(11) not null,
data_nascimento char(10),
primary key(CPF))

create table filme (nome varchar(20) not null,
ator_principal varchar(20),
diretor varchar(20),
genero varchar(10),
primary key(nome, ator_principal),
check genero in ("Romance","Ação","Drama","Terror","Comédia"))

No primeiro exemplo criamos a tabela cliente, como você pode observar a estrutura do create table é composta do nome da tabela que será criada e dos atributos com seus devidos domínios. Depois de informar os atributos, informamos a chave primária, através do comando primary key.
Repare que usamos not null na criação do atributo nome, ele é usado quando queremos forçar o usuário a colocar o dado. O atributo CPF, por exemplo, é nossa chave primária, por isso não poderia ficar em branco, por isso também foi usado um not null para esse atributo.
No segundo exemplo, usamos a cláusula check, ela é usada para determinar uma condição ao atributo. No caso do nosso exemplo, ele define que o gênero do filmes só pode ser Romance, Ação, Drama, Terror ou Comédia.

Removendo e alterando tabelas
Para remover uma tabela temos duas opções possíveis o drop table e o delete from. A diferença entre os dois é que o primeiro é mais drástico, com ele remove-se a tabela e todos os seus atributos, já no segundo a tabela é mantida mas os atributos são apagados.
Utilizando o delete from atributos poderão ser inseridos futuramente pois a tabela não foi excluída, ela ainda continuará existindo no banco.
Observe o exemplo abaixo:

delete from cliente
drop table cliente

Primeiro deletamos todos os atributos da tabela cliente e depois deletamos a tabela. Poderiamos ter usado apenas o drop table mas usamos os dois para mostrar a sintaxe das duas cláusulas.
Para adicionar um novo atributo a uma tabela utilizamos o alter table. As tuplas desse atributo inserido receberão o NULL para seus valores. Observe como utilizar o alter table.

alter table cliente add RG varchar(10)

Como podemos observar, informamos a tabela que terá um atributo adicionado, o nome do atributo e o domínio.
O alter table pode ser usado também para remover um atributo, ao invés de utilizar o add, usa-se drop, como no exemplo a seguir.

alter table cliente drop endereco
Informa-se o nome da tabela e o atributo a ser removido.

Restrições
Vimos anteriormente que ao criar uma tabela podemos criar restrições utilizando a cláusula check. Existe outro modo de criar uma restrição dando um nome à restrição, isso facilitará na hora de saber qual restrição foi violada.
Para criar essa restrição utilizaremos o creat domain. Observe o exemplo a seguir:

create domain CPF char(11) constraint teste_CPF check (value not null)
create domain preco numeric(4,2) constraint teste_preco check (value >=3,00)

No primeiro exemplo, criamos um teste_CPF que avalia se o CPF não é igual a null. Já no segundo verificamos se o preço, que tem 4 casas sendo que duas são depois da virgula, é maior ou igual a 3.

Triggers
Trigger, é uma palavra do inglês que em português seria algo como gatilho, essa cláusula representa uma ação que é realizada automaticamente quando ocorre uma mudança, especificada nessa cláusula, em banco de dados.
Logo abaixo temos uma trigger que é ativada quando acrescenta-se um novo preço de aluguel de dvd na tabela aluguel. Se for informado qualquer valor menor que três a trigger atualizará automaticamente o banco substituindo o valor por 3 que é o valor mínimo de um aluguel.

define trigger preco_menor on update of aluguel
(if new aluguel.preco < 3
then (update aluguel.preco
set aluguel.preco = 3)

Exercício
Como foi chamada a versão da Linguagem SQL revisada em 1999?

Deixe suas respostas nos comentários. Obrigado!

Fonte: Comunidade CDTC

quinta-feira, 16 de agosto de 2012

Curso Linguagem SQL, Lição 04


Lição 04 - Modificação do banco de dados e criação de relações

Modificação do banco de dados e criação de relações
Em um banco de dados é permitida não só a consulta mas também a inserção, remoção e atualização dos dados.

Inserindo dados
Para inserir dados no banco você deve especificar qual tabela receberá os dados. Informar o atributo que receberá o dados não é obrigatório mas se não for informado os dados inseridos devem estar na ordem em que os atributos estão no banco.

Vamos analisar os exemplos seguintes:
insert into filme
values("Titanic", "Leonardo DiCaprio", "Fulano de Tal", "romance", 8, 1, 190)
insert into filme (duracao, copia, idade, genero, diretor, ator_principal, nome)
values(190, 1,8, "romance","Fulano de Tal", "Leonardo DiCaprio", "Titanic")

Veja que nos dois exemplos insere-se os mesmo dados mas no segundo exemplo não precisa-se respeitar a ordem dos atributos no banco pois estão sendo informados os atributos que receberão os dados.
Dentro de uma operação de inserção pode ser utilizada uma pesquisa para achar as tuplas que deve ser inseridos dados.
Suponha que todos os dependentes serão transformados em clientes, então serão inseridos na tabela cliente todos os dependentes que se encontram na tabela associados.

insert into cliente
select nome, "Avenida Teste" , CPF, NULL, NULL
from associado

Removendo dados
Para remover dados de uma tabela utiliza-se em SQL o delete from. No exemplo a seguir, removeremos todos os filmes cadastrados no banco que tenham duração maior que 120 minutos.

delete from filme
where duracao>120

Como no insert, é possível utilizar uma cláusula select embutida ao delete. Vamos excluir todos os filmes que foram alugados por clientes e que tinham como data de devolução o dia 12/10/2006.

delete from filme
where nome in (select nome_filme from aluguel where data_devolucao = "12/10/2006")

Atualizando dados
Quando deseja-se atualizar os dados de uma tabela usamos o update e o set para informar qual dado será atualizado e como. Observe o exemplo a seguir:

update aluguel
set data_devolucao = "12/01/2007"
where data_devolucao = "11/01/2007"

Nesse exemplo modificaremos todos os aluguéis que deveriam ser devolvidos no dia "11/01/2007" para o dia "12/01/2007".

Criando relações
Para compor relações, tomam-se duas relações e o resultado é outra relação. Para realizar uma junção selecionamos o tipo de junção, que representa como as tuplas que não tem relação com nenhuma outra tupla aparecerão na relação, e selecionamos também uma condição de junção, selecionando quais tuplas das duas relações têm correspondência e quais tuplas aparecerão no resultado na junção.
Vamos estudar os seguintes tipos de junção: inner join, left outer join, right outer join, full outer join. Como condição de junção temos:natural, on e using.

Nas junções do tipo outer é obrigatório o uso de uma condição de junção, já no inner é opcional. As condições on e using aparecem depois do tipo de junção, enquanto a condiçãonatural aparece antes.
A condição on costuma ser a mais utilizada pois é bem parecida com a cláusula where. Um par de linhas será correspondente se a expressão da condição on for verdadeira.

A cláusula using é bem parecida com a on. Você informa a coluna e o nome das tabelas e ele vai pesquisar a coluna que tem o mesmo nome da que você informou. O resultado sai de forma reduzida, sem a repetição das colunas que são iguais.
Já a cláusula natural é mais resumida que a using. Essa cláusula comparará todas as colunas de nome igual das duas tabelas.

Vamos agora verificar os tipos de junção:
Inner join
Esta junção retorna todos os pares com correspondentes de linhas nas duas tabelas e descartam as linhas sem correspondentes de ambas as tabelas.
Vamos utilizar como exemplo as seguintes tabelas:

cliente
nome
CPF
codigo
Ana Maria
002.123.234-45
0001
Joao da Silva
456.789.987-22
0002
Maria Costa
123.456.789-99
0003


aluguel
codigo_cliente
nome_filme
0001
Titanic
0001
Romeu e Julieta
0002
A Família Adams

Select *
from cliente inner join aluguel on
cliente.codigo = aluguel.codigo_cliente

Ao realizar o inner join anterior teremos como resultado a seguinte relação:
nome
CPF
codigo
codigo_cliente
nome_filme
Ana Maria
002.123.234-45
0001
0001
Titanic
Ana Maria
002.123.234-45
0001
0001
Romeu e Julieta
Joao da Silva
456.789.987-22
0002
0002
A Família Adams


Ele relaciona as duas tabelas pelo código, e o cliente que não tá relacionado nas duas é desconsiderado na relação resultante.

Outer join
É a seleção em que são restritas as linhas que interessam em uma tabela, mas são consideradas todas as linhas de outra tabela. Ou seja, queremos ver quais linhas de uma tabela estão relacionadas com a outra tabela e quais as linhas não estão.
- left outer join - São incluídas todas as linhas da primeira tabela na expressão;
- right outer join - São incluídas todas as linhas da segunda tabela na expressão;
- full outer join - São incluídas todas as linhas de ambas as tabelas, as que satisfazem a expressão e as que não satisfazem.

Usando o right outer join, no exemplo anterior, não haveria mudança no resultado. Usando o left outer join e o full outer join o resultado seria o seguinte:

nome
CPF
codigo
codigo_cliente
nome_filme
Ana Maria
002.123.234-45
0001
0001
Titanic
Ana Maria
002.123.234-45
0001
0001
Romeu e Julieta
Joao da Silva
456.789.987-22
0002
0002
A Família Adams
Maria Costa
123.456.789-99
0003
NULL
NULL


Como pode-se ver observando o resultado, as relações do exemplo anterior continuam a aparecer mas é adicionado o cliente que não tinha nenhum aluguel e por isso não aparecia. Usando o right outer join não teríamos mudança no resultado pois nenhuma tupla da segunda tabela ficou de fora do resultado.
Outro exemplo
Vamos agora mostrar um exemplo usando using e natural para deixar os conceitos bem claros:
Considere as tabelas do exemplo anterior, mas agora a coluna codigo_cliente da tabelaaluguel chama-secodigo. Assim usando using e natural teremos resultados.

Select *
from cliente inner join aluguel using
(codigo_cliente)
select *
from cliente naturalinner join aluguel

No primeiro exemplo mostramos como usar o using, informamos o nome das duas tabelas e o nome da coluna que será pesquisada. Já no segundo, você informa apenas o nome das tabelas e ele procura entre todas as tabelas as de mesmo nome.
Tome muito cuidado ao usar a cláusula natural pois se, por exemplo, na tabela aluguel, a coluna código referi-se ao código do filme alugado teríamos um grande problema. Seriam duas colunas de nomes iguais mas que se referem a coisas diferentes, uma ao código do cliente e a outra ao código do filme.


Exercício
Com base nos conteúdos já estudados, crie duas tabelas a relação entre as tabelas.

Deixe suas respostas nos comentários. Obrigado!

Fonte: Comunidade CDTC

quarta-feira, 15 de agosto de 2012

Curso Linguagem SQL, Lição 03


Lição 03 - Comandos avançados

Conjuntos
É possível realizar operações de conjuntos através da SQL, mas é necessário que os resultados das pesquisas sejam de tipos equivalentes.

União
(select nome from cliente)
union
(select nome from associado)

Nesse exemplo, têm-se como resultado o nome de todas as pessoas que são cliente ou dependentes (ou os dois). Veja que como numa operação de união de conjuntos, essa operação elimina automaticamente todas as repetições.
Para que os resultados repetidos sejam apresentados deve-se acrescentar all após union.

Intersecção
(select codigo from cliente)
intersect
(select codigo_titular from associado)

Nessa operação, são selecionados os códigos de todos os clientes que possuem dependentes. Assim como a união, essa operação elimina repetições e para não eliminar as repetições deve-se usar all assim como na união.

Exceção
(select codigo from cliente)
except
(select codigo_titular from associado)

Nesse exemplo, são selecionados todos os clientes que não possuem dependentes. Assim como as operações anteriores repetições não são apresentadas, para apresentá-las usa-se, novamente, o all.

Subconsultas Aninhadas
Por meio da SQL podemos aninhar subconsultas, isto é, colocar uma consulta dentro de outra.
Por exemplo:
Vamos supor que queremos pesquisar o nome dos clientes que alugaram filmes nos quais o "Tom Cruise" é o ator principal.
- Primeiro temos que pesquisar todos os filmes nos quais o "Tom Cruise" é o ator principal.
- Depois vemos quem são as pessoas que alugaram.

Para isso vamos usar duas pesquisas.
IN e NOT IN

Select cliente.nome
from cliente, aluguel
where cliente.codigo=aluguel.codigo_cliente
and
aluguel.nome_filme in (select nome from filme where ator_principal = "Tom Cruise")

Note que para igualar ao resultado de outra pesquisa usa-se a palavra in. Assim com essa pesquisa, primeiro seleciona-se o nome de todos os filmes nos quais o "Tom Cruise" é o ator principal e depois pesquisa-se o nome de todos os clientes que alugaram um dos filmes que foram resultados da primeira pesquisa.

Quando deseja-se excluir um resultado, ou seja, se quiséssemos o nome dos clientes que não alugaram filme do "Tom Cruise" é só usar not in ao invés de in.

SOME E ALL
Podemos também comparar resultados de outros modos. A expressão "maior que algum" é representada pela expressão >some, comparativamente podem ser usadas as expressões <some, <=some, >=some, =some e <>some. Um sinônimo de some que caiu no desuso é o any, foi abandonado por causar ambiguidade.

Quando a idéia é "maior que todos" usa-se o >all. Assim como com o some, outras variações podem ser usada como: <all, <=all, >=all, =all e <>all.
Vamos mostrar um exemplo de como o some e o all podem ser aplicados.

Select cliente.nome
from cliente, aluguel
where cliente.nome = "Maria Aparecida da Silva"
and cliente.codigo=aluguel.codigo_cliente
and sum(preco)<=some (selectsum(preco) from aluguel group by codigo_cliente)

Nesse exemplo, verifica-se se existe algum cliente que tenha a soma de todos os aluguéis de dvds maior ou igual que o da Maria Aparecida da Silva.

Select cliente.nome
from cliente, aluguel
where cliente.nome = "Maria Aparecida da Silva"
and cliente.codigo=aluguel.codigo_cliente
and sum(preco)<=all (select sum(preco)from aluguel group by codigo_cliente)

Esse exemplo é muito parecido com o anterior só que verifica se todos os clientes possuem a soma de seus aluguéis maior ou igual ao da Maria Aparecida.
EXISTS e NOT EXISTS
Quando desejamos verificar se o resultado de uma pesquisa possui algum resultado específico podemos usar a cláusula exists.
Vamos pesquisar se existe algum cliente que possui dependentes. Para isso vamos usar a pesquisa a seguir:

select nome
from cliente
where exists (select * from cliente, associado where cliente.codigo = associado.codigo_titular)

Caso queira verificar se um determinado resultado não existe usamos o not exists.
UNIQUE
Quando queremos verificar se um resultado é único, podemos usar a cláusula unique. No exemplo a seguir, acharemos todos os cliente que possuem apenas um dependente.

Select nome
from cliente,associado
where cliente.codigo = associado.codigo_titular
and unique ( select codigo_titular from associado)

Visões
Visões podem ser entendidas como uma maneira alternativa de visualizar os dados de uma tabela. Pode ser considerada uma tabela virtual. As visões são utilizadas quando não é desejável que o usuário tenha um acesso aos modelo lógico como um todo, quando você tem a intenção de que ele veja apenas o necessário.
Suponha que na nossa locadora os dependentes só podem ser esposa ou marido, que filhos não são mais aceitos como dependentes. Criaremos uma visão que agrupará as pessoas que se encaixam nessa restrição mas o banco de dados não será alterado. Como citamos anteriormente, é como se uma tabela virtual fosse criada, sem alterar as existentes.

Createview dependetes_restritos as(select RG, nome, cidade, parentesco, codigo_titular
from associado
where parentesco = "marido"
or
parentesco = "esposa")

Criamos uma visão chamada dependentes_restritos onde só selecionou-se os dependentes que eram marido ou esposa do titular.
Após criar uma visão você pode acessá-la como uma tabela qualquer. Por exemplo:

select nome
from dependentes_restritos
where codigo_titular = 012345

Nesse exemplo, ele procurará na visão o nome do dependente do titular com código 012345.
Para destruir a visão que criamos basta executar o seguinte comando:

drop view dependentes_restritos


Exercício
Descreva um pouco sobre os comandos avançados e para o que eles podem ser utilizados?

Deixe suas respostas nos comentários. Obrigado!

Fonte: Comunidade CDTC

terça-feira, 14 de agosto de 2012

Curso Linguagem SQL, Lição 02


Lição 02 - Comandos básicos

Estruturas Básicas - select, from e where
Vamos agora discutir os comandos básicos da SQL. É importante saber nesse momento que as entidades envolvidas no banco de dados não podem ter nomes repetidos, o que é uma exigência do modelo relacional. Outra característica importante é a possibilidade de valores nulos para os atributos de uma entidade, se não houver restrição para isso, pois na linguagem SQL é possível restringir que um atributo receba valor nulo, ou seja, para esse atributo sempre terá que ser definido um valor qualquer, isso se aplica por exemplo as chaves primárias.

Select
O select é utilizado para realizar consultas. Vamos supor que queremos encontrar o nome de todos os associados da locadora, definida no nosso exemplo. A estrutura básica dessa consulta seria:

select nome from associado
where cidade = "Brasília"

Após o select colocamos o campo que queremos pesquisar, e após o from especificamos para qual tabela a pesquisa será feita. A cláusula where pode ser omitida e nela coloca-se alguma restrição para a pesquisa, nesse caso a nossa restrição é "Brasília" será mostrados apenas os associados de Brasília.

Na linguagem SQL é permitida a existência de tuplas duplicadas, ou seja no nosso exemplo anterior apareceria associados com mesmo nome caso existisse. Quando se quer no resultado de uma pesquisa apenas valores diferentes usa-se a palavra distinct da seguinte forma:

select distinct nome
from associado

Se você quiser deixar explícito de que a duplicação será aceita, pode-se usar all no lugar de distinct. Quando se deseja mostrar todos os atributos de uma tabela usa-se a seguinte configuração:

select *
from cliente

Esse exemplo mostra todos os atributos da tabela cliente. Outra característica importante da cláusula select é que pode-se realizar operações nela, como mostrado logo abaixo:

select idade*10
from filme

Essa operação não alterará o atributo na tabela mas apenas mostrará como resultado da pesquisa a idade do filme vezes 10.

From
Na cláusula from, como foi dito anteriormente, coloca-se os nomes das tabelas que foram usadas para a busca. É importante ressaltar que mais de uma tabela pode ser utilizada. No exemplo a seguir queremos saber quais são os clientes que estão com filmes:

select cliente.nome
from cliente, aluguel
where cliente.codigo = aluguel.codigo_cliente

Observe que informamos a qual tabela cada atributo pertence usando a estrutura cliente.nome, por exemplo. Essa construção só é necessária se os atributos de diferentes tabelas tiverem nomes iguais, caso contrário essa construção se torna opcional. Mesmo sendo opcional é aconselhável utilizá-la para deixar claro de qual tabela é o atributo.

Where
A cláusula where é utilizada para que se possa impor restrições para a pesquisa. No exemplo anterior fizemos uma pesquisa onde o código do cliente pesquisado fosse igual ao código do cliente que alugou um determinado filme. Isso foi necessário porque na tabela de aluguel não existe o nome do cliente, apenas o código e com essa estrutura podemos saber o nome de quem alugou determinado filme.

Algumas palavras-chave podem ser usadas junto com a cláusula where, elas são: between, and, not e or. Bem como os operadores de comparação: <, >, = e <>.
Veja os exemplos abaixo:

select nome
from cliente
where codigo between 1000 and1005
select aluguel.nome
from cliente, aluguel
where cliente.nome = "Maria Aparecida" or cliente.nome = "João da Silva"
and cliente.codigo = aluguel.codigo_cliente

No primeiro exemplo seleciona-se o nome dos cliente que tem código entre 1000 e 1005. No segundo, o nome do filme que foi alugado pelo cliente com nome de Maria Aparecida ou João da Silva.
Para verificar se um valor é nulo, usa-se por exemplo:

where preco is null

Estruturas Básicas - rename, strings e ordenação

Rename
As vezes é interessante renomear um atributo na hora de apresentá-lo. Isso pode ser necessário quando, por exemplo, dois atributos de tabelas diferentes serão apresentados. Para realizar essa mudança usa-se a palavra as. Essa palavra pode ser utilizada tanto para renomear atributos como para renomear tabelas. Algumas vezes é necessário renomear tabelas para facilitar a escrita.

Select aluguel.nome as nome_filme
from aluguel
where nome_filme = "Titanic"
select cliente1.nome, cliente2.nome
from cliente as cliente1, cliente as cliente2
where cliente1.data_nascimento = "05/05/1955" and cliente2. data_nascimento = "03/12/1980"

Utilizando Strings
Para comparar strings utiliza-se a palavra like na cláusula where. Para comparar uma substring, utiliza-se o caractere "%" e para comparar qualquer caractere utiliza-se o caractere "_".

select nome
from cliente
where nome like "Maria%"
select nome
from cliente
where nome like "%ata%"
select nome
from cliente
where nome like "Juli_"
select nome
from cliente
where nome like "_ _ _ _ _"

No primeiro exemplo, são selecionados todos os cliente que têm o nome começando por Maria. No segundo exemplo, todos os cliente que possuem a seqüência de caracteres "ata" no início, meio ou fim do nome. O caractere "%" indica zero ou mais caracteres na posição.
No terceiro exemplo, seleciona-se todos os nomes que começam com Juli e têm apenas um caractere depois. E no quarto exemplo, seleciona-se todos os nomes que possuem 5 caracteres.
É possível também o uso de not like para procurar por diferenças ao invés de igualdades.

Ordenando o resultado
Para ordenar o resultado da pesquisa, utiliza-se o comando order by, que ordena de modo ascendente. Caso deseje ordenar de modo descendente acrescenta-se o desc.

Select *
from cliente
order by nome
select *
from cliente
order by nome desc, codigo asc

No primeiro exemplo, ordena-se pelo nome de modo ascendente e no segundo descendente e ascendente. É possível ordenar duas colunas como mostrado no segundo exemplo, ordenando na ordem em que forem apresentadas.

Funções
A linguagem SQL permite o uso de funções pré-definidas para realizar operações de soma(sum), mínimo(min), máximo(max), média(avg) e contagem(count).
As funções avg e sum impõem que a entrada da função seja um numeral, já as outras funções aceitam strings como entrada.
As funções podem ser usadas de diferentes formas. Vamos citar um exemplo onde soma-se o preço de todos os aluguéis realizados por um cliente.

Select nome,sum(preco)
from cliente, aluguel
where codigo = codigo_cliente
group by nome

Quando deseja-se aplicar condições a grupos usa-se a cláusula having. Por exemplo, vamos reunir todos os clientes que possuem uma conta maior que 50 reais.

Select nome,sum(preco)
from cliente, aluguel
where codigo = codigo_cliente
group by nome
having sum(preco) > 50


Exercício
Quais são os comandos que fazem parte das estruturas básicas da Linguagem SQL?


Deixe suas respostas nos comentários. Obrigado!

Fonte: Comunidade CDTC

segunda-feira, 13 de agosto de 2012

Curso - Linguagem SQL, Lição 01

Lição 01 - Introdução


Histórico
A SQL, Structured Query Language, é uma linguagem de pesquisa para banco de dados relacionais. A maioria das características originais da SQL foram inspiradas na álgebra relacional.

SQL é normalmente pronunciado em português como "esse-quê-ele", porém sua pronúncia correta deveria ser "síquel", do inglês "sequel", ou "alguma coisa que segue outra coisa". SQL é uma brincadeira com o nome da primeira linguagem de consulta QUEL.
Originalmente a SQL foi criada pela IBM, mas logo outras visões baseadas nele foram criadas por outros produtores. Assim, com essa expansão, foi criado um padrão para controlá-la pela American National Standards Institute, ANSI em 1986, e o ISO em 1987.
A SQL ganhou várias versões conforme ia sendo revisada. Em 1992, 1999 e 2003 quando foi revista, a SQL foi chamada de SQL-92, SQL 3 e SQL: 2003, respectivamente. Na SQL 3 foram inseridas ao contexto da SQL expressões regulares de emparelhamento, queries recursivas e triggers. A SQL: 2003 introduziu características relacionadas ao XML.

Definição de um exemplo
Durante o nosso curso, utilizaremos o exemplo de uma locadora. A seguir, mostraremos as entidades utilizadas junto com seus atributos.
- Cliente(nome, endereco, CPF, data_nascimento,código);
- Associado(RG, nome, cidade, parentesco, codigo_titular);
- Aluguel(codigo_cliente, nome_ filme, preco, data_aluguel, data_devolucao);
- Filme(nome, ator_principal, diretor, genero, idade, copia, duracao).

Considerações Iniciais
Para começar o estudo dos comandos da SQL, alguns conceitos devem ser lembrados:
Transação: É uma coleção de operações que desempenham uma determinada função. Como exemplo, usemos uma locadora de vídeos. Para alugar um DVD é necessário: escolher o filme, verificar a disponibilidade no estoque e depois dar baixa no sistema. Ou seja, todas estas ações juntas são operações que precisam ser realizadas para que a transação de alugar um DVD seja realizada.

Entidade: É um objeto ou alguém que pode ser representado num banco de dados. No nosso exemplo da locadora, os clientes são entidades. Uma entidade tem várias propriedades, no nosso exemplo, o cliente pode ter um telefone, um código e outros dados pessoais.

Atributos: Um entidade é formada por um conjunto de atributos que são as propriedades que demos como exemplo no item anterior. Cada atributo tem um conjunto de valores possíveis, isso mostra que aquele atributo receberá valores daquele tipo.

Relacionamentos: O relacionamento é uma associação entre entidades, uma relação entre elas. Por exemplo, se tivéssemos, além da entidade clientes, a entidade empréstimos que armazenasse todos os DVDs alugados. Existe um relacionamento entre elas que informaria quem alugou determinado dvd e caso necessitasse contatar a pessoa seria possível através dos dados pessoais encontrados nos atributos da entidade cliente.

Chaves: As chaves são a forma de ligação entre as entidades promovendo o relacionamento entre elas. Uma superchave é o conjunto de um ou mais atributos que tomados, juntos, identificam uma entidade. Na nossa locadora, o código do cliente seria uma superchave pois cada cliente teria seu próprio número. Se não existisse um código, o nome da pessoa e o telefone juntos poderiam ser uma superchave pois não se encontraria morando no mesmo local duas pessoas com o mesmo nome. Essa é a ideia de superchave, juntar atributos para conseguir relacionar entidades. Chave candidata é aquela que não possui nenhum subconjunto que possa ser uma superchave. A chave candidata escolhida pelo projetista é chamada de chave primária. A chave primária é o que diferenciará as entidades.

Tupla: O resultado de nossas pesquisas serão chamados de tuplas. Tupla é um conjunto de objetos com as mesmas características.

Composição da Linguagem SQL
A linguagem SQL tem várias partes:
- Linguagem de Definição de Dados (DDL) - Através da DDL tem-se comandos de tratamento de relações e criação de índices;
- Linguagem Interativa de manipulação de dados (DML) - É uma linguagem de consulta baseada na álgebra relacional e no cálculo relacional de tuplas. Veremos o que é tupla futuramente no curso. Através do DML temos também comandos de inserção, exclusão e modificação de tuplas no banco de dados;
- Incorporação DML - A SQL é usado também integrado com linguagem de programação como Cobol, Pascal e C, por exemplo;
- Definição de visões - Com a SQL DDL é possível definir visões;
- Autorização - A SQL DDL possui comandos que permitem ou não o acesso a relações e visões;
- Integridade - A SQL DDL possui comandos que criam regras que os dados devem obedecer para serem armazenados no banco;
- Controle de transações - Possui comando que especificam como será feita a inicialização e finalização de transações.

Exercício
Conforme os conceitos estudados até agora, um comando do SQL que faz a inserção de um novo dado em uma tabela qualquer, deve ser classificado como: 
DML(   ) ou DDL(  ) ?

Deixe suas respostas nos comentários. Obrigado!

Fonte: Comunidade CDTC