linux MySQL高阶语句
- 1、MySQL高级语言
- 1.1order by排序
- 1.2group by分组
- 1.3limit前几行
- 1.4as别名
- 1.5通配符
- 1.6子查询
- 1.7in
- 1.8not in
- 1.9exists
- 2、视图
- 2.1视图概念
- 2.2功能
- 2.3应用场景
- 2.4视图和表的区别和联系
- 2.5创建视图
- 3、null值
- 3.1null值
- 3.2null值与空值的区别
- 3.3验证null和空值
- 4、连接
- 4.1连接概念
- 4.2连接分类
- 4.3主连接
- 4.4左连接
- 3.5右连接
- 5、总结
1、MySQL高级语言
MySQL高级语句可以用在查询复合语句,可以更好的完成需求,主要采用嵌套和通配符方式。
1.1order by排序
ASC 是按照升序进行排序的,是默认的排序方式,即 ASC 可以省略。SELECT 语句中如果没有指定具体的排序方式,则默认按ASC方式进行排序。
DESC 是按降序方式进 行排列。当然 ORDER BY 前面也可以使用 WHERE 子句对查询结果进一步过滤。
原表:
默认顺序排序:默认正序排列
倒叙排列
条件排序
双层排序
条件双层排序
先按照条件找到address为nanjing的,按照id进行正序排列,在按照score正序排列
简单区间判断:and和or(并且和或)
条件嵌套区间
查询不重复记录
distinct查询不重复字段
1.2group by分组
计数(COUNT)、 求和(SUM)、求平均数(AVG)、最大值(MAX)、最小值(MIN)
count计数
address属性有7各字段
count计数分组
按照hobbid重复的分为一组,每组多少个
条件count计数分组
先筛选出成绩大于50的,在进行分组
count分组排序
先进行分组,在进行排序
1.3limit前几行
limti前3行
显示第三行到第五行
查询排序后的前三行
查询排序后三行
1.4as别名
在 MySQL 查询时,当表的名字比较长或者表内某些字段比较长时,为了方便书写或者 多次使用相同的表,可以给字段列或表设置别名。使用的时候直接使用别名,简洁明了,增强可读性。
不使用as也是可以,默认加as。
打印属性别名的表
无as别名
as复制表
同样是没有key属性
条件判断复制
1.5通配符
通常通配符都是跟 LIKE 一起使用的,并协同 WHERE 子句共同来完成查询任务。常用的通配符有两个,分别是:
%:百分号表示零个、一个或多个字符 *
_:下划线表示单个字符 .
查询指定开头未知位数
查询指定位数
查询指定位数l开头,后跟三位
查询中间字符
组合使用%_
查询第二位是a的未知位数
1.6子查询
子查询也被称作内查询或者嵌套查询,是指在一个查询语句里面还嵌套着另一个查询语 句。子查询语句是先于主查询语句被执行的,其结果作为外层的条件返回给主查询进行下一 步的查询过滤。
子查询当hobbid大于2
子查询score大于50
查询name从student查,id从a表查
先查数据作为表
1.7in
查询成绩大于50的
添加数据
修改数据
大批量修改数据
id大于3的全部修改
删除数据
id大于3的全部删除
1.8not in
查询id不是1的数据
添加数据
更新数据
将id不为1的成绩改为99
删除数据
删除除id为1的数据
1.9exists
这个关键字在子查询时,主要用于判断子查询的结果集是否为空。如果不为空, 则返回 TRUE;反之,则返回 FALSE
判断id是否有大于1的,有返回所有数据,统计个数
判断id没有小于1的,返回空表
2、视图
2.1视图概念
数据库中的虚拟表,这张虚拟表中不包含真实数据,只是做了真实数据的映射。
视图可以理解为镜花水月/倒影,动态保存结果集(数据)
视图(view)是在基本表之上建立的表,它的结构(即所定义的列)和内容(即所有数据行)都来自基本表,它依据基本表存在而存在。一个视图可以对应一个基本表,也可以对应多个基本表。
视图是基本表的抽象和在逻辑意义上建立的新关系。
2.2功能
简化查询结果集、灵活查询、可以针对不同用户呈现不同结果集、相对有更高的安全性
本质而言视图是一种select(结果集的呈现)
2.3应用场景
视图适合于多表连接浏览时使用!不适合增、删、改
而存储过程适合于使用较频繁的SQL语句,这样可以提高执行效率!
2.4视图和表的区别和联系
①、视图是已经编译好的sql语句。而表不是
②、视图没有实际的物理记录。而表有show table status\G
③、表只用物理空间而视图不占用物理空间,视图只是逻辑概念的存在,表可以及时对它进行修改,但视图只能有创建的语句来修改
④、视图是查看数据表的一种方法,可以查询数据表中某些字段构成的数据,只是一些SQL语句的集合。从安全的角度说,视图可以不给用户接触数据表,从而不知道表结构。
⑤、表属于全局模式中的表,是实表;视图属于局部模式的表,是虚表。
⑥、视图的建立和删除只影响视图本身,不影响对应的基本表。(但是更新视图数据,是会影响到基本表的)
2.5创建视图
创建视图
查看表结构
查看表状态
查询视图
多表创建视图
从多张表提取数据,创建视图
修改原表数据
视图数据会变
修改原表数据
视图数据也变化
修改视图数据
原表也发生变化
3、null值
3.1null值
在 SQL 语句使用过程中,经常会碰到 NULL 这几个字符。通常使用 NULL 来表示缺失 的值,也就是在表中该字段是没有值的。如果在创建表时,限制某些字段不为空,则可以使用 NOT NULL 关键字,不使用则默认可以为空。在向表内插入记录或者更新记录时,如果该字段没有 NOT NULL 并且没有值,这时候新记录的该字段将被保存为 NULL。需要注意 的是,NULL 值与数字 0 或者空白(spaces)的字段是不同的,值为 NULL 的字段是没有 值的。在 SQL 语句中,使用 IS NULL 可以判断表内的某个字段是不是 NULL 值,相反的用 IS NOT NULL 可以判断不是 NULL 值。
3.2null值与空值的区别
空值长度为0,不占空间,NULL值的长度为null,占用空间
is null无法判断空值
空值使用"=“或者”<>"来处理(!=)
count()计算时,NULL会忽略,空值会加入计算
3.3验证null和空值
先查看表结构可以为null
可以看到null不被计算
添加空值
会被计算
可以查询到null值数据
查询不为空的数据
4、连接
4.1连接概念
MySQL 的连接查询,通常都是将来自两个或多个表的记录行结合起来,基于这些表之间的 共同字段,进行数据的拼接。首先,要确定一个主表作为结果集,然后将其他表的行有选择 性的连接到选定的主表结果集上。
4.2连接分类
(1)内连接:显示相同内容
(2)左连接:显示左表和相同部分
(3)右连接:显示右表和相同部分
4.3主连接
使用inner join连接,一般在from之后
显示两表name相同部分数据
4.4左连接
左连接也可以被称为左外连接,在 FROM 子句中使用 LEFT JOIN 或者 LEFT OUTER JOIN 关键字来表示。左连接以左侧表为基础表,接收左表的所有行,并用这些行与右侧参 考表中的记录进行匹配,也就是说匹配左表中的所有行以及右表中符合条件的行。
左连接中左表的记录将会全部表示出来,而右表只会显示符合搜索条件的记录,右表记录不足的地方均为 NULL。
3.5右连接
右连接也被称为右外连接,在 FROM 子句中使用 RIGHT JOIN 或者 RIGHT OUTER JOIN 关键字来表示。右连接跟左连接正好相反,它是以右表为基础表,用于接收右表中的所有行,并用这些记录与左表中的行进行匹配
只显示右表所有数据和相同数据
5、总结
MySQL数据库高级语句可以完成排序,分组,通配符,子程序,视图。可以更好的完成管理数据库需求。