千家信息网

MySQL的查询操作

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,1. 基础的查询操作#简单查询select * from emp; //查询emp中所有的记录select empno, job,ename from emp; //查询emp表中的某些字段se
千家信息网最后更新 2026年11月02日MySQL的查询操作

1. 基础的查询操作

#简单查询select * from emp;   //查询emp中所有的记录select empno, job,ename from emp;  //查询emp表中的某些字段select ename as 名字 from emp;   //使用字段别名

去重 distinct

select distinct deotno from emp; //去除重复的行(针对字段而言)

排序 order by

#默认是升序(asc),降序(desc)select  *  from emp order by sal desc;    //以工资按降序排序select  *  from epm order by sal , deptno  //多字段排序select  sal*12  annsal  from epm order by annsal   //别名排序

条件查询 where

select  *  from emp where sal>1000;   //工资大于1000的select  *  from emp where sal>1000  and  sal<2000;select  *  from emp where sal>5000  or  sal<1000select  *  from emp where sal<>2500   //工资不等于2500select  *  from emp where sal  is null   //工资不空的select  *  from emp where sal>0 or 1=1;  //恒等式

ps:运算符的优先级:算术>连接>比较>逻辑

分组查询(group by)
描述:将表中的数据分成若干个小组
语法:select 字段 from where 条件 group by 字段 order by 字段

#例:select 字段 from where 条件 group by 字段 order by 字段ps:在group  by 分组,select 子句,不能写group by没有的字段。除非这些字段用在聚合函数中

过滤 having
描述:过滤分组之后的结果,只能出现在group by 的后面

#例:select deptno , count(1),avg(sal) from emp group by deptno having avg(sal) >2000select avg(sal) avg_sal,deptno from emp group by deptno having  avg_sal>2000;

执行过程:from -where -group by --- having -select ---order by
分页

#例:select * from emp limit 0 , 5 ;  //从第1行开始取,取5行

模糊查询

例:select * from emp where ename like 's%'ps:%:表示0~多个任意字符_:表示1个任意字符

2. 内连接与外连接

(1)内连接:

#语法:select  table1.column,table2.column from table1,table2 where table1.column= table2.columnselect dept.DEPTNO,ename ,dname from emp inner join dept on emp.DEPTNO =dept.DEPTNOselect emp.ename,dept.dname from emp inner join dept using(deptno)

注意:一般的如果两张表示通过外键连接的,使用第1,2种查询方法,如果不是外键连接的使用1种查询方法。第3中方式的using中填入,两张表中字段名称相同的字段,而且通用列字段只出现一次(即去除重复的字段)
内连接的特点:

  • 关联表中都出现的字段值最终才能出现在结果集中
  • 内连接与顺序无关

    (2)外连接:

    左外连接
    描述:两个表在连接的过程中除了返回满足条件的行以外,还返回左表中不满足条件的行,这种连接叫左外连接。

    #例:select deptno ,dname,empno,ename from dept left join emp  using(deptno)   //左外连接

    右外连接
    描述:两个表在连接的过程中除了返回满足条件的行以外,还返回右表中不满足条件的行,这种连接叫右外连接。

    #例:select deptno ,dname,empno,ename from dept right join emp  using(deptno)   //右外连接

    全外连接
    描述:两个表在连接的过程中除了返回满足条件的行以外,还返回两个表中不满足条件的行,这种连接叫做全外连接。(笛卡尔积)

    #例:select deptno ,dname,empno,ename from dept full join emp  using(deptno)   //全外连接

    自然连接
    描述:特殊的等值连接:不需要声明相等的字段,会自动匹配

    #例:select * from emp natural join dept;    (等值连接)

    外连接的特点

  • 有主从之分,与连接顺序有关
  • 哪一个 是主表,就遍历哪一个表,然后与从表匹配相应的记录,合并,没有匹配到的用null填充

3. 子查询

语法:select 字段 from table where 表达式 operator (子查询字段)。
特点:子查询在主查询前执行一次,主查询使用子查询的结果
使用:
  - 单行子查询:如果使用子查询的结果是1行,可以使用比较运算符(> < <>)
  - 多行子查询:如果使用子查询的结果是多行,则 all 、any in
  - exists:select from dept e where exists (select from emp e1 where sal>2000 and e1.deptno=e.deptno)
in和exists的区别:
  - in:先执行子查询,将结果返回给主查询,主查询继续执行
  - 先执行主查询,将主查询的值依次在子查询进行匹配,根据是否匹配返回true或者false,如果是true连接展示,否则不展示。
子查询和关联查询的使用时机
  - 子查询:查询条件和结果放在同一张表中
  - 关联查询,查询条件和结果分布在多张表中

3. 联合查询

关键字:union、union all。
区别:
  - union:会发生去重
  - union all:不会发生去重
用法:

#例:select * from emp where sal>2000 union select * from emp where deptno>20select * from emp where sal>2000 union all select * from emp where deptno>20

使用要求:联合的结果集必须一致(两张表一致,查询的字段也一致),不然会发生错误。

关于sql的交集、差集、并集:

查询 字段 条件 结果 两个 工资 过程 排序 一致 特点 语法 关联 分组 别名 字符 方法 运算符 顺序 多行 联合 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技公司经营范围 科技赋能下的互联网金融 互联网属科技 互联网科技媒体 时间互联网络科技 万达互联网科技 郑州华宇互联网科技 卫星互联网科技股票 宝灵互联网科技有限公司 杭州壁岐互联网科技有限公司 互联网新科技动漫ppt素材 互联网科技大赛获奖感言 上海钢联属于互联网科技股吗 风投北京互联网科技 九思连强互联网电子科技有限公司 广东鹅鹅鹅互联网科技有限公司 北京天晋互联网科技有限公司 广东猫王互联网科技有限公司电话 互联网科技自媒体灵感 知域互联网科技有限公司官网 金诺互联网科技 互联网 科技公司 互联网未来科技 受益于互联网科技的高速发展 上海宁丞科技互联网 区块链结合互联网科技 互联网金融运营模式中的金融科技 兰石爱特工业互联网科技分公司 互联网科技创业计划的风险分析 优雇互联网科技有限公司
0