SQL Histórico Structured Query Language (SQL) Foi desenvolvido pela IBM em meados dos anos 70 como uma linguagem de manipulação de dados (DML - Data Manipulation Language) para suas primeiras tentativas de desenvolvimento de bancos de dados relacionais. Histórico O SQL tornou-se de fato o padrão depois de 1986, quando o American National Standards Institute (ANSI), a organização responsável pelos padrões industriais nos Estados Unidos, endossou o SQL como linguagem padrão para os bancos de dados relacionais. Histórico Desde então atualizações; o SQL vem sofrendo já sofreu duas atualizações oficiais: em 1989; em 1992: esse é o usado atualmente mas ainda sofre atualizações, para se adequar as últimas versões de banco de dados relacionais lançadas no mercado. Histórico SQL3 Padrão aprovado em 1999; Versão da linguagem orientada a objetos; SGBDs comerciais oferecem parte da SQL3; Falta de padronização. O que é SQL O SGBD Banco de linguagem acesso aos (Sistema Gerenciador de Dados) necessita de uma que permita aos usuários dados. SQL (Structured Query Language) é a linguagem de consulta adotada pela maioria dos SGBDs relacionais. Características do SQL Linguagem English-like Processa conjunto de registros (tabelas) ao invés de registros individuais Padronizada Fornece comandos para uma série de tarefas, como: Recuperação de dados; Inclusão, atualização e exclusão de registros; Criar, modificar e excluir objetos do banco; Etc. Comandos SQL Comandos SQL Comandos DDL (Data Definition Language) Usados para construir e modificar estruturas de tabelas e outros objetos no BD. Têm efeito imediato. Comandos DML(Data Manipulation Language) Usados para trabalhar com os dados nas tabelas. Necessitam de um “COMMIT” para sua confirmação. Construções básicas Comando SELECT Recupera informações do banco de dados Sintaxe: SELECT lista_de_colunas FROM lista_de_tabelas WHERE condições GROUP BY agrupamento *** ORDER BY ordenação_para_apresentação Construções básicas Exemplo: SELECT nome FROM Departamentos; ou SELECT * FROM Departamentos; * =>Seleção de todas os campos (ou colunas) da tabela de Departamentos Construções básicas Distinct Elimina duplicidades, significando que somente relações distintas serão apresentadas como resultado de uma pesquisa. Exemplo SELECT DISTINCT nome FROM Empregado; Construções básicas TOP n Seleciona um número específico de registros. Exemplo SELECT TOP 10 * FROM Cidade; Funções Agregadas (ou de Agrupamento) Função Retorno Avg(n) Média do valor n, ignorando nulos Count(expr) Max(expr) Vezes que o número da expr avalia para algo não nulo Maior valor da exp Min(expr) Menor valor da expr Sum(n) Soma dos valores de n, ignorando nulos Construções básicas Select AVG (salarios) From Funcionario Select Count (codigoPessoa) From Pessoa Select MAX (dataInclusao) FROM Pessoa Select MIN (dataInclusao) FROM Pessoa Select SUM (salarios) FROM Funcionario Construções básicas Cláusula WHERE Usada para selecionar as linhas para consultar ou alterar. Se omitida, todas as linhas da tabela serão submetidas à ação referente ao comando em questão. Exemplo: SELECT nome FROM Pessoa WHERE idade >= 10; Construções básicas Você pode fazer condições compostas com AND, OR ou NOT. SELECT nome FROM empregados (AND) WHERE (nome = ‘JOSE’ AND salario = 20) (OR) WHERE (salario = 10 OR salario = 20) (NOT) WHERE (nome IS NOT NULL) Operadores lógicos Operador Significado = Igual a > Maior que >= Maior que ou igual a < Menor que <= Menor que ou igual a Construções básicas Você pode fazer condições compostas com like, between ou is null. SELECT nome FROM empregados (like) WHERE (nome like ‘%JOSE%’) (between) WHERE (salario between 10 and 100) (is null) WHERE (nome is null) % => independente, qualquer coisa Demais Operadores Operador Significado Between...and... Entre dois valores (inclusive) In (...) Lista de valores Like Com padrão de caracteres Is null É um valor nulo Operadores Negativos Operador Significado <> Diferente Not nome coluna= Diferente da coluna Not nome coluna> Não maior que Not between Não entre dois valores informados Not in Não existente numa dada lista de valores Not like Diferente do padrão de caracteres informado Is not null Não é um valor nulo Construções básicas Cláusula Group By Realiza o agrupamento por uma coluna da tabela SELECT nomeFuncionario, nomeDepartamento FROM Empregado GROUP BY nomeDepartamento; Construções básicas Cláusula Order By Modifica a ordem de apresentação do resultado da pesquisa (ascendente ou descendente). SELECT nome, dataNascimento FROM Empregado ORDER BY nome ASC; *** ASC – Ascendente *** DESC – Descendente Construções básicas Junção de Tabelas Join O uso da operação JOIN numa cláusula FROM especifica como se deseja que as tabelas sejam vinculadas. Use INNER JOIN para associar somente os tuplas coincidentes de ambas as tabelas. O OUTER JOIN liga as linhas de tabelas, mas não necessariamente precisam casar entre si. Desta forma, mesmo as linhas que não se encontrou referência no cruzamento das tabelas aparecerá no Resultado de Dados. Existem tipos de OUTER JOIN: Construções básicas LEFT JOIN usado para associar todas as tuplas da primeira tabela com apenas as coincidentes na segunda tabela. O Access retorna com valor nulo para as tuplas que não coincidem na segunda tabela. RIGHT JOIN usado para associar todas as tuplas da segunda tabela com apenas as coincidentes na primeira tabela Construções básicas SELECT nome_da_tabela1.nome_do_campo, nome_da_tabela2.nome_do_campo FROM nome_da_tabela1 inner join nome_da_tabela2 on nome_da_tabela1.nome_da_chaveprimaria1= nome_da_tabela2.nome_da_chave_estrangeira Construções básicas SELECT Nome_Tabela.nome_campo FROM Tabela1 LEFT OUTER JOIN Tabela2 ON Tabela1.chave_primaria = Tabela2.chave_estrangeira SELECT Nome_Tabela.nome_campo FROM Tabela1 RIGHT OUTER JOIN Tabela2 ON Tabela1.chave_primaria = Tabela2.chave_estrangeira Construções básicas Um comando SELECT também pode fazer uma consulta que traz dados de duas ou mais tabelas. SELECT nome_da_tabela1.nome_do_campo, nome_da_tabela2.nome_do_campo FROM nome_da_tabela1, nome_da_tabela2 WHERE nome_da_tabela1.nome_da_chaveprimaria1= nome_da_tabela2.nome_da_chave_estrangeira Construções básicas Comando INSERT Permite adicionar linhas à uma tabela Sintaxe INSERT INTO [(coluna1, ..., colunaN)] VALUES (<value1>, ..., <valueN>); Exemplo INSERT INTO Pessoa (rg, nome, sexo) VALUES (435442829, ‘João’, ‘M’); Construções básicas Comando UPDATE Permite a alteração de valores de uma tabela Sintaxe: UPDATE <tabela> SET <coluna> [ ..., colunaN]= <expressão> WHERE <condição>; Exemplo: UPDATE Pessoa SET nome=‘José’ WHERE rg=435442829; Construções básicas Comando DELETE Remove linhas de uma tabela Sintaxe: DELETE FROM <tabela> WHERE <condição>; Exemplo: DELETE FROM Pessoa WHERE rg=435442829; Tipos de dados TINYINT: Valores numéricos inteiros variando de 0 até 256 SMALLINT: Valores numéricos inteiros variando de –32.768 até 32.767 INT: Valores numéricos 2.147.483.647 inteiros variando de -2.147.483.648 até BIT: Somente pode assumir os valores 0 ou 1. Utilizado para armazenar valores lógicos DECIMAL(I,D) e NUMERIC(I,D): Armazenam valores numéricos inteiros com casas decimais utilizando precisão. I deve ser substituído pela quantidade de dígitos total do número e D deve ser substituído pela quantidade de dígitos da parte decimal (após a vírgula) SMALLMONEY: Valores numéricos decimais variando de -214.748,3648 até 214.748,3647 Tipos de dados MONEY: Valores numéricos decimais variando 922.337.203.685.477,5808 até 922.337.203.685.477,5807 de - REAL: Valores numéricos aproximados com precisão de ponto flutuante, indo de -3.40E + 38 até 3.40E + 38 FLOAT: Valores numéricos aproximados flutuante, indo de -1.79E + 308 até 1.79E + 308 com precisão de ponto SMALLDATETIME: Armazena hora e data variando de 1 de janeiro de 1900 até 6 de junho de 2079. A precisão de hora é armazenada até os segundos. DATETIME: Armazena hora e data variando de 1 de janeiro de 1753 até 31 de Dezembro de 9999. A precisão de hora é armazenada até os centésimos de segundos Tipos de dados CHAR(N): Armazena N caracteres fixos (até 8.000) no formato não Unicode. Se a quantidade de caracteres armazenada no campo for menor que o tamanho total especificado em N, o resto do campo é preenchido com espaços em branco VARCHAR(N): Armazena N caracteres (até 8.000) no formato não Unicode. Se a quantidade de caracteres armazenada no campo for menor que o tamanho total especificado em N, o resto do campo não é preenchido TEXT: Armazena caracteres (até 2.147.483.647) no formato não Unicode. Se a quantidade de caracteres armazenada no campo for menor que 2.147.483.647, o resto do campo não é preenchido. Procure não utilizar este tipo de dado diretamente, pois existem funções específicas para trabalhar com este tipo de dado Tipos de dados NCHAR(N): Armazena N caracteres fixos (até 4.000) no formato Unicode. Se a quantidade de caracteres armazenada no campo for menor que o tamanho total especificado em N, o resto do campo é preenchido com espaços em branco NVARCHAR(N): Armazena N caracteres (até 4.000) no formato Unicode. Se a quantidade de caracteres armazenada no campo for menor que o tamanho total especificado em N, o resto do campo não é preenchido NTEXT: Armazena caracteres (até 1.073.741.823) no formato Unicode. Se a quantidade de caracteres armazenada no campo for menor que 1.073.741.823, o resto do campo não é preenchido. Procure não utilizar este tipo de dado diretamente, pois existem funções específicas para trabalhar com este tipo de dado Criando tabelas Uma tabela pode ser criada com o comando Create Table CREATE TABLE Cliente1 ( CodCliente int NOT NULL, Nome varchar(50), CPF varchar(11) NULL, DataCadastro datetime NOT NULL DEFAULT (getdate()), Cidade varchar(20) NULL, UF char(2) NULL, País varchar(20) DEFAULT ('Brasil') ) ** NOT NULL (Campo não pode ser nulo) ** NULL (Campo pode ser nulo) ** DEFAULT (Valor padrão para campo caso o mesmo não seja informado)