前言:达梦sql属于结构化的语言,会写mysql那么你直接就能上手DM_SQL,结构化查询语言SQL(Structured Query Language)是在1974年提出的一种关系型数据库语言。由于语言接近英语的语句结构,方便简洁、使用灵活、功能强大,备受用户以及计算机工业界的欢迎,被众多计算机公司和数据库厂商所采用的,经各公司的不断修改、扩充和完善,SQL语言最终发展成为关系数据库的标准语言。相关的代码SQL为达梦文档汇总
1.DM_SQL语言的特点
DM_SQL语言符合结构化语言的SQL标准,是标准SQL的扩充。它及数据定义、数据查询、数据操纵和数据控制一体,是一种统一的、综合的关系数据库语言。他功能强大,使用简单方便、容易为用户掌握。DM_SQL语言具有如下特点:
1.功能一体化,DM_SQL的功能一体化表现在以下两个方面
1)DM_SQL支持多媒体数据类型,用保护在建表示可以直接使用。DM系统在处理常规数据与多媒体数据时达到了四个一体化:一体化定义、一体化存储、一体化检索一体化处理,最大限度的提高了数据库管理系统处理多媒体的能力和速度;
2)DM_SQL语言集数据库的定义、查询、更新、控制、维护、回复、安全等一系列操作与一体,每一项操作都只有一种操作符表示,格式规范,峰哥一直,简单方便,很容易掌握。
2.高度费非过程化
DM_SQL语言是一种非过程化语言。用户只需要住处“做什么”,而不需要指出“怎么做”,对数据存取路径的选择以及DM_SQL语言功能的实现均由系统自动完成,与用户编制的应用程序与具体的机器及关系DBMS的实现细节无关,从而方便了用户,提高了应用程序的开发效率,也增强了数据独立性和应用系统的可移植性。
3.面向集合的操作方式
DM_SQL语言曹勇了集合操作方式。不进查询结果可以是元组的集合,而且一次插入、删除、修改操作的对象也可以是元组的集合,向对面向记录的数据库语言(一次只能操作一条记录)来说,DM_SQL语言的使用简化了用户的处理,提高了应用程序的运行效率。
4.语言简洁,方便易学
DM_SQL语言功能强大,格式规范,表达简洁,接近英语的语法结构,容易被用户所掌握,有操作MYSQL经验的基本上上手机会。
2.DM_SQL语言的特点
DM_SQL语言是一种介于关系代数和关系演算之间的语言,其功能主要包括数据定义、查询、操纵和控制四个方面,通过各种不同的SQL语句来实现。按照所实现的功能,DM_SQL语句分为以下几种:
1.用户、模式、基表、视图、索引、序列、全文索引、存储过程、触发器等数据库对象的定义和删除语句,数据库、用户、基表、索引、视图、索引、全文索引等书库对象的修改语句;
2.查询(含全文检索)、插入、删除、修改语句;
3.数据库安全语句。包括创建角色语句,删除角色语句,授权语句、回收权限语句,修改登录口令语句,审计设置语句、取消审计设置语句等;
3.常规数据类型(我这里举例一些常用的)
(1).字符数据类型
1.CHAR类型,功能:CHAR数据类型指定定长字符串,在定义为CHAR类型时,可以指定一个不超过32767的正整数作为字节长度。
2.CHARACTER类型,功能:与CHAR相同
3.VARCHAR类型和VARCHAR2类型,功能VARCHAR数据类型指定变长字符串,用法和CHAR类似,可以指定一个不超过32767得人正整数作为字节或字符长度;
(2).数值数据类型
1.NUMERIC类型,功能:NUMERIC数据类型用于储存零、正负定点数。
2.INTEGER类型,功能用于存储有符号的证书,精度为10,标度为0.取值范围:-2147483648~2147483647
3.BIGINT类型,功能:用于存储有效符号整数,精度为19,标度为0,取值范围为:-92233372036854775808~92233372036854775807
4.TINYINT类型,功能:用于存储有效符号整数,精度为3,标度为0,取值范围为:-128~127
5.FLOAT类型,功能:FLOAT是带二进制经度的浮点数。该类型直接使用标准C语言中DOUBLE。经度值设置无实际意义,精度设置用于保证数据一致的兼容性,经度范围处于(1~126)时忽略经度,超出此范围直接报错。
6.DOUBLE类型,功能:DOUBLE类型是带经度的二进制浮点数。经度和取值范围用法与FLOATWANQUAN YIYANG 。
(3).位串数据类型
1.BIT类型,功能:BIT类型用于存储证书数据1、0或者NULL,只有0才转换为假,其他非空、非0值都会自动转换为真,可以用来支持ODBC和JDBC的布尔数据类型。DM的BIT类型与SQL SERVER2000的BIT数据类型相似。
(4).日期时间数据类型
1.DATE类型,功能:DATE类型包括年、月、日信息,定义了"-4712-01-01"和"9999-12-31"之间任何一个幼小的格里高利日期。
2.TIME类型,功能:TIME类型包括时、分、秒信息,定义一个一个在"00:00:00.000000"和“23:59:59:999999”之间的有效时间。TIME值的书写方式有两种:一是TIME“时:分:秒”;二是“时分秒”
3.TIMESTAMP类型,功能:类型包括年、月、日、时、分、秒信息,定义了一个在"-4712-01-01 00:00:00.000000000"和"9999-12-31 23:59:59.999999999"之间的有效格里高利日期时间。
4.达梦常用的SQL脚本
(1).创建实例库,创建模式创建表
--创建实例库
CREATE TABLESPACE BOOKSHOP DATAFILE 'BOOKSHOP.DBF' SIZE 128;
--创建模式和表
--创建模式
CREATE SCHEMA RESOURCES AUTHORIZATION SYSDBA;
--创建表
--CREATE ADDRESS
#注意这里的PERSON.ADDRESS PERSON 就是咋们的库名或者是表空间名模式名
CREATE TABLE PERSON.ADDRESS
(ADDRESSID INT IDENTITY(1,1) PRIMARY KEY,
ADDRESS1 VARCHAR(60) NOT NULL,
ADDRESS2 VARCHAR(60),
CITY VARCHAR(30) NOT NULL,
POSTALCODE VARCHAR(15) NOT NULL) STORAGE (on BOOKSHOP);
--修改表
#例如将PRODUCT_REVIEW 表的数据类型改为VARCHAR(8) ,并且制定该列为NOT NULL
ALTER TABLE PRODUCTION.PRODUCT_REVIEW MODIFY NAME VARCHAR(8) DEFAULT '刘青' NOT
NULL;
--删除表
#例如删除PERSON表
DROP TABLE PERSON.PERSON CASCADE;
#如果删除过程中有关联的数据库,那么就需要删除被关联的,再删除关联的的,或者解除关联关系
DROP TABLE PURCHASING.VENDOR_PERSON;
DROP TABLE PEROSON.PERSON_TYPE;
#也可以直接使用CASCADE 强制删除PERSON_TYPE表,但是VENDOR_PERSON表任然存在,也只删除了PERSON_TYPE表的引用约束。
DROP TABLE PERSON.PERSON_TYPE CASCADE;
(2).增删改
--插入数据
--INSERT ADDRESS
INSERT INTO PERSON.ADDRESS(ADDRESS1,ADDRESS2,CITY,POSTALCODE) VALUES ('洪山区 369
号金地太阳城 56-1-202','','武汉市洪山区','430073');
--如果需要多行插入,择可以使用如下SQL语句实现
INSERT INTO PURCHASING.VENDOR(ACCOUNTNO, NAME, ACTIVEFLAG, WEBURL, CREDIT)
VALUES ('00', '华中科技大学出版社', 1, '', 2), ('00', '清华大学出版社', 1, '', 3);
--修改数据
#例 1 将出版社为中华书局的图书的价格
UPDATE PRODUCTION.PRODUCT SET NOWPRICE = NOWPRICE - 2.0000
WHERE PUBLISHER = '中华书局';
--删除数据
#例 将没有分配部门的员工的住址信息删除。
DELETE FROM RESOURCES.EMPLOYEE_ADDRESS
WHERE EMPLOYEEID IN
( SELECT EMPLOYEEID FROM RESOURCES.EMPLOYEE
WHERE EMPLOYEEID NOT IN
( SELECT EMPLOYEEID FROM RESOURCES.EMPLOYEE_DEPARTMENT));
(3).数据查询语句
--简单单表查询 并且去重
SELECT DISTINCT NAME,AUTHOR,NOWPRICE FORM PRODUCTION.PRODUCT;
--连表查询 查询性别为男性的员工的姓名与职务。
SELECT T1.NAME, T2.TITLE FROM PERSON.PERSON T1, RESOURCES.EMPLOYEE T2 WHERE
T1.PERSONID = T2.PERSONID AND T1.SEX = 'M';
--JOIN…ON 连表查询
SELECT T1.HAIRDATE, T2.SALESLASTYEAR FROM RESOURCES.EMPLOYEE T1 JOIN SALES.SALESPERSON T2 ON T1.EMPLOYEEID=T2.EMPLOYEEID;
--INNER JOIN
SELECT T1.NAME, T2.NAME FROM PRODUCTION.PRODUCT_CATEGORY T1
INNER JOIN PRODUCTION.PRODUCT_SUBCATEGORY T2 ON T1.PRODUCT_CATEGORYID =
T2.PRODUCT_CATEGORYID;
--合并查询结果UNION 这个SQL 我试过了还可以,但是我看官方文档查询的sql 不需要带""号,但是我自己创建的库要带"" 给我整无语了
SELECT PUBLISHER FROM PRODUCTION.PRODUCT
UNION
SELECT NAME FROM PURCHASING.VENDOR ORDER BY 1;
--我自己的
SELECT"real_name" FROM "POWERGRIDDBA"."t_user_register"
UNION
SELECT"reserve_user_name" FROM "POWERGRIDDBA"."t_reserve_user"
--分组GROUP BY 统计每个部门的员工数。
SELECT DEPARTMENTID,COUNT(*) FROM RESOURCES.EMPLOYEE_DEPARTMENT GROUP BY
DEPARTMENTID;
--排序ORDER BY
--从小到大排序
SELECT * FROM RESOURCES.DEPARTMENT ORDER BY DEPARTMENTID DESC;
--等价于
SELECT * FROM RESOURCES.DEPARTMENT ORDER BY 1 DESC;
--TOP字句 这个句子讲道理我用mybatisplus之后,好久没写过了
--查询现价第二贵的产品的编号和名称
SELECT TOP 1,1 PRODUCTID,NAME FROM PRODUCTION.PRODUCT ORDER BY NOWPRICE DESC;