Linux数据库(mysql 高级用法:连接关系,子查询,内置函数)

版权声明:一个苦逼初学者的原创小博客。 https://blog.csdn.net/SenZendao/article/details/82192946

刚刚把昨晚总结的给补充了一下,下面就要总结mysql数据库的高级用法了,真心不想整这个。。。理论知识还是比较多但是也比较好理解一点,但是真正进行操作的时候还是有点难度的,就像数学一样,要有多复杂就能有多复杂。下面先总结一下高级用法里面的一些理论知识吧,本来还想着今晚一篇就搞定,但是想了想不太行,加上明晚能总结完就不错了。因为我也是一个菜鸟初学者,自己搞起来就比较慢,然后还要截图构思啥的,就更慢了。。。不说了开始吧。。。风雨里做事,阳光下做人!

先搞个目录出来吧

1:连接查询(包括内链接,外连接,自连接)

2:子查询

3:内置函数

4:视图

5:事务

6:索引

7:账户管理

8:主从同步

9:悲观锁和乐观锁

完蛋了,列完目录不想整理了。。。

连接查询

这个时候就出现了笛卡尔积懵了吧,我自己都懵了。上张图来理解一下吧。
这里写图片描述
就是多表的数据查询,就会产生笛卡尔积,产生出很多我们不需要的数据,所以我们就要避免笛卡儿积的产生,需要加限定条件,条件最少是表的数量-1。一般是主外键。

内链接和外连接和自连接

先把图给大家上了,然后我再解释一下,然后再敲个简单的代码给大家看看。
这里写图片描述

下面给大家写了一个简单的内连接查询(两个表inner join ….on…)但是我好像犯了一个错误,inner join 后面的条件应不是where应该用on,虽然也运行出来了结果,这只能说明mysql数据库的灵活,所以还是按照规范来写吧。

这里写图片描述

外连接

这里写图片描述

最复杂的就是外连接了,需要区分主表和次表,这个关系到你的运行结果

这里写图片描述

看运行结果最后又一行为null,这就是主表的作用,保留主表的数据,次表没有对应的就为null

自连接

这里写图片描述

这个图和内链接的那个代码几乎一样,只不过没有使用内链接

这里写图片描述

这个链接有点不会整了,简单的就是这样,复杂的不好说,就这样吧。。。。

子查询

什么是子查询,就将第一查询的加过再作为一个表或者一个结果再进行查询,支持嵌套使用
这里写图片描述
这样就完成了一个子查询,将第一次查询的结果,作为一个结果下一次使用。
这只是一个简单了例子,大家要掌握这种查询方式。

内置函数

mysql里面也有很多内置函数,我们应该了解,因为以后我们使用python代码也可以满足这些需求。

字符串函数

sql里函数都是有返回值的
查看字符的ascii码值ascii(str),str是空串时返回0
select ascii(‘a’);
查看ascii码值对应的字符char(数字)
select char(97);
拼接字符串concat(str1,str2…)
select concat(12,34,’ab’);
包含字符个数length(str)
select length(‘abc’);
截取字符串
left(str,len)返回字符串str的左端len个字符
right(str,len)返回字符串str的右端len个字符
substring(str,pos,len)返回字符串str的位置pos起len个字符
select substring(‘abc123’,2,3);
去除空格
ltrim(str)返回删除了左空格的字符串str
rtrim(str)返回删除了右空格的字符串str

trim([方向 remstr from str)返回从某侧删除remstr后的字符串str,方向词包括both、leading、trailing,表示两侧、左、右

select trim(’ bar ‘);
select trim(leading ‘x’ FROM ‘xxxbarxxx’);
select trim(both ‘x’ FROM ‘xxxbarxxx’);
select trim(trailing ‘x’ FROM ‘xxxbarxxx’);
返回由n个空格字符组成的一个字符串space(n)
select space(10);
替换字符串replace(str,from_str,to_str)
select replace(‘abc123’,’123’,’def’);
大小写转换,函数如下
lower(str)
upper(str)

数学函数

求绝对值abs(n)
select abs(-32);
求m除以n的余数mod(m,n),同运算符%
select mod(10,3);
select 10%3;
地板floor(n),表示不大于n的最大整数
select floor(2.3);
天花板ceiling(n),表示不小于n的最大整数
select ceiling(2.3);
求四舍五入值round(n,d),n表示原数,d表示小数位置,默认为0
select round(1.6);
求x的y次幂pow(x,y)
select pow(2,3);
获取圆周率PI()
select PI();
随机数rand(),值为0-1.0的浮点数
select rand();
还有其它很多三角函数,使用时可以查询文档

时间函数

获取子值,语法如下
year(date)返回date的年份(范围在1000到9999)
month(date)返回date中的月份数值
day(date)返回date中的日期数值
hour(time)返回time的小时数(范围是0到23)
minute(time)返回time的分钟数(范围是0到59)
second(time)返回time的秒数(范围是0到59)
select year(‘2016-12-21’);
日期计算,使用+-运算符,数字后面的关键字为year、month、day、hour、minute、second
select ‘2016-12-21’+interval 1 day;
日期格式化date_format(date,format),format参数可用的值如下
*获取年%Y,返回4位的整数
* 获取年%y,返回2位的整数
* 获取月%m,值为1-12的整数
获取日%d,返回整数
* 获取时%H,值为0-23的整数
* 获取时%h,值为1-12的整数
* 获取分%i,值为0-59的整数
* 获取秒%s,值为0-59的整数
/日期–>字符串/
select date_format(‘2017-10-20’,’%Y年%m月%d日’)
/字符串–>日期/
select str_to_date(‘2017年10月20日’,’%Y年%m月%d日’)
当前日期current_date()
select current_date();
当前时间current_time()
select current_time();
当前日期时间now()
select now();

今天就到这里吧,要不这篇就写的太长了,看起来也难受,我看了看目录,争取两篇干掉,实在不行就三篇吧,虽然代码什么的都比较简单,但是知识点应该是比较全面的。

我要放上一张我最喜欢的动漫人物的照片,最喜欢的动漫没有之一!樱木花道!!

这里写图片描述

猜你喜欢

转载自blog.csdn.net/SenZendao/article/details/82192946
今日推荐