1.关于查询记录的去重?

mysql>select distinct job from emp;//distinct关键字去除重复记录

mysql>select ename,distinct job from emp;//错误

distinct只能出现在所有字段的最前面

mysql>select distinct deptno,job from emp;//联合去重

 

案例:统计岗位的数量?

select count(distinct job) from emp;

 


2.连接查询

Q:什么是连接查询?

A: 在实际开发中,大部分都不是从单表中查询数据,一般都是多表联合查询取出最终的结果。

在实际开发中,一般一个业务都会对应多张表,比如:学生和班级,起码两张表。

stuno                        stuname                         classno                       classname

-----------------------------------------------------------------------------------------------------------------------------------------------------

1         binqilin         1        北京大学一班

2         xiaoxiong        1          北京大学一班

 ...

学生和班级信息存储到一张表中,结果就像上面一样,数据会存在大量的重复,产生数据的冗余。

 

连接查询的分类?

  根据语法出现的年代来划分的话,包括

  SQL92(一些老的DBA可能还在使用这种语法,DBA:Database Adminstrator 数据库管理员)

  SQL99  (新语法)

 

根据表的连接方式来分类:

  内连接:等值连接

      非等值连接

      自连接

  外连接:

      左外连接(左连接)

      右外连接(右连接)

         全连接(很少用)

 笛卡尔积现象:当两张表进行连接查询的时候,没有任何条件进行限制,最终查询结果条数是两张表记录条数的乘积。

 

内连接之等值连接:最大特点是:条件是等量关系。

 

案例:查询每个员工的部门名称,要求显示员工名和部门名。

 

SQL99:

  

    e.name,d.name

  from 

    emp e

  (inner) join 

    dept d

  on

    e.deptno=d.deptno;

 

    语法:

      ...

       A

      join

       B

      on

       连接条件

      where

       ...

 

SQL99的语法结构更清晰,表条件和where条件分离了。

 

内连接之非等值连接:最大的特点是:连接条件中的关系是非等量关系。

 

案例:找出每个员工的工资等级,要求显示员工名、工资、工资等级。

 

select 

  e.name,e.sal,s.grade

from 

  emp e

join 

  salgreade s

on

  e.sal between s.local and s.hisal;

 

自连接:最大特点是一张表看成两张表,自己连接自己。

https://www.yiibai.com/sql/sql-self-join.html

 

外连接:

Q:什么是外连接?外连接和内连接的区别?

A:内连接:假设A和B表进行连接

使用内连接的话,凡是A表和B表能够匹配上的内容查询出来。

AB无主副之分,是平等的。

外连接:假设A和B表进行连接

使用外连接的话,AB两张表一张是主表,一张是副表,主要查询主表中的数据,捎带查询副表中的数据。

当副表中的数据没有和主表中的数据匹配上,副表自动模拟出NULL与之匹配。

外连接的分类:

左外连接(左连接):表示左边的这张表是主表

右外连接(右连接):表示右边的这张表是主表

左右连接都有自己各自的语法。

 

三张表怎么连接查询?

案例:找出每个员工的部门名称以及工资等级。

select 

  e.name,d.name,s.grade

from

  emp e

join 

  dept d

on

  e.deptno=d.deptno

join

   salgrade s

on

  e.sal between s.losal and s.hisal;

 

3.子查询

Q:什么是子查询?子查询可以出现在哪里?

  select语句当中嵌套select语句,被嵌套的select语句是子查询。

  子查询可以出现在哪里?

    select

      ..(select)

    from

      ..(select)

    where 

      ..(select)

 

posted on 2022-03-17 10:48  小熊冰淇淋  阅读(42)  评论(0)    收藏  举报