Exercicios de fixação de SQL
Alguns Exemplos Livro-> SQL Server Express 2008
1. Defina campo, registro, tabela e banco de dados.
Resposta: Banco de dados é o conjunto de registros, registro é o conjunto de campos e campo é a menor unidade de armazenamento.
2. Quem desenvolveu banco de dados relacional?
Resposta: O modelo relacional de banco de dados foi desenvolvido pelo cientista inglês Edgar Frank "Ted" Codd.
3. Qual é o significado da sigla SQL em inglês e em português?
Resposta: SQL significa Structured Query Language, ou seja, Linguagem Estruturada de Consulta.
4. Como um banco de dados relacional armazena seus dados?
Resposta: Armazena os dados em forma de tabela.
5. Qual o significado das siglas SGBD e SGBDR?
Resposta:
§ SGBD - Sistema de Gerenciamento de Banco de Dados.
§ RDBMS - Relational Data Base Management System.
6. Quem foi o principal desenvolvedor da linguagem SQL?
Resposta: Foi o Ph.D. Donald D. Chamberlin.
7. Quem foi o desenvolvedor do sistema de gerenciamento de banco de dados SEQUEL-XRM?
Resposta: Foi a IBM.
8. Além da linguagem SQL, quais outras são de quarta geração?
Resposta:
§ ADF (Application Development Facility);
§ ADRS II (A Departmental Reporting System);
§ AS (Application System);
§ CSP (Cross System Product Set);
§ DMS (Development Management System);
§ GIS (Generalized Information System);
§ IC/1 (Information Center/1);
§ QBE (Query By Example);
§ QMF (Query Management Facility);
§ TIF (The Information Facility).
Capítulo 3
1. Qual a finalidade da instrução CREATE DATABASE?
Resposta: A finalidade é criar um banco de dados.
3. Qual a finalidade da instrução USE?
Resposta: Colocar em uso um banco de dados existente.
3. Qual a finalidade da instrução DROP DATABASE?
Resposta: A finalidade é remover um banco de dados existente.
4. Qual a finalidade da instrução CREATE TABLE?
Resposta: Criar uma tabela em um banco de dados existente.
5. Qual a finalidade da instrução INSERT INTO?
Resposta: A finalidade é efetuar a entrada de registros em uma tabela.
6. Qual a finalidade da instrução SELECT com FROM?
Resposta: A finalidade é fazer uma consulta e apresentar os registros armazenados em uma determinada tabela.
78. Qual a finalidade da instrução UPDATE com SET?
Resposta: Atualização de registros em uma determinada tabela.
8. Qual a finalidade da instrução DELETE FROM?
Resposta: A finalidade é remover (apagar) registros de uma determinada tabela.
9. Qual a finalidade da instrução ALTER TABLE?
Resposta: Alterar a estrutura de uma determinada tabela.
10. Faça a listagem dos nomes e funções de todos os funcionários.
Resposta: SELECT NOME, FUNCAO FROM cadfun;.
11. Faça a listagem dos códigos, nomes e funções de todos os funcionários.
Resposta: SELECT CODFUN, NOME, FUNCAO FROM cadfun;.
12. Elabore a listagem dos códigos, nomes, funções e departamentos de todos os funcionários.
Resposta: SELECT CODFUN, NOME, FUNCAO, DEPTO FROM cadfun;.
13.Quais são os nomes dos funcionários do departamento 5?
Resposta: SELECT NOME FROM cadfun WHERE DEPTO = '5';.
14. Quais são os nomes e os departamentos dos funcionários que ocupam o cargo de vendedor?
Resposta: SELECT NOME, DEPTO FROM cadfun WHERE FUNCAO = 'VENDEDOR';.
15. Quais são os salários dos funcionários do departamento 3?
Resposta: SELECT SALARIO FROM cadfun WHERE DEPTO = '3';.
16. Faça uma listagem do nome e da função de todos os funcionários ordenados de forma descendente pela descrição da função.
Resposta: SELECT NOME, FUNCAO FROM cadfun ORDER BY FUNCAO DESC;.
17. Elabore a listagem das funções e nomes de todos os funcionários ordenando a coluna de função de forma ascendente e a coluna de nomes de modo descendente.
Resposta: SELECT FUNCAO, NOME FROM cadfun ORDER BY FUNCAO, NOME DESC;.
18. Faça a listagem de todas as colunas dos registros que tenham outubro como mês de admissão.
Resposta: SELECT * FROM cadfun WHERE MONTH(ADMISSAO) = 10;.
Capítulo 4
1. Quais operadores aritméticos podem ser utilizados?
Resposta: Podem ser utilizados: adição (+), subtração (-), multiplicação (*), divisão (/) e resto de divisão (%).
2. Quais símbolos são utilizados para alterar a prioridade de cálculo matemático?
Resposta: Deve-se usar os parênteses.
3. Quais são os operadores de comparação suportados?
Resposta: São: > (maior que), < (menor que), = (igual a), <> (diferente de), >= (maior ou igual a), <= (menor ou igual a) e NULL.
4. Quais são os operadores lógicos suportados?
Resposta: São: AND (operador de conjunção), OR (operador de disjunção) e NOT (operador de negação).
5. Quais são os operadores auxiliares suportados?
Resposta: São IS NULL (para verificação de campo ou coluna vazios), BETWEEN (para verificar um valor em uma faixa de valores), IN (para verificar se um valor existe na tabela) e LIKE (para verificar um valor que faz busca por semelhança).
6. Os operadores auxiliares podem ser utilizados com quais comandos SQL?
Resposta: Podem ser usados com SELECT, UPDATE e DELETE.
7. Faça uma simulação para apresentar uma consulta com as colunas (campos) CODFUN, NOME, SALARIO com o salário somado a R$ 250,00.
Resposta: SELECT CODFUN, NOME, SALARIO + 250 FROM cadfun;.
8. Faça uma simulação para apresentar uma consulta com as colunas (campos) CODFUN, NOME, SALARIO com o salário deduzido de 7.5%.
Resposta: SELECT CODFUN, NOME, SALARIO – SALARIO * 0.075 FROM cadfun;.
9. Apresente uma consulta de todos os campos (colunas) dos registros cuja função seja igual a analista.
Resposta: SELECT * FROM cadfun WHERE FUNCAO = 'ANALISTA';.
10. Apresente uma consulta de todos os campos (colunas) dos registros cujo salário seja maior ou igual a R$ 1.700,00.
Resposta: SELECT * FROM cadfun WHERE SALARIO >= 1700;.
11. Faça uma consulta de todos os campos (colunas) dos registros cujo salário seja maior que R$ 1.700,00.
Resposta: SELECT * FROM cadfun WHERE SALARIO > 1700;.
12. Apresente uma consulta de todos os campos (colunas) dos registros cujo salário seja menor que R$ 1.700,00.
Resposta: SELECT * FROM cadfun WHERE SALARIO < 1700;.
13. Apresente uma consulta de todos os campos (colunas) dos registros cujo salário seja igual a R$ 1.700,00.
Resposta: SELECT * FROM cadfun WHERE SALARIO = 1700;.
14. Apresente uma consulta de todos os campos (colunas) dos registros dos funcionários com função de programador e de analista.
Resposta: SELECT * FROM cadfun WHERE (FUNCAO = 'ANALISTA') OR (FUNCAO = 'PROGRAMADOR');.
15. Apresente uma consulta de todos os campos (colunas) dos registros dos funcionários com função de programador e de analista que ganham acima de R$ 1.200,00.
Resposta: SELECT * FROM cadfun WHERE (FUNCAO = 'ANALISTA') OR (FUNCAO = 'PROGRAMADOR') AND (SALARIO > 1200);.
16. Apresente uma consulta de todos os campos (colunas) dos registros dos funcionários que não ocupem as funções de programador e de analista.
Resposta: SELECT * FROM cadfun WHERE NOT (FUNCAO = 'ANALISTA') AND NOT (FUNCAO = 'PROGRAMADOR');.
17. Apresente uma consulta de todos os campos (colunas) dos registros dos funcionários que possuem entre 2 e 4 filhos.
Resposta: SELECT * FROM cadfun WHERE FILHOS BETWEEN 2 AND 4;.
18. Apresente uma consulta de todos os campos (colunas) dos registros dos funcionários que possuem entre 2 e 4 filhos que recebem salário abaixo de R$ 2.000,00.
Resposta: SELECT * FROM cadfun WHERE (FILHOS BETWEEN 2 AND 4) AND (SALARIO < 2000);.
19. Apresente uma consulta de todos os campos (colunas) dos registros dos funcionários que possuem abaixo de 2 e acima de 3 filhos.
Resposta: SELECT * FROM cadfun WHERE FILHOS NOT BETWEEN 2 AND 3;.
20. Apresente uma consulta de todos os campos (colunas) dos registros dos funcionários que possuem abaixo de 2 e acima de 3 filhos, e a consulta somente indique os registros dos funcionários que possuem filhos.
Resposta: SELECT * FROM cadfun WHERE (FILHOS NOT BETWEEN 2 AND 3) AND (FILHOS <> 0);.
21. Apresente uma consulta de todos os campos (colunas) dos registros dos funcionários que possuem entre 2 e 3 filhos, utilizando o operador IN.
Resposta: SELECT * FROM cadfun WHERE FILHOS IN (2, 3);.
22. Apresente uma consulta de todos os campos (colunas) dos registros dos funcionários que possuem o sobrenome SILVA.
Resposta: SELECT * FROM cadfun WHERE NOME LIKE '%SILVA';.
23. Apresente uma consulta de todos os campos (colunas) dos registros dos funcionários cujos nomes comecem com SILV.
Resposta: SELECT * FROM cadfun WHERE NOME LIKE 'SILV%';.
24. Quais são os funcionários que possuem o sobrenome SANTOS? Apresente apenas os nomes.
Resposta: SELECT NOME FROM cadfun WHERE NOME LIKE '%SANTOS';.
25. Qual é o nome e o departamento dos gerentes e dos analistas?
Resposta: SELECT NOME, DEPTO FROM cadfun WHERE (FUNCAO = 'GERENTE') OR (FUNCAO = 'ANALISTA');.
26. Faça a lista dos funcionários de códigos 2, 5 e 9. 27. Listar os funcionários de códigos 2, 5 e 9. Apresentar apenas os códigos, nomes e departamentos.
Resposta: SELECT CODFUN, NOME, DEPTO FROM cadfun WHERE (CODFUN = 2) OR (CODFUN = 5) OR (CODFUN = 9);.
27. Liste os nomes e departamentos de todos os funcionários que não sejam do departamento 5.
Resposta: SELECT NOME, DEPTO FROM cadfun WHERE DEPTO <> '5';.
28. Apresente uma consulta de todos os campos (colunas) dos registros dos funcionários que possuem em qualquer posição de seus nomes a palavra SILVA.
Resposta: SELECT * FROM cadfun WHERE NOME LIKE '%SILVA%';.
29.Apresente uma consulta de todos os campos (colunas) dos registros cujo salário seja diferente de R$ 2.000,00.
Resposta: SELECT * FROM cadfun WHERE SALARIO <> 2000;.
Capítulo 5
1. Quais são as categorias de funções apresentadas no capítulo 5?
Resposta: Foram apresentadas funções de agregação, data e hora, numéricas e strings.
2. Qual categoria de função é ideal para cálculos matemáticos?
Resposta: O ideal são as funções numéricas.
3. Qual categoria de função é ideal para operações estatísticas?
Resposta: Deve-se usar as funções de agregação.
4. Quais foram as funções de agregação apresentadas no capítulo 5?
Resposta: Foram apresentadas as funções AVG(), COUNT(), MAX(). MIN() e SUM().
5. Quais foram as funções de data e hora apresentadas no capítulo 5?
Resposta: Foram apresentadas as funções DATEADD(), DATEDIFF(), DATENAME(), DATEPART(), DAY(), GETDATE(), MONTH() e YEAR().
6. Quais foram as funções numéricas apresentadas no capítulo 5?
Resposta: Foram apresentadas as funções ABS(), ACOS(), ASIN(), ATAN(), COS(), DEGREES(), EXP(), LOG(),PI(), POWER(), RADIANS(), ROUND(), SIN(), SQRT() e TAN().
7. Quais foram as funções strings apresentadas no capítulo 5?
Resposta: Foram apresentadas as funções ASCII(), LOWER(), LEFT(), LEN() e UPPER().
8. Qual é o número médio de filhos por funcionário da empresa?
Resposta: SELECT AVG(FILHOS) FROM cadfun;.
9. Qual é o número médio de filhos por funcionário da empresa que pertence ao departamento 5?
Resposta: SELECT AVG(FILHOS) FROM cadfun WHERE DEPTO = '5';.
10. Qual é o valor de salários pagos aos funcionários do departamento 5?
Resposta: SELECT SUM(SALARIO) FROM cadfun WHERE DEPTO = '5';.
11. Quantos funcionários estão no departamento 5?
Resposta: SELECT COUNT(*) FROM cadfun WHERE DEPTO = '5';.
12. Qual é o maior valor de salário pago para o departamento 5?
Resposta: SELECT MAX(SALARIO) FROM cadfun WHERE DEPTO = '5';.
13. Quanto a empresa paga para todos os analistas?
Resposta: SELECT SUM(SALARIO) FROM cadfun WHERE FUNCAO = 'ANALISTA';.
14. Quanto a empresa paga para os analistas do departamento 2?
Resposta: SELECT SUM(SALARIO) FROM cadfun WHERE (FUNCAO = 'ANALISTA') AND (DEPTO = '2');.
15. Liste os nomes de todos os funcionários admitidos no dia 10 de qualquer mês.
Resposta: SELECT NOME FROM cadfun WHERE DAY(ADMISSAO) = 10;.
16. Liste os nomes e as datas de admissão de todos os funcionários admitidos entre o dia 5 e o dia 10 de qualquer mês.
Resposta: SELECT NOME, ADMISSAO FROM cadfun WHERE (DAY(ADMISSAO) >= 5) AND (DAY(ADMISSAO) <= 10);.
17. Liste os nomes e as datas de admissão de todos os funcionários admitidos entre o dia 5 e o dia 10 de qualquer mês, ordenados de modo ascendente por data.
Resposta: SELECT NOME, ADMISSAO FROM cadfun WHERE (DAY(ADMISSAO) >= 5) AND (DAY(ADMISSAO) <= 10) ORDER BY ADMISSAO;.
18. Liste os nomes e as datas de admissão de todos os funcionários admitidos entre o dia 5 e o dia 10 de qualquer mês, ordenados de forma descendente por data.
Resposta: SELECT NOME, ADMISSAO FROM cadfun WHERE (DAY(ADMISSAO) >= 5) AND (DAY(ADMISSAO) <= 10) ORDER BY ADMISSAO DESC;.
19. Liste todos os funcionários admitidos antes de 20 de setembro de 2006.
Resposta: SELECT * FROM cadfun WHERE ADMISSAO < DATEADD(Month, 1, '2006-09-20');.
20. Liste os nomes, data de admissão e a descrição por extenso do nome dos meses de admissão de todos os funcionários do departamento 5.
Resposta: SELECT NOME, ADMISSAO, DATENAME(Month, ADMISSAO) FROM cadfun WHERE depto = '5';.
21. Liste os nomes e os departamentos de todos os funcionários em letras minúsculas que pertençam aos departamentos 3 e 5.
Resposta: SELECT LOWER(NOME), DEPTO FROM cadfun WHERE (DEPTO = '3') OR (DEPTO = '5');
22. Liste os nomes, departamentos e as datas de admissão de todos os funcionários admitidos entre o dia 5 e o dia 10 de qualquer mês dos departamentos 3 e 5.
Resposta: SELECT NOME, DEPTO, ADMISSAO FROM cadfun WHERE (DAY(ADMISSAO) >= 5) AND (DAY(ADMISSAO) <= 10) AND (DEPTO = '3') OR (DEPTO = '5');.
23. Liste os nomes, departamentos, funções e as datas de admissão de todos os funcionários admitidos entre o dia 1º e o dia 15 que sejam analistas.
Resposta: SELECT NOME, DEPTO, FUNCAO, ADMISSAO FROM cadfun WHERE (DAY(ADMISSAO) >= 1) AND (DAY(ADMISSAO) <= 15) AND (FUNCAO = 'ANALISTA');.
24. Liste os nomes, departamentos, funções e as datas de admissão de todos os funcionários admitidos entre os meses de maio e agosto de qualquer ano, que ocupem o cargo de analista.
Resposta: SELECT NOME, DEPTO, FUNCAO, ADMISSAO FROM cadfun WHERE (MONTH(ADMISSAO) >= 5) AND (MONTH(ADMISSAO) <= 8) AND (FUNCAO = 'ANALISTA');.
26. Liste os nomes, departamentos, funções e as datas de admissão de todos os funcionários admitidos entre os meses de maio e agosto de qualquer ano que não ocupam os cargos de analistas.
Resposta: SELECT NOME, DEPTO, FUNCAO, ADMISSAO FROM cadfun WHERE (MONTH(ADMISSAO) >= 5) AND (MONTH(ADMISSAO) <= 8) AND NOT (FUNCAO = 'ANALISTA');.
27. Quantos funcionários foram admitidos no mês de julho?
Resposta: SELECT COUNT(*) FROM cadfun WHERE MONTH(ADMISSAO) = 7;.
Capítulo 6
1. O que é agrupamento de dados?
Resposta: O agrupamento de dados é, segundo Stephens & Plew (2003), "o processo de combinação de colunas com valores repetidos em uma ordem lógica".
2. Qual é a finalidade da cláusula GROUP BY?
Resposta: Permitir a definição e uso do agrupamento de dados.
3. Como deve ser utilizada a cláusula GROUP BY?
Resposta: A cláusula GROUP BY deve ser utilizada após a cláusula WHERE e antes da cláusula ORDER BY.
4. O que é união de dados?
Resposta: É a união de mais de uma consulta em uma única por meio de múltiplos comandos SELECT.
5. Quais são os cargos existentes na empresa e quais os funcionários que ocupam cada um dos cargos existentes?
Resposta: SELECT FUNCAO, COUNT(*) FROM cadfun GROUP BY FUNCAO;.
6. Qual a distribuição de filhos por funcionários que tenham acima de 1 filho? Apresente os funcionários que possuem 1, 2, 3 ou 4 filhos.
Resposta: SELECT FILHOS, COUNT(*) FROM cadfun WHERE FILHOS > 0 GROUP BY FILHOS;.
7. Liste todos os funcionários das tabelas “cadfun” e “morto” que estejam ou estiveram relacionados com o departamento 5 em ordem alfabética ascendente pelo campo NOME.
Resposta: SELECT * FROM cadfun WHERE DEPTO = '5' UNION SELECT * FROM morto WHERE DEPTO = '5' ORDER BY NOME;.
8. Liste todos os funcionários das tabelas “cadfun” e “morto” que estejam ou estiveram relacionados com a função de vendedor em ordem alfabética ascendente pelo campo NOME.
Resposta: SELECT * FROM cadfun WHERE FUNCAO = 'VENDEDOR' UNION SELECT * FROM morto WHERE FUNCAO = 'VENDEDOR' ORDER BY NOME;.
9. Liste a quantidade de funcionários por departamento que tenham como sobrenome SILVA, agrupando a informação por departamento.
Resposta: SELECT DEPTO, COUNT(*) FROM cadfun WHERE NOME LIKE '%SILVA' GROUP BY DEPTO;
Capítulo 7
1. O que é junção de tabelas e visualização de tabelas?
Resposta: Uma junção de tabela possibilita, por meio de um campo comum entre as tabelas existentes, gerar consultas como se as tabelas relacionadas (múltiplas tabelas) na consulta fossem uma só. Uma visualização é uma tabela virtual baseada nos dados de uma tabela real. A partir dos dados de uma única tabela real é possível ter várias visões para facilitar as operações de consultas.
2. Quantas tabelas são necessárias, no mínimo, para estabelecer uma relação de junção?
Resposta: Para determinar o relacionamento entre tabelas por meio de junções, é necessário ter no mínimo duas tabelas que possuam algum campo em comum.
3. Liste por junção os nomes dos clientes, os estados dos clientes, os números das duplicatas e seus respectivos valores para todos os clientes residentes no estado de SP.
Resposta: SELECT cliente.NOME, cliente.ESTADO, venda.DUPLIC, venda.VALOR FROM cliente, venda WHERE (cliente.CODCLI = venda.CODCLI) AND (cliente.ESTADO = 'SP') ORDER BY cliente.NOME;.
4. Liste por junção os títulos em carteira do cliente MICROS INFORMATICA S/A.
Resposta: SELECT cliente.NOME, venda.DUPLIC, venda.VALOR FROM cliente, venda WHERE cliente.CODCLI = venda.CODCLI AND cliente.NOME = 'MICROS INFORMATICA S/A';.
5. Liste por junção os nomes de todos os clientes que possuam títulos com vencimento no mês de abril de qualquer ano.
Resposta: SELECT cliente.NOME FROM cliente, venda WHERE (cliente.CODCLI = venda.CODCLI) AND (MONTH(venda.VENCTO) = 4);.
6. Apresente por junção a quantidade de títulos por cliente para qualquer data de vencimento. Faça o agrupamento do nome de cliente.
Resposta: SELECT cliente.NOME, COUNT(*) FROM cliente, venda WHERE cliente.CODCLI = venda.CODCLI GROUP BY cliente.NOME;.
7. Apresente por junção a quantidade de títulos agrupados por ordem de ano para qualquer vencimento.
Resposta: SELECT YEAR(venda.VENCTO), COUNT(*) FROM cliente, venda WHERE cliente.CODCLI = venda. CODCLI GROUP BY YEAR(venda.VENCTO);.
8. Apresente por junção a quantidade de títulos agrupados por ordem de mês e ano para qualquer vencimento.
Resposta: SELECT MONTH(venda.VENCTO), YEAR(venda.VENCTO), COUNT(*) FROM cliente, venda WHERE cliente.CODCLI = venda. CODCLI GROUP BY YEAR(venda.VENCTO), MONTH(venda.VENCTO);.
9. Apresente por junção os nomes, os valores e as datas de vencimento dos títulos em atraso entre 1º de janeiro de 2000 e 31 de dezembro de 2003. Ordenar sem agrupamento a consulta por nome de cliente.
Resposta: SELECT cliente.NOME, venda.VALOR, venda.VENCTO FROM cliente, venda WHERE cliente.CODCLI = venda.CODCLI AND VENCTO BETWEEN '2000-01-01' AND '2003-12-31' ORDER BY cliente.NOME;.
Capítulo 8
1. O que é índice de uma tabela?
Resposta: O índice é uma estrutura de arquivo complementar que armazena o campo chave de uma determinada tabela e o local onde aquele campo é encontrado na tabela. Segundo Stephens & Plew (2003), “um índice em um banco de dados é muito semelhante ao índice na parte de trás de um livro”, ou seja, semelhante ao índice remissivo. No índice remissivo é possível localizar uma palavra-chave e a página em que se encontra o assunto relacionado àquela palavra-chave selecionada.
2. Como podem ser classificados os índices de uma tabela?
Resposta: Os índices de uma tabela podem ser classificados em simples, exclusivo e composto.
3. Descreva índice simples de tabela.
Resposta: O índice simples baseia-se na definição do valor de apenas uma coluna (campo).
4. Descreva índice exclusivo de tabela.
Resposta: O índice exclusivo baseia-se na definição de um valor que não pode ser repetido dentro da tabela.
5. Descreva índice composto de tabela.
Resposta: O índice composto baseia-se em valores de mais de uma coluna.
6. Qual é a sintaxe do comando de definição de um índice de tabela?
Resposta: CREATE [UNIQUE] INDEX <índice> ON <tabela (campos)>;
7. Qual é sintaxe do comando de remoção de um índice de tabela?
Resposta: DROP INDEX <índice> ON <tabela>;
8. Onde um índice deve ser evitado?
Resposta: Um índice deve ser evitado em tabelas pequenas ou em colunas (campos) que tenham um grande número de valores NULL. Deve-se também evitar o uso de índices em colunas que sofrem alto impacto de atualização, pois degrada a velocidade de acesso aos dados.
9. Qual é o motivo de utilizar um campo (coluna) de uma tabela como chave primária?
Resposta: O campo de chave primária é usado para evitar a duplicidade de registros.
10. O que é chave candidata?
Resposta: É o campo que armazena um determinado valor que poderia ser considerado campo de chave primária. Normalmente se utiliza um campo de chave candidata para armazenar valores como CPF e CNPJ, que são exclusivos para cada pessoa física ou jurídica e não podem ser repetidos para mais de uma entidade de registro.
11. O que é chave estrangeira?
Resposta: A chave estrangeira dá a possibilidade de estabelecer o relacionamento lógico de uma determinada tabela (em que se tem definido um campo-chave) com o campo de chave primária de outra tabela.
12. Quais formas de cardinalidade podem ser utilizadas com o programa Microsoft SQL Server 2005 Express Edition?
Resposta: Existem três formas de relacionamentos (cardinalidade) que podem ser utilizadas, sendo:
§ Relacionamento de 1 para 1;
§ Relacionamento de 1 para N ou de N para 1 quando for o caso;
§ Relacionamento de N para N.
13. O que é cardinalidade 1:1?
Resposta: O relacionamento de 1 para 1 (um para um) representado pela cardinalidade (1:1) é a relação de um campo-chave de um registro de uma determinada tabela vinculado com um campo-chave de um outro registro de outra tabela.
14. O que é cardinalidade 1:N ou N:1?
Resposta: O relacionamento de 1 para N (um para muitos) representado pela cardinalidade (1:N) é a relação de um campo-chave de um registro de uma determinada tabela vinculado com o campo-chave de muitos registros de outra tabela.
15. O que é cardinalidade N:N?
Resposta: O relacionamento de N para N (muitos para muitos) representado pela cardinalidade (N:N) é a relação de um campo-chave de muitos registros de uma determinada tabela vinculado com o campo-chave de muitos registros de outra tabela.
16. Qual cláusula se usa para definir chave estrangeira numa tabela Microsoft SQL Server 2005 Express Edition?
Resposta: Usa-se a cláusula FOREIGN KEY.
17. O uso de chave primária versus chave estrangeira é a mesma coisa que usar junções de tabelas?
Resposta: Os dois conceitos são muito diferentes. A relação chave primária versus chave estrangeira é realizada por vínculos explicitamente definidos entre os campos das tabelas envolvidas na relação. Já uma junção é uma relação estabelecida de forma lógica no momento de uma determinada consulta.
Strings de conexão para uso com .NET
String de conexão
As strings de conexão podem variar de acordo com o provedor e fabricante da base de dados.Segue abaixo as strings de conexão de acordo com os principais fabricantes
Sql Server
Segurança padrão
Data Source=myServerAddress;Initial Catalog=myDataBase;User Id=myUsername;Password=myPassword;Trusted Connection
Data Source=myServerAddress;Initial Catalog=myDataBase;Integrated Security=SSPI;Lembrando que no lugar de "myServerAddress" você pode incluir o endereço IP ao invés do nome, também pode incluir a porta.
Oracle - Usando .NET Framework Data Provider for Oracle
Padrão
Data Source=MyOracleDB;Integrated Security=yes;Especificando usuário e senha
Data Source=MyOracleDB;User Id=myUsername;Password=myPassword;Integrated Security=no;Omitindo TNSNAMES.ORA
SERVER=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=MyHost)(PORT=MyPort))(CONNECT_DATA=(SERVICE_NAME=MyOracleSID)));uid=myUsername;pwd=myPassword;Firebird - Usando Firebird ADO.NET Data Provider
Padrão
User=SYSDBA;Password=masterkey;Database=SampleDatabase.fdb;DataSource=localhost; Port=3050;Dialect=3; Charset=NONE;Role=;Connection lifetime=15;Pooling=true; MinPoolSize=0;MaxPoolSize=50;Packet Size=8192;ServerType=0;MySQL - Usando Connector/Net
Padrão
Server=myServerAddress;Database=myDataBase;Uid=myUsername;Pwd=myPassword;Port=3306Múltiplos servidores
Server=serverAddress1 & serverAddress2 & etc..;Database=myDataBase;Uid=myUsername;Pwd=myPassword;Postgres - Usando Npgsql
Padrão
Server=127.0.0.1;Port=5432;Database=myDataBase;User Id=myUsername;Password=myPassword;Usando Trusted Connection
Server=127.0.0.1;Port=5432;Database=myDataBase;Integrated Security=true;Usando SSL
Server=127.0.0.1;Port=5432;Database=myDataBase;Userid=myUsername;Password=myPassword; Protocol=3;SSL=true;SslMode=Require;DB2 - Usando DB2 .NET Data Provider
Padrão
Server=myAddress:myPortNumber;Database=myDataBase;UID=myUsername;PWD=myPassword;Especificando o Schema
Server=myAddress:myPortNumber;Database=myDataBase;UID=myUsername;PWD=myPassword; CurrentSchema=mySchema;Esse foi um breve resumo de strings de conexão dos principais fabricantes do mercado, porém há centenas deles que não pude tratar nesse artigo. Se você não encontrou a sua aqui aconselho você acessar o site http://www.connectionstrings.com, lá existem strings de conexão para praticamente todas as bases disponíveis atualmente e vale a pena dar uma conferida.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Procedure Dinânimca (Select,Sum) com sum valor total da coluna.
USE [TESTE]
GO
/****** Object: StoredProcedure [dbo].[LoteSomaAtendimento] Script Date: 10/05/2011 22:17:15 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[LoteSomaAtendimento]
@dt1 date,
@dt2 date,
@id_convenio int,
@id_terapeuta int,
@paciente varchar(50),
@status varchar(50),
@id_lote int
AS
SELECT [id_lote],[numero_protocolo],[data],[datahora_recebimento],[percentual],
(SELECT SUM(totalgeraldaguia) from ATENDIMENTOSNOVO where id_lote=LT.id_Lote) as total
FROM dbo.LOTE LT WHERE id_convenio=@id_convenio AND id_lote=@id_lote AND status=@status AND
id_terapeuta=@id_terapeuta AND paciente=@paciente AND datahora_recebimento between @dt1 AND
@dt2 ORDER BY data desc, datahora_recebimento desc
return
Função ajuda extrair caracteres(-,/, ...) telefones, CNPJ, Data entre outros. sem precisar ficar utilizando os Replace. Rodamos esse script no banco. Logo abaixo segue exemplo de como utilizar
CREATE FUNCTION ExtractDigits
(
@inVal VARCHAR(50) ,
@EliminateLeadingZeroes TINYINT
)
RETURNS VARCHAR(50)
AS
BEGIN
DECLARE @outVal VARCHAR(50)
SET @outVal = ''
DECLARE @C CHAR(1)
WHILE LEN(@Inval) > 0
BEGIN
SET @C = LEFT(@InVal, 1)
SET @InVal = SUBSTRING(@InVal, 2, LEN(@InVal) - 1)
IF @C BETWEEN '0' AND '9'
SET @outVal = @outVal + @C
END
IF @EliminateLeadingZeroes = 1
WHILE LEFT(@outVal, 1) = '0'
SET @OutVal = SUBSTRING(@OutVal, 2, LEN(@outVal) - 1)
RETURN @OutVal
END
Segue um exemplo de como podemos utilizar:
SELECT
dbo.ExtractDigits(
LEFT(
CASE WHEN FONE_RESIDENCIAL IS NOT NULL THEN FONE_RESIDENCIAL
WHEN FONE_COMERCIAL IS NOT NULL THEN FONE_COMERCIAL
WHEN FONE_CELULAR IS NOT NULL THEN FONE_CELULAR
ELSE ''
END
, 8)
0) as dsTelefone
FROM TABLE