Um exemplo de criação de uma consulta (Query) em um banco de dados MS SQL Server. O banco de dados está localizado em um arquivo local *.mdf. Como escrever consultas SQL - exemplos detalhados Colocando um controle DataGridView e configurando comunicações de banco de dados

Um exemplo de criação de uma consulta (Query) em um banco de dados MS SQL Server. O banco de dados está localizado em um arquivo local *.mdf. Como escrever consultas SQL - exemplos detalhados Colocando um controle DataGridView e configurando comunicações de banco de dados

Um exemplo de criação de uma consulta (Query) em um banco de dados MS SQL Server. O banco de dados está localizado em um arquivo local *.mdf

A tarefa

Foi especificado um banco de dados localizado no arquivo Education.mdf. O banco de dados contém duas tabelas interconectadas, Student e Session.

As tabelas são vinculadas entre si pelo campo ID_Book.

Utilizando as ferramentas do Microsoft Visual Studio, crie uma consulta chamada Consulta1, que terá a seguinte estrutura:

Nome do campo Mesa
Num_Livro Estudante
Nome Estudante
Matemática Sessão
Informática Sessão
Filosofia Sessão
Média Campo computacional

Execução (instruções passo a passo)

1. Baixe o Microsoft Visual Studio
2. Conecte o banco de dados Education.mdf à lista de bancos de dados no utilitário Server Explorer

Para não perder tempo desenvolvendo e vinculando tabelas do banco de dados Education.mdf, pode-se baixar um arquivo de um banco de dados previamente preparado. Após baixar e salvar em uma determinada pasta, o banco de dados precisa ser descompactado e conectado à lista de bancos de dados no utilitário Server Explorer.

A conexão de um banco de dados é implementada de uma das várias maneiras padrão:

  • selecionando o comando “Conectar ao Banco de Dados...” no menu Ferramentas;
  • selecionando o botão (comando) “Conectar ao Banco de Dados...” do utilitário Server Explorer.

Como resultado, será aberta uma janela do assistente na qual, através de várias etapas (janelas), é necessário configurar a conexão com o banco de dados.

Arroz. 1. Métodos para adicionar/conectar um banco de dados

Uma descrição detalhada de como conectar um banco de dados como o Microsoft SQL Server no Microsoft Visual Studio é fornecida no tópico:

  • Exemplo de criação/conexão EU banco de dados local do Microsoft SQL Server, localizado em um arquivo *.mdf

Após a conexão, a janela do utilitário Server Explorer será semelhante à mostrada na Figura 2.

Arroz. 2. Utilitário Server Explorer com banco de dados Education.mdf conectado

3. Adicionando uma nova solicitação. Nova equipe de consulta

Você pode criar consultas no banco de dados. No nosso caso, precisamos criar uma solicitação de acordo com as condições da tarefa.

A consulta é criada através do comando “Nova Consulta”, que é chamado no menu de contexto (Figura 3). Para chamar o comando, basta clicar com o botão direito na área do campo que está em destaque para exibição dos elementos do banco de dados Education.mdb. Ressalta-se que as solicitações não são salvas pelo sistema. As visualizações são usadas para exibir consultas salvas (complexas).

A Figura 3 mostra o menu de contexto que é acessado quando você clica na guia Visualizações. Neste menu você precisa selecionar o comando “Nova Consulta”. Este comando está na lista de menus de contexto de outros componentes do banco de dados (tabelas, gráficos, etc.).

Arroz. 3. Novo comando de consulta

Com isso, será aberta a janela “Adicionar Tabela”, na qual é necessário selecionar as tabelas cujos dados serão utilizados na consulta (Figura 4).

Arroz. 4. Selecionando as tabelas a serem utilizadas na consulta

Para o nosso caso, precisamos selecionar ambas as tabelas.

Como resultado, a janela do Microsoft Visual Studio terá a aparência mostrada na Figura 5.

Arroz. 5. Janela do MS Visual Studio após criar uma solicitação

Nas tabelas, você precisa selecionar os campos que serão utilizados na consulta. A ordem de seleção dos campos deve corresponder à forma como são exibidos na solicitação de acordo com as condições da tarefa. Isso significa que primeiro são selecionados os campos da tabela Aluno (NumBook, Nome) e depois são selecionados os campos da tabela Sessão (Matemática, Informática, Filosofia).

Para o nosso caso, a escolha dos campos é mostrada na Figura 6.

Arroz. 6. Selecionando campos para a solicitação

Como pode ser visto na Figura 6, uma consulta em SQL gerada pelo sistema é exibida na parte inferior da janela

SELECIONAR Aluno.Num_Livro, Aluno.Nome, Sessão.Matemática, Sessão.Informática, Sessão.Filosofia DE
4. Adicione um campo calculado Média

Para criar um campo calculado Média , é necessário alterar o texto desta consulta na janela onde a consulta SQL é exibida. Por exemplo:

SELECIONAR Aluno.Num_Livro, Aluno.Nome, Sessão.Matemática, Sessão.Informática, Sessão.Filosofia, (Sessão.Matemática + Sessão.Informática + Sessão.Filosofia) / 3,0 AS Média DE Sessão INNER JOIN Aluno ON Session.ID_Book = Aluno.ID_Book

É adicionado o campo de cálculo Média, que é a média aritmética (Figura 7).

SQL- Linguagem de consulta estruturada.
Nesta revisão, veremos os tipos mais comuns de consultas SQL.
O padrão SQL é definido ANSI(Instituto Nacional Americano de Padrões).
SQL é uma linguagem voltada especificamente para bancos de dados relacionais.

Particionamento SQL:


DDL
(Linguagem de definição de dados) - a chamada Linguagem de Descrição de Esquema em ANSI, consiste em comandos que criam objetos (tabelas, índices, visualizações, etc.) no banco de dados.
DML(Linguagem de manipulação de dados) é um conjunto de comandos que determina quais valores são representados nas tabelas em um determinado momento.
DCD(Linguagem de gerenciamento de dados) consiste em recursos que determinam se um usuário deve permitir ou não realizar determinadas ações. Eles fazem parte do ANSI DDL. Não se esqueça desses nomes. Estas não são linguagens diferentes, mas seções de comandos SQL agrupadas por suas funções.

Tipos de dados:

SQL Server – Tipos de dados

Descrição

grande (interno 8)

grande (interno 8)

binário(n)

binário(nem imagem

personagem
(sinônimo Caracteres)

nacional personagem ou texto

personagem variando(sinônimo char variando varchar)

caráter nacional variando ou texto

Data hora

data hora

decimal

também conhecido como numérico

dupla precisão

dupla precisão

inteiro (interno 4) (sinônimo: interno)

inteiro (interno 4)

figura nacional(sinônimo: figura nacional, nchar)

figura nacional

Numérico(sinônimos: decimal, dezembro)

caráter nacional variando(sinônimos: caracteres nacionais variados, nvarchar)

Caráter nacional variando

Data pequena

data hora

pequeno inteiro (interno 2)

pequeno inteiro (interno 2)

Dinheiro pequeno

variante_sql

Não mais suportado

Ntexto
A partir do SQL Server 2005, seu uso não é recomendado.

Carimbo de data e hora

Não suportado

minúsculoint (interno 1)

minúsculoint (interno 1)

Identificador único

identificador único

varbinário(n)

varbinário(nem imagem

data pequena

data hora

pequeno inteiro (interno 2)

pequeno inteiro (interno 2)

dinheiro pequeno

variante_sql

Não suportado

carimbo de data/hora

Não suportado

minúsculoint (interno 1)

minúsculoint (interno 1)

identificador único

identificador único

varbinário(n)

varbinário(nem imagem

Tabela de tipos de dados no SQL Server 2000

O QUE É UM PEDIDO?

Solicitaré um comando que você dá ao seu programa de banco de dados. As consultas fazem parte da linguagem DML. Todas as consultas SQL consistem em um único comando. A estrutura deste comando é aparentemente simples porque você deve estendê-lo para realizar avaliações e manipulações de dados altamente complexas.

Comando SELECIONAR:

SELECIONAR“Selecionar” é o comando usado com mais frequência;
Tipo de consulta usando SELECT:

SELECT id, nome_do_usuário, cidade, dia_de_nascimento FROM users_base;

Tal consulta exibirá na tabela users_base todos os valores das colunas especificadas separadas por vírgulas após o comando SELECT. Além disso, você pode exibir todas as colunas com um caractere, * ou seja, SELECT * FROM usuários_base; - tal consulta exibirá todos os dados da tabela.

Estrutura do comando SELECIONAR:

SELECT (Nomes de colunas separados por vírgulas que precisam ser exibidas na consulta) FROM (nome da tabela no banco de dados)
- Este é o tipo de solicitação mais simples. Existem comandos adicionais para recuperação conveniente de dados (veja abaixo “Funções”)

Comandos DML:

Os valores podem ser colocados e removidos dos campos usando três comandos DML (Data Manipulation Language):
INSERIR(Inserir)
ATUALIZAR(Atualização, modificação),
EXCLUIR(Excluir)

Comando INSERIR:

INSERT INTO users_base (nome_usuário, cidade, dia_nascimento) VALUES ('Alexander', 'Rostov', '20/06/1991');

O comando INSERT vem com o prefixo INTO (in to), depois entre colchetes estão os nomes das colunas nas quais devemos inserir os dados, depois vem o comando VALUES (valores) e entre colchetes os valores vêm por sua vez (é necessário observar a ordem dos valores com as colunas, os valores devem estar na mesma ordem das colunas que você especificou).

Comando ATUALIZAR:

ATUALIZAR usuários_base SET nome_usuário = 'Alexey';

O comando UPDATE atualiza valores em uma tabela. Primeiro vem o próprio comando UPDATE, depois o nome da tabela, depois do comando SET (set), depois o nome da coluna e seu valor entre aspas (as aspas são colocadas se o valor estiver no formato string, se for um valor numérico e a coluna não está vinculado ao tipo de dados vchar ou a qualquer outro tipo de string, as aspas não têm significado.)

Comando DELETAR:

DELETE FROM users_base WHERE nome_usuário = 'Vasily';

O comando DELETE exclui a linha inteira e identifica a linha usando o critério WHERE. Nesse caso, esta consulta excluiria todas as linhas nas quais o valor da coluna user_name fosse Vasily. Falaremos sobre o critério WHERE e outros um pouco mais tarde.

Critérios, funções, condições, etc. o que nos ajuda no SQL:

A cláusula WHERE é uma cláusula do comando SELECT e outros comandos DML que permite definir predicados cuja condição pode ser verdadeira ou falsa para qualquer linha da tabela. O comando recupera apenas as linhas da tabela para as quais esta afirmação é verdadeira.
Exemplo:
SELECIONE id, cidade, dia de nascimento FROM users_base WHERE user_name = ‘Alexey’;- tal consulta exibirá apenas as linhas que correspondem à condição WHERE, ou seja, todas as linhas nas quais a coluna user_name possui o valor Alexey.

ORDER BY - condição para ordenar as linhas selecionadas. Possui 2 critérios ASC e DESC. ASC (classificação de A a Z ou de 0 a 9)

DESC (oposto de ASC).
Exemplo:
SELECIONE id, cidade, dia de nascimento FROM users_base ORDER BY user_name ASC; - tal consulta exibirá valores classificados pela coluna user_name de A a Z (A-Z; 0-9)

Esta condição também pode ser usada em conjunto com a cláusula WHERE.
Exemplo:
SELECIONE id, cidade, dia de nascimento FROM users_base WHERE user_name = ‘Alexey’ ORDER BY id ASC;

DISTINCT é um argumento que fornece uma maneira de eliminar valores duplos da sua cláusula SELECT. Aqueles. se você tiver valores duplicados em uma coluna, digamos user_name, então DISTINCT mostrará apenas um valor, por exemplo, você tem 2 pessoas chamadas Alexey em seu banco de dados, então uma consulta usando a função DISTINCT mostrará apenas 1 valor que é encontrado primeiro...
Exemplo:
SELECT DISTINCT nome_de_usuário FROM users_base;- tal consulta nos mostrará os valores de todos os registros na coluna user_name, mas eles não serão repetidos, ou seja, se você tiver um número infinito de valores repetidos, eles não serão mostrados...

AND - pega dois booleanos (na forma A AND B) como argumentos e os avalia em relação à verdade, se ambos são verdadeiros.
Exemplo:
SELECT * FROM users_base WHERE city = 'Rostov' AND user_name = 'Alexander';- exibirá todos os valores da tabela onde o nome da cidade aparece em uma linha (neste caso, Rostov e o nome de usuário Alexander.

OR - pega dois booleanos (na forma A OR B) como argumentos e avalia se um deles está correto.

SELECT * FROM users_base WHERE cidade = 'Rostov' OR nome_do_usuário = 'Alexander';- exibirá todos os valores da tabela onde o nome da cidade de Rostov ou o nome de usuário Alexander aparece na linha.

NOT - pega um único booleano (na forma NOT A) como argumento e altera seu valor de falso para verdadeiro ou de verdadeiro para falso.
SELECIONE * FROM users_base WHERE cidade = 'Rostov' OU NÃO user_name = 'Alexander';- exibirá todos os valores da tabela onde o nome da cidade de Rostov aparece em uma linha ou o nome do usuário não é exatamente Alexander.

IN – define um conjunto de valores no qual determinado valor pode ou não ser incluído.
SELECT * FROM users_base WHERE cidade IN ('Vladivostok', 'Rostov');- tal consulta exibirá todos os valores da tabela que contém os nomes das cidades especificadas na coluna da cidade

Between é semelhante ao operador IN. Ao contrário de definir por números de um conjunto, como faz IN, BETWEEN define um intervalo cujos valores devem diminuir para tornar o predicado verdadeiro.
SELECT * FROM users_base WHERE id ENTRE 1 E 10;- exibe todos os valores da tabela que estarão no intervalo de 1 a 10 na coluna id

COUNT - Produz os números das linhas ou valores não NULOS dos campos que a consulta selecionou.
SELECIONE CONTAGEM (*) FROM users_base;- exibirá o número de linhas nesta tabela.
SELECIONE CONTAGEM (nome de usuário DISTINCT) FROM users_base;- exibirá o número de linhas com nomes de usuários (não repetidos)

SUM – produz a soma aritmética de todos os valores selecionados para um determinado campo.
SELECIONE SOMA (id) FROM users_base;- exibirá a soma dos valores de todas as linhas da coluna id.

AVG - calcula a média de todos os valores selecionados neste campo.
SELECIONE AVG (id) FROM users_base;- exibirá a média de todos os valores selecionados da coluna id

MAX - produz o maior de todos os valores selecionados para este campo.

MIN – produz o menor de todos os valores selecionados para este campo.

Criando tabelas:

CREATE TABLE users_base (id inteiro, texto do nome do usuário, texto da cidade, dia do nascimento, data e hora);- a execução de tal comando levará à criação da tabela para a qual dei exemplos... Tudo é simples aqui, escrevemos o comando CREATE TABLE, seguido do nome da tabela que queremos criar, depois entre parênteses, separados por vírgulas, os nomes das colunas e seu tipo de dados. Esta é a maneira padrão de criar uma tabela em SQL. Agora darei um exemplo de criação de tabelas no SQL Server 2005:

DEFINIR ANSI_NULLS ATIVADO
IR
DEFINIR QUOTED_IDENTIFIER ATIVADO
IR
SE NÃO EXISTE (SELECIONE * FROM sys.objects WHERE object_id = OBJECT_ID(N."") E digite (N"U"))
COMEÇAR
CRIAR A TABELA .(

NÃO NULO,
NÃO NULO,
NÃO NULO,
CHAVE PRIMÁRIA CLUSTERADA
A.S.C.


FIM
IR
DEFINIR ANSI_NULLS ATIVADO
IR
DEFINIR QUOTED_IDENTIFIER ATIVADO
IR
SE NÃO EXISTE (SELECIONE * FROM sys.objects WHERE object_id = OBJECT_ID(N."") E digite (N"U"))
COMEÇAR
CRIAR A TABELA .(
IDENTIDADE(1,1) NÃO NULA,
NULO,
NULO,
CHAVE PRIMÁRIA CLUSTERADA
A.S.C.
)COM (IGNORE_DUP_KEY = DESLIGADO) LIGADO
)ON TEXTIMAGE_ON
FIM
IR
DEFINIR ANSI_NULLS ATIVADO
IR
DEFINIR QUOTED_IDENTIFIER ATIVADO
IR
SE NÃO EXISTE (SELECIONE * FROM sys.objects WHERE object_id = OBJECT_ID(N."") E digite (N"U"))
COMEÇAR
CRIAR A TABELA .(
IDENTIDADE(1,1) NÃO NULA,
NULO,
NULO,
CHAVE PRIMÁRIA CLUSTERADA
A.S.C.
)COM (IGNORE_DUP_KEY = DESLIGADO) LIGADO
) SOBRE
FIM

Sintaxe no SQL Server 2005 é outro tópico, só queria mostrar que descrevi o básico da programação SQL, você pode chegar ao topo sozinho sabendo o básico.

Se você tiver alguma dúvida sobre este assunto, escreva para mim

SQL ou Structured Query Language é uma linguagem usada para gerenciar dados em um sistema de banco de dados relacional (RDBMS). Este artigo abordará comandos SQL comumente usados ​​com os quais todo programador deve estar familiarizado. Este material é ideal para quem deseja aprimorar seus conhecimentos em SQL antes de uma entrevista de emprego. Para fazer isso, observe os exemplos dados no artigo e lembre-se que você estudou bancos de dados em pares.

Observe que alguns sistemas de banco de dados exigem um ponto e vírgula no final de cada instrução. O ponto e vírgula é o ponteiro padrão para o final de cada instrução SQL. Os exemplos usam MySQL, portanto é necessário um ponto e vírgula.

Configurando um banco de dados para exemplos

Crie um banco de dados para demonstrar como as equipes trabalham. Para funcionar, você precisará baixar dois arquivos: DLL.sql e InsertStatements.sql. Depois disso, abra um terminal e faça login no console do MySQL usando o seguinte comando (o artigo pressupõe que o MySQL já esteja instalado no sistema):

Mysql -u raiz -p

Em seguida, digite sua senha.

Execute o seguinte comando. Vamos chamar o banco de dados de “universidade”:

CRIAR BANCO DE DADOS universitário; USE universidade; FONTE ; FONTE

Comandos para trabalhar com bancos de dados

1. Veja os bancos de dados disponíveis

MOSTRAR BANCOS DE DADOS;

2. Crie um novo banco de dados

CRIAR BANCO DE DADOS;

3. Selecionando um banco de dados para usar

USAR ;

4. Importe comandos SQL de um arquivo .sql

FONTE ;

5. Exclua o banco de dados

DEIXAR BANCO DE DADOS ;

Trabalhando com tabelas

6. Visualize as tabelas disponíveis no banco de dados

MOSTRAR TABELAS;

7. Crie uma nova tabela

CRIAR A TABELA ( , , CHAVE PRIMÁRIA ( ), CHAVE ESTRANGEIRA ( ) REFERÊNCIAS ());

Restrições de integridade ao usar CREATE TABLE

Talvez seja necessário criar restrições em determinadas colunas de uma tabela. Ao criar uma tabela, você pode definir as seguintes restrições:

  • uma célula da tabela não pode ter um valor NULL;
  • chave primária - CHAVE PRIMÁRIA (nome_col1, nome_col2, ...) ;
  • chave estrangeira - CHAVE ESTRANGEIRA (col_namex1,…, col_namexn) REFERÊNCIAS table_name(col_namex1, …, col_namexn) .

Você pode especificar mais de uma chave primária. Nesse caso, você obterá uma chave primária composta.

Exemplo

Crie uma tabela "instrutor":

Instrutor CREATE TABLE (ID CHAR(5), nome VARCHAR(20) NOT NULL, dept_name VARCHAR(20), salário NUMERIC(8,2), PRIMARY KEY (ID), FOREIGN KEY (dept_name) REFERENCES departamento(dept_name));

8. Informações da tabela

Você pode visualizar diversas informações (tipo de valor, chave ou não) sobre as colunas da tabela com o seguinte comando:

DESCREVER ;

9. Adicionando dados à tabela

INSIRA DENTRO DE (, , , ...) VALORES ( , , , …);

Ao adicionar dados a cada coluna de uma tabela, não é necessário especificar nomes de colunas.

INSIRA DENTRO DE VALORES ( , , , …);

10. Atualizando dados da tabela

ATUALIZAR DEFINIR = , = , ... ONDE ;

11. Removendo todos os dados da tabela

EXCLUIR DE ;

12. Exclua uma tabela

TABELA DE QUEDA ;

Comandos para criação de consultas

13. SELECIONE

SELECT é usado para recuperar dados de uma tabela específica:

SELECIONAR , , … DE ;

O seguinte comando pode exibir todos os dados da tabela:

SELECIONE DE ;

14. SELECIONE DISTINTO

As colunas da tabela podem conter dados duplicados. Use SELECT DISTINCT para recuperar apenas dados não duplicados.

SELECIONE DISTINTO , , … DE ;

15. ONDE

Você pode usar a palavra-chave WHERE em SELECT para especificar condições em uma consulta:

SELECIONAR , , … DE ONDE ;

As seguintes condições podem ser especificadas na solicitação:

  • comparação de texto;
  • comparação de valores numéricos;
  • operadores lógicos AND (e), OR (ou) e NOT (negação).

Exemplo

Experimente os seguintes comandos. Preste atenção às condições especificadas em ONDE:

SELECT * FROM curso WHERE dept_name=’Comp. Ciência'; SELECIONE *DO curso ONDE créditos>3; SELECT * FROM curso WHERE dept_name="Comp. Sci." E créditos>3;

16. GRUPO POR

O operador GROUP BY é frequentemente usado com funções agregadas como COUNT, MAX, MIN, SUM e AVG para agrupar valores de saída.

SELECIONAR , , … DE Agrupar por ;

Exemplo

Vamos exibir a quantidade de cursos de cada faculdade:

SELECT COUNT(curso_id), nome_depto FROM curso GROUP BY nome_depto;

17. TER

A palavra-chave HAVING foi adicionada ao SQL porque WHERE não pode ser usado com funções agregadas.

SELECIONAR , , ... DE Agrupar por TENDO

Exemplo

Vamos exibir uma lista de faculdades que possuem mais de um curso:

SELECT COUNT(course_id), dept_name FROM curso GROUP BY dept_name HAVING COUNT(course_id)>1;

18. ENCOMENDAR POR

ORDER BY é usado para classificar os resultados da consulta em ordem decrescente ou crescente. ORDER BY classificará em ordem crescente, a menos que ASC ou DESC seja especificado.

SELECIONAR , , … DE ORDENAR POR , , ...ASC|DESC;

Exemplo

Vamos exibir uma lista de cursos em ordem crescente e decrescente de créditos:

SELECIONE * DO curso ORDER BY créditos; SELECIONE * DO curso ORDENAR POR créditos DESC;

19. ENTRE

BETWEEN é usado para selecionar valores de dados de um intervalo específico. Valores numéricos e de texto, bem como datas, podem ser usados.

SELECIONAR , , … DE ONDE ENTRE E ;

Exemplo

Vamos exibir uma lista de instrutores cujo salário é superior a 50.000, mas inferior a 100.000:

SELECIONE *DO instrutor ONDE salário ENTRE 50.000 E 100.000;

20. GOSTO

O operador LIKE é usado em WHERE para especificar um padrão de pesquisa para um valor semelhante.

Existem dois operadores gratuitos usados ​​no LIKE:

  • % (nenhum, um ou mais caracteres);
  • _ (um caractere).
SELECIONAR , , … DE ONDE COMO ;

Exemplo

Vamos exibir uma lista de cursos cujos nomes contêm “to” e uma lista de cursos cujos nomes começam com “CS-”:

SELECT * FROM curso WHERE título LIKE ‘%to%’; SELECT * FROM curso WHERE course_id LIKE "CS-___";

21. DENTRO

Usando IN você pode especificar vários valores para a cláusula WHERE:

SELECIONAR , , … DE ONDE EM ( , , …);

Exemplo

Vamos exibir uma lista de alunos de cursos de graduação. Ciências, Física e Eletrônica. Eng.:

SELECT * FROM aluno WHERE nome_depto IN ('Comp. Ciências', 'Física', 'Eng. Eletrônica');

22. JUNTE-SE

JOIN é usado para vincular duas ou mais tabelas usando atributos comuns dentro delas. A imagem abaixo mostra as diferentes formas de ingressar no SQL. Observe a diferença entre uma junção externa esquerda e uma junção externa direita:

SELECIONAR , , … DE JUNTAR SOBRE = ;

Exemplo 1

Iremos exibir uma lista de todos os cursos e informações relevantes sobre as faculdades:

SELECT * FROM curso JOIN departamento ON course.dept_name=department.dept_name;

Exemplo 2

Exibiremos uma lista de todos os cursos obrigatórios e detalhes sobre eles:

SELECT prereq.course_id, título, dept_name, créditos, prereq_id FROM prereq LEFT OUTER JOIN curso ON prereq.course_id=course.course_id;

Exemplo 3

Mostraremos uma lista de todos os cursos, independentemente de serem obrigatórios ou não:

SELECT course.course_id, título, dept_name, créditos, prereq_id FROM prereq RIGHT OUTER JOIN curso ON prereq.course_id=course.course_id;

23. Ver

View é uma tabela SQL virtual criada como resultado da execução de uma expressão. Ela contém linhas e colunas e é muito semelhante a uma tabela SQL normal. A visualização sempre mostra as informações mais recentes do banco de dados.

Criação

CRIAR VISUALIZAÇÃO COMO SELECIONAR , , … DE ONDE ;

Remoção

VISUALIZAÇÃO DE QUEDA ;

Exemplo

Vamos criar uma view composta por cursos com 3 créditos:

24. Funções agregadas

Estas funções são utilizadas para obter um resultado agregado relacionado aos dados em questão. A seguir estão as funções agregadas comumente usadas:

  • COUNT (col_name) - retorna o número de linhas;
  • SUM (col_name) - retorna a soma dos valores desta coluna;
  • AVG (col_name) – retorna o valor médio de uma determinada coluna;
  • MIN (nome_col) – retorna o menor valor de uma determinada coluna;
  • MAX (col_name) – Retorna o maior valor de uma determinada coluna.

25. Subconsultas aninhadas

Subconsultas aninhadas são consultas SQL que incluem cláusulas SELECT , FROM e WHERE aninhadas em outra consulta.

Exemplo

Vamos encontrar os cursos ministrados no outono de 2009 e na primavera de 2010:

SELECT DISTINCT course_id FROM seção WHERE semestre = 'Outono' AND ano= 2009 AND course_id IN (SELECT course_id FROM seção WHERE semestre = 'Primavera' AND ano= 2010);

Cada um de nós encontra e usa regularmente vários bancos de dados. Quando selecionamos um endereço de e-mail, estamos trabalhando com um banco de dados. Os bancos de dados são usados ​​por serviços de pesquisa, bancos para armazenar dados de clientes, etc.

Mas apesar do uso constante de bancos de dados, mesmo para muitos desenvolvedores de sistemas de software ainda existem muitos pontos cegos devido a diferentes interpretações dos mesmos termos. Daremos uma breve definição dos termos básicos de banco de dados antes de abordar a linguagem SQL. Então.

Base de dados - um arquivo ou coleção de arquivos para armazenar estruturas de dados ordenadas e seus relacionamentos. Muitas vezes, um sistema de gerenciamento é chamado de banco de dados - é apenas um repositório de informações em um formato específico e pode funcionar com vários SGBDs.

Mesa - Vamos imaginar uma pasta na qual estão armazenados os documentos, agrupados de acordo com uma determinada característica, por exemplo, uma lista de pedidos do último mês. Esta é uma tabela em um computador. Uma tabela separada possui seu próprio nome exclusivo.

Tipo de dados - o tipo de informação que pode ser armazenada em uma coluna ou linha separada. Podem ser números ou texto de um determinado formato.

Coluna e Linha- Todos nós trabalhamos com planilhas, que também possuem linhas e colunas. Qualquer banco de dados relacional funciona com tabelas de maneira semelhante. As linhas às vezes são chamadas de registros.

Chave primária- Cada linha de uma tabela pode ter uma ou mais colunas para identificá-la de forma exclusiva. Sem uma chave primária, é muito difícil atualizar, alterar e excluir linhas relevantes.

O que é SQL?

SQL(Inglês - linguagem de consulta estruturada) foi desenvolvido apenas para trabalhar com bancos de dados e atualmente é o padrão para todos os SGBDs populares. A sintaxe da linguagem consiste em um pequeno número de operadores e é fácil de aprender. Mas, apesar de sua aparente simplicidade, permite a criação de consultas sql para operações complexas com um banco de dados de qualquer tamanho.

Desde 1992, existe um padrão geralmente aceito chamado ANSI SQL. Ele define a sintaxe básica e as funções dos operadores e é suportado por todos os líderes de mercado de DBMS, como ORACLE. É impossível considerar todos os recursos da linguagem em um pequeno artigo, portanto consideraremos brevemente apenas as consultas SQL básicas. Os exemplos mostram claramente a simplicidade e as capacidades da linguagem:

  • criação de bancos de dados e tabelas;
  • amostragem de dados;
  • adição de registros;
  • modificação e exclusão de informações.

Tipos de dados SQL

Todas as colunas de uma tabela de banco de dados armazenam o mesmo tipo de dados. Os tipos de dados em SQL são iguais aos de outras linguagens de programação.

Criamos tabelas e bancos de dados

Existem duas maneiras de criar novos bancos de dados, tabelas e outras consultas em SQL:

  • através do console SGBD
  • Usando as ferramentas de administração interativas incluídas no servidor de banco de dados.

Um novo banco de dados é criado pelo operador CRIAR BANCO DE DADOS<наименование базы данных>; . Como você pode ver, a sintaxe é simples e concisa.

Criamos tabelas dentro do banco de dados usando a instrução CREATE TABLE com os seguintes parâmetros:

  • Nome da tabela
  • nomes de colunas e tipos de dados

Como exemplo, vamos criar uma tabela Commodity com as seguintes colunas:

Crie uma tabela:

CRIAR TABELA Mercadoria

(commodity_id CHAR(15) NÃO NULO,

vendor_id CHAR(15) NÃO NULO,

nome_commodity CHAR(254) NULL,

preço_commodity DECIMAL(8,2) NULO,

mercadoria_desc VARCHAR(1000) NULL);

A tabela consiste em cinco colunas. Após o nome vem o tipo de dados, as colunas são separadas por vírgulas. O valor da coluna pode aceitar valores vazios (NULL) ou deve ser preenchido (NOT NULL), e isso é determinado no momento da criação da tabela.

Recuperando dados de uma tabela

O operador de busca de dados é a consulta SQL mais comumente usada. Para obter informações, devemos indicar o que queremos selecionar nessa tabela. Primeiro um exemplo simples:

SELECIONE nome_commodity da mercadoria

Após a instrução SELECT especificamos o nome da coluna para obter informações e FROM define a tabela.

O resultado da consulta serão todas as linhas da tabela com valores Commodity_name na ordem em que foram inseridos no banco de dados, ou seja, sem qualquer classificação. Uma cláusula ORDER BY adicional é usada para ordenar o resultado.

Para consultar vários campos, liste-os separados por vírgulas, como no exemplo a seguir:

SELECIONE commodity_id, commodity_name, commodity_price FROM Commodity

É possível obter o valor de todas as colunas de uma linha como resultado da consulta. Para fazer isso, use o sinal “*”:

SELECIONE * DA Mercadoria

  • Além disso, SELECT suporta:
  • Classificando dados (operador ORDER BY)
  • Seleção de acordo com as condições (ONDE)
  • Termo de agrupamento (GROUP BY)

Adicione uma linha

Para adicionar uma linha a uma tabela, são usadas consultas SQL com o operador INSERT. A adição pode ser feita de três maneiras:

  • adicione uma nova linha inteira;
  • parte de uma string;
  • resultados da consulta.

Para adicionar uma linha completa, você deve especificar o nome da tabela e os valores das colunas (campos) da nova linha. Aqui está um exemplo:

INSERT INTO Commodity VALUES("106 ", "50", "Coca-Cola", "1,68", "Sem álcool,)

O exemplo adiciona um novo produto à tabela. Os valores são listados após VALUES para cada coluna. Se não houver valor correspondente para a coluna, então NULL deverá ser especificado. As colunas são preenchidas com valores na ordem especificada quando a tabela foi criada.

Se você adicionar apenas parte de uma linha, deverá especificar explicitamente os nomes das colunas, como no exemplo:

INSERT INTO Commodity (commodity_id, vendor_id, commodity_name)

VALORES("106 ", ‘50", "Coca-Cola",)

Inserimos apenas os identificadores do produto, fornecedor e seu nome, e deixamos os demais campos em branco.

Adicionando resultados de consulta

INSERT é usado principalmente para anexar linhas, mas também pode ser usado para anexar os resultados de uma instrução SELECT.

Alterando dados

Para alterar informações nos campos de uma tabela de banco de dados, deve-se utilizar a instrução UPDATE. O operador pode ser usado de duas maneiras:

  • Todas as linhas da tabela são atualizadas.
  • Somente para uma linha específica.

UPDATE consiste em três elementos principais:

  • tabela em que alterações precisam ser feitas;
  • nomes de campos e seus novos valores;
  • condições para selecionar linhas a serem alteradas.

Vejamos um exemplo. Digamos que o preço de um produto com ID=106 mudou, então esta linha precisa ser atualizada. Escrevemos o seguinte operador:

ATUALIZAR Mercadoria SET commodity_price = "3,2" WHERE commodity_id = "106"

Especificamos o nome da tabela, no nosso caso Commodity, onde será realizada a atualização, depois de SET - o novo valor da coluna e encontramos o registro desejado especificando o valor do ID necessário em WHERE.

Para alterar várias colunas, a instrução SET é seguida por vários pares de valores de coluna separados por vírgulas. Vejamos um exemplo em que o nome e o preço de um produto são atualizados:

ATUALIZAR Commodity SET commodity_name=’Fanta’, commodity_price = "3.2" WHERE commodity_id = "106"

Para remover informações de uma coluna, você pode atribuir a ela o valor NULL se a estrutura da tabela permitir. Deve-se lembrar que NULL é justamente o valor “nenhum”, e não zero na forma de texto ou número. Vamos remover a descrição do produto:

ATUALIZAR Mercadoria SET commodity_desc = NULL WHERE commodity_id = "106"

Removendo linhas

Consultas SQL para excluir linhas em uma tabela são executadas usando a instrução DELETE. Existem dois casos de uso:

  • Certas linhas da tabela são excluídas;
  • Todas as linhas da tabela são excluídas.

Um exemplo de exclusão de uma linha de uma tabela:

EXCLUIR DA mercadoria WHERE commodity_id = "106"

Após DELETE FROM indicamos o nome da tabela na qual as linhas serão excluídas. A cláusula WHERE contém a condição pela qual as linhas serão selecionadas para exclusão. No exemplo, excluímos a linha de produtos com ID=106. Especificar WHERE é muito importante porque omitir esta instrução excluirá todas as linhas da tabela. Isso também se aplica à alteração do valor dos campos.

A instrução DELETE não especifica nomes de colunas ou metacaracteres. Exclui linhas completamente, mas não pode excluir uma única coluna.

Usando SQL no Microsoft Access

Normalmente usado de forma interativa para criar tabelas, bancos de dados, para gerenciar, modificar, analisar dados em um banco de dados e para implementar consultas SQL Access por meio de um designer de consultas interativo conveniente (Query Designer), com o qual você pode construir e executar imediatamente instruções SQL de qualquer complexidade.

Também é suportado o modo de acesso ao servidor, no qual o SGBD Access pode ser utilizado como gerador de consultas SQL para qualquer fonte de dados ODBC. Este recurso permite que os aplicativos do Access interajam com qualquer formato.

Extensões SQL

Como as consultas SQL não possuem todos os recursos das linguagens de programação processuais, como loops, ramificações, etc., os fabricantes de SGBDs estão desenvolvendo sua própria versão de SQL com recursos avançados. Em primeiro lugar, trata-se de suporte para procedimentos armazenados e operadores padrão de linguagens procedurais.

Os dialetos mais comuns da língua:

  • Banco de Dados Oracle - PL/SQL
  • Interbase, Firebird-PSQL
  • Microsoft SQL Server - Transact-SQL
  • PostgreSQL - PL/pgSQL.

SQL na Internet

O MySQL DBMS é distribuído sob a Licença Pública Geral GNU gratuita. Existe uma licença comercial com capacidade para desenvolver módulos customizados. Como componente, está incluído nos conjuntos de servidores de Internet mais populares, como XAMPP, WAMP e LAMP, e é o SGBD mais popular para desenvolvimento de aplicações na Internet.

Foi desenvolvido pela Sun Microsystems e atualmente é suportado pela Oracle Corporation. São suportados bancos de dados de até 64 terabytes, padrão de sintaxe SQL:2003, replicação de bancos de dados e serviços em nuvem.

Expressões de tabela são chamadas de subconsultas usadas onde a presença de uma tabela é esperada. Existem dois tipos de expressões de tabela:

    tabelas derivadas;

    expressões de tabela generalizadas.

Essas duas formas de expressões de tabela são discutidas nas subseções a seguir.

Tabelas derivadas

Tabela derivadaé uma expressão de tabela incluída na cláusula FROM de uma consulta. As tabelas derivadas podem ser usadas nos casos em que o uso de aliases de colunas não é possível porque o tradutor SQL processa outra instrução antes que o alias seja conhecido. O exemplo abaixo mostra uma tentativa de usar um alias de coluna em uma situação em que outra cláusula está sendo processada antes que o alias seja conhecido:

USE SampleDb; SELECT MONTH(EnterDate) como enter_month FROM Works_on GROUP BY enter_month;

Tentar executar esta consulta produzirá a seguinte mensagem de erro:

Msg 207, Nível 16, Estado 1, Linha 5 Nome de coluna inválido "enter_month". (Mensagem 207: Nível 16, Estado 1, Linha 5 Nome de coluna inválido enter_month)

O motivo do erro é que a cláusula GROUP BY é processada antes que a lista correspondente da instrução SELECT seja processada e o alias da coluna enter_month é desconhecido quando o grupo é processado.

Este problema pode ser resolvido usando uma tabela derivada que contém a consulta anterior (sem a cláusula GROUP BY) porque a cláusula FROM é executada antes da cláusula GROUP BY:

USE SampleDb; SELECT enter_month FROM (SELECT MONTH(EnterDate) as enter_month FROM Works_on) AS m GROUP BY enter_month;

O resultado da execução desta solicitação será assim:

Normalmente, uma expressão de tabela pode ser colocada em qualquer lugar em uma instrução SELECT onde um nome de tabela possa aparecer. (O resultado de uma expressão de tabela é sempre uma tabela ou, em casos especiais, uma expressão.) O exemplo abaixo mostra o uso de uma expressão de tabela na lista de seleção de uma instrução SELECT:

O resultado desta consulta:

Expressões genéricas de tabela

Expressão de tabela comum (OTB)é uma expressão de tabela nomeada suportada pela linguagem Transact-SQL. Expressões de tabela comuns são usadas nos dois tipos de consultas a seguir:

    não recursivo;

    recursivo.

Esses dois tipos de solicitações são discutidos nas seções a seguir.

Consultas OTB e não recursivas

A forma não recursiva de OTB pode ser usada como alternativa às tabelas e visualizações derivadas. Normalmente OTB é determinado por Cláusulas COM e uma consulta adicional que faz referência ao nome usado na cláusula WITH. No Transact-SQL, o significado da palavra-chave WITH é ambíguo. Para evitar ambiguidade, a instrução que precede a instrução WITH deve terminar com ponto e vírgula.

USAR AdventureWorks2012; SELECIONE SalesOrderID FROM Sales.SalesOrderHeader WHERE TotalDue > (SELECT AVG(TotalDue) FROM Sales.SalesOrderHeader WHERE YEAR(OrderDate) = "2005") AND Freight > (SELECT AVG(TotalDue) FROM Sales.SalesOrderHeader WHERE YEAR(OrderDate) = "2005 ")/2.5;

A consulta neste exemplo seleciona pedidos cujo total de impostos (TotalDue) é maior que a média de todos os impostos e cujos encargos de frete (Freight) são maiores que 40% da média de impostos. A principal propriedade desta consulta é o seu comprimento, pois a subconsulta precisa ser escrita duas vezes. Uma maneira possível de reduzir a quantidade de construção de consultas é criar uma visualização que contenha uma subconsulta. Mas esta solução é um pouco complicada porque requer a criação de uma visualização e sua exclusão após a conclusão da execução da consulta. Uma abordagem melhor seria criar um OTB. O exemplo abaixo mostra o uso de OTB não recursivo, o que encurta a definição da consulta acima:

USAR AdventureWorks2012; COM price_calc (year_2005) AS (SELECT AVG (TotalDue) FROM Sales.SalesOrderHeader WHERE YEAR (OrderDate) = "2005") SELECT SalesOrderID FROM Sales.SalesOrderHeader WHERE TotalDue > (SELECT year_2005 FROM price_calc) AND Freight > (SELECT year_2005 FROM price_calc) ) /2,5;

A sintaxe da cláusula WITH em consultas não recursivas é a seguinte:

O parâmetro cte_name representa o nome do OTB que define a tabela resultante, e o parâmetro column_list representa a lista de colunas da expressão da tabela. (No exemplo acima, o OTB é denominado price_calc e possui uma coluna, year_2005.) O parâmetro inner_query representa uma instrução SELECT que especifica o conjunto de resultados da expressão de tabela correspondente. A expressão de tabela definida pode então ser usada em outer_query. (A consulta externa no exemplo acima usa OTB price_calc e sua coluna year_2005 para simplificar a consulta duplamente aninhada.)

OTB e consultas recursivas

Esta seção apresenta material de maior complexidade. Portanto, ao lê-lo pela primeira vez, é recomendável ignorá-lo e retornar a ele posteriormente. Os OTBs podem ser usados ​​para implementar recursões porque os OTBs podem conter referências a si mesmos. A sintaxe básica do OTB para uma consulta recursiva é semelhante a esta:

Os parâmetros cte_name e column_list têm o mesmo significado que no OTB para consultas não recursivas. O corpo de uma cláusula WITH consiste em duas consultas combinadas pelo operador UNIÃO TODOS. A primeira consulta é chamada apenas uma vez e começa a acumular o resultado da recursão. O primeiro operando do operador UNION ALL não faz referência ao OTB. Essa consulta é chamada de consulta de referência ou origem.

A segunda consulta contém uma referência ao OTB e representa sua parte recursiva. Por causa disso, é chamado de membro recursivo. Na primeira chamada à parte recursiva, a referência OTB representa o resultado da consulta de referência. O membro recursivo usa o resultado da primeira chamada de consulta. Depois disso, o sistema chama novamente a parte recursiva. Uma chamada para um membro recursivo é interrompida quando uma chamada anterior retorna um conjunto de resultados vazio.

O operador UNION ALL une as linhas atualmente acumuladas, bem como as linhas adicionais adicionadas pela chamada atual ao membro recursivo. (A presença do operador UNION ALL significa que as linhas duplicadas não serão removidas do resultado.)

Finalmente, o parâmetro outer_query especifica a consulta externa que o OTB usa para recuperar todas as chamadas para a junção de ambos os membros.

Para demonstrar a forma recursiva do OTB, utilizamos a tabela Avião definida e preenchida com o código mostrado no exemplo abaixo:

USE SampleDb; CREATE TABLE Avião(ContainingAssembly VARCHAR(10), ContainedAssembly VARCHAR(10), QuantidadeContida INT, UnitCost DECIMAL(6,2)); INSERIR VALORES EM Avião ("Avião", "Fuselagem", 1, 10); INSERT INTO Avião VALORES ("Avião", "Asas", 1, 11); INSERT INTO Avião VALUES ("Avião", "Cauda", 1, 12); INSERIR VALORES EM Avião ("Fuselagem", "Salão", 1, 13); INSERIR VALORES EM Avião ("Fuselagem", "Cockpit", 1, 14); INSERIR VALORES EM Avião ("Fuselagem", "Nariz", 1, 15); INSERT INTO Avião VALUES ("Cabin", NULL, 1,13); INSERT INTO Avião VALUES ("Cockpit", NULL, 1, 14); INSERT INTO Avião VALUES ("Nose", NULL, 1, 15); INSERT INTO Avião VALUES ("Asas", NULL,2, 11); INSERT INTO Avião VALUES ("Tail", NULL, 1, 12);

A tabela Avião possui quatro colunas. A coluna ContainingAssembly identifica a montagem e a coluna ContainAssembly identifica as peças (uma por uma) que compõem a montagem correspondente. A figura abaixo mostra uma ilustração gráfica de um possível tipo de aeronave e seus componentes:

A tabela Avião consiste nas seguintes 11 linhas:

O exemplo a seguir usa a cláusula WITH para definir uma consulta que calcula o custo total de cada build:

USE SampleDb; COM list_of_parts(assembly1, quantidade, custo) AS (SELECT ContainingAssembly, QuantidadeContida, UnitCost FROM Airplane WHERE ContainedAssembly IS NULL UNION ALL SELECT a.ContainingAssembly, a.QuantityContained, CAST(l.quantity * l.cost AS DECIMAL(6,2) ) FROM list_of_parts l, Avião a WHERE l.assembly1 = a.ContainedAssembly) SELECT assembly1 "Peça", quantidade "Quantidade", custo "Preço" FROM list_of_parts;

A cláusula WITH define uma lista OTB chamada list_of_parts, que consiste em três colunas: assembly1, quantidade e custo. A primeira instrução SELECT no exemplo é chamada apenas uma vez para armazenar os resultados da primeira etapa do processo de recursão. A instrução SELECT na última linha do exemplo exibe o seguinte resultado.

Visualizações