一、简单查询
1.查询一个字段
select 字段名 from 表名;
2.查询多个字段
使用逗号","隔开
3.查询所有字段
方式一:把每个字段都写上
方式二:使用 *
select * from 表名;
方式二缺点:效率低、可读性差、实际开发不建议
4.给查询的列起别名
使用as关键字起别名
例:
as可省略
例:
假设起别名时,别名里有空格:加“ ”或‘ ’
注:只是将显示的查询结果列名显示为别名,原表列名还是原名。
在所有的数据库中,字符串统一使用单引号括起来。
select 语句永远不会进行修改操作,只负责查询。
5.列参与数学运算
字段可以使用数学表达式
二、条件查询
查询出符合条件的数据。
语法格式:select 字段 from 表名 where 条件;
注:and和or同时出现时,and的优先级比or高。如果想让or先执行,需要加小括号
in不是一个区间,in后面跟的是具体的值
三、模糊查询
%:任意多个字符
下划线 _ :任意一个字符
例:找出名字含有‘O’的
例:找出名字以‘T’结尾的
例:找出名字第三个字母是‘R’的
例:找名字中含下划线‘_’
四、排序
1.升序
升序 :select 字段 from 表名 order by 字段; //默认是升序!
指定升序 :select 字段 from 表名 order by 字段 asc;
降序 :select 字段 from 表名 order by 字段 desc;
2.多个字段排序
例:select ename,sal from emp order by sal asc,ename asc;
//sal在前起主导,只有sal相等时,才会考虑启用ename排序
3.根据字段位置排序
例:select ename,sal from emp order by 2; // 2表示第二列
不建议在开发中使用,不健壮。
五、分组查询
select…from…group by…
将之前关键字组合,它们的顺序:select…from…where…group by…having…order by…
执行顺序:
1.from
2.where
3.group by
4.having
5.select
6.order by
例:显示每个工作岗位的工资和
例:显示每个部门,不同工作岗位的最高薪资
技巧:两个字段联合成一个字段看(两个字段联合分组)
例:显示每个部门最高薪资,要求最高薪资大于3000
使用having可对分完组的数据进一步过滤
having不能单独使用,不能代替where,必须和group by联合使用
以上语句执行效率低,可考虑:先找出大于3000,然后分组查询
例:找出每个岗位的平均薪资,要求显示平均薪资大于1500的,除manager之外,要求按照平均薪资降序排
六、连接查询
也称跨表查询,多张表联合起来查询数据
笛卡尔积现象:当两张表进行连接查询,没有任何条件限制时,最终查询结果条数是两张表条数的乘积
1.内连接
(1)等值连接
例:查询每个员工所在部门名称,显示员工名和部门名
SQL99优点:表连接的条件是独立的,连接之后,如果还需进一步筛选,再往后继续添加where
(2)非等值连接
例:找出每个员工的薪资等级,要求显示员工名、薪资、薪资等级
(3)自连接
例:查询员工的上级领导,要求显示员工名和对应的领导名
技巧:一张表看成两张表
2.外连接
(1)右外连接(右连接)
right表示将join关键字右边的这张表看成主表,主要是为了将这张表的数据全部查询出来,捎带着关联查询左边的表
(2)左外连接(左连接)
left表示将join关键字左边的这张表看成主表,主要是为了将这张表的数据全部查询出来,捎带着关联查询右边的表
3.多张表连接
一条SQL中内连接和外连接可以混合出现
例:找出每个员工的部门名称、工作等级、上级领导,要求显示员工名、领导名、部门名、薪资、薪资等级
七、子查询
select语句中嵌套select语句,被嵌套的select语句称为子查询
1.where子句中的子查询
例:找出比最低工资高的员工姓名和工资
select ename,sal from emp where sal > (select min(sal) from emp);
2.from子句中的子查询
注:from后面的子查询,可以将子查询的查询结果当做一张临时表
例:找出每个岗位的平均工资的薪资等级
3.select子句中的子查询
例:找出每个员工的部门名称,要求显示员工名,部门名
注:对于select后面的子查询,这个子查询只能返回1条结果,多于1条就报错
八、limit
作用:将查询结果集的一部分取出来,通常使用在分页查询中
完整用法:limit startIndex,length //起始下标,长度
缺省用法:limit length //前length
例:按照薪资降序,取出排名在前5的员工
注:MySQL中limit在order by之后执行
总结
执行顺序:
1.from
2.where
3.group by
4.having
5.select
6.order by
7.limit