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...); 注意:字段名和值要一一对应(数量要对应,数据类型要对应)
注意:insert语句但凡是执行成功了,那么必然会多一条记录,没有给其他字段指定值的话,默认是null
insert语句中的字段名可以省略 insert into t_studnet values(2);//错误 //注意:前面的字段名省略的话,等于都写上了,所以值也要写上 insert into t_student values(2,'李四','男',40,'one@qq.com'); select * from t_student;