1.mysql中的一些mysql命令

命令

作用

mysql -u用户名 -p密码

登录mysql

create database 数据库名称

创建数据库

use 数据库名称

使用数据库

show tables

展示当前数据库所有的表

source sql文件路径

初始化数据库(加载sql文件)

drop database 数据库名称

删除数据库

desc 表名

展示表结构

select database()

查询当前所用数据库

select version()

查询当前版本

\c

结束一条语句

exit

退出

show create table 表名

显示创建该表所使用的语句

show tables from 数据库名字

显示来自目标数据库中的表

2.SQL

名称

主要关键字

DML数据操纵语言

insert、update、delete

DQL数据查询语言(这个实际上可以算作DML中的)

select

DDL数据定义语言

create、drop、alter

DCL数据控制语言

grant、revoke

下面是案例要用的表

1.dept

es dsl 语句 include es sql语法_sql

2.emp

es dsl 语句 include es sql语法_数据库_02

3.salgrade

es dsl 语句 include es sql语法_mysql_03


简单的DQL语句

a.普通查询

语法格式:

select 字段名1 ,字段名2,字段名3,....from 表面; 1.任何一条sql语句以“;”结尾。

2.sql语句不区分大小写。

字段还可以进行算术运算。

select 字段1 * 12;

也可以给查询结果的列重命名

select sal *12 as yearsal from emp;

es dsl 语句 include es sql语法_sql_04

这里sal指薪水,yearsal是重新命名的名字。
如果要写中文则需要加 ‘’ 好。
select sal*12 as '薪水' from emp; 这里的as关键字可以省略。
select * from emp;查询所有语句。(实际开发中,不介意写*,效率低)

b.条件查询
语法格式:

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

执行顺序:from,where,select

查询工资为5000的员工姓名?

select ename from emp where sal = 5000;

es dsl 语句 include es sql语法_数据库_05

查询工资大于等于5000并且小于等于50000的员工姓名?

select ename from emp where sal >= 2000 and sal<=5000; 或者

select ename from emp where sal between 2000 and 5000;

es dsl 语句 include es sql语法_mysql_06

between and还可以用在字符串方面

select ename from emp where ename between ‘a’ and 'c'; 首字母在a~c的名字查询。

es dsl 语句 include es sql语法_sql_07

c.查找为空

is null null在数据库中不是一个值而是为空

select ename from emp where sal is null;

is not null则就是找不为null的元组。

or

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

es dsl 语句 include es sql语法_sql_08

and优先级大于or的优先级
in等同于or:select ename ,job from emp from where job in('SALESMAN','MANGER'); 同样也有not in;

d.模糊查询like ?

找出名字当中含有O的?

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

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

es dsl 语句 include es sql语法_mysql_09

找出名字中第二个字母是A的?

select ename from emp where ename like '_A%;

es dsl 语句 include es sql语法_es dsl 语句 include_10

找出,名字中有下划线?
select ename from emp where ename like '%\_%' 使用转义字符\

b.排序(升序、降序)
按照工资升序,找出员工名和薪资?

select 
		ename,sal
	from
		emp
	order by
		sal;

es dsl 语句 include es sql语法_字段_11

注意:默认是升序。通过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;降序
工资一样按照名字的升序排列。
select ename,sal from emp order by sal desc,ename asc当sal相等时就会比较asc字段。
select ename ,sal from emp order by 1按照第一列排序
order by是最后执行的。

e.分组函数?

count 计数

sum 求和

avg 平均值

max 最大值

min 最小值

以上五个都会自动忽略null值

记住:所有的分组函数都是对“某一组”数据进行操作。

例如:

找出工资总和:select sum (sal) from emp;

es dsl 语句 include es sql语法_es dsl 语句 include_12

分组函数还另一个名字,多行处理函数。
会自动忽略掉NULL的数据。
注意:分组函数不能直接使用在where子句中。
count(*)与count(具体的某个字段) 的区别,第一个是指总字段条数,第二个则是不为null的字段数。

f .单行处理函数

输入一行处理一行。

只要数据中有个NULL进行参于了运算,其结果一定是NULL。

ifnull()空处理函数?

ifnull(可能为null的数据,就当做什么处理);属于单行处理函数。

例:

计算每个员工的年薪?(这里的comn代表补贴奖金)

select ename ,(ifnull(comn,0)+sal)*12 as yearsal from emp;

es dsl 语句 include es sql语法_mysql_13

g.group by 和 having

group by:按照某个字段或者某些字段进行分组。
having:having是对分组之后的数据进行再次过滤。

案例:找出某个工作岗位的最高薪资。

select max(sal) from emp group by job;

es dsl 语句 include es sql语法_es dsl 语句 include_14

分组函数一般都会配合group by函数使用。任何一个分组函数都会在group by执行后执行。如果没有group by来限定,则会将整张表的数据分成一组,例如:select avg(sal) from emp;这条语句没有写group by 来进行分组筛选,但实际上有个默认的group byselect avg(sal) from emp group by ...这个默认的group by就是将整张表看做一组。

group by是在where后执行的。

分组函数则是在group后执行的。

案例:找出高于平均工资的员工。

select ename , sal from emp where (select avg(sal) from emp);

es dsl 语句 include es sql语法_mysql_15

这里用了个子查询

当一条语句有group by,select后面只能添加分组函数和参加分组的字段,如果不这样的话,得到的东西毫无意义(oracle数据库则会直接报错)

多字段分组:

案例:找出每个部门不同工作岗位的最高薪资。

select deptno,job,max(sal) from emp group by deptno,job; 案例:找出每个部门的最高薪资,并且薪资大于2900。

select max(sal) deptno from emp group by depyno having max(sal) > 2900;

但这条语句效率低,可以使用where语句进行提前过滤。

select max(sal),deptno from emp where sal > 2900 group by deptno;

es dsl 语句 include es sql语法_字段_16

在进行分组之前就将条件不满足的过滤,提高效率,但是也有不得不使用having的情况,例如:

找出每个部门的平均薪资,要求薪资大于2000的数据。

select deptno,avg(sal) from emp group deptno having avg(sal) > 2000

es dsl 语句 include es sql语法_sql_17

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

select 			5
	...
from			1
	...
where			2
	...
group by		3
	...
having			4
	...
order by		6
	...

这里的数据不能换,上面的数字代表着排序输出。