Banco de Dados – Introdução ao SQL

Olá Alunos,

Na aula de hoje iniciaremos o nosso estudo sobre SQL, linguagem de consulta para o banco de dados.
Utilizaremos o MySQL para nossa simulação, mas antes faça download do material teórico.
Para ter acesso ao material clique em : Introdução ao SQL

Após ler o material e realizar alguns teste em sala, vale realizar as leituras complementares para gerencia de dados em Windows e Linux. Os arquivos estão disponíveis nos endereços:

http://info.abril.com.br/dicas/arquivos/dica_749.shl

http://diegograssato.wordpress.com/2008/07/25/administrando-banco-de-dados-mysql/

===============================================================

O trecho a seguir foi retirado do primeiro link onde é destacado a gerencia do MySQL pelo prompt de comandos em ambiente Windows.

===============================================================

Agora, mão na massa. Baixe os programas e, primeiro, instale o MySQL. Para facilitar, aceite a instalação-padrão. Assim, o programa será acomodado no diretório c:\mysql. Passe à ativação do servidor de bancos de dados. Aqui, o procedimento é diferente se você estiver usando uma versão do Windows da série 9x (98, Me) ou da família NT (NT 4.0, 2000 ou XP). No primeiro caso, abra a janela do MS-DOS e comande:

c:\mysql\bin\mysqld

Com isso, você inicia o motor de banco de dados do MySQL, que funciona em segundo plano. Para desligar a aplicação, digite numa janela DOS:

c:\mysql\bin\mysqladmin -u root shutdown

No Windows NT, 2000 ou XP, o MySQL roda como um serviço do sistema – ou seja, como um programa que fica sob controle do Windows. Para ativar o motor de banco de dados do MySQL, abra a janela Command Prompt e execute a seguinte linha:

c:\mysql\bin\mysqld –install

Atenção: na linha acima, o parâmetro install é precedido por dois hífens. Esse comando instala o serviço MySql no Windows NT, 2000 ou XP. Para verificar a instalação, abra o gerenciador de serviços (no NT, Painel de Controle/Serviços; no 2000 e XP, Ferramentas Administrativas/Serviços). O gerenciador lista em ordem alfabética todos os serviços controlados pelo sistema. Localize a linha “MySql”. A coluna Tipo de Inicialização (Startup), indica Automático, Manual ou Desativado. Para modificar alguma propriedade, dê um duplo clique na linha do serviço. No modo automático, o serviço é ativado junto com o sistema operacional. No manual, ele permanece desativado até que o usuário faça a inicialização. Em vez de utilizar o gerenciador gráfico, você também pode ativar e desligar o serviço na janela de prompt. Para ativar, digite:

net start mysql

Para interromper o serviço, use o comando:

net stop mysql

Ative o MySql. Agora, o banco de dados está pronto para entrar em ação. Para testar se ele foi instalado corretamente, no Windows 9x ou NT/2000/XP, execute a seguinte linha na janela Command Prompt:

c:\mysql\bin\mysql.exe

O sinal de que o programa está respondendo adequadamente é a mensagem “Welcome to MySQL monitor”, seguida de um prompt de comando do próprio cliente MySQL (mysql>). Esta é a interface do MySQL. Nela, você pode criar e administrar bancos de dados, digitando comandos em linguagem SQL. Para sair, digite quit. Veja alguns exemplos básicos. Para criar um banco de dados chamado teste, escreva:

mysqladmin create teste

Agora, diga ao MySQL para abrir esse banco de dados:

use teste

O banco de dados está aberto, mas não tem conteúdo. Crie uma tabela com dois campos – um numérico e outro de texto, este com espaço para 20 caracteres:

create table tabela1 (campo1 integer, campo2 char(20));

Também é possível usar comandos com linhas múltiplas. Veja o mesmo exemplo acima, disposto em várias linhas:

create table
tabela1
(campo1
integer,
campo2
char(20));

Para listar os nomes das tabelas do banco de dados, use:

show tables;

Da mesma forma, para ver a lista de campos da tabela1:

show columns from tabela1;

Agora, vamos inserir conteúdo nos campos da tabela:

insert into tabela1 (campo1, campo2) values (1, ´texto 1´);

Para exibir o conteúdo da tabela, use o comando select:

select * from tabela1;

Estes são exemplos de alguns comandos básicos. Para ver a lista completa, consulte o manual do MySQL, que fica no subdiretório mysql\docs. Para pesquisar com mais facilidade, uma boa idéia é entrar na ajuda começando pelo documento manual_toc.html, que é um arquivo-índice para o conteúdo da ajuda em manual.html.

Mas convenhamos: digitar comandos numa janela DOS não é a maneira mais agradável (nem a mais produtiva) de gerenciar bancos de dados. Uma solução mais interessante é usar um cliente gráfico do MySQL. Assim, você trabalha mais confortavelmente numa tela Windows e esse programa-cliente é que se encarrega, nos bastidores, de enviar comandos ao MySQL.

Um bom cliente para o MySQL é o programa brasileiro DBTools, da DBTools Software. O programa funciona em qualquer versão do Windows, desde que você tenha instalado o protocolo TCP/IP – o que é padrão em qualquer máquina que tem acesso à internet. Instale o aplicativo e execute-o pela primeira vez.

Clique no botão Server Manager, na barra de ferramentas. Na nova tela que se abre, clique no primeiro botão (New Server) e preencha alguns campos. Em Server Name, dê um nome para o servidor MySQL – por exemplo, Local. Em Host Name, digite o número IP de sua máquina (se você não está numa rede, digite o número de um servidor local: 127.0.0.1). Na caixa User ID, mantenha o nome root – quer dizer, o usuário com todos os direitos no sistema. A senha, por comodidade, você pode deixar em branco. Clique no ícone Salvar e em seguida no ícone do relâmpago, para testar a conexão. Se tudo estiver bem, o programa avisa: “Connection successful”. O programa está pronto para o trabalho.

Feche a janela Server Manager. O DBToools vai perguntar se você deseja carregar as mudanças feitas na configuração. Responda sim. Agora, a janela de trabalho do DBTools mostra, na porção esquerda, o servidor Local (MySQL). Se você abrir a pasta desse servidor, vai ver que ele já tem um banco de dados, mysql, pertencente ao sistema de gerenciamento do MySQL. O servidor tem ainda um cadastro de usuários, no qual só está listado o superusuário root.

Vamos agora criar e manusear um banco de dados com o DBTools. Clique no botão New Database e informe um nome para o banco de dados. Para dar utilidade ao nosso exemplo, vamos criar um banco de dados para uma coleção de CDs musicais. O nome do database será cd. Outra forma de criar um banco de dados é clicar com o botão direito no diretório Databases, na porção esquerda da janela, e escolher a opção Create. Após isso, o banco cd aparece como subpasta de Databases.

Por enquanto, cd está vazio. Vamos, então, adicionar a ele uma tabela de dados. Abra a pasta cd e selecione a subpasta Tables. Em seguida, na janela à direita, clique no link New. O DBTools abre uma janela na qual você deve digitar os nomes, tipos e tamanhos dos campos de dados. Digite os nomes dos campos, escolha os tipos e, no caso de campos de texto comum, indique os tamanhos.

Para campos de valores fracionários, indique o número de casas decimais na coluna Decimals. Há ainda colunas de propriedades – como Null e Auto – caracterizadas pelo padrão Sim/Não. Null indica se o campo aceita, ou não, valores em branco. A coluna Auto marca os campos de numeração automática. Salve as modificações e feche a janela com a estrutura da tabela. Agora, clique no nome da tabela discos e veja um resumo dos campos e propriedades no lado direito da tela.

No MySQL, um banco de dados corresponde a uma pasta dentro do diretório \mysql\data. Cada tabela, por sua vez, está contida num conjunto de arquivos que abrigam dados e índices. Para inserir outras tabelas no banco de dados, adote o mesmo procedimento usado na criação de discos. Você pode, por exemplo, criar uma tabela chamada genero, que armazene gêneros musicais: MPB, rap, jazz, rock, clássico etc. Essa tabela seria uma doadora de informações para a tabela principal, discos. Infelizmente, o MySQL não suporta a criação de relacionamentos entre tabelas. Então, para associar os dados dessa segunda tabela aos valores do campo genero, em discos, seria necessário usar um programa que verificasse a coerência entre os dados.

===============================================================

O trecho a seguir foi retirado do segundo link onde é destacado a gerencia do MySQL pelo prompt de comandos em ambiente Linux.

===============================================================

Se como eu, você acessa o mysql através de outro micro, as permissões
de acesso devem ser alteradas:
# mysql -u root -p
mysql>
mysql> GRANT ALL ON *.* to root@192.168.0.1 identified by ‘anna’;
ou outro usuario

mysql> GRANT ALL ON *.* to diego@localhost identified by ‘anna’;

dando permissão somente acesso a um unico banco ao usuário:

mysql> GRANT ALL ON anna.* TO diego@localhost identified by ‘anna’;
Query OK, 0 rows affected (0.00 sec)

Para que as alterações referentes ao acesso a banco de dados e ao
servidor como um todo tenham efeito, é necessário que ao final de toda
rotina seja digitado o comando FLUSH PRIVILEGES, responsável por
validar as atualizações no MySQL:

mysql> FLUSH PRIVILEGES;

Vamos dar um exemplo criando um banco e duas tabelas e inserindo dados
em uma delas e trabalharemos um pouco nelas.
Entre no banco de dados local com o usuário que acabamos de criar:

#mysql -u diego –p
mysql>
mysql> CREATE DATABASE Cad;
Query OK, 1 row affected (0.00 sec)

Vamos verificar:

mysql>
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| anna               |
| cad                |
| mysql              |
| test               |
+--------------------+
5 rows in set (0.00 sec)
mysql>

Pronto criado nosso banco  )
 Continuar lendo 

Banco de Dados – Exercícios SQL

Após a aula introdutório de SQL faça o exercício abaixo, e implemente no MySQL.
Bom estudo !

Avalie cada instrução, e faça o ajuste quando necessário.

Criando as tabelas

create table pessoa
(pessoa_cod integer not null,
NOME varchar(6),
fone varchar(10),
primary key (pessoa_cod));

create table turma
(turma_cod character(1) not null,
NOME varchar(10),
profe integer,
primary key (turma_cod));

create table participante
(pessoa integer not null,
turma character(1) not null,
primary key (pessoa, turma));

alter table turma add foreign key (profe) references pessoa (pessoa_cod);
alter table participante add foreign key (pessoa) references pessoa (pessoa_cod);
alter table participante add foreign key (turma) references turma (turma_cod);

Incluíndo alguns registros

insert into pessoa (pessoa_cod, NOME, fone)
values (2, 'Silva', '282677');
insert into pessoa (pessoa_cod, NOME, fone)
values (3, 'Cabral', '260088');
insert into pessoa (pessoa_cod, NOME, fone)
values (4, Lobato, '174590');
insert into pessoa (pessoa_cod, NOME, fone)
values (1, ‘O-Bilac’, '260088');

insert into turma (turma_cod, NOME, profe)
values ('A', 'Volei', 4);
insert into turma (turma_cod, NOME, profe)
values ('C', 'Natação', 2);
insert into turma (turma_cod, NOME, profe)
values ('B', 'Karate', 4);

insert into participante (pessoa, turma)
values (1, 'A');
insert into participante (pessoa, turma)
values (1, 'B');
insert into participante (pessoa, turma)
values (1, 'C');
insert into participante (pessoa, turma)
values (2, 'C');
insert into participante (pessoa, turma)
values (3, 'A');

Exemplo 1

SQL> select * from pessoa;

4 rows selected
-------------------------------
| PESSOA_COD | NOME |FONE |
-------------------------------
|     2     |Silva |  282677  |
|     3     |Cabral|  260088  |
|     4     |Lobato|  174590  |
|     1     |OBilac|  260088  |
-------------------------------

SQL> select * from turma;

3 rows selected
-------------------------------------
|TURMA_cod|   NOME   |  PROFE   |
-------------------------------------
|     A      | Volei  |     4     |
|     C      | Natação |     2     |
|     B      |Karate|     4     |
-------------------------------------

SQL> select * from participante;

5 rows selected
---------------------
|  PESSOA   |TURMA|
---------------------
|     1     |   A   |
|     1     |   B   |
|     1     |   C   |
|     2     |   C   |
|     3     |   A   |
---------------------

Exemplo 2

SQL> select NOME from pessoa;

4 rows selected
--------
| NOME |
--------
|Silva |
|Cabral|
|Lobato|
|OBilac|
--------

Exemplo 3

SQL> select * from pessoa
where NOME = 'Lobato';

1 row selected
-------------------------------
| PESSOA_COD | NOME |FONE |
-------------------------------
|     4     |Lobato|  174590  |
-------------------------------

Exemplo 4

SQL> select * from pessoa
where first_NOME = Lobato;

[interbase.interclient] Dynamic SQL Error
SQL error code = -206
Column unknown
FIRST_NOME

SQL> select * from PARTIC
where NOME = Lobato;

[interbase.interclient] Dynamic SQL Error
SQL error code = -204
Table unknown
PARTIC

Exemplo 5

SQL> select NOME, fone from pessoa
where NOME like 'S%';

2 rows selected
-------------------
| NOME |FONE |
-------------------
|Silva |  282677  |
|Cabral|  260088  |
-------------------

Exemplo 6

SQL> select NOME, fone from pessoa
where NOME = 'S%';

No rows selected
-------------------
| NOME |FONE |
-------------------

Exemplo 7

SQL> select * from pessoa
where NOME like 'S%' and pessoa_cod <= 2
or fone = '174590';

2 rows selected
-------------------------------
| PESSOA_COD | NOME |FONE |
-------------------------------
|     2     |Silva |  282677  |
|     4     |Lobato|  174590  |
-------------------------------

Exemplo 8

SQL> select * from pessoa
where NOME like 'S%' and (pessoa_cod <= 2
or fone = '174590');

1 row selected
-------------------------------
| PESSOA_COD | NOME |FONE |
-------------------------------
|     2     |Silva |  282677  |
-------------------------------

Exemplo 9

SQL> select * from turma;

3 rows selected
-------------------------------------
|TURMA_cod|   NOME   |  PROFE   |
-------------------------------------
|     A      | Volei  |     4     |
|     C      | Natação |     2     |
|     B      |Karate|     4     |
-------------------------------------

SQL> select * from pessoa;

4 rows selected
-------------------------------
| PESSOA_COD | NOME |FONE |
-------------------------------
|     2     |Silva |  282677  |
|     3     |Cabral|  260088  |
|     4     |Lobato|  174590  |
|     1     |OBilac|  260088  |
-------------------------------

Exemplo 10

SQL> select profe from turma
where NOME = 'Volei';

1 row selected
-------------
|  PROFE   |
-------------
|     4     |
-------------

Exemplo 11

SQL> select NOME from pessoa
where pessoa_cod = 4;

1 row selected
--------
| NOME |
--------
|Lobato|
--------

Exemplo 12

SQL> select NOME from pessoa
where pessoa_cod = (select profe from turma
where NOME = 'Volei');

1 row selected
--------
| NOME |
--------
|Lobato|
--------

Exemplo 13

SQL> select * from turma, pessoa;

12 rows selected
-------------------------------------------------------------------
|TURMA_cod|   NOME   |  PROFE   | PESSOA_COD | NOME |FONE |
-------------------------------------------------------------------
|     A      | Volei  |     4     |     2     |Silva |  282677  |
|     C      | Natação |     2     |     2     |Silva |  282677  |
|     B      |Karate|     4     |     2     |Silva |  282677  |
|     A      | Volei  |     4     |     3     |Cabral|  260088  |
|     C      | Natação |     2     |     3     |Cabral|  260088  |
|     B      |Karate|     4     |     3     |Cabral|  260088  |
|     A      | Volei  |     4     |     4     |Lobato|  174590  |
|     C      | Natação |     2     |     4     |Lobato|  174590  |
|     B      |Karate|     4     |     4     |Lobato|  174590  |
|     A      | Volei  |     4     |     1     |OBilac|  260088  |
|     C      | Natação |     2     |     1     |OBilac|  260088  |
|     B      |Karate|     4     |     1     |OBilac|  260088  |
-------------------------------------------------------------------

Exemplo 14

SQL> select * from turma, pessoa
where profe = pessoa_cod;

3 rows selected
-------------------------------------------------------------------
|TURMA_cod|   NOME   |  PROFE   | PESSOA_COD | NOME |FONE |
-------------------------------------------------------------------
|     C      | Natação |     2     |     2     |Silva |  282677  |
|     A      | Volei  |     4     |     4     |Lobato|  174590  |
|     B      |Karate|     4     |     4     |Lobato|  174590  |
-------------------------------------------------------------------

Exemplo 15

SQL> select * from turma, pessoa
where profe = pessoa_cod
and turma.NOME = 'Volei';

1 row selected
-------------------------------------------------------------------
|TURMA_cod|   NOME   |  PROFE   | PESSOA_COD | NOME |FONE |
-------------------------------------------------------------------
|     A      | Volei  |     4     |     4     |Lobato|  174590  |
-------------------------------------------------------------------

Exemplo 16

SQL> select pessoa.NOME from turma, pessoa
where profe = pessoa_cod
and turma.NOME = 'Volei';

1 row selected
--------
| NOME |
--------
|Lobato|
--------

Exemplo 17

SQL> select pessoa_cod
from pessoa
where NOME = 'O-Bilac';

1 row selected
-------------
| PESSOA_COD |
-------------
|     1     |
-------------

Exemplo 18

SQL> select turma from participante
where pessoa = 1;

3 rows selected
---------
|TURMA|
---------
|   A   |
|   B   |
|   C   |
---------

Exemplo 19

SQL> select NOME from turma
where turma_cod = 'A'
or turma_cod = 'B'
or turma_cod = 'C';

3 rows selected
------------
|   NOME   |
------------
| Volei  |
| Natação |
|Karate|
------------

Exemplo 20

SQL> select NOME from turma
where turma_cod in ('A', 'B', 'C');

3 rows selected
------------
|   NOME   |
------------
| Volei  |
| Natação |
|Karate|
------------

Exemplo 21

SQL> select NOME from turma
where turma_cod = (select turma from participante
where pessoa = 1);

[interbase.interclient] multiple rows in singleton select

SQL> select NOME from turma
where turma_cod = (select turma from participante
where pessoa = (select pessoa_cod from pessoa
where NOME = ‘O-Bilac’));

[interbase.interclient] multiple rows in singleton select

Exemplo 22

SQL> select NOME from turma
where turma_cod in (select turma from participante
where pessoa = (select pessoa_cod from pessoa
where NOME = ‘O-Bilac’));

3 rows selected
------------
|   NOME   |
------------
| Volei  |
| Natação |
|Karate|
------------

Exemplo 23

SQL> select NOME from turma, participante, pessoa
where turma_cod = turma
and pessoa = pessoa_cod
and NOME = 'O-Bilac';

3 rows selected
--------
| NOME |
--------
|OBilac|
|OBilac|
|OBilac|
--------

Exemplo 24

SQL> select turma.NOME
from turma, participante, pessoa
where turma_cod = turma
and pessoa = pessoa_cod
and pessoa.NOME = ‘O-Bilac’;

3 rows selected
------------
|   NOME   |
------------
| Volei  |
|Karate|
| Natação |
------------

Exemplo 25

SQL> select * from pessoa
where pessoa_cod in (select pessoa from participante);

3 rows selected
-------------------------------
| PESSOA_COD | NOME |FONE |
-------------------------------
|     2     |Silva |  282677  |
|     3     |Cabral|  260088  |
|     1     |OBilac|  260088  |
-------------------------------

Exemplo 26

4 SQL> select * from pessoa
where pessoa_cod not in (select pessoa from participante);

1 row selected
-------------------------------
| PESSOA_COD | NOME |FONE |
-------------------------------
|     4     |Lobato|  174590  |
-------------------------------

Exemplo 27

SQL> select max(pessoa_cod) from pessoa;

1 row selected
-------------
|    MAX    |
-------------
|     4     |
-------------

Exemplo 28

SQL> select * from pessoa
where pessoa_cod = max(pessoa_cod);

[interbase.interclient] Dynamic SQL Error
SQL error code = -104
Invalid aggregate reference

Exemplo 29

SQL> select * from pessoa
where pessoa_cod = (select max(pessoa_cod) from pessoa);

1 row selected
-------------------------------
| PESSOA_COD | NOME |FONE |
-------------------------------
|     4     |Lobato|  174590  |
-------------------------------

Exemplo 30

SQL> select max(pessoa_cod) from pessoa
where NOME like 'S%';

1 row selected
-------------
|    MAX    |
-------------
|     3     |
-------------

Exemplo 31

SQL> select turma.NOME, pessoa.NOME
from turma, pessoa
where profe = pessoa_cod;

3 rows selected
-------------------
|   NOME   | NOME |
-------------------
| Natação |Silva |
| Volei  |Lobato|
|Karate|Lobato|
-------------------

Exemplo 32

SQL> create view prof_pessoa
as select turma.NOME, pessoa.NOME
from turma, pessoa
where profe = pessoa_cod;

[interbase.interclient] unsuccessful metadata update
STORE RDB$RELATION_FIELDS failed
attempt to store duplicate value (visible to active transactions) in unique index "RDB$INDEX_15"

Exemplo 33

SQL> create view prof_pessoa (turma_NOME, pessoa_codME)
as select turma.NOME, pessoa.NOME
from turma, pessoa
where profe = pessoa_cod;

Ok

Exemplo 34

SQL> select * from prof_pessoa;

3 rows selected
--------------------------
|TURMA_NOME|PESSOA_CODME|
--------------------------
|  Natação  |   Silva   |
|  Volei   |   Lobato  |
| Karate |   Lobato  |
--------------------------

SQL>  select PESSOA_CODME
from prof_pessoa
where turma_NOME = 'Volei';

1 row selected
-------------
|PESSOA_CODME|
-------------
|   Lobato  |
-------------

Exemplo 35

SQL> select * from pessoa;

4 rows selected
-------------------------------
| PESSOA_COD | NOME |FONE |
-------------------------------
|     2     |Silva |  282677  |
|     3     |Cabral|  260088  |
|     4     |Lobato|  174590  |
|     1     |OBilac|  260088  |
-------------------------------

SQL> insert into pessoa
values (4, 'Isaac', 281000);

[interbase.interclient] violation of PRIMARY or UNIQUE KEY constraint "INTEG_16" on table "PESSOA"

Exemplo 36

create table pessoa
(pessoa_cod integer not null,
NOME varchar(6),
fone varchar(10),
primary key (pessoa_cod));
Ok

Exemplo 37

SQL> insert into pessoa
values (7, 'Isaac', 281000);

Ok (1 row affected)

SQL> select * from pessoa;

5 rows selected
-------------------------------
| PESSOA_COD | NOME |FONE |
-------------------------------
|     2     |Silva |  282677  |
|     3     |Cabral|  260088  |
|     4     |Lobato|  174590  |
|     1     |OBilac|  260088  |
|     7     |Isaac |  281000  |
-------------------------------

Exemplo 38

4 SQL> insert into pessoa values  (8, 'Nelson');

[interbase.interclient] Dynamic SQL Error
SQL error code = -804
Count of columns does not equal count of values

Exemplo 39

SQL> insert into pessoa (pessoa_cod, NOME)
values  (8, 'Nelson');

Ok (1 row affected)

SQL> select * from pessoa;

6 rows selected
-------------------------------
| PESSOA_COD | NOME |FONE |
-------------------------------
|     2     |Silva |  282677  |
|     3     |Cabral|  260088  |
|     4     |Lobato|  174590  |
|     1     |OBilac|  260088  |
|     7     |Isaac |  281000  |
|     8     |Nelson|          |
-------------------------------

Exemplo 40

SQL> select * from pessoa where fone is null; 

1 row selected
-------------------------------
| PESSOA_COD | NOME |FONE |
-------------------------------
|     8     |Nelson|          |
-------------------------------

Exemplo 41

SQL>  select * from pessoa where fone = '';

No rows selected
-------------------------------
| PESSOA_COD | NOME |FONE |
-------------------------------

Exemplo 42

SQL> commit;

Transaction committed

Exemplo 43

SQL> delete from pessoa where NOME = 'Isaac';

Ok (1 row affected)

SQL> select * from pessoa;

5 rows selected
-------------------------------
| PESSOA_COD | NOME |FONE |
-------------------------------
|     2     |Silva |  282677  |
|     3     |Cabral|  260088  |
|     4     |Lobato|  174590  |
|     1     |OBilac|  260088  |
|     8     |Nelson|          |
-------------------------------

Exemplo 44

SQL> rollback;

Transaction aborted

SQL>  select * from pessoa;

6 rows selected
-------------------------------
| PESSOA_COD | NOME |FONE |
-------------------------------
|     2     |Silva |  282677  |
|     3     |Cabral|  260088  |
|     4     |Lobato|  174590  |
|     1     |OBilac|  260088  |
|     7     |Isaac |  281000  |
|     8     |Nelson|          |
-------------------------------

Exemplo 45

SQL> delete from pessoa where NOME = Lobato;

[interbase.interclient] violation of FOREIGN KEY constraint "INTEG_36" on table "TURMA"

Exemplo 46

alter table turma add foreign key (profe) references pessoa (pessoa_cod);

Exemplo 47

SQL> update turma
set NOME = 'Futebol'
where NOME = 'Volei';

Ok (1 row affected)

SQL> select * from turma;

3 rows selected
-------------------------------------
|TURMA_cod|   NOME   |  PROFE   |
-------------------------------------
|     A      |Futebol |     4     |
|     C      | Natação |     2     |
|     B      |Karate|     4     |
-------------------------------------

Exercício II

Criando as tabelas

create table empregado
(emp_cod integer not null,
NOME varchar(6),
fone varchar(10),
salario integer,
chefe integer,
depto character(1),
primary key (emp_cod));

create table depto
(depto_cod character(1) not null,
NOME varchar(12),
responsavel integer,
primary key (depto_cod));

alter table empregado add constraint empregado_to_chefe
foreign key (chefe) references empregado (emp_cod);
alter table empregado add constraint empregado_to_dept
foreign key (depto) references depto (depto_cod);
alter table depto add constraint depto_to_responsavel
foreign key (responsavel) references empregado (emp_cod);

Incluíndo novos registros

insert into empregado (emp_cod, NOME, fone, salario, depto)
values (2, 'Silva', '2677', 30000, 'H');
insert into empregado (emp_cod, NOME, fone, salario, chefe, depto)
values (3, 'Cabral', '1088', 22000, 2, 'S');
insert into empregado (emp_cod, NOME, fone, salario, chefe, depto)
values (4, `Lobato’, '4590', 28000, 2, 'H');
insert into empregado (emp_cod, NOME, fone, salario, chefe, depto)
values (1, ‘O-Bilac’, '2688', 20000, 3, 'S');
insert into empregado (emp_cod, NOME, fone, salario, chefe, depto)
values (8, 'Maria', '2690', 25000, 4, 'C');
insert into empregado (emp_cod, NOME, fone, salario, chefe, depto)
values (9, 'Antunes', '2698', 26000, 8, 'C');
insert into empregado (emp_cod, NOME, fone, salario, chefe, depto)
values (10, 'Petter', '2645', 22000, 8, 'C');

insert into depto (depto_cod, NOME, responsavel)
values ('H', 'Sede', 2);
insert into depto (depto_cod, NOME, responsavel)
values ('S', 'Seguranca', 3);
insert into depto (depto_cod, NOME, responsavel)
values ('C', 'Computação', 8);

Exemplo inicial

SQL> select * from empregado;

7 rows selected
------------------------------------------------------------------
|  EMP_COD   | NOME |FONE |  SALARIO   |   CHEFE    |DEPTO|
------------------------------------------------------------------
|     2     |Silva |   2677   |   30000   |     0     |    H     |
|     3     |Cabral|   1088   |   22000   |     2     |    S     |
|     4     |Lobato|   4590   |   28000   |     2     |    H     |
|     1     |OBilac|   2688   |   20000   |     3     |    S     |
|     8     |Maria |   2690   |   25000   |     4     |    C     |
|     9     |Antunes |   2698   |   26000   |     8     |    C     |
|    10     |Petter|   2645   |   22000   |     8     |    C     |
------------------------------------------------------------------

SQL> select * from depto;

3 rows selected
------------------------------------------
|DEPTO_cod|    NOME    |RESPONSAVEL|
------------------------------------------
|       H       |Sede|     2     |
|       S       |  Seguranca  |     3     |
|       C       |  Computação  |     8     |
------------------------------------------

Exemplo 1

SQL> select depto.NOME, empregado.NOME
from depto, empregado
where depto.responsavel = empregado.emp_cod;

3 rows selected
---------------------
|    NOME    | NOME |
---------------------
|Sede|Silva |
|  Seguranca  |Cabral|
|  Computação  |Maria |
---------------------

Exemplo 2

SQL> select avg(salario)
from empregado;

1 row selected
-------------
|    AVG    |
-------------
|   24714   |
-------------

Exemplo 3

SQL> select chefe, avg(salario)
from empregado
group by chefe;

5 rows selected
-------------------------
|   CHEFE    |    AVG    |
-------------------------
|     2     |   25000   |
|     3     |   20000   |
|     4     |   25000   |
|     8     |   24000   |
|     0     |   30000   |
-------------------------

Exemplo 4

SQL> select depto, avg(salario)
from empregado
group by depto;

3 rows selected
------------------------
|DEPTO|    AVG    |
------------------------
|    C     |   24333   |
|    H     |   29000   |
|    S     |   21000   |
------------------------

Exemplo 5

SQL> select depto, avg(salario)
from empregado
where salario > 20000
group by depto;

3 rows selected
------------------------
|DEPTO|    AVG    |
------------------------
|    C     |   24333   |
|    H     |   29000   |
|    S     |   22000   |
------------------------

Exemplo 6

SQL> select depto, avg(salario)
from empregado
group by depto
having avg(salario) > 22000;

2 rows selected
------------------------
|DEPTO|    AVG    |
------------------------
|    C     |   24333   |
|    H     |   29000   |
------------------------

Exemplo 7

SQL> select depto, avg(salario)
from empregado
where salario > 20000
group by depto
having avg(salario) > 22000;

2 rows selected
------------------------
|DEPTO|    AVG    |
------------------------
|    C     |   24333   |
|    H     |   29000   |
------------------------

Exemplo 8

SQL> select NOME, salario, NOME, salario
from empregado, empregado
where chefe = emp_cod
and salario > salario;

No rows selected
---------------------------------------
| NOME |  SALARIO   | NOME |  SALARIO   |
---------------------------------------

Exemplo 9

SQL> select asalariado.NOME, asalariado.salario, chefe.NOME, chefe.salario
from empregado asalariado, empregado chefe
where asalariado.chefe = chefe.emp_cod
and asalariado.salario > chefe.salario;

1 row selected
---------------------------------------
| NOME |  SALARIO   | NOME |  SALARIO   |
---------------------------------------
|Antunes |   26000   |Maria |   25000   |
---------------------------------------

Banco de Dados – Exercícios Inciais

Olá Alunos,

Esta é uma lista de exercícios iniciais, para a disciplina Banco de Dados.
Traga este exercício para a sala de aula e tente responder cada questão.
Bom estudo.

 

Lista de Exercícios

1. Explique as diferenças entre o processamento de dados em arquivos convencionais e o processamento de dados com SGBD.

2. Descreva algumas vantagens na utilização de um SGBD em uma empresa.

3. Defina os seguintes conceitos:
a) Banco de dados
b) Sistema de gerência de banco de dados
c) Modelo de dados
d) Esquema de dados
e) Modelo conceitual
f) Modelo lógico
g) Projeto conceitual

4. Explique o que significa redundância de dados.

5. O que são metadados?

6. Dê um exemplo de aplicação de banco de dados.

7. Defina o que é uma: entidade, relacionamento, atributo.

8. Dê exemplos para cada um dos conceitos da abordagem ER: entidade, relacionamento,atributo, generalização/especialização.

9. Explique qual o que é o papel de uma entidade em um relacionamento. Em que situação é necessário especificar?

10. Defina os termos cardinalidade máxima e cardinalidade mínima.

11.Dê o nome e esquematize os símbolos usados nos diagramas ER para: entidade, relacionamento, entidade fraca, auto-relacionamento.

12.Mostre um diagrama ER entre as entidades Empregado e Departamento, com seus respectivos atributos, que tenha relacionamento 1:N. Admita que um Departamento não precisa ter um Empregado, mas que todo Empregado tem que ser de um Departamento.

13.Exemplifique o que é uma entidade fraca e mostre um exemplo que se ajuste ao exercício anterior.

14.Em uma empresa uma toda secretária é de um departamento, mas nem todo departamento precisa ter um secretária. Toda secretária para desempenhar suas atividades precisa ser alocada em uma mesa.
a) Identifique as Entidades neste problema.
b) Identifique alguns atributos para ada uma das entidades.
c) Identifique os Relacionamentos existente em conjunto com as cardinalidades mínimas e máximas.
d) Qual seria a modificaão caso uma mesa pudesse ser utilizada por duas secretárias?

15.Em um consultório médico, um médico realiza várias consultas com vários pacientes e um paciente é consultado por um médico. Com base neste plano de discurso identifique as entidades e o relacionamento entre elas.
a) Modifique o modelo anterior sabendo que precisa-se saber do médico o nome, CPF, CRM e do paciente: nome,endereço, CPF, data nascimento
b) Qual será a mudança para que um médico possa atender vários pacientes e um paciente seja atendido por vários médicos?
c) Qual será a mudança para o seguinte plano de discurso: “Um médico possui uma especialidade e uma especialidade é de vários médicos”.
d) Acrescente o seguinte discurso ao problema:”Um médico realiza várias consultas em um paciente e um paciente é consultado por vários médicos, desde que seja em uma data e hora marcados, e possua um valor a ser pago. Uma consulta pode gerar uma ou várias receitas”.

16.Uma delegacia resolveu informatizar seus serviços relacionados aos crimes ocorridos em seu
estado criando um banco de dados, para uma melhor gerência dos tipos de crimes mais cometidos. É necessário saber os dados das vítimas e dos criminosos para dar seguimento aos documentos processuais, bem como armazenar informações sobre cada crime ocorrido. Um criminoso comete um crime contra um ou mais vítimas, e uma vítima pode sofrer um crime por um ou vários criminosos. Um crime é cometido em um município de um estado, e em um crime pode é utilizado um tipo de arma. De acordo com o problema, projete um diagrama Entidade Relacionamento(ER) e faça a sua correspondência no modelo físico de dados.

17.Faça uma pesquisa sobre a utilização de SGBDs em empresas e Universidade atentando as seguintes questões:
a)Quais as vantagens de utilização de um SGBD?
b)Quais os tipos de SGBDs existentes no mercado?
c)Quanto custa disponibilizar informações utilizando um SGBD?
d)De que formas as aplicações podem fazer uso de um SGBD?

 

Vídeos para ajudar na resolução da lista de exercícios.

Revisão de conceitos sobre ER

 

 

Banco de Dados – Aula 2

Olá Alunos,

O material disponível neste post faz referencia a Abordagem Entidade Relacionamento.

Para ter acesso ao material, clique no link ao lado: Aula 2

Como material complementar, acesse o link a seguir, o qual apresenta um conteúdo teórico bem acessível e que vai contribuir para seu entendimento.

http://www.metropoledigital.ufrn.br/aulas_avancado/web/disciplinas/banco_de_dados/aula_02.html

Banco de dados – Aula 1

Olá Alunos,

Este é o módulo da disciplina Banco de Dados, para ter acesso ao material clique no link abaixo.
Neste tópico serão apresentados os conceitos básicos sobre Banco de Dados e conceitos importantes e.

Para ter acesso ao material de aula acesso este link: Aula 1

Após esta aula teórica, assista ao vídeo e perceba a importância de aprofundar nesta disciplina.

Estude, compartilhe e divulgue.

Bom estudo !!!