常用命令:
注意:每一个命令后面都要加上分号结尾,这就代表一句命令结束
退出:exit
查看数据库: show databases; 分号结尾
使用数据库: use + 具体数据库名
创建数据库库:create database + 库名
查看有哪些表(也就是查所有表名):show tables
查看数据库版本号:select version();
查看当前使用的数据库:select database();
table表
数据查询语言,也就是只要是select的都是
注意:建议使用写出全部字段,因为使用 “ * ”, 效率比较低 因为会把*转化为字段所以效率比较低,在实际开发中不建议
语法:
select 字段名 from 表名 where 条件
条件:
=:等于
<> !=:不等于
<小于
大于>
<=:小于等于
: >=大于等于
between … and…:两个值之间,等价于>= and <=:注意:前面的值一定是小的,后面的是大的
is null :为空
is not null:不为空
and:并且
or:或
in:包含
like:模糊查询,一般跟 % 或者下划线;%匹配任意字符;下划线:一个下划线匹配一个字符
order by :默认是升序,
select sname,sage from student order by sage;
升序(ASC):
select sname,sage from student order by sage asc;
降序(DESC):
select sname,sage from student order by sage desc;
处理空处理函数:
ifnull(可能为null的数据,被当作什么来处理)
select ename,ifnull(comm,0) as comm from emp;
单行处理函数:ifnull();
Lower:转换成小写
select Lower(ename) from emp;
Upper:转换成大写
substr:截取字符串(被截取字符串,起始下标,截取长度)
注意:mysql中起始下标为1.
trim:去空格
round:四舍五入(x,d):x是要四舍五入的数据,d是保留的小数位,默认是0也就是没有小数
rand():随机数:0-1之间
concat:字符串拼接(字段1,字段2,…)
case when then when then else end :当…时候…就…
分组函数又叫多行处理函数,也就是输入多行,输出一行
一共五个:
注意:
答:因为一般分组函数都是搭配group by使用的,但是呢group by的执行顺序在where的后面,所以分组函数的数据都还没有进行分组,就更不可能在where子句中使用了。
重点:count(*) 和 count(具体字段)的区别
0count(*):统计同数据条数,和字段无关
count(具体字段):统计这个字段中不为null的总记录
多行处理函数可以组合:
案例1:查询工资大于平均工资的员工信息
注意:考察的是where后面不能跟分组函数
案例2:找出每个工作岗位的最高薪资
分析:根据岗位来分组,相同岗位分在一起,然后求出最大值即可
案例4:找出每个部门不同岗位的最高薪资
分析:
先通过排序查一下不同部门的岗位薪资,便于观察
两个字段联合分组(dept,job)
select dept,job,max(salary) from emp group by dept,job;
案例5:计算出那个岗位的工资最高
select job,sum(salary) from emp group by job;
select job,sum(salary)from emp group by job order by sum(salary);
案例5:找出每个部门的最高薪资,要求薪资数据大于2900
案例6:找出每个部门的平均薪资,要求显示平均薪资高于2500
DQL完整语法:
作用:去重
只会显示的去重了,数据库实际没有去重
案例:去重工作的重复字段
案例:统计岗位的数量:
连接查询就是多表查询
笛卡尔积现象:
当两张表进行连接查询的时候,没有任何条件限制,最终的查询结构条数是两张表记录条数的乘积
连接分类:
- 案例:查询每个员工的部门名称,要求显示员工名和部门名
SQL92查询方法:
select e.ename,d.dname from emp e,dept d where e.dept = d.deptno;
//使用where
SQL99查询方法:
select e.ename,d.dname from emp e join dept d on e.dept = d.deptno;
使用inner(省略了) join onmg-blog.csdnimg.cn/6199d86aa3f84fd68416fb68551e14b5.png)
*案例:找出每个员工的工资等级,要求显示员工名、工资、工资等级
select e.ename,e.salary,g.gradeid from emp e join grade g on e.salary between lowcase and upcase;
- 案例:找出每个员工的上级领导,要求显示员工名和对应的领导名
select e.ename,s.mgr from emp e join emp s on e.empno = s.mgr;
左外连接(左连接)
表示左边的表是主表
右外连接(右链接)
表示右边的表是主表
案例:查询所有员工的领导(意思是每一个员工的领导都要查询出来,包括最大boss,虽然他没有领导)
注意:左连接有右连接写法,右连接有左连接的写法
全连接:不那么重要
内连接和外连接区别
注意:
外连接语法:表一 lift / right outer(可省略)表二
其实看是内连接还是外连接,看有没有lift或者right就可以知道了
笛卡尔积现象:
select ename,dlocation from emp,dept;
select ename,dlocation from emp,dept where emp.dept = dept.deptno;
select emp.ename,dept.dlocation from emp,dept where emp.dept = dept.deptno;
select e.ename,d.dlocation from emp e,dept d where e.dept = d.deptno;
三张表的连接查询
语法:
案例:找出每一个员工的部门名称以及工资等级
分析:先连接两张表进行部分数据查询,再将查询到的结果看作是一张表,再与剩下的表进行查询操作
- select e.ename,d.dname,s.gradeid from emp e join dept d on e.dept = d.deptno join grade s on e.salary between s.lowcase and s.upcase;
数据操作语言,也就是数据的增删改等操作
数据定义语言,主要是表结构,并不是数据