首页数据库数据库高级,数据库高级查询2

数据库高级,数据库高级查询2

编程之家2023-10-1898次浏览

本篇文章给大家谈谈数据库高级,以及数据库高级查询2对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。

数据库高级,数据库高级查询2

SQL是高级语言吗

计算机语言主要分三类:机器语言、汇编语言和高级语言;C#是高级语言。不过高级语言并不是说比其他语言怎么怎么高级,一定更好的意思,高级语言与计算机的硬件结构及指令系统无关,它有更强的表达能力,可方便地表示数据的运算和程序的控制结构,能更好的描述各种算法,而且容易学习掌握。

数据库工程师的等级

数据库工程师的等级并不是很严格的。按照对数据库的掌握情况,可以分成三个等级:初级Primary、中级Intermediate和高级Senior。

初级数据库工程师又称为DBBS,是英文Database Baby Sitter的缩写。初级数据库工程师常常是兼职的,他们往往同时是程序员或者兼任其他的工作。初级数据库工程师往往把个人简历写得很棒,参与了很多和数据库有关的项目或工作。但是,这些项目或者工作往往是:第三方软件供应商已经安装并配置了数据库,他们只做一些监控的工作。他们能处理一些简单的问题,但大多数时候他们向应用软件供应商求救。初级数据库工程师更喜欢图形化的数据库管理或者监控工具,他们喜欢Access这样的桌面数据库简单易用,并把这些小型数据库的经验简单地应用到大型数据库相关的工作中。

初级数据库工程师是最好区分的。而中级数据库工程师和高级数据库工程师就不太好区分。他们的差别在于经验的不同和个性特点、能力方面的差异。中级数据库工程师比较多,他们可以胜任高级数据库工程师的大部分工作,包括:

1)数据库安装;

2)数据库配置和管理;

数据库高级,数据库高级查询2

3)权限设置和安全管理;

4)监控和性能调节;

5)备份和恢复;

6)解决一般的问题;

中级数据库工程师往往从业一年左右,熟悉某种操作系统环境下的数据库。因为对中级数据库工程师来讲,Windows NT和Unix是有很大差别的。中级数据库工程师对SQL比较熟悉,他们自己购买了几本数据库方面的书籍,并深入钻研。中级数据库工程师往往同时兼任数据库程序员,他们的工作对性能、稳定性、安全性的追求基本上不是很高,往往配合高级数据库工程师做一些例行工作。

高级数据库工程师在国内是非常少的。他们能够熟练阅读数据库方面的英文资料,并且都熟悉很多种操作平台下的几种大型数据库。他们知道各种不同数据库在不同环境下的优势和劣势,并能在数据库平台和数据库环境的选择方面做出决策。他们一般通晓系统架构和数据库设计,并能对数据库进行各种级别的优化。高级数据库工程师一般都配有助手,他们更偏向做决策和计划。高级数据库工程师往往在银行业、保险业、在线交易等对稳定性、安全性、性能都要求比较高的关键业务处理领域大显身手。

数据库高级,数据库高级查询2

很多时候,是否取得数据库专家认证证书并不是很重要。很多数据库厂商的培训只要你去了都会获得证书。有很多的公司提供商业化的培训,他们的服务质量也有好有劣。所以证书并不是特别地有意义。

数据库高级查询2

分组查询(group by)

分组查询:

1.查询每个部门的最高工资

select deptno,max(sal) from emp group by deptno;

2.查询每个职位的平均工资

select deptno,avg(sal) from emp group by deptno;

3.查询每个部门的人数

select deptno,count(*) from emp group by deptno;

4.查询工资大于1000的员工,每个部门的最大工资

select deptno,max(sal) from emp where sal>1000 group by deptno;

多字段分组查询:group by字段1,字段2;

1.查询每个部门下每个主管的手下人数

select deptno, mgr, count(*) from emp where mgr is not null group by deptno,mgr;

2.查询emp表中每个部门的编号,人数,工资总和,最后根据人数进行升序排序,如果人数一致,根据工资总和降序排序

select deptno,count(*),sum(sal) from emp group by deptno order by count(*) asc,sum(sal) desc;

3.查询工资在1000-3000之间的员工信息,每个部门的编号,平均工资,最低工资,最高工资,根据平均工资进行升序排序排列

select deptno,avg(sal),min(sal),max(sal) from emp where sal between 1000 and 3000 group by deptno order by avg(sal)

4.查询含有上级领导的员工,每个职业的人数,工资的总和,平均工资,最低工资,最后根据人数进行降序排列,如果人数一致,根据平均工资进行升序排列

select job, count(*),avg(sal),min(sal) from emp where mgr is not null group by job order by count(*) desc,avg(sal) asc;

各种关键字的顺序

select* from表名  where.... group...having... order by... limit...

   having(结合group by使用)

having一般要结合分组查询和聚合函数使用,用于给聚合函数的内容添加条件

聚合函数的条件不能写在where后面

普通字段的条件写在where后面,聚合函数的条件写在having后面

1.查询每个部门的平均工资,要求平均工资大于2000(c是别名的用法)

select deptno,avg(sal) c from emp group by deptno having c>2000;

2.查询每个分类的平均单价,要求平均单价低于100

select category_id,avg(price) a from t_item group by category_id having a<100;

3.查询category_id分类为238和917的两个分类的平均单价

select category_id,avg(price) from t_item where category_id in(238,917) group by category_id;

4.查询emp表中每个部门的平均工资高于2000的部门编号,部门人数,平均工资,最后根据平均工资降序排列

select deptno,count(*),avg(sal) a from emp group by deptno having a>2000 order by a desc;

5.查询emp表中工资在1000-3000之间的员工,每个部门编号,工资总和,平均工资,过滤掉平均工资低于2000的部门,按照平均工资进行升序排序

select deptno,sum(sal), avg(sal) a from emp where sal between 1000 and 3000 group by deptno having a>=2000 order by a asc;

6.查询emp表中每年入职的人数

select extract(year from hiredate) year,count(*) from emp group by year;

7.查询每个部门的最高平均工资

select deptno,avg(sal) from emp group by deptno order by avg(sal) limit 0,1;

子查询(嵌套查询)

子查询可以写在where或having后面当做查询条件的值

写在from后面,当做一张新表(但是必须要有别名)

select ename from(select* from emp where sal>1000) newtable;

写在创建表的时候

create table emp_20 as(select* from emp where deptno=20);

1.查询emp表中工资最高的员工信息

select* from emp where sal=(select max(sal) from emp);

2.查询emp表中工资大于平均工资的所有员工的信息

select* from emp where sal>(select avg(sal) from emp);

3.查询工资高于20号部门最大工资的员工信息

select* from emp where sal>(select max(sal) from emp where deptno=20);

4.查询工资高于20号部门最大工资的员工信息

select* from emp where sal>(select avg(sal) from emp);

5.查询和Jones相同工资的其他员工信息

select* from emp where job=(select job from emp where ename='jones' and ename!='jones');

6.查询工资最低的员工的同事们的信息(同事=相同job)

select* from  emp where job=(select job from emp where sal=(select min(sal) from emp)) and sal!=(select min(sal) from emp);

7.查询最晚入职的员工信息

select* from emp where hiredate=(select max(hiredate) from emp);

8.查询名字为King的部门编号和部门名称(需要用到dept表)

select deptno,dname from dept where deptno=(select deptno from emp where ename='king');

9.查询有员工的部门信息(编号和名称)

select deptno,dname from dept where deptno in(select distinct deptno from emp);

10.查询平均工资最高的部门信息

select* from dept where deptno in(select deptno from emp group by deptno having avg(sal)=(select avg(sal) from emp group by deptno order by avg(sal) desc limit 0,1));

关联查询

同时查询多张表的数据称为关联查询

1.查询每一个员工的名称和其对应的部门名称

select e.ename,d.dname from emp e,dept d where e.deptno=d.deptno;

2.查询在new york工作的所有员工的信息

select  e.* from emp  e,dept  d  where e.deptno=d.deptno and  d.loc='new york';

笛卡尔积

如果关联查询不写关联关系则查询到的数据是两张表的乘积,这个乘积称为笛卡尔积,笛卡尔是一种错误查询方式的结果,工作切记不要出现.

  等值连接和内连接

等值连接:

select* from A,B where A.x=B.x and A.age=18;

内连接:

select* from A join B on A.x=B.x where A.age=18;(将关联关系写在on后面)

1.查询每个员工的名称和其对应的部门名称

select e.ename,d.dname from emp e join dept d on e.deptno=d.deptno;

外连接

使用外连接查询得到的数据层除了两张表的交集数据以外和另外一张主表的全部数据,哪个表为主表通过left/rigth控制, left以join左边表为主表 rigth以join右边表为主表

1.查询所有员工的名称和其对应的部门名称

select e.ename,d.dname from emp e left join dept d on e.deptno=d.deptno;

好了,文章到此结束,希望可以帮助到大家。

bi数据库 大数据bi是什么域名 查询(网站域名怎么查)