一.关键字排序
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中位运算符。
& 按位与
| 按位或
~ 按位取反
^ 按位异或
<< 按位左移
>> 按位右移
运算符的优先级
优先级 | 运算符 | 优先级 | 运算符 |
1 | ! | 8 | | |
2 | ~ | 9 | =,<=>,>=,>,<=,<,<>,!=,IS,LIKE,REGEXP,IN |
3 | ^ | 10 | BETWEEN,CASE,WHEN,THEN,ELSE |
4 | *,/(DIV),%(MOD) | 11 | NOT |
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;