MySQL学习笔记(一)

MySQL学习笔记

1. 简单的SQL操作命令

\c 命令,用于结束一条语句
exit 或者 quit ,用于退出mysql

2. 简单的查询语句(DQL)

语法格式:
select 字段名1,字段名2,字段名3,… from 表名;
提示:
1、任何一条sql语句以“;”结尾,而在Navicat Premium中不用加“;”结尾,
2、sql语句不区分大小写。
例如:给查询员工年薪结果的列重命名
select ename,sal * 12 as yearsal from emp;
其中,as 可以省略
select ename,sal * 12 yearsal from emp;
查询所有字段:
select * from emp; // 实际开发中不建议使用*,效率较低。

3.条件查询

语法格式:
select
字段,字段…
from
表名
where
条件;
执行顺序:先from,然后where,最后select

  1. 查询工资等于5000的员工姓名?
    select ename from emp where sal = 5000;
    例如,查询SMITH的工资?
    select sal from emp where ename = ‘SMITH’; // 字符串使用单引号括起来。

  2. 找出工资高于3000的员工?
    select ename,sal from emp where sal > 3000;

  3. 找出工资不等于3000的员工 ?
    select ename,sal from emp where sal <> 3000;
    select ename,sal from emp where sal != 3000;

  4. 找出工资在1100和3000之间的员工,包括1100和3000?
    select ename,sal from emp where sal >= 1100 and sal <= 3000;
    select ename,sal from emp where sal between 1100 and 3000; // between…and…是闭区间 [1100 ~ 3000],between and在使用的时候必须左小右大。

  5. 找出哪些人津贴为NULL?
    在数据库当中NULL不是一个值,代表什么也没有,为空。
    空不是一个值,不能用等号衡量。
    必须使用 is null或者is not null
    select ename,sal,comm from emp where comm is null

  6. 找出哪些人没有津贴(注意和上述的区别)?
    select ename,sal,comm from emp where comm is null or comm = 0;

  7. 找出工作岗位是MANAGER和SALESMAN的员工?
    select ename,job from emp where job = ‘MANAGER’ or job = ‘SALESMAN’

  8. and和or联合起来用:找出薪资大于1000的并且部门编号是20或30部门的员工。
    select ename,sal,deptno from emp where sal > 1000 and deptno = 20 or deptno = 30; // 错误的
    select ename,sal,deptno from emp where sal > 1000 and (deptno = 20 or deptno = 30); // 正确的。
    注意:当运算符的优先级不确定的时候加小括号。

  9. in等同于or:找出工作岗位是MANAGER和SALESMAN的员工?
    select ename,job from emp where job = ‘SALESMAN’ or job = ‘MANAGER’;
    等同于select ename,job from emp where job in(‘SALESMAN’, ‘MANAGER’);

  10. 查询薪资是800和5000的员工名字及工作岗位名称
    select ename,job from emp where sal in(800, 5000); // in后面的值不是区间,是具体的值,not in: 不在这几个值当中。

模糊查询like ? 
找出名字当中含有O的?
(在模糊查询当中,必须掌握两个特殊的符号,一个是%,一个是_)
%代表任意多个字符,_代表任意1个字符。
select ename from emp where ename like '%O%';
找出名字中第二个字母是A的?
select ename from emp where ename like '_A%';

3. 排序(升序、降序)

  1. 按照工资升序,找出员工名和薪资?
    select
    ename,sal
    from
    emp
    order by
    sal;
    注意:默认是升序。怎么指定升序或者降序?asc表示升序,desc表示降序。
    select ename , sal from emp order by sal; // 升序
    select ename , sal from emp order by sal asc; // 升序
    select ename , sal from emp order by sal desc; // 降序。
  2. 按照工资的降序排列,当工资相同的时候再按照名字的升序排列。
    select ename,sal from emp order by sal desc;
    select ename,sal from emp order by sal desc , ename asc;
    注意:越靠前的字段越能起到主导作用。只有当前面的字段无法完成排序的。
  3. 找出工作岗位是SALESMAN的员工,并且要求按照薪资的降序排列。
    select
    ename,job,sal
    from
    emp
    where
    job = ‘SALESMAN’
    order by
    sal desc;
查询、条件、排序语句格式:
select 
	字段1,字段2...			  
from
	表名						            1
where
	条件						            2
order by
	....						            4
	order by是最后执行的。
  1. 分组函数
    count 计数
    sum 求和
    avg 平均值
    max 最大值
    min 最小值

    记住:所有的分组函数都是对“某一组”数据进行操作的。分组函数自动忽略NULL。
    分组函数也称:多行处理函数。
    多行处理函数的特点:输入多行,最终输出的结果是1行。
    count()和count(具体的某个字段)区别
    count(*):不是统计某个字段中数据的个数,而是统计总记录条数。(和某个字段无关)
    count(comm): 表示统计comm字段中不为NULL的数据总数量。

    分组函数也能组合起来用:
    select count(*),sum(sal),avg(sal),max(sal),min(sal) from emp;

  2. SQL语句中有一语法规则,分组函数不可直接使用在where子句中。因为group by是在where执行之后才会执行的。

            select		       5
     			..			
     		from		       1
     			..
     		where			   2
     			..
     		group by		   3
     			..
     		having		       4
     			..
     		order by		   6
     			..
    
  3. 单行处理函数
    单行处理函数:输入一行,输出一行。
    计算每个员工的年薪?
    select ename,(sal+comm)*12 as yearsal from emp;
    重点:所有数据库都是这样规定,只要有NULL参与的运算结果一定是NULL。
    使用ifnull(空处理)函数:
    select ename,(sal+ifnull(comm,0))*12 as yearsal from emp;
    ifnull(可能为NULL的数据,被当做什么处理) : 属于单行处理函数。

  4. group by 和 having
    group by : 按照某个字段或者某些字段进行分组。
    having : having是对分组之后的数据进行再次过滤。
    任何一个分组函数(count sum avg max min)和group by联合使用时,都是在group by语句执行结束之后才会执行的。

  5. 找出每个部门的平均薪资,要求显示薪资大于2000的数据。
    第一步:找出每个部门的平均薪资
    select deptno,avg(sal) from emp group by deptno;
    ±-------±------------+
    | deptno | avg(sal) |
    ±-------±------------+
    | 10 | 2916.666667 |
    | 20 | 2175.000000 |
    | 30 | 1566.666667 |
    ±-------±------------+

    第二步:要求显示薪资大于2000的数据
    select deptno,avg(sal) from emp group by deptno having avg(sal) > 2000;
    ±-------±------------+
    | deptno | avg(sal) |
    ±-------±------------+
    | 10 | 2916.666667 |
    | 20 | 2175.000000 |
    ±-------±------------+
    注意:where后面不能使用分组函数,select deptno,avg(sal) from emp where avg(sal) > 2000 group by deptno; // 错误了。这种情况只能使用having过滤。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值