当前位置:   article > 正文

达梦数据库SQL查询_达梦数据库查询

达梦数据库查询

1.简单查询

select department_id ,employee_name||'工资是:'||salary as sal from dmhr.employee; 

    注:||......||可以连接前后查询的两列

使用 WHERE 子句,将不满足条件的行过滤掉。

SELECT *|{[DISTINCT] column|expression [alias],...} FROM table

[WHERE condition(s)];

WHERE 子句紧随 FROM 子句

select employee_id,employee_name,salary from dmhr.employee where salary BETWEEN 25000 and                   30000;

2.单行查询

字符处理函数

3.数值函数

ROUND:将值舍入到指定的小数位

TRUNC:将值截断到指定的小数位(不舍入)

MOD:返回除法运算的余数

注:

SP_SET_PARA_VALUES(2,’CALC_AS_DECIMAL’,1)

静态参数

0:默认值,表示整数类型的除法,整数与字符或 binary 串的所有四则运算,结果都处理成

整数。

1:表示整数类型的除法全部转换为 DEC(0,0)处理。

2:表示将整数与字符或 binary 串的所有四则运算都转换为 DEC(0,0)处理。

注:该参数只有在 use_pln_pool 为 0 或 1 时有效。当为 2,3 时,按 CALC_AS_ decimal=2 处理。

4.日期函数

MONTHS_BETWEEN   两个日期之间的月数

ADD_MONTHS        将日历月份添加到日期中

NEXT_DAY 指定日期之后第一个星期几

LAST_DAY 月份的最后的一天

ROUND 舍入日期

TRUNC 截断日期

5.转换函数

6.分组函数

分组函数作用于一组数据,并对一组数据返回一个值。

常见的分组函数:

AVG 、COUNT 、MAX 、MIN 、SUM…

 select department_id,max(salary) as max_sal,min(salary) as min_sal,avg(salary) as  avg_sal from  dmhr.employee group by department_id;

注:在分组函数中使用筛选不能使用where,需使用having

select department_id,avg(salary) as avg_sal from dmhr.employee group by department_id having  avg(salary)>10000;

7.多表连接查询

语法: select () from   join ()  on ();

DMHR 关系模型图:

  1. 内连接

案例 一:显示所有街道所在城市的名称

SELECT CITY_NAME,STREET_ADDRESS FROM DMHR.LOCATION L JOIN  DMHR.CITY C ON  L.CITY_ID=C.CITY_ID;

案例二:显示所有员工的名称和所在部门的名称

 SELECT EMPLOYEE_NAME DEPARTMENT_NAME FROM DMHR.EMPLOYEE E INNER HASH JOIN  DMHR.DEPARTMENT D ON E.DEPARTMENT_ID =D.DEPARTMENT_ID;

        2.外连接

           (1).左外连接  LEFT JOIN

把 left join 左边的全部显示出来 ,右边的只显示满足条件的,不满足

条件的就用 null 代替。(将员工表陶健的部门编号删除,此时不存在陶健员工表部门号 与部门表部门编号相同的情况

 SELECT EMPLOYEE_NAME,DEPARTMENT_NAME FROM DMHR.EMPLOYEE E LEFT  JOIN  DMHR.DEPARTMENT D ON E.DEPARTMENT_ID =D.DEPARTMENT_ID ;

         (2)右外连接  RIGHT JOIN

把 right join 右边的全部显示出来,左边的显示满足条件的,不满足条

个件的就用 null 代替。(新建一个部门为暂定不明,此时此部门无任何员工,在 员工表无匹配数据

SELECT EMPLOYEE_NAME,DEPARTMENT_NAME FROM DMHR.EMPLOYEE E RIGHT JOIN  DMHR.DEPARTMENT D ON E.DEPARTMENT_ID =D.DEPARTMENT_ID ;

此时发现上述(1)中的100行数据陶健消失

        (3)全外连接 FULL JOIN 左外连接+右外连接

保留上述(1)(2)的设置,此时使用全外连接

SELECT EMPLOYEE_NAME,DEPARTMENT_NAME FROM DMHR.EMPLOYEE E FULL JOIN  DMHR.DEPARTMENT D ON E.DEPARTMENT_ID =D.DEPARTMENT_ID ;

 8.子查询

子查询语法

SELECT select_list

FROM table

WHERE expr operator

(SELECT select_list FROM table);

        1.单行子查询

查询和马学铭相同部门的同事的姓名和薪资:

SELECT EMPLOYEE_NAME,SALARY FROM DMHR.EMPLOYEE WHERE  DEPARTMENT_ID=(SELECT DEPARTMENT_ID FROM DMHR.EMPLOYEE WHERE  EMPLOYEE_NAME=' 马学铭');

        2.多行子查询 

运算符 含义

 IN 等于列表中的任意一个

ANY 将值与子查询返回的任意一个值进行比较

ALL 将值与子查询返回的每个值进行比较

IN:

SELECT EMPLOYEE_NAME,SALARY,DEPARTMENT_ID FROM DMHR.EMPLOYEE WHERE  DEPARTMENT_ID IN (101,102,103);

ALL:

>any: 大于最小值

<any:小于最大值

当出现>=或<=符号时,对应的将会出现收集信息里最大的或最小的值对应的数据。

部门编号为103的员工工资:

 SELECT SALARY FROM DMHR.EMPLOYEE WHERE DEPARTMENT_ID=103;

大于所有部门编号为103的员工工资的人的姓名,工资和部门编号:

SELECT EMPLOYEE_NAME,SALARY,DEPARTMENT_ID FROM DMHR.EMPLOYEE WHERE SALARY > ALL(SELECT SALARY FROM DMHR.EMPLOYEE WHERE DEPARTMENT_ID=103);

小于所有部门编号为103的员工工资的人的姓名,工资和部门编号:

SELECT EMPLOYEE_NAME,SALARY,DEPARTMENT_ID FROM DMHR.EMPLOYEE WHERE SALARY < ALL(SELECT SALARY FROM DMHR.EMPLOYEE WHERE DEPARTMENT_ID=103);

ANY:

小于任何部门编号为103的员工工资的部门员工姓名,工资和部门编号:(小于工资最大值)

SELECT EMPLOYEE_NAME,SALARY,DEPARTMENT_ID FROM DMHR.EMPLOYEE WHERE SALARY < ANY(SELECT SALARY FROM DMHR.EMPLOYEE WHERE DEPARTMENT_ID=103);

EXISTS的用法:

EXISTS 操作符用于检查行是否在子查询的结果中存在

如果在子查询的一行中发现相同的值:

内层查询的搜索工作将不在继续

状态标记为 TRUE

如果在子查询的一行中没有发现想同的值:

状态标记为 FALSE

内层查询中继续搜索

查询已离职员工但员工表数据暂未删除的员工姓名和员工编号:

SELECT E.EMPLOYEE_ID,E.EMPLOYEE_NAME FROM DMHR.EMPLOYEE E WHERE EXISTS (SELECT * FROM  DMHR.JOB_HISTORY J WHERE E.EMPLOYEE_ID=J.EMPLOYEE_ID);

更多达梦相关材料可以参考达梦数据库官方适配中心https://eco.dameng.com/

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/881079
推荐阅读
相关标签
  

闽ICP备14008679号