达梦数据库常用的sql语句

1、SQL的分类

  1. 数据定义语言(DDL - Data Definition Language):

    1. 用于定义数据库结构(模式、表、视图、索引等),DDL会自动提交事务。

    2. 常见命令包括:

      • CREATE:创建数据库对象(例如,表、视图、索引等)。

      • ALTER:修改数据库对象的结构。

      • DROP:删除数据库对象。

      • TRUNCATE:删除表中的所有数据,但保留表结构。

      • COMMENT:用于添加描述性注释到数据库对象。

  2. 数据操作语言(DML - Data Manipulation Language):

    1. 用于对数据库中的数据进行查询和修改,默认情况下,DML 不自动提交,需要手工提交(commit)和回滚(rollback),对数据的操作 会产生 REDO 和 UNDO日志。

    2. 常见命令包括:

      • SELECT:从数据库中查询数据。

      • INSERT:向数据库表中插入数据。

      • UPDATE:更新数据库表中的数据。

      • DELETE:删除数据库表中的数据。

  3. 数据控制语言(DCL - Data Control Language):

    1. 用于控制对数据库的访问权限。

    2. 常见命令包括:

      • GRANT:授予用户特定的权限。

      • REVOKE:撤销用户的特定权限。

  4. 事务控制语言(TCL - Transaction Control Language):

    1. 用于管理数据库事务,以确保数据的一致性和完整性。

    2. 常见命令包括:

      • 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、创建表练习

需要设计一个数据库来管理一个大型在线教育平台的课程、学生、教师以及相关信息。具体要求如下:

  1. 学生表(Students)

    1. 学生ID(student_id):主键,整型,自增

    2. 姓名(name):字符串,长度不超过50

    3. 出生日期(birth_date):日期类型

    4. 性别(gender):字符型,长度1,值只能是'M'或'F'

    5. 邮箱(email):字符串,长度不超过100,唯一

    6. 电话号码(phone_number):字符串,长度不超过15

  2. 教师表(Teachers)

    1. 教师ID(teacher_id):主键,整型,自增

    2. 姓名(name):字符串,长度不超过50

    3. 邮箱(email):字符串,长度不超过100,唯一

    4. 电话号码(phone_number):字符串,长度不超过15

    5. 职称(title):字符串,长度不超过30

  3. 课程表(Courses)

    1. 课程ID(course_id):主键,整型,自增

    2. 课程名称(course_name):字符串,长度不超过100

    3. 描述(description):文本类型

    4. 学分(credits):整型

  4. 注册表(Registrations)

    1. 学生ID(student_id):外键,引用学生表的student_id

    2. 课程ID(course_id):外键,引用课程表的course_id

    3. 注册日期(registration_date):日期类型

    4. 成绩(grade):字符型,长度1,值可以是'A', 'B', 'C', 'D', 'F',允许为空

    5. 联合主键(student_id, course_id)

  5. 授课表(TeachingAssignments)

    1. 教师ID(teacher_id):外键,引用教师表的teacher_id

    2. 课程ID(course_id):外键,引用课程表的course_id

    3. 学期(semester):字符串,长度不超过10

    4. 年份(year):整型

    5. 联合主键(teacher_id, course_id, semester, year)

  6. 要求

    1. 请确保所有外键约束和主键约束正确设置。

    2. 考虑字段的长度和数据类型的选择。

    3. 在创建表时,添加适当的索引来优化查询性能。

-- 创建学生表
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、增删改查练习

  1. 插入数据

    1. 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

    2. TEACHERS 表中插入以下教师记录:

      • 王老师,wanglaoshi@djl.com,13876543210,教授

      • 赵老师,zhaolaoshi@djl.com,13987654321,副教授

      • 钱老师,qianlaoshi@djl.com,13787654321,讲师

      • 孙老师,sunlaoshi@djl.com,13687654321,助教

    3. COURSES 表中插入以下课程记录:

      • 数据库系统,介绍数据库及SQL,3

      • 算法,算法与数据结构,4

      • 操作系统,操作系统原理与应用,3

      • 计算机网络,网络原理及应用,4

      • 人工智能,AI基础与应用,3

    4. 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

    5. 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

  2. 修改数据

    1. 修改学生张三的邮箱为:zhangsan_updated@djl.com,电话号码为:15555555555

    2. 修改课程“数据库系统”的描述为:高级数据库及SQL研究

  3. 删除数据

    1. 删除李四的课程注册记录(学生ID:2,课程ID:2)

    2. 删除学生李四的记录(学生ID:2)

  4. 查询数据

    1. 查询所有学生的信息

    2. 查询所有课程的信息

  5. 连表查询

    1. 查询每个学生注册的课程及其成绩

    2. 查询每门课程的授课教师

    3. 查询学生张三的所有信息及其注册课程和成绩

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)制作不易,各位看官如果觉得还可以,请给小弟一键三连鼓励一下 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值