目录
1、ASC方式,排序列为NULL的元组(记录、行)最先显示;
2、DESC方式,排序列为NULL的元组(记录、行)最后显示;
说明:行子查询返回的一条记录与指定的条件比较,比较的运算符通常使用=;行子查询的结果必须全部与指定的字段相等才满足WHERE指定的条件。
-
前言
一、为什么要学习国产数据库?
数据库已成为现代软件生态的基石之一,遗憾的是,国产数据库的技术水平与国外一流水平相对还有一定的差距。同事国家数据库在关键领域的应用普及度相对较低,应用研发人员规模较小,大力推动和普及国产数据库的应用是当务之急。
-
达梦数据库的特点
达梦数据库管理系统是达梦公司推出的具有完全自主知识产权的高性能数据库管理系统,简称DM,它具有如下特点:
1、通用性
达梦数据库管理系统兼容多种硬件体系,可运行于X86、X64、SPARC、
POWER等硬件体系之上。DM各种平台上的数据存储结构和消息通信结构完全一
致,使得DM各种组件在不同的硬件平台上具有一致的使用特性。
达梦数据库管理系统产品实现了平台无关性,支持Windows系列、各版本
Linux(2.4及2.4以上内核)、Unix、Kylin、AIX、Solaris等各种主流操作系
统。达梦数据库的服务器、接口程序和管理工具均可在32位/64位版本操作系统
上使用。
2、高性能
支持列存储、数据压缩、物化视图等面向联机事务分析场景的优化选项;
通过表级行存储、列存储选项技术,在同一产品中提供对联机事务处理和联机
分析处理业务场景的支持;
3、高可用
可配置数据守护系统(主备),自动快速故障恢复,具有强大的容灾处理能力。
4、跨平台
跨平台,支持主流软硬件体系(支持windows、Linux、中标麒麟、银河麒麟
等操作系统),支持主流标准接口。
5、高可扩展
支持拓展软件包和多种工具,实现海量数据分析处理、数据共享集群(DSC)和
无共享数据库集群(MPP)等扩展功能。
-
达梦数据库常用对象管理
1、表空间管理
1、创建表空间:可以使用CREATE TABLESPACE语句来创建表空间。
创建表空间的SQL命令格式如下:
CREATE TABLESPACE<表空间名><数据文件子句>[<数据页缓冲池子句>][<存储加密子句>];
2、修改表空间:可以使用ALTER TABLESPACE语句来修改表空间的属性。
修改表空间的SQL命令格式如下:
ALTER TABLESPACE <表空间> [ONLINE | OFFLINE | <表空间重命名子句> | <数据文件重命名子句> | <增加数据文件子句> |<修改文件大小子句> |<修改文件自动扩展子句> | <数据页缓冲池子句>];
3、删除表空间:可以使用DROP TABLESPACE语句来删除表空间。
删除表空间的SQL命令格式如下:
DROP TABLESPACE <表空间名>
2、用户管理
1、创建用户:使用CREATE USER语句创建用户。
2、删除用户:使用DROP USER语句删除用户。
3、修改用户:可以使用ALTER USER语句修改用户的属性,例如修改密码、设置角色等。
4、角色管理:可以使用CREATE ROLE和DROP ROLE语句创建和删除角色,使用GRANT和REVOKE语句授权给用户或者其他角色。
5、授权管理:可以使用GRANT和REVOKE语句授权用户的权限,例如SELECT、INSERT、UPDATE、DELETE等。
6、查询用户信息:可以通过查询系统表来查看已经存在的用户以及相关信息。
创建用户:
create user TEST identified by "dameng123";
删除用户:
drop user TEST;
修改用户:
alter user TEST identified by "Dameng123";
3、模式管理
1、创建模式:使用CREATE SCHEMA语句创建模式。
2、删除模式:使用DROP SCHEMA语句删除模式。
3、修改模式:可以通过ALTER SCHEMA语句修改模式名称。
4、授权管理:可以使用GRANT和REVOKE语句管理模式的授权,授权给特定的用户或角色。
5、模式查询:可以通过查询系统表来查看已经存在的模式以及相关信息。
创建模式:
CREATE SCHEMA DAMENG AUTHORIZATION SYSDBA;
删除模式:
drop schema DAMENG;
创建表:
create table DMHR.TEST
(ID INT,NAME CHAR(10));
增加列:
alter table DMHR.TEST add column(AGE INT);
删除列:
alter table DMHR.TEST drop column AGE;
删除表:
drop table DMHR.TEST;
增加约束:
alter table DMHR.TEST add constraint TEST_UNI unique(ID);
删除约束:
alter table DMHR.TEST drop constraint TEST_UNI;
禁用约束:
alter table DMHR.TEST disable constraint TEST_UNI;
启用约束:
alter table DMHR.TEST enable constraint TEST_UNI;
-
数据操作
1、数据插入
数据插入的SQL命令格式如下:
INSERT [INTO] 表名[(字段名1,字段名2,…)]
VALUES(值1,值2,…)[,(值1,值2,…),…];
简化:
格式1:(简化格式)
INSERT INTO 表名
VALUES(值1,值2,…,值n);
格式1-1:(简化格式)
INSERT INTO 表名
VALUES(值1,值2,…,值n),(值1,值2,…,值n),…;
格式2:(基本格式)
INSERT INTO 表名(字段名1,字段名2,…)
VALUES(值1,值2,…);
格式2-1:(基本格式)
INSERT INTO 表名(字段名1,字段名2,…)
VALUES(值1,值2,…),(值1,值2,…),…;
2、数据更新
数据修改的SQL命令格式如下:
UPDATE 表名
SET 字段名1 = 值1[,字段名2 = 值2,……]
[WHERE 条件表达式] ;
简化:
格式1:(基本格式)
UPDATE 表名
SET 字段名1 = 值1
WHERE 条件表达式;
格式1-1:(基本格式)
UPDATE 表名
SET 字段名1=值1,字段名2=值2,…字段名n=值n
WHERE 条件表达式;
格式2: (无条件格式)
UPDATE 表名
SET 字段名1 = 值1
格式2-1: (无条件格式)
UPDATE 表名
SET 字段名1=值1,字段名2=值2,…字段名n=值n
3、数据删除
数据删除的SQL命令格式如下:
DELETE FROM 表名 [WHERE 条件表达式] ;
简化:
格式1:(基本格式)
DELETE FROM 表名
WHERE 条件表达式;
格式2:(无条件格式)
DELETE FROM 表名;
格式3: (清空表)
TRUNCATE [TABLE] 表名;
-
单表查询
1、基础查询
达梦数据库从数据表中查询数据的基本语句是SELECT语句,语法如下:
SELECT [DISTINCT] *|{字段名1, 字段名2, 字段名3,……}
FROM 表名
[WHERE 条件表达式1]
[GROUP BY 字段名 [HAVING 条件表达式2]]
[ORDER BY 字段名 [ASC|DESC]]
[LIMIT [OFFSET,] 记录数];
2、条件查询
WHERE子句实现的基本语法如下:
SELECT <选择列表>
FROM [<模式名>]<基表名> | <视图名>[<相关名>]
WHERE子句
运算符:使用比较运算符(如=、<、>、<=、>=、<>等)和逻辑运算符(如AND、OR、NOT等)来组合多个条件。
3、高级查询
DISTINCT关键字:
DISTINCT 字段名1 [, 字段名2 ]…
ORDER BY 子句:
ORDER BY 字段名 [ASC|DESC]
多字段排序 (多重排序)
语法:ORDER BY 字段名1 [ASC | DESC] [, 字段名2 [ASC | DESC]]…
关于空值NULL排序问题:
1、ASC方式,排序列为NULL的元组(记录、行)最先显示;
2、DESC方式,排序列为NULL的元组(记录、行)最后显示;
LIMIT 关键字:
LIMIT [偏移量,] 记录数
【例】查询借阅表中第6-10行记录。
select * from TBL_BorrowInfo limit 5,5;
4、分组查询
GROUP BY子句:
语法:GROUP BY 字段名
【例】从TBL_Bookinfo 表查询出各出版社的图书册数
select Publisher ,COUNT(*) from TBL_Bookinfo
group by Publisher;
HAVING子句:
语法如下:
SELECT [DISTINCT] 字段列表 FROM 数据表名
[WHERE 条件表达式]
GROUP BY 字段名 [ASC | DESC][, …]
HAVING 条件表达式;
GROUP BY自带排序*:
分组排序:默认分组操作的字段按升序排序,也可在分组时指定升序或降序排序。
语法:GROUP BY 字段名[ASC | DESC]
GROUP BY多重分组*:
多字段分组统计:按某个字段进行分组后,对已经分组的数据进行再次分组的操作。
语法:GROUP BY 字段名1 [ASC | DESC] [, 字段名2 [ASC | DESC] …]
-
多表查询
1、连接查询
连接查询:如果一个查询需要对多个表进行操作,就称为连接查询。
连接查询方式有内连接查询、外连接查询、自连接查询。下面分别进行介绍:
1、内连接是最常见的连接查询,它根据匹配条件(连接条件)返回第一个表与第二个表所有匹配成功的记录,语法如下:
SELECT 输出项
FROM 表1 [INNER] JOIN 表2 ON 表2.公共列=表1.公共列;
ON用于指定内连接的连接条件。在不设置ON时,与交叉连接等价。
升级到三表查询,语法如下:
SELECT 输出项
FROM 表1
[INNER] JOIN 表2 ON 表2.公共列=表1.公共列
[INNER] JOIN 表3 ON 表3.公共列=表1|2.公共列;
2、左外连接 关键字:LEFT [OUTER] JOIN ON
说明:关键字左侧的表的所有数据均显示,关键字右侧的表匹配内容显示,无对应内容使用NULL填充
右外连接 关键字:RIGHT [OUTER] JOIN ON
说明:关键字右侧的表的所有数据均显示,关键字左侧的表匹配内容显示,无对应内容使用NULL填充
3、自连接是内连接中的一种特殊查询,把一个表和它自身的另一个实例联接起来,查找同一个表中拥有相同值的行。当引用表的两份复本时,必须指定表的别名。
【例】
select a. BookID,a. Author,a. BookName, b. BookID,b. Author
from TBL_BookInfo as a inner join TBL_BookInfo as b
on a. BookName=b. BookName
where a.author>b.author;
2、子查询
子查询:一条SELECT语句嵌套在另一条语句内部,即为子查询。它可以嵌套在SELECT、DELETE、INSERT INTO、CREATE TALBE等语句中。
嵌套查询:一条SELECT语句嵌套在另一条SELECT语句内部所构成的查询。首先会执行内层查询(子查询),然后将返回的结果作为外层查询(主查询)的过滤条件(筛选行)或数据源。
子查询作为查询条件
1.标量子查询:子查询返回的结果是一个数据(惟一值),即一行一列。
语法:SELECT主查询 WHERE 字段名 =(标量子查询) #或其他比较运算符
2.列子查询:子查询返回的结果是一个字段符合条件的所有数据,即一列多行(集合)。
语法:SELECT主查询 WHERE 字段名 in(列子查询) #或not in()
3.行子查询*:子查询的结果是一条包含多个字段的记录,即一行多列。
语法:SELECT主查询 WHERE (指定字段名1,指定字段名2,…) =(行子查询)
例子:
【例】显示页数最多图书的书名和页数。
-- 主语句
select BookName,PageCount from LIBRARY00.TBL_BookInfo
-- 子查询---
select MAX(PageCount) from LIBRARY00.TBL_BookInfo #1225,返回一行一列(惟一值)
-- 主查询----
select BookName,PageCount from LIBRARY00.TBL_BookInfo
where PageCount=(select MAX(PageCount) from LIBRARY00.TBL_BookInfo ) ; #使用=号
说明:行子查询返回的一条记录与指定的条件比较,比较的运算符通常使用=;行子查询的结果必须全部与指定的字段相等才满足WHERE指定的条件。
-
总结
经过一个学期的数据库课程的学习,我基本上掌握了创建数据库以及对数据库的操作的基础知识。学习了SQL数据库中的增、删、改、查等功能,数据库这门课涉及到以前的知识不多,是一门从头学起的课程,即使基础不是很好,只要认真听讲、复习功课,还是一门比较容易掌握的课。
正是由于这门课和以前关系不大,很多知识也从未接触过,因此对于这门课的学习方法就是:理论课上认真听老师讲理论知识,上机课上仔细看老师的演示过程、在电脑上按照老师的演示步骤自己做,遇到自己无法做出来的过程(步骤)请教老师或者同学。
本文较为详细地梳理了DMSQL的分类以及常用sql语句,包括单表查询、条件查询、多表连接查询、子查询等。
最后,能够将所学到的sql查询语言运用到开发实践中才是重点,这也就考量我们能否在开发中想到这些知识。