SQL - Guia Rápido

SQL é uma linguagem para operar bancos de dados; inclui criação de banco de dados, exclusão, busca de linhas, modificação de linhas, etc. SQL é umANSI (American National Standards Institute) linguagem padrão, mas existem muitas versões diferentes da linguagem SQL.

O que é SQL?

SQL é Structured Query Language, que é uma linguagem de computador para armazenar, manipular e recuperar dados armazenados em um banco de dados relacional.

SQL é a linguagem padrão para o Relational Database System. Todos os sistemas de gerenciamento de banco de dados relacional (RDMS) como MySQL, MS Access, Oracle, Sybase, Informix, Postgres e SQL Server usam SQL como linguagem de banco de dados padrão.

Além disso, eles estão usando dialetos diferentes, como -

  • MS SQL Server usando T-SQL,
  • Oracle usando PL / SQL,
  • A versão MS Access do SQL é chamada de JET SQL (formato nativo) etc.

Por que SQL?

SQL é amplamente popular porque oferece as seguintes vantagens -

  • Permite que os usuários acessem dados nos sistemas de gerenciamento de banco de dados relacional.

  • Permite que os usuários descrevam os dados.

  • Permite que os usuários definam os dados em um banco de dados e manipulem esses dados.

  • Permite incorporar em outras linguagens usando módulos SQL, bibliotecas e pré-compiladores.

  • Permite que os usuários criem e eliminem bancos de dados e tabelas.

  • Permite aos usuários criar visão, procedimento armazenado, funções em um banco de dados.

  • Permite que os usuários definam permissões em tabelas, procedimentos e visualizações.

Uma breve história do SQL

  • 1970- Dr. Edgar F. "Ted" Codd, da IBM, é conhecido como o pai dos bancos de dados relacionais. Ele descreveu um modelo relacional para bancos de dados.

  • 1974 - Apareceu a Structured Query Language.

  • 1978 - A IBM trabalhou para desenvolver as idéias de Codd e lançou um produto chamado System / R.

  • 1986- A IBM desenvolveu o primeiro protótipo de banco de dados relacional e padronizado por ANSI. O primeiro banco de dados relacional foi lançado pela Relational Software, que mais tarde veio a ser conhecida como Oracle.

Processo SQL

Quando você está executando um comando SQL para qualquer RDBMS, o sistema determina a melhor maneira de realizar sua solicitação e o mecanismo SQL descobre como interpretar a tarefa.

Existem vários componentes incluídos neste processo.

Esses componentes são -

  • Consultar despachante
  • Mecanismos de Otimização
  • Motor de consulta clássico
  • SQL Query Engine, etc.

Um mecanismo de consulta clássico lida com todas as consultas não SQL, mas um mecanismo de consulta SQL não lida com arquivos lógicos.

A seguir está um diagrama simples que mostra a arquitetura SQL -

Comandos SQL

Os comandos SQL padrão para interagir com bancos de dados relacionais são CREATE, SELECT, INSERT, UPDATE, DELETE e DROP. Esses comandos podem ser classificados nos seguintes grupos com base em sua natureza -

DDL - linguagem de definição de dados

Sr. Não. Comando e Descrição
1

CREATE

Cria uma nova tabela, uma visão de uma tabela ou outro objeto no banco de dados.

2

ALTER

Modifica um objeto de banco de dados existente, como uma tabela.

3

DROP

Exclui uma tabela inteira, uma visão de uma tabela ou outros objetos no banco de dados.

DML - linguagem de manipulação de dados

Sr. Não. Comando e Descrição
1

SELECT

Recupera certos registros de uma ou mais tabelas.

2

INSERT

Cria um registro.

3

UPDATE

Modifica registros.

4

DELETE

Exclui registros.

DCL - Linguagem de Controle de Dados

Sr. Não. Comando e Descrição
1

GRANT

Dá um privilégio ao usuário.

2

REVOKE

Recupera os privilégios concedidos pelo usuário.

O que é RDBMS?

RDBMS significa Relacional Database Mcompromisso Ssistema. O RDBMS é a base do SQL e de todos os sistemas de banco de dados modernos como MS SQL Server, IBM DB2, Oracle, MySQL e Microsoft Access.

Um sistema de gerenciamento de banco de dados relacional (RDBMS) é um sistema de gerenciamento de banco de dados (DBMS) que se baseia no modelo relacional introduzido por EF Codd.

O que é uma mesa?

Os dados em um RDBMS são armazenados em objetos de banco de dados que são chamados de tables. Esta tabela é basicamente uma coleção de entradas de dados relacionadas e consiste em várias colunas e linhas.

Lembre-se de que uma tabela é a forma mais comum e simples de armazenamento de dados em um banco de dados relacional. O programa a seguir é um exemplo de uma tabela CLIENTES -

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

O que é um campo?

Cada tabela é dividida em entidades menores chamadas campos. Os campos da tabela CLIENTES consistem em ID, NOME, IDADE, ENDEREÇO ​​e SALÁRIO.

Um campo é uma coluna em uma tabela projetada para manter informações específicas sobre cada registro na tabela.

O que é um registro ou uma linha?

Um registro também é chamado de linha de dados para cada entrada individual existente em uma tabela. Por exemplo, existem 7 registros na tabela CUSTOMERS acima. A seguir está uma única linha de dados ou registro na tabela CLIENTES -

+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
+----+----------+-----+-----------+----------+

Um registro é uma entidade horizontal em uma tabela.

O que é uma coluna?

Uma coluna é uma entidade vertical em uma tabela que contém todas as informações associadas a um campo específico em uma tabela.

Por exemplo, uma coluna na tabela CUSTOMERS é ADDRESS, que representa a descrição do local e seria como mostrado abaixo -

+-----------+
| ADDRESS   |
+-----------+
| Ahmedabad |
| Delhi     |
| Kota      |
| Mumbai    |
| Bhopal    |
| MP        |
| Indore    |
+----+------+

O que é um valor NULL?

Um valor NULL em uma tabela é um valor em um campo que parece estar em branco, o que significa que um campo com um valor NULL é um campo sem valor.

É muito importante entender que um valor NULL é diferente de um valor zero ou de um campo que contém espaços. Um campo com valor NULL é aquele que foi deixado em branco durante a criação de um registro.

Restrições SQL

As restrições são as regras aplicadas às colunas de dados de uma tabela. Eles são usados ​​para limitar o tipo de dados que podem entrar em uma tabela. Isso garante a precisão e confiabilidade dos dados no banco de dados.

As restrições podem ser no nível da coluna ou no nível da tabela. As restrições de nível de coluna são aplicadas apenas a uma coluna, enquanto as restrições de nível de tabela são aplicadas a toda a tabela.

A seguir estão algumas das restrições mais comumente usadas disponíveis em SQL -

  • Restrição NOT NULL - Garante que uma coluna não pode ter um valor NULL.

  • Restrição DEFAULT - fornece um valor padrão para uma coluna quando nenhum é especificado.

  • Restrição UNIQUE - Garante que todos os valores em uma coluna sejam diferentes.

  • Chave PRIMÁRIA - Identifica exclusivamente cada linha / registro em uma tabela de banco de dados.

  • Chave FOREIGN - Identifica exclusivamente uma linha / registro em qualquer outra tabela do banco de dados.

  • Restrição CHECK - A restrição CHECK garante que todos os valores em uma coluna satisfaçam certas condições.

  • INDEX - Usado para criar e recuperar dados do banco de dados muito rapidamente.

Integridade de dados

As seguintes categorias de integridade de dados existem com cada RDBMS -

  • Entity Integrity − Não há linhas duplicadas em uma tabela.

  • Domain Integrity − Impõe entradas válidas para uma determinada coluna, restringindo o tipo, o formato ou o intervalo de valores.

  • Referential integrity − As linhas não podem ser excluídas, que são usadas por outros registros.

  • User-Defined Integrity − Aplica algumas regras de negócios específicas que não se enquadram na entidade, domínio ou integridade referencial.

Normalização de banco de dados

A normalização do banco de dados é o processo de organização eficiente dos dados em um banco de dados. Existem duas razões para este processo de normalização -

  • Eliminar dados redundantes, por exemplo, armazenar os mesmos dados em mais de uma tabela.

  • Garantir que as dependências de dados façam sentido.

Ambos os motivos são objetivos valiosos, pois reduzem a quantidade de espaço que um banco de dados consome e garantem que os dados sejam armazenados de forma lógica. A normalização consiste em uma série de diretrizes que ajudam a orientá-lo na criação de uma boa estrutura de banco de dados.

As diretrizes de normalização são divididas em formas normais; pense em um formulário como o formato ou a maneira como uma estrutura de banco de dados é apresentada. O objetivo dos formulários normais é organizar a estrutura do banco de dados, de modo que ela esteja de acordo com as regras da primeira forma normal, depois da segunda forma normal e, finalmente, da terceira forma normal.

É sua escolha ir mais longe e ir para a quarta forma normal, quinta forma normal e assim por diante, mas em geral, a terceira forma normal é mais do que suficiente.

  • Primeira forma normal (1NF)
  • Segunda forma normal (2NF)
  • Terceira forma normal (3NF)

Existem muitos RDBMS populares disponíveis para trabalhar. Este tutorial fornece uma breve visão geral de alguns dos RDBMSs mais populares. Isso ajudaria você a comparar seus recursos básicos.

MySQL

MySQL é um banco de dados SQL de código aberto, desenvolvido por uma empresa sueca - MySQL AB. MySQL é pronunciado como "my ess-que-ell", em contraste com SQL, pronunciado "sequel".

O MySQL oferece suporte a muitas plataformas diferentes, incluindo Microsoft Windows, as principais distribuições de Linux, UNIX e Mac OS X.

O MySQL tem versões gratuitas e pagas, dependendo de seu uso (não comercial / comercial) e recursos. O MySQL vem com um servidor de banco de dados SQL muito rápido, multi-threaded, multiusuário e robusto.

História

  • Desenvolvimento do MySQL por Michael Widenius & David Axmark começando em 1994.

  • Liberação interna pela primeira vez em 23 rd Maio de 1995.

  • Versão do Windows foi lançado em 8 th Janeiro de 1998 para Windows 95 e NT.

  • Versão 3.23: beta de junho de 2000, lançamento de produção em janeiro de 2001.

  • Versão 4.0: beta de agosto de 2002, lançamento de produção em março de 2003 (sindicatos).

  • Versão 4.1: beta de junho de 2004, lançamento de produção em outubro de 2004.

  • Versão 5.0: beta de março de 2005, lançamento de produção em outubro de 2005.

  • Sun Microsystems adquiriu a MySQL AB em 26 th Fevereiro de 2008.

  • Versão 5.1: versão de produção 27 th novembro de 2008.

Características

  • Alta performance.
  • Alta disponibilidade.
  • Escalabilidade e flexibilidade Execute qualquer coisa.
  • Suporte transacional robusto.
  • Pontos fortes da Web e do data warehouse.
  • Proteção forte de dados.
  • Desenvolvimento abrangente de aplicativos.
  • Facilidade de gerenciamento.
  • Liberdade de código aberto e suporte 24 horas por dia, 7 dias por semana.
  • Menor custo total de propriedade.

MS SQL Server

MS SQL Server é um sistema de gerenciamento de banco de dados relacional desenvolvido pela Microsoft Inc. Suas principais linguagens de consulta são -

  • T-SQL
  • ANSI SQL

História

  • 1987 - Sybase lança o SQL Server para UNIX.

  • 1988 - Microsoft, Sybase e Aston-Tate portam SQL Server para OS / 2.

  • 1989 - Microsoft, Sybase e Aston-Tate lançam SQL Server 1.0 para OS / 2.

  • 1990 - o SQL Server 1.1 é lançado com suporte para clientes Windows 3.0.

  • Aston-Tate sai do desenvolvimento do SQL Server.

  • 2000 - A Microsoft lança o SQL Server 2000.

  • 2001 - Microsoft lança XML para SQL Server Web Release 1 (download).

  • 2002 - A Microsoft lança o SQLXML 2.0 (renomeado de XML para SQL Server).

  • 2002 - A Microsoft lança o SQLXML 3.0.

  • 2005 - A Microsoft lança o SQL Server 2005 em 7 de novembro de 2005.

Características

  • Alta performance
  • Alta disponibilidade
  • Espelhamento de banco de dados
  • Instantâneos de banco de dados
  • Integração CLR
  • Agente de Serviços
  • Gatilhos DDL
  • Funções de classificação
  • Níveis de isolamento baseados em versão de linha
  • Integração XML
  • TRY...CATCH
  • Database Mail

ORÁCULO

É um sistema de gerenciamento de banco de dados multiusuário muito grande. Oracle é um sistema de gerenciamento de banco de dados relacional desenvolvido pela 'Oracle Corporation'.

A Oracle trabalha para gerenciar de forma eficiente seus recursos, um banco de dados de informações entre os múltiplos clientes solicitando e enviando dados na rede.

É uma excelente escolha de servidor de banco de dados para computação cliente / servidor. A Oracle oferece suporte a todos os principais sistemas operacionais para clientes e servidores, incluindo MSDOS, NetWare, UnixWare, OS / 2 e a maioria dos tipos de UNIX.

História

A Oracle começou em 1977 e comemorando seus 32 anos maravilhosos no setor (de 1977 a 2009).

  • 1977 - Larry Ellison, Bob Miner e Ed Oates fundaram Laboratórios de Desenvolvimento de Software para realizar o trabalho de desenvolvimento.

  • 1979 - A versão 2.0 do Oracle foi lançada e tornou-se o primeiro banco de dados relacional comercial e o primeiro banco de dados SQL. A empresa mudou seu nome para Relational Software Inc. (RSI).

  • 1981 - RSI começa a desenvolver ferramentas para Oracle.

  • 1982 - RSI foi renomeado para Oracle Corporation.

  • 1983 - a Oracle lançou a versão 3.0, reescrita em linguagem C e executada em várias plataformas.

  • 1984 - o Oracle versão 4.0 foi lançado. Ele continha recursos como controle de simultaneidade - consistência de leitura de várias versões, etc.

  • 1985 - o Oracle versão 4.0 foi lançado. Ele continha recursos como controle de simultaneidade - consistência de leitura de várias versões, etc.

  • 2007 - a Oracle lançou o Oracle11g. A nova versão focada em melhor particionamento, fácil migração, etc.

Características

  • Concurrency
  • Consistência de leitura
  • Mecanismos de bloqueio
  • Banco de dados quiesce
  • Portability
  • Banco de dados de autogerenciamento
  • SQL*Plus
  • ASM
  • Scheduler
  • Gerente de Recursos
  • Armazenamento de dados
  • Vistas materializadas
  • Índices de bitmap
  • Compressão de mesa
  • Execução Paralela
  • SQL analítico
  • Mineração de dados
  • Partitioning

ACESSO MS

Este é um dos produtos mais populares da Microsoft. O Microsoft Access é um software de gerenciamento de banco de dados de nível básico. O banco de dados MS Access não é apenas barato, mas também um banco de dados poderoso para projetos de pequena escala.

O MS Access usa o mecanismo de banco de dados Jet, que utiliza um dialeto de linguagem SQL específico (às vezes chamado de Jet SQL).

O MS Access vem com a edição profissional do pacote MS Office. O MS Access possui interface gráfica intuitiva e fácil de usar.

  • 1992 - o Access versão 1.0 foi lançado.

  • 1993 - Access 1.1 lançado para melhorar a compatibilidade com a inclusão da linguagem de programação Access Basic.

  • A transição mais significativa foi do Access 97 para o Access 2000.

  • 2007 - Access 2007, um novo formato de banco de dados foi introduzido ACCDB que oferece suporte a tipos de dados complexos, como campos de vários valores e anexos.

Características

  • Os usuários podem criar tabelas, consultas, formulários e relatórios e conectá-los com macros.

  • Opção de importar e exportar os dados para vários formatos incluindo Excel, Outlook, ASCII, dBase, Paradox, FoxPro, SQL Server, Oracle, ODBC, etc.

  • Há também o formato Jet Database (MDB ou ACCDB no Access 2007), que pode conter o aplicativo e os dados em um arquivo. Isso torna muito conveniente distribuir o aplicativo inteiro para outro usuário, que pode executá-lo em ambientes desconectados.

  • O Microsoft Access oferece consultas parametrizadas. Essas consultas e tabelas de acesso podem ser referenciadas a partir de outros programas como VB6 e .NET por meio de DAO ou ADO.

  • As edições de desktop do Microsoft SQL Server podem ser usadas com o Access como uma alternativa ao Jet Database Engine.

  • O Microsoft Access é um banco de dados baseado em servidor de arquivos. Ao contrário dos sistemas de gerenciamento de banco de dados relacional cliente-servidor (RDBMS), o Microsoft Access não implementa gatilhos de banco de dados, procedimentos armazenados ou registro de transações.

SQL - Sintaxe

O SQL é seguido por um conjunto exclusivo de regras e diretrizes denominado Sintaxe. Este tutorial fornece um início rápido com SQL, listando toda a sintaxe SQL básica.

Todas as instruções SQL começam com qualquer uma das palavras-chave como SELECT, INSERT, UPDATE, DELETE, ALTER, DROP, CREATE, USE, SHOW e todas as instruções terminam com um ponto e vírgula (;).

O ponto mais importante a ser observado aqui é que o SQL não faz distinção entre maiúsculas e minúsculas, o que significa que SELECT e select têm o mesmo significado nas instruções SQL. Visto que o MySQL faz diferença nos nomes das tabelas. Portanto, se você estiver trabalhando com MySQL, será necessário fornecer nomes de tabelas conforme existem no banco de dados.

Várias sintaxes em SQL

Todos os exemplos fornecidos neste tutorial foram testados com um servidor MySQL.

Instrução SQL SELECT

SELECT column1, column2....columnN
FROM   table_name;

Cláusula SQL DISTINCT

SELECT DISTINCT column1, column2....columnN
FROM   table_name;

Cláusula SQL WHERE

SELECT column1, column2....columnN
FROM   table_name
WHERE  CONDITION;

Cláusula SQL AND / OR

SELECT column1, column2....columnN
FROM   table_name
WHERE  CONDITION-1 {AND|OR} CONDITION-2;

Cláusula SQL IN

SELECT column1, column2....columnN
FROM   table_name
WHERE  column_name IN (val-1, val-2,...val-N);

Cláusula SQL BETWEEN

SELECT column1, column2....columnN
FROM   table_name
WHERE  column_name BETWEEN val-1 AND val-2;

Cláusula SQL LIKE

SELECT column1, column2....columnN
FROM   table_name
WHERE  column_name LIKE { PATTERN };

Cláusula SQL ORDER BY

SELECT column1, column2....columnN
FROM   table_name
WHERE  CONDITION
ORDER BY column_name {ASC|DESC};

Cláusula SQL GROUP BY

SELECT SUM(column_name)
FROM   table_name
WHERE  CONDITION
GROUP BY column_name;

Cláusula SQL COUNT

SELECT COUNT(column_name)
FROM   table_name
WHERE  CONDITION;

Cláusula SQL HAVING

SELECT SUM(column_name)
FROM   table_name
WHERE  CONDITION
GROUP BY column_name
HAVING (arithematic function condition);

Instrução SQL CREATE TABLE

CREATE TABLE table_name(
column1 datatype,
column2 datatype,
column3 datatype,
.....
columnN datatype,
PRIMARY KEY( one or more columns )
);

Instrução SQL DROP TABLE

DROP TABLE table_name;

Instrução SQL CREATE INDEX

CREATE UNIQUE INDEX index_name
ON table_name ( column1, column2,...columnN);

Instrução SQL DROP INDEX

ALTER TABLE table_name
DROP INDEX index_name;

Instrução SQL DESC

DESC table_name;

Instrução SQL TRUNCATE TABLE

TRUNCATE TABLE table_name;

Instrução SQL ALTER TABLE

ALTER TABLE table_name {ADD|DROP|MODIFY} column_name {data_ype};

Instrução SQL ALTER TABLE (Renomear)

ALTER TABLE table_name RENAME TO new_table_name;

Instrução SQL INSERT INTO

INSERT INTO table_name( column1, column2....columnN)
VALUES ( value1, value2....valueN);

Instrução SQL UPDATE

UPDATE table_name
SET column1 = value1, column2 = value2....columnN=valueN
[ WHERE  CONDITION ];

Instrução SQL DELETE

DELETE FROM table_name
WHERE  {CONDITION};

Instrução SQL CREATE DATABASE

CREATE DATABASE database_name;

Instrução SQL DROP DATABASE

DROP DATABASE database_name;

Instrução SQL USE

USE database_name;

Instrução SQL COMMIT

COMMIT;

Instrução SQL ROLLBACK

ROLLBACK;

SQL - Tipos de dados

Tipo de dados SQL é um atributo que especifica o tipo de dados de qualquer objeto. Cada coluna, variável e expressão possui um tipo de dados relacionado em SQL. Você pode usar esses tipos de dados ao criar suas tabelas. Você pode escolher um tipo de dados para uma coluna da tabela com base em seus requisitos.

O SQL Server oferece seis categorias de tipos de dados para seu uso, listados abaixo -

Tipos de dados numéricos exatos

TIPO DE DADOS DE PARA
bigint -9.223.372.036.854.775.808 9.223.372.036.854.775.807
int -2.147.483.648 2.147.483.647
smallint -32.768 32.767
tinyint 0 255
mordeu 0 1
decimal -10 ^ 38 +1 10 ^ 38 -1
numérico -10 ^ 38 +1 10 ^ 38 -1
dinheiro -922.337.203.685.477.5808 +922.337.203.685.477.5807
dinheirinho -214.748,3648 +214.748.3647

Tipos de dados numéricos aproximados

TIPO DE DADOS DE PARA
flutuador -1,79E + 308 1,79E + 308
real -3,40E + 38 3,40E + 38

Tipos de dados de data e hora

TIPO DE DADOS DE PARA
data hora 1º de janeiro de 1753 31 de dezembro de 9999
smalldatetime 1º de janeiro de 1900 6 de junho de 2079
encontro Armazena uma data como 30 de junho de 1991
Tempo Armazena uma hora do dia como 12h30

Note - Aqui, datetime tem precisão de 3,33 milissegundos, enquanto smalldatetime tem precisão de 1 minuto.

Tipos de dados de strings de caracteres

Sr. Não. TIPO DE DADOS e descrição
1

char

Comprimento máximo de 8.000 caracteres (caracteres não Unicode de comprimento fixo)

2

varchar

Máximo de 8.000 caracteres (dados não Unicode de comprimento variável).

3

varchar(max)

Comprimento máximo de 2E + 31 caracteres, dados não Unicode de comprimento variável (somente SQL Server 2005).

4

text

Dados não Unicode de comprimento variável com comprimento máximo de 2.147.483.647 caracteres.

Tipos de dados de strings de caracteres Unicode

Sr. Não. TIPO DE DADOS e descrição
1

nchar

Comprimento máximo de 4.000 caracteres. (Unicode de comprimento fixo)

2

nvarchar

Comprimento máximo de 4.000 caracteres. (Unicode de comprimento variável)

3

nvarchar(max)

Comprimento máximo de 2E + 31 caracteres (somente SQL Server 2005). (Unicode de comprimento variável)

4

ntext

Comprimento máximo de 1.073.741.823 caracteres. (Unicode de comprimento variável)

Tipos de dados binários

Sr. Não. TIPO DE DADOS e descrição
1

binary

Comprimento máximo de 8.000 bytes (dados binários de comprimento fixo)

2

varbinary

Comprimento máximo de 8.000 bytes. (Dados binários de comprimento variável)

3

varbinary(max)

Comprimento máximo de 2E + 31 bytes (somente SQL Server 2005). (Dados binários de comprimento variável)

4

image

Comprimento máximo de 2.147.483.647 bytes. (Dados binários de comprimento variável)

Tipos de dados diversos

Sr. Não. TIPO DE DADOS e descrição
1

sql_variant

Armazena valores de vários tipos de dados com suporte do SQL Server, exceto text, ntext e timestamp.

2

timestamp

Armazena um número exclusivo em todo o banco de dados que é atualizado toda vez que uma linha é atualizada

3

uniqueidentifier

Armazena um identificador globalmente exclusivo (GUID)

4

xml

Armazena dados XML. Você pode armazenar instâncias xml em uma coluna ou variável (somente SQL Server 2005).

5

cursor

Referência a um objeto cursor

6

table

Armazena um conjunto de resultados para processamento posterior

SQL - Operadores

O que é um operador em SQL?

Um operador é uma palavra reservada ou um caractere usado principalmente na cláusula WHERE de uma instrução SQL para realizar operação (ões), como comparações e operações aritméticas. Esses operadores são usados ​​para especificar condições em uma instrução SQL e servir como conjunções para várias condições em uma instrução.

  • Operadores aritméticos
  • Operadores de comparação
  • Operadores lógicos
  • Operadores costumavam negar condições

Operadores aritméticos SQL

Presumir 'variable a' detém 10 e 'variable b' contém 20, então -

Mostrar exemplos

Operador Descrição Exemplo
+ (Adição) Adiciona valores em qualquer lado do operador. a + b dará 30
- (Subtração) Subtrai o operando direito do operando esquerdo. a - b dará -10
* (Multiplicação) Multiplica os valores em ambos os lados do operador. a * b dará 200
/ (Divisão) Divide operando esquerdo pelo operando direito. b / a dará 2
% (Módulo) Divide o operando esquerdo pelo operando direito e retorna o resto. b% a dará 0

Operadores de comparação SQL

Presumir 'variable a' detém 10 e 'variable b' contém 20, então -

Mostrar exemplos

Operador Descrição Exemplo
= Verifica se os valores dos dois operandos são iguais ou não, se sim a condição torna-se verdadeira. (a = b) não é verdade.
! = Verifica se os valores de dois operandos são iguais ou não; se os valores não são iguais, a condição se torna verdadeira. (a! = b) é verdade.
<> Verifica se os valores de dois operandos são iguais ou não; se os valores não são iguais, a condição se torna verdadeira. (a <> b) é verdadeiro.
> Verifica se o valor do operando esquerdo é maior que o valor do operando direito, se sim, a condição torna-se verdadeira. (a> b) não é verdade.
< Verifica se o valor do operando esquerdo é menor que o valor do operando direito; se sim, a condição torna-se verdadeira. (a <b) é verdade.
> = Verifica se o valor do operando esquerdo é maior ou igual ao valor do operando direito, se sim a condição torna-se verdadeira. (a> = b) não é verdade.
<= Verifica se o valor do operando esquerdo é menor ou igual ao valor do operando direito, se sim a condição torna-se verdadeira. (a <= b) é verdadeiro.
! < Verifica se o valor do operando esquerdo não é menor que o valor do operando direito; se sim, a condição torna-se verdadeira. (a! <b) é falso.
!> Verifica se o valor do operando esquerdo não é maior que o valor do operando direito, se sim a condição torna-se verdadeira. (a!> b) é verdade.

Operadores lógicos SQL

Aqui está uma lista de todos os operadores lógicos disponíveis no SQL.

Mostrar exemplos

Sr. Não. Operador e descrição
1

ALL

O operador ALL é usado para comparar um valor a todos os valores em outro conjunto de valores.

2

AND

O operador AND permite a existência de várias condições na cláusula WHERE de uma instrução SQL.

3

ANY

O operador ANY é usado para comparar um valor a qualquer valor aplicável na lista de acordo com a condição.

4

BETWEEN

O operador BETWEEN é usado para pesquisar valores que estão dentro de um conjunto de valores, dados o valor mínimo e o valor máximo.

5

EXISTS

O operador EXISTS é usado para pesquisar a presença de uma linha em uma tabela especificada que atenda a um determinado critério.

6

IN

O operador IN é usado para comparar um valor a uma lista de valores literais que foram especificados.

7

LIKE

O operador LIKE é usado para comparar um valor a valores semelhantes usando operadores curinga.

8

NOT

O operador NOT inverte o significado do operador lógico com o qual é usado. Ex: NÃO EXISTE, NÃO ENTRE, NÃO ENTRE, etc.This is a negate operator.

9

OR

O operador OR é usado para combinar várias condições na cláusula WHERE de uma instrução SQL.

10

IS NULL

O operador NULL é usado para comparar um valor com um valor NULL.

11

UNIQUE

O operador UNIQUE pesquisa cada linha de uma tabela especificada em busca de exclusividade (sem duplicatas).

SQL - Expressões

Uma expressão é uma combinação de um ou mais valores, operadores e funções SQL que avaliam um valor. Essas EXPRESSÕES SQL são como fórmulas e são escritas em linguagem de consulta. Você também pode usá-los para consultar o banco de dados em busca de um conjunto específico de dados.

Sintaxe

Considere a sintaxe básica da instrução SELECT da seguinte maneira -

SELECT column1, column2, columnN 
FROM table_name 
WHERE [CONDITION|EXPRESSION];

Existem diferentes tipos de expressões SQL, que são mencionados abaixo -

  • Boolean
  • Numeric
  • Date

Vamos agora discutir cada um deles em detalhes.

Expressões Booleanas

As expressões booleanas SQL buscam os dados com base na correspondência de um único valor. A seguir está a sintaxe -

SELECT column1, column2, columnN 
FROM table_name 
WHERE SINGLE VALUE MATCHING EXPRESSION;

Considere a tabela CLIENTES com os seguintes registros -

SQL> SELECT * FROM CUSTOMERS;
+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+
7 rows in set (0.00 sec)

A tabela a seguir é um exemplo simples que mostra o uso de várias expressões booleanas SQL -

SQL> SELECT * FROM CUSTOMERS WHERE SALARY = 10000;
+----+-------+-----+---------+----------+
| ID | NAME  | AGE | ADDRESS | SALARY   |
+----+-------+-----+---------+----------+
|  7 | Muffy |  24 | Indore  | 10000.00 |
+----+-------+-----+---------+----------+
1 row in set (0.00 sec)

Expressão Numérica

Essas expressões são usadas para realizar qualquer operação matemática em qualquer consulta. A seguir está a sintaxe -

SELECT numerical_expression as  OPERATION_NAME
[FROM table_name
WHERE CONDITION] ;

Aqui, a numerical_expression é usada para uma expressão matemática ou qualquer fórmula. A seguir está um exemplo simples que mostra o uso de Expressões Numéricas SQL -

SQL> SELECT (15 + 6) AS ADDITION
+----------+
| ADDITION |
+----------+
|       21 |
+----------+
1 row in set (0.00 sec)

Existem várias funções integradas, como avg (), sum (), count (), etc., para realizar o que é conhecido como cálculos de dados agregados em uma tabela ou coluna específica da tabela.

SQL> SELECT COUNT(*) AS "RECORDS" FROM CUSTOMERS; 
+---------+
| RECORDS |
+---------+
|       7 |
+---------+
1 row in set (0.00 sec)

Expressões de data

As expressões de data retornam os valores atuais de data e hora do sistema -

SQL>  SELECT CURRENT_TIMESTAMP;
+---------------------+
| Current_Timestamp   |
+---------------------+
| 2009-11-12 06:40:23 |
+---------------------+
1 row in set (0.00 sec)

Outra expressão de data é mostrada abaixo -

SQL>  SELECT  GETDATE();;
+-------------------------+
| GETDATE                 |
+-------------------------+
| 2009-10-22 12:07:18.140 |
+-------------------------+
1 row in set (0.00 sec)

SQL - CREATE Database

O SQL CREATE DATABASE instrução é usada para criar um novo banco de dados SQL.

Sintaxe

A sintaxe básica desta instrução CREATE DATABASE é a seguinte -

CREATE DATABASE DatabaseName;

Sempre o nome do banco de dados deve ser exclusivo no RDBMS.

Exemplo

Se você deseja criar um novo banco de dados <testDB>, então a instrução CREATE DATABASE seria como mostrado abaixo -

SQL> CREATE DATABASE testDB;

Certifique-se de ter privilégios de administrador antes de criar qualquer banco de dados. Depois que um banco de dados é criado, você pode verificá-lo na lista de bancos de dados da seguinte forma -

SQL> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| AMROOD             |
| TUTORIALSPOINT     |
| mysql              |
| orig               |
| test               |
| testDB             |
+--------------------+
7 rows in set (0.00 sec)

SQL - banco de dados DROP ou DELETE

O SQL DROP DATABASE instrução é usada para descartar um banco de dados existente no esquema SQL.

Sintaxe

A sintaxe básica da instrução DROP DATABASE é a seguinte -

DROP DATABASE DatabaseName;

Sempre o nome do banco de dados deve ser exclusivo no RDBMS.

Exemplo

Se você deseja excluir um banco de dados existente <testDB>, então a instrução DROP DATABASE seria como mostrado abaixo -

SQL> DROP DATABASE testDB;

NOTE - Tenha cuidado antes de usar esta operação porque a exclusão de um banco de dados existente resultaria na perda de todas as informações armazenadas no banco de dados.

Certifique-se de ter o privilégio de administrador antes de eliminar qualquer banco de dados. Depois que um banco de dados é eliminado, você pode verificá-lo na lista de bancos de dados conforme mostrado abaixo -

SQL> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| AMROOD             |
| TUTORIALSPOINT     |
| mysql              |
| orig               |
| test               |
+--------------------+
6 rows in set (0.00 sec)

SQL - banco de dados SELECT, instrução USE

Quando você tem vários bancos de dados em seu Esquema SQL, antes de iniciar sua operação, você precisa selecionar um banco de dados onde todas as operações seriam realizadas.

O SQL USE instrução é usada para selecionar qualquer banco de dados existente no esquema SQL.

Sintaxe

A sintaxe básica da instrução USE é mostrada abaixo -

USE DatabaseName;

Sempre o nome do banco de dados deve ser exclusivo no RDBMS.

Exemplo

Você pode verificar os bancos de dados disponíveis conforme mostrado abaixo -

SQL> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| AMROOD             |
| TUTORIALSPOINT     |
| mysql              |
| orig               |
| test               |
+--------------------+
6 rows in set (0.00 sec)

Agora, se você deseja trabalhar com o banco de dados AMROOD, pode executar o seguinte comando SQL e começar a trabalhar com o banco de dados AMROOD.

SQL> USE AMROOD;

SQL - Tabela CREATE

Criar uma tabela básica envolve nomear a tabela e definir suas colunas e o tipo de dados de cada coluna.

O SQL CREATE TABLE instrução é usada para criar uma nova tabela.

Sintaxe

A sintaxe básica da instrução CREATE TABLE é a seguinte -

CREATE TABLE table_name(
   column1 datatype,
   column2 datatype,
   column3 datatype,
   .....
   columnN datatype,
   PRIMARY KEY( one or more columns )
);

CREATE TABLE é a palavra-chave que diz ao sistema de banco de dados o que você deseja fazer. Neste caso, você deseja criar uma nova tabela. O nome ou identificador exclusivo da tabela segue a instrução CREATE TABLE.

Em seguida, entre colchetes, vem a lista que define cada coluna na tabela e que tipo de tipo de dados é. A sintaxe fica mais clara com o exemplo a seguir.

Uma cópia de uma tabela existente pode ser criada usando uma combinação da instrução CREATE TABLE e da instrução SELECT. Você pode verificar os detalhes completos em Criar tabela usando outra tabela.

Exemplo

O bloco de código a seguir é um exemplo, que cria uma tabela CUSTOMERS com um ID como chave primária e NOT NULL são as restrições que mostram que esses campos não podem ser NULL durante a criação de registros nesta tabela -

SQL> CREATE TABLE CUSTOMERS(
   ID   INT              NOT NULL,
   NAME VARCHAR (20)     NOT NULL,
   AGE  INT              NOT NULL,
   ADDRESS  CHAR (25) ,
   SALARY   DECIMAL (18, 2),       
   PRIMARY KEY (ID)
);

Você pode verificar se sua tabela foi criada com sucesso olhando a mensagem exibida pelo servidor SQL, caso contrário, você pode usar o DESC comando da seguinte forma -

SQL> DESC CUSTOMERS;
+---------+---------------+------+-----+---------+-------+
| Field   | Type          | Null | Key | Default | Extra |
+---------+---------------+------+-----+---------+-------+
| ID      | int(11)       | NO   | PRI |         |       |
| NAME    | varchar(20)   | NO   |     |         |       |
| AGE     | int(11)       | NO   |     |         |       |
| ADDRESS | char(25)      | YES  |     | NULL    |       |
| SALARY  | decimal(18,2) | YES  |     | NULL    |       |
+---------+---------------+------+-----+---------+-------+
5 rows in set (0.00 sec)

Agora, você tem a tabela CLIENTES disponível em seu banco de dados, que pode ser usada para armazenar as informações necessárias relacionadas aos clientes.

SQL - Tabela DROP ou DELETE

O SQL DROP TABLE instrução é usada para remover uma definição de tabela e todos os dados, índices, gatilhos, restrições e especificações de permissão para essa tabela.

NOTE - Você deve ter muito cuidado ao usar este comando porque uma vez que uma tabela é excluída, todas as informações disponíveis nessa tabela também serão perdidas para sempre.

Sintaxe

A sintaxe básica desta instrução DROP TABLE é a seguinte -

DROP TABLE table_name;

Exemplo

Vamos primeiro verificar a tabela CLIENTES e, em seguida, vamos excluí-la do banco de dados como mostrado abaixo -

SQL> DESC CUSTOMERS;
+---------+---------------+------+-----+---------+-------+
| Field   | Type          | Null | Key | Default | Extra |
+---------+---------------+------+-----+---------+-------+
| ID      | int(11)       | NO   | PRI |         |       |
| NAME    | varchar(20)   | NO   |     |         |       |
| AGE     | int(11)       | NO   |     |         |       |
| ADDRESS | char(25)      | YES  |     | NULL    |       |
| SALARY  | decimal(18,2) | YES  |     | NULL    |       |
+---------+---------------+------+-----+---------+-------+
5 rows in set (0.00 sec)

Isso significa que a tabela CUSTOMERS está disponível no banco de dados, portanto, vamos eliminá-la conforme mostrado abaixo.

SQL> DROP TABLE CUSTOMERS;
Query OK, 0 rows affected (0.01 sec)

Agora, se você tentar o comando DESC, obterá o seguinte erro -

SQL> DESC CUSTOMERS;
ERROR 1146 (42S02): Table 'TEST.CUSTOMERS' doesn't exist

Aqui, TEST é o nome do banco de dados que estamos usando para nossos exemplos.

SQL - INSERT Query

O SQL INSERT INTO A instrução é usada para adicionar novas linhas de dados a uma tabela no banco de dados.

Sintaxe

Existem duas sintaxes básicas da instrução INSERT INTO que são mostradas abaixo.

INSERT INTO TABLE_NAME (column1, column2, column3,...columnN)  
VALUES (value1, value2, value3,...valueN);

Aqui, coluna1, coluna2, coluna3, ... colunaN são os nomes das colunas na tabela na qual você deseja inserir os dados.

Você pode não precisar especificar o (s) nome (s) da (s) coluna (s) na consulta SQL se estiver adicionando valores para todas as colunas da tabela. Mas certifique-se de que a ordem dos valores está na mesma ordem das colunas da tabela.

o SQL INSERT INTO a sintaxe será a seguinte -

INSERT INTO TABLE_NAME VALUES (value1,value2,value3,...valueN);

Exemplo

As instruções a seguir criariam seis registros na tabela CUSTOMERS.

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (1, 'Ramesh', 32, 'Ahmedabad', 2000.00 );

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (2, 'Khilan', 25, 'Delhi', 1500.00 );

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (3, 'kaushik', 23, 'Kota', 2000.00 );

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (4, 'Chaitali', 25, 'Mumbai', 6500.00 );

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (5, 'Hardik', 27, 'Bhopal', 8500.00 );

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (6, 'Komal', 22, 'MP', 4500.00 );

Você pode criar um registro na tabela CLIENTES usando a segunda sintaxe conforme mostrado abaixo.

INSERT INTO CUSTOMERS 
VALUES (7, 'Muffy', 24, 'Indore', 10000.00 );

Todas as instruções acima produziriam os seguintes registros na tabela CLIENTES, conforme mostrado abaixo.

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Preencher uma tabela usando outra tabela

Você pode preencher os dados em uma tabela por meio da instrução select sobre outra tabela; desde que a outra tabela tenha um conjunto de campos, que são necessários para preencher a primeira tabela.

Aqui está a sintaxe -

INSERT INTO first_table_name [(column1, column2, ... columnN)] 
   SELECT column1, column2, ...columnN 
   FROM second_table_name
   [WHERE condition];

SQL - consulta SELECT

O SQL SELECTinstrução é usada para buscar os dados de uma tabela de banco de dados que retorna esses dados na forma de uma tabela de resultados. Essas tabelas de resultados são chamadas de conjuntos de resultados.

Sintaxe

A sintaxe básica da instrução SELECT é a seguinte -

SELECT column1, column2, columnN FROM table_name;

Aqui, coluna1, coluna2 ... são os campos de uma tabela cujos valores você deseja buscar. Se você deseja buscar todos os campos disponíveis no campo, você pode usar a seguinte sintaxe.

SELECT * FROM table_name;

Exemplo

Considere a tabela CLIENTES com os seguintes registros -

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

O código a seguir é um exemplo, que buscaria os campos ID, Nome e Salário dos clientes disponíveis na tabela CLIENTES.

SQL> SELECT ID, NAME, SALARY FROM CUSTOMERS;

Isso produziria o seguinte resultado -

+----+----------+----------+
| ID | NAME     | SALARY   |
+----+----------+----------+
|  1 | Ramesh   |  2000.00 |
|  2 | Khilan   |  1500.00 |
|  3 | kaushik  |  2000.00 |
|  4 | Chaitali |  6500.00 |
|  5 | Hardik   |  8500.00 |
|  6 | Komal    |  4500.00 |
|  7 | Muffy    | 10000.00 |
+----+----------+----------+

Se você deseja buscar todos os campos da tabela CLIENTES, deve usar a seguinte consulta.

SQL> SELECT * FROM CUSTOMERS;

Isso produziria o resultado mostrado abaixo.

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

SQL - Cláusula WHERE

O SQL WHEREA cláusula é usada para especificar uma condição ao buscar os dados de uma única tabela ou unindo-se a várias tabelas. Se a condição fornecida for satisfeita, apenas ele retornará um valor específico da tabela. Você deve usar a cláusula WHERE para filtrar os registros e buscar apenas os registros necessários.

A cláusula WHERE não é usada apenas na instrução SELECT, mas também na instrução UPDATE, DELETE, etc., que examinaremos nos capítulos subsequentes.

Sintaxe

A sintaxe básica da instrução SELECT com a cláusula WHERE é mostrada a seguir.

SELECT column1, column2, columnN 
FROM table_name
WHERE [condition]

Você pode especificar uma condição usando a comparação ou operadores lógicos como>, <, =,LIKE, NOT, etc. Os exemplos a seguir tornariam esse conceito claro.

Exemplo

Considere a tabela CLIENTES com os seguintes registros -

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

O código a seguir é um exemplo que buscaria os campos ID, Nome e Salário da tabela CLIENTES, onde o salário é maior que 2.000 -

SQL> SELECT ID, NAME, SALARY 
FROM CUSTOMERS
WHERE SALARY > 2000;

Isso produziria o seguinte resultado -

+----+----------+----------+
| ID | NAME     | SALARY   |
+----+----------+----------+
|  4 | Chaitali |  6500.00 |
|  5 | Hardik   |  8500.00 |
|  6 | Komal    |  4500.00 |
|  7 | Muffy    | 10000.00 |
+----+----------+----------+

A consulta a seguir é um exemplo, que buscaria os campos ID, Nome e Salário da tabela CLIENTES para um cliente com o nome Hardik.

Aqui, é importante observar que todas as strings devem ser fornecidas entre aspas simples (''). Considerando que, os valores numéricos devem ser fornecidos sem qualquer aspas, como no exemplo acima.

SQL> SELECT ID, NAME, SALARY 
FROM CUSTOMERS
WHERE NAME = 'Hardik';

Isso produziria o seguinte resultado -

+----+----------+----------+
| ID | NAME     | SALARY   |
+----+----------+----------+
|  5 | Hardik   |  8500.00 |
+----+----------+----------+

SQL - Operadores Conjuntivos AND e OR

O SQL AND E ORoperadores são usados ​​para combinar várias condições para restringir os dados em uma instrução SQL. Esses dois operadores são chamados de operadores conjuntivos.

Esses operadores fornecem um meio de fazer várias comparações com diferentes operadores na mesma instrução SQL.

O operador AND

o AND operador permite a existência de várias condições na cláusula WHERE de uma instrução SQL.

Sintaxe

A sintaxe básica do operador AND com uma cláusula WHERE é a seguinte -

SELECT column1, column2, columnN 
FROM table_name
WHERE [condition1] AND [condition2]...AND [conditionN];

Você pode combinar um número N de condições usando o operador AND. Para que uma ação seja executada pela instrução SQL, seja uma transação ou uma consulta, todas as condições separadas por AND devem ser TRUE.

Exemplo

Considere a tabela CLIENTES com os seguintes registros -

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

A seguir está um exemplo, que buscaria os campos ID, Nome e Salário da tabela CLIENTES, onde o salário é maior que 2.000 e a idade é menor que 25 anos -

SQL> SELECT ID, NAME, SALARY 
FROM CUSTOMERS
WHERE SALARY > 2000 AND age < 25;

Isso produziria o seguinte resultado -

+----+-------+----------+
| ID | NAME  | SALARY   |
+----+-------+----------+
|  6 | Komal |  4500.00 |
|  7 | Muffy | 10000.00 |
+----+-------+----------+

O operador OR

O operador OR é usado para combinar várias condições na cláusula WHERE de uma instrução SQL.

Sintaxe

A sintaxe básica do operador OR com uma cláusula WHERE é a seguinte -

SELECT column1, column2, columnN 
FROM table_name
WHERE [condition1] OR [condition2]...OR [conditionN]

Você pode combinar N número de condições usando o operador OR. Para que uma ação seja realizada pela instrução SQL, seja uma transação ou consulta, a única qualquer uma das condições separadas por OR deve ser TRUE.

Exemplo

Considere a tabela CLIENTES com os seguintes registros -

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

O bloco de código a seguir tem uma consulta, que buscaria os campos ID, Nome e Salário da tabela CLIENTES, onde o salário é maior que 2.000 OU a idade é menor que 25 anos.

SQL> SELECT ID, NAME, SALARY 
FROM CUSTOMERS
WHERE SALARY > 2000 OR age < 25;

Isso produziria o seguinte resultado -

+----+----------+----------+
| ID | NAME     | SALARY   |
+----+----------+----------+
|  3 | kaushik  |  2000.00 |
|  4 | Chaitali |  6500.00 |
|  5 | Hardik   |  8500.00 |
|  6 | Komal    |  4500.00 |
|  7 | Muffy    | 10000.00 |
+----+----------+----------+

SQL - UPDATE Query

O SQL UPDATEA consulta é usada para modificar os registros existentes em uma tabela. Você pode usar a cláusula WHERE com a consulta UPDATE para atualizar as linhas selecionadas, caso contrário, todas as linhas seriam afetadas.

Sintaxe

A sintaxe básica da consulta UPDATE com uma cláusula WHERE é a seguinte -

UPDATE table_name
SET column1 = value1, column2 = value2...., columnN = valueN
WHERE [condition];

Você pode combinar um número N de condições usando os operadores AND ou OR.

Exemplo

Considere a tabela CLIENTES com os seguintes registros -

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

A consulta a seguir atualizará o ENDEREÇO ​​para um cliente cujo número de ID é 6 na tabela.

SQL> UPDATE CUSTOMERS
SET ADDRESS = 'Pune'
WHERE ID = 6;

Agora, a tabela CUSTOMERS teria os seguintes registros -

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | Pune      |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Se você deseja modificar todos os valores das colunas ADDRESS e SALARY na tabela CUSTOMERS, não é necessário usar a cláusula WHERE, pois a consulta UPDATE seria suficiente, conforme mostrado no bloco de código a seguir.

SQL> UPDATE CUSTOMERS
SET ADDRESS = 'Pune', SALARY = 1000.00;

Agora, a tabela CUSTOMERS teria os seguintes registros -

+----+----------+-----+---------+---------+
| ID | NAME     | AGE | ADDRESS | SALARY  |
+----+----------+-----+---------+---------+
|  1 | Ramesh   |  32 | Pune    | 1000.00 |
|  2 | Khilan   |  25 | Pune    | 1000.00 |
|  3 | kaushik  |  23 | Pune    | 1000.00 |
|  4 | Chaitali |  25 | Pune    | 1000.00 |
|  5 | Hardik   |  27 | Pune    | 1000.00 |
|  6 | Komal    |  22 | Pune    | 1000.00 |
|  7 | Muffy    |  24 | Pune    | 1000.00 |
+----+----------+-----+---------+---------+

SQL - Consulta DELETE

A consulta SQL DELETE é usada para excluir os registros existentes de uma tabela.

Você pode usar a cláusula WHERE com uma consulta DELETE para excluir as linhas selecionadas, caso contrário, todos os registros seriam excluídos.

Sintaxe

A sintaxe básica da consulta DELETE com a cláusula WHERE é a seguinte -

DELETE FROM table_name
WHERE [condition];

Você pode combinar um número N de condições usando os operadores AND ou OR.

Exemplo

Considere a tabela CLIENTES com os seguintes registros -

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

O código a seguir contém uma consulta, que EXCLUIRÁ um cliente, cujo ID é 6.

SQL> DELETE FROM CUSTOMERS
WHERE ID = 6;

Agora, a tabela CUSTOMERS teria os seguintes registros.

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Se você deseja DELETE todos os registros da tabela CUSTOMERS, você não precisa usar a cláusula WHERE e a consulta DELETE seria a seguinte -

SQL> DELETE FROM CUSTOMERS;

Agora, a tabela CUSTOMERS não teria nenhum registro.

SQL - cláusula LIKE

O SQL LIKEcláusula é usada para comparar um valor a valores semelhantes usando operadores curinga. Existem dois curingas usados ​​em conjunto com o operador LIKE.

  • O sinal de porcentagem (%)
  • O sublinhado (_)

O sinal de porcentagem representa zero, um ou vários caracteres. O sublinhado representa um único número ou caractere. Esses símbolos podem ser usados ​​em combinações.

Sintaxe

A sintaxe básica de% e _ é a seguinte -

SELECT FROM table_name
WHERE column LIKE 'XXXX%'

or 

SELECT FROM table_name
WHERE column LIKE '%XXXX%'

or

SELECT FROM table_name
WHERE column LIKE 'XXXX_'

or

SELECT FROM table_name
WHERE column LIKE '_XXXX'

or

SELECT FROM table_name
WHERE column LIKE '_XXXX_'

Você pode combinar um número N de condições usando os operadores AND ou OR. Aqui, XXXX pode ser qualquer valor numérico ou string.

Exemplo

A tabela a seguir tem alguns exemplos que mostram a parte WHERE com cláusulas LIKE diferentes com os operadores '%' e '_' -

Sr. Não. Declaração e descrição
1

WHERE SALARY LIKE '200%'

Encontra todos os valores que começam com 200.

2

WHERE SALARY LIKE '%200%'

Encontra qualquer valor que tenha 200 em qualquer posição.

3

WHERE SALARY LIKE '_00%'

Encontra qualquer valor que tenha 00 na segunda e na terceira posições.

4

WHERE SALARY LIKE '2_%_%'

Encontra qualquer valor que comece com 2 e tenha pelo menos 3 caracteres de comprimento.

5

WHERE SALARY LIKE '%2'

Encontra qualquer valor que termine com 2.

6

WHERE SALARY LIKE '_2%3'

Encontra qualquer valor que tenha 2 na segunda posição e termine com 3.

7

WHERE SALARY LIKE '2___3'

Encontra qualquer valor em um número de cinco dígitos que começa com 2 e termina com 3.

Tomemos um exemplo real, considere a tabela CLIENTES com os registros conforme mostrado abaixo.

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

A seguir está um exemplo, que exibiria todos os registros da tabela CUSTOMERS, onde o SALÁRIO começa com 200.

SQL> SELECT * FROM CUSTOMERS
WHERE SALARY LIKE '200%';

Isso produziria o seguinte resultado -

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
+----+----------+-----+-----------+----------+

SQL - cláusula TOP, LIMIT ou ROWNUM

O SQL TOP A cláusula é usada para buscar um número TOP N ou registros de X por cento de uma tabela.

Note- Todos os bancos de dados não suportam a cláusula TOP. Por exemplo, o MySQL suporta oLIMIT cláusula para buscar um número limitado de registros enquanto o Oracle usa o ROWNUM comando para buscar um número limitado de registros.

Sintaxe

A sintaxe básica da cláusula TOP com uma instrução SELECT seria a seguinte.

SELECT TOP number|percent column_name(s)
FROM table_name
WHERE [condition]

Exemplo

Considere a tabela CLIENTES com os seguintes registros -

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

A consulta a seguir é um exemplo no servidor SQL, que buscaria os 3 principais registros da tabela CUSTOMERS.

SQL> SELECT TOP 3 * FROM CUSTOMERS;

Isso produziria o seguinte resultado -

+----+---------+-----+-----------+---------+
| ID | NAME    | AGE | ADDRESS   | SALARY  |
+----+---------+-----+-----------+---------+
|  1 | Ramesh  |  32 | Ahmedabad | 2000.00 |
|  2 | Khilan  |  25 | Delhi     | 1500.00 |
|  3 | kaushik |  23 | Kota      | 2000.00 |
+----+---------+-----+-----------+---------+

Se você estiver usando o servidor MySQL, aqui está um exemplo equivalente -

SQL> SELECT * FROM CUSTOMERS
LIMIT 3;

Isso produziria o seguinte resultado -

+----+---------+-----+-----------+---------+
| ID | NAME    | AGE | ADDRESS   | SALARY  |
+----+---------+-----+-----------+---------+
|  1 | Ramesh  |  32 | Ahmedabad | 2000.00 |
|  2 | Khilan  |  25 | Delhi     | 1500.00 |
|  3 | kaushik |  23 | Kota      | 2000.00 |
+----+---------+-----+-----------+---------+

Se você estiver usando um servidor Oracle, o bloco de código a seguir terá um exemplo equivalente.

SQL> SELECT * FROM CUSTOMERS
WHERE ROWNUM <= 3;

Isso produziria o seguinte resultado -

+----+---------+-----+-----------+---------+
| ID | NAME    | AGE | ADDRESS   | SALARY  |
+----+---------+-----+-----------+---------+
|  1 | Ramesh  |  32 | Ahmedabad | 2000.00 |
|  2 | Khilan  |  25 | Delhi     | 1500.00 |
|  3 | kaushik |  23 | Kota      | 2000.00 |
+----+---------+-----+-----------+---------+

SQL - cláusula ORDER BY

O SQL ORDER BYcláusula é usada para classificar os dados em ordem crescente ou decrescente, com base em uma ou mais colunas. Alguns bancos de dados classificam os resultados da consulta em ordem crescente por padrão.

Sintaxe

A sintaxe básica da cláusula ORDER BY é a seguinte -

SELECT column-list 
FROM table_name 
[WHERE condition] 
[ORDER BY column1, column2, .. columnN] [ASC | DESC];

Você pode usar mais de uma coluna na cláusula ORDER BY. Certifique-se de que qualquer coluna que você está usando para classificar essa coluna deve estar na lista de colunas.

Exemplo

Considere a tabela CLIENTES com os seguintes registros -

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

O bloco de código a seguir tem um exemplo, que classificaria o resultado em ordem crescente por NOME e SALÁRIO -

SQL> SELECT * FROM CUSTOMERS
   ORDER BY NAME, SALARY;

Isso produziria o seguinte resultado -

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
+----+----------+-----+-----------+----------+

O bloco de código a seguir tem um exemplo, que classificaria o resultado em ordem decrescente por NAME.

SQL> SELECT * FROM CUSTOMERS
   ORDER BY NAME DESC;

Isso produziria o seguinte resultado -

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
+----+----------+-----+-----------+----------+

SQL - Grupo por

O SQL GROUP BYcláusula é usada em colaboração com a instrução SELECT para organizar dados idênticos em grupos. Esta cláusula GROUP BY segue a cláusula WHERE em uma instrução SELECT e precede a cláusula ORDER BY.

Sintaxe

A sintaxe básica de uma cláusula GROUP BY é mostrada no bloco de código a seguir. A cláusula GROUP BY deve seguir as condições da cláusula WHERE e deve preceder a cláusula ORDER BY, se uma for usada.

SELECT column1, column2
FROM table_name
WHERE [ conditions ]
GROUP BY column1, column2
ORDER BY column1, column2

Exemplo

Considere que a tabela CUSTOMERS tem os seguintes registros -

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Se você quiser saber o valor total do salário de cada cliente, a consulta GROUP BY seria a seguinte.

SQL> SELECT NAME, SUM(SALARY) FROM CUSTOMERS
   GROUP BY NAME;

Isso produziria o seguinte resultado -

+----------+-------------+
| NAME     | SUM(SALARY) |
+----------+-------------+
| Chaitali |     6500.00 |
| Hardik   |     8500.00 |
| kaushik  |     2000.00 |
| Khilan   |     1500.00 |
| Komal    |     4500.00 |
| Muffy    |    10000.00 |
| Ramesh   |     2000.00 |
+----------+-------------+

Agora, vamos olhar para uma tabela onde a tabela CUSTOMERS tem os seguintes registros com nomes duplicados -

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Ramesh   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | kaushik  |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Agora, novamente, se você quiser saber o valor total do salário de cada cliente, a consulta GROUP BY seria a seguinte -

SQL> SELECT NAME, SUM(SALARY) FROM CUSTOMERS
   GROUP BY NAME;

Isso produziria o seguinte resultado -

+---------+-------------+
| NAME    | SUM(SALARY) |
+---------+-------------+
| Hardik  |     8500.00 |
| kaushik |     8500.00 |
| Komal   |     4500.00 |
| Muffy   |    10000.00 |
| Ramesh  |     3500.00 |
+---------+-------------+

SQL - palavra-chave distinta

O SQL DISTINCT palavra-chave é usada em conjunto com a instrução SELECT para eliminar todos os registros duplicados e buscar apenas registros únicos.

Pode haver uma situação em que você tenha vários registros duplicados em uma tabela. Ao buscar esses registros, faz mais sentido buscar apenas aqueles registros únicos em vez de buscar registros duplicados.

Sintaxe

A sintaxe básica da palavra-chave DISTINCT para eliminar os registros duplicados é a seguinte -

SELECT DISTINCT column1, column2,.....columnN 
FROM table_name
WHERE [condition]

Exemplo

Considere a tabela CLIENTES com os seguintes registros -

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Primeiro, vamos ver como a consulta SELECT a seguir retorna os registros de salário duplicados.

SQL> SELECT SALARY FROM CUSTOMERS
   ORDER BY SALARY;

Isso produziria o seguinte resultado, onde o salário (2000) vem duas vezes, o que é um registro duplicado da tabela original.

+----------+
| SALARY   |
+----------+
|  1500.00 |
|  2000.00 |
|  2000.00 |
|  4500.00 |
|  6500.00 |
|  8500.00 |
| 10000.00 |
+----------+

Agora, vamos usar a palavra-chave DISTINCT com a consulta SELECT acima e ver o resultado.

SQL> SELECT DISTINCT SALARY FROM CUSTOMERS
   ORDER BY SALARY;

Isso produziria o seguinte resultado, onde não temos nenhuma entrada duplicada.

+----------+
| SALARY   |
+----------+
|  1500.00 |
|  2000.00 |
|  4500.00 |
|  6500.00 |
|  8500.00 |
| 10000.00 |
+----------+

SQL - Resultados de SORTING

O SQL ORDER BYcláusula é usada para classificar os dados em ordem crescente ou decrescente, com base em uma ou mais colunas. Alguns bancos de dados classificam os resultados da consulta em ordem crescente por padrão.

Sintaxe

A sintaxe básica da cláusula ORDER BY que seria usada para classificar o resultado em ordem crescente ou decrescente é a seguinte -

SELECT column-list 
FROM table_name 
[WHERE condition] 
[ORDER BY column1, column2, .. columnN] [ASC | DESC];

Você pode usar mais de uma coluna na cláusula ORDER BY. Certifique-se de que qualquer coluna que você está usando para classificar, essa coluna deve estar na lista de colunas.

Exemplo

Considere a tabela CLIENTES com os seguintes registros -

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

A seguir está um exemplo, que classificaria o resultado em ordem crescente por NOME e SALÁRIO.

SQL> SELECT * FROM CUSTOMERS
   ORDER BY NAME, SALARY;

Isso produziria o seguinte resultado -

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
+----+----------+-----+-----------+----------+

O bloco de código a seguir tem um exemplo, que classificaria o resultado em ordem decrescente por NAME.

SQL> SELECT * FROM CUSTOMERS
   ORDER BY NAME DESC;

Isso produziria o seguinte resultado -

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
+----+----------+-----+-----------+----------+

Para buscar as linhas com sua própria ordem preferida, a consulta SELECT usada seria a seguinte -

SQL> SELECT * FROM CUSTOMERS
   ORDER BY (CASE ADDRESS
   WHEN 'DELHI' 	 THEN 1
   WHEN 'BHOPAL' 	 THEN 2
   WHEN 'KOTA' 	 THEN 3
   WHEN 'AHMEDABAD' THEN 4
   WHEN 'MP' 	THEN 5
   ELSE 100 END) ASC, ADDRESS DESC;

Isso produziria o seguinte resultado -

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
+----+----------+-----+-----------+----------+

Isso classificará os clientes por ADDRESS em seu ownoOrderde preferência primeiro e em uma ordem natural para os endereços restantes. Além disso, os endereços restantes serão classificados em ordem alfabética reversa.

SQL - restrições

As restrições são as regras aplicadas às colunas de dados de uma tabela. Eles são usados ​​para limitar o tipo de dados que podem entrar em uma tabela. Isso garante a precisão e confiabilidade dos dados no banco de dados.

As restrições podem estar no nível da coluna ou no nível da tabela. As restrições de nível de coluna são aplicadas apenas a uma coluna, enquanto as restrições de nível de tabela são aplicadas a toda a tabela.

A seguir estão algumas das restrições mais comumente usadas disponíveis em SQL. Essas restrições já foram discutidas no capítulo SQL - Conceitos de RDBMS , mas vale a pena revisá-las neste ponto.

  • Restrição NOT NULL - Garante que uma coluna não pode ter valor NULL.

  • Restrição DEFAULT - fornece um valor padrão para uma coluna quando nenhum é especificado.

  • Restrição UNIQUE - Garante que todos os valores em uma coluna sejam diferentes.

  • Chave PRIMÁRIA - Identifica exclusivamente cada linha / registro em uma tabela de banco de dados.

  • Chave FOREIGN - Identifica exclusivamente uma linha / registro em qualquer uma das tabelas de banco de dados fornecidas.

  • Restrição CHECK - A restrição CHECK garante que todos os valores em uma coluna atendam a certas condições.

  • INDEX - Usado para criar e recuperar dados do banco de dados muito rapidamente.

As restrições podem ser especificadas quando uma tabela é criada com a instrução CREATE TABLE ou você pode usar a instrução ALTER TABLE para criar restrições, mesmo depois que a tabela é criada.

Eliminando restrições

Qualquer restrição que você definiu pode ser eliminada usando o comando ALTER TABLE com a opção DROP CONSTRAINT.

Por exemplo, para eliminar a restrição de chave primária na tabela EMPLOYEES, você pode usar o seguinte comando.

ALTER TABLE EMPLOYEES DROP CONSTRAINT EMPLOYEES_PK;

Algumas implementações podem fornecer atalhos para eliminar certas restrições. Por exemplo, para eliminar a restrição de chave primária para uma tabela no Oracle, você pode usar o seguinte comando.

ALTER TABLE EMPLOYEES DROP PRIMARY KEY;

Algumas implementações permitem que você desative as restrições. Em vez de eliminar permanentemente uma restrição do banco de dados, você pode desativar temporariamente a restrição e ativá-la posteriormente.

Restrições de integridade

As restrições de integridade são usadas para garantir a precisão e a consistência dos dados em um banco de dados relacional. A integridade dos dados é tratada em um banco de dados relacional por meio do conceito de integridade referencial.

Existem muitos tipos de restrições de integridade que desempenham um papel na Referential Integrity (RI). Essas restrições incluem chave primária, chave estrangeira, restrições exclusivas e outras restrições que são mencionadas acima.

SQL - usando associações

O SQL Joinscláusula é usada para combinar registros de duas ou mais tabelas em um banco de dados. Um JOIN é um meio de combinar campos de duas tabelas usando valores comuns a cada uma.

Considere as duas tabelas a seguir -

Table 1 - Tabela CLIENTES

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Table 2 - Tabela ORDERS

+-----+---------------------+-------------+--------+
|OID  | DATE                | CUSTOMER_ID | AMOUNT |
+-----+---------------------+-------------+--------+
| 102 | 2009-10-08 00:00:00 |           3 |   3000 |
| 100 | 2009-10-08 00:00:00 |           3 |   1500 |
| 101 | 2009-11-20 00:00:00 |           2 |   1560 |
| 103 | 2008-05-20 00:00:00 |           4 |   2060 |
+-----+---------------------+-------------+--------+

Agora, vamos juntar essas duas tabelas em nossa instrução SELECT, conforme mostrado abaixo.

SQL> SELECT ID, NAME, AGE, AMOUNT
   FROM CUSTOMERS, ORDERS
   WHERE  CUSTOMERS.ID = ORDERS.CUSTOMER_ID;

Isso produziria o seguinte resultado.

+----+----------+-----+--------+
| ID | NAME     | AGE | AMOUNT |
+----+----------+-----+--------+
|  3 | kaushik  |  23 |   3000 |
|  3 | kaushik  |  23 |   1500 |
|  2 | Khilan   |  25 |   1560 |
|  4 | Chaitali |  25 |   2060 |
+----+----------+-----+--------+

Aqui, é perceptível que a junção é realizada na cláusula WHERE. Vários operadores podem ser usados ​​para unir tabelas, como =, <,>, <>, <=,> =,! =, BETWEEN, LIKE e NOT; todos eles podem ser usados ​​para unir tabelas. No entanto, o operador mais comum é o símbolo igual a.

Existem diferentes tipos de junções disponíveis no SQL -

  • INNER JOIN - retorna linhas quando há uma correspondência em ambas as tabelas.

  • LEFT JOIN - retorna todas as linhas da tabela da esquerda, mesmo se não houver correspondências na tabela da direita.

  • RIGHT JOIN - retorna todas as linhas da tabela da direita, mesmo se não houver correspondências na tabela da esquerda.

  • FULL JOIN - retorna linhas quando há uma correspondência em uma das tabelas.

  • SELF JOIN - é usado para juntar uma tabela a si mesma como se a tabela fosse duas tabelas, renomeando temporariamente pelo menos uma tabela na instrução SQL.

  • CARTESIAN JOIN - retorna o produto cartesiano dos conjuntos de registros de duas ou mais tabelas unidas.

Vamos agora discutir cada uma dessas junções em detalhes.

SQL - CLÁUSULA SINDICAL

A cláusula / operador SQL UNION é usada para combinar os resultados de duas ou mais instruções SELECT sem retornar nenhuma linha duplicada.

Para usar esta cláusula UNION, cada instrução SELECT deve ter

  • O mesmo número de colunas selecionadas
  • O mesmo número de expressões de coluna
  • O mesmo tipo de dados e
  • Coloque-os na mesma ordem

Mas eles não precisam ter o mesmo comprimento.

Sintaxe

A sintaxe básica de um UNION cláusula é a seguinte -

SELECT column1 [, column2 ]
FROM table1 [, table2 ]
[WHERE condition]

UNION

SELECT column1 [, column2 ]
FROM table1 [, table2 ]
[WHERE condition]

Aqui, a condição fornecida pode ser qualquer expressão com base em seus requisitos.

Exemplo

Considere as duas tabelas a seguir.

Table 1 - A Tabela CLIENTES é a seguinte.

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Table 2 - Tabela ORDERS é a seguinte.

+-----+---------------------+-------------+--------+
|OID  | DATE                | CUSTOMER_ID | AMOUNT |
+-----+---------------------+-------------+--------+
| 102 | 2009-10-08 00:00:00 |           3 |   3000 |
| 100 | 2009-10-08 00:00:00 |           3 |   1500 |
| 101 | 2009-11-20 00:00:00 |           2 |   1560 |
| 103 | 2008-05-20 00:00:00 |           4 |   2060 |
+-----+---------------------+-------------+--------+

Agora, vamos juntar essas duas tabelas em nossa instrução SELECT da seguinte maneira -

SQL> SELECT  ID, NAME, AMOUNT, DATE
   FROM CUSTOMERS
   LEFT JOIN ORDERS
   ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID
UNION
   SELECT  ID, NAME, AMOUNT, DATE
   FROM CUSTOMERS
   RIGHT JOIN ORDERS
   ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID;

Isso produziria o seguinte resultado -

+------+----------+--------+---------------------+
| ID   | NAME     | AMOUNT | DATE                |
+------+----------+--------+---------------------+
|    1 | Ramesh   |   NULL | NULL                |
|    2 | Khilan   |   1560 | 2009-11-20 00:00:00 |
|    3 | kaushik  |   3000 | 2009-10-08 00:00:00 |
|    3 | kaushik  |   1500 | 2009-10-08 00:00:00 |
|    4 | Chaitali |   2060 | 2008-05-20 00:00:00 |
|    5 | Hardik   |   NULL | NULL                |
|    6 | Komal    |   NULL | NULL                |
|    7 | Muffy    |   NULL | NULL                |
+------+----------+--------+---------------------+

A cláusula UNION ALL

O operador UNION ALL é usado para combinar os resultados de duas instruções SELECT incluindo linhas duplicadas.

As mesmas regras que se aplicam à cláusula UNION serão aplicadas ao operador UNION ALL.

Sintaxe

A sintaxe básica do UNION ALL é o seguinte.

SELECT column1 [, column2 ]
FROM table1 [, table2 ]
[WHERE condition]

UNION ALL

SELECT column1 [, column2 ]
FROM table1 [, table2 ]
[WHERE condition]

Aqui, a condição fornecida pode ser qualquer expressão com base em seus requisitos.

Exemplo

Considere as duas tabelas a seguir,

Table 1 - A Tabela CLIENTES é a seguinte.

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Table 2 - A tabela ORDERS é a seguinte.

+-----+---------------------+-------------+--------+
|OID  | DATE                | CUSTOMER_ID | AMOUNT |
+-----+---------------------+-------------+--------+
| 102 | 2009-10-08 00:00:00 |           3 |   3000 |
| 100 | 2009-10-08 00:00:00 |           3 |   1500 |
| 101 | 2009-11-20 00:00:00 |           2 |   1560 |
| 103 | 2008-05-20 00:00:00 |           4 |   2060 |
+-----+---------------------+-------------+--------+

Agora, vamos juntar essas duas tabelas em nossa instrução SELECT da seguinte maneira -

SQL> SELECT  ID, NAME, AMOUNT, DATE
   FROM CUSTOMERS
   LEFT JOIN ORDERS
   ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID
UNION ALL
   SELECT  ID, NAME, AMOUNT, DATE
   FROM CUSTOMERS
   RIGHT JOIN ORDERS
   ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID;

Isso produziria o seguinte resultado -

+------+----------+--------+---------------------+
| ID   | NAME     | AMOUNT | DATE                |
+------+----------+--------+---------------------+
|    1 | Ramesh   |   NULL | NULL                |
|    2 | Khilan   |   1560 | 2009-11-20 00:00:00 |
|    3 | kaushik  |   3000 | 2009-10-08 00:00:00 |
|    3 | kaushik  |   1500 | 2009-10-08 00:00:00 |
|    4 | Chaitali |   2060 | 2008-05-20 00:00:00 |
|    5 | Hardik   |   NULL | NULL                |
|    6 | Komal    |   NULL | NULL                |
|    7 | Muffy    |   NULL | NULL                |
|    3 | kaushik  |   3000 | 2009-10-08 00:00:00 |
|    3 | kaushik  |   1500 | 2009-10-08 00:00:00 |
|    2 | Khilan   |   1560 | 2009-11-20 00:00:00 |
|    4 | Chaitali |   2060 | 2008-05-20 00:00:00 |
+------+----------+--------+---------------------+

Existem duas outras cláusulas (isto é, operadores), que são como a cláusula UNION.

  • Cláusula SQL INTERSECT - usada para combinar duas instruções SELECT, mas retorna apenas linhas da primeira instrução SELECT que são idênticas a uma linha na segunda instrução SELECT.

  • Cláusula SQL EXCEPT - Combina duas instruções SELECT e retorna linhas da primeira instrução SELECT que não são retornadas pela segunda instrução SELECT.

SQL - valores NULL

O SQL NULLé o termo usado para representar um valor ausente. Um valor NULL em uma tabela é um valor em um campo que parece estar em branco.

Um campo com valor NULL é um campo sem valor. É muito importante entender que um valor NULL é diferente de um valor zero ou de um campo que contém espaços.

Sintaxe

A sintaxe básica de NULL ao criar uma mesa.

SQL> CREATE TABLE CUSTOMERS(
   ID   INT              NOT NULL,
   NAME VARCHAR (20)     NOT NULL,
   AGE  INT              NOT NULL,
   ADDRESS  CHAR (25) ,
   SALARY   DECIMAL (18, 2),       
   PRIMARY KEY (ID)
);

Aqui, NOT NULLsignifica que a coluna deve sempre aceitar um valor explícito do tipo de dados fornecido. Existem duas colunas nas quais não usamos NOT NULL, o que significa que essas colunas podem ser NULL.

Um campo com valor NULL é aquele que foi deixado em branco durante a criação do registro.

Exemplo

O valor NULL pode causar problemas ao selecionar dados. No entanto, porque ao comparar um valor desconhecido com qualquer outro valor, o resultado é sempre desconhecido e não é incluído nos resultados. Você deve usar oIS NULL ou IS NOT NULL operadores para verificar um valor NULL.

Considere a seguinte tabela de CLIENTES com os registros mostrados abaixo.

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |          |
|  7 | Muffy    |  24 | Indore    |          |
+----+----------+-----+-----------+----------+

Agora, a seguir está o uso do IS NOT NULLoperador.

SQL> SELECT  ID, NAME, AGE, ADDRESS, SALARY
   FROM CUSTOMERS
   WHERE SALARY IS NOT NULL;

Isso produziria o seguinte resultado -

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
+----+----------+-----+-----------+----------+

Agora, a seguir está o uso do IS NULL operador.

SQL> SELECT  ID, NAME, AGE, ADDRESS, SALARY
   FROM CUSTOMERS
   WHERE SALARY IS NULL;

Isso produziria o seguinte resultado -

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  6 | Komal    |  22 | MP        |          |
|  7 | Muffy    |  24 | Indore    |          |
+----+----------+-----+-----------+----------+

SQL - Sintaxe de alias

Você pode renomear uma tabela ou coluna temporariamente, dando outro nome conhecido como Alias. O uso de apelidos de tabela é para renomear uma tabela em uma instrução SQL específica. A renomeação é uma mudança temporária e o nome real da tabela não muda no banco de dados. Os aliases de coluna são usados ​​para renomear as colunas de uma tabela para fins de uma consulta SQL específica.

Sintaxe

A sintaxe básica de um table alias é o seguinte.

SELECT column1, column2....
FROM table_name AS alias_name
WHERE [condition];

A sintaxe básica de um column alias é o seguinte.

SELECT column_name AS alias_name
FROM table_name
WHERE [condition];

Exemplo

Considere as duas tabelas a seguir.

Table 1 - A Tabela CLIENTES é a seguinte.

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Table 2 - Tabela ORDERS é a seguinte.

+-----+---------------------+-------------+--------+
|OID  | DATE                | CUSTOMER_ID | AMOUNT |
+-----+---------------------+-------------+--------+
| 102 | 2009-10-08 00:00:00 |           3 |   3000 |
| 100 | 2009-10-08 00:00:00 |           3 |   1500 |
| 101 | 2009-11-20 00:00:00 |           2 |   1560 |
| 103 | 2008-05-20 00:00:00 |           4 |   2060 |
+-----+---------------------+-------------+--------+

Agora, o seguinte bloco de código mostra o uso de um table alias.

SQL> SELECT C.ID, C.NAME, C.AGE, O.AMOUNT 
   FROM CUSTOMERS AS C, ORDERS AS O
   WHERE  C.ID = O.CUSTOMER_ID;

Isso produziria o seguinte resultado.

+----+----------+-----+--------+
| ID | NAME     | AGE | AMOUNT |
+----+----------+-----+--------+
|  3 | kaushik  |  23 |   3000 |
|  3 | kaushik  |  23 |   1500 |
|  2 | Khilan   |  25 |   1560 |
|  4 | Chaitali |  25 |   2060 |
+----+----------+-----+--------+

A seguir está o uso de um column alias.

SQL> SELECT  ID AS CUSTOMER_ID, NAME AS CUSTOMER_NAME
   FROM CUSTOMERS
   WHERE SALARY IS NOT NULL;

Isso produziria o seguinte resultado.

+-------------+---------------+
| CUSTOMER_ID | CUSTOMER_NAME |
+-------------+---------------+
|           1 | Ramesh        |
|           2 | Khilan        |
|           3 | kaushik       |
|           4 | Chaitali      |
|           5 | Hardik        |
|           6 | Komal         |
|           7 | Muffy         |
+-------------+---------------+

SQL - índices

Índices são special lookup tablesque o mecanismo de pesquisa de banco de dados pode usar para acelerar a recuperação de dados. Simplificando, um índice é um ponteiro para dados em uma tabela. Um índice em um banco de dados é muito semelhante a um índice no final de um livro.

Por exemplo, se você quiser fazer referência a todas as páginas de um livro que discute um determinado tópico, primeiro consulte o índice, que lista todos os tópicos em ordem alfabética e, em seguida, é referido a um ou mais números de página específicos.

Um índice ajuda a acelerar SELECT consultas e WHERE cláusulas, mas retarda a entrada de dados, com o UPDATE e a INSERTafirmações. Os índices podem ser criados ou eliminados sem efeito nos dados.

Criar um índice envolve o CREATE INDEX instrução, que permite nomear o índice, especificar a tabela e qual coluna ou colunas indexar e indicar se o índice está em ordem crescente ou decrescente.

Os índices também podem ser únicos, como o UNIQUE restrição, na medida em que o índice evita entradas duplicadas na coluna ou combinação de colunas nas quais há um índice.

O comando CREATE INDEX

A sintaxe básica de um CREATE INDEX é o seguinte.

CREATE INDEX index_name ON table_name;

Índices de coluna única

Um índice de coluna única é criado com base em apenas uma coluna da tabela. A sintaxe básica é a seguinte.

CREATE INDEX index_name
ON table_name (column_name);

Índices Únicos

Índices exclusivos são usados ​​não apenas para desempenho, mas também para integridade de dados. Um índice exclusivo não permite que nenhum valor duplicado seja inserido na tabela. A sintaxe básica é a seguinte.

CREATE UNIQUE INDEX index_name
on table_name (column_name);

Índices Compostos

Um índice composto é um índice em duas ou mais colunas de uma tabela. Sua sintaxe básica é a seguinte.

CREATE INDEX index_name
on table_name (column1, column2);

Seja para criar um índice de coluna única ou um índice composto, leve em consideração a (s) coluna (s) que você pode usar com muita frequência na cláusula WHERE de uma consulta como condições de filtro.

Se houver apenas uma coluna usada, um índice de coluna única deve ser a escolha. Se houver duas ou mais colunas que são freqüentemente usadas na cláusula WHERE como filtros, o índice composto seria a melhor escolha.

Índices Implícitos

Índices implícitos são índices criados automaticamente pelo servidor de banco de dados quando um objeto é criado. Os índices são criados automaticamente para restrições de chave primária e restrições exclusivas.

O comando DROP INDEX

Um índice pode ser eliminado usando SQL DROPcomando. Deve-se ter cuidado ao eliminar um índice, pois o desempenho pode diminuir ou melhorar.

A sintaxe básica é a seguinte -

DROP INDEX index_name;

Você pode verificar o capítulo de restrição INDEX para ver alguns exemplos reais de índices.

Quando os índices devem ser evitados?

Embora os índices tenham como objetivo aprimorar o desempenho de um banco de dados, há momentos em que eles devem ser evitados.

As diretrizes a seguir indicam quando o uso de um índice deve ser reconsiderado.

  • Os índices não devem ser usados ​​em tabelas pequenas.

  • Tabelas que têm atualizações em lote frequentes e grandes ou operações de inserção.

  • Os índices não devem ser usados ​​em colunas que contêm um grande número de valores NULL.

  • As colunas que são frequentemente manipuladas não devem ser indexadas.

SQL - Comando ALTER TABLE

O SQL ALTER TABLEcomando é usado para adicionar, excluir ou modificar colunas em uma tabela existente. Você também deve usar o comando ALTER TABLE para adicionar e eliminar várias restrições em uma tabela existente.

Sintaxe

A sintaxe básica de um comando ALTER TABLE para adicionar um New Column em uma tabela existente é o seguinte.

ALTER TABLE table_name ADD column_name datatype;

A sintaxe básica de um comando ALTER TABLE para DROP COLUMN em uma tabela existente é o seguinte.

ALTER TABLE table_name DROP COLUMN column_name;

A sintaxe básica de um comando ALTER TABLE para alterar o DATA TYPE de uma coluna em uma tabela é o seguinte.

ALTER TABLE table_name MODIFY COLUMN column_name datatype;

A sintaxe básica de um comando ALTER TABLE para adicionar um NOT NULL restrição a uma coluna em uma tabela é a seguinte.

ALTER TABLE table_name MODIFY column_name datatype NOT NULL;

A sintaxe básica de ALTER TABLE para ADD UNIQUE CONSTRAINT a uma mesa é o seguinte.

ALTER TABLE table_name 
ADD CONSTRAINT MyUniqueConstraint UNIQUE(column1, column2...);

A sintaxe básica de um comando ALTER TABLE para ADD CHECK CONSTRAINT a uma mesa é o seguinte.

ALTER TABLE table_name 
ADD CONSTRAINT MyUniqueConstraint CHECK (CONDITION);

A sintaxe básica de um comando ALTER TABLE para ADD PRIMARY KEY restrição a uma tabela é a seguinte.

ALTER TABLE table_name 
ADD CONSTRAINT MyPrimaryKey PRIMARY KEY (column1, column2...);

A sintaxe básica de um comando ALTER TABLE para DROP CONSTRAINT de uma tabela é o seguinte.

ALTER TABLE table_name 
DROP CONSTRAINT MyUniqueConstraint;

Se você estiver usando MySQL, o código é o seguinte -

ALTER TABLE table_name 
DROP INDEX MyUniqueConstraint;

A sintaxe básica de um comando ALTER TABLE para DROP PRIMARY KEY restrição de uma tabela é a seguinte.

ALTER TABLE table_name 
DROP CONSTRAINT MyPrimaryKey;

Se você estiver usando MySQL, o código é o seguinte -

ALTER TABLE table_name 
DROP PRIMARY KEY;

Exemplo

Considere a tabela CLIENTES com os seguintes registros -

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

A seguir está o exemplo para ADICIONAR um New Column para uma mesa existente -

ALTER TABLE CUSTOMERS ADD SEX char(1);

Agora, a tabela CUSTOMERS foi alterada e o seguinte seria a saída da instrução SELECT.

+----+---------+-----+-----------+----------+------+
| ID | NAME    | AGE | ADDRESS   | SALARY   | SEX  |
+----+---------+-----+-----------+----------+------+
|  1 | Ramesh  |  32 | Ahmedabad |  2000.00 | NULL |
|  2 | Ramesh  |  25 | Delhi     |  1500.00 | NULL |
|  3 | kaushik |  23 | Kota      |  2000.00 | NULL |
|  4 | kaushik |  25 | Mumbai    |  6500.00 | NULL |
|  5 | Hardik  |  27 | Bhopal    |  8500.00 | NULL |
|  6 | Komal   |  22 | MP        |  4500.00 | NULL |
|  7 | Muffy   |  24 | Indore    | 10000.00 | NULL |
+----+---------+-----+-----------+----------+------+

A seguir está o exemplo para DROP a coluna sexo da tabela existente.

ALTER TABLE CUSTOMERS DROP SEX;

Agora, a tabela CUSTOMERS foi alterada e a seguir estaria a saída da instrução SELECT.

+----+---------+-----+-----------+----------+
| ID | NAME    | AGE | ADDRESS   | SALARY   |
+----+---------+-----+-----------+----------+
|  1 | Ramesh  |  32 | Ahmedabad |  2000.00 |
|  2 | Ramesh  |  25 | Delhi     |  1500.00 |
|  3 | kaushik |  23 | Kota      |  2000.00 |
|  4 | kaushik |  25 | Mumbai    |  6500.00 |
|  5 | Hardik  |  27 | Bhopal    |  8500.00 |
|  6 | Komal   |  22 | MP        |  4500.00 |
|  7 | Muffy   |  24 | Indore    | 10000.00 |
+----+---------+-----+-----------+----------+

SQL - Comando TRUNCATE TABLE

O SQL TRUNCATE TABLE comando é usado para excluir dados completos de uma tabela existente.

Você também pode usar o comando DROP TABLE para excluir a tabela completa, mas removeria a estrutura completa da tabela do banco de dados e você precisaria recriar esta tabela mais uma vez se desejar armazenar alguns dados.

Sintaxe

A sintaxe básica de um TRUNCATE TABLE comando é o seguinte.

TRUNCATE TABLE  table_name;

Exemplo

Considere uma tabela CUSTOMERS com os seguintes registros -

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

A seguir está o exemplo de um comando Truncate.

SQL > TRUNCATE TABLE CUSTOMERS;

Agora, a tabela CUSTOMERS está truncada e a saída da instrução SELECT será como mostrado no bloco de código abaixo -

SQL> SELECT * FROM CUSTOMERS;
Empty set (0.00 sec)

SQL - usando visualizações

Uma visão nada mais é do que uma instrução SQL armazenada no banco de dados com um nome associado. Uma visão é, na verdade, uma composição de uma tabela na forma de uma consulta SQL predefinida.

Uma visualização pode conter todas as linhas de uma tabela ou selecionar linhas de uma tabela. Uma visão pode ser criada a partir de uma ou várias tabelas que dependem da consulta SQL escrita para criar uma visão.

Visualizações, que são um tipo de tabelas virtuais, permitem que os usuários façam o seguinte -

  • Estruture os dados de uma forma que os usuários ou classes de usuários considerem natural ou intuitiva.

  • Restrinja o acesso aos dados de forma que um usuário possa ver e (às vezes) modificar exatamente o que precisa e nada mais.

  • Resuma os dados de várias tabelas que podem ser usadas para gerar relatórios.

Criando Vistas

As visualizações do banco de dados são criadas usando o CREATE VIEWdeclaração. As visualizações podem ser criadas a partir de uma única tabela, várias tabelas ou outra visualização.

Para criar uma visualização, um usuário deve ter o privilégio de sistema apropriado de acordo com a implementação específica.

O básico CREATE VIEW a sintaxe é a seguinte -

CREATE VIEW view_name AS
SELECT column1, column2.....
FROM table_name
WHERE [condition];

Você pode incluir várias tabelas em sua instrução SELECT de maneira semelhante à usada em uma consulta SQL SELECT normal.

Exemplo

Considere a tabela CLIENTES com os seguintes registros -

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

A seguir está um exemplo para criar uma visualização da tabela CUSTOMERS. Essa visualização seria usada para ter o nome e idade do cliente da tabela CUSTOMERS.

SQL > CREATE VIEW CUSTOMERS_VIEW AS
SELECT name, age
FROM  CUSTOMERS;

Agora, você pode consultar CUSTOMERS_VIEW de maneira semelhante à consulta a uma tabela real. A seguir está um exemplo para o mesmo.

SQL > SELECT * FROM CUSTOMERS_VIEW;

Isso produziria o seguinte resultado.

+----------+-----+
| name     | age |
+----------+-----+
| Ramesh   |  32 |
| Khilan   |  25 |
| kaushik  |  23 |
| Chaitali |  25 |
| Hardik   |  27 |
| Komal    |  22 |
| Muffy    |  24 |
+----------+-----+

A OPÇÃO COM CHEQUE

O WITH CHECK OPTION é uma opção de instrução CREATE VIEW. O propósito de WITH CHECK OPTION é garantir que todos os UPDATE e INSERTs satisfaçam a (s) condição (ões) na definição da visão.

Se eles não satisfizerem a (s) condição (ões), o UPDATE ou INSERT retornará um erro.

O bloco de código a seguir tem um exemplo de criação da mesma visualização CUSTOMERS_VIEW com WITH CHECK OPTION.

CREATE VIEW CUSTOMERS_VIEW AS
SELECT name, age
FROM  CUSTOMERS
WHERE age IS NOT NULL
WITH CHECK OPTION;

A opção WITH CHECK neste caso deve negar a entrada de qualquer valor NULL na coluna AGE da visão, porque a visão é definida por dados que não possuem um valor NULL na coluna AGE.

Atualizando uma visualização

Uma visão pode ser atualizada sob certas condições que são fornecidas abaixo -

  • A cláusula SELECT não pode conter a palavra-chave DISTINCT.

  • A cláusula SELECT não pode conter funções de resumo.

  • A cláusula SELECT não pode conter funções definidas.

  • A cláusula SELECT não pode conter operadores de conjunto.

  • A cláusula SELECT não pode conter uma cláusula ORDER BY.

  • A cláusula FROM não pode conter várias tabelas.

  • A cláusula WHERE não pode conter subconsultas.

  • A consulta não pode conter GROUP BY ou HAVING.

  • As colunas calculadas não podem ser atualizadas.

  • Todas as colunas NOT NULL da tabela base devem ser incluídas na visualização para que a consulta INSERT funcione.

Portanto, se uma visualização satisfizer todas as regras mencionadas acima, você poderá atualizá-la. O seguinte bloco de código tem um exemplo para atualizar a idade de Ramesh.

SQL > UPDATE CUSTOMERS_VIEW
   SET AGE = 35
   WHERE name = 'Ramesh';

Isso, em última análise, atualizaria a tabela base CUSTOMERS e o mesmo se refletiria na própria visualização. Agora, tente consultar a tabela base e a instrução SELECT produziria o seguinte resultado.

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  35 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Inserindo Linhas em uma Visualização

Linhas de dados podem ser inseridas em uma visualização. As mesmas regras que se aplicam ao comando UPDATE também se aplicam ao comando INSERT.

Aqui, não podemos inserir linhas em CUSTOMERS_VIEW porque não incluímos todas as colunas NOT NULL nesta visão, caso contrário, você pode inserir linhas em uma visão de uma forma semelhante à de uma tabela.

Excluindo linhas em uma visualização

Linhas de dados podem ser excluídas de uma visualização. As mesmas regras que se aplicam aos comandos UPDATE e INSERT se aplicam ao comando DELETE.

A seguir está um exemplo para excluir um registro com AGE = 22.

SQL > DELETE FROM CUSTOMERS_VIEW
   WHERE age = 22;

Isso, em última análise, excluiria uma linha da tabela base CUSTOMERS e o mesmo se refletiria na própria visualização. Agora, tente consultar a tabela base e a instrução SELECT produziria o seguinte resultado.

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  35 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Queda de visualizações

Obviamente, onde você tem uma visualização, você precisa encontrar uma maneira de removê-la se ela não for mais necessária. A sintaxe é muito simples e é fornecida a seguir -

DROP VIEW view_name;

A seguir está um exemplo para eliminar CUSTOMERS_VIEW da tabela CUSTOMERS.

DROP VIEW CUSTOMERS_VIEW;

SQL - Cláusula Tendo

o HAVING Clause permite que você especifique as condições que filtram quais resultados de grupo aparecem nos resultados.

A cláusula WHERE coloca condições nas colunas selecionadas, enquanto a cláusula HAVING coloca condições nos grupos criados pela cláusula GROUP BY.

Sintaxe

O bloco de código a seguir mostra a posição da cláusula HAVING em uma consulta.

SELECT
FROM
WHERE
GROUP BY
HAVING
ORDER BY

A cláusula HAVING deve seguir a cláusula GROUP BY em uma consulta e também deve preceder a cláusula ORDER BY, se usada. O bloco de código a seguir tem a sintaxe da instrução SELECT incluindo a cláusula HAVING -

SELECT column1, column2
FROM table1, table2
WHERE [ conditions ]
GROUP BY column1, column2
HAVING [ conditions ]
ORDER BY column1, column2

Exemplo

Considere a tabela CUSTOMERS com os seguintes registros.

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

A seguir está um exemplo, que exibiria um registro para uma contagem de idade semelhante que seria maior ou igual a 2.

SQL > SELECT ID, NAME, AGE, ADDRESS, SALARY
FROM CUSTOMERS
GROUP BY age
HAVING COUNT(age) >= 2;

Isso produziria o seguinte resultado -

+----+--------+-----+---------+---------+
| ID | NAME   | AGE | ADDRESS | SALARY  |
+----+--------+-----+---------+---------+
|  2 | Khilan |  25 | Delhi   | 1500.00 |
+----+--------+-----+---------+---------+

SQL - transações

Uma transação é uma unidade de trabalho executada em um banco de dados. As transações são unidades ou sequências de trabalho realizadas em uma ordem lógica, seja de forma manual por um usuário ou automaticamente por algum tipo de programa de banco de dados.

Uma transação é a propagação de uma ou mais alterações no banco de dados. Por exemplo, se você estiver criando um registro ou atualizando um registro ou excluindo um registro da tabela, então você está executando uma transação nessa tabela. É importante controlar essas transações para garantir a integridade dos dados e tratar os erros do banco de dados.

Praticamente, você agrupará muitas consultas SQL em um grupo e executará todas elas juntas como parte de uma transação.

Propriedades das transações

As transações têm as quatro propriedades padrão a seguir, geralmente referidas pela sigla ACID.

  • Atomicity- garante que todas as operações dentro da unidade de trabalho sejam concluídas com sucesso. Caso contrário, a transação é abortada no ponto de falha e todas as operações anteriores voltam ao estado anterior.

  • Consistency - garante que o banco de dados mude de estado corretamente após uma transação confirmada com sucesso.

  • Isolation - permite que as transações operem de forma independente e transparente entre si.

  • Durability - garante que o resultado ou efeito de uma transação confirmada persiste em caso de falha do sistema.

Controle de transação

Os comandos a seguir são usados ​​para controlar transações.

  • COMMIT - para salvar as alterações.

  • ROLLBACK - para reverter as alterações.

  • SAVEPOINT - cria pontos dentro dos grupos de transações nas quais ROLLBACK.

  • SET TRANSACTION - Coloca um nome em uma transação.

Comandos de controle transacional

Comandos de controle transacional são usados ​​apenas com o DML Commandscomo - INSERT, UPDATE e DELETE apenas. Eles não podem ser usados ​​ao criar tabelas ou eliminá-los porque essas operações são confirmadas automaticamente no banco de dados.

O Comando COMMIT

O comando COMMIT é o comando transacional usado para salvar as alterações invocadas por uma transação no banco de dados.

O comando COMMIT é o comando transacional usado para salvar as alterações invocadas por uma transação no banco de dados. O comando COMMIT salva todas as transações no banco de dados desde o último comando COMMIT ou ROLLBACK.

A sintaxe do comando COMMIT é a seguinte.

COMMIT;

Example

Considere a tabela CLIENTES com os seguintes registros -

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

A seguir está um exemplo que excluiria os registros da tabela que têm idade = 25 e, em seguida, COMMIT as alterações no banco de dados.

SQL> DELETE FROM CUSTOMERS
   WHERE AGE = 25;
SQL> COMMIT;

Portanto, duas linhas da tabela seriam excluídas e a instrução SELECT produziria o seguinte resultado.

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

O comando ROLLBACK

O comando ROLLBACK é o comando transacional usado para desfazer transações que ainda não foram salvas no banco de dados. Este comando só pode ser usado para desfazer transações desde que o último comando COMMIT ou ROLLBACK foi emitido.

A sintaxe para um comando ROLLBACK é a seguinte -

ROLLBACK;

Example

Considere a tabela CLIENTES com os seguintes registros -

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

A seguir está um exemplo, que excluiria os registros da tabela que têm idade = 25 e, em seguida, ROLLBACK as alterações no banco de dados.

SQL> DELETE FROM CUSTOMERS
   WHERE AGE = 25;
SQL> ROLLBACK;

Portanto, a operação de exclusão não afetaria a tabela e a instrução SELECT produziria o seguinte resultado.

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

O Comando SAVEPOINT

Um SAVEPOINT é um ponto em uma transação em que você pode reverter a transação para um determinado ponto sem reverter toda a transação.

A sintaxe para um comando SAVEPOINT é mostrada abaixo.

SAVEPOINT SAVEPOINT_NAME;

Este comando serve apenas para a criação de um SAVEPOINT entre todas as instruções transacionais. O comando ROLLBACK é usado para desfazer um grupo de transações.

A sintaxe para reverter para um SAVEPOINT é mostrada a seguir.

ROLLBACK TO SAVEPOINT_NAME;

A seguir está um exemplo onde você planeja excluir os três registros diferentes da tabela CLIENTES. Você deseja criar um SAVEPOINT antes de cada exclusão, de forma que possa ROLLBACK para qualquer SAVEPOINT a qualquer momento para retornar os dados apropriados ao seu estado original.

Example

Considere a tabela CUSTOMERS com os seguintes registros.

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

O bloco de código a seguir contém a série de operações.

SQL> SAVEPOINT SP1;
Savepoint created.
SQL> DELETE FROM CUSTOMERS WHERE ID=1;
1 row deleted.
SQL> SAVEPOINT SP2;
Savepoint created.
SQL> DELETE FROM CUSTOMERS WHERE ID=2;
1 row deleted.
SQL> SAVEPOINT SP3;
Savepoint created.
SQL> DELETE FROM CUSTOMERS WHERE ID=3;
1 row deleted.

Agora que as três exclusões ocorreram, vamos supor que você mudou de ideia e decidiu ROLLBACK para o SAVEPOINT que você identificou como SP2. Como o SP2 foi criado após a primeira exclusão, as duas últimas exclusões foram desfeitas -

SQL> ROLLBACK TO SP2;
Rollback complete.

Observe que apenas a primeira exclusão ocorreu desde a reversão para o SP2.

SQL> SELECT * FROM CUSTOMERS;
+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+
6 rows selected.

O comando RELEASE SAVEPOINT

O comando RELEASE SAVEPOINT é usado para remover um SAVEPOINT que você criou.

A sintaxe para um comando RELEASE SAVEPOINT é a seguinte.

RELEASE SAVEPOINT SAVEPOINT_NAME;

Uma vez que um SAVEPOINT tenha sido liberado, você não pode mais usar o comando ROLLBACK para desfazer transações executadas desde o último SAVEPOINT.

O comando SET TRANSACTION

O comando SET TRANSACTION pode ser usado para iniciar uma transação do banco de dados. Este comando é usado para especificar características para a transação que se segue. Por exemplo, você pode especificar uma transação para ser somente leitura ou leitura e gravação.

A sintaxe para um comando SET TRANSACTION é a seguinte.

SET TRANSACTION [ READ WRITE | READ ONLY ];

SQL - operadores curinga

Já discutimos sobre o operador SQL LIKE, que é usado para comparar um valor a valores semelhantes usando os operadores curinga.

O SQL oferece suporte a dois operadores curinga em conjunto com o operador LIKE, que são explicados em detalhes na tabela a seguir.

Sr. Não. Curinga e descrição
1

The percent sign (%)

Corresponde a um ou mais caracteres.

Note - O MS Access usa o caractere curinga asterisco (*) em vez do caractere curinga de sinal de porcentagem (%).

2

The underscore (_)

Corresponde a um personagem.

Note - O MS Access usa um ponto de interrogação (?) Em vez do sublinhado (_) para corresponder a qualquer caractere.

O sinal de porcentagem representa zero, um ou vários caracteres. O sublinhado representa um único número ou um caractere. Esses símbolos podem ser usados ​​em combinações.

Sintaxe

A sintaxe básica de um operador '%' e '_' é a seguinte.

SELECT * FROM table_name
WHERE column LIKE 'XXXX%'

or 

SELECT * FROM table_name
WHERE column LIKE '%XXXX%'

or

SELECT * FROM table_name
WHERE column LIKE 'XXXX_'

or

SELECT * FROM table_name
WHERE column LIKE '_XXXX'

or

SELECT * FROM table_name
WHERE column LIKE '_XXXX_'

Você pode combinar um número N de condições usando os operadores AND ou OR. Aqui, XXXX pode ser qualquer valor numérico ou string.

Exemplo

A tabela a seguir contém vários exemplos que mostram a parte WHERE com diferentes cláusulas LIKE com operadores '%' e '_'.

Sr. Não. Declaração e descrição
1

WHERE SALARY LIKE '200%'

Encontra todos os valores que começam com 200.

2

WHERE SALARY LIKE '%200%'

Encontra qualquer valor que tenha 200 em qualquer posição.

3

WHERE SALARY LIKE '_00%'

Encontra qualquer valor que tenha 00 na segunda e na terceira posições.

4

WHERE SALARY LIKE '2_%_%'

Encontra qualquer valor que comece com 2 e tenha pelo menos 3 caracteres de comprimento.

5

WHERE SALARY LIKE '%2'

Encontra qualquer valor que termine com 2.

6

WHERE SALARY LIKE '_2%3'

Encontra qualquer valor que tenha 2 na segunda posição e termine com 3.

7

WHERE SALARY LIKE '2___3'

Encontra qualquer valor em um número de cinco dígitos que começa com 2 e termina com 3.

Tomemos um exemplo real, considere a tabela CLIENTES com os seguintes registros.

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

O bloco de código a seguir é um exemplo, que exibiria todos os registros da tabela CUSTOMERS onde SALÁRIO começa com 200.

SQL> SELECT * FROM CUSTOMERS
WHERE SALARY LIKE '200%';

Isso produziria o seguinte resultado.

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
+----+----------+-----+-----------+----------+

SQL - funções de data

A tabela a seguir contém uma lista de todas as funções importantes relacionadas à data e hora disponíveis por meio do SQL. Existem várias outras funções suportadas por seu RDBMS. A lista fornecida é baseada em MySQL RDBMS.

Sr. Não. Descrição da função
1 ADDDATE ()

Adiciona datas

2 TEMPO EXTRA()

Adiciona tempo

3 CONVERT_TZ ()

Converte de um fuso horário para outro

4 CURDATE ()

Retorna a data atual

5 CURRENT_DATE (), CURRENT_DATE

Sinônimos para CURDATE ()

6 CURRENT_TIME (), CURRENT_TIME

Sinônimos para CURTIME ()

7 CURRENT_TIMESTAMP (), CURRENT_TIMESTAMP

Sinônimos para AGORA ()

8 CURTIME ()

Retorna a hora atual

9 DATE_ADD ()

Adiciona duas datas

10 FORMATO DE DATA()

Formata a data conforme especificado

11 DATE_SUB ()

Subtrai duas datas

12 ENCONTRO()

Extrai a parte da data de uma data ou expressão datetime

13 DATEDIFF ()

Subtrai duas datas

14 DIA()

Sinônimo de DAYOFMONTH ()

15 DAYNAME ()

Retorna o nome do dia da semana

16 DIA DO MÊS()

Retorna o dia do mês (1-31)

17 DIA DA SEMANA()

Retorna o índice do dia da semana do argumento

18 DAYOFYEAR ()

Retorna o dia do ano (1-366)

19 EXTRAIR

Extrai parte de uma data

20 FROM_DAYS ()

Converte um número de dia em uma data

21 FROM_UNIXTIME ()

Formata a data como um carimbo de data / hora UNIX

22 HORA()

Extrai a hora

23 ÚLTIMO DIA

Retorna o último dia do mês para o argumento

24 LOCALTIME (), LOCALTIME

Sinônimo de AGORA ()

25 LOCALTIMESTAMP, LOCALTIMESTAMP ()

Sinônimo de AGORA ()

26 MAKEDATE ()

Cria uma data do ano e dia do ano

27 MAKETIME

MAKETIME ()

28 MICROSEGUNDO ()

Retorna os microssegundos do argumento

29 MINUTO()

Retorna o minuto do argumento

30 MÊS()

Retorna o mês a partir da data passada

31 MONTHNAME ()

Retorna o nome do mês

32 AGORA()

Retorna a data e hora atuais

33 PERIOD_ADD ()

Adiciona um período a um ano-mês

34 PERIOD_DIFF ()

Retorna o número de meses entre os períodos

35 TRIMESTRE()

Retorna o trimestre de um argumento de data

36 SEC_TO_TIME ()

Converte segundos para o formato 'HH: MM: SS'

37 SEGUNDO()

Retorna o segundo (0-59)

38 STR_DA_DATA ()

Converte uma string em uma data

39 SUBDATE ()

Quando chamado com três argumentos, é um sinônimo para DATE_SUB ()

40 SUBTIME ()

Subtrai tempos

41 SYSDATE ()

Retorna a hora em que a função é executada

42 TIME_FORMAT ()

Formatos como tempo

43 TIME_TO_SEC ()

Retorna o argumento convertido em segundos

44 TEMPO()

Extrai a parte do tempo da expressão passada

45 TIMEDIFF ()

Subtrai o tempo

46 TIMESTAMP ()

Com um único argumento, essa função retorna a expressão de data ou data e hora. Com dois argumentos, a soma dos argumentos

47 TIMESTAMPADD ()

Adiciona um intervalo a uma expressão datetime

48 TIMESTAMPDIFF ()

Subtrai um intervalo de uma expressão datetime

49 TO_DAYS ()

Retorna o argumento da data convertido em dias

50 UNIX_TIMESTAMP ()

Retorna um carimbo de data / hora UNIX

51 UTC_DATE ()

Retorna a data UTC atual

52 UTC_TIME ()

Retorna a hora UTC atual

53 UTC_TIMESTAMP ()

Retorna a data e hora UTC atual

54 SEMANA()

Retorna o número da semana

55 WEEKDAY ()

Retorna o índice do dia da semana

56 WEEKOFYEAR ()

Retorna a semana do calendário da data (1-53)

57 ANO()

Retorna o ano

58 SEMANA ANO ()

Retorna o ano e a semana

ADDDATE (data, unidade expr INTERVAL), ADDDATE (expr, dias)

Quando chamado com a forma INTERVAL do segundo argumento, ADDDATE () é um sinônimo para DATE_ADD (). A função relacionada SUBDATE () é um sinônimo para DATE_SUB (). Para obter informações sobre o argumento da unidade INTERVAL, consulte a discussão para DATE_ADD ().

mysql> SELECT DATE_ADD('1998-01-02', INTERVAL 31 DAY);
+---------------------------------------------------------+
| DATE_ADD('1998-01-02', INTERVAL 31 DAY)                 |
+---------------------------------------------------------+
| 1998-02-02                                              |
+---------------------------------------------------------+
1 row in set (0.00 sec)

mysql> SELECT ADDDATE('1998-01-02', INTERVAL 31 DAY);
+---------------------------------------------------------+
| ADDDATE('1998-01-02', INTERVAL 31 DAY)                  |
+---------------------------------------------------------+
| 1998-02-02                                              |
+---------------------------------------------------------+
1 row in set (0.00 sec)

Quando chamado com a forma de dias do segundo argumento, o MySQL o trata como um número inteiro de dias a ser adicionado a expr.

mysql> SELECT ADDDATE('1998-01-02', 31);
+---------------------------------------------------------+
| DATE_ADD('1998-01-02', INTERVAL 31 DAY)                 |
+---------------------------------------------------------+
| 1998-02-02                                              |
+---------------------------------------------------------+
1 row in set (0.00 sec)

ADDTIME (expr1, expr2)

ADDTIME () adiciona expr2 a expr1 e retorna o resultado. O expr1 é uma expressão de hora ou data e hora, enquanto o expr2 é uma expressão de tempo.

mysql> SELECT ADDTIME('1997-12-31 23:59:59.999999','1 1:1:1.000002');
+---------------------------------------------------------+
| DATE_ADD('1997-12-31 23:59:59.999999','1 1:1:1.000002') |
+---------------------------------------------------------+
| 1998-01-02 01:01:01.000001                              |
+---------------------------------------------------------+
1 row in set (0.00 sec)

CONVERT_TZ (dt, from_tz, to_tz)

Isso converte um valor datetime dt do fuso horário fornecido por from_tz para o fuso horário fornecido por to_tz e retorna o valor resultante. Esta função retorna NULL se os argumentos forem inválidos.

mysql> SELECT CONVERT_TZ('2004-01-01 12:00:00','GMT','MET');
+---------------------------------------------------------+
| CONVERT_TZ('2004-01-01 12:00:00','GMT','MET')           |
+---------------------------------------------------------+
| 2004-01-01 13:00:00                                     |
+---------------------------------------------------------+
1 row in set (0.00 sec)

mysql> SELECT CONVERT_TZ('2004-01-01 12:00:00','+00:00','+10:00');
+---------------------------------------------------------+
| CONVERT_TZ('2004-01-01 12:00:00','+00:00','+10:00')     |
+---------------------------------------------------------+
| 2004-01-01 22:00:00                                     |
+---------------------------------------------------------+
1 row in set (0.00 sec)

CURDATE ()

Retorna a data atual como um valor no formato 'AAAA-MM-DD' ou AAAAMMDD, dependendo se a função é usada em uma string ou em um contexto numérico.

mysql> SELECT CURDATE();
+---------------------------------------------------------+
| CURDATE()                                               |
+---------------------------------------------------------+
| 1997-12-15                                              |
+---------------------------------------------------------+
1 row in set (0.00 sec)

mysql> SELECT CURDATE() + 0;
+---------------------------------------------------------+
| CURDATE() + 0                                           |
+---------------------------------------------------------+
| 19971215                                                |
+---------------------------------------------------------+
1 row in set (0.00 sec)

CURRENT_DATE e CURRENT_DATE ()

CURRENT_DATE e CURRENT_DATE () são sinônimos para CURDATE ()

CURTIME ()

Retorna a hora atual como um valor no formato 'HH: MM: SS' ou HHMMSS, dependendo se a função é usada em uma string ou em um contexto numérico. O valor é expresso no fuso horário atual.

mysql> SELECT CURTIME();
+---------------------------------------------------------+
| CURTIME()                                               |
+---------------------------------------------------------+
| 23:50:26                                                |
+---------------------------------------------------------+
1 row in set (0.00 sec)

mysql> SELECT CURTIME() + 0;
+---------------------------------------------------------+
| CURTIME() + 0                                           |
+---------------------------------------------------------+
| 235026                                                  |
+---------------------------------------------------------+
1 row in set (0.00 sec)

CURRENT_TIME e CURRENT_TIME ()

CURRENT_TIME e CURRENT_TIME () são sinônimos para CURTIME ().

CURRENT_TIMESTAMP e CURRENT_TIMESTAMP ()

CURRENT_TIMESTAMP e CURRENT_TIMESTAMP () são sinônimos para NOW ().

DATA (expr)

Extrai a parte da data da expressão data ou data e hora expr.

mysql> SELECT DATE('2003-12-31 01:02:03');
+---------------------------------------------------------+
| DATE('2003-12-31 01:02:03')                             |
+---------------------------------------------------------+
|  2003-12-31                                             |
+---------------------------------------------------------+
1 row in set (0.00 sec)

DATEDIFF (expr1, expr2)

DATEDIFF () retorna expr1. expr2 expresso como um valor em dias de uma data a outra. Expr1 e expr2 são expressões de data ou data e hora. Apenas as partes da data dos valores são usadas no cálculo.

mysql> SELECT DATEDIFF('1997-12-31 23:59:59','1997-12-30');
+---------------------------------------------------------+
| DATEDIFF('1997-12-31 23:59:59','1997-12-30')            |
+---------------------------------------------------------+
| 1                                                       |
+---------------------------------------------------------+
1 row in set (0.00 sec)

DATE_ADD (data, unidade expr INTERVAL), DATE_SUB (data, unidade expr INTERVAL)

Essas funções realizam aritmética de data. odateé um valor DATETIME ou DATE especificando a data de início. oexpré uma expressão que especifica o valor do intervalo a ser adicionado ou subtraído da data de início. O expr é uma string; pode começar com '-' para intervalos negativos.

UMA unit é uma palavra-chave que indica as unidades em que a expressão deve ser interpretada.

o INTERVAL a palavra-chave e o especificador de unidade não diferenciam maiúsculas de minúsculas.

A tabela a seguir mostra a forma esperada do argumento expr para cada valor de unidade.

valor unitário ExprFormat esperado
MICROSEGUNDO MICROSEGUNDOS
SEGUNDO SEGUNDOS
MINUTO MINUTOS
HORA HORAS
DIA DIAS
SEMANA SEMANAS
MÊS MESES
TRIMESTRE QUARTERS
ANO ANOS
SECOND_MICROSECOND 'SECONDS.MICROSECONDS'
MINUTE_MICROSECOND 'MINUTES.MICROSECONDS'
MINUTE_SECOND 'MINUTES: SECONDS'
HOUR_MICROSECOND 'HOURS.MICROSECONDS'
HOUR_SECOND 'HOURS: MINUTES: SECONDS'
HOUR_MINUTE 'HOURS: MINUTES'
DAY_MICROSECOND 'DIAS.MICROSECONDS'
DAY_SECOND 'DAYS HOURS: MINUTES: SECONDS'
DAY_MINUTE 'DAYS HOURS: MINUTES'
DAY_HOUR 'DAYS HOURS'
ANO MÊS 'ANOS-MESES'

Os valores QUARTER e WEEKestão disponíveis no MySQL 5.0.0. versão.

mysql> SELECT DATE_ADD('1997-12-31 23:59:59', 
   -> INTERVAL '1:1' MINUTE_SECOND);
+---------------------------------------------------------+
| DATE_ADD('1997-12-31 23:59:59', INTERVAL...             |
+---------------------------------------------------------+
| 1998-01-01 00:01:00                                     |
+---------------------------------------------------------+
1 row in set (0.00 sec)

mysql> SELECT DATE_ADD('1999-01-01', INTERVAL 1 HOUR);
+---------------------------------------------------------+
| DATE_ADD('1999-01-01', INTERVAL 1 HOUR)                 |
+---------------------------------------------------------+
| 1999-01-01 01:00:00                                     |
+---------------------------------------------------------+
1 row in set (0.00 sec)

DATE_FORMAT (data, formato)

Este comando formata o valor da data de acordo com a string de formato.

Os seguintes especificadores podem ser usados ​​na string de formato. O caractere '%' é necessário antes dos caracteres do especificador de formato.

Sr. Não. Especificador e descrição
1

%a

Nome abreviado do dia da semana (dom .. sáb)

2

%b

Nome abreviado do mês (Jan..Dez)

3

%c

Mês, numérico (0..12)

4

%D

Dia do mês com sufixo inglês (0th, 1st, 2nd, 3rd,.)

5

%d

Dia do mês, numérico (00..31)

6

%e

Dia do mês, numérico (0..31)

7

%f

Microssegundos (000000..999999)

8

%H

Hora (00..23)

9

%h

Hora (01..12)

10

%I

Hora (01..12)

11

%i

Minutos, numérico (00..59)

12

%j

Dia do ano (001..366)

13

%k

Hora (0..23)

14

%l

Hora (1..12)

15

%M

Nome do mês (janeiro .. dezembro)

16

%m

Mês, numérico (00..12)

17

%p

AM ou PM

18

%r

Tempo, 12 horas (hh: mm: ss seguido por AM ou PM)

19

%S

Segundos (00..59)

20

%s

Segundos (00..59)

21

%T

Tempo, 24 horas (hh: mm: ss)

22

%U

Semana (00..53), onde domingo é o primeiro dia da semana

23

%u

Semana (00..53), onde segunda-feira é o primeiro dia da semana

24

%V

Semana (01..53), onde domingo é o primeiro dia da semana; usado com% X

25

%v

Semana (01..53), onde segunda-feira é o primeiro dia da semana; usado com% x

26

%W

Nome do dia da semana (domingo .. sábado)

27

%w

Dia da semana (0 = domingo..6 = sábado)

28

%X

Ano para a semana em que domingo é o primeiro dia da semana, numérico, quatro dígitos; usado com% V

29

%x

Ano para a semana, onde segunda-feira é o primeiro dia da semana, numérico, quatro dígitos; usado com% v

30

%Y

Ano, numérico, quatro dígitos

31

%y

Ano, numérico (dois dígitos)

32

%%

Um literal.%. personagem

33

%x

x, para any.x. não listado acima

mysql> SELECT DATE_FORMAT('1997-10-04 22:23:00', '%W %M %Y');
+---------------------------------------------------------+
| DATE_FORMAT('1997-10-04 22:23:00', '%W %M %Y')          |
+---------------------------------------------------------+
| Saturday October 1997                                   |
+---------------------------------------------------------+
1 row in set (0.00 sec)

mysql> SELECT DATE_FORMAT('1997-10-04 22:23:00'
   -> '%H %k %I %r %T %S %w');
+---------------------------------------------------------+
| DATE_FORMAT('1997-10-04 22:23:00.......                 |
+---------------------------------------------------------+
|  22 22 10 10:23:00 PM 22:23:00 00 6                     |
+---------------------------------------------------------+
1 row in set (0.00 sec)

DATE_SUB (data, unidade expr INTERVAL)

Isso é semelhante à função DATE_ADD ().

DAY (data)

O DAY () é um sinônimo para a função DAYOFMONTH ().

DAYNAME (data)

Retorna o nome do dia da semana para a data.

mysql> SELECT DAYNAME('1998-02-05');
+---------------------------------------------------------+
| DAYNAME('1998-02-05')                                   |
+---------------------------------------------------------+
| Thursday                                                |
+---------------------------------------------------------+
1 row in set (0.00 sec)

DAYOFMONTH (data)

Retorna o dia do mês para a data, no intervalo de 0 a 31.

mysql> SELECT DAYOFMONTH('1998-02-03');
+---------------------------------------------------------+
| DAYOFMONTH('1998-02-03')                                |
+---------------------------------------------------------+
| 3                                                       |
+---------------------------------------------------------+
1 row in set (0.00 sec)

DAYOFWEEK (data)

Retorna o índice do dia da semana para a data (1 = domingo, 2 = segunda-feira,., 7 = sábado). Esses valores de índice correspondem ao padrão ODBC.

mysql> SELECT DAYOFWEEK('1998-02-03');
+---------------------------------------------------------+
|DAYOFWEEK('1998-02-03')                                  |
+---------------------------------------------------------+
| 3                                                       |
+---------------------------------------------------------+
1 row in set (0.00 sec)

DAYOFYEAR (data)

Retorna o dia do ano para a data, no intervalo de 1 a 366.

mysql> SELECT DAYOFYEAR('1998-02-03');
+---------------------------------------------------------+
| DAYOFYEAR('1998-02-03')                                 |
+---------------------------------------------------------+
| 34                                                      |
+---------------------------------------------------------+
1 row in set (0.00 sec)

EXTRACT (unidade DE data)

A função EXTRACT () usa os mesmos tipos de especificadores de unidade que DATE_ADD () ou DATE_SUB (), mas extrai partes da data em vez de realizar aritmética de data.

mysql> SELECT EXTRACT(YEAR FROM '1999-07-02');
+---------------------------------------------------------+
| EXTRACT(YEAR FROM '1999-07-02')                         |
+---------------------------------------------------------+
| 1999                                                    |
+---------------------------------------------------------+
1 row in set (0.00 sec)

mysql> SELECT EXTRACT(YEAR_MONTH FROM '1999-07-02 01:02:03');
+---------------------------------------------------------+
| EXTRACT(YEAR_MONTH FROM '1999-07-02 01:02:03')          |
+---------------------------------------------------------+
| 199907                                                  |
+---------------------------------------------------------+
1 row in set (0.00 sec)

FROM_DAYS (N)

Dado um número de dia N, retorna um valor DATE.

mysql> SELECT FROM_DAYS(729669);
+---------------------------------------------------------+
| FROM_DAYS(729669)                                       |
+---------------------------------------------------------+
| 1997-10-07                                              |
+---------------------------------------------------------+
1 row in set (0.00 sec)

Note- Use FROM_DAYS () com cuidado em datas antigas. Não se destina ao uso com valores anteriores ao advento do calendário gregoriano (1582).

FROM_UNIXTIME (unix_timestamp)

FROM_UNIXTIME (unix_timestamp, formato)

Retorna uma representação do unix_timestampargumento como um valor no formato 'AAAA-MM-DD HH: MM: SS ou AAAAMMDDHHMMSS, dependendo se a função é usada em uma string ou em um contexto numérico. O valor é expresso no fuso horário atual. O argumento unix_timestamp é um valor de carimbo de data / hora interno, que é produzido peloUNIX_TIMESTAMP() função.

Se o formato for fornecido, o resultado é formatado de acordo com a string de formato, que é usada da mesma forma que está listada na entrada para o DATE_FORMAT() função.

mysql> SELECT FROM_UNIXTIME(875996580);
+---------------------------------------------------------+
| FROM_UNIXTIME(875996580)                                |
+---------------------------------------------------------+
| 1997-10-04 22:23:00                                     |
+---------------------------------------------------------+
1 row in set (0.00 sec)

HORA (hora)

Retorna a hora para o tempo. O intervalo do valor de retorno é de 0 a 23 para valores de hora do dia. No entanto, o intervalo de valores TIME é, na verdade, muito maior, então HOUR pode retornar valores maiores que 23.

mysql> SELECT HOUR('10:05:03');
+---------------------------------------------------------+
| HOUR('10:05:03')                                        |
+---------------------------------------------------------+
| 10                                                      |
+---------------------------------------------------------+
1 row in set (0.00 sec)

LAST_DAY (data)

Obtém um valor de data ou data e hora e retorna o valor correspondente para o último dia do mês. Retorna NULL se o argumento for inválido.

mysql> SELECT LAST_DAY('2003-02-05');
+---------------------------------------------------------+
| LAST_DAY('2003-02-05')                                  |
+---------------------------------------------------------+
| 2003-02-28                                              |
+---------------------------------------------------------+
1 row in set (0.00 sec)

LOCALTIME e LOCALTIME ()

LOCALTIME e LOCALTIME () são sinônimos para NOW ().

LOCALTIMESTAMP e LOCALTIMESTAMP ()

LOCALTIMESTAMP e LOCALTIMESTAMP () são sinônimos para NOW ().

MAKEDATE (ano, dia do ano)

Retorna uma data, dados os valores de ano e dia do ano. O valor dayofyear deve ser maior que 0 ou o resultado será NULL.

mysql> SELECT MAKEDATE(2001,31), MAKEDATE(2001,32);
+---------------------------------------------------------+
| MAKEDATE(2001,31), MAKEDATE(2001,32)                    |
+---------------------------------------------------------+
| '2001-01-31', '2001-02-01'                              |
+---------------------------------------------------------+
1 row in set (0.00 sec)

MAKETIME (hora, minuto, segundo)

Retorna um valor de tempo calculado a partir dos argumentos de hora, minuto e segundo.

mysql> SELECT MAKETIME(12,15,30);
+---------------------------------------------------------+
| MAKETIME(12,15,30)                                      |
+---------------------------------------------------------+
| '12:15:30'                                              |
+---------------------------------------------------------+
1 row in set (0.00 sec)

MICROSEGUNDO (expr)

Retorna os microssegundos da expressão de hora ou data e hora (expr) como um número no intervalo de 0 a 999999.

mysql> SELECT MICROSECOND('12:00:00.123456');
+---------------------------------------------------------+
| MICROSECOND('12:00:00.123456')                          |
+---------------------------------------------------------+
| 123456                                                  |
+---------------------------------------------------------+
1 row in set (0.00 sec)

MINUTE (hora)

Retorna o minuto para hora, no intervalo de 0 a 59.

mysql> SELECT MINUTE('98-02-03 10:05:03');
+---------------------------------------------------------+
| MINUTE('98-02-03 10:05:03')                             |
+---------------------------------------------------------+
| 5                                                       |
+---------------------------------------------------------+
1 row in set (0.00 sec)

Data do mês)

Retorna o mês da data, no intervalo de 0 a 12.

mysql> SELECT MONTH('1998-02-03')
+---------------------------------------------------------+
| MONTH('1998-02-03')                                     |
+---------------------------------------------------------+
| 2                                                       |
+---------------------------------------------------------+
1 row in set (0.00 sec)

MONTHNAME (data)

Retorna o nome completo do mês para uma data.

mysql> SELECT MONTHNAME('1998-02-05');
+---------------------------------------------------------+
| MONTHNAME('1998-02-05')                                 |
+---------------------------------------------------------+
| February                                                |
+---------------------------------------------------------+
1 row in set (0.00 sec)

AGORA()

Retorna a data e a hora atuais como um valor no formato 'AAAA-MM-DD HH: MM: SS' ou AAAAMMDDHHMMSS, dependendo se a função é usada em uma string ou contexto numérico. Este valor é expresso no fuso horário atual.

mysql> SELECT NOW();
+---------------------------------------------------------+
| NOW()                                                   |
+---------------------------------------------------------+
| 1997-12-15 23:50:26                                     |
+---------------------------------------------------------+
1 row in set (0.00 sec)

PERIOD_ADD (P, N)

Adiciona N meses a um período P (no formato YYMM ou YYYYMM). Retorna um valor no formato AAAAMM. Observe que o argumento de período P não é um valor de data.

mysql> SELECT PERIOD_ADD(9801,2);
+---------------------------------------------------------+
| PERIOD_ADD(9801,2)                                      |
+---------------------------------------------------------+
| 199803                                                  |
+---------------------------------------------------------+
1 row in set (0.00 sec)

PERIOD_DIFF (P1, P2)

Retorna o número de meses entre os períodos P1 e P2. Esses períodos P1 e P2 devem estar no formato YYMM ou YYYYMM. Observe que os argumentos de período P1 e P2 não são valores de data.

mysql> SELECT PERIOD_DIFF(9802,199703);
+---------------------------------------------------------+
| PERIOD_DIFF(9802,199703)                                |
+---------------------------------------------------------+
| 11                                                      |
+---------------------------------------------------------+
1 row in set (0.00 sec)

QUARTER (data)

Retorna o trimestre do ano para a data, no intervalo de 1 a 4.

mysql> SELECT QUARTER('98-04-01');
+---------------------------------------------------------+
| QUARTER('98-04-01')                                     |
+---------------------------------------------------------+
| 2                                                       |
+---------------------------------------------------------+
1 row in set (0.00 sec)

Segundo tempo)

Retorna o segundo para o tempo, no intervalo de 0 a 59.

mysql> SELECT SECOND('10:05:03');
+---------------------------------------------------------+
| SECOND('10:05:03')                                      |
+---------------------------------------------------------+
| 3                                                       |
+---------------------------------------------------------+
1 row in set (0.00 sec)

SEC_TO_TIME (segundos)

Retorna o argumento de segundos, convertido em horas, minutos e segundos, como um valor no formato 'HH: MM: SS' ou HHMMSS, dependendo se a função é usada em uma string ou contexto numérico.

mysql> SELECT SEC_TO_TIME(2378);
+---------------------------------------------------------+
| SEC_TO_TIME(2378)                                       |
+---------------------------------------------------------+
| 00:39:38                                                |
+---------------------------------------------------------+
1 row in set (0.00 sec)

STR_TO_DATE (str, formato)

Este é o inverso da função DATE_FORMAT (). Leva uma string str e um formato de string de formato. A função STR_TO_DATE () retorna um valor DATETIME se a string de formato contiver partes de data e hora. Caso contrário, ele retorna um valor DATE ou TIME se a string contiver apenas partes de data ou hora.

mysql> SELECT STR_TO_DATE('04/31/2004', '%m/%d/%Y');
+---------------------------------------------------------+
| STR_TO_DATE('04/31/2004', '%m/%d/%Y')                   |
+---------------------------------------------------------+
| 2004-04-31                                              |
+---------------------------------------------------------+
1 row in set (0.00 sec)

SUBDATE (data, unidade expr INTERVAL) e SUBDATE (expr, dias)

Quando invocado com a forma INTERVAL do segundo argumento, SUBDATE () é um sinônimo para DATE_SUB (). Para obter informações sobre o argumento da unidade INTERVAL, consulte a discussão para DATE_ADD ().

mysql> SELECT DATE_SUB('1998-01-02', INTERVAL 31 DAY);
+---------------------------------------------------------+
| DATE_SUB('1998-01-02', INTERVAL 31 DAY)                 |
+---------------------------------------------------------+
| 1997-12-02                                              |
+---------------------------------------------------------+
1 row in set (0.00 sec)

mysql> SELECT SUBDATE('1998-01-02', INTERVAL 31 DAY);
+---------------------------------------------------------+
| SUBDATE('1998-01-02', INTERVAL 31 DAY)                  |
+---------------------------------------------------------+
| 1997-12-02                                              |
+---------------------------------------------------------+
1 row in set (0.00 sec)

SUBTIME (expr1, expr2)

A função SUBTIME () retorna expr1. expr2 expresso como um valor no mesmo formato que expr1. O valor expr1 é uma expressão de hora ou data e hora, enquanto o valor expr2 é uma expressão de hora.

mysql> SELECT SUBTIME('1997-12-31 23:59:59.999999',
   -> '1 1:1:1.000002');
+---------------------------------------------------------+
| SUBTIME('1997-12-31 23:59:59.999999'...                 |
+---------------------------------------------------------+
| 1997-12-30 22:58:58.999997                              |
+---------------------------------------------------------+
1 row in set (0.00 sec)

SYSDATE ()

Retorna a data e a hora atuais como um valor no formato 'AAAA-MM-DD HH: MM: SS' ou AAAAMMDDHHMMSS, dependendo se a função é usada em uma string ou em um contexto numérico.

mysql> SELECT SYSDATE();
+---------------------------------------------------------+
| SYSDATE()                                               |
+---------------------------------------------------------+
| 2006-04-12 13:47:44                                     |
+---------------------------------------------------------+
1 row in set (0.00 sec)

TIME (expr)

Extrai a parte da hora da expressão de hora ou data e hora expr e o retorna como uma string.

mysql> SELECT TIME('2003-12-31 01:02:03');
+---------------------------------------------------------+
| TIME('2003-12-31 01:02:03')                             |
+---------------------------------------------------------+
| 01:02:03                                                |
+---------------------------------------------------------+
1 row in set (0.00 sec)

TIMEDIFF (expr1, expr2)

A função TIMEDIFF () retorna expr1. expr2 expresso como um valor de tempo. Esses valores expr1 e expr2 são expressões de hora ou data e hora, mas ambas devem ser do mesmo tipo.

mysql> SELECT TIMEDIFF('1997-12-31 23:59:59.000001',
   -> '1997-12-30 01:01:01.000002');
+---------------------------------------------------------+
| TIMEDIFF('1997-12-31 23:59:59.000001'.....              |
+---------------------------------------------------------+
|  46:58:57.999999                                        |
+---------------------------------------------------------+
1 row in set (0.00 sec)

TIMESTAMP (expr), TIMESTAMP (expr1, expr2)

Com um único argumento, esta função retorna a data ou expressão datetime expr como um valor datetime. Com dois argumentos, ele adiciona a expressão de tempo expr2 à expressão de data ou data e horaexpr1 e retorna o resultado como um valor de data e hora.

mysql> SELECT TIMESTAMP('2003-12-31');
+---------------------------------------------------------+
| TIMESTAMP('2003-12-31')                                 |
+---------------------------------------------------------+
| 2003-12-31 00:00:00                                     |
+---------------------------------------------------------+
1 row in set (0.00 sec)

TIMESTAMPADD (unidade, intervalo, datetime_expr)

Esta função adiciona o intervalo da expressão de número inteiro à expressão de data ou data e hora datetime_expr. A unidade para o intervalo é dada pelo argumento da unidade, que deve ser um dos seguintes valores -

  • FRAC_SECOND
  • SEGUNDO, MINUTO
  • HORA, DIA
  • WEEK
  • MONTH
  • QUARTER ou
  • YEAR

O valor da unidade pode ser especificado usando uma das palavras-chave conforme mostrado ou com um prefixo de SQL_TSI_.

Por exemplo, DAY e SQL_TSI_DAY são legais.

mysql> SELECT TIMESTAMPADD(MINUTE,1,'2003-01-02');
+---------------------------------------------------------+
| TIMESTAMPADD(MINUTE,1,'2003-01-02')                     |
+---------------------------------------------------------+
| 2003-01-02 00:01:00                                     |
+---------------------------------------------------------+
1 row in set (0.00 sec)

TIMESTAMPDIFF (unidade, datetime_expr1, datetime_expr2)

Retorna a diferença inteira entre as expressões de data ou data e hora datetime_expr1 e datetime_expr2. A unidade do resultado é fornecida pelo argumento da unidade. Os valores legais para a unidade são iguais aos listados na descrição da função TIMESTAMPADD ().

mysql> SELECT TIMESTAMPDIFF(MONTH,'2003-02-01','2003-05-01');
+---------------------------------------------------------+
| TIMESTAMPDIFF(MONTH,'2003-02-01','2003-05-01')          |
+---------------------------------------------------------+
| 3                                                       |
+---------------------------------------------------------+
1 row in set (0.00 sec)

TIME_FORMAT (hora, formato)

Esta função é usada como a função DATE_FORMAT (), mas a string de formato pode conter especificadores de formato apenas para horas, minutos e segundos.

Se o valor da hora contiver uma parte da hora maior que 23, a%H e%k Os especificadores de formato de hora produzem um valor maior do que o intervalo normal de 0 a 23. Os outros especificadores de formato de hora produzem o módulo de valor de hora 12.

mysql> SELECT TIME_FORMAT('100:00:00', '%H %k %h %I %l');
+---------------------------------------------------------+
| TIME_FORMAT('100:00:00', '%H %k %h %I %l')              |
+---------------------------------------------------------+
| 100 100 04 04 4                                         |
+---------------------------------------------------------+
1 row in set (0.00 sec)

TIME_TO_SEC (hora)

Retorna o argumento de tempo convertido em segundos.

mysql> SELECT TIME_TO_SEC('22:23:00');
+---------------------------------------------------------+
| TIME_TO_SEC('22:23:00')                                 |
+---------------------------------------------------------+
| 80580                                                   |
+---------------------------------------------------------+
1 row in set (0.00 sec)

Data de hoje)

Dada uma data, retorna um número de dia (o número de dias desde o ano 0).

mysql> SELECT TO_DAYS(950501);
+---------------------------------------------------------+
| TO_DAYS(950501)                                         |
+---------------------------------------------------------+
| 728779                                                  |
+---------------------------------------------------------+
1 row in set (0.00 sec)

UNIX_TIMESTAMP (), UNIX_TIMESTAMP (data)

Se chamada sem nenhum argumento, esta função retorna um timestamp Unix (segundos desde '1970-01-01 00:00:00' UTC) como um inteiro sem sinal. Se UNIX_TIMESTAMP () for chamado com um argumento de data, ele retornará o valor do argumento como segundos desde '1970-01-01 00:00:00' UTC. data pode ser uma string DATE, uma string DATETIME, um TIMESTAMP ou um número no formato AAMMDD ou AAAAMMDD.

mysql> SELECT UNIX_TIMESTAMP();
+---------------------------------------------------------+
| UNIX_TIMESTAMP()                                        |
+---------------------------------------------------------+
| 882226357                                               |
+---------------------------------------------------------+
1 row in set (0.00 sec)

mysql> SELECT UNIX_TIMESTAMP('1997-10-04 22:23:00');
+---------------------------------------------------------+
| UNIX_TIMESTAMP('1997-10-04 22:23:00')                   |
+---------------------------------------------------------+
| 875996580                                               |
+---------------------------------------------------------+
1 row in set (0.00 sec)

UTC_DATE, UTC_DATE ()

Retorna a data UTC atual como um valor no formato 'AAAA-MM-DD' ou AAAAMMDD, dependendo se a função é usada em uma string ou contexto numérico.

mysql> SELECT UTC_DATE(), UTC_DATE() + 0;
+---------------------------------------------------------+
| UTC_DATE(), UTC_DATE() + 0                              |
+---------------------------------------------------------+
| 2003-08-14, 20030814                                    |
+---------------------------------------------------------+
1 row in set (0.00 sec)

UTC_TIME, UTC_TIME ()

Retorna a hora UTC atual como um valor no formato 'HH: MM: SS' ou HHMMSS, dependendo se a função é usada em uma string ou contexto numérico.

mysql> SELECT UTC_TIME(), UTC_TIME() + 0;
+---------------------------------------------------------+
| UTC_TIME(), UTC_TIME() + 0                              |
+---------------------------------------------------------+
| 18:07:53, 180753                                        |
+---------------------------------------------------------+
1 row in set (0.00 sec)

UTC_TIMESTAMP, UTC_TIMESTAMP ()

Retorna a data e hora UTC atual como um valor em 'AAAA-MM-DD HH: MM: SS' ou em um formato AAAAMMDDHHMMSS, dependendo se a função é usada em uma string ou em um contexto numérico.

mysql> SELECT UTC_TIMESTAMP(), UTC_TIMESTAMP() + 0;
+---------------------------------------------------------+
| UTC_TIMESTAMP(), UTC_TIMESTAMP() + 0                    |
+---------------------------------------------------------+
| 2003-08-14 18:08:04, 20030814180804                     |
+---------------------------------------------------------+
1 row in set (0.00 sec)

SEMANA (data [, modo])

Esta função retorna o número da semana para a data. A forma de dois argumentos de WEEK () permite que você especifique se a semana começa em um domingo ou segunda-feira e se o valor de retorno deve estar no intervalo de 0 a 53 ou de 1 a 53. Se o argumento de modo for omitido, o valor da variável de sistema default_week_format é usado

Modo Primeiro dia da semana Alcance A semana 1 é a primeira semana.
0 Domigo 0-53 com um domingo neste ano
1 Segunda-feira 0-53 com mais de 3 dias este ano
2 Domigo 1-53 com um domingo neste ano
3 Segunda-feira 1-53 com mais de 3 dias este ano
4 Domigo 0-53 com mais de 3 dias este ano
5 Segunda-feira 0-53 com uma segunda-feira neste ano
6 Domigo 1-53 com mais de 3 dias este ano
7 Segunda-feira 1-53 com uma segunda-feira neste ano
mysql> SELECT WEEK('1998-02-20');
+---------------------------------------------------------+
| WEEK('1998-02-20')                                      |
+---------------------------------------------------------+
| 7                                                       |
+---------------------------------------------------------+
1 row in set (0.00 sec)

WEEKDAY (data)

Retorna o índice do dia da semana para a data (0 = segunda-feira, 1 = terça-feira,. 6 = domingo).

mysql> SELECT WEEKDAY('1998-02-03 22:23:00');
+---------------------------------------------------------+
| WEEKDAY('1998-02-03 22:23:00')                          |
+---------------------------------------------------------+
| 1                                                       |
+---------------------------------------------------------+
1 row in set (0.00 sec)

WEEKOFYEAR (data)

Retorna a semana do calendário da data como um número no intervalo de 1 a 53. WEEKOFYEAR () é uma função de compatibilidade equivalente a WEEK (data, 3).

mysql> SELECT WEEKOFYEAR('1998-02-20');
+---------------------------------------------------------+
| WEEKOFYEAR('1998-02-20')                                |
+---------------------------------------------------------+
| 8                                                       |
+---------------------------------------------------------+
1 row in set (0.00 sec)

ANO (data)

Retorna o ano para a data, no intervalo de 1000 a 9999, ou 0 para o .zero. encontro.

mysql> SELECT YEAR('98-02-03');
+---------------------------------------------------------+
| YEAR('98-02-03')                                        |
+---------------------------------------------------------+
| 1998                                                    |
+---------------------------------------------------------+
1 row in set (0.00 sec)

YEARWEEK (data), YEARWEEK (data, modo)

Retorna o ano e a semana para uma data. O argumento de modo funciona exatamente como o argumento de modo para a função WEEK (). O ano no resultado pode ser diferente do ano no argumento de data para a primeira e a última semana do ano.

mysql> SELECT YEARWEEK('1987-01-01');
+---------------------------------------------------------+
| YEAR('98-02-03')YEARWEEK('1987-01-01')                  |
+---------------------------------------------------------+
| 198653                                                  |
+---------------------------------------------------------+
1 row in set (0.00 sec)

Note - O número da semana é diferente do que a função WEEK () retornaria (0) para os argumentos opcionais 0 ou 1, pois WEEK () retorna a semana no contexto do ano fornecido.

SQL - Tabelas Temporárias

O que são tabelas temporárias?

Existem RDBMS, que suportam tabelas temporárias. Tabelas temporárias são um ótimo recurso que permite que vocêstore and process intermediate results usando os mesmos recursos de seleção, atualização e junção que você pode usar com tabelas típicas do SQL Server.

As tabelas temporárias podem ser muito úteis em alguns casos para manter dados temporários. A coisa mais importante que deve ser conhecida sobre as tabelas temporárias é que elas serão excluídas quando a sessão atual do cliente terminar.

As tabelas temporárias estão disponíveis no MySQL versão 3.23 em diante. Se você usar uma versão anterior do MySQL que 3.23, você não pode usar tabelas temporárias, mas você pode usarheap tables.

Conforme declarado anteriormente, as tabelas temporárias durarão apenas enquanto a sessão estiver ativa. Se você executar o código em um script PHP, a tabela temporária será destruída automaticamente quando a execução do script terminar. Se você estiver conectado ao servidor de banco de dados MySQL por meio do programa cliente MySQL, a tabela temporária existirá até que você feche o cliente ou destrua manualmente a tabela.

Exemplo

Aqui está um exemplo que mostra o uso de uma mesa temporária.

mysql> CREATE TEMPORARY TABLE SALESSUMMARY (
   -> product_name VARCHAR(50) NOT NULL
   -> , total_sales DECIMAL(12,2) NOT NULL DEFAULT 0.00
   -> , avg_unit_price DECIMAL(7,2) NOT NULL DEFAULT 0.00
   -> , total_units_sold INT UNSIGNED NOT NULL DEFAULT 0
);
Query OK, 0 rows affected (0.00 sec)

mysql> INSERT INTO SALESSUMMARY
   -> (product_name, total_sales, avg_unit_price, total_units_sold)
   -> VALUES
   -> ('cucumber', 100.25, 90, 2);

mysql> SELECT * FROM SALESSUMMARY;
+--------------+-------------+----------------+------------------+
| product_name | total_sales | avg_unit_price | total_units_sold |
+--------------+-------------+----------------+------------------+
| cucumber     |      100.25 |          90.00 |                2 |
+--------------+-------------+----------------+------------------+
1 row in set (0.00 sec)

Ao emitir um comando SHOW TABLES, sua tabela temporária não será listada na lista. Agora, se você efetuar logout da sessão MySQL e emitir um comando SELECT, não encontrará dados disponíveis no banco de dados. Mesmo sua mesa temporária não existirá.

Eliminando Tabelas Temporárias

Por padrão, todas as tabelas temporárias são excluídas pelo MySQL quando sua conexão com o banco de dados é encerrada. Ainda assim, se você quiser excluí-los no meio, você pode fazer isso emitindo umDROP TABLE comando.

A seguir está um exemplo de descartar uma mesa temporária.

mysql> CREATE TEMPORARY TABLE SALESSUMMARY (
   -> product_name VARCHAR(50) NOT NULL
   -> , total_sales DECIMAL(12,2) NOT NULL DEFAULT 0.00
   -> , avg_unit_price DECIMAL(7,2) NOT NULL DEFAULT 0.00
   -> , total_units_sold INT UNSIGNED NOT NULL DEFAULT 0
);
Query OK, 0 rows affected (0.00 sec)

mysql> INSERT INTO SALESSUMMARY
   -> (product_name, total_sales, avg_unit_price, total_units_sold)
   -> VALUES
   -> ('cucumber', 100.25, 90, 2);

mysql> SELECT * FROM SALESSUMMARY;
+--------------+-------------+----------------+------------------+
| product_name | total_sales | avg_unit_price | total_units_sold |
+--------------+-------------+----------------+------------------+
| cucumber     |      100.25 |          90.00 |                2 |
+--------------+-------------+----------------+------------------+
1 row in set (0.00 sec)
mysql> DROP TABLE SALESSUMMARY;
mysql>  SELECT * FROM SALESSUMMARY;
ERROR 1146: Table 'TUTORIALS.SALESSUMMARY' doesn't exist

SQL - Clonar tabelas

Pode haver uma situação em que você precise de uma cópia exata de uma tabela e os comandos CREATE TABLE ... ou SELECT ... não atendam aos seus propósitos porque a cópia deve incluir os mesmos índices, valores padrão e assim por diante.

Se você estiver usando MySQL RDBMS, você pode lidar com esta situação seguindo as etapas abaixo -

  • Use o comando SHOW CREATE TABLE para obter uma instrução CREATE TABLE que especifica a estrutura da tabela de origem, índices e tudo.

  • Modifique a instrução para alterar o nome da tabela para aquele da tabela clone e execute a instrução. Desta forma, você terá uma tabela de clones exata.

  • Opcionalmente, se você também precisar que o conteúdo da tabela seja copiado, emita uma instrução INSERT INTO ou SELECT também.

Exemplo

Experimente o seguinte exemplo para criar uma tabela clone para TUTORIALS_TBL cuja estrutura é a seguinte -

Step 1 - Obtenha a estrutura completa sobre a mesa.

SQL> SHOW CREATE TABLE TUTORIALS_TBL \G; 
*************************** 1. row *************************** 
      Table: TUTORIALS_TBL 
Create Table: CREATE TABLE 'TUTORIALS_TBL' ( 
  'tutorial_id' int(11) NOT NULL auto_increment, 
  'tutorial_title' varchar(100) NOT NULL default '', 
  'tutorial_author' varchar(40) NOT NULL default '', 
  'submission_date' date default NULL, 
  PRIMARY KEY  ('tutorial_id'), 
  UNIQUE KEY 'AUTHOR_INDEX' ('tutorial_author') 
) TYPE = MyISAM 
1 row in set (0.00 sec)

Step 2 - Renomeie esta tabela e crie outra.

SQL> CREATE TABLE `CLONE_TBL` ( 
  -> 'tutorial_id' int(11) NOT NULL auto_increment, 
  -> 'tutorial_title' varchar(100) NOT NULL default '', 
  -> 'tutorial_author' varchar(40) NOT NULL default '', 
  -> 'submission_date' date default NULL, 
  -> PRIMARY KEY  (`tutorial_id'), 
  -> UNIQUE KEY 'AUTHOR_INDEX' ('tutorial_author') 
-> ) TYPE = MyISAM; 
Query OK, 0 rows affected (1.80 sec)

Step 3- Após executar a etapa 2, você clonará uma tabela em seu banco de dados. Se você deseja copiar dados de uma tabela antiga, pode fazê-lo usando a instrução INSERT INTO ... SELECT.

SQL> INSERT INTO CLONE_TBL (tutorial_id, 
   ->                        tutorial_title, 
   ->                        tutorial_author, 
   ->                        submission_date) 
   -> SELECT tutorial_id,tutorial_title, 
   ->        tutorial_author,submission_date, 
   -> FROM TUTORIALS_TBL; 
Query OK, 3 rows affected (0.07 sec) 
Records: 3  Duplicates: 0  Warnings: 0

Por fim, você terá uma tabela de clones exata que deseja.

SQL - Subconsultas

Uma consulta subconsulta ou interna ou uma consulta aninhada é uma consulta em outra consulta SQL e incorporada na cláusula WHERE.

Uma subconsulta é usada para retornar dados que serão usados ​​na consulta principal como uma condição para restringir ainda mais os dados a serem recuperados.

As subconsultas podem ser usadas com as instruções SELECT, INSERT, UPDATE e DELETE junto com os operadores como =, <,>,> =, <=, IN, BETWEEN, etc.

Existem algumas regras que as subconsultas devem seguir -

  • As subconsultas devem ser colocadas entre parênteses.

  • Uma subconsulta pode ter apenas uma coluna na cláusula SELECT, a menos que várias colunas estejam na consulta principal da subconsulta para comparar suas colunas selecionadas.

  • Um comando ORDER BY não pode ser usado em uma subconsulta, embora a consulta principal possa usar um ORDER BY. O comando GROUP BY pode ser usado para executar a mesma função que ORDER BY em uma subconsulta.

  • Subconsultas que retornam mais de uma linha só podem ser usadas com vários operadores de valor, como o operador IN.

  • A lista SELECT não pode incluir nenhuma referência a valores que avaliam para um BLOB, ARRAY, CLOB ou NCLOB.

  • Uma subconsulta não pode ser imediatamente incluída em uma função definida.

  • O operador BETWEEN não pode ser usado com uma subconsulta. No entanto, o operador BETWEEN pode ser usado na subconsulta.

Subconsultas com a instrução SELECT

As subconsultas são usadas com mais freqüência com a instrução SELECT. A sintaxe básica é a seguinte -

SELECT column_name [, column_name ]
FROM   table1 [, table2 ]
WHERE  column_name OPERATOR
   (SELECT column_name [, column_name ]
   FROM table1 [, table2 ]
   [WHERE])

Exemplo

Considere a tabela CLIENTES com os seguintes registros -

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  35 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Agora, vamos verificar a seguinte subconsulta com uma instrução SELECT.

SQL> SELECT * 
   FROM CUSTOMERS 
   WHERE ID IN (SELECT ID 
         FROM CUSTOMERS 
         WHERE SALARY > 4500) ;

Isso produziria o seguinte resultado.

+----+----------+-----+---------+----------+
| ID | NAME     | AGE | ADDRESS | SALARY   |
+----+----------+-----+---------+----------+
|  4 | Chaitali |  25 | Mumbai  |  6500.00 |
|  5 | Hardik   |  27 | Bhopal  |  8500.00 |
|  7 | Muffy    |  24 | Indore  | 10000.00 |
+----+----------+-----+---------+----------+

Subconsultas com a instrução INSERT

As subconsultas também podem ser usadas com instruções INSERT. A instrução INSERT usa os dados retornados da subconsulta para inserir em outra tabela. Os dados selecionados na subconsulta podem ser modificados com qualquer uma das funções de caractere, data ou número.

A sintaxe básica é a seguinte.

INSERT INTO table_name [ (column1 [, column2 ]) ]
   SELECT [ *|column1 [, column2 ]
   FROM table1 [, table2 ]
   [ WHERE VALUE OPERATOR ]

Exemplo

Considere uma tabela CUSTOMERS_BKP com estrutura semelhante à tabela CUSTOMERS. Agora, para copiar a tabela CUSTOMERS completa para a tabela CUSTOMERS_BKP, você pode usar a seguinte sintaxe.

SQL> INSERT INTO CUSTOMERS_BKP
   SELECT * FROM CUSTOMERS 
   WHERE ID IN (SELECT ID 
   FROM CUSTOMERS) ;

Subconsultas com a instrução UPDATE

A subconsulta pode ser usada em conjunto com a instrução UPDATE. Tanto uma coluna quanto várias colunas em uma tabela podem ser atualizadas ao usar uma subconsulta com a instrução UPDATE.

A sintaxe básica é a seguinte.

UPDATE table
SET column_name = new_value
[ WHERE OPERATOR [ VALUE ]
   (SELECT COLUMN_NAME
   FROM TABLE_NAME)
   [ WHERE) ]

Exemplo

Assumindo que temos a tabela CUSTOMERS_BKP disponível, que é o backup da tabela CUSTOMERS. O exemplo a seguir atualiza SALÁRIO em 0,25 vezes na tabela CUSTOMERS para todos os clientes cuja IDADE seja maior ou igual a 27.

SQL> UPDATE CUSTOMERS
   SET SALARY = SALARY * 0.25
   WHERE AGE IN (SELECT AGE FROM CUSTOMERS_BKP
      WHERE AGE >= 27 );

Isso afetaria duas linhas e, finalmente, a tabela CUSTOMERS teria os seguintes registros.

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  35 | Ahmedabad |   125.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  2125.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Subconsultas com a instrução DELETE

A subconsulta pode ser usada em conjunto com a instrução DELETE como com qualquer outra instrução mencionada acima.

A sintaxe básica é a seguinte.

DELETE FROM TABLE_NAME
[ WHERE OPERATOR [ VALUE ]
   (SELECT COLUMN_NAME
   FROM TABLE_NAME)
   [ WHERE) ]

Exemplo

Supondo que tenhamos uma tabela CUSTOMERS_BKP disponível, que é um backup da tabela CUSTOMERS. O exemplo a seguir exclui os registros da tabela CUSTOMERS para todos os clientes cuja IDADE seja maior ou igual a 27.

SQL> DELETE FROM CUSTOMERS
   WHERE AGE IN (SELECT AGE FROM CUSTOMERS_BKP
      WHERE AGE >= 27 );

Isso impactaria duas linhas e, finalmente, a tabela CUSTOMERS teria os seguintes registros.

+----+----------+-----+---------+----------+
| ID | NAME     | AGE | ADDRESS | SALARY   |
+----+----------+-----+---------+----------+
|  2 | Khilan   |  25 | Delhi   |  1500.00 |
|  3 | kaushik  |  23 | Kota    |  2000.00 |
|  4 | Chaitali |  25 | Mumbai  |  6500.00 |
|  6 | Komal    |  22 | MP      |  4500.00 |
|  7 | Muffy    |  24 | Indore  | 10000.00 |
+----+----------+-----+---------+----------+

SQL - usando sequências

Uma sequência é um conjunto de inteiros 1, 2, 3, ... que são gerados em ordem sob demanda. As sequências são frequentemente usadas em bancos de dados porque muitos aplicativos exigem que cada linha de uma tabela contenha um valor exclusivo e as sequências fornecem uma maneira fácil de gerá-los.

Este capítulo descreve como usar sequências no MySQL.

Usando coluna AUTO_INCREMENT

A maneira mais simples no MySQL de usar sequências é definir uma coluna como AUTO_INCREMENT e deixar o resto para o MySQL cuidar.

Exemplo

Experimente o seguinte exemplo. Isso criará uma tabela e depois disso irá inserir algumas linhas nesta tabela onde não é necessário fornecer um ID de registro porque é auto-incrementado pelo MySQL.

mysql> CREATE TABLE INSECT
   -> (
   -> id INT UNSIGNED NOT NULL AUTO_INCREMENT,
   -> PRIMARY KEY (id),
   -> name VARCHAR(30) NOT NULL, # type of insect
   -> date DATE NOT NULL, # date collected
   -> origin VARCHAR(30) NOT NULL # where collected
);
Query OK, 0 rows affected (0.02 sec)
mysql> INSERT INTO INSECT (id,name,date,origin) VALUES
   -> (NULL,'housefly','2001-09-10','kitchen'),
   -> (NULL,'millipede','2001-09-10','driveway'),
   -> (NULL,'grasshopper','2001-09-10','front yard');
Query OK, 3 rows affected (0.02 sec)
Records: 3  Duplicates: 0  Warnings: 0
mysql> SELECT * FROM INSECT ORDER BY id;
+----+-------------+------------+------------+
| id | name        | date       | origin     |
+----+-------------+------------+------------+
|  1 | housefly    | 2001-09-10 | kitchen    |
|  2 | millipede   | 2001-09-10 | driveway   |
|  3 | grasshopper | 2001-09-10 | front yard |
+----+-------------+------------+------------+
3 rows in set (0.00 sec)

Obtenha os valores AUTO_INCREMENT

O LAST_INSERT_ID () é uma função SQL, então você pode usá-lo de dentro de qualquer cliente que saiba como emitir instruções SQL. Caso contrário, os scripts PERL e PHP fornecem funções exclusivas para recuperar o valor auto-incrementado do último registro.

Exemplo PERL

Use o mysql_insertidatributo para obter o valor AUTO_INCREMENT gerado por uma consulta. Este atributo é acessado por meio de um identificador de banco de dados ou um identificador de instrução, dependendo de como você emite a consulta. O exemplo a seguir faz referência a ele por meio do identificador do banco de dados.

$dbh->do ("INSERT INTO INSECT (name,date,origin) VALUES('moth','2001-09-14','windowsill')"); my $seq = $dbh->{mysql_insertid};

Exemplo de PHP

Depois de emitir uma consulta que gere um valor AUTO_INCREMENT, recupere o valor chamando o mysql_insert_id( ) função.

mysql_query ("INSERT INTO INSECT (name,date,origin)
VALUES('moth','2001-09-14','windowsill')", $conn_id);
$seq = mysql_insert_id ($conn_id);

Renumerando uma sequência existente

Pode haver um caso em que você tenha excluído muitos registros de uma tabela e queira reordenar todos os registros. Isso pode ser feito usando um truque simples, mas você deve ter muito cuidado ao fazer isso e verificar se sua mesa está tendo uma junção com outra mesa ou não.

Se você determinar que o novo sequenciamento de uma coluna AUTO_INCREMENT é inevitável, a maneira de fazer isso é remover a coluna da tabela e adicioná-la novamente.

O exemplo a seguir mostra como renumerar os valores de id na tabela de insetos usando esta técnica.

mysql> ALTER TABLE INSECT DROP id;
mysql> ALTER TABLE insect
   -> ADD id INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST,
   -> ADD PRIMARY KEY (id);

Iniciando uma sequência em um valor particular

Por padrão, o MySQL iniciará a sequência de 1, mas você pode especificar qualquer outro número também no momento da criação da tabela.

O bloco de código a seguir tem um exemplo em que o MySQL iniciará a sequência de 100.

mysql> CREATE TABLE INSECT
   -> (
   -> id INT UNSIGNED NOT NULL AUTO_INCREMENT = 100,
   -> PRIMARY KEY (id),
   -> name VARCHAR(30) NOT NULL, # type of insect
   -> date DATE NOT NULL, # date collected
   -> origin VARCHAR(30) NOT NULL # where collected
);

Como alternativa, você pode criar a tabela e definir o valor da sequência inicial com ALTER TABLE.

mysql> ALTER TABLE t AUTO_INCREMENT = 100;

SQL - Tratamento de duplicatas

Pode haver uma situação em que você tenha vários registros duplicados em uma tabela. Ao buscar esses registros, faz mais sentido buscar apenas registros únicos em vez de buscar registros duplicados.

O SQL DISTINCT A palavra-chave, que já discutimos, é usada em conjunto com a instrução SELECT para eliminar todos os registros duplicados e buscar apenas os registros únicos.

Sintaxe

A sintaxe básica de uma palavra-chave DISTINCT para eliminar registros duplicados é a seguinte.

SELECT DISTINCT column1, column2,.....columnN 
FROM table_name
WHERE [condition]

Exemplo

Considere a tabela CUSTOMERS com os seguintes registros.

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Primeiro, vamos ver como a seguinte consulta SELECT retorna registros de salários duplicados.

SQL> SELECT SALARY FROM CUSTOMERS
   ORDER BY SALARY;

Isso produziria o seguinte resultado, em que o salário de 2000 está chegando duas vezes, o que é um registro duplicado da tabela original.

+----------+
| SALARY   |
+----------+
|  1500.00 |
|  2000.00 |
|  2000.00 |
|  4500.00 |
|  6500.00 |
|  8500.00 |
| 10000.00 |
+----------+

Agora, vamos usar a palavra-chave DISTINCT com a consulta SELECT acima e ver o resultado.

SQL> SELECT DISTINCT SALARY FROM CUSTOMERS
   ORDER BY SALARY;

Isso produziria o seguinte resultado, onde não temos nenhuma entrada duplicada.

+----------+
| SALARY   |
+----------+
|  1500.00 |
|  2000.00 |
|  4500.00 |
|  6500.00 |
|  8500.00 |
| 10000.00 |
+----------+

Injeção SQL

Se você pegar a entrada de um usuário por meio de uma página da web e inseri-la em um banco de dados SQL, há uma chance de você ter se deixado vulnerável a um problema de segurança conhecido como SQL Injection. Este capítulo irá ensiná-lo como ajudar a evitar que isso aconteça e ajudá-lo a proteger seus scripts e instruções SQL em seus scripts do lado do servidor, como um script PERL.

A injeção geralmente ocorre quando você pede a entrada de um usuário, como seu nome e, em vez de um nome, eles fornecem uma instrução SQL que você executará inadvertidamente em seu banco de dados. Nunca confie nos dados fornecidos pelo usuário, processe esses dados somente após a validação; como regra, isso é feito porPattern Matching.

No exemplo abaixo, o name é restrito aos caracteres alfanuméricos mais sublinhados e a um comprimento entre 8 e 20 caracteres (modifique essas regras conforme necessário).

if (preg_match("/^\w{8,20}$/", $_GET['username'], $matches)) { $result = mysql_query("SELECT * FROM CUSTOMERS 
      WHERE name = $matches[0]");
} else {
   echo "user name not accepted";
}

Para demonstrar o problema, considere este trecho -

// supposed input
$name = "Qadir'; DELETE FROM CUSTOMERS;";
mysql_query("SELECT * FROM CUSTOMSRS WHERE name='{$name}'");

A chamada de função deve recuperar um registro da tabela CUSTOMERS onde a coluna de nome corresponde ao nome especificado pelo usuário. Sob circunstâncias normais,$nameconteria apenas caracteres alfanuméricos e talvez espaços, como a string ilia. Mas aqui, ao anexar uma consulta inteiramente nova a $ name, a chamada para o banco de dados se transforma em um desastre; a consulta DELETE injetada remove todos os registros da tabela CUSTOMERS.

Felizmente, se você usa MySQL, o mysql_query()função não permite o empilhamento de consultas ou a execução de várias consultas SQL em uma única chamada de função. Se você tentar empilhar consultas, a chamada falhará.

No entanto, outras extensões de banco de dados PHP, como SQLite e PostgreSQL felizmente execute consultas empilhadas, executando todas as consultas fornecidas em uma string e criando um sério problema de segurança.

Prevenção de injeção de SQL

Você pode lidar com todos os caracteres de escape de forma inteligente em linguagens de script como PERL e PHP. A extensão MySQL para PHP fornece a funçãomysql_real_escape_string() para escapar de caracteres de entrada que são especiais para MySQL.

if (get_magic_quotes_gpc()) {
   $name = stripslashes($name); } $name = mysql_real_escape_string($name); mysql_query("SELECT * FROM CUSTOMERS WHERE name='{$name}'");

O dilema LIKE

Para resolver o dilema LIKE, um mecanismo de escape personalizado deve converter os caracteres '%' e '_' fornecidos pelo usuário em literais. Usaraddcslashes(), uma função que permite especificar um intervalo de caracteres para o escape.

$sub = addcslashes(mysql_real_escape_string("%str"), "%_"); // $sub == \%str\_
mysql_query("SELECT * FROM messages 
   WHERE subject LIKE '{$sub}%'");

SQL - ajuste de banco de dados

Leva tempo para se tornar um especialista em banco de dados ou um administrador de banco de dados especialista. Tudo isso vem com muita experiência em vários designs de banco de dados e bons treinamentos.

Mas a lista a seguir pode ser útil para que os iniciantes tenham um bom desempenho de banco de dados -

  • Use o design de banco de dados 3BNF explicado neste tutorial no capítulo Conceitos de RDBMS.

  • Evite conversões de número para caractere porque os números e os caracteres se comparam de maneira diferente e levam ao rebaixamento do desempenho.

  • Ao usar a instrução SELECT, busque apenas as informações necessárias e evite usar * em suas consultas SELECT porque isso carregaria o sistema desnecessariamente.

  • Crie seus índices cuidadosamente em todas as tabelas onde você tem operações de pesquisa frequentes. Evite indexar nas tabelas onde você tem menos número de operações de pesquisa e mais número de operações de inserção e atualização.

  • Uma varredura de tabela completa ocorre quando as colunas na cláusula WHERE não têm um índice associado a elas. Você pode evitar uma varredura de tabela completa criando um índice nas colunas que são usadas como condições na cláusula WHERE de uma instrução SQL.

  • Tenha muito cuidado com os operadores de igualdade com números reais e valores de data / hora. Ambos podem ter pequenas diferenças que não são óbvias a olho nu, mas que tornam uma correspondência exata impossível, evitando que suas consultas retornem linhas.

  • Use a correspondência de padrões criteriosamente. LIKE COL% é uma condição WHERE válida, reduzindo o conjunto retornado apenas para os registros com dados começando com a string COL. No entanto, COL% Y não reduz ainda mais o conjunto de resultados retornados, pois% Y não pode ser avaliado com eficácia. O esforço para fazer a avaliação é muito grande para ser considerado. Nesse caso, o COL% é usado, mas o% Y é jogado fora. Pelo mesmo motivo, um caractere curinga% COL evita efetivamente que o filtro inteiro seja usado.

  • Ajuste suas consultas SQL examinando a estrutura das consultas (e subconsultas), a sintaxe SQL, para descobrir se você projetou suas tabelas para suportar a manipulação rápida de dados e escreveu a consulta de maneira ideal, permitindo que seu SGBD manipule os dados com eficiência .

  • Para consultas que são executadas regularmente, tente usar procedimentos. Um procedimento é um grupo potencialmente grande de instruções SQL. Os procedimentos são compilados pelo mecanismo de banco de dados e, em seguida, executados. Ao contrário de uma instrução SQL, o mecanismo de banco de dados não precisa otimizar o procedimento antes de ser executado.

  • Evite usar o operador lógico OR em uma consulta, se possível. OU inevitavelmente diminui a velocidade de quase qualquer consulta em uma tabela de tamanho substancial.

  • Você pode otimizar as cargas de dados em massa descartando os índices. Imagine a tabela de histórico com muitos milhares de linhas. Essa tabela de histórico também provavelmente terá um ou mais índices. Quando você pensa em um índice, normalmente pensa em um acesso mais rápido à tabela, mas no caso de carregamentos em lote, você pode se beneficiar eliminando o (s) índice (s).

  • Ao executar transações em lote, execute COMMIT após um bom número de criação de registros, em vez de criá-los após cada criação de registro.

  • Planeje a desfragmentação do banco de dados regularmente, mesmo que isso signifique desenvolver uma rotina semanal.

Ferramentas de ajuste integradas

A Oracle tem muitas ferramentas para gerenciar o desempenho da instrução SQL, mas entre elas duas são muito populares. Essas duas ferramentas são -

  • Explain plan - a ferramenta identifica o caminho de acesso que será percorrido quando a instrução SQL for executada.

  • tkprof - mede o desempenho por tempo decorrido durante cada fase do processamento da instrução SQL.

Se você deseja simplesmente medir o tempo decorrido de uma consulta no Oracle, pode usar o comando SQL * Plus SET TIMING ON.

Verifique sua documentação RDBMS para obter mais detalhes sobre as ferramentas mencionadas acima e desfragmentar o banco de dados.