MySQL数据库高阶操作

这篇博客我本来准备只讲一个多表连接,但是吧。。。。。我整理了以后发现光约束就有很多,所以这篇主讲约束,也讲连接,按照我的习惯,我的博客不会写的很长,但是这篇是个例外,所以请耐心看完

约束篇

  1. 非空约束 not null
  2. 主键约束 primary key
  3. 外键约束 foreign key
  4. 检查约束 CHECK
  5. 唯一约束 unique key
  6. 默认值约束 default
  7. 自增加约束 AUTO_INCREMENT

1.约束的好处
1.通过创建唯一缩影,可以保证数据库的每一行数据的唯一性
2.可以大大加快数据的检索速度,这也是创建索引的最主要的原因
3.可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义
4.使用分组和排序子句进行数据检索时,同样可以显著减少查询中的分组和排序的时间
2.约束的坏处
1.索引占用了物理空间
2.索引也要动态维护,降低了数据的维护速度
3.约束的分类
1.非空约束
2.主键约束
3.外键约束
4.默认值约束
5.检查约束(check约束)
6.自增加约束
4.非空约束
什么是非空约束(not null)
听名字就知道了,被非空约束的列,在插入值时必须非空,就是必须要插入值,不能插入空值,在MySQL中,违反了非空约束,不会报错,只会有警告。

5.主键约束
主键(PRIMARY KEY)是用于约束表中的一行,作为这一行的标识符,在一张表中通过主键就能准确定位到一行,因此主键十分重要。主键要求这一行的数据不能有重复且不能为空。

还有一种特殊的主键——复合主键。主键不仅可以是表中的一列,也可以由表中的两列或多列来共同标识
复合主键就是用2个或2个以上的字段组成主键。用这个主键包含的字段作为主键,这个组合在数据表中是唯一,且加了主键索引
6.外键约束
外键(FOREIGN KEY)既能确保数据完整性,也能表现表之间的关系。
一个表可以有多个外键,每个外键必须参考另一个表的主键,被外键约束的列,取值必须在它参考的列中有对应值。
在INSERT时,如果被外键约束的值没有在参考列中有对应,比如以下命令,参考列(department表的dpt_name)中没有dpt3,则INSERT失败
7.Check约束(检查约束)
用于指定需要检查的限定条件
在更新表数据的时候,系统会检查更新后的数据行是否满足 CHECK 约束中的限定条件
MySQL 可以使用简单的表达式来实现 CHECK 约束,也允许使用复杂的表达式作为限定条件,例如在限定条件中加入子查询。
若将 CHECK 约束子句置于表中某个列的定义之后,则这种约束也称为基于列的 CHECK 约束。
若将 CHECK 约束子句置于所有列的定义以及主键约束和外键定义之后,则这种约束也称为基于表的 CHECK 约束。该约束可以同时对表中多个列设置限定条件。
简而言之,就是约束插入数据是否满足条件,就像你输入省份证时,多输入一个数子,就告诉你输入错误这种
8.唯一约束(unique)
unique约束的字段,具有唯一性,不可重复,但可以为null,一个表可以有多个唯一约束,一个约束可以只有一列,当然也可以有多列。
推个一个很实用的链接
w3c讲这一节链接:http://www.w3school.com.cn/sql/sql_unique.asp
9.默认值约束
“默认值(Default)”的完整称呼是“默认值约束(Default Constraint)”。MySQL 默认值约束用来指定某列的默认值。
例如女同学较多,性别就可以默认为“女”,如果插入一条新的记录时没有为这个字段赋值,那么系统会自动为这个字段赋值为“女”。
10.自增加约束AUTO_INCREMENT
1、AUTO_INCREMENT可以约束任何一个字段,该字段不一定是PRIMARY KEY字段,也就是说自增的字段并不等于主键字段。
2、但是PRIMARY_KEY约束的主键字段,一定是自增字段,即PRIMARY_KEY 要与AUTO_INCREMENT一起作用于同一个字段。
3、当插入第一条记录时,自增字段没有给定一个具体值,可以写成DEFAULT/NULL,那么以后插入字段的时候,该自增字段就是从1开始,没插入一条记录,该自增字段的值增加1。当插入第一条记录时,给自增字段一个具体值,那么以后插入的记录在此自增字段上的值,就在第一条记录该自增字段的值的基础上每次增加1。
4、也可以在插入记录的时候,不指定自增字段,而是指定其余字段进行插入记录的操作。
简而言之,自增加就是自动增加的意思,设置了自增加约束,系统会默认多一个唯一性约束,应为不可能说自动增加了两个相同的东西吧。。。。。
好了,至此我们的约束篇玩劫了,接下来我们就开始我们的正文,多表联查

多表连接篇

  1. 交叉连接 cross join
  2. 内连接 INNER JOIN
  3. 左连接 left join on / left outer join on
  4. 右连接 right join on / right outer join on
  5. 全连接 full join

1.交叉连接
请允许我一开始就把这个没有用的连接方式写上去,因为实在是没有用了
交叉连接,使用笛卡尔积,基本用不到,但是有这种连接方式,我就放上来了,仅供参考,花里胡哨
交叉连接
交叉连接返回的结果,是被连接的两个表中所有数据行的笛卡尔积,也就是返回第一个表中符合查询条件的数据行数,乘以第二个表中符合查询条件的数据行数
笛卡尔积(这个是我在网上找到的比较简单易懂的图片了)MySQL数据库高阶操作_第1张图片

接下来我直接上来实验,只是给你们看看,应为公司真的用不到,可能我不是专门研究这方面的
1.我们先查询一下我们的两张表
MySQL数据库高阶操作_第2张图片
2.然后使用交叉连接连接两张表,上图看效果

MySQL数据库高阶操作_第3张图片
*
*
*
*
2.内连接
内连接: 只连接匹配的行
MySQL INNER JOIN子句将一个表中的行与其他表中的行进行匹配,并允许从两个表中查询包含列的行记录。
INNER JOIN子句是SELECT语句的可选部分,它出现在FROM子句之后。
在使用INNER JOIN子句之前,必须指定以下条件:
1.首先,在FROM子句中指定主表。
2.其次,表中要连接的主表应该出现在INNER JOIN子句中。理论上说,可以连接多个其他表。 但是,为了获得更好的性能,应该限制要连接的表的数量(最好不要超过三个表)。
3.第三,连接条件或连接谓词。连接条件出现在INNER JOIN子句的ON关键字之后。连接条件是将主表中的行与其他表中的行进行匹配的规则。
接下来是实验部分
首先先查看我们两张表
MySQL数据库高阶操作_第4张图片
然后使用查询语句进行查询
select 需要查询的内容 form 表1 inner join 表2 on 连接的条件
MySQL数据库高阶操作_第5张图片
3.左连接
左连接和左外连接其实是一个东西,但是上次看博客看到了有一种连接好像叫左内连接,找其他博主的博客找了好久找不到这个,讲道理也不知道真的有没有这个,可能是我看错了,如果谁会左内连接技术,请在评论区打出来,谢谢
left join 是left outer join的简写,它的全称是左外连接,是外连接中的一种。 左(外)连接,左表(a_table)的记录将会全部表示出来,而右表(b_table)只会显示符合搜索条件的记录。右表记录不足的地方均为NULL。
好,接下来开始实验部分
首先,还是先看我们创建的数据库以及两张表中的数据
MySQL数据库高阶操作_第6张图片
好,接下来就是实验部分了,以左表为主表,查询右表,如果右表中没有对应的数据,就会出现null其实是有的,但是检索不到。
MySQL数据库高阶操作_第7张图片

3.右连接
right join是right outer join的简写,它的全称是右外连接,是外连接中的一种。与左(外)连接相反,右(外)连接,左表(a_table)只会显示符合搜索条件的记录,而右表(b_table)的记录将会全部表示出来。左表记录不足的地方均为NULL。
和上个左查询基本一样。。。。多的不说了上图
首先,还是先开始查询我们表中的数据
MySQL数据库高阶操作_第8张图片
右连接,就是等于以右表为主表进行查询筛选
MySQL数据库高阶操作_第9张图片
4.全连接(和交叉连接一样基本用不到吧
。。。。反正我从来没有用到过这个)

Oracle数据库支持full join,mysql是不支持full join的,但仍然可以同过左外连接+ union+右外连接实现

SELECT * FROM t1
LEFT JOIN t2 ON t1.id = t2.id
UNION
SELECT * FROM t1
RIGHT JOIN t2 ON t1.id = t2.id
这个我就不演示了,要是做java的兄弟使用oracle数据库才可能要使用到
有一个博主发的连接https://www.csdn.net/gather_21/MtTaMgxsMDQxMC1ibG9n.html
分享给你们

总结一下,使用的连接有内外连接,左右连接,其他的不适用,而且还有一些奇怪的连接方式,就没有必要放上去了,比如自连接,就没有学习的必要了,应为,基本用不到的,相信我,好接下去我们直接开始讲函数篇

函数篇

首先道个歉啊。。我身体不允许我把所有函数写下来。。。。。。。。。。太累了,嘿嘿嘿,我就归纳几个常用的了,都是很有用的函数
1.绝对值函数abs
还是先查看一下表MySQL数据库高阶操作_第10张图片

然后开始我们的绝对值函数abs
MySQL数据库高阶操作_第11张图片

2.平均值函数avg
先看表
MySQL数据库高阶操作_第12张图片

然后开始我们函数avg查看平均值
MySQL数据库高阶操作_第13张图片
3.随机数函数rand
rand():返回0到1之间的随机数
MySQL数据库高阶操作_第14张图片
4.取余函数mod
mod(x,y):返回x除以y以后的余数
MySQL数据库高阶操作_第15张图片
5.次方函数
power(x,y): 返回x的y次方
MySQL数据库高阶操作_第16张图片
6.四舍五入函数round
round(x): 返回离x最近的整数
round(x,y):保留x的y位小数四舍五入后的值
MySQL数据库高阶操作_第17张图片
MySQL数据库高阶操作_第18张图片

7.求根函数sqrt
sqrt(x): 返回x的平方根
MySQL数据库高阶操作_第19张图片
8.截取函数truncate
truncate(x,y):返回数字x截断为y为小数的值
MySQL数据库高阶操作_第20张图片
9.向上取整函数ceil
ceil(x):返回大于或等于x的最小整数
MySQL数据库高阶操作_第21张图片

10.向下取整函数floor
floor(x):返回小于或等于x的最大整数
MySQL数据库高阶操作_第22张图片
11.返回参数列表最大值函数greatest
greatest(x1,x2…):返回集合中最大的值
MySQL数据库高阶操作_第23张图片
12.返回参数列表最小值函数least
least(x1,x2…):返回集合中最小的值
MySQL数据库高阶操作_第24张图片
13.统计函数count
count() :返回指定列中非NULL值的个数
MySQL数据库高阶操作_第25张图片
14.查询最小值函数min
min():返回指定列的最小值
MySQL数据库高阶操作_第26张图片
15.查询最大值函数max
max():返回指定列的最大值
MySQL数据库高阶操作_第27张图片
16.求和函数sum
sum():返回指定列的所有值之和
MySQL数据库高阶操作_第28张图片
17.查询字符串长度函数length
length(x):返回字符串x的长度
这里有个需要注意的点,空格也算长度的。
MySQL数据库高阶操作_第29张图片

18.去除两端空格函数trim
trim():返回去除指定格式的值
这里需要注意,只能去除两端的空格,中间的不能去除,这个在查询的时候用的也多的
MySQL数据库高阶操作_第30张图片
19.字符串拼接函数concat
concat(x,y):将提供的参数x和y拼接成一个字符串
MySQL数据库高阶操作_第31张图片
20.字符大写函数upper
upper(x):将字符串x的所有字母变成大写字母
MySQL数据库高阶操作_第32张图片
21.字符小写函数lower
lower(x):将字符串x的所有字母变成小写字母
MySQL数据库高阶操作_第33张图片

22.返回左边字符函数left
left(x,y):返回字符串x的前y个字符
MySQL数据库高阶操作_第34张图片
23.返回右边字符函数right
right(x,y):返回字符串x的后y个字符
MySQL数据库高阶操作_第35张图片
24.重复复制函数repeat
repeat(x,y):将字符串x重复y次
MySQL数据库高阶操作_第36张图片
25.空格拼接函数space
space(x):返回x个空格,这个不像上面的能单独使用,这个需要配合上面的concat函数一起使用第一个单引号里面写需要添加的字符1,第二个写的space函数,第二个单引号内写的是需要添加的字符2.然后进项concat拼接。
MySQL数据库高阶操作_第37张图片
26.替换函数replace
replace(x,y,z):将字符串z替代字符串x中的字符串y
MySQL数据库高阶操作_第38张图片
27.比对大小函数strcmp
strcmp(x,y):比较x和y,返回的值可以为-1 <,0 =,1 >
注解:如果小于就返回-1,如果等于就返回0,如果大于就返回1,但是如果有多个数字指挥比对第一个,看第二张我偷来的图,嘿嘿嘿。
MySQL数据库高阶操作_第39张图片
MySQL数据库高阶操作_第40张图片
28.字符串截取函数substring
substring(x,y,z):获取从字符串x中的第y个位置开始长度为z的字符串
格式:substring(完整字符串,起始位置,长度); ##起始位置从1开始
注解:第一个数字代表从第几个开始截取,第二个数字代表了需要截取的长度
MySQL数据库高阶操作_第41张图片
29.字符串反转函数reverse
reverse(x):将字符串x反转,这里可以和其他函数配合着使用,比如upper

MySQL数据库高阶操作_第42张图片
30.日期函数
now():返回当前时间的日期和时间
MySQL数据库高阶操作_第43张图片
month(x):返回日期x中的月份值MySQL数据库高阶操作_第44张图片
hour(x):返回x中的小时值
MySQL数据库高阶操作_第45张图片
minute(x):返回x中的分钟值
MySQL数据库高阶操作_第46张图片
second(x):返回x中的秒钟值
MySQL数据库高阶操作_第47张图片
curdate():返回当前时间的年月日 没有now显示的详细
MySQL数据库高阶操作_第48张图片
curtime():返回当前时间的时分秒
MySQL数据库高阶操作_第49张图片
dayofweek(x):返回x是星期几,1星期日,2星期一,3星期二…
MySQL数据库高阶操作_第50张图片
dayofmonth(x):计算日期x是本月的第几天
MySQL数据库高阶操作_第51张图片
dayofyear(x):计算日期x是本年的第几天
MySQL数据库高阶操作_第52张图片

好了,到此结束今天的干货,希望各位能看一眼点个赞啥的,谢谢啦

你可能感兴趣的:(数据库,mysql)