一、连接查询
根据表连接的方式分类:
内连接:等值连接、非等值连接、自连接
外连接:左外连接(左连接)、右外连接(右连接)
语法:join ... on ...
select ... from 表名1 join 表名2 on 条件 where ...
自连接:两张表相同
等值和非等值指的是on后面的条件
外连接:指的是join前面添加了left和right关键字导致的左连和右连
select ... from 表名1 left join 表名2 on 条件 where ...
以上语句表示:以表名1为主表
select ... from 表名1 right join 表名2 on 条件 where ...
以上语句表示:以表名2为主表
注意,内连接两张表没有主次之分,没有left和right就表示采用内连接
二、子查询
在mysql中子查询分为在where后和from后出现的子查询作用
在from后出现的子查询
语法:select * from (select * from 表名);
会把from后面的子查询当成是一张临时表
在where后出现的子查询
语法:select * from 表名 where sal > (select max(sal) from emp);
表示子查询查出sal最大值作比较
三、union合并查询结果集
这里涉及的只是一个查询的效率问题
语法:select 字段... from 表名 union select 字段... from 表名;
前提是两个查询结果集的列数必须是相同的才可以合并
四、limit的使用(掌握)
完整用法:limit startIndex, length
startIndex是起始下标,length是长度,起始下标从0开始。
limit的使用:取出3-5名员工
select 员工 from 表名 order by 字段 asc limit 2,3;
limit在分页的使用
pageNo:是指哪一页
pageSize:是指页面的数据有多少条
记公式:limit (pageNo-1)*pageSize , pageSize
应用:
每页显示pageSize条记录
第pageNo页:limit (pageNo - 1) * pageSize , pageSize
注意:mysql当中limit在order by之后执行
五、关于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
六、表的创建、删除
1、建表的语法格式:(建表属于DDL语句,DDL包括:create drop alter)
create table 表名(
字段1 数据类型,
字段2 数据类型,
字段3 数据类型
)
表名:建议以t_ 或者 tbl_开始,可读性强。见名知意。
字段名:见名知意。
表名和字段名都属于标识符。
关于mysql中的数据类型?
很多数据类型,我们只需要掌握一些常见的数据类型即可。
varchar(最长255)
可变长度的字符串
比较智能,节省空间。
会根据实际的数据长度动态分配空间。优点:节省空间
缺点:需要动态分配空间,速度慢。char(最长255)
定长字符串
不管实际的数据长度是多少。
分配固定长度的空间去存储数据。
使用不恰当的时候,可能会导致空间的浪费。优点:不需要动态分配空间,速度快。
缺点:使用不当可能会导致空间的浪费。varchar和char我们应该怎么选择?
性别字段你选什么?因为性别是固定长度的字符串,所以选择char。
姓名字段你选什么?每一个人的名字长度不同,所以选择varchar。int(最长11)
数字中的整数型。等同于java的int。bigint
数字中的长整型。等同于java中的long。float
单精度浮点型数据double
双精度浮点型数据date
短日期类型 语法表示:%Y-%m-%ddatetime
长日期类型 语法表示:%Y-%m-%d %h:%i:%sclob
字符大对象
最多可以存储4G的字符串。
比如:存储一篇文章,存储一个说明。
超过255个字符的都要采用CLOB字符大对象来存储。
Character Large OBject:CLOB
blob
二进制大对象
Binary Large OBject
专门用来存储图片、声音、视频等流媒体数据。
往BLOB类型的字段上插入数据的时候,例如插入一个图片、视频等,
你需要使用IO流才行。
2、表的删除
语法格式:drop table 表名;
如果表不存在会报错!
建议使用以下语法
drop table if exists 表名;
不会报错
七、表数据的插入、删除、修改
1、表数据的插入
语法:insert into 表名(字段1,字段2) values(字段1值, 字段2值);
字段和值必须一一对应
如果不写字段就表示选中全部字段
insert into 表名 values(全部字段的值);
也可以一次插入多条
语法:insert into 表名() values(),(),();
表示一次插入多条
2、表数据的修改
语法:update 表名 set 字段1 = ..., 字段2 = ..., 字段3 = ... where ...
必须加条件,否则会将数据全部修改
3、表数据的删除
语法:delete from 表名 where ...
必须加条件,否则会将数据全部删除
delete 只是把数据删除了,空间还在,可以恢复
start transaction; 开启事务
在这里执行delete之后数据支持恢复
rollback; 回滚
回滚执行之后数据便会恢复
truncate 物理删除 不支持用回滚恢复
语法: truncate table 表名;
会直接将数据全部清除,不能加条件
注意:truncate 比较重要,必须掌握!!!
使用的是物理删除,一次截断表操作,属于DDL
使用truncate的效率是比使用delete的效率还要高的,而且高很多,但是在使用之前必须
很严谨,要不然数据就没了!!!