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 使用要求:联合的结果集必须一致(两张表一致,查询的字段也一致),不然会发生错误。 |
免责声明:本站部分文章和图片均来自用户投稿和网络收集,旨在传播知识,文章和图片版权归原作者及原出处所有,仅供学习与参考,请勿用于商业用途,如果损害了您的权利,请联系我们及时修正或删除。谢谢!
始终以前瞻性的眼光聚焦站长、创业、互联网等领域,为您提供最新最全的互联网资讯,帮助站长转型升级,为互联网创业者提供更加优质的创业信息和品牌营销服务,与站长一起进步!让互联网创业者不再孤独!
扫一扫,关注站长网微信