一、Union 合并
union:是实现两个查询结果的合并。
例如:当我们查询员工名字为manager 和 salesman的员工名字和 工作?
select e.ename,e.job from emp e where e.job='manager' or e.job = 'salesman';
select e.ename,e.job from emp e where e.job in('manager','salesman');
以上两条cmd 命令查询结果是一样的:
但什么的来两条查询的效率并不是很高,这个时候我们就可以用union 来提高效率:
union的效率更高,在我们doc命令当中,我们每一次表的连接,那么根据笛卡尔积就知道次数会是乘积,当再连接一个表的时候,就又一个乘积,所以我们用union 就然乘法变成加法,减少了次数,提高了效率!
注意:mysql使用union 的时候,要注意拼接的列要相等,否则会报错!当select后面字段的内容不一样的时候,在mysql语句当中可以运行,但是在Oracle当中会报错!
二、Limit
limit: 将查询结果当中的数据取出一部分,而不全部取出。
使用方法:limit 从第几条开始,一共取多少条;(默认从0开始,如果不写从第几条开始也是默认从0开始)
注意:mysql当中limit 是放在order by 后面的!
例如,取出第4条数据开始,一共取5条。
分页公式:limit (pageno-1)*pagesize ,pagesize
三、建表(DDL)
创建一个表格:create table 表名(字段名1:数据类型,字段名2:数据类型,字段名3,数据类型.......);其中表名建议以t_ 或tbl_开头是效率最高的。
快速创建表:相当于将emp表的查询结果当中一张临时表,让emp2拷贝下来。
例如:create table emp2 as select * from emp;
mysql 的数据类型:
varchar(最长255):可变长度字符串,会根据实际的长度而动态分配长度,节省空间。
char(最长255):不可变长度字符串,起始规定多长实际就多长。使用不恰当的时候,会造成空间的浪费。
varchar 和 char 对比:varchar 是节省了空间,同时效率会相对来说低,而char 不节省空间 但运行效率会高一些。
int(最长为11): 整数类型,等同于Java当中的int
bigint: 长整型,等同于Java当中的long
double:双精度浮点型
float:单精度浮点型
date:短日期(包括年月日)
datetime:长日期(包括年月日时分秒)
clob:字符大对象,最多可以储存4G的数据。例如储存一篇文章等等。当数据长度大于255的时候,就要采用clob类型了!
blob:二进制大对象,储存一些视频,音频,图片等等,但需要IO流。
注意:在mysql 数据库当中的varchar (5) 当中的5 代表是长度5,而不是字节,例如:5个汉子和5个英文字符都是长度为5.
删除表:
drop table 表名,但是当表不存在的时候,这样写会报错。
drop table if exists 表名,当表存在的时候删除,不会报错。
insert(增)
命令:insert into 表名(字段名1,字段名2,字段名3.......) values (值1,值2,值3......)
当字段名省略的时候,意为字段名区别存在,就不能只单独写一个值了。
例如:insert into 表名 values (值1,值2,值3.......);
例如:insert into t_person(no,name,sex,age,email) values (100001,'张三','男',42,'329125@qq.com')
当我们写成:insert into t_person(no) values(100003);
同时也可以插入多条数据:
例如:insert into t_user values (1,'zangsan',12,now()),(2,'wangwu',23,now()),(3,'lishi',44,now());
当查看字段的默认值的时候,会发现default 都是 默认null.
如果我们想自己指定默认值(default )的时候:
create table t_person1(
no int(10),
name varchar(32),
sex char(10) default '男',
age int(3)
);
str_to_date:就是将字符串类型转换为日期类型。
date_format:将日期类型转换为字符串类型。
mysql 日期格式:
%Y 年(必须大写) %m 月
%d 日 %h 时
%i 分 %s 秒
str_to_date('日期','格式');
例如:
create table t_user(no int(10),name varchar(10),age int(3),brith date);//创建t_user 表格
insert into t_user(no,name,age,brith) values (100001,'张三',45,str_to_date('1994-4-9','%Y-%m-%d');
当我们输入日期的格式为%Y-%m-%d这样的标准格式那么就不用谢str_to_date这个函数将字符串转换为日期了,默认就自动转换了!
insert into t_user(no,name,age,brith) values (100002,'李四',45,'1993-4-9');
date_format: 将日期转换为特定格式的字符串
例如:select no,name,age,date_format(brith,'%d/%m/%Y') as brith from t_user;
datetime在mysql 当中的默认日期格式:%y-%m-%d %h:%i:%s (有空格在%d 和 %h之间)
例如:insert into t_user(id,name,age,brith) values (100003,'wangwu',46,'1999-11-6 13:24:5');
四、now()函数
now函数:获取当前时间
例如:insert into t_user(id,name,age,brith) values(100004,'zhaoliu',55,now());
update(DML修改表格)
格式:update 表名 set 字段名1=值1,字段名2=值2,字段名3=值3 where 条件
例如:update t_user set name='lishi',age=20 where id=100004;
delete(删除)
格式:delete from 表名 where 条件;
注意:当没有where条件判断的时候,删除的是整张表格内部的数据,但这张表格并没有删除!
例如:delete from t_user where id = 100003;
在表中插入查询后的表格(查询子句),(注意:必须插入前的表格和查询后的表格的字段必须是一致的! )
例如:insert into test2 select * from dept ;
一次插入多条记录:
insert into test2(deptno,dname,loc) values (20,'APQI','NEW YORK'),(30,'TENXUN','BOSTON'),(10,'STTP','CCTV');
delete: 这种删除数据的方式效率比较低,而且数据在硬盘当中的储存空间还存在,删除后的数据可以恢复(rollback)!
truncate: 表被一次截断,这个表当中的数据是不可恢复的。
格式:truncate table 表名;