数据库基础(3)

版权声明:本文为博主原创文章,未经允许请勿转载,谢谢 https://blog.csdn.net/a972669015/article/details/89051958

一、条件查询---where

列值为null 和 不为null

  • select......where XX is/is not null;

别名 as

  • select XX as xx from 表名;

去重 distinct

  • select distinct XX from 表名;

比较运算符 >  <  =  >=  <=  !=(<>)

and/or

查询字段的值为多个时用in

  • select......where XX in (value1,value2,value3...);

查询字段的值在某两个数值之间, 包含and两边的数值用between x and y

like

  • _:代表单个未知字符
  • %:代表多个未知字符
  • -以a开头    a%
  • -以a结尾    %a
  • -第二个字符是a   _a%
  • -包含a   %a%
  • -倒数第三个字符是a   %a_ _
  • -第二个和最后一个是a   _a%a

二、查询结果排序---order by

升序:asc(默认)

降序:desc

多字段排序时,当第一个字段值相同时开始第二个字段排序

三、分页查询---limit

limit  要跳过的条数  要查询的条数

  • 第2页数据每页5条 select ... from ... limit 5,5;
  • 第3页数据每页3条 select ... from ... limit 6,3;
  • 最大数据 select ... from ... order by ... desc limit 0,1;
  • 最小数据 select ... from ... order by ... asc limit 0,1;

四、分组查询---group by

分组查询通常和聚合函数搭配使用,查询条件中的每个xxx,xxx就作为分组的条件,group by xxx;

聚合函数:sum(求和)、avg(平均值)、max(最大值)、min(最小值)、count(统计数量)

  • 查询每个部门的最高工资 select deptno,max(sal) from emp group by deptno;
  • 查询每个部门的最低工资 select deptno,min(sal) from emp group by deptno;
  • 查询每个部门的平均工资 select deptno,avg(sal) from emp group by deptno;
  • 查询每个部门的工资总和 select deptno,sum(sal) from emp group by deptno;
  • 查询每个部门工资大于2000的人数 select deptno,count(*) from emp where sal>2000 group by deptno;

五、有条件的分组查询---Having

写在 group by 后面,通常是和group by结合使用

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

  • 查询每个部门的平均工资,要求平均工资大于2000; select deptno,avg(sal) a from emp group by deptno having a>2000;

六、子查询

嵌套在sql语句里面的查询sql语句 称为子查询

子查询可以有多层嵌套

子查询可以写在的位置有:

  • 写在where/having后面做查询条件的值
  • 写在from后面当成一张新的表 必须起别名 select * from (select * from xxx) t1;
  • 可以写在创建表的时候 create table XXX as (select * from xxx);

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

-1.得到最高的平均工资 select avg(sal) a from emp group by deptno order by a desc limit 0,1;

-2.得到最高平均工资的部门编号 select deptno from emp group by deptno having avg(sal)=(select avg(sal) a from emp group by deptno order by a desc limit 0,1);

-3.查询所有部门详情 条件是-2的结果 select * from dept where deptno in (select deptno from emp group by deptno having avg(sal)=(select avg(sal) a from emp group by deptno order by a desc limit 0,1));

七、关联查询

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

笛卡尔积

  • 关联查询如果不写关联关系,则查询结果的总条目数为两张表的乘积,这个乘积称为笛卡尔积.是一种错误的查询结果

等值连接和内连接

等值连接和内连接都是关联查询的查询方式,效果相同.内连接可读性更高

  • 等值连接格式: select * from A,B where A.x=B.x and A.y=abc;
  • 内连接格式: select * from A [inner] join B on A.x=B.x where A.y=abc;(inner可省略)
  • 查询在new york工作的所有员工信息 select e.* from emp e join dept d on e.deptno=d.deptno where d.loc='new york';

外连接

关联查询时有时只查询两张表有关系的数据,不能满足需求,如果需要查询某一张表所有数据(包含没有关系的),则使用外连接查询方式

  • 左外连接:以join 左边表为主表查询所有数据,右边表只查询有关系的数据
  • 右外连接:以join 右边表为主表查询所有数据,左边表只查询有关系的数据
  • 查询所有员工的名字和对应的部门名(使用左外) select e.ename,d.dname from emp e left join dept d on e.deptno=d.deptno;
  • 查询所有部门和对应的员工名(使用右外) select e.ename,d.dname from emp e right join dept d on e.deptno=d.deptno;

八、自关联

在一张表中有一个字段指向当前表的id,这种称为自关联。当保存的数据有层级关系并且不确定有多少层的时候使用自关联.

查询员工姓名和对应的上级姓名

select e.ename,m.ename from emp e join emp m on e.mgr = e.empno;

猜你喜欢

转载自blog.csdn.net/a972669015/article/details/89051958