文章目录
- MySQL 高级 SQL 语句操作
- 一:按关键字排序
- 二:对结果进行分组
- 三:限制结果条目
- 四:设置别名
- 五:通配符
- 六:子查询
- 七:NULL值
- 八:正则表达式
- 九:运算符
- 1:算术运算符
- 2:比较运算符
- 3:逻辑运算符
- 4:位运算符
- 5:运算符的优先级
- 十:表的连接方式
- 1:内连接
- 2:外连接
- (1):左连接
- (2):右连接
1. 使用ORDER BY语句来实现排序
2. 排序可针对一个或多个字段
3. ASC:升序默认排序方式
4. DESC:降序
5. ORDER BY的语法结构
6. 按单字段排序
7:按多字段排序
以此表为例,进行高级操作
(1)使用 ORDER BY 进行字段查询
- 对 name 和 age 查询并对 age 降序查看
- 对 name 和 age 查询并对 age 升序查看
(2)使用 ORDER BY 进行多字段查询
- 对age,name,height 对字段降序查看
- 对age,name,height 对字段升序查看
1:使用GROUP BY语句来实现分组
2:通常结合聚合函数一起使用
3:可以按一个或多个字段对结果进行分组
4:GROUP BY的语法结构
以此表为例进行高级操作
(1)GROUP BY分组示例
- 对 weight 大于 140 的 name 和 age 进行分组
(2)GROUP BY结合ORDER BY
- 对 weight 大于 120 的 name 和 age 进行分组,并对 name 分组进行降序排序
1:只返回SELECT查询结果的第一行或前几行
2:使用LIMIT语句限制条目
3:LIMIT语法结构
4:LIMIT限制结果条数
5:不从第一条开始取值
以此表进行限制条目操作
(1)限制结果的行数
- 限制表的前 5 行
(2)不从第一条开始取值
- 不从 1 开始,取值后面的 5 行
1:使用AS语句设置别名,关键字AS可省略
2:设置别名时,保证不能与库中其他表或字段名称冲突
3:别名的语法结构
4:AS的用法
5:AS作为连接语句
以此表为例进行 AS 操作
(1)AS 的第一种操作
- 查询表的行数
(2)AS 的第二种操作
- 设置别名,id 设为 aaa,height 设为 bbb,weight 设为 ccc ,表 a 设为 表 aa
- 设置别名,id 设为 aaa,height 设为 bbb,weight 设为 ccc ,表 a 设为 表 aa,只显示 height
大于等于 180 的
- 设置别名,查询前3行
(3)AS作为连接语句
- 复制表的结构以及数据
1:用于替换字符串中的部分字符
2:通常配合 LIKE 一起使用,并协同 WHERE 完成查询
3:常用通配符
- %表示零个、一个或多个
- _表示单个字符
4:通配符%的用法
5:通配符_的用法
以此表进行通配符操作
(1)使用 % 进行检索查询
- 查询表里以 l 开头的 name
- 查询表里以 n 结尾的 name
(2)通配符_的用法
- 查询 name 里的单个字符
1:也称作内查询或者嵌套查询
2:先于主查询被执行,其结果将作为外层主查询的条件
3:在增删改查中都可以使用子查询
4:支持多层嵌套
5:IN语句是用来判断某个值是否在给定的结果集中
6:子查询的用法
- 查询条件
- 插入数值
- 创建别名查询
- 删除符合条件后查询
- EXIST 关键字子查询
EXIST这个关键字在子查询时,主要用于判断子查询的结果集是否为空。如果不为空,则返回 TRUE;反之,则返回 FALSE。例如,先通过子查询判断返回是否为 TRUE,如果用户shirley存在,则计算整个tmp表的总记录数量
以此表进行子查询
(1)查询列表信息
- 查询 name 和 height 两列并列出 height 大于 180 的
- 查询 name 和 height 两列并列,后面不添加条件
(2)插入数值
1.重新复制表 a 的表结构,为表 aa
2.符合条件的数值从表 a 中 复制给 表 aa
- 将表 a 中的 weight 大于等于 140 的插入给表 aa
3.验证效果
(3)定义别名根据条件查询
- 定义别名为 b ,查询 height 大于等于 170 的以 name 和 height 列表显示
- 使用 update 对 a1 表里符合条件的 height 的数值加 10 (条件为 height 值大于等于180)
(4)删除符合条件后删除
以 a1 这张表为例删除示例
- 删除 height 值大于等于 180 小于等于 200 的值将被删除
- 查询结果
1:表示缺失的值
2:与数字0或者空白(spaces)是不同的
3:使用IS NULL或IS NOT NULL进行判断
4:NULL值和空值的区别
- 空值长度为0,不占空间;NULL值的长度为NULL,占用空间
- IS NULL无法判断空值
- 空值使用“=”或者“<>”来处理
- COUNT()计算时,NULL会忽略,空值会加入计算
以这张表为例进行 NULL 值示例
(1)测试 NULL 值为空
- 添加 NULL
- 查询添加效果
- 验证:添加后一共有 6 行,查询 weight 行时为5,是因为 NULL 不计数
(2)测试 0 占位
- 添加带 0 数据
- 查询添加效果
- 验证:height 值有 0 时,也占用空间
(3)查询表中带有是 NULL 值的数据
(4)查询表中带有不是 NULL 值的数据
1:根据指定的匹配模式匹配记录中符合要求的特殊字符
2:使用REGEXP关键字指定匹配模式
3:常用匹配模式
- ^匹配开始字符
- p1|p2匹配p1或p2
- $匹配结束字符
- […]匹配字符集中的任意一个字符
- .匹配任意单个字符
- [^…]匹配不在中括号内的任何字符
- *匹配任意个前面的字符
- {n}匹配前面的字符串n次
- +匹配前面字符至少1次
- {n,m} 匹配前面的字符串至少n次,至多m次
以此表为例进行正则表达式操作
(1)查询 name 段以 w 开头的数据
(2)查询 name 段以 n 结尾的数据
(3)查询 name 段的任意字符
(4)查询不在括号内的任何字符
(5)查询 name 段中至少有一个 i 的数据
查询 name 段中至少有两个 i 的数据
(6)查询 name 段某个范围的数据
(7)查询 name 段中至少有一个 m 的
1:用于对记录中的字段值进行运算
2:运算符分类
- 算术运算符
- 比较运算符
- 逻辑运算符
- 位运算符
1:算术运算符
MySQL支持的算术运算符
- +加法
- -减法
- *乘法
- /除法
- %取余数
示例
(1)加法
(2)多个算数在一起
(3)查看算数表结构
- 创建表
- 查看表
2:比较运算符
1:字符串的比较默认不区分大小写,可使用binary来区分
2:常用比较运算符
- = 等于
- < 小于、>大于
- <= 小于等于、>=大于等于
- !=或 <> 不等于
- IN 在集合中
- LlKE 通配符匹配
- IS NULL 判断一个值是否为NULL
- IS NOT NULL判断一个值是否不为NULL
- BETWEEN AND 两者之间
- GREATEST两个或多个参数时返回最大值
- LEAST 两个或多个参数时返回最小值
注释
(1)等号 =
- 是用来判断数字、字符串和表达式是否相等的,如果相等则返回1,如果不相等则返回0
- 如果比较的两者有一个值是NULL,则比较的结果就是NULL
- 其中字符的比较是根据ASCII码来判断的,如果 ASCII码相等,则表示两个字符相同;如果ASCII码不相等,则表示两个字符不相同
示例
结论
- 如果两者都是整数,则按照整数值进行比较
- 如果一个整数一个字符串,则会自动将字符串转换为数字,再进行比较
- 如果两者都是字符串,则按照字符串进行比较
- 如果两者中至少有一个值是 NULL,则比较的结果是 NULL
(2)不等于运算符
- 不等于号有两种写法,分别是<>或者=,用于针对数字、字符串和表达式不相等的比较
- 如果不相等则返回1,如果相等则返回0,这点正好跟等于的返回值相反
- 需要注意的是不等于运算符不能用于判断 NULL
示例
(3) 大于、大于等于、小于、小于等于运算符
- 大于(>)运算符用来判断左侧的操作数是否大于右侧的操作数,若大于返回1,否则返回0,同样不能用于判断NULL
- 小于(<) 运算符用来判断左侧的操作数是否小于右侧的操作数,若小于返回1,否则返回0,同样不能用于判断NULL
- 大于等于(>=)判断左侧的操作数是否大于等于右侧的操作数,若大于等于返回1,否则返回0,不能用于判断NULL
- 小于等于(<=) 判断左侧的操作数是否小于等于右侧的操作数,若小于等于返回1,否则返回0,不能用于判断NULL
(4) IS NULL、IS NOT NULL
- IS NULL判断一个值是否为 NULL,如果为 NULL返回1,否则返回0
- IS NOT NULL判断一个值是否不为NULL,如果不为 NULL返回1,否则返回0
示例
结论
- IS NULL和IS NOT NULL 一个判断为空,另一个判断不为空,只是有无 NOT 这个关键字的区别,同时返回值不同。
(5) BETWEEN AND
- BETWEEN AND比较运算通常用于判断一个值是否落在某两个值之间
- 例如,判断某数字是否在另外两个数字之间,也可以判断某英文字母是否在另外两个字母之间
示例
- 5 在3 与 8 之间
- 9 不在 3 与 8 之间
- e 在 a 与 f 之间
- o 不在 a 与 f 之间
(6) LEAST、GREATEST
- LEAST:当有两个或者多个参数时,返回其中的最小值。如果其中一个值为NULL,则返回结果就为NULL
- GREATEST:当有两个或者多个参数时,返回其中的最大值。如果其中一个值为NULL,则返回结果就为NULL
示例
1:比较最小值
2:比较最大值
结论
- LEAST 比较的参数为数字时,返回的是其中最小的值;当比较的参数为字符串时,返回字母表中顺序最靠前的字符
- GREATEST比较的参数为数字时,返回的是其中最大的值;当比较的参数为字符串时,返回字母表中顺序最靠后的字符
(7)IN、NOT IN
- IN判断一个值是否在对应的列表中,如果是返回1,否则返回0
- NOTIN判断一个值是否不在对应的列表中,如果不是返回1,否则返回0
示例
- 判断 3 是否在数值里面,为真则返回 1
- 判断 7 是否在数值里面,为假则返回 0
- 判断 3 不在数值里面,为假则返回 0
- 判断 7 不在数值里面,为真则返回 1
(8) LIKE、NOT LIKE
- LIKE 用来匹配字符串,如果匹配成功则返回1,反之返回O
- LIKE 支持两种通配符:‘%’ 用于匹配任意数目的字符;而 ‘_’ 只能匹配一个字符
- NOT LIKE正好跟LlKE 相反,如果没有匹配成功则返回1,反之返回0
示例
- ‘%’ 用于匹配任意数目的字符
- ‘_’ 用于只能匹配一个字符
3:逻辑运算符
- 逻辑运算符又被称为布尔运算符,通常用来判断表达式的真假
- 如果为真返回1,否则返回0,真和假也可以用 TRUE 和 FALSE 表示
- MySQL 中支持使用的逻辑运算符有四种
1:逻辑非 - 逻辑运算符中最简单的运算符就是逻辑非,逻辑非使用NOT或!表示
- 逻辑非将跟在它后面的逻辑测试取反,把真变为假,把假变为真
- 如果 NOT后面的操作数为0时,所得值为1;如果操作数为非0时,所得值为0;如果操作数为NULL时,所得值为NULL
示例
(1)not 或 !
- 9 为真非 0 值;为 1,1 取反就是 0
- 相反为真
(2)AND 或 &&
- 5 为非 0 值,统一为真,真的话就是 1
- 5 和 3 都为非 0 值,两个真值相与便为真
(3)OR 或 ||
- 两个数值类型都为非 0 值,为真
- 有一个数值类型为真便为真
(4)XOR
- 两个数值类型不一样,为异或,为真
- 两个数值类型都为真,为假
- 两个非 0 值也为假
结论
- 异或:同为真或同为假都为假,一个真一个假时才为真。
(2)逻辑或
- 逻辑或表示包含的操作数,任意一个为非零值并且不是NULL值时,返回1,否则返回0
- 逻辑或通常使用 OR 或者 || 来表示
(3)逻辑异或
- 两个非 NULL值的操作数,如果两者都是О或者都是非0,则返回0
- 如果一个为0,另一个为非0,则返回结果为1
- 当任意一个值为NULL 时,返回值为 NULL
4:位运算符
- 位运算符实际上是对二进制数进行计算的运算符
- MySQL 内位运算会先将操作数变成二进制格式,然后进行位运算,最后在将计算结果从二进制变回到十进制格式,方便用户查看
- MySQL支持6种位运算符
(1)按位与
- 5 的二进制为 101;3 的二进制位 011,相乘得出 1
(2)按位或
(3)按位取反
(4)按位异或
- 5 为101,3 为 011,1 与 0 异或为 1;0 与 1 异或为 1;1 与 1 异或为 0,结果为 110,换算成 6
(5)按位左移
- 5 为 101,左移两位为 10100,换算成 20
- 3 为 011,左移两位为 01100,换算成 12
(6)按位右移
- 10 为 1010,右移两位为 10,换算成 2
5:运算符的优先级
- 决定了不同的运算诱在计算过程中的先后顺序
- 优先级高的先进算。同级的按从左到右进行计算
- 可以使用()小括号来改变计算优先级

1:内连接
1:两张或多张表中同时符合某种条件的数据记录组合
2:FROM子句中使用INNER JOIN关键字连接多张表,并使用ON设置连接条件
3:是系统默认的表连接方式,可以省略INNER关键字
4:多表支持连续使用 INNER JOUN,建议不超过三个表
5:语法结构
实现原理

示例
- 1:新建两张表
- 2:往两张表里添加数据
3:将两张表内连接
2:外连接
(1):左连接
1:也被称为左外连接
2:在FROM子句中使用LEFT JOIN关键字来表示
3:匹配左表中所有行及右表中符合条件的行
4:实现原理

示例
- 将内连接创建的两张表左连接
(2):右连接
1:也被称为右外连接
2:在FROM子句中使用RIGHT JOIN关键字来表示
3:匹配右表中所有行及左表中符合条件的行
4:实现原理

示例
- 将内连接创建的两张表右连接

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/166340.html