MySQL的进阶查询
一、 按关键字排序
使用ORDERBY语句来实现排序排序可针对一个或多个字段ASC:升序,默认排序方式 【升序是从小到大】DESC:降序 【降序是从大到小】ORDER BY的语法结构ORDER BY后面跟字段名
准备一张成绩表
语法结构
1.1 单字段排序
升序
降序
1.2 多字段排序
先以前面的字段(主参考字段)排序,如果相同再按后面的字段排序
二 、对结果进行分组
使用GROUP BY语句来实现分组通常结合聚合函数一起使用可以按一个或多个字段对结果进行分组GROUP BY的语法结构
2.1 group by分组
按照hobby分组(相同hobby一个组),并统计每个组的人数
2.2 group by结合order by
先按hobby分组,再按hobby序号降序排列
三、限制结果条目LIMIT
只返回SELECT查询结果的第一行或前几行使用LIMIT语句限制条目
LIMIT语法结构
查看前两行
查看从第四行开始的五行内容
四、设置别名
使用AS语句设置别名,关键字AS可省略设置别名时,保证不能与库中其他表或字段名称冲突
别名的语法结构
AS的用法
对于字段设置
对于表设置,一般在多表查询时使用
多表操作时,对表别名之后,在select字段时要用别名.字段,区分字段属于哪个表
作为连接语句
创建一个新表,将旧表的内容导入,与旧表的区别在于表的结构
五、通配符
用于替换字符串的部分字符通常配合LIKE一起使用,并协同WHERE完成查询常用的通配符%表示零个、一个或多个_表示单个字符
例:
查询以姓名y开头的记录:
查询姓名为y_ _y_格式的记录,_代表单个字符,占位
六、子查询
也称作内查询或者嵌套查询先于主查询被执行,其结果将作为外层主查询的条目在增删改查中都可以使用子查询支持多层嵌套IN语句是用来判断某个值是否在给定的结果集中
例:根据表need,筛选出与need表中内容相匹配的成绩表的内容
多层嵌套,筛选出need表中id与chengji表id相同的记录之后,在这基础上再筛选出名字相同的记录
等同于下面两步的操作
七、视图
数据库中的虚拟表,这张虚拟表中不包含任何数据,只是做了数据映射;
创建视图并查看:
八、NULL值
表示缺失的值与数字0或者空白(spaces)是不同的使用IS NULL或IS NOT NULL进行判断
NULL与空值的区别:
空值长度为0,不占空间;NULL值的长度为NULL,占用空间
IS NULL无法判断空值 空值使用“=”或者“<>”来处理
COUNT()计算时,NULL会忽略,不加入计算,空值会加入计算
九、正则表达式
根据指定的匹配模式匹配记录中符合要求的特殊字符使用REGEXP关键字指定匹配模式
常用匹配模式
例:
查询以l开头的记录:
查询以o结尾的
.代表任意单个字符,占位,查询lihao的记录
查询不是z开头的
匹配w及后面一个w两次
十、运算符
MySQL 的运算符用于对记录中的字段值进行运算。MySQL 的运算符共有四种,分别是:算术运算符、比较运算符、逻辑运算符和位运算符。下面分别对这四种运算符进行说明。
10.1 算数运算符
MYSQL支持使用的运算符号
10.2 比较运算符
常用比较运算符
10.2.1 等于
等号(=)是用来判断数字、字符串和表达式是否相等的,如果相等则返回 1,如果不相等则返回 0。如果比较的两者有一个值是 NULL,则比较的结果就是 NULL。其中字符的比较是根据 ASCII 码来判断的,如果 ASCII 码相等,则表示两个字符相同;如果 ASCII 码不相等,则表示两个字符不相同。例如,等于运算符在数字、字符串和表达式上的使用
10.2.2 不等于
不等于号有两种写法,分别是<>或者!=,用于针对数字、字符串和表达式不相等的比较。如果不相等则返回 1,如果相等则返回 0,这点正好跟等于的返回值相反。需要注意的是不等于运算符不能用于判断 NULL。
10.2.3 大于、大于等于、小于、小于等于
大于(>)运算符用来判断左侧的操作数是否大于右侧的操作数,若大于返回 1,否则返回 0,同样不能用于判断 NULL。小于(<)运算符用来判断左侧的操作数是否小于右侧的操作数,若小于返回 1,否则返回 0,同样不能用于判断 NULL。大于等于(>=)判断左侧的操作数是否大于等于右侧的操作数,若大于等于返回 1,否则返回 0,不能用于判断 NULL。小于等于(<=)判断左侧的操作数是否小于等于右侧的操作数,若小于等于返回 1,否则返回 0,不能用于判断 NULL。数值比较会自动转换ASCII表的数值
几个常用Dec(十进制):
0是48,A是65,a是97,其余的都是按顺序下去的
10.2.4 IS NULL、IS NOT NULL
ISNULL 判断一个值是否为 NULL,如果为 NULL 返回 1,否则返回 0。IS NOT NULL 判断一个值是否不为 NULL,如果不为 NULL 返回 1,否则返回 0
10.2.5 BETWEEN AND
BETWEEN AND 比较运算通常用于判断一个值是否落在某两个值之间。例如,判断某数字是否在另外两个数字之间,也可以判断某英文字母是否在另外两个字母之间。between and 包含两端
10.2.6 LEAST、GREATEST
LEAST:当有两个或者多个参数时,返回其中的最小值。如果其中一个值为 NULL,则返回结果就为 NULL。
GREATEST:当有两个或者多个参数时,返回其中的最大值。如果其中一个值为 NULL, 则返回结果就为 NULL。
10.2.7 IN、NOT IN
IN 判断一个值是否在对应的列表中,如果是返回 1,否则返回 0。
NOT IN 判断一个值是否不在对应的列表中,如果不是返回 1,否则返回 0。
10.3 逻辑运算符
逻辑运算符又被称为布尔运算符,通常用来判断表达式的真假,如果为真返回 1,否则返回 0,真和假也可以用 TRUE 和 FALSE 表示。
10.3.1 逻辑非
逻辑运算符中最简单的运算符就是逻辑非,逻辑非使用 NOT 或!表示。逻辑非将跟在它后面的逻辑测试取反,把真变为假,把假变为真。如果 NOT 后面的操作数为 0 时,所得值为 1;如果操作数为非 0 时,所得值为 0;如果操作数为 NULL 时,所得值为 NULL。例如,对非 0 值和 0 值分别作逻辑非运算,具体操作如下所示。
10.3.2 逻辑与
逻辑与通常用于判断两个值或多个值的有效性,如果所有值都是真返回 1,否则返回 0。逻辑与使用 AND 或者&&表示。例如,对非 0 值、0 值和 NULL 值分别作逻辑与运算,具体操作如下所示。
10.3.3 逻辑或
逻辑与通常用于判断两个值或多个值的有效性,如果所有值都是真返回 1,否则返回 0。逻辑与使用 AND 或者&&表示。例如,对非 0 值、0 值和 NULL 值分别作逻辑与运算。
一旦有个非0值,出来就是非0值
10.3.4 逻辑异或
两个非 NULL 值的操作数,如果两者都是 0 或者都是非 0,则返回 0;如果一个为 0, 另一个为非 0,则返回结果为 1;当任意一个值为 NULL 时,返回值为 NULL。例如,对非0 值、0 值和 NULL 值分别作逻辑异或运算,具体操作如下所示。
有null结果就会为null。
10.4 位运算符
位运算符实际上是对二进制数进行计算的运算符。MySQL 内位运算会先将操作数变成二进制格式,然后进行位运算,最后在将计算结果从二进制变回到十进制格式,方便用户查看。
10.5 运算符的优先级
以上不管哪种运算符,在使用过程中都有优先级问题。运算符的优先级决定了不同的运 算符在计算过程中的先后顺序。级别高的运算符会先进行计算,如果运算符的级别相同, MySQL 会按照顺序从左到右依次进行计算。如果不确定所使用的运算符的优先级,可以使用()改变优先级。