Mysql核心知识点总结1

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,分类如下:

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 分组数据,可以将表中的数据分成若干组 

猜你喜欢

转载自blog.csdn.net/dawiebazhanlang/article/details/86372159
今日推荐