首先这是一张表,有员工编号,姓名,薪资,入职时间,佣金,部门编号等。我们对这个表将进行一些查询,用到from,select,distinct,where,between,order,limit,group by,having等子句。

一、查询语句由子句组成,子句执行有先后顺序,而与子句出现的位置无关。

MySQL单表查询常用语句组合(快速入门掌握数据库)

二、一些常用子句

1.from子句

在查询语句中,from子句是最先被执行的。用于将数据表从硬盘拷到内存中。from后面只跟数据表。数据表可以重命名。

select * from Emp as e;//将数据库Emp重命名为e,这个重命名,只是暂时的,不会永久更改表的名字,而且as可以省略。

1.1select ENAME as 姓名,HIVEDATE 入职时间 from Emp;//将字段名重命名为中文

2.select子句

可以理解为输出,并不是选择

2.1输出指定列

select Emp.ENAME from Emp;//简便写法:select ENAME from Emp;

select Emp.ENAME,Emp.SAL from Emp;

2.2去重,例如可以显示职业一共的种类

select distinct JOB from Emp;//如果后面跟多个字段,只有多个字段都相同才认为重复

3.where子句

用来对记录进行筛选,它的执行顺序在from之后,在select之前。

3.1比较符 >, >=, <, <=, =, != //这里提醒一下,没有==,只有=

select SAL from Emp where SAL>3000;//选择薪资大于3000的员工信息

3.2比较符的组合

select * from Emp where SAL<=3000 and SAL>=1500;//查询薪资中间区域

select * from Emp where SAL>=3000 or SAL<=1500;//查询薪资大于3000或者小于1500

3.3between

select * from Emp where SAL between 1500 and 3000;//薪资在1500-3000

3.4集合判断

select * from Emp where SAL in(1500,1600,3000,800);//选择薪资为1500,1600,3000,800

3.5NULL

NULL不能比较,只能用is null或者is not null

select * from Emp where COMM  is NULL;

3.6模糊查询(通配符)

用like,通配符有两种,%和_,前者表示多个字符,后者只有一个字符。

select * from Emp where  ENAME like ‘A%’;//查询名字中有A,后面有其他多个字符的员工信息

select * from Emp where like‘%00’;//模糊查询不仅可以查询字符型字段,还可以查整形数等类型

3.7正则表达式

select * from Emp where ENAME regexp ‘^s’;//查询名字以s开头的员工,^想象成蛇头,方便记忆

select * from Emp where ENAME regexp ‘s$’;//查询名字以s结尾的员工,$想象成蛇尾,方便记忆

4.order by子句,用来排序

select * from Emp order by SAL asc;//(asc可以省略) 升序
select * from Emp order by SAL desc; //   降序
//两个字段进行排序
select * from Emp  order by DEPNO, SAL;//在一个部门里面进行工资升序排序

5.limit限定

select *from Emp limit 5;
select *from Emp limit 5,2;//在5行之后选择两个,排序后再选择

6.group by 子句

select * from Emp group by DEPNO;//每个部门显示第一个人,其他人在其后面,并没有丢弃数据。分组后,同组的数据被压缩到第一条记录里面。

select ENAME, count(JOB) from Emp group by DEPNO;//count是计数函数,计数的字段如果为NULL将不记。相同不影响。使用*可以避免这种情况,去除NULL的影响。

select JOB, count(*) from Emp group by DEPNO;
select JOB, count(*) 部门员工数量 from Emp group by DEPNO;

//除了count函数之外,还有sum avg min max
select DEPNO, sum(SAL)总金额 from Emp group by DEPNO;

select DEPNO, avg(SAL)总数 ,min(SAL) 最小值,max(SAL) 最大值 from Emp group by DEPNO;

7.having 子句

用来对分组之后的结果进行进一步的筛选,就像where一样。
select min(SAL) from Emp group by DEPNO;
//分组之后,进一步筛选,只能用having,这是与where的区别。
select min(SAL) from Emp group by DEPNO having min(SAL) <1000;
//where分组之前的数据,having分组之后的数据

select min(SAL) from Emp where HIREDATE > '1981-6-1' group by DEPNO having min(SAL)>1000;

三、练习题目

1、查询部门编号为20的所有员工信息。

select * from Emp where DEPNO=20; 

2、查询1982年1月1日后入职的员工信息。

select * from Emp where HIREDATE>'1982-1-1';//时间需要加单引号

3、查询1981年入职的员工信息。 (用year函数)

select * from Emp where year(HIREDATE)=1981; 

4、查询入职时间在2月的员工名字。(用mouth函数)

select  Emp.ENAME from Emp wheremonth(HIREDATE)=2;

5、查询部门编号为10,30的员工信息。

select * from Emp where DEPNO!=20; 

select * from Emp where DEPNO=10 or DEPNO=30;

6、查询薪水低于2000的员工信息。

select * from Emp where SAL<2000;

7、查询领取佣金的员工姓名和职位。

select Emp.ENAME,Emp.JOB from Emp where COMM >0;

8、查询不领取佣金的员工编号。

select  Emp.EMPNO from Emp whereCOMM is null;//用is null 和 is not null 。不要出现= null。

9、查询所有办事员(CLERK)的名字。 

select Emp.ENAME from Emp where JOB='CLERK';//字符串也需要单引号

10、查询所有归7839管的员工名字和职位。

select Emp.ENAME,Emp.JOB from Emp where MGR=7839;

11、查询佣金比工资高的员工的入职时间。

select HIREDATE from Emp where COMM > SAL;

12、查询年收入超过40000的员工名字和部门编号和年收入,列名改为’年收入’。

select ENAME,EMPNO,SAL*12 年收入 from Emp whereSAL*12>40000;

13、查询部门编号为10且职位是办事员的信息。

select *from Emp where DEPNO=10 having JOB='CLERK';

13、查询佣金第二高的员工信息。

select * from Emp order by COMM desc limit1,1;//limit 2,2;可以输出3,4名的员工信息。用limit比较简单,要比网上其他思路简单,而且好理解,好记忆。

14、按入职时间降序排序,入职时间相同的按工资升序排序。

select * from Emp order by HIREDATEdesc,SAL asc;

15、列出所有职位的类别。

select distinct JOB from Emp ;

16、查询mgr一列不为空的所有信息。

select * from Emp where MGR is not null;

17、列出所有的mgr编号。

select distinct MGR from Emp ;

18、查询名字中有LL的员工信息。

select * from Emp where ENAME regexp 'LL';

19、查询名字以N结尾的所有员工信息。

select * from Emp where ENAME regexp 'N$';

20、查询工资以3开头的员工信息。

select * from Emp where SAL regexp '^3';

21、查询编号中有9的所有员工信息。

select * from Emp where EMPNO regexp '9';

22、查询名称第二个字母是d的员工信息。

select * from Emp where ENAME like '_d%';

select * from Emp where ENAME like '_M%';

 


相关文章: