Lição 7 - PRIMEIRO PASSOS COM SQL:
Esquemas, Criação de Tabelas, Inserção, Alteração e Exclusão de Dados
e Consulta de Dados
Esquemas, Criação de Tabelas, Inserção, Alteração e Exclusão de Dados
e Consulta de Dados
A linguagem de consulta estruturada SQL (Structured Query Language) possui comandos tanto para a criação de definições de dados (criação e modificação de esquemas) quanto para a execução de comandos voltados à manipulação do banco de dados (consultas e ordenações de dados). Segundo Silberschatz (2020, p. 51), embora “nos referimos à SQL como uma ‘linguagem de consulta’, ela pode fazer muito mais do que simplesmente consultar um banco de dados”. A linguagem SQL pode definir e criar a estrutura dos dados, modificá-los e especificar restrições de segurança para esse banco.
Dessa forma, o objetivo desta lição é proporcionar a você o conhecimento para dar os primeiros passos com a SQL. Aprenderemos a definição de esquemas, a criação de tabelas, as inserção, alteração, exclusão e consulta de dados.
Ao final desta lição, você estará apto(a) a realizar, usando a linguagem de consulta SQL, os primeiros comandos bem como a entender como manipular esquemas e dados em um banco de dados.
Nesse momento, te convido a relembrar os termos “relação”, “tupla” e “atributos do modelo relacional” que aprendemos em lições anteriores. Cada relação é uma tabela com linhas (tupla, registro) e com colunas (atributos e campos). Em SQL, usamos os termos “tabela”, “linha” e “coluna”.
Depois de relembrar, te questiono: como toda tecnologia, a linguagem SQL exige prática para o domínio, certo? É por meio de exemplos práticos que se consegue formar profissionais aptos a utilizar os conhecimentos para definir, criar e manter a estrutura desse banco de dados, por meio da inclusão, exclusão, alteração e consulta das informações armazenadas nas tabelas.
Para começarmos a usar os comandos SQL, na prática, relacionados à criação e à definição de dados, utilizaremos o comando CREATE, que é o comando utilizado para criar os principais objetos em um banco de dados. Que tal nos aprofundarmos, ainda mais, nestas definições?
A SQL é considerada uma linguagem de alto nível, ou seja, uma linguagem próxima ao idioma humano e que foi adaptada ao modelo relacional. A SQL foi desenvolvida na década de 1970, pela empresa IBM, os seus comandos derivam do idioma inglês e seguem, em geral, a mesma estrutura desse idioma (DATE, 2003).
Apesar de estarmos falando da linguagem SQL como uma linguagem de consulta estruturada, ela tem outras funções e pode ser utilizada para: definir a estrutura de dados, manipular o banco de dados, especificar critérios de segurança, entre outras. Dentro do SQL, temos comandos classificados conforme o tipo de função que realizam nos dados (DATE, 2003).
Temos os seguintes grupos:
DML ou Data Manipulation Language (Linguagem de Manipulação de Dados): comandos utilizados para realizar inclusões, exclusões e alterações de dados, ou seja, comandos que servem para trabalhar com os dados. Comandos INSERT, UPDATE e DELETE.
DDL ou Data Definition Language (Linguagem de Definição de Dados): comandos que permitem definir a estrutura de dados, a criação, modificação e remoção de tabelas bem como a criação, alteração e remoção de elementos associados às tabelas. Comandos CREATE, ALTER e DROP.
DCL ou Data Control Language (Linguagem de Controle de Dados): comandos que permitem gerenciar as autorizações dos dados, as licenças dos usuários para controlar o acesso de quem pode ver ou manipular dados dentro do banco. Comandos GRANT, REVOKE, SET e LOCK.
DTL ou Data Transaction Language (Linguagem de Transação de Dados): comandos utilizados para gerenciar as mudanças realizadas nos dados do banco de dados. Permitem, também, que as instruções sejam agrupadas por transações. Comandos ROLLBACK, COMMIT e SAVEPOINT.
DQL ou Doctrine Query Language (Linguagem de Consulta de Dados): tem, apenas, um comando que é considerado o mais importante na SQL, o SELECT. Este comando permite ao usuário efetuar uma consulta ao banco de dados.
Mas por que é importante saber SQL? Porque a SQL é observada em quase “todos os lugares”, pois você precisará se comunicar com um banco de dados e, também, consultar os dados. Então, independentemente da linguagem de programação que você optar em estudar e trabalhar, necessitará usar uma base de dados e isso significa usar SQL.
A linguagem SQL, em sua versão inicial, não tinha um mecanismo para agrupar tabelas relacionadas. A consequência disso era que todas as tabelas no SGBD (Sistema Gerenciador de Banco de Dados) coexistiam dentro de um único ambiente, causando complicações no momento de trabalhar com as tabelas e as manipular, principalmente se eram em grande número.
Devido a estas complicações, foi criado o conceito de schema (esquema), que é um conjunto de tabelas relacionadas. Por exemplo: criaremos um schema denominado “agenda”. O comando usado para criar esse esquema será:
create schema agenda;
Observe que foi usado o comando create seguido do nome schema agenda. Observe, também, que todos os comandos em SQL serão finalizados por um ponto e vírgula.
Um schema, além de agrupar as tabelas de forma lógica, também é utilizado no fornecimento de acesso aos usuários dessas tabelas. Uma observação importante: para criar um schema, o usuário deve ter o privilégio create no banco de dados corrente. Então, como ficaria se fosse criado um schema ao usuário Pedro? O esquema também se chamará Pedro:
create schema AUTHORIZATION pedro;
Um schema é utilizado, igualmente, para criar várias visões bem como realizar várias concessões em seu próprio esquema, em uma única transação. Caso seja necessário, o comando pode incluir subcomandos, a fim de criar objetos no novo esquema.
Agora, vamos aprender como criar tabelas no banco de dados? Usaremos o comando CREATE TABLE, o qual é utilizado para criar uma nova tabela.
Parâmetros do comando: o primeiro parâmetro é o nome da tabela que está sendo criada. O segundo parâmetro são os atributos bem como os seus respectivos tipos e restrições do atributo. Obrigatoriamente, deve ser especificado o nome da tabela a ser criada. Exemplo:
CREATE TABLE schema.nome_da_tabela (nome_da_coluna tipo_da_ coluna);
A fins de exemplo, segue a tabela Aluno com os dados dos alunos de determinada turma e série.
Para criar a tabela Aluno no banco de dados:
Agora, precisamos identificar a chave primária, pois ela tem a função de identificar, unicamente, um item ou uma linha na tabela. Toda tabela do banco de dados deve ter uma chave primária.
Todo campo que compõe a chave primária deve ter a cláusula NOT NULL.
Quando definimos os campos, é comum termos aqueles que não podem conter valores nulos, ou seja, o preenchimento do campo é obrigatório. Para evitar que um campo de uma tabela contenha valor nulo (null), utilizamos, após a definição do campo, a cláusula NOT NULL. Veremos como ficam estas definições na criação da tabela Aluno no banco de dados:
Seguindo, veremos a tabela Curso.
A integridade referencial é utilizada para garantir a integridade dos dados entre as tabelas do banco de dados. Veremos como ela fica com as tabelas Aluno e Curso.
Observe como ficam as definições de integridade na criação das tabelas Aluno e Curso no banco de dados:
Após a criação das tabelas, existem muitas alterações que podem ser efetuadas em uma tabela: modificar uma coluna, deletá-la, adicionar restrições a ela, entre outras. Todas essas alterações são de responsabilidade do DBA (Administrador de Banco de Dados).
Começaremos aprendendo como adicionar uma coluna:
alter table nome_da_tabela
add(nome_do_campo tipo_do_campo);
Para modificar uma coluna, usamos:
alter table nome_da_tabela
modify (nome_do_campo novo_tipo_ campo);
O comando DROP TABLE permite que seja removida uma tabela do banco de dados, removendo linhas, estrutura e índices de acesso associados à tabela. Para deletar uma coluna, usamos:
alter table nome_da_tabela
drop column nome_do_campo;
Para adicionar uma restrição à coluna, usamos:
alter table nome_da_tabela
add foreign key (tabela1_fk_ tabela2)
references tabela_referenciada;
Agora que aprendemos a criar as tabelas no banco de dados, abordaremos os comandos da linguagem SQL que permitem a adição, a atualização e a remoção de tuplas (linhas). São os comandos INSERT, UPDATE e DELETE.
Iniciaremos pelo comando INSERT, o qual é utilizado para inserir linhas em uma tabela. Devido à definição formal do schema, é necessário informar os valores a serem inseridos na tabela, dentro de uma ordem específica. A ordem pode ser a própria ordem do schema ou uma ordem em que são definidos os nomes das colunas da cláusula de INSERT.
insert into nome_da_tabela
values (valor1, valor2, valor3, ..., valorN);
Veremos um exemplo com as tabelas Aluno e Curso, nas quais determinamos os valores da cláusula VALUE seguindo os mesmos do schema.
Agora, neste outro exemplo, a seguir, especificaremos qual a ordem desejada de inserção de cada um dos atributos da tabela Aluno e Curso.
O próximo comando é UPDATE, utilizado para modificar os valores de uma ou mais linhas (tuplas) das tabelas selecionadas. Esse comando usa a cláusula WHERE, utilizada para determinar quais são as linhas da tabela selecionadas à modificação. A cláusula WHERE é opcional no comando UPDATE, se não informada, todas as linhas da tabela informada serão selecionadas para a execução das modificações solicitadas.
update <tabela>
set <atributos e valores>
where <condições>.
Veremos um exemplo com a tabela Aluno, onde modificamos o valor de um atributo da tupla cujo nome = ´Pedro´.
O comando DELETE é usado na remoção de linhas de determinada tabela. Ele possui, também, a cláusula WHERE, a qual é utilizada para limitar as linhas que serão processadas pelo comando. Essa cláusula também é opcional, mas a sua ausência implica que todas as linhas de determinada tabela serão processadas, ou seja, que o resultado será uma tabela vazia.
delete from <tabela>
where <condições>.
Veremos um exemplo com a tabela Curso:
Temos dois exemplos. O primeiro é a forma mais comum da execução do comando DELETE e só pode ser aplicado em uma única tabela de cada vez. O segundo exemplo, em um caso extremo, resultaria na tabela Curso vazia.
O bom é que, nas operações com o comando DELETE, as restrições de integridade referencial são verificadas e esse comando falharia com um erro, caso alguma outra tabela (Aluno, por exemplo) tivesse alguma chave estrangeira apontando a uma linha da tabela Curso.
Para finalizar, conheceremos o comando SELECT, cuja função é selecionar registros em uma tabela.
select <atributos>
from <tabelas>
where <condições>.
A expressão básica de consulta consiste em três cláusulas: SELECT, FROM e WHERE.
Cláusula SELECT: utilizada para listar os atributos desejados no resultado da consulta. Em português, “Selecionar”.
Cláusula FROM: utilizada para listar as relações (tabelas) que devem ser examinadas na avaliação da expressão SQL. Em português, “A partir de”.
Cláusula WHERE: corresponde ao predicado que envolve os atributos das relações que aparecem na cláusula FROM. Em português, “Onde”.
Veremos um exemplo com as tabelas Aluno e Curso:
Nesse exemplo, a primeira consulta encontra o nome de todos os alunos da tabela Aluno do banco de dados. Na segunda consulta, é encontrado o nome dos cursos da tabela Curso. Visando a não ter resultados em duplicidade na consulta, devemos forçar a eliminação dos resultados duplicados, por meio da instrução distinct, depois da cláusula select.
select distinct nome_pessoa
from pessoa
Ou utilizamos o asterisco (*), para denotar que o select deverá trazer todos os campos disponíveis para consulta.
select DISTINCT *
from Aluno
Na consulta, estamos solicitando ao banco de dados que sejam apresentados todos os campos disponíveis na tabela Aluno e que não haja dados repetidos.
Para finalizar a nossa lição e fixar bem o conteúdo, veremos mais duas tabelas: Disciplina e Professor.
Na tabela Professor, temos os dados dos professores que ministram disciplinas nos cursos onde temos os alunos matriculados. Anteriormente, criamos as tabelas Aluno e Curso no banco de dados, agora, criaremos as tabelas Disciplina e Professor.
Agora que você já tem as tabelas Professor e Disciplina criadas, procure popular as tabelas usando o comando INSERT, depois, elabore consultas SQL para selecionar, por exemplo, o nome de todos os alunos do curso com nome = 'Análise e Desenvolvimento de Sistemas’ ou selecionar o nome do professor da disciplina = ‘Banco de Dados’
DATE, C. J. Introdução a Sistemas de Banco de Dados. Rio de Janeiro: Elsevier, 2003.
SILBERSCHATZ, A. Sistema de Banco de Dados. São Paulo: GEN, 2020.