declaración de la base de datos del capítulo 4

Los siguientes cursos se derivan del aprendizaje MOOC; consulte el curso original: Principios y aplicaciones de bases de datos
Revisión de posgrado

descripción general

Desarrollo SQL

imagen-20210117214210476

Nota: ¿ Qué funciones son las palabras clave, especialmente la primera creación de cambio de caída es para definir funciones?

1. SQL es poderoso, realiza definición de datos, manipulación de datos, control de datos y otras funciones

2. El lenguaje SQL es conciso y solo se usa una pequeña cantidad de verbos para realizar las funciones principales

3. SQL admite la estructura de esquema de tres niveles de las bases de datos relacionales

4. El lenguaje SQL se puede integrar en programas escritos en otros lenguajes de alto nivel

Nota: formato de declaración

imagen-20210117214252905 imagen-20210117214304490

Suplemento: Modo crear/soltar esquema <nombre de esquema> autorización <nombre de usuario> Definir esquema = definir espacio de nombres, puede definir más objetos de base de datos, etc.

Suplemento: Índice: crear/soltar [único/clúster] índice <nombre de índice> en <nombre de tabla>(...columna)

Creación de definición de tabla 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 ('男','女'))
)

modificación de la tabla 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]

El resultado de la consulta muestra seleccionar

Los básicos no se repetirán.

1. En la declaración de consulta SQL, si necesita mostrar todos los atributos de una tabla relacional en el resultado, use *

2. Elimine la tupla duplicada, seleccione distintas columnas **** en el resultado [no eliminadas de forma predeterminada]

3. Cálculo del resultado de la consulta [resultado devuelto]

  • Función agregada: cuenta/suma/avg/max/min [todas|distintas] <columnas>
  • Para el valor nulo del atributo, no se considera excepto count(), y count( ) solo cuenta el número a considerar
  • Funciones matemáticas/Funciones de cadena/Funciones de fecha

Ejemplo: seleccionar

Ordenar los resultados de la consulta por

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

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

5. En la instrucción de consulta SQL, cómo cambiar el nombre de la columna de destino:

  • Después de cambiar el nombre del objeto, use AS para indicar el nuevo nombre , edad como edad1,
  • Después de cambiar el nombre del objeto, agregue un nuevo nombre con un espacio , edad edad1,
  • 【NOT】Indique el nuevo nombre entre paréntesis después de cambiar el nombre

La consulta cumple la condición como en

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

Expresiones de condición de tupla:

1. Operador: ± / % = > < y o no * Por ejemplo: 5/3=1

**2. Predicado: [no] entre... y... rango [no] LIKE... ** coincidencia

[ no] EN (nombre de columna...) la colección especificada ES [no] NULL

imagen-20210117225758131
  1. donde LIKE se usa para consultas de coincidencia parcial [ comillas simples ]

donde el comodín de expresión de cadena

_ representa cualquier carácter individual [pueden ser 0 caracteres]

% significa cualquier cadena larga cuya longitud puede ser 0

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

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

Por ejemplo, si busca DB_Design, entonces ME GUSTA 'DB I_ Design' ESCAPE 'I'

Agregue un carácter de escape al frente y agregue ESCAPE 'I' en la parte posterior

  1. Entre ellos, IN se usa para juzgar si un valor pertenece a la colección.
where sd in('数学','计算机')

Agrupar agregación agrupar por, tener

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

1. Agrupar según los valores de nombre de atributo 1 y nombre de atributo 2 a su vez , 2. tener una cláusula para filtrar los 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;

unión de consulta de conexión

Consulta de combinación de varias tablas

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

Tenga en cuenta que al conectarse, debe complementar la relación de equivalencia de contenido en donde

Consulta de combinación externa

desde <relación izquierda> izquierda |derecha|completo [externo] unión <relación derecha> en <condición de unión>

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

[Unión normal/interna] desde <relación izquierda> [interna] unión <relación derecha> en <condición de unión>

#查询选修“数据结构”课程的学生的学号、姓名和成绩
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 unión automática

select ...
from s s1,s s2

from s as s1,s as s2

Ejercicio de ejemplo: Hay relaciones R(A, B, C) y S(C, D). La expresión del álgebra relacional equivalente a la instrucción SQL selecciona A,B,D de R,S donde RC=SC es ( ). πA,B,D(σR.C= SC(R×S))

Método de consulta anidado donde en

Dependiendo de si los datos procesados ​​en la subconsulta están relacionados con la tupla actual de la consulta principal,

Las consultas anidadas se pueden dividir en subconsultas independientes y subconsultas correlacionadas

  1. Predicado IN [si un valor pertenece a un conjunto]

    imagen-20210117232440270
  2. operador de comparación

    imagen-20210117232523444
  3. Cuantificador ANY ALL [compatible parcialmente]

La semántica de ANY es un cierto valor en el resultado de la consulta. Cuando un cierto valor en el resultado de la subconsulta satisface el operador de comparación , el resultado de la operación de comparación es verdadero.

La semántica de TODOS son todos los valores en el resultado de la consulta. Cuando cada valor en el resultado de la subconsulta satisface el operador de comparación , el resultado de la operación de comparación es verdadero.

imagen-20210117232718447 imagen-20210117232743279

Relación de equivalencia [porque todos y cada uno de los cuantificadores son parcialmente compatibles, por lo que pueden ser reemplazados]

  1. El predicado existe [subconsulta correlacionada]

    Porque la condición de consulta (sc.sno) de la subconsulta necesita usar el atributo (s.sno) de la consulta principal

#查询选修“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))

establecer la operación

La declaración de selección devuelve una colección, y varias declaraciones de selección pueden devolver varias colecciones.

En las dos declaraciones de selección que participan en la consulta de colección, los resultados de la consulta no solo deben tener el mismo nombre de atributo, sino que también el orden de los nombres de atributos debe ser coherente.

y union

#并
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'

intersecarse

#交
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'
)

diferencia excepto

#差
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'
)

Actualización de datos

  1. insertar tupla

**insertar en <nombre de tabla> (nombre de atributo,...) valor (valor...) **Se pueden insertar varias tuplas

  • El valor constante tiene el mismo rango de valores y el mismo número que el nombre del atributo correspondiente.

  • Si un determinado atributo de la tupla no aparece después de INTO, los valores de estos atributos toman el valor vacío NULL.

  • Si no se especifica ningún atributo en INTO, la tupla recién insertada en la cláusula VALUES debe tener un valor en cada atributo y el orden de los valores constantes debe ser coherente con el orden de los atributos en la definición de la tabla.

  • La declaración INSERT puede insertar datos en la vista

Ejemplo: INSERTAR EN SC(SNO,CNO) VALORES ('S31','C01');

INSERTAR EN VALORES S ('S31','Wang Hao','Computadora','1999-10-15','Masculino');

O la tupla insertada es el resultado de una subconsulta

Ejemplo: Insertar la ficha de selección de curso del curso "Base de datos" para los alumnos del departamento "Informática".

INSERTAR EN SC(SNO,CNO)

​ SELECCIONE SNO,CNO DESDE S,C DONDE SD='Computadora' AND CN='Base de datos';

  1. Modificar valor de propiedad

actualizar <nombre de tabla> establecer <atributo>=<valor> ,... donde <condición> puede modificar múltiples valores de atributo

  1. borrar tupla

eliminar de <nombre de la tabla> [donde <condición>]

Ejemplo: eliminar tuplas de selección de cursos cuyas calificaciones sean inferiores a la calificación promedio de todos los cursos

ELIMINAR DE SC DONDE GRADO<(SELECCIONAR PROMEDIO(GRADO) DE SC);

  1. Comprobaciones de cordura para operaciones de actualización

La estrategia de procesamiento adoptada cuando la operación de actualización no puede satisfacer la integridad referencial

Negarse a ejecutar (SIN ACCIÓN) • Generar operación en cascada (CASCADE) • Establecer en valor nulo (SET NULL)

  1. La operación de actualización no cambia la estructura del esquema de la tabla relacional
  2. Las actualizaciones a menudo se basan en consultas y las actualizaciones también pueden anidar subconsultas.
  3. Las actualizaciones deben tener en cuenta varias restricciones de integridad definidas por la base de datos

vista

Ver (View) en realidad no existe en la base de datos, sino una tabla virtual, datos de fila y columna de la tabla utilizada en la consulta de la vista personalizada, y se genera dinámicamente cuando se utiliza la vista.

Es decir, una vista es el conjunto de resultados devuelto después de ejecutar una declaración de consulta, por lo que al crear una vista, lo principal es crear esta declaración de consulta SQL.

Para las tablas de datos ordinarias, las vistas tienen las siguientes características:

1. Simple: debido a que la vista es el conjunto de resultados de condiciones compuestas que se han filtrado y devuelto después de la ejecución de la declaración de consulta, los usuarios que usan la vista no necesitan preocuparse por la estructura, las condiciones de asociación y las condiciones de filtro de la mesas correspondientes detrás.

2. Seguridad: los usuarios que usan vistas solo pueden acceder a los conjuntos de resultados que pueden consultar. La administración de autoridad de las tablas no se puede limitar a una determinada fila o columna, pero se puede realizar fácilmente a través de las vistas.

3. Independencia de los datos: una vez que se determina la estructura de la vista, se puede proteger el impacto de los cambios en la estructura de la tabla sobre los usuarios. Agregar columnas en la tabla de origen no tiene efecto en la vista; modificar el nombre de la columna en la tabla de origen puede se soluciona modificando la vista sin causar daño a la vista Impacto del Visitante.

En segundo lugar, la sintaxis de la vista.

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

drop view <视图名> [cascade]

#正常的select,update语句

Para las tablas de datos ordinarias, las vistas tienen las siguientes características:**

1. Simple: debido a que la vista es el conjunto de resultados de condiciones compuestas que se han filtrado y devuelto después de la ejecución de la declaración de consulta, los usuarios que usan la vista no necesitan preocuparse por la estructura, las condiciones de asociación y las condiciones de filtro de la mesas correspondientes detrás.

2. Seguridad: los usuarios que usan vistas solo pueden acceder a los conjuntos de resultados que pueden consultar. La administración de autoridad de las tablas no se puede limitar a una determinada fila o columna, pero se puede realizar fácilmente a través de las vistas.

3. Independencia de los datos: una vez que se determina la estructura de la vista, se puede proteger el impacto de los cambios en la estructura de la tabla sobre los usuarios. Agregar columnas en la tabla de origen no tiene efecto en la vista; modificar el nombre de la columna en la tabla de origen puede se soluciona modificando la vista sin causar daño a la vista Impacto del Visitante.

En segundo lugar, la sintaxis de la vista.

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

drop view <视图名> [cascade]

#正常的select,update语句

Supongo que te gusta

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