每天背mysql语句及知识点

学习之前,我们先建立一张表,表名叫student_info,如下图所示:

 

1.基本语句

1.use XXX;

2.show databases;

3.show tables;

4.show columns from xxx;

5.检索并显示某些列(select xx from xx);

6.检索某些列,只显示该列不同的值(distinct)    注:distinct必须在每个列前面都加一个,否则出错;

7.限制只输出列的前几行(select xx from xx limit 5);限制只输出列的从某一列开始的前几行(select xx from xx limit 5,5);   注:他的执行逻辑是:首先执行select xx from xx,然后找出前5行

8.采用某些列排序(select name from mytable order by name desc , id),desc表示按降序排列  注:mysql所有关键字只对其修饰的列生效

 

2.条件语句

学习条件语句之前,首先了解,条件语句是遍历所有行,找出这些行中的某一列的元素符合条件的,然后全部列出来

9.条件语句基本用法:select name from student_info where id=1;

10.条件语句字符变量用法:select name from student_info where name=‘ Sam ’;               注:mysql默认不区分大小写

11.空值:mysql中空值位null,与0不相同,查询方法:select name from student_info where name=null;   注:null与不匹配完全是两种东西!如果查询某个字段的取反,是查不到null的,只有专门查null才能查到;

12.and和or操作符:select name from student_info where name=‘ Sam ’ and id=1;     注:多个条件需要多个and。同时and操作符比or操作符优先级高;

13.in关键字:select name from student_info where id=(1,2);      注:in关键字和or的效果很类似,但是in关键字查询速度略优于or,同时in关键字在复杂查询时更简洁

 

3.通配符的使用

记住,通配符只是给匹配字符串用的,使用通配符会降低查询性能(如果有可以替代的语句,最好进行替代),null不能匹配任何东西

14.like关键字:like表示在某元素中,包含了like需要搜索的内容,在任何地方都可以:select name from student_info where name like 'm';  可以找出daming和amy;

15.通配符%:%表示任意字符出现任意次数select name from student_info where name like '%m'; 相当于找以m结尾的所有,即使m前面没有任何字符也可以;

16.通配符_:_表示任意字符出现一次;

 

4.正则表达式的使用

首先,正则表达式不区分大小写;其次正则表达式和通配符看起来很相似,但是REGEXP 关键字和LIke关键字区别在于:LIke关键字是全字符匹配,REGEXP是在文本中匹配,例如:asdfgh1000,如果用like "fgh"则什么也找达不到,但是如果用REGEXP “fgh”则可以找到。

17.select name from student_info where name REGEXP ‘ .m ’ ;    注:.在正则表达式里表示任意一个字符,因此这条语句,找出了所有带m的名字。包括:sam,amy,daming;

18.select name from student_info where name REGEXP ‘ m|n ’ ; "|"表示或者;

19.select name from student_info where name REGEXP ‘ m[yi] ’ ; "[]"表示从这一组字符中匹配一个(单个字符匹配),他是[y|i]的简写;该例子中返回my对应amy,mi对应daming;

20.select name from student_info where name REGEXP ‘ m[^y] ’ ; "^"表示取反,该例子中返回mi对应daming;

21.select name from student_info where name REGEXP ‘ m[i-y] ’ ;   "-"表示匹配范围,可以写成[ijklm....y],但是很麻烦,因此有了范围匹配;

22.select name from student_info where name REGEXP ‘ \\.’ ; 其中\\表示转义

23.讲几个正则表达式的重复元字符的用法:

为了匹配多个重复字符,可使用上图正则表达式,下面举几个例子:select name from student_info where name REGEXP  ‘ y?’ ;这个正则表达表示匹配y这个字符出现1次或0次的字符串,也可以写成'y{0,1}'

select name from student_info where name REGEXP  ‘ [a-z]{4}’ ;这个正则表达式表示a-z之间的任何一个字符出现四次,等价于'[a-z][a-z][a-z][a-z]'    ;

24.由于正则表达式可以出现在字符串任何地方,因此需要定位符正则表达式:

如果想找到以数字开头的字符串,如果写为'[0-9]'是不行的,因为会匹配在任意位置,需要开头定位符'^[0-9]';

如果你想练习或检验你写的正则表达式的正确性,可以使用如下语句:select 'hello'  REGEXP ‘ [0-9]’;很明显返回0,因为找不到,如果你写的对,则返回1;

 

5.字段的使用

字段和数据库中的列,相同又不相同,字段是列,但是不是数据库中的原生列,而是自己自定义的列,包括以下几种:

25.select concat( 'name is' ,name  ) from student_info where name='daming';   注:concat后面跟一个括号,表示参数;括号里的多个值之间,采用,进行分割;

26.使用别名:select concat( 'name is' ,name  ) AS strname   from student_info where name='daming';   使用别名的意义在于,如果不适用别名,显示出来的列的标签为:concat( 'name is' ,name  ) ,使用了之后,列名字为:strname;

27.用于计算:select chinese+math  AS total   from student_info where name='daming';   

28.检测你的计算字段对不对的方法:select 2*3  ;则返回6;

 

6.聚集函数与分组

函数总是把所有的数据根据函数内容处理之后,作为一个新的字段进行返回;但是返回的值不一致,例如upper()函数,会返回所有的列的大写作为一个新的字段,但是聚集函数则不同,聚集函数返回值仅为1行,因为他把所有的返回行进行了一次聚合;

同时为了聚合时分类,引入了分组,注意:分组只在聚合时有效!

29.select avg(math)  as  avg_math  from student_info;   返回值仅为一行,为所有行的math成绩的平均数; 

30.  函数的计算顺序低于where语句:select avg(math)  as  avg_math  from student_info where id=(1,2,3);  这条语句会先执行where之后的内容,得到id=1,2,3的行,然后再计算平均值;

31. 聚集函数是对所有的列进行计算,为了能分类,于是就有了分组:
select avg(math)  as  avg_math  from student_info group by id;  这条语句会根据id进行分组,每一个id进行一次平均数的计算;

32.分组也需要过滤,这时候就需要使用having。就像where语句只能用于区分行,having只能区分分组;同时还有另一个重要的区别:where语句执行优先级很高,他在分组和select执行之前,而group by优先级在where执行之后,他在分组之后执行,对每一个分组分别进行过滤;

7.子句书写顺序

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值