Sintaxis SQL (actualización)

Tabla de contenido

1. Agregar atributos de tabla

2. Eliminar la tabla básica

3. Cambios de mesa

4. Creación y eliminación de índices

5. Consulta de datos

Consultas basadas en tablas derivadas

definir vista

vista de compilación

eliminar vista

vista de consulta

ver actualización 



1. Agregar atributos de tabla

--1、向Student表增加“入学时间”列,其数据类型为日期

ALTER TABLE Student ADD S_entrance DATE;

--注意不论基本表中原来是否已有数据,新增加的列一律为空值(null)

--2、将年龄的数据类型由字符型改为整型
ALTER TABLE Student ALTER COLUMN Sage INT;


--3、增加课程名称必须 取唯一值的约束条件
ALTER TABLE Course ADD UNIQUE(Cname);

2. Eliminar la tabla básica

Formato de declaración: DROP TABLE <nombre de tabla>[RESTRINGIR | CASCADA]

restrict: Restringir la eliminación

cascada: no hay restricciones para eliminar esta tabla (en cascada, las dependencias relacionadas se eliminan juntas) Por ejemplo: el número de estudiante en la tabla SC se refiere al número de estudiante en Student, si se elimina la tabla Student, la tabla SC será eliminado al mismo tiempo.

Nota: Los resultados de usar operaciones R y C en la misma base de datos pueden ser diferentes.

3. Cambios de mesa

Alter Table Student        --更改学生表
    alter column Sage tinyint  --把Sage所在的列的类型改为tinyint类型
Alter Table Student 
    add Sentrance smalldatetime   --在Student中添加一个时间属性(列)
alter table Studnet 
    add constraint ck_stu_grade Check(Sage between 0 and 100) --年龄添加约束条件
select* into aaa from Student   --复制Student表,表名为aaa
drop table aaa  --删除表aaa
select sno,sname from Student  -- 从Student表中选出 sno,sname 的属性
select cno ,AVG(grade) as 平均成绩
from SC
group by Cno

select *
from SC
where grade <60

4. Creación y eliminación de índices

El propósito de la indexación: para acelerar la consulta.

DBMS generalmente creará automáticamente un índice en: PRIMARY KEY o UNIQUE

Index es la tecnología de implementación interna de la base de datos relacional, que pertenece a la categoría de modo interno

Formato de declaración: CREATE [UNIQUE] [CLUSTER] INDEX<nombre de índice> ON<nombre de tabla>

①QNIQUE indica que cada valor de índice de este índice solo corresponde a datos únicos

--为学生-课程数据库中的Student,Course,SC三个表建立三个索引
CREATE UNIQUE INDEX Stusno ON Student(Sno);
CREATE UNIQUE INDEX Coucno ON Course(Cno);
CREATE UNIQUE INDEX SCno ON SC(Sno ASC,Cno DESC); --其中ASC(升序),DESC(降序)

②CLUSTER significa construir un índice agrupado. Se refiere a intercambiar la ubicación del almacenamiento físico real

CREAR ÍNDICE DE CLÚSTER Stuname ON Estudiante(Sname);

eliminar índice

Formato de declaración: DROP INDEX <nombre de índice>;

Cuando elimina un índice, la descripción de ese índice se elimina del diccionario de datos.

--删除Student表的Stusname索引
DROP INDEX Stusname;

El diccionario de datos registra toda la información de definición en la base de datos.

5. Consulta de datos

Antes de realizar la consulta, necesitamos saber 1. ¿Qué mesa desea registrar?,
2. ¿Qué condiciones desea registrar?

Formato de declaración:

SELECCIONE <datos para mostrar>

FROM <el nombre o la vista de la tabla a comprobar>

WHERE <condiciones para la consulta>

Nota: ① Las letras de la declaración no distinguen entre mayúsculas y minúsculas. ②El contenido en [ ] es opcional

Ⅰ Consulta de tabla única

Función: consultar el contenido de una tabla.

--查询全体学生的学号与姓名
SELECT Sno,Sname FROM Student;
--查询全体学生的详细记录
SELECT * FROM Student;
--查询全体学生的姓名及出生年份。
SELECT Sname,2004-Sage FROM Student;

Muestra el resultado: (nota aquí 2004 - Sabio es tiempo menos edad)

se quita     2004 - Sabio
zhang san mil novecientos ochenta y dos
lisi 1983

Consulte el nombre, el año de nacimiento y el departamento de todos los estudiantes y exija que todos los nombres de los departamentos se expresen en minúsculas

SELECT Sname 'Year' of Birth:',2004 - Sage,LOWER(Sdept) FROM Student; 
se quita 'Año de nacimiento:' 2004 - Sabio INFERIOR (Sección)
zhang san 'Año de nacimiento:' mil novecientos ochenta y dos cs
lisi 'Año de nacimiento:' 1983 cs

Entonces, después de SELECCIONAR, puede seguir los atributos, cadenas, expresiones aritméticas y funciones en la tabla.

Use alias de columna para cambiar los encabezados de columna en los resultados de la consulta

SELECCIONE Sname NOMBRE DE Estudiante;

NOMBRE
zhang san
lisi

Selecciono varias tuplas en la lista

(1) Cancelar filas duplicadas: use la palabra clave DISTINCT

--查询选修了课程的学生学号
SELECT Sno FROM SC;
--等价于:SELECT ALL Sno FROM SC;

【Resultado de salida】

sno

200215121

200215121

200215121

200215122

200215122

--指定DISTINCT,去掉表中重复的行
SELECT DISTINCT Sno FROM SC ;

【Resultado de salida】

sno

200215121

200215122

(2) Consultar tuplas que cumplan las condiciones

usar donde

condiciones de consulta predicado
Comparar <, > , = , !=,<>
Determinar el alcance entre y , no entre y
Determinar la colección. en, no en
coincidencia de personajes me gusta, no me gusta
valor vacío es nulo, no es nulo
Condiciones Múltiples (Operaciones Lógicas) y, o, no

ejemplo

Comparar

--查询计算机科学系全体学生的名字
SELECT Sname FROM Student WHERE Sdept = 'CS';

--查询所有年龄在20岁以下的学生姓名及年龄
SELECT Sname,Sage FROM Student WHERE Sage < 20;

--查询考试成绩有不及格的学生的学号
SELECT DISTINCT Sno FROM SC WHERE Grade < 60;

Determinar el alcance

--查询年龄在20~23岁(包含20岁和23岁)之间的学生的姓名、系别、和年龄
SELECT Sname,Sdept,Sage
FROM Student
WHERE Sage BETWWEN 20 AND 23 ;

--查询年龄 不 在20~23岁(包含20岁和23岁)之间的学生的姓名、系别、和年龄
SELECT Sname,Sdept,Sage
FROM Student
WHERE Sage NOT BETWWEN 20 AND 23 ;

Determinar la colección.

--in<值表> ,not in<值表>
--查询信息系(IS)、数学系(MA)、计算机科学系(CS)学生的姓名和性别
select Sname,Ssex
from Student
where Sdept in('IS','MA','CS')

coincidencia de personajes

--查询学号为200215121的学生的详细情况
SELECT * FROM Student WHERE Sno LIKE '200215121';
--等价于 SELECT * FROM Student WHERE Sno  = '200215121';

--匹配串为含通配符的字符串
-- % 为任意长度; _ 一个字符

--查询所有姓刘学生的姓名、学号和性别
SELECT Sname,Sno,Ssex
FROM Student
WHERE Sname LIKE '刘%' ;

--查询姓“欧阳”且全名为三个汉字的学生的姓名
SELECT Sname 
FROM Student 
WHERE Sname LIKE '欧阳_' ;

--查询名字中第二字为“阳”字的学生的姓名和学号
SELECT Sname,Sno 
FROM Student
WHERE LIKE '_阳%';


--查询所有不姓刘的学生姓名、学号和性别
SELECT Sname,Sno,Ssex FROM Student WHERE Sname NOT LIKE '刘%' ;

Tenga en cuenta el uso del carácter de escape /

Consultas que implican valores nulos

--查询缺少成绩学生的学号和相应的课程号
select Sno,Cno 
from SC
where Grade is null;

consulta de condiciones multiples

y tiene mayor prioridad que o

--查询信息系,数学系和计算机科学系学生的姓名和性别
select Sname,Ssex
from Student
where Sdept in('IS','MA','CS')

--或者改写为

select Sname,Ssex
from Student
where Sdept = 'IS' or Sdept = 'MA' or Sdept = 'CS' ;

subconsulta con predicado existe

-- 查询所有选项修了1号课程的学生姓名

# 使用连接运算
select Sname
from Student.SC
where Student.Sno = SC.Sno AND SC.Cno = '1';

# 使用嵌套查询(占用空间小,效率高)
select Sname
from Student
where exists(
select *
from SC
where Sno = Student.Sno ANF Cno = '1'
);

[Ejemplo] Consulta a los estudiantes que estudian en el mismo departamento que "Liu Chen". Usando una subconsulta con un predicado existe

select Sno,Sname,Sdept
from Student S1
where exists (
select *
from Student S2
where S2.Sdept = S1.Sdept AND S2.Sname = '刘晨'
);
-- 查询选修了全部课程的学生姓名
-- 等价于: 没有一门课是他不选修的

select Sname from Student
where not exists (
select * from Course
where not exists(
select * from SC
where Sno = Student.Sno AND Cno = Course.Cno
)
);

Consultas basadas en tablas derivadas

Las subconsultas pueden aparecer no solo en la cláusula where sino también en la cláusula from

# 找出每个学生超过他自己选修课平均成绩的课程号
select Sno,Cno
from SC,(select Sno,Avg(Grade) from SC group by (Sno))
AS Avg_sc(avg_sno,avg_grade)
where SC.Sno = Avg_sc.avg_sno AND SC.Grade >= Avg_sc.avg_grade;

definir vista

vista de compilación

(1) Formato de declaración

crear vista<nombre de vista>[nombre de columna]

【ejemplo】

-- 建立信息系学生的视图
create view IS_Student as
select Sno,Sname,Sage
from Student where Sdept = 'IS';

-- 建立信息学生的视图,并要求进行修改和插入操作时,仍需要保证该视图只有信息系的学生
create view IS_Student as
select Sno,Sname,Sage 
from Student where Sdept = 'IS' WITH CHECK OPTION; # 检查信息完整性的约束

-- 基于多个表的视图
-- 建立信息系选修了1号课程的学生视图
create view is_s1(Sno,Sname,Grade)
as
select Student.Sno,Sname,Grade
from Student,SC
where Sdept = 'IS' AND Student.Sno = SC.Sno AND SC.Cno = '1';

-- 基于视图的视图
-- 建立信息系选修了1号课程且成绩在90分以上的学生视图
create view is_s2
select Sno,Sname,Grade
from is_s1 where Grade >= 90;

-- 带有表达式的视图
-- 定义一个反映学生出生年份的视图
create view bt_s(Sno,Sname,Sbirth)
as select Sno,Sname,2023-Sage from Student;

-- 分组视图
-- 将学生的学号及他的平均成绩定义为一个视图
create view s_g(Sno,Gavg)
as select Sno,AVG(Grade) from SC GROUP BY Sno;

-- 不指定属性列
-- 将Student表中所有男生记录定义为一个视图
create view F_Student(F_Sno,name,sex,age,dept)
as select * from Student where Ssex = '男';
 

eliminar vista

Formato de gramática:

DROP vista <nombre de vista>[CASCADE]

Entre ellos, el significado de CASCADE es el significado de cascada, y cuando se elimine esta tabla, se eliminarán todos los relacionados con ella.

Nota: Al eliminar una tabla básica, la vista correspondiente debe eliminarse con la declaración de vista desplegable

【ejemplo】

(1) Eliminar bt_s: soltar ver bs_s;

  (2) Elimine la vista is_s1 (porque este gráfico está conectado en cascada con otros gráficos): suelte la vista is_s1 CASCADE;

vista de consulta

【ejemplo】

-- 在信息系学生的视图中找出年龄小于20岁的学生
select Sno,Sage from IS_Student where Sage < 20;

-- 查询选修了1号课程的信息系学生
select IS_Student.Sno,Sname
from IS_Student,SC
where IS_Student.Sno = SC.Sno AND SC.Cno = '1';
 

ver actualización 

(insertar, eliminar, modificar)

【ejemplo】

actualizar IS_student set Sname = '刘晨' donde Sno = '200215122';

Declaración convertida:

actualice IS_student set Sname = '刘晨' where Sno = '200215122' AND Sdept = 'IS';

[Ejemplo] Inserte un nuevo registro de estudiante en la vista de estudiante del departamento de información: 200215129, Zhao Xin, 20 años:

insertar en valores IS_Student ('200215129','赵新',20);

Cambiar a actualizaciones de tablas base:

insertar en Estudiante (Sno, Sname, Sage, Sdept)

valores ('200215129','Zhao Xin',20,'IS');

[Ejemplo] Eliminar el registro cuyo número de estudiante es 200215129 en la vista IS_Student del departamento de información estudiante

eliminar de IS_Student donde Sno = '200215129';

Cambiar a actualizaciones de tablas base:

eliminar de Student donde Sno = '200215129' AND Sdept = 'IS';

Supongo que te gusta

Origin blog.csdn.net/qq_72505850/article/details/129991056
Recomendado
Clasificación