Mysql SELECT 查询语法,基本语法
以两个表为基础,分别是部门表、员工表
//部门信息表
CREATE TABLE `dept` (
`deptno` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '部门id',
`deptname` varchar(32) COLLATE utf8_unicode_ci NOT NULL DEFAULT '' COMMENT '部门名称',
PRIMARY KEY (`dempno`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
//员工信息表
CREATE TABLE `emp` (
`empid` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '员工ID',
`deptno` int(11) DEFAULT NULL COMMENT '部门ID',
`ename` varchar(32) COLLATE utf8_unicode_ci DEFAULT '' COMMENT '员工名字',
`hiredate` date DEFAULT NULL COMMENT '入职时间',
`sal` decimal(10,2) DEFAULT NULL COMMENT '工资',
PRIMARY KEY (`empid`) USING BTREE
) ENGINE=MyISAM AUTO_INCREMENT=17 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='员工表';
一、查询所有记录
语法:
select * from 表名 [可选的where条件]
//查询部门ID为1的员工信息
select * from emp where deptno = 1;
二、查询自定的字段
语法:
select 字段1,字段2,… from 表名 [可选的where条件]
//例如查询部门ID为1的用户姓名
select ename from emp where deptno = 1;
三、查询不重复的记录(DISTINCT)
语法:
select distinct 字段名 from 表名 [可选的where条件]
//例如查询部门ID为1的用户姓名,去重
select distinct ename from emp where deptno = 1;
四、排序和限制(ORDER BY )
语法:
select [*|多字段] from 表名 [where条件][ORDER BY 字段1 [DESC|ASC], 字段2[DESC|ASC]]
ASC为升序,DESC为倒叙,默认为升序ASC
//1、按照工资高低显示,如果只按照1个字段进行排序,表中重复的记录会无序排列,例如工资相同的
select * from emp order by sal asc;
//2、查寻入职最早的,并且工资最高的,结果能看到同一天入职人员,工资高的
select * from emp order by hiredate asc, sal DESC;
五、查询结果只显示一部门(LIMIT)
语法:
select * from 表名 limit offset_start,row_count;
offset_start,偏移量,默认为0,从第几条开始
row_count,显示行数
注:limit和order by常用语显示分页使用。
//2、查寻入职最早的,并且工资最高的前3名
select * from emp order by hiredate asc, sal DESC limit 0, 3
六、聚合
很多情况下,用户都需要进行一些汇总的操作,例如:统计整个公司的人数或者统计每个部门的人数,这时就用到了聚合操作
语法:
select [*|多字段|func_name] from 表名 [where条件] [group by 字段 desc|asc] [with rollup] [having 条件]
func_name:表示聚合操作,也称聚合函数,常用的有sum(求和)、count(*)(记录数)、max(最大), min(最小),avg(平均数)
group by:表示要分进行分类聚合的字段,比如:按部门统计员工数量,部门就应该写在group by后面
with rollup:是可选语法,表明是否对分类聚合的结果再进行汇总
having:关键字,表示对分类后的结果再进行条件筛选
//统计公司总人数
select count(1) from emp;
//统计各个部门的总人数
select deptno, count(1) from emp group by deptno;
//更细一些,既要统计各部门人数,又要统计总人数
select deptno, count(1) from emp group by deptno with rollup;
//统计人数大于2人的部门
select deptno, count(1) from emp GROUP BY deptno HAVING count(1) > 2;
//统计公司所有员工的工资总额,最高和最低薪水
select sum(sal), max(sal), min(sal) from emp;