1、SQL的分类
-
数据定义语言(DDL - Data Definition Language):
-
用于定义数据库结构(模式、表、视图、索引等),DDL会自动提交事务。
-
常见命令包括:
-
CREATE
:创建数据库对象(例如,表、视图、索引等)。 -
ALTER
:修改数据库对象的结构。 -
DROP
:删除数据库对象。 -
TRUNCATE
:删除表中的所有数据,但保留表结构。 -
COMMENT
:用于添加描述性注释到数据库对象。
-
-
-
数据操作语言(DML - Data Manipulation Language):
-
用于对数据库中的数据进行查询和修改,默认情况下,DML 不自动提交,需要手工提交(commit)和回滚(rollback),对数据的操作 会产生 REDO 和 UNDO日志。
-
常见命令包括:
-
SELECT
:从数据库中查询数据。 -
INSERT
:向数据库表中插入数据。 -
UPDATE
:更新数据库表中的数据。 -
DELETE
:删除数据库表中的数据。
-
-
-
数据控制语言(DCL - Data Control Language):
-
用于控制对数据库的访问权限。
-
常见命令包括:
-
GRANT
:授予用户特定的权限。 -
REVOKE
:撤销用户的特定权限。
-
-
-
事务控制语言(TCL - Transaction Control Language):
-
用于管理数据库事务,以确保数据的一致性和完整性。
-
常见命令包括:
-
COMMIT
:提交事务,将事务中的所有操作永久保存到数据库。 -
ROLLBACK
:回滚事务,撤销事务中的所有操作。 -
SAVEPOINT
:在事务中设置一个保存点,可以回滚到这个保存点。
-
-
2、DDL
1、对表空间的管理
1、添加表空间
注意:DM 数据文件大小,最小值不能低于页大小的 4096 倍(如果页大小是 8K,最小值将不低于 32M),最大值为页大小的 2 的 31 次方-1(如果页大小是 8K,最大值为 16T-1)。
CREATE TABLESPACE DJL DATAFILE 'DJL.DBF' SIZE 256 AUTOEXTEND ON NEXT 5 MAXSIZE 1024;
# CREATE TABLESPACE DJL 表示创建表空间DJL
# DATAFILE 'DJL.DBF' 指定表空间的数据文件,可以有多个
# SIZE 256 指定数据文件的大小,这里是256M
# AUTOEXTEND ON 指定是否开启数据文件自动扩展,ON表示开启,OFF表示关闭
# NEXT 5 指定数据文件扩展一次的容量是多大,这里是每次扩展5M
# MAXSIZE 1024 指定数据文件最多只能扩展到1024M,不能超过1024M
2、设置表空间的状态(脱机/联机)
# 脱机
ALTER TABLESPACE DJL OFFLINE;
# 联机
ALTER TABLESPACE DJL ONLINE;
3、修改表空间
# 1、在表空间下添加一个数据文件
ALTER TABLESPACE DJL ADD DATAFILE 'DJL1.DBF' SIZE 256 AUTOEXTEND ON NEXT 5 MAXSIZE 1024;
# 2、修改表空间下数据文件的大小为512
ALTER TABLESPACE DJL RESIZE DATAFILE 'DJL1.DBF' TO 512;
# 3、修改表空间下数据文件下次扩展的大小为10和最大值2048
ALTER TABLESPACE DJL DATAFILE 'DJL1.DBF' AUTOEXTEND ON NEXT 10 MAXSIZE 2048;
# 4、关闭表空间下数据文件的自动扩展
ALTER TABLESPACE DJL DATAFILE 'DJL1.DBF' AUTOEXTEND OFF;
# 5、修改表空间下数据文件的路径或者名字(如果是修改数据文件的存放路径,确保数据库安装用户dmdba用户是有权限访问该路径的)
ALTER TABLESPACE DJL OFFLINE; # 要在脱机的状态下修改
ALTER TABLESPACE DJL RENAME DATAFILE 'DJL1.DBF' TO 'DJL01.DBF'; # 修改数据文件名称
# ALTER TABLESPACE DJL RENAME DATAFILE 'DJL1.DBF' TO '/opt/DJL01.DBF'; # 修改位置和名称,确保这个/opt目录数据库安装用户dmdba用户能访问
ALTER TABLESPACE DJL ONLINE; # 联机
# 6、修改表空间的名字
ALTER TABLESPACE DJL RENAME TO DJL01;
# 7、为普通表空间添加 HUGE 数据文件路径将其升级为混合表空间
ALTER TABLESPACE DJL ADD HUGE PATH '/dm8/dmdata/APP/HDJL';
4、删除表空间
注意:只能删除空的表空间,如果表空间里面有对象,需要先把这些对象删除了才能删除表空间
# 删除表空间
DROP TABLESPACE DJL;
5、查看表空间信息
虽然查看表空间信息不属于 DDL 操作,但它是管理表空间的重要部分,通常使用查询来实现。
select * from dba_tablespaces; # 查看所有表空间的信息
select * from DBA_DATA_FILES; # 查看所有表空间对应的数据文件信息
select * from v$tablespace; # 查看所有表空间的信息
select * from v$datafile; # 查看所有表空间对应的数据文件信息
select * from DBA_FREE_SPACE; # 查看数据文件剩余空间
2、对重做日志(redo)文件的管理
注意:DM 重做日志文件大小,最小值不能低于页大小的 4096 倍(如果页大小是 8K,最小值将不低于 32M);每个 DM 数据库实例必须至少有 2 个重做日志文件,并且重做日志文件只能添加,不能删除和缩减大小。
1、添加重做日志文件
ALTER DATABASE ADD LOGFILE '/dm8/dmdata/APP/APP03.log' SIZE 128;
2、扩展重做日志文件大小
ALTER DATABASE RESIZE LOGFILE '/dm8/dmdata/APP/APP03.log' TO 512;
3、对角色的管理
1、添加角色
CREATE ROLE DJLDBA;
2、删除角色
DROP ROLE DJLDBA;
3、给角色授权
角色是一组权限的组合,使用角色的目的是使权限管理更加方便。
虽然给角色授权不属于 DDL 操作,是DCL操作,但它是管理角色的重要部分,所以也放在这里。
具体的权限请查看官方文档:自主访问控制
grant "PUBLIC" to "DJLDBA";
grant "RESOURCE" to "DJLDBA";
grant "SOI" to "DJLDBA";
grant "SVI" to "DJLDBA";
grant "VTI" to "DJLDBA";
4、对用户的管理
1、创建用户
创建用户的时候会创建同名的模式,删除用户的时候也会删除同名模式
CREATE USER DJL IDENTIFIED BY "@DaMeng12345" DEFAULT TABLESPACE DJL DEFAULT INDEX TABLESPACE DJL;
# CREATE USER DJL 创建一个DJL用户
# IDENTIFIED BY "@DaMeng12345" 指定DJL用户的登录密码
# DEFAULT TABLESPACE DJL 指定DJL用户默认的表空间是DJL,如果不指定表空间,会默认为MAIN表空间
# DEFAULT INDEX TABLESPACE DJL 指定DJL用户默认的索引表空间为DJL,在生产环境中不建议默认的表空间和默认的索引表空间相同
2、修改用户信息
# 修改用户对应的密码
ALTER USER DJL IDENTIFIED BY "DaMeng12345";
# 修改用户默认表空间
ALTER USER DJL DEFAULT TABLESPACE APP;
# 设置用户只读
ALTER USER DJL READ ONLY;
# 解除用户只读
ALTER USER DJL NOT READ ONLY;
# 给用户上锁
ALTER USER DJL ACCOUNT LOCK;
# 给用户解锁
ALTER USER DJL ACCOUNT UNLOCK;
# 用户资源限制,对用户添加策略。FAILED_LOGIN_ATTEMPS密码输入错误次数,PASSWORD_LOCK_TIME用户锁定时间
ALTER USER DJL LIMIT FAILED_LOGIN_ATTEMPS 5, PASSWORD_LOCK_TIME 3;
3、删除用户
drop user DJL;
drop user if EXISTS DJL; # 如果DJL用户存在就删除
drop user if EXISTS DJL CASCADE; #生产环境慎用,CASCADE表示联级删除,会把DJL用户下的所有对象都删除
4、查看用户信息
虽然查看用户信息不属于 DDL 操作,但它是管理用户的重要部分,通常使用查询来实现。
# 查看默认的密码策略
select * from v$parameter t where t.name = 'PWD_POLICY';
# 查看系统用户信息
select * from dba_users;
select * from sysusers;
select b.USERNAME,a.* from sysusers a, dba_users b where a.id = b.USER_ID;
5、对模式的管理
1、创建模式
CREATE SCHEMA APP AUTHORIZATION DJL;
# APP 模式名
# AUTHORIZATION DJL 指定用户名
2、删除模式
DROP SCHEMA APP;
drop SCHEMA IF EXISTS APP;
drop SCHEMA IF EXISTS APP CASCADE; # cascade级联删除模式下对象,生产环境慎用。
3、切换模式(仅对当前会话生效)
SET SCHEMA DJL; # 切换到DJL模式
4、查看模式等信息
select * from SYSOBJECTS t where t."TYPE$" ='SCH'; # 查看模式
select * from SYSOBJECTS t where t."SUBTYPE$" ='USER'; # 查看用户
# 查询模式和用户的对应关系
select a.id scheid, a.name schename, b.id userid, b.name username
from SYS.SYSOBJECTS a, SYS.SYSOBJECTS b
where a."TYPE$" = 'SCH' and a.pid = b.id;
# 查看当前模式
select sys_context('USERENV','CURRENT_SCHEMA');
# 查看当前用户
select sys_context('USERENV','CURRENT_USER'); 或 select user;
# 查看模式下有哪些表
SELECT table_name FROM all_tables WHERE owner = 'DJL';
6、对表的管理
1、创建表
CREATE TABLE 模式名.表名 (
id INT PRIMARY KEY,
name VARCHAR(100),
department VARCHAR(100)
);
# PRIMARY KEY主键
2、修改表
3 修改表名
ALTER TABLE 模式名.旧表名 RENAME TO 模式名.新表名;
# 添加新列
ALTER TABLE 模式名.表名 ADD 列名 属性类型;
# 修改列的数据类型
ALTER TABLE 模式名.表名 MODIFY 列名 属性类型;
# 修改列的默认值
ALTER TABLE 模式名.表名 MODIFY 列名 DEFAULT 默认值;
# 修改列不能为空
ALTER TABLE 模式名.表名 MODIFY 列名 NOT NULL;
# 重命名列
ALTER TABLE 模式名.表名 RENAME COLUMN 旧列名 TO 新列名;
# 删除列
ALTER TABLE 模式名.表名 DROP COLUMN 列名;
3、删除表
DROP TABLE 模式名.表名;
4、截断表(清空表数据)
TRUNCATE TABLE 模式名.表名;
7、对视图的管理
1、创建视图
CREATE VIEW 模式名.视图名 AS
SELECT id, name, department FROM 模式.表名;
2、删除视图
DROP VIEW 模式名.视图名;
8、对索引的管理
1、创建索引
# 聚集索引
CREATE CLUSTER INDEX 索引名 ON 表名(列名);
# 单列索引
CREATE INDEX 索引名 ON 表名(列名);
# 复合索引
CREATE INDEX 索引名 ON 表名(列名1, 列名2, ...);
# 唯一索引
CREATE UNIQUE INDEX 索引名 ON 表名(列名);
# 位图索引
CREATE BITMAP INDEX 索引名 ON 表名(列名);
2、修改索引
# 索引的重建(生产环境建议使用 online 方式重建,不影响表的 DML 操作):
alter index 索引名 rebuild ONLINE;
# 设置索引为不可用状态
ALTER INDEX 索引名 UNUSABLE;
# 设置索引为可用状态
ALTER INDEX 索引名 USABLE;
# 索引设置为不可见
ALTER INDEX 索引名 INVISIBLE;
# 索引设置为可见
ALTER INDEX 索引名 VISIBLE;
# 开启索引监控
alter index 索引名 MONITORING USAGE;
# 关闭索引监控
alter index 索引名 NOMONITORING USAGE;
3、删除索引
DROP INDEX 索引名;
9、对约束的管理
1、添加约束
# 添加主键约束
ALTER TABLE 表名 ADD CONSTRAINT 约束名 PRIMARY KEY (列名);
# 添加唯一约束
ALTER TABLE 表名 ADD CONSTRAINT 约束名 UNIQUE (列名);
# 添加外键约束
ALTER TABLE 表名 ADD CONSTRAINT 约束名 FOREIGN KEY (列名) REFERENCES 引用的表名 (引用表的列名);
# 添加检查约束
ALTER TABLE 表名 ADD CONSTRAINT 约束名 CHECK (条件);
# 条件实例:CHECK (Salary > 0) ,CHECK (Salary IN ('1','2'))等情况,第一个是检查Salary列的值是否大于0,第二个是检查Salary列的值等于1或者2
2、修改约束
# 修改约束名
ALTER TABLE 表名 RENAME CONSTRAINT 旧的约束名 TO 新的约束名;
# 禁用约束
ALTER TABLE 表名 DISABLE CONSTRAINT 约束名;
# 启动约束
ALTER TABLE 表名 ENABLE CONSTRAINT 约束名;
3、删除约束
ALTER TABLE 表名 DROP CONSTRAINT 约束名;
3、DML
1、插入数据(INSERT)
INSERT INTO 模式名.表名 (列名1, 列名2, ...) VALUES (值1, 值2, ...);
2、修改数据(UPDATE)
UPDATE 模式名.表名 SET 列名1 = 值1, 列名2 = 值2, ... [WHERE 条件];
3、删除数据(DELETE)
DELETE FROM 模式名.表名 [WHERE 条件];
4、查询数据(SELECT)
SELECT column1, column2, ...
FROM 模式名.表名
[WHERE 条件]
[GROUP BY 列名]
[ORDER BY 列名 [ASC|DESC]]
[HAVING 条件];
1、连表查询:
# 内连接:join
select a.DEPARTMENT_ID, b.DEPARTMENT_NAME, count(*) as empnum
from dmhr.employee a join dmhr.DEPARTMENT b
on a.DEPARTMENT_ID = b.DEPARTMENT_ID
group by a.DEPARTMENT_ID, b.DEPARTMENT_NAME
having count(*) >=30
order by empnum desc;
# 外连接:包括左连接、右连接
# 左连接:left join
select a.DEPARTMENT_ID, b.DEPARTMENT_NAME, count(a.employee_id) as empnum
from dmhr.employee a left join dmhr.DEPARTMENT b
on a.DEPARTMENT_ID = b.DEPARTMENT_ID
group by a.DEPARTMENT_ID, b.DEPARTMENT_NAME;
# 右连接:right join
select a.DEPARTMENT_ID, b.DEPARTMENT_NAME, count(a.employee_id) as empnum
from dmhr.employee a right join dmhr.DEPARTMENT b
on a.DEPARTMENT_ID = b.DEPARTMENT_ID
group by a.DEPARTMENT_ID, b.DEPARTMENT_NAME;
# 全外连接:full join
select a.DEPARTMENT_ID, b.DEPARTMENT_NAME, count(a.employee_id) as
empnum
from dmhr.employee a full join dmhr.DEPARTMENT b
on a.DEPARTMENT_ID = b.DEPARTMENT_ID
group by a.DEPARTMENT_ID, b.DEPARTMENT_NAME;
2、DM数据库常见的查询语句:
# 查看当前的数据库
select name from V$database;
# 查看当前的实例名
select instance_name from v$instance;
# 查看当前数据库的状态
select status$ from v$instance;
# 查看数据库所有的数据文件
select path from v$datafile;
# 查看当前模式
select sys_context('USERENV','CURRENT_SCHEMA');
# 查看当前用户
select sys_context('USERENV','CURRENT_USER'); 或 select user;
# 查看数据库参数类型有哪些
select distinct para_type from v$dm_ini;
# 查看数据库页面缓冲区信息
select * from v$bufferpool;
# 查看数据库各个缓冲区的值
select * from SYS."V$PARAMETER" t
WHERE name in ('BUFFER','FAST_POOL_PAGES','RECYCLE','KEEP');
# 查看缓冲区中缓冲项的相关信息
select * from v$cacheitem;
# 查看SQL缓冲区中SQL语句的信息
select * from v$cachesql;
# 查看缓冲区中的执行计划信息
select * from v$cachepln;
# 查看数据库结果集缓冲区的相关信息
select * from v$cachers;
# 查看当前数据库中的动态视图
select * from v$dynamic_tables;
# 查看字典缓存中的字典对象信息
select * from V$DICT_CACHE_ITEM;
# 查看字典缓存信息
select * from V$DICT_CACHE;
# 查看参数DICT_BUF_SIZE的初始值
select name, type, value, sys_value, file_value from v$parameter t where name like
'DICT_BUF_SIZE';
# 所有的内存池信息
select * from V$mem_pool;
# 查看数据库的进程信息
select * from V$process;
# 查看数据库的线程信息
select * from v$threads;
# 查看所有表空间的信息
select * from dba_tablespaces;
# 查看所有表空间对应的数据文件信息
select * from DBA_DATA_FILES;
# 查看所有表空间的信息
select * from v$tablespace;
# 查看数据文件剩余空间
select * from DBA_FREE_SPACE;
# 查看数据库日志文件的具体信息
select * from v$rlogfile;
# 查看日志的总体信息
select * from v$rlog;
# 查看数据库归档配置
select * from SYS."V$DM_ARCH_INI";
# 查看数据库用户信息
select * from dba_users;
# 查看当前用户拥有的权限:
select * from session_privs;
# 查看数据库中角色信息
select * from dba_roles;
# 查看数据库中所有对象的信息
select * from SYSOBJECTS;
# 查看数据库中所有的参数信息
select * from v$parameter;
# 查看某个模式下的某个表的结构信息
select * from dba_tab_columns t where t.owner='模式名' AND t.TABLE_NAME='表名';
# 查看数据库中所有的约束信息
select * from dba_constraints;
# 查看数据库中所有的索引信息
select * from dba_indexes;
# 查询数据库中事务等待信息
select * from v$trxwait;
# 查看数据库活动的事务锁信息
select * from v$lock;
# 显示当前会话的具体信息,如执行的 sql 语句、主库名、当前会话状态、用户名等等
select * from v$sessions;
# 查询数据库永久魔数
select permanent_magic;
# 查询数据库当前魔数
select db_magic from v$rlog;
4、DCL
具体详细的授权信息请查看官方文档:自主访问控制
1、赋予权限
GRANT 权限 TO 用户或角色;
2、回收权限
REVOKE 权限 FROM 用户或角色;
5、TCL
1、提交事务
# 将当前事务的所有更改保存到数据库中
COMMIT;
2、回滚事务
# 用于撤销当前事务的所有更改,恢复到事务开始时的状态。
ROLLBACK;
# 回滚到某个保存点
ROLLBACK TO 保存点名称;
3、设置保存点
# 用于撤销当前事务的所有更改,恢复到事务开始时的状态。
SAVEPOINT 保存点名称;
6、案例练习
1、创建表练习
需要设计一个数据库来管理一个大型在线教育平台的课程、学生、教师以及相关信息。具体要求如下:
-
学生表(Students)
-
学生ID(student_id):主键,整型,自增
-
姓名(name):字符串,长度不超过50
-
出生日期(birth_date):日期类型
-
性别(gender):字符型,长度1,值只能是'M'或'F'
-
邮箱(email):字符串,长度不超过100,唯一
-
电话号码(phone_number):字符串,长度不超过15
-
-
教师表(Teachers)
-
教师ID(teacher_id):主键,整型,自增
-
姓名(name):字符串,长度不超过50
-
邮箱(email):字符串,长度不超过100,唯一
-
电话号码(phone_number):字符串,长度不超过15
-
职称(title):字符串,长度不超过30
-
-
课程表(Courses)
-
课程ID(course_id):主键,整型,自增
-
课程名称(course_name):字符串,长度不超过100
-
描述(description):文本类型
-
学分(credits):整型
-
-
注册表(Registrations)
-
学生ID(student_id):外键,引用学生表的student_id
-
课程ID(course_id):外键,引用课程表的course_id
-
注册日期(registration_date):日期类型
-
成绩(grade):字符型,长度1,值可以是'A', 'B', 'C', 'D', 'F',允许为空
-
联合主键(student_id, course_id)
-
-
授课表(TeachingAssignments)
-
教师ID(teacher_id):外键,引用教师表的teacher_id
-
课程ID(course_id):外键,引用课程表的course_id
-
学期(semester):字符串,长度不超过10
-
年份(year):整型
-
联合主键(teacher_id, course_id, semester, year)
-
-
要求
-
请确保所有外键约束和主键约束正确设置。
-
考虑字段的长度和数据类型的选择。
-
在创建表时,添加适当的索引来优化查询性能。
-
-- 创建学生表
CREATE TABLE STUDENTS(
STUDENT_ID INTEGER PRIMARY KEY IDENTITY(1,1),
NAME VARCHAR(50) NOT NULL,
BIRTH_DATE DATE NOT NULL,
GENDER CHAR(1) CHECK (GENDER IN ('M','F')) NOT NULL,
EMAIL VARCHAR(100) UNIQUE NOT NULL,
PHONE_NUMBER VARCHAR(15)
);
-- 创建教师表
CREATE TABLE TEACHERS(
TEACHER_ID INTEGER PRIMARY KEY IDENTITY(1,1),
NAME VARCHAR(50) NOT NULL,
EMAIL VARCHAR(100) UNIQUE NOT NULL,
PHONE_NUMBER VARCHAR(15),
TITLE VARCHAR(30)
);
-- 创建课程表
CREATE TABLE COURSES(
COURSE_ID INTEGER PRIMARY KEY IDENTITY(1,1),
COURSE_NAME VARCHAR(100) NOT NULL,
DESCRIPTION TEXT,
CREDITS INTEGER NOT NULL
);
-- 创建注册表
CREATE TABLE REGISTRATIONS(
STUDENT_ID INTEGER,
COURSE_ID INTEGER,
REGISTRATION_DATE DATE NOT NULL,
GRADE CHAR(1) CHECK (GRADE IN ('A','B','C','D','F')),
PRIMARY KEY (STUDENT_ID, COURSE_ID),
FOREIGN KEY (STUDENT_ID) REFERENCES STUDENTS (STUDENT_ID),
FOREIGN KEY (COURSE_ID) REFERENCES COURSES (COURSE_ID)
);
-- 创建授课表
CREATE TABLE TEACHING_ASSIGNMENTS(
TEACHER_ID INTEGER,
COURSE_ID INTEGER,
SEMESTER VARCHAR(10) NOT NULL,
YEAR INTEGER NOT NULL,
PRIMARY KEY (TEACHER_ID, COURSE_ID, SEMESTER, YEAR),
FOREIGN KEY (TEACHER_ID) REFERENCES TEACHERS (TEACHER_ID),
FOREIGN KEY (COURSE_ID) REFERENCES COURSES (COURSE_ID)
);
-- 创建索引以优化查询性能(根据需要来创建)
CREATE INDEX idx_students_email ON STUDENTS (EMAIL);
CREATE INDEX idx_teachers_email ON TEACHERS (EMAIL);
CREATE INDEX idx_courses_name ON COURSES (COURSE_NAME);
CREATE INDEX idx_registrations_student ON REGISTRATIONS (STUDENT_ID);
CREATE INDEX idx_registrations_course ON REGISTRATIONS (COURSE_ID);
CREATE INDEX idx_teaching_assignments_teacher ON TEACHING_ASSIGNMENTS (TEACHER_ID);
CREATE INDEX idx_teaching_assignments_course ON TEACHING_ASSIGNMENTS (COURSE_ID);
2、增删改查练习
-
插入数据
-
向
STUDENTS
表中插入以下学生记录:-
张三,2000-03-01,M,zhangsan@djl.com,13243253257
-
李四,1999-05-21,F,lisi@djl.com,13312345678
-
王五,2001-07-11,M,wangwu@djl.com,13423456789
-
赵六,1998-08-15,F,zhaoliu@djl.com,13534567890
-
钱七,2002-12-12,M,qianqi@djl.com,13645678901
-
孙八,2000-10-10,F,sunba@djl.com,13756789012
-
周九,1997-11-22,M,zhoujiu@djl.com,13867890123
-
吴十,2001-04-05,F,wushi@djl.com,13978901234
-
郑十一,1999-06-18,M,zhengshiyi@djl.com,14089012345
-
王十二,1998-09-09,F,wangshier@djl.com,14190123456
-
-
向
TEACHERS
表中插入以下教师记录:-
王老师,wanglaoshi@djl.com,13876543210,教授
-
赵老师,zhaolaoshi@djl.com,13987654321,副教授
-
钱老师,qianlaoshi@djl.com,13787654321,讲师
-
孙老师,sunlaoshi@djl.com,13687654321,助教
-
-
向
COURSES
表中插入以下课程记录:-
数据库系统,介绍数据库及SQL,3
-
算法,算法与数据结构,4
-
操作系统,操作系统原理与应用,3
-
计算机网络,网络原理及应用,4
-
人工智能,AI基础与应用,3
-
-
向
REGISTRATIONS
表中插入以下学生的课程注册记录:-
学生ID:1,课程ID:1,2023-01-15,A
-
学生ID:2,课程ID:2,2023-01-16,B
-
学生ID:3,课程ID:3,2023-01-17,A
-
学生ID:4,课程ID:4,2023-01-18,C
-
学生ID:5,课程ID:5,2023-01-19,B
-
学生ID:6,课程ID:1,2023-01-20,A
-
学生ID:7,课程ID:2,2023-01-21,B
-
学生ID:8,课程ID:3,2023-01-22,C
-
学生ID:9,课程ID:4,2023-01-23,A
-
学生ID:10,课程ID:5,2023-01-24,B
-
-
向
TEACHING_ASSIGNMENTS
表中插入以下教师的授课安排记录:-
教师ID:1,课程ID:1,春季,2023
-
教师ID:2,课程ID:2,秋季,2023
-
教师ID:3,课程ID:3,春季,2023
-
教师ID:4,课程ID:4,秋季,2023
-
教师ID:1,课程ID:5,春季,2023
-
-
-
修改数据
-
修改学生张三的邮箱为:zhangsan_updated@djl.com,电话号码为:15555555555
-
修改课程“数据库系统”的描述为:高级数据库及SQL研究
-
-
删除数据
-
删除李四的课程注册记录(学生ID:2,课程ID:2)
-
删除学生李四的记录(学生ID:2)
-
-
查询数据
-
查询所有学生的信息
-
查询所有课程的信息
-
-
连表查询
-
查询每个学生注册的课程及其成绩
-
查询每门课程的授课教师
-
查询学生张三的所有信息及其注册课程和成绩
-
SQL 代码如下
插入数据:
-- 插入学生数据
INSERT INTO STUDENTS (NAME, BIRTH_DATE, GENDER, EMAIL, PHONE_NUMBER)
VALUES
('张三', '2000-03-01', 'M', 'zhangsan@djl.com', '13243253257'),
('李四', '1999-05-21', 'F', 'lisi@djl.com', '13312345678'),
('王五', '2001-07-11', 'M', 'wangwu@djl.com', '13423456789'),
('赵六', '1998-08-15', 'F', 'zhaoliu@djl.com', '13534567890'),
('钱七', '2002-12-12', 'M', 'qianqi@djl.com', '13645678901'),
('孙八', '2000-10-10', 'F', 'sunba@djl.com', '13756789012'),
('周九', '1997-11-22', 'M', 'zhoujiu@djl.com', '13867890123'),
('吴十', '2001-04-05', 'F', 'wushi@djl.com', '13978901234'),
('郑十一', '1999-06-18', 'M', 'zhengshiyi@djl.com', '14089012345'),
('王十二', '1998-09-09', 'F', 'wangshier@djl.com', '14190123456');
-- 插入教师数据
INSERT INTO TEACHERS (NAME, EMAIL, PHONE_NUMBER, TITLE)
VALUES
('王老师', 'wanglaoshi@djl.com', '13876543210', '教授'),
('赵老师', 'zhaolaoshi@djl.com', '13987654321', '副教授'),
('钱老师', 'qianlaoshi@djl.com', '13787654321', '讲师'),
('孙老师', 'sunlaoshi@djl.com', '13687654321', '助教');
-- 插入课程数据
INSERT INTO COURSES (COURSE_NAME, DESCRIPTION, CREDITS)
VALUES
('数据库系统', '介绍数据库及SQL', 3),
('算法', '算法与数据结构', 4),
('操作系统', '操作系统原理与应用', 3),
('计算机网络', '网络原理及应用', 4),
('人工智能', 'AI基础与应用', 3);
-- 插入注册数据
INSERT INTO REGISTRATIONS (STUDENT_ID, COURSE_ID, REGISTRATION_DATE, GRADE)
VALUES
(1, 1, '2023-01-15', 'A'),
(2, 2, '2023-01-16', 'B'),
(3, 3, '2023-01-17', 'A'),
(4, 4, '2023-01-18', 'C'),
(5, 5, '2023-01-19', 'B'),
(6, 1, '2023-01-20', 'A'),
(7, 2, '2023-01-21', 'B'),
(8, 3, '2023-01-22', 'C'),
(9, 4, '2023-01-23', 'A'),
(10, 5, '2023-01-24', 'B');
-- 插入授课数据
INSERT INTO TEACHING_ASSIGNMENTS (TEACHER_ID, COURSE_ID, SEMESTER, YEAR)
VALUES
(1, 1, '春季', 2023),
(2, 2, '秋季', 2023),
(3, 3, '春季', 2023),
(4, 4, '秋季', 2023),
(1, 5, '春季', 2023);
-- 提交事务
COMMIT;
修改数据:
-- 修改学生信息
UPDATE STUDENTS
SET EMAIL = 'zhangsan_updated@djl.com', PHONE_NUMBER = '15555555555'
WHERE NAME = '张三';
-- 修改课程信息
UPDATE COURSES
SET DESCRIPTION = '高级数据库及SQL研究'
WHERE COURSE_NAME = '数据库系统';
-- 提交事务
COMMIT;
删除数据:
-- 删除李四的课程注册记录
DELETE FROM REGISTRATIONS
WHERE STUDENT_ID = (SELECT STUDENT_ID FROM STUDENTS WHERE NAME = '李四');
-- 删除学生李四的记录
DELETE FROM STUDENTS
WHERE NAME = '李四';
-- 提交事务
COMMIT;
单表查询:
-- 查询所有学生的信息
SELECT * FROM STUDENTS;
-- 查询所有课程的信息
SELECT * FROM COURSES;
连表查询:
-- 查询每个学生注册的课程及其成绩
SELECT S.NAME AS STUDENT_NAME, C.COURSE_NAME, R.GRADE
FROM REGISTRATIONS R
JOIN STUDENTS S ON R.STUDENT_ID = S.STUDENT_ID
JOIN COURSES C ON R.COURSE_ID = C.COURSE_ID;
-- 查询每门课程的授课教师
SELECT C.COURSE_NAME, T.NAME AS TEACHER_NAME, TA.SEMESTER, TA.YEAR
FROM TEACHING_ASSIGNMENTS TA
JOIN TEACHERS T ON TA.TEACHER_ID = T.TEACHER_ID
JOIN COURSES C ON TA.COURSE_ID = C.COURSE_ID;
-- 查询学生张三的所有信息及其注册课程和成绩
SELECT S.*, C.COURSE_NAME, R.GRADE
FROM STUDENTS S
JOIN REGISTRATIONS R ON S.STUDENT_ID = R.STUDENT_ID
JOIN COURSES C ON R.COURSE_ID = C.COURSE_ID
WHERE S.NAME = '张三';
大家想学习达梦数据库或者解决报错问题,可以去达梦数据库社区地址(https://eco.dameng.com)制作不易,各位看官如果觉得还可以,请给小弟一键三连鼓励一下