MySQL笔记

union合并查询结果集

#查询工作岗位是MANAGER和SALESMAN的员工
select
	ename,job
from
	emp
where
job = 'MANAGER' or job = 'SALESMAN';

select ename,job from emp where job in('MANAGER','SALESMAN');

select ename,job from emp where job = 'MANAGER'
union
select ename,job from emp where job = 'SALESMAN';


union的效率要高一些,对于表的连接来说,每连接一次新表,则匹配的次数满足笛卡尔积,成倍的翻...
但是union可以减少匹配的次数,在减少匹配次数的情况下,还可以完成两个结果集的拼接.

a 连接 b  连接  c
a  10条记录
b  10条记录
c  10条记录
匹配次数是:1000

a连接b一个结果:10 * 10 = 100;
a连接c一个结果:10 * 10 =  100;
使用union的话是:100 + 100 = 200次(union把乘法变成了加法运算)

#查询工作岗位是MANAGER和SALESMAN的员工
select
	ename,job
from
	emp
where
job = 'MANAGER' or job = 'SALESMAN';

select ename,job from emp where job in('MANAGER','SALESMAN');

union在使用的时候有注意事项吗?

// 错误的:union在进行结果集合并的时候,要求两个结果集的列数相同
select ename,job from emp where job = 'MANAGER'
union
select ename,job from emp where job = 'SALESMAN';

//MySQL可以,oracle语法严格,不可以,报错。要求:结果集合并时列和列的数据类型也必须相同
select ename,job from emp where job = 'MANAGER'
union
select ename,sal from emp where job = 'SALESMAN';

limit

limit作用:将查询结果集的一部分取出来,通常使用在分页查询当中

分页的作用是为了提高用户的体验,因为一次全部都查出来,用户体验差,可以一页一页翻着看

limit怎么用?

完整用法:limit startIndex length
起始下标从0开始

缺省用法:limit 5;这是取前五

#按照薪资降序,取出排名在前五名的员工

select
	ename,sal
from
	emp
order by
	sal desc
limit 5;#取前五


select
	ename,sal
from
	emp
order by
	sal desc
limit 0,5;

注意:MySQL当中limit在order by之后执行


#取出工资排名在【3-5】名的员工
select
	ename,sal
from
	emp
order by
	sal desc
limit
	2,3;// 2表示起始位置从下标2开始,就是第三条记录,3表示长度


#取出工资排名在【5 - 9】名的员工
select
	ename,sal
from
	emp
order by
	sal desc
limit
	4,5;

分页

每页显示3条记录
	第一页:  limit 0,3	[0,1,2]
	第二页: limit 3,3	[3,4,5]
	第三页: limit 6,3	[6,7,8]
	第四页: limit 9,3	[9,10,11]

每页显示pageSize条记录
	第pageNo页:limit (pageNo - 1) * pageSize

公式:(pageNo - 1) * pageSize,pageSize

关于DQL语句的大总结

select
	...
from
	...
where
	...
group by
	...
having
	...
order by
	...
limit
	...

执行顺序
	1.from
	2.where
	3.group by
	4.having
	5.select
	6.order by
	7.limit

表的创建

建表的语法格式:(建表属于DDL语句,DDL包括:create drop alter)
create table 表名(字段名1 数据类型,字段名2 数据类型,字段名3 数据类型);

表名:建议以t_或者tbl_开始,可读性强,见名知意
字段名:见名知意
表名和字段名都属于标识符

关于MySQL中的数据类型

常见的数据类型:
varchar(最长255)
	可变长度的字符串
	比较智能,节省空间
	会根据实际的数据长度动态分配空间

	优点:节省空间
	缺点:需要动态非配空间,速度慢
char(最长255)
	定长字符串
	不管实际的数据长度是多少
	分配固定长度的空间去存储数据
	使用不恰当的时候,可能会导致空间的浪费

	优点:不需要动态分配空间,速度快
	缺点:使用不当可能会导致空间的浪费
int(最长11)
	数字中的整数型,等同于java中的int
	
bigint
	数字中的长整型,等同于java中的long

float
	单精度浮点型数据

double
	双精度浮点型数据

date
	短日期类型

datetime
	长日期类型

clob
	字符大对象
	最多可以存储4G的字符串
	比如:存储一篇文章,存储一个说明
	超过255个字符的都要采用CLOB字符大对象来存储
	Character Large Object

blob
	二进制大对象
	Binary Large Object
	专门用来存储图片、声音、视频等流媒体数据
	往BLOB类型的字段上插入数据的时候,例如插入一个图片、视频等,
	需要用IO流才行

插入数据insert(DML)

语法格式:
	insert into 表名(字段名1,字段名2,字段名3...)values(值1,值2,值3...);
	注意:字段名和值要一一对应(数量要对应,数据类型要对应)

MySQL笔记

注意:insert语句但凡是执行成功了,那么必然会多一条记录,没有给其他字段指定值的话,默认是null

MySQL笔记

insert语句中的字段名可以省略
	insert into t_studnet values(2);//错误

	//注意:前面的字段名省略的话,等于都写上了,所以值也要写上
	insert into t_student values(2,'李四','男',40,'one@qq.com');
	select * from t_student;
上一篇:入门 轻松玩转DC-DC电路,从这些技巧开始


下一篇:FastAPI(29)- Dependencies 依赖注入的初步使用