将数据库查询单独开来是因为使用最多,也是技巧最多,同时面试最容易问的部分
简单查询
select * from table_name;
select name,age from table_name;
模糊查询%和_
%表示0个或多个未知字符
_表示单个未知字符
select name,age from table_name where name=‘王%‘;查询姓王的人
select name,age from table_name where name=‘%天%‘;查询姓名中包含天的人
select name,age from table_name where name=‘王_‘;查询姓王且名字是两个字的人
配合比较运算符 > < >= <= = != 和 <>
select name,age from table_name where age>18;
select name,age from table_name where age<18;
select name,age from table_name where age>=18;
select name,age from table_name where age<=18;
select name,age from table_name where age=18;(数据库语句中=就是=,而不是程序语言中的==)
select name,age from table_name where age!=18;或select name,age from table_name where age<>18;(比较运算符中!=,<>都代表排除,因此有两种写法)
数值计算 + - * / %
(太简单了不举例了)
去除重复 distinct
select distinct job from emp;
配合and 和 or
select name,age,sal from table_name where age>30 and sal>2000;(and表示条件必须同时满足)
select name,age,sal from table_name where age>30 or sal>2000;(or表示条件满足其中之一即可)
包含一个条件到另一个条件之间 between x and y
select name,age,sal from table_name where sal between 2000 and 3000;查询工资在2000-3000之间的人
与select name,age,sal from table_name where sal>=2000 and sal<=3000;相同
满足哪些条件 in
select name,age,sal from table_name where sal in(2000,3000,4000);查询工资在哪些人的工资是2000或3000或4000
与select name,age,sal from table_name where sal=2000 or sal=3000 or sal=4000;相同
is null和is not null
select name,age,sal from table_name where age is null;哪些人的年龄为空
select name,age,sal from table_name where age is not null;哪些人的年龄不为空
别名
select ename name,age 年龄 from table_name;
排序 order by 字段名
order by 字段名 asc(升序)/desc(降序)
mysql默认是升序
select ename,age from table_name order by age desc;
分页查询 limit
limit 跳过条数,请求条数
select ename,age,sal from table_name limit 4,2;跳过1,2,3,4条记录,请求5,6条记录
聚合函数 avg max min sum count
select avg(sal) from table_name;查询员工平均工资
select max(sal) from table_name;查询最高工资
select min(sal) from table_name;查询最低工资
select avg(sal) from table_name;查询员工平均工资
select sum(sal) from table_name;查询工资总和
select count(*) from table_name where deptno=30;查询30号部门共有多少员工
分组查询 group by
select avg(sal) from table_name group by deptno;查询每个部门的平均工资
select avg(sal) from table_name where sal>100 group by deptno;查询每个部门的平均工资,要求员工工资高于1000
分组查询支持多字段分组
select deptno,job,avg(sal) from table_name group by deptno,job;查询每个部门下,每种职位的平均工资
聚合函数的条件having
select avg(sal) from table_name group by deptno having avg(sal)>2000;查询每个部门的平均工资,要求只显示平均工资高于2000的部门
子查询(嵌套查询)
即使用一个查询语句的查询结果作为另一个查询语句的条件判断
select * from emp where sal=(select max(sal) from emp);查询表中工资最高的员工信息
关联查询(同时查询多张表的查询方式)
select e.ename,d.dname from emp e,dept d where e.deptno=d.deptno;
等值链接、内连接和外连接
等值链接 select * from A,B where A.x=B.x and A.age>20;
内连接 select * from A join B on A.x=B.x where A.age>20;
select e.ename,d.dname from emp e join dept d on e.deptno=d.deptno;查询每一个员工的姓名对应的部门名
外连接 select * from A left/right join B on A.x=B.x where A.age=20; 外连接就是查询一张表的全部数据和另一张表的交集数据
select e.ename,d.dname from emp e right join dept d on e.deptno=d.deptno;查询所有的部门名和对应的员工名
如果查询的数据是两张表的交集数据用内连接,如果查询的数据是一张表的全部数据和另外一张表的交集数据使用外连接
原文地址:https://www.cnblogs.com/WaterGe/p/11259930.html