MySQL高级SQL语句
SQL语句:
1、select------显示表格中一个或者数个栏位所有资料

2、distinct----不显示重复的资料

3、where----有条件查询

4、and or -------且 或

5、in-----显示已知的值的资料

6、between----显示两个值范围内的资料

通配符:
通常跟like一起使用
- %:百分号表示零个、一个或者多个字符
- _:下划线表示单个字符
7、like----匹配一个模式来找出我们要的资料


8、order by ----按关键字排序


函数:
数学函数:
| abs(x) | 返回x的绝对值 |
| rand() | 返回0到1的随机数 |
| mod(x,y) | 返回x除以y以后的余数 |
| power(x,y) | 返回x的y次方 |
| round(x) | 返回离x最近的整数 |
| round(x,y) | 保留x的y位小数四舍五入后的值 |
|
sqrt(x) |
返回x的平方根 |
| truncate(x,y) | 返回数字x截断为y为的小数的值 |
| ceil(x) | 返回大于或等于x的最小整数 |
| floor(x) | 返回小于或者等于x的最大整数 |
| greatest(x1,x2...) | 返回集合中最大的值 |
| least(x1,x2...) | 返回集合中最小的值 |
聚合函数:
| avg() | 返回指定列的平均值 |
| count() | 返回指定列中非NULL值的个数 |
| min() | 返回指定列的最小值 |
| max() | 返回指定列的最大值 |
| sum() | 返回指定列的所有值之和 |



字符串函数:
| trim() | 返回去除指定格式的值 |
| concat(x,y) | 将提供的参数x和y拼接成一个字符串 |
| substr(x,y) |
获取从字符串x中的第y个位置开始的字符串,跟substring()函数作用相同 |
| substr(x,y,z) | 获取从字符串x中的第y个位置开始长度为z的字符串 |
| length(x) | 返回字符串x的长度 |
| replace(x,y,z) | 将字符串z替代字符串x中的字符串y |
| upper(x) | 将字符串x的所有字母变成大写字母 |
| lower(x) | 将字符串x的所有字母变成小写字母 |
| left(x,y) | 返回字符串x的前y个字符串 |
| right(x,y) | 返回字符串x的后y个字符 |
| repeat(x,y) | 将字符串x重复y次 |
| space(x) | 返回x和空格 |
| strcmp(x,y) | 比较x和y,返回的值可以为-1,0,1 |
| reverse(x) | 将字符串x反转 |



9、group by-----对group by后面的栏位的查询结果进行汇总分组,通常是结合聚合函数一起使用
group by有一个原则,就是select后面的所有列中,没有使用聚合函数的列,必须出现在
group by后面

10、having-----用来由group by语句返回的记录集,通常与group by语句联合使用
having语句的存在弥补了where关键字不能与聚合函数联合使用的不足,如果被select的只有函数栏,那就不需要group by子句

11、别名-----栏位别名 表格别名

12、子查询-----连接表格,在where子句或having子句中插入另一个SQL语句

13、exists----用来测试内查询有没有产生任何结果,类似布尔值是否为真
如果有的话,系统就会执行外查询中的SQL语句。若是没有的话,那整个SQL语句就不会产生任何结果

连接查询:
- inner join(内连接):只返回两个表中联结字段相等的行
- left join(左连接):返回包括左表中的所有记录和右表中联结字段相等的记录
- right join(右连接):返回包括右表中的所有记录和左表中联结字段相等的记录



14、create view----视图,可以被当作是虚拟表或存储查询
视图跟表格不同的是,表格中有实际存储资料,而视图是建立在表格之上的一个架构,它本身并不实际储存资料
临时表在用户退出或同数据库的连接断开后就自动消失了,而视图不会消失
视图不含有数据只存储它的定义,它的用途一般可以简化复杂的查询。比如你要对几个表进行连接查询,而且还要进行统计排序等操作,写SQL语句会很麻烦,用视图将几个表联结起来,然后对这个视图进行查询操作,就和对一个表查询一样
视图表本身并不实际存储数据,只是保存一个sekect语句执行后的表结构


15、union-----联集,将两个SQL语句的结构合并起来,两个SQL语句所产生的栏位需要是同样的资料种类
union:生成的结果的资料值将没有重复,且按照字段的顺序进行排序
union all:将生成的结果的资料值都列出来,无论有无重复

16、交集值----取两个SQL语句结果的交集


###两表中的一个表没有指定的行,而另一个表的这个行有重复不适用,要求两个表确实有交集的时候用



17、无交集值----显示第一个SQL语句的结果,且与第二个SQL语句没有交集的结果,且没有重复



18、case-----是SQL用来做为if-then-else之类逻辑的关键字

19、算排名----表格自我连结(Self Join),然后将结果依序列出,算出一行之前(包含哪一行本身)有多少行数


20、算中位数----

21、算累积总计----

22、算总和百分比

空值(NULL)和无值(‘’)的区别---
- 无值的长度为0,不占用空间;而NULL值的长度是NULL,是占用空间的
- IS NULL 或者 IS NOT NULL ,是用来判断字段是不是为NULL或者不是NULL,不能查出是不是无值的
- 无值的判断使用=‘’或者<>''来处理。<>代表不等于
- 在通过count()指定字段统计有多少行数时,如果遇到NULL值会自动忽略掉,遇到无值会加入到记录中进行计算
正则表达式:
| 匹配模式 | 描述 |
| ^ | 匹配文本中的开始字符 |
| $ | 匹配文本的结束字符 |
| . | 匹配任何的单个字符 |
| * | 匹配零个或多个在它前面的字符 |
| + | 匹配前面的字符1次或多多次 |
| 字符串 | 匹配包含指定的字符串 |
| p1 | p2 |
匹配p1或p2 |
| [...] | 匹配字符集合中的任意一个字符 |
| [^...] | 匹配不在括号中的任何字符 |
| {n} | 匹配前面的字符串n次 |
| {n,m} |
匹配前面的字符串至少n次,至多m次 |

存储过程
存储过程是一组为了完成特定功能的SQL语句集合。
存储过程在使用过程中是将常用或者复杂的工作预先使用SQL语句写好并用一个指定的名称存储起来,这个过程经编译和优化后存储在数据库服务器中。当需要使用该存储过程时,只需要调用它即可。存储过程在执行上比传统SQL速度更快、执行效率更高。
存储过程的优点:
- 执行一次后,会将生成的二进制代码驻留缓冲区,提高执行效率
- SQL语句加上控制语句的集合,灵活性高
- 在服务器端存储,客户端调用时,降低网络负载
- 可多次重复被调用,可随时修改,不影响客户端调用
- 可完成所有的数据库操作,也可以控制数据库的信息访问权限
创建存储过程

##调用存储过程

##查看存储过程


##存储过程的参数
- IN 输入参数:表示调用者向过程传入值(传入值可以是字面量或变量)
- OUT 输出参数:表示过程向调用者传出值(可以返回多个值)(传出值只能是变量)
- INOUT 输入输出参数:既表示调用者向过程传入值,又表示过程向调用者传出值(值只能是变量)

##删除存储过程
存储过程内容的修改方法是通过删除原有存储过程,之后再以相同的名称创建新的存储过程


##存储过程的控制语句
(1)条件语句 if-then-else ...end if


(2)循环语句while....end while

浙公网安备 33010602011771号