MySQL基础篇【第二篇】| 简单的查询、条件查询、排序查询


一:简单的查询(DQL)

语法格式:  

select 字段名1,字段名2,字段名3,.... from 表名;

注意:
        (1)任何一条sql语句以 “;” 结尾
        (2)sql语句不区分大小写

1. 查询一个字段

例如:查询员工的姓名

select ename from emp;

编辑

Select语句后面跟的是字段名称,select是关键字,select和字段名称之间采用空格隔开,from表示将要查询的表,它和字段之间采用空格隔开

2. 查询多个字段 

例如:查询员工的编号和姓名

select empno, ename from emp;

编辑

查询多个字段,select中的字段采用逗号间隔即可,最后一个字段,也就是在from前面的字段不能使用逗号了。

3. 查询全部字段

例如:查询当前数据库中,emp表中的所有字段

select * from emp;

编辑

采用select * from emp,虽然简单,但是*号不是很明确,建议查询全部字段将相关字段写到select语句的后面;在以后java连接数据库的时候,是需要在java程序中编写SQL语句的这个时候编写的SQL语句不建议使用select *  这种形式,建议写明字段,这样可读性强!

4. 计算员工的年薪

例如:列出员工的编号,姓名和年薪,在select语句中可以使用运算符!

select empno,ename,sal*12 from emp;

编辑

sal*12看着很不舒服,我们可以用as给查询结果的列重命名,as可省略

编辑

5. 将查询出来的字段显示为中文

采用as关键字重命名表字段,并且这里的as 是可以省略的!

注意:字符串必须添加单引号 或者 双引号

           标准sql语句中要求字符串使用单引号括起来;虽然mysql支持双引号,尽量别用!

select empno as '员工编号',ename as '员工姓名',sal*12 as '年薪'from emp;
# 写成双引号的方式,只能在MySQL中运行,不通用;建议写成单引号的方式 select empno  "员工编号", ename  "员工姓名", sal*12 "年薪" from emp;

编辑

 编辑

二:条件查询

条件查询需要用到where语句,where必须放到from语句表的后面

语法格式:     

    select 
            字段,字段...
        from             表名
        where             条件;

执行顺序:先from,然后where,最后select

支持如下运算符:

编辑

1. = 操作符 

(1)查询薪水为5000的员工

select empno, ename, sal from emp where sal=5000;

编辑

 (2)查询job为MANAGER的员工

注意:manager字符串,要用单引号或者双引号括起来!

select empno, ename from emp where job='manager';

编辑

2. <> != 操作符

(1)查询薪水不等于5000的员工

注意:对于数值也可以采用单引号或者双引号引起来的,写成'5000'或者“5000”都是可以的,但是不建议这样写!

select empno, ename, sal from emp where sal <> 5000; select empno, ename, sal from emp where sal != 5000;

编辑

 (2)查询工作岗位不等于MANAGER的员工

select empno, ename, sal from emp where job<>'manager';

编辑

3. between … and …操作符

between and在使用的时候必须左小右大。

between and除了可以使用在数字方面(左闭右闭)之外,还可以使用在字符串方面(左闭右开)

(1)查询薪水为1600到3000的员工

第一种方法:使用between...and...

select empno, ename, sal from emp where sal between 1600 and 3000;

编辑

 between … and …,它是包含最大值和最小值的;就等价于>= and <=

第二种方式:使用>= and <=

select empno, ename, sal from emp where sal >=1600 and sal<=3000;

编辑

(2)查看员工首字母是A到C开头的名字

select ename from emp where ename between 'A' and 'C'; --包括A,不包括C

编辑

4. is null

null为空,但不是空串,为null可以设置这个字段不填值,空不是一个值,不能用等号衡量。如果查询为null的字段,采用is null;不能采用 =null !

(1)查询津贴为空null的员工

(1)首先先使用select * from emp; 查询到所有的comm信息,发现有很多是NULL 

编辑

(2)如果直接只用 =null 是无法查询出符合条件的数据

编辑

 (3)应该采用 is null 作为查询条件

select * from emp where comm is null; select * from emp where comm is not null;

编辑

(2)找出那些员工没有津贴:这就包括为null的和0的

select * from emp where comm is null or comm=0;

编辑

5. and

and表示并且的含义,表示所有的条件必须满足

例如:查询工作岗位为MANAGER,薪水大于2500的员工

select * from emp where job='manager' and sal >= 2500;

编辑

6. or

or,只要满足条件即可,相当于包含;满足条件之一即可!

例如:查询出job为manager或者job为salesman的员工

select * from emp where job='manager' or job = 'salesman';

编辑

7. and 和 or 联合使用

找出薪资大于1000的并且部门编号是20或30部门的员工。

select ename,sal,deptno from emp where sal > 1000 and (deptno = 20 or deptno = 30); -- and优先级比or高,要想让or先执行,必须加小括号

编辑

8. in

in表示包含的意思,完全可以采用or来表示,采用in会更简洁一些

(1)查询出job为manager或者job为salesman的员工

使用or:select * from emp where job='manager' or job = 'salesman'; 使用in是:

select * from emp where job in ('manager','salesman');

编辑

(2)查询出薪水包含1600和薪水包含3000的员工

select * from emp where sal in(1600,3000);

编辑

9. not

(1)查询出薪水不包含1600和薪水不包含3000的员工

第一种写法:使用不等<>

select * from emp where sal<>1600 and sal <>3000;

第二种写法: 使用等于= 和 not 联合使用

select * from emp where not(sal=1600 or sal=3000);

第三种写法:使用not in

select * from emp where sal not in(1600,3000);

编辑

(2)查询出津贴不为null的所有员工

select * from emp where comm is not null;

编辑

10. like

(1)Like可以实现模糊查询,like支持%和下划线匹配

(2)Like中%和下划线的差别?

        %匹配任意字符出现的个数

        下划线只匹配一个字符

(3)Like 中的表达式必须放到单引号中或者双引号中

 (1)查询姓名以M开头所有的员工

select * from emp where ename like 'M%';

编辑

 (2)查询姓名以N结尾的所有的员工

select * from emp where ename like '%N';

编辑

 (3)查询姓名中包含O的所有的员工

select * from emp where ename like '%O%';

编辑

 (4)查询姓名中第二个字符为A的所有员工

select * from emp where ename like '_A%';

编辑

(5)补充:找出名字中有下划线_的;利用转义字符!

select * from emp where ename like '%\_%';

三:排序查询

1 .单一字段排序

排序采用order by子句,order by后面跟上排序字段,排序字段可以放多个,多个采用逗号间隔,order by默认采用升序如果存在where子句那么order by必须放到where语句的后面

(1)按照薪水由小到大排序

select * from emp order by sal;

编辑

(2)先取得job为MANAGER的员工,再按照薪水由小到大排序

select * from emp where job='manager' order by sal; -- 先执行from,然后执行where,再执行selelct,最后才执行order by按照sal进行排序输出

编辑

(3)按照多个字段排序,如:首先按照job排序,再按照sal排序

select * from emp order by job,sal; -- 先按照job字段排序,当job相等才会按照sal排序

编辑

2. 手动指定排序顺序

(1)手动指定按照薪水由小到大排序:asc;默认也是asc从小到大排序的!

select * from emp order by sal asc;

编辑

 (2)手动指定按照薪水由大到小排序:desc

select * from emp order by sal desc;

编辑

3. 多个字段排序

(1)按照job和薪水倒序

select * from emp order by job desc,sal desc;

编辑

(2)按照工资的降序排列,当工资相同的时候再按照名字的升序排列

注意:越靠前的字段越能起到主导作用,只有当前面的字段无法完成排序的时候,才会启用后面的字段

select ename,sal from emp order by sal desc, ename asc;

编辑

4.  使用字段的位置(下标)来排序

也就是通过下标进行排序,从1开始,例如sal下标是6,那么按照薪水升序;不健壮,不建议使用

select * from emp order by 6; --下标从1开始 

编辑

总结:一定要注意执行的顺序

select 
        字段                     3
from
        表名                     1
where
        条件                     2
order by
        ....                        4
    
order by是最后执行的!

编辑

全部评论

相关推荐

深夜书店vv:腾讯是这样的,去年很多走廊都加桌子当工区
点赞 评论 收藏
分享
nus22016021404:兄弟,你这个简历撕了丢了吧,就是一坨,去找几个项目,理解项目流程,看几遍就是你的了,看看八股就去干了,多看看牛客里别人发出来的简历,对着写,你这写的啥啊,纯一坨
点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务