MySQL高级语句

一.关键字排序

1.使用order by语句来实现排序
2.排序可以针对一个或多个字段
3.asc升序
  默认的排序方式
4.desc降序

order by的语法结构

mysql>select column1,column2,...... from 库名 order by column1,column2,...... asc/desc;

按单个字段排序

mysql>select id,name,level from player where level>=45 order by level desc;  
//from后面跟上表名,where后面跟上筛选条件,order by后面跟上字段+排序方式

二.对结果进行分组

1.使用group by 语句来实现分组
2.通常结合聚合函数一起使用
3.可以按一个或多个字段对结果进行分组

group by的语法结构

mysql>select column_name,aggregate_function(column_name) from table_name where solumn_name operator value group by column_name;

group by分组

mysql>select count_name,level from player where level>=45 group by level;  
//select字段,from库名,where筛选条件,group by字段

三.限制结果条目

1.只返回select查询结果的第一行或前几行
2.使用limit语句限制条目

limit语法结构

mysql>select column1,column2,...... from table_name limit [offset,] number;      
//[offset.]位置偏移量,从0开始。number返回记录行的最大数目

limit限制结果条数

mysql>select id,name,level from player limit 3;
//limit后面+限制的行数

不从第一条开始取值

mysql>select id,name,level from player limit 2,3;
//2,3指从第2个后开始显示3条数据(即从第3个开始显示)

四.设置别名

1.使用as语句是指别名,关键字as可省略
2.设置别名时,保证不能与库中其他表或字段名称冲突

别名的语法结构

mysql>select column_name as alias_name from table_name;
//as→列的别名
mysql>select column_name(s) from table_name as alias_name;
//column_name(s)原字段或者表名在库内并不会被改变。as→表的别名。

as用法

mysql>select count(*) as number from player;
//as→字段的别名
mysql>select p.id,p.name from player as p limit 1;
//as→表的别名

as作为连接语句

mysql>create table tmp as select * from player;

五.通配符

1.用于替换字符串中的部分字符
2.通常配合like一起使用,并协同where完成查询
3.常用通配符
  %表示零个、一个或多个
  _表示单个字符

通配符%的用法

mysql>select id,name,level from where name like '%s';

通配符_的用法

select id,name,level from where name like '_uess';

两者结合使用

select id,name,level from player where name like '_es%';

六.子查询

1.也称作内查询或者嵌套查询
2.先于主查询被执行,其结果将作为外层主查询的条件
3.在增删改查中都可以使用子查询
4.支持多层嵌套
5.IN语句是用来判断某个值是否在给定的结果集中

子查询的用法

mysql>select name,level from player where id in (select id from player where level>=45);
mysql>insert into tmp select * from player where id in (select id from player);
mysql>update tmp set level = level -7 where id in (select a.id from (select id from tmp where level >= 47) a); 
mysql>select id,name,level from tmp where id = (select id from tmp where name='shirely');
mysql>select count(*) as number from tmp where exists (select id from tmp where name='shirley');

七.NULL值

1.表示缺失的值
2.与数字0或者空白(spaces)是不同的
3.使用IS NULL或者IS NOT NULL进行判断

NULL值和空值的区别

空值长度为0,不占空间;NULL值的长度为NULL,占用空间
IS NULL无法判断控制
空值使用“=”或者“<>”来处理
COUNT()计算时,NULL会忽略,空值会加入计算

NULL的用法

mysql>select * from test where coin is null;       
/查询coin字段为null值得记录
mysql>select * from test where coin is not null;
//查询coin字段不为空的记录

八.正则表达式

1.根据指定的匹配模式匹配记录中符合要求的特殊字符
2.使用regexp关键字指定匹配模式

常用匹配模式

^匹配开始字符
$匹配结束字符
.匹配任意单个字符
*匹配任意个前面的字符
+匹配前面字符至少1次
p1|p2匹配p1或p2
[...]匹配字符集中的任意一个字符
[^...]匹配不在中括号中内的任何字符
{n}匹配前面的字符串n次
{n,m}匹配前面的字符串至少n次,至多m次

九.运算符

1.用于对记录中的字段值进行计算
2.运算符分类
  算数运算符
  比较运算符
  逻辑运算符
  位运算符

1.算数运算符

MySQL支持的算数运算符
+  加法
-  减法
*  乘法
/  除法
%  取余数

mysql>select 1+2 as addition, 2-1 as subtraction, 2*3 as multiplication, 4/2 as division, 7%2 as remainder;

在这里插入图片描述
2.比较运算符

1.字符串的比较默认不区分大小写,可使用binary来区分
2.常用比较运算符
=      等于           LIKE  通配符匹配
>      大于           IS NULL  判断一个值是否为NULL
<      小于           IS NOT NULL  判断一个值是否不为NULL
>=     大于等于       BETWEEN AND  两者之间
<=     小于等于       GREATEST  两个或多个参数时返回最大值
!=或<>  不等于        LEAST  两个或多个参数时返回最小值
IN     在集合中

3.逻辑运算符

1.逻辑运算符又被称为布尔运算符,通常用来判断表达式的真假,如果为真返回1,否则返回0,真和假也可以用true和false表示。
2.MySQL中支持使用的逻辑运算符有四种
  NOT或!       逻辑非
  AND或&&       逻辑与
  OR或||        逻辑或
  XOR           逻辑异或

mysql>select not 2,!3,not 0,!(4-4);

4.位运算符

1.位运算符实际上是对二进制数进行计算的运算符。MySQL内位运算会先将操作数变成二进制格式,然后进行位运算,最后在将计算结果从二进制变回到十进制格式,方便用户查看。
2.MySQL支持的6中位运算符。
   &    按位与
   |    按位或
   ~    按位取反
   ^    按位异或
   <<   按位左移
   >>   按位右移

运算符的优先级

优先级运算符 优先级运算符
18|
2~9=,<=>,>=,>,<=,<,<>,!=,IS,LIKE,REGEXP,IN
3^10BETWEEN,CASE,WHEN,THEN,ELSE
4*,/(DIV),%(MOD)11NOT
5+,-12&&,AND
6 >>,<<13||,OR,XOR
7&14:=

十.内连接

1.两张或多张表中同时符合某种条件的数据记录组合
2.from子句中使用inner join
3.是系统默认的表连接方式,可以省略inner关键字
4.多表支持连续使用inner join,建议不超过三个表
5.语法结构
  mysql>select column_name(s) from table 1
  mysql>inner join table2 on table1.column_name = table2.column_name;

十一.左连接

1.也被称为左外连接
2.在from子句中使用left join关键字来表示
3.匹配左表中所有行及右表中符合条件的行

实现原理
在这里插入图片描述

十二.右连接

1.也被称为右外连接
2.在from子句中使用right join关键字来表示
3.匹配右表中所有行及左表中符合条件的行

实现原理
在这里插入图片描述
右连接的用法

 mysql<select * from a_player a right join b_player b on a.a_id=b.b_id;

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值