mysql常用的命令
show databases;展示当前数据库管理系统中,所有的数据库
use 数据库名称:具体使用数据库
show tables;:查看当前库的表
show tables from 数据库名:显示其他数据库中的表
创建表:
create table 表名称(
列名 列类型,
列名 列类型,
...
)
查看表结构:
desc 表名称;
查看当前数据库的版本
方法一**:select version()**;在 mysql 自带的客户端下输入即可显示版本
方法二:在dos 命令行模式下输入*:mysql --version*也是可以的.也可以简写成 **mysql --V**
mysql的语法规范
1,SQL语句不用区分大小写,但是建议我们关键字要大写,表名,列名,小写
2,每条命令最好是用**分号**结尾
3,每条命令可以根据需要进行缩进或者是换行.
4,注释
#文字,单行注释
-- 文字,单行注释
/* */多行注释
mysql语言使用最多的就是查询语句,好不夸张的说,80%的SQL语句都是和查询有关.所以它理所应当的称为了学习的重难点.
注:在SQLyog中,可以使用F12来格式化SQL语句.,在mysql中,没有字符串和字符的区分,所有的字符串通称为字符.
基础查询的语法:
select 查询列表 from 表明
(其中查询列表可以是,表中的字段,常量值,表达式,函数)
查询出的结果是一张虚拟的表格
着重号可以用来区分和关键字重名的字段
例如:
select 100;
select 100%98;
select name from xxx;
select version();
起别名
优点:
1,方便理解
2.可以用来区分重名的字段(多适用于多表的连接查询时,字段可能会有重复的情况)
书写方法
1.使用AS关键字
select last_name AS 姓,first_name AS 名;
2,省略as关键字直接写.
select last_name 姓,first_name 名;
3,特殊情况
如果起的别名中含有关键字或者是关键字符,例如out,#,空格等,那么我们的别名就是非法的,需要被单引号,或者是双引号括起来才能正常使用,推荐时用的是双引号.
去重
去重的关键字就是DISTINCT可以缩写为DESC
当我们想去除查询结果中重复的数据时,我们可以使用去重
具体的使用就是,在查询列表之前加上关键字distinct
select distinct department_id from Employee;查询员工表中涉及到的部门列表
+号的作用
首先我们回忆一下java中放入+号的作用,
1.运算符,当两侧的操作数都是数值型
2.连接符,,只要有一个操作数是字符串,起的就是连接符的作用.
然而在mysql中,+号的作用只有一个,那就是运算符.
1.如果操作数都是数值型,则执行的是加法运算.
2.如果有一方的操作数是字符?它会试图把字符解析成数值,如果解析成功,那么继续执行加法,如果解析是吧,则爸2字符解析成0,
(1) select '10'+*90;结果为100
(2) select '10a'+90;结果为90;
3.只要其中一方为null,那么最后的运算结果肯定为null;
使用concat实现连接
既然+号,不能达到连接的目的,那么我们如何进行连接呢?我们可以使用concat函数进行连接.如果拼接的字段中含有null值,那么查询得到的所有的结果都是null.
select concat("a","b","c");结果就是abc;
其中 ifnull,这个函数是可以用来判断数据是否为空.用法如下
select ifnull(name,0) from employees;作用就是,判断那么是否为空,如果为空,赋值为0
条件查询
基本语法如下:
select 查询列表 from 表名 where 筛选条件
其中的筛选条件类似于java中if判断,结果为true或者是false,分类如下:
扫描二维码关注公众号,回复:
6040887 查看本文章
1.按条件表达式筛选:
条件运算符:> < >= <= != <>
2.按照逻辑表达式筛选
作用:主要是用来连接多个条件的
逻辑运算符: && || !推荐使用的是and ,or,not.
3.模糊查询
使用到的关键字包括有,**like ,between and , in , is null, is not null**,例如:
1.like一般和通配符搭配使用,%,代表任意多个字符,包含0个字符.
2.between and 的优点就是:
1.可以使SQL语句更加的简介
2.包含临界值.
3.两个临界值的位置不能颠倒
3.in关键字,判断某一个字段的值是否属于in列表中的某一项. 可以提高语句的简洁度.要求就是,**in列表中的值类型必须一致或者兼容,in列表中的值,不支持通配符**
4.注意:null值的判断使用的是is,不能使用=,<>,但是我们也可以使用安全等于进行空值的判断.写法如下,**<=>**,它也可以进行普通的值判断.
_ ,表示的是任意单个字符,任意字符只不过数量是一个.
select * from employee where name like '%a%';查询所有名字中含有a字符的员工信息,**其中%是通配符,可以代表任意字符**,
注意,如果模糊查询查询的查询条件中包含通配符,例如我们查询名字中第二个字符为_的员工信息,
select * from employee where name like '_\_%';可以通过转义符来实现.
is null 和<=>的比较
is null :仅仅可以进行的就是null值的判断,但是可读性比较高,推荐使用
<=>:安全等于呢,不仅可以进行null的判断,也可以进行的是普通值的判断,但是可读性比较低
经典面试题
问:select * from employee 和 select * from employee where commision like ‘%%’ and last_name like ‘%%’;
分析如下:**结果是不一样的**,如果不存在空值的情况下,二者查询出的结果是一致的,但是如果存在空值的情况下,那么第二条查询出的就是空值.
排序查询
语法规则如下
select 查询列表 from employee where 筛选条件 order by 排序列表 asc/desc
1.分析如下:其中筛选条件可加可不加,order by ,表示的就是按照什么条件进行查询,**asc:表示的是升序,desc:表示的是降序**,如果这两个关键字都没写,**默认的情况就是升序**,其中,排序列表可以是表中的字段,也可以是一个很长的表达式,还可以是函数,同时它还支持别名,
2.多个排序条件之间需要使用逗号进行分割.
3.order by 一般是放在查询语句的最后面,但是limit语句除外
常见的函数
概念如下:类似于java中的方法,将一组逻辑语句封装到方法体中,对外只暴露出方法名.优点如下:
1.隐藏了具体的实现细节
2.提高了代码的复用性.
调用方法
select 函数名(实参列表) from 表名(如果使用了表中的字段的情况)
分类:
1.单行函数:
例如:concat,legth,isnull等.
2.分组函数:
1.功能介绍:主要是用来做统计处理的.所以也称为统计函数.聚合函数.
单行函数的分类
1.字符函数
1.legth函数:主要是用来获取参数值的字节数(在utf-8编码中,汉字是占用了2个字节,在GBK3212中,汉字是占用了2个字节)
2.concat 主要是用来进行字符的拼接.
3.upper ,lower.作用:对参数进行大小写抓换,upper是大写,lower是小写.例如:把姓转化为大写,名转化为小写.select concat(upper(fierst_name),lower(last_name)) from employee;
4.substr 主要是用来截取字符的,**注意,mysql中的下标是从1开始的.**,用法如下:
substr(str,数字);表示的是从下标等于数字的地方开始,一直到末尾进行截取.
substr(str,数字1,数字2);表示的是下标从数字1处,开始截取,总共截取的**字符**长度是数字2.
5.instr(str1,str2).''
作用::判断str2的首个字符在str1中的下标)
6.trim.
作用:去除str首尾的空格.用法如下:
trim(str); 去除str首尾的空格
trim(str1 from str2);;去除str2中首尾的str1;
7.lpad.
select lpad(str1,length,str2);使用str2在str1的左侧进行填充,直到长度为length.如果str1的长度大于了length,那么会从str1的右侧进行截取直到str1的长度等于length,(从右侧截取,保留左侧.)
8.rpad.
select rpad(str1,length,str2);使用str2在str1的右侧进行填充,直到长度为length.如果str1的长度大于了length,那么会从str1的左侧进行截取直到str1的长度等于length,(从左侧截取,保留右侧.)
9.replace
select replace(str1,str2,str3);使用str3来对str1中所有的str2进行替换
2.数学函数
1,round 四舍五入(如果是负数,就先转换成绝对值之后进行四舍五入,然后在添上负号)
select round(数字);默认是四舍五入取整.
select round(数字1,整数);表示的是四舍五入取小数点后整数位.
2.ceil 向上取整.返回大于等于参数的最小整数
select ceil(1.42);运行结果是2.
select ceil(1.92);运行结果也是2
select ceil(1.00);运行结果就是1
3.floor 向下取整.
4.turncate 截断.
select turncate(1.252,1);从小数点后一位进行截取
5.mod 取余
select mod(10,3); 求10对3的余数.如果涉及到负数,结果和被除数的正负保持一致.具体的思路就是,a-a/b*b,适用于所有的情况.
3.日期函数
1.now 返回系统当前的日期和时间.
2.curdate 返回系统的当前日期
3.curtime 返回系统的当前时间
4.其他函数
其他函数一般都是系统函数,使用比较少,如下所示:
1.select version();查询出当前数据库的版本
2.select user(); 查看当前的用户.
5.流程控制函数
if函数,用法如下:
select if(条件表达式,结果1,结果2);对表达式进行判断,如果成立返回结果一,不成立返回结果二.
case 分支,语法规则如下:
case 要判断的字段和表达式
when 常量1 then 要显示的值1或者是语句1;
when 常量2 then 要显示的值1或者是语句2;
....
else 要显示的值n 或者是语句n;
end
多行函数
分类:sum 求和,avg平均值,max最大值,min最小值,count 统计个数.
特点:
1.sum,avg一般用来处理数值类型,
max,min,count是可以用来处理任何类型的.
2.sum,avg等分组函数都是是忽略null值.
3.可以和distinct搭配进行去重运算.
4.count函数的详细介绍;
我们经常会使用select count(*) from 表名;来统计一个表的行数,这个具体的实现过程是,配当一个表中有多列时,如果在这一行中,有一个字段不为null,那么就进行加一,所以最后得到的就是总记录数.
也可以使用count(1)来完成行数的统计,其实它的原理相当于在表中多添加了一列,但是这一列的值全都是1,然后统计出1的个数,也就是行数,其实这个值是不是1都行,但是为了书写方便,大家都写成了1.
效率(当有多个方式可以完成同一种需求,就可以考虑效率的问题)
在mysql.5.5版本之前,使用的存储引擎一直都是 **myisam存储引擎,在该存储引擎下,count(*)的效率高**,因为该存储引擎内部有一个计数器,可以直接返回总数.
但是5.5之后都采用了**innodb存储引擎**,在该存储引擎下,count(1)和count(*)的效率是差不多的,但是比count(字段名)要高.*/-因为它要对你写的字段进行判断,判断该字段是否为空.
分组查询
group by 分组数据,可以将表中的数据分成若干组