达蒙数据库语法

学向勤中得,萤窗万卷书。这篇文章主要讲述达蒙数据库语法相关的知识,希望能为你提供帮助。
达梦数据库语法查询基础语法结构
      select 列1 别名,…,列n 别名 from 表名1,…,表名n
      [where 条件语句]
      [group by 分组列1,…,列n] [having 筛选分组条件]
    [order by 排序列1,…,列n]
    以下所有的举例都基于下方的表student和course

达蒙数据库语法

文章图片

达蒙数据库语法

文章图片

一、条件语句
1. 关系运算符:< , > , =, > =, < =, !=或者< > (不等于), !> (不大于), !< (不小于)
2. 逻辑运算符:and, or, not


3. 范围运算
  • 关系运算符和逻辑运算符的组合
//查询年龄小于18,大于22的学生姓名
select name from student where age< 18 or age> 22;
//查询选修了英语课程并且成绩大于60的学生姓名,科目和成绩
select s.name,c.c_name,c.grade from student s,course c
where c.sno=s.sno and c_name=大学英语 and grade> =60;
  • between…and…
//查询年龄在18-22之间(包括18和22)的学生姓名
select name from student where between 18 and 22;
//查询年龄 不 在18-22之间的学生姓名
select name from student where not between 18 and 22;
  • in(值1,…,值n)
//查询年龄为18,22,24的学生姓名
select name from student where in(18,22,24);
//查询年龄 不 为18,22,24的学生姓名
select name from student where not in(18,22,24);
4.模糊查询like% 代表任意长度(可以为0)的字符串
  • //查询姓张的学生的信息
  select * from student like 张%;
  • _ 代表单个字符串
//查询姓张,且名字为两个字的学生的信息
select * from student like 张_;
5.空值和非空值查询//查询没有选课的学生姓名
select s.name from student s,course c
where c.sno=s.sno and course is null;
//查询课程成绩已经出来的学生姓名,课程和成绩
select s.name,c.c_name,c.grade from student s,course c
where c.sno=s.sno and grade is not null;
二、group by子句以及having子句
1. group by子句

聚集函数:
注意:聚集函数只能用于select子句和group by中的having子句


    sum() ------求和
    count() ----计算数量
    max() ------求最大值
    min() -------求最小值
    avg() -------求平均值
//查询每个学生选修的课程数量,总学分,最高成绩,最低成绩,平均成绩
select s.name,count(c.c_name),sum(c.credit),
max(c.grade),min(c.grade),avg(c.grade)
from student s,course c where c.sno=s.sno  
group by s.name;
三、order by 子句
升序使用asc,降序使用desc,默认值是升序
//每页显示3条数据,显示第3页的数据
select top 3 * from coursewhere num not in(
select top 6num from course
);
四、分页查询
1. top分页规律总结:
select top 每页显示条数 要查询的列表 from 表名 where 编号 not in(
select top (当前页码 - 1) * 每页显示条数 编号 from 表名 );
//每页显示3条数据,显示第3页的数据
select top 3 * from coursewhere num not in(
select top 6num from course
);
2. limit分页规律总结:
selct 列表 from 表名 limit (当前页码-1)*每页条数,每页显示条数;
//每页显示3条数据,显示第3页的数据
select* from course limit 6,3;
3. 伪列分页rowid
规律总结:
select rowid,* from 表名;
----先查看rowid的编号是从几开始的,假设是n
select rowid,* from 表名 where rowid
between ((当前页码-1)*每页条数+n)
and (当前页码 * 每页条数+n-1);
//每页显示3条数据,显示第3页的数据
select rowid,* from course; //n=1
select rowid,* from course where rowid between 7 and 9;
rownum
规律总结:
select * from (
select rownum,* from (
----此处可以是任意复杂的查询
) where rownum < = 当前页码 * 每页条数
)t where t.rownum> (当前页码 - 1) * 每页显示条数;
//每页显示3条数据,显示第3页的数据
select * from (
select rownum,* from (
select * from course
)whererownum < = 9
)t where t.rownum> 6;
达梦数据??库函数??使用
    1.length(string) ----获取字符串长度,包括空格//查询course表中的"高级路由技术"字符串的长度
select length(c_name) from (
select c_name from course where c_name =高级路由技术)
    2.concat(str1,…,strn) ----拼接字符串//将学号sno和姓名name两个字符串用_连在一起
select concat(sno,_,name) from student;
  3. initcap(string) ----将字符串的首个字母变成大写//将course表中的课程名"database"字符串的首字母变成大写
select initcap(c_name) from (
select c_name from course where c_name =database);
  4. insert(str1,begin_index,length,str2) ----从str1字符串的指定下标开始删除指定长度的内容,再插入str2并返回新字符串//将course表中的课程名"高级路由技术"变成"高级交换技术"
select insert(c_name,3,2,交换) from (
select c_name from course where c_name =高级路由技术)


  5. lower(string) ----转小写//将course表中的课程名"English"改为全小写字母
select lower(c_name) from (
select c_name from course where c_name =English);
    6.upper(string) ----转大写//将course表中的课程名"database"改为全大写字母
select upper(c_name) from (  
select c_name from course where c_name =database);
  7. trim(string) ----去除字符串左右两边的空格//将course表中的课程名"     高等数学"前面的空格去掉
select trim(c_name) from (  
select c_name from course where c_name =     高等数学)
    8.left(string,n) ----从字符串左边截取长度为n的子串//将course表中的课程名"高级路由技术"截取显示"高级路由"
select left(c_name,4) from (
select c_name from course where c_name =高级路由技术);
    9.right(string,n) ----从字符串右边截取长度为n的子串//将course表中的课程名"高级路由技术"截取显示"路由技术"
select right(c_name,4) from (
select c_name from course where c_name =高级路由技术)
    10.substring(string,begin,n) ----从字符串的begin下标开始截取长度为n的子串//将course表中的课程名"高级路由技术"截取显示"路由"
select substring(c_name,3,2) from (
select c_name from course where c_name =高级路由技术)
    11.replace(string,old,new) ----将string字符串中的old字符串替换成new字符串//将course表中的课程名"高级路由技术"中的"路由"变成"交换"
select replace(c_name,substring(c_name,3,2),交换) from (
select c_name from course where c_name =高级路由技术);
数学函数
  1. pi() ----获取圆周率
    //查看圆周率
    select pi(); 2.rand() ----生成0-1之间的随机小数
    //生成100-999之间的一个随机数
    select(900*rand()+100);
  2. floor() ----向下取整
    //生成一个随机的三位数(100-999)
    select floor(900*rand()+100);
  3. ceil() ----向上取整
    //生成一个随机的三位数(100-999)
    select ceil(901*rand()+99);
  4. round(number,n) ----四舍五入到n位小数
    //将course表中的成绩grade四舍五入都显示成整数
    select round(grade,0) from (
    select grade from course );
  5. trunc(number,n) ----直接截断到第n位小数
    //将course表中的成绩grade截断到个位
    select round(grade,-1) from (
    select grade from course );
  6. mod(m,n) ----求m/n的余数
          //求8/5的余数
          select mod(8,5);
  1. sqrt(number) ----求平方根
    //求26的平方根(以小数5.0990195135927845显示结果)
    select sqrt(26);
  2. power(m,n) ----求m的n次方
    //求24.5的5次方(以小数8827351.53125显示结果)
    select power(24.5,5);
日期函数
1.curdate() ----获取当前日期
//获取当前年月日
select curdate();
2.curtime() ----获取当前时间
//获取当前精确的纳秒的时间
select curtime();

3.now() ----获取当前日期时间
//获取当前年月日及其精确到纳秒的时间
select now();
4.add_days(date,num) ----在指定日期上增加指定的天数(可以为负数)
//从course表中获取最近十天录入的成绩详情
select * from course
where grade_input_date between add_days(now(),-10) and now();
  5.add_months(date,num) ----在指定日期上增加指定的月数
//查询六个月后是哪天
select add_months(now(),6);
6.dateadd(datepart,num,date) ----在指定日期的指定部分增加指定的数值
//查询68天后是几月几日
select dateadd(DD,68,now());
7.datediff(datepart,date1,date2)----计算两个日期的指定部分的差值(date2-date1)
//计算距离大年初一还有多少小时
select datediff(HH,now(),2021-02-12);
8.datepart(datepart,date) ----获取指定日期中指定部分的值
//获取现在是19点13分多少秒
select datepart(S,now());
9.dayofweek(date) ----计算指定日期是一周中的第几天
//查看今天是一周中的第几天(从周日开始算)
select dayofweek(now());
10.dayofyear(date) ----计算指定日期是一年中的第几天
//查看今天是一年中的第几天
select dayofyear(now());






【达蒙数据库语法】


    推荐阅读