达梦数据库的查询以及函数的使用

达梦数据库查询

查询基础语法结构

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;
2. having筛选分组

注意:having 子句只能和group by 子句一起出现,不能单独出现

//查询张三这个学生选修的课程数量,总学分,最高成绩,最低成绩,平均成绩
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 having name='张三';

三、order by 子句

升序使用asc,降序使用desc,默认值是升序

//查询张三这个学生的课程和成绩,并将成绩按照升序排列
select c_name,grade from course order by grade;
//查询张三这个学生的课程和成绩,并将成绩按照降序排列
select c_name,grade from course order by grade desc;

四、分页查询

1. top分页

规律总结:
select top 每页显示条数 要查询的列表 from 表名 where 编号 not in(
select top (当前页码 - 1) * 每页显示条数 编号 from 表名 );

//每页显示3条数据,显示第3页的数据
 select top 3 * from course  where num not in(
  select top 6  num 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
	)where  rownum <= 9
)t where t.rownum>6;

达梦数据库函数使用

字符串函数

  1. length(string) ----获取字符串长度,包括空格
//查询course表中的"高级路由技术"字符串的长度
select length(c_name) from (
	select c_name from course where c_name ='高级路由技术');
  1. concat(str1,…,strn) ----拼接字符串
//将学号sno和姓名name两个字符串用_连在一起
select concat(sno,'_',name) from student;
  1. initcap(string) ----将字符串的首个字母变成大写
//将course表中的课程名"database"字符串的首字母变成大写
select initcap(c_name) from (
	select c_name from course where c_name ='database');
  1. insert(str1,begin_index,length,str2) ----从str1字符串的指定下标开始删除指定长度的内容,再插入str2并返回新字符串
//将course表中的课程名"高级路由技术"变成"高级交换技术"
select insert(c_name,3,2,'交换') from (
	select c_name from course where c_name ='高级路由技术');
  1. lower(string) ----转小写
//将course表中的课程名"English"改为全小写字母
select lower(c_name) from (	
	select c_name from course where c_name ='English');
  1. upper(string) ----转大写
//将course表中的课程名"database"改为全大写字母
select upper(c_name) from ( 	
	select c_name from course where c_name ='database');
  1. trim(string) ----去除字符串左右两边的空格
//将course表中的课程名"    高等数学"前面的空格去掉
select trim(c_name) from (  
	select c_name from course where c_name ='    高等数学');
  1. left(string,n) ----从字符串左边截取长度为n的子串
//将course表中的课程名"高级路由技术"截取显示"高级路由"
select left(c_name,4) from (	
	select c_name from course where c_name ='高级路由技术');
  1. right(string,n) ----从字符串右边截取长度为n的子串
//将course表中的课程名"高级路由技术"截取显示"路由技术"
select right(c_name,4) from ( 
	select c_name from course where c_name ='高级路由技术');
  1. substring(string,begin,n) ----从字符串的begin下标开始截取长度为n的子串
//将course表中的课程名"高级路由技术"截取显示"路由"
select substring(c_name,3,2) from ( 
	select c_name from course where c_name ='高级路由技术');
  1. 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();
  1. rand() ----生成0-1之间的随机小数
//生成100-999之间的一个随机数
select  (900*rand()+100);
  1. floor() ----向下取整
//生成一个随机的三位数(100-999)
select floor(900*rand()+100);
  1. ceil() ----向上取整
//生成一个随机的三位数(100-999)
select ceil(901*rand()+99);
  1. round(number,n) ----四舍五入到n位小数
//将course表中的成绩grade四舍五入都显示成整数
select round(grade,0) from ( 	
	select grade from course );
  1. trunc(number,n) ----直接截断到第n位小数
//将course表中的成绩grade截断到个位
select round(grade,-1) from (  	
	select grade from course );
  1. mod(m,n) ----求m/n的余数
//求8/5的余数
select mod(8,5);
  1. sqrt(number) ----求平方根
//求26的平方根(以小数5.0990195135927845显示结果)
select sqrt(26);
  1. power(m,n) ----求m的n次方
//求24.5的5次方(以小数8827351.53125显示结果)
select power(24.5,5);

日期函数

  1. curdate() ----获取当前日期
//获取当前年月日
select curdate();
  1. curtime() ----获取当前时间
//获取当前精确的纳秒的时间
select curtime();
  1. now() ----获取当前日期时间
//获取当前年月日及其精确到纳秒的时间
select now();
  1. add_days(date,num) ----在指定日期上增加指定的天数(可以为负数)
//从course表中获取最近十天录入的成绩详情
select * from course 
where grade_input_date between add_days(now(),-10) and now();
  1. add_months(date,num) ----在指定日期上增加指定的月数
//查询六个月后是哪天
select add_months(now(),6);
  1. dateadd(datepart,num,date) ----在指定日期的指定部分增加指定的数值
//查询68天后是几月几日
select dateadd(DD,68,now());
  1. datediff(datepart,date1,date2)----计算两个日期的指定部分的差值(date2-date1)
//计算距离大年初一还有多少小时
select datediff(HH,now(),'2021-02-12');
  1. datepart(datepart,date) ----获取指定日期中指定部分的值
//获取现在是19点13分多少秒
select datepart(S,now());
  1. dayofweek(date) ----计算指定日期是一周中的第几天
//查看今天是一周中的第几天(从周日开始算)
select dayofweek(now());
  1. dayofyear(date) ----计算指定日期是一年中的第几天
//查看今天是一年中的第几天
select dayofyear(now());
datepart取值datepart意义
YEAR,YYYY,YY,SQL_TSI_YEAR
MONTH,MM,M,SQL_TSI_MONTH
DAY,DD,D,SQL_TSI_DAY
HOUR,HH,SQL_TSI_HOUR
MINUTE,MI,N,SQL_TSI_MINUTE
SECOND,S,SQL_TSI_SECOND
MILLISECOND,MS,SQL_TSI_FRAC_SECOND毫秒
QUARTER,QQ,Q,SQL_TSI_QUARTER所在的季度
DAYOFYEAR,DY,Y在年份中所处的天数
WEEK,WK,WW,SQL_TSI_WEEK在年份中所处的周数
WEEKDAY,DW在一周中所处的天数
  • 10
    点赞
  • 78
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
达梦数据库是一款商业数据库管理系统,支持SQL语言,具有高性能、高可靠性、高安全性等特点。以下是在达梦数据库中进行数据查询函数使用的一些常见操作: 1. 数据查询 使用SELECT语句来进行数据查询,例如: ``` SELECT * FROM table_name; ``` 其中,table_name是要查询的表名,*表示查询所有列。 也可以指定特定的列进行查询,例如: ``` SELECT column1, column2 FROM table_name; ``` 其中,column1和column2是要查询的列名。 2. 条件查询 可以使用WHERE子句来进行条件查询,例如: ``` SELECT * FROM table_name WHERE column1 = 'value'; ``` 其中,column1是要查询的列名,'value'是要查询的值。 还可以使用AND和OR逻辑运算符来组合多个条件,例如: ``` SELECT * FROM table_name WHERE column1 = 'value1' AND column2 = 'value2'; ``` 3. 函数使用 达梦数据库支持多种函数,例如: - 数学函数:ABS、CEIL、EXP、FLOOR、LOG、MOD、POWER、ROUND、SQRT等; - 字符串函数:CHAR、CONCAT、LENGTH、LOWER、UPPER、SUBSTR等; - 日期函数:CURRENT_DATE、CURRENT_TIME、CURRENT_TIMESTAMP、DATE、TIME、TIMESTAMP等; - 聚合函数:AVG、COUNT、MAX、MIN、SUM等。 可以在SELECT语句中使用函数,例如: ``` SELECT AVG(column1) FROM table_name; ``` 其中,AVG是平均值函数,column1是要计算平均值的列名。 以上是在达梦数据库中进行数据查询函数使用的一些常见操作,希望对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值