declaração do banco de dados do capítulo 4

Os seguintes cursos são derivados do aprendizado do MOOC - consulte o curso original: Base de Dados Princípios e Aplicações
Revisão de Pós-Graduação

visão geral

Desenvolvimento SQL

imagem-20210117214210476

Nota: Quais são as funções das palavras-chave, especialmente a primeira criação, alter drop é para definir funções

1. SQL é poderoso, realizando definição de dados, manipulação de dados, controle de dados e outras funções

2. A linguagem SQL é concisa e apenas um pequeno número de verbos é usado para realizar as funções principais

3. SQL suporta a estrutura de esquema de três níveis de bancos de dados relacionais

4. A linguagem SQL pode ser incorporada em programas escritos em outras linguagens de alto nível

Nota: formato de declaração

imagem-20210117214252905 imagem-20210117214304490

Suplemento: Modo criar/eliminar esquema <nome do esquema> autorização <nome do usuário> Definir esquema = definir namespace, você pode definir objetos de banco de dados, etc.

Suplemento: Índice: criar/eliminar [único/cluster] índice <nome do índice> em <nome da tabela>(...coluna)

Criação de definição de tabela básica

#创建数据库
create database <数据库名>

#打开数据库
use <数据库名>

#创建表
create table <表名> (
 <属性名> <类型> [约束性条件],
 <属性名> <类型> [约束性条件]
)

#主键
sno char(6) primary key
#单独约束主键【多个外键时仅此一种方法】
primary key(sno,cno)

#外键
FOREIGN key(sno) references S(sno)

#后续添加外键级联操作--级联更新|不操作
# ON UPDATE{cascade| NO ACTION}:
# ON DELETE{cascade| NO action}:

#用户定义
SN CHAR(10) NOT NULL,

SEX CHAR(2) DEFALUT'男'
check(sex in('男','女'))

check(GRADE between 0 and 100)

SEX CHAR(2) UNIQUE



create table s(
sno VARCHAR(100) PRIMARY KEY,
sn VARCHAR(100),
sd VARCHAR(100),
sb VARCHAR(100),
sex VARCHAR(100) DEFAULT '男'
CHECK (sex in ('男','女'))
)

modificação da tabela base

增加列
alter table <表名>
 	add <属性名> <类型>
 	
#增加约束规则 	
alter table <表名>
	add  PRIMARY KEY (SNO);

#改变某列的类型
alter table <表名>
 	add column <属性名> <类型>
 	
#删除原有的列或者约束规则
alter table <表名> 
  drop column <列名> [CASCADE| RESTRICT]
 #RESTRICT没有视图或者约束引用该属性时,该属性列才可以删除
 #CASCADE删除某列时,对应的视图或者约束删除
 
alter table <表名>
  drop [constraint <约束条件>]
  
#删除表
drop table <表名>  [CASCADE| RESTRICT]

O resultado da consulta mostra selecionar

O básico não será repetido

1. Na instrução de consulta SQL, se todos os atributos de uma tabela relacional precisarem ser exibidos no resultado, use *

2. Remova a tupla duplicada, selecione colunas **** distintas no resultado [não removido por padrão]

3. Cálculo do resultado da consulta [resultado retornado]

  • Função agregada: count/sum/avg/max/min [all|distinct] <columns>
  • Para o valor nulo do atributo, não é considerado exceto count(), e count( ) conta apenas o número a ser considerado
  • Funções matemáticas/Funções de string/Funções de data

Exemplo: selecione

Ordem de classificação dos resultados da consulta por

select **
from ***
order by <目列> [ASC|DESC],<目标列> [ASC|DESC]

#ASC默认升序,降序DESC,如果第一目标列相同,按第二列排序
#<目列>也可以用1,2,3表示,表示第i列属性
#例如 order by 2,3 ASC

5. Na instrução de consulta SQL, como renomear a coluna de destino:

  • Após renomear o objeto, use AS para indicar o novo nome , age como age1,
  • Depois de renomear o objeto, adicione um novo nome com espaço , age age1,
  • 【NÃO】Indique o novo nome entre colchetes após renomear

A consulta satisfaz a condição como em

select .....
from ....
where <元组条件表达式>

Expressões de condição de tupla:

1. Operador: ± / % = > < e ou não * Por exemplo: 5/3=1

**2. Predicado: [não] entre ... e ... intervalo [não] LIKE ... ** corresponde

​[ not] IN (nome da coluna...) coleção especificada IS [not] NULL

imagem-20210117225758131
  1. onde LIKE é usado para consultas de correspondência parcial [ aspas simples ]

onde o caractere curinga da expressão de string

_ representa qualquer caractere único [pode ser 0 caracteres]

% significa qualquer string longa cujo comprimento pode ser 0

<属性列名> [not] like 字符串表达式
where sn like '王%'
where cn like '%\ 实验' ESCAPE'\'  

#如果查询内容包括%,下划线,需要使用escape转换 

Por exemplo, se você pesquisar DB_Design, LIKE 'DB I_ Design' ESCAPE 'I'

Adicione um caractere de escape na frente e adicione ESCAPE 'I' atrás

  1. Entre eles, IN é usado para julgar se um valor pertence à coleção
where sd in('数学','计算机')

Agrupamento grupo de agregação por, tendo

select .....
from ....
where <元组条件表达式>
group by <属性列名> [<属性列名>] [HAVING <选择条件>]

1. Agrupar de acordo com o nome do atributo 1 e o nome do atributo 2 valores alternadamente ; 2. Ter cláusula para filtrar os resultados agrupados

#平均成绩90分以上 【不能用where是因为where不能用聚集函数avg
select sno,avg(grade)
from sc
where avg(grade)>=90 group by sno

#正确的写法
select sno,avg(grade)
from sc
group by sno having avg(grade)>90;

#男生人数>2人的系名
select sd
from sc
where sex="男"
group by sd having count(*)>2;

junção de consulta de conexão

Consulta de junção de várias tabelas

#查询选修C01的学生姓名和成绩
select sn,grade
from sc,s  #sc和s做笛卡尔积运算
where sc.sno=s.sno and cno='c01'

Observe que, ao conectar, você precisa complementar a relação de equivalência de conteúdo em where

consulta de junção externa

de <relação esquerda> esquerda |direita|completo [externo] junção <relação direita> em <condição de junção>

#查询所有学生姓名及选修课程号为“C01”的成绩,没有选修该课程的学生,成绩显示为空
select sn,grade
from sc right outer join s
on sc.sno=s.sno and cno='c01'

[União normal/interna] de <relação esquerda> [interna] junção <relação direita> em <condição de junção>

#查询选修“数据结构”课程的学生的学号、姓名和成绩
select s.sno,sn,grade
from s,sc,c
where s.sno=sc.sno and c.cno=sc.cno and  cn='数据结构'

select s.sno,sn,grade
from (s inner join sc on s.sno=sc.sno) inner join c on c.cno=sc.cno
where cn='数据结构'

consulta de junção automática

select ...
from s s1,s s2

from s as s1,s as s2

Exemplo de exercício: Existem relações R(A, B, C) e S(C, D). A expressão de álgebra relacional equivalente à instrução SQL seleciona A,B,D de R,S onde RC=SC é ( ). πA,B,D(σR.C= SC(R×S))

Método de consulta aninhada onde em

Dependendo se os dados processados ​​na subconsulta estão relacionados à tupla atual da consulta pai,

As consultas aninhadas podem ser divididas em subconsultas independentes e subconsultas correlacionadas

  1. Predicado IN [se um valor pertence a um conjunto]

    imagem-20210117232440270
  2. operador de comparação

    imagem-20210117232523444
  3. Quantificador ANY ALL [parcialmente suportado]

A semântica de ANY é um determinado valor no resultado da consulta. Quando um determinado valor no resultado da subconsulta satisfaz o operador de comparação , o resultado da operação de comparação é verdadeiro.

A semântica de ALL são todos os valores no resultado da consulta. Quando cada valor no resultado da subconsulta satisfaz o operador de comparação , o resultado da operação de comparação é verdadeiro.

imagem-20210117232718447 imagem-20210117232743279

Relação de equivalência [porque todos e quaisquer quantificadores são parcialmente suportados, portanto podem ser substituídos]

  1. O predicado existe [subconsulta correlacionada]

    Porque a condição de consulta (sc.sno) da subconsulta precisa usar o atributo (s.sno) da consulta pai

#查询选修“C02”课程的学生姓名
SELECT SN
FROM S
WHERE SNO INSELECT SNO	FROM SC	WHERE CNO=‘C02’ )

SELECT SN
FROM S
WHERE EXISTSSELECT * FROM SC	WHERE SC.SNO=S.SNO AND CNO = ‘C02’)
#查询选修全部课程的学生的姓名
#选修全部课程的学生≡没有一门课他不选的学生
SELECT SN
FROM S
WHERE NOT EXISTS
(SELECT * FROM C
 WHERE NOT EXISTS
					(SELECT *  FROM SC
							WHERE SC.SNO=S.SNO AND				SC.CNO=C.CNO))

definir operação

A instrução select retorna uma coleção e várias instruções select podem retornar várias coleções

Nas duas instruções select que participam da consulta de coleção, os resultados da consulta não devem apenas ter o mesmo nome de atributo, mas também a ordem dos nomes de atributo deve ser consistente.

e união

#并
select [语句] union select [语句]


#查询选修了课程号为“C01”或“C02”的学生学号。
select sno from sc where cno='c01'
union 
select sno from sc where cno='c02'
#union自动去除重复项

select distinct sno from sc
where cno='c01' or cno='c02'

cruzar

#交
select [语句] intersect select [语句]


#查询同时选修课程号为“C01”“C02”的学生学号。
select sno from sc where cno='c01'
intersect 
select sno from sc where cno='c02'

select  sno from sc
where cno='c01' and cno='c02'  #错误

select sno from sc
where cno='c01' and sno in (
  select sno from sc  where cno='c02'
)

diferença exceto

#差
select [语句] except select [语句]


#查询选修了课程号为“C01”但没选修“C02”课程的学生学号
select sno from sc where cno='c01'
except 
select sno from sc where cno='c02'

select  sno from sc
where cno='c01' and cno='c02'  #错误
select sno from sc
where cno='c01' and sno not in (
  select sno from sc  where cno='c02'
)

Atualização de dados

  1. inserir tupla

**insira em <nome da tabela> (nome do atributo,…) valor (valor…) **Múltiplas tuplas podem ser inseridas

  • O valor constante tem o mesmo intervalo de valores e o mesmo número que o nome do atributo correspondente.

  • Se um determinado atributo da tupla não aparecer após INTO, os valores desses atributos assumem o valor vazio NULL.

  • Se nenhum atributo for especificado em INTO, a tupla recém-inserida na cláusula VALUES deve ter um valor em cada atributo , e a ordem dos valores constantes deve ser consistente com a ordem dos atributos na definição da tabela.

  • A instrução INSERT pode inserir dados na exibição

Exemplo: INSERT INTO SC(SNO,CNO) VALORES ('S31','C01');

​ INSERT INTO S VALUES ('S31','Wang Hao','Computador','1999-10-15','Masculino');

Ou a tupla inserida é o resultado de uma subconsulta

Exemplo: Insira o registro de seleção do curso do curso "Banco de Dados" para os alunos do departamento "Informática".

INSERIR EM SC(SNO,CNO)

​ SELECT SNO,CNO FROM S,C WHERE SD='Computador' AND CN='Banco de Dados';

  1. Modificar valor da propriedade

update <nome da tabela> set <attribute>=<value> ,… onde <condição> pode modificar vários valores de atributo

  1. excluir tupla

excluir de <nome da tabela> [onde <condição>]

Exemplo: Excluir tuplas de seleção de curso cujas notas são inferiores à nota média de todos os cursos

EXCLUIR DE SC WHERE NOTA<(SELECT AVG(NOTA) DE SC);

  1. Verificações de sanidade para operações de atualização

A estratégia de processamento adotada quando a operação de atualização não pode satisfazer a integridade referencial

Recusar-se a executar (NO ACTION) • Gerar operação em cascata (CASCADE) • Definir como valor nulo (SET NULL)

  1. A operação de atualização não altera a estrutura do esquema da tabela relacional
  2. As atualizações geralmente são baseadas em consultas, e as atualizações também podem aninhar subconsultas
  3. As atualizações precisam levar em consideração várias restrições de integridade definidas pelo banco de dados

visualizar

View (View) não existe realmente no banco de dados, mas uma tabela virtual, dados de linha e coluna da tabela usada na consulta da exibição personalizada e é gerada dinamicamente quando a exibição é usada.

Ou seja, uma visão é o conjunto de resultados retornado após a execução de uma instrução de consulta, portanto, ao criar uma exibição, o principal é criar essa instrução de consulta SQL.

Para tabelas de dados comuns, as exibições têm as seguintes características:

1. Simples: como a exibição é o conjunto de resultados de condições compostas que foram filtradas e retornadas após a execução da instrução de consulta, os usuários que usam a exibição não precisam se preocupar com a estrutura, condições de associação e condições de filtro do tabelas correspondentes subseqüentes.

2. Segurança: Os usuários que usam visualizações só podem acessar os conjuntos de resultados que podem consultar.O gerenciamento de autoridade das tabelas não pode ser limitado a uma determinada linha ou coluna, mas pode ser facilmente realizado por meio de visualizações.

3. Independência de dados: uma vez que a estrutura da visão é determinada, o impacto das mudanças na estrutura da tabela nos usuários pode ser protegido. Adicionar colunas na tabela de origem não tem efeito na visão; modificar o nome da coluna na tabela de origem pode ser resolvido modificando a vista sem causar danos à vista Impacto do visitante.

Em segundo lugar, a sintaxe da exibição

create view <视图名> [列名,]
as  子查询
with check option 
#with check option 表示对视图进行和更新操作时,要满足视图定义的条件
#如果没有指明字段,默认所有字段

drop view <视图名> [cascade]

#正常的select,update语句

Para tabelas de dados comuns, as exibições têm as seguintes características:**

1. Simples: como a exibição é o conjunto de resultados de condições compostas que foram filtradas e retornadas após a execução da instrução de consulta, os usuários que usam a exibição não precisam se preocupar com a estrutura, condições de associação e condições de filtro do tabelas correspondentes subseqüentes.

2. Segurança: Os usuários que usam visualizações só podem acessar os conjuntos de resultados que podem consultar.O gerenciamento de autoridade das tabelas não pode ser limitado a uma determinada linha ou coluna, mas pode ser facilmente realizado por meio de visualizações.

3. Independência de dados: uma vez que a estrutura da visão é determinada, o impacto das mudanças na estrutura da tabela nos usuários pode ser protegido. Adicionar colunas na tabela de origem não tem efeito na visão; modificar o nome da coluna na tabela de origem pode ser resolvido modificando a vista sem causar danos à vista Impacto do visitante.

Em segundo lugar, a sintaxe da exibição

create view <视图名> [列名,]
as  子查询
with check option 
#with check option 表示对视图进行和更新操作时,要满足视图定义的条件
#如果没有指明字段,默认所有字段

drop view <视图名> [cascade]

#正常的select,update语句

Acho que você gosta

Origin blog.csdn.net/qq_38758371/article/details/130094064
Recomendado
Clasificación