MySQL的查询操作
admin
2023-04-19 19:04:11
0

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<1000
select  *  from emp where sal<>2500   //工资不等于2500
select  *  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) >2000
select 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.column
select dept.DEPTNO,ename ,dname from emp inner join dept on emp.DEPTNO =dept.DEPTNO
select 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>20
select * from emp where sal>2000 union all select * from emp where deptno>20

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

关于sql的交集、差集、并集:
MySQL的查询操作

相关内容

热门资讯

原创 v... 影像的发展进一步推动,不少品牌推出了专业影像手机,拥有2亿像素摄像头、色彩还原摄像头、影像芯片、影像...
荣耀首款自研耳夹式耳机官宣即将... 快科技5月13日消息,日前,荣耀首席营销官关海涛宣布,荣耀全场景团队自研首款耳夹式耳机马上上市,并称...
谷歌推出Googlebooks... IT之家 5 月 13 日消息,2026 年 I/O 开发者大会下周(5 月 19~20 日)召开之...
自控所推动GNC专业智能化升级 来源:滚动播报 (来源:中国航空报) 本报讯 5月6日,航空工业自控所召开 GNC+AI关键技术研发...
华电电力申请数据库访问方法专利... 国家知识产权局信息显示,华电电力科学研究院有限公司申请一项名为“数据库访问方法、装置、设备及介质”的...
苏州率先打造数据流通利用新范式 数据,作为第五大生产要素 具有流动性强、非消耗性、非均质性等特点 苏州率先打造数据流通利用新范式 夯...
伊媒披露伊美新一轮谈判5个先决... 当地时间5月12日,据伊朗法尔斯通讯社援引知情人士消息报道,伊朗对与美国新一轮谈判提出的5个先决条件...
英国将向霍尔木兹海峡多国护航行... 当地时间12日,总台记者从英国国防部获悉,英国将向在霍尔木兹海峡执行任务的多国护航行动提供无人机、战...
强化技术引领场景培育政策保障 ... 5月11日,省长叶建春就脑机接口技术与产业创新工作开展专题调研。他强调,脑机接口是培育未来产业发展新...
上海交大王如竹教授领衔撰写的“... 4月30日,国际制冷学会(IIR,International Institute of Refrig...