MySQL学习----day01

从今天开始,我会把自己学习MySQL的心得写在这里,希望能和大家一起进步!!!

所有MySQL使用的sql文本内容都出自B站老杜,有需要的小伙伴可以加我QQ1845356586

一:SQL语句的分类

SQL语句分为DQL(数据查询语言): 查询语句,凡是select语句都是DQL。
                      DML(数据操作语言):insert delete update,对表当中的数据进行增删改。
                      DDL(数据定义语言):create drop alter,对表结构的增删改。
                      TCL(事务控制语言):commit提交事务,rollback回滚事务。(TCL中的T是Transaction)
                      DCL(数据控制语言): grant授权、revoke撤销权限等。

二:基本的MySQL指令

1.在dos窗口下登录MySQL:mysql -u root -p(这里是你的登陆密码)

2.查看数据库指令:show databases;(这个不是SQL语句,属于MySQL的命令。)

3.创建数据库指令:create database  xxxx;(这个不是SQL语句,属于MySQL的命令。)

4.使用数据库指令:use xxxx;(这个不是SQL语句,属于MySQL的命令。)

5.查看当前的数据库有哪些表:show tables;(这个不是SQL语句,属于MySQL的命令。)

6.删除数据库指令:drop database xxxx;

7.查看表中数据:select * from xxxx;

由于我电脑本身已经有了相关数据,所以接下来的操作我会直接用数据进行操作。

8.查看当前使用的是哪个数据库:select database();

9.查看当前数据库版本号:select version();

10.查看创建表的语句:show create table emp;

 11.给查询的列重命名:select ename,sal * 12 as '年薪' from emp;

注意:标准sql语句中要求字符串使用单引号括起来,虽然mysql支持双引号,但是尽量别使用。 

 12.条件查询语法格式:select 字段,字段....  from 表名 where 条件;

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

 例如:eg1查询工资等于5000的员工姓名

select ename,sal from emp where sal = 5000;

 eg2查询工资不等于3000的员工姓名

select ename,sal from emp where sal <> 3000;或select ename,sal from emp where sal != 3000;

eg3找出工资在1100和3000之间的员工

select ename,sal from emp where sal between 1100 and 3000;

注意:between .... and ....是闭区间,即上述例子是查 [1100,3000],包含1100和3000

 13.NULL,在数据库中NULL不是一个值,代表什么也没有,为空。空不是一个值,不能用等号衡量。必须使用is null 或 is not null。

例如:eg1找出哪些人的津贴不为NULL

select ename,sal,comm from emp where comm is not null;

 eg2找出哪些人没有津贴

select ename,sal,comm from emp where comm is null or comm = 0;

eg3找出工作岗位是manager和salesman的员工

 select ename,sal,job from emp where job = 'manager' or job = 'salesman';

and和or联合起来用:找出薪资大于1000的并且部门编号是20或30部门的员工。

select ename,sal,deptno from emp where sal > 1000 and (deptno = 20 or deptno = 30);

14.模糊查找like,(在模糊查询当中,必须掌握两个特殊的符号,一个是%,一个是_)%代表任意多个字符,_代表任意1个字符。

 eg1找出名字里面有o的

select ename from emp where ename like '%o%';

eg2找出第二个字母是A的

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

15.排序,升序

格式: select 字段名,字段名....   from 表名 order by 条件; 

 例如:eg1 按照工资升序,找出员工名和薪资

select ename,sal from emp order by sal;

注意:默认是升序,那怎么指定升序和降序勒? asc升序,desc降序 

 eg2 还是拿上面的例子

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;//降序

 eg3按照工资的降序排,如果工资一样,那就按照名字的升序排。

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

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

 where和order by同时使用,格式

select 字段名,字段名.... from 表名 where 条件 order by ....

先执行 from 接着where 接着select 最后 order by排序。

eg1查询工作是salesman的并且按照工资的升序排

select ename,sal,job from emp where job = 'salesman' order by sal;

16.分组函数

count计数,sum求和会自动忽略NULL,max最大值,min最小值,avg平均值

注:count(*)和count(具体的某个字段),他们有什么区别?
        count(*):不是统计某个字段中数据的个数,而是统计总记录条数。(和某个字段无关)
        count(comm): 表示统计comm字段中不为NULL的数据总数量。

 

注意:所有的分组函数都是对'某一组'数据进行操作的。

分组函数一共有5个,同时分组函数还有另外一个名字:多行处理函数。其特点是:输入多行,最终输出的结果是1行。并且分组函数会自动忽略NULL。

17.单行处理函数:输入一行,输出一行。

重点:所有数据库都是这样规定的,只要有NULL参与的运算结果一定是NULL。 

eg1计算所有工人的年薪

select ename,(sal+comm) * 12 as '年薪' from emp;

要想不出现NULL,就得使用ifnull() 空处理函数
ifnull(可能为NULL的数据,被当做什么处理) : 属于单行处理函数。

eg2:如果津贴是NULL,那就当作0来处理

 

18.group by 和 having

group by:按照某个字段或者某些字段进行分组

having:having是对分组之后的数据进行再次过滤

eg1找出每个工作岗位的最高薪资

select max(sal) from emp group by job;

 注意:分组函数一般和group by联合使用,这也是为什么它被称为分组函数的原因。

并且任何一个分组函数(sum,avg,max,min,count)都是在group by语句执行结束后才会执行。当一条sql语句没有group by的话,整张表的数据会自成一组。

另外:分组函数之所以不能用在where子句中,是因为group by是在where之后执行的

 结论:当一条语句中有group by的话,select后面只能跟分组函数和参与分组的字段。

eg2找出每个工作岗位的平均薪资

select avg(sal),job from emp group by job;

eg3找出每个部门的最高薪资,要求显示薪资大于2900的数据

select deptno,max(sal) from emp group by deptno havind max(sal) > 2900;//这种方式效率低

 可以直接使用where过滤

select deptno,max(sal) from emp where sal > 2900 group by deptno;//效率较高,建议能使用where过滤尽量使用

19.总结一个完整的DQL语句怎么写

执行顺序如下:
                select                5
                    ..            
                from                  1
                    ..
                where               2
                    ..
                group by          3
                    ..
                having             4
                    ..
                order by          6
                    ..

感谢观看!我是酷酷的涛!!!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值