1、按关键字排序:
-
order by 语句用来实现 ,前面可以使用where字句使查询结果进一步过滤
-
asc 是按照升序排序 , 默认的
-
desc 是按照降序排序
order by的语法结构
例:select name,score from ku order by score desc;
表示将数值以降序的形式,显示ku中的名称和数值
排序前,数值没有规律性
排序后,数值是按照从大到小排列
2、区间判断查询 不重复记录
- and表示且,两边条件都要满足
- or表示或 ,只要满足一边条件即可
- distinct:查询不重复记录
3、对结果进行分组
查询sql结果,对结果进行分组 group by 来实现,通常结合聚合函数一起使用
聚合函数:
count 计数、sum 求和、avg 平均数、max 最大值、min最小值
例:select count(*) from ku;
表示显示ku中一共有多少数据
4、限制结果条目
limit 限制输出记过记录
例:select * from ku limit 3;
表示显示ku中前三行的所有有数据
select * from ku limit 3,2;
表示显示ku中第三行的后两行所有数据
5、设置别名 (alias → as)
在mysql查询的时候,表和字段做一个别名 原因是表和列的字段比较长
as可以起到的作用:
-
创建表的时候,插入表的数据
-
可以克隆表的数据和表结构,但是约束没有完全复制过来
对于列的别名:
例:select name as 姓名, score as 地址 from aaa;
对于表的别名:
例:select b.name as 姓名, b.score as 地址 from 表名 as b;
新建一个表,将后面的命令结果数据插入到新建表中(相当于复制一张表)
方法一:create table 新建表名 as select * from 复制的表名;
方法二:create table 新建表名(select * from 复制的表名);
指定数据插入
例:create table 新建表名 as select * from 复制的表名 where score<60;
表示创建一个新的表,将复制的表中数值小于60的数据,复制到新的表中
6、通配符
通配符主要用于替换字符串中的部分字符,通过部分字符的匹配快速查找数据库中的内容 通常通配符都是跟 like 一起使用的,并协同 where语句共同来完成查询任务。常用的通配符有两个:
-
%表示零个、一个或多个字符 (类似于 ' * ')
-
_ 表示单个字符 (类似于 ' . ')
【注 :可以组合使用】
例:select name,score,address from ku where address like 'n%';
表示ku中地址以 'n' 开头的数据,显示出其名称、数值和地址
例:select id,name,address from ku where address like 'shangh_ _';
表示ku中地址以 'shangh' 开头的数据,显示出其序列、名称和地址
7、子查询
- 子查询也被称作 内查询 或者 嵌套查询 ,是指在一个查询语句里面还嵌套着另一个查询语句。
- 子查询语句是先于主查询语句被执行的,其结果作为外层的条件返回给主查询进行下一 步的查询过滤,最内层的子查询最优先处理
【ps:子语句可以与主语句所查询的表相同,也可以是不同表】
in 表示将主表和 子表进行关联/连接 ,用来判断某个值是否在给定结果集中,通常结合子查询来进行使用
例:select name,score from ku where id in (select id from ku where score>60);
表示查询ku中数值大于60的数据,显示其名称和数值
主语句: elect name,score from ku
子语句(集合): select id from ku where score>60
in: 将主表和子表关联/连接的语法
PS:子语句中的sql语句是为了,最后过滤出一个结果集,用于主语句的判断条件
not in 表示取反
例: update biao3 set score=100 where id not in (select id from ku where id>2);
表示查询ku中小于2的序列,将这个序列带入表3中,将其的数值改为100
先进行子语句:select id from ku where id>2 #查询ku中id大于2的
再进行:where id not in #取反 【相当于只有1和2】
最后进行:update biao3 set score=1000 #将biao3中1、2的值改成100
EXISTS :作为判断,主要用于判断子查询的结果集是否为空。如果不为空, 则返回 true;反之则返回 false
例:select count(*) from ku where exists(select * from ku where score>60);
表示查询ku中数据的数值,如果有大于60的,则列出ku中的数据行数
8、视图
视图:优化操作 + 安全方案
- 数据库中的虚拟表,这张虚拟表中不包含真实数据,只是做了真实数据的映射
- 视图可以理解为镜花水月/倒影,动态保存结果集 ( 数据 )
作用场景[图]:
-
针对不同的人( 权限身份 ),提供不同结果集的”表”( 以表格的形式展示 )
作用范围:
select * from 表名; #展示的部分是具体某张表
select * from view name; #展示的是一张或多张表
功能:
简化查询结果集、灵活查询、可以针对不同用户呈现不同结果集、相对有更高的安全性本质而言视图是一种select (结果集的呈现)
【ps:视图适合于多表连接浏览时使用,不适合增、删、改,而存储过程适合于使用较频繁的SQL语句,这样可以提高执行效率!】
视图和表的区别和联系
区别:
-
视图是已经编译好的sql语句。而表不是
-
视图没有实际的物理记录。而表有 show table status \G
-
表只用物理空间而视图不占用物理空间,视图只是逻辑概念的存在,表可以及时对它进行修改,但视图只能有创建的语句来修改
-
视图是查看数据表的一种方法,可以查询数据表中某些字段构成的数据,只是一些SQL语句的集合。从安全的角度说,视图可以不给用户接触数据表,从而不知道表结构。
-
表属于全局模式中的表,是实表:视图属于局部模式的表,是虚表
-
视图的建立和删除只影响视图本身,不影响对应的基本表。(但是更新视图数据,是会影响到基本表的)
联系:
视图(view)是在基本表之上建立的表,它的结构(即所定义的列)和内容即所有数据行)都来自基本表,它依据基本表存在而存在一个视图可以对应一个基本表,也可以对应多个基本表。视图是基本表的抽象和在逻辑意义上建立的新关系。
示例:需求: 满足80分的学生展示在视图中
删除视图:
命令 drop view if exists 视图名;
9、null值
nu11值与空值的区别 ( 空气与真空 )
空值长度为0,不占空间,NULI值的长度为null,占用空间
内查询/内连接:inner join
-
输出匹配的共同字段/共同数据
语法: select * from biao1 inner join biao2 on biao1的字段名=biao2的字段名;
左连接:left join
-
将两张表的内容进行匹配,按照sql语句进行查询,查询的顺序【左 → 右】 输出左表的全部内容和右表共同的数据内容
语法:select * from biao1 left join biao2 on biao1的字段名=biao2的字段名;
右连接:right join
-
将两张表的内容进行匹配,按照sql语句进行查询,查询的顺序【左←右】 输出右表的全部内容和左表共同的数据内容
语法:select * from biao1 right join biao2 on biao1的字段名=biao2的字段名;
存储过程:
-
存储过程的主体都分,被称为过程体
-
以BEGIN开始,以END结束,若只有一条SQL语句,则可以省略BEGIN-END
-
以DELIMITER开始和结束
存储过程参数
-
IN:输入参数:表示调用者向过程传入值《传入值可以是字面量或变量)
-
OUT : 输出参数:表示过程向调用者传出值(可以返回多个值) (传出值只能是变量)
-
INOUT :输入输出参数:既表示调用者向过程传入值,又表示过程向调用者传出值(值只能是变量)
即表示调用者向过程传入值,又表示过程向调用者传出值 ( 只能是变量 )