SQL语句分类:
DQL:数据查询语言(凡是带有select关键字的都是查询语句)
select……
DML:数据操作语言(凡是对表当中的数据进行增删改的都是DML)
insert delete update
insert 增
delete 删
update 改
DDL:数据定义语言(凡是带有create 、drop、alter的都是DDL)
主要操作的是表的结构、不是表中的数据。
create:新建,等同于增
drop:删除
alter:修改
TCL:事务控制语言,
包括:
事务提交:commit;
事务回滚:rollback;
DCL:数据控制语言
授权grant、撤销权限revoke……
常用命令:
简单查询语句
1、select … from …
2、desc dept;查询表结构
注意:在所有的数据库当中,字符串统一使用单引号括起来,单引号是标准。
条件查询语句:
select … from …. where 条件
= :等于;
<>或 != :不等于;
< :小于;
>= : 大于等于;
between … and … :两个值之间,等同于 >= and <=;
is null :为 null(is not null 不为空);
and :并且;
or :或者;
in :包含,相当于多个or(not in 不在这个范围中),注意不是区间,是具体值;
not not :可以取非,主要用在is或in中
like like :称为模糊查询,支持%或下划线匹配
% :匹配任意个字符
下划线 :一个下划线只匹配一个字符
排序查询语句:
order by …. asc :默认是升序
order by …. desc :降序
不常用命令:
select version() ——查看数据库版本号
select database()——查看当前是哪个数据库
单行函数处理:
lower
upper
substr
length
trim
strto_date 将字符串转换成日期
date_format 格式化日期
format 设置千分位
round 四舍五入
rand() 生成随机数
ifnull 可以将null转换成一个具体值
分组函数:
count 计数
sum 求和
avg 平均值
max 最大值
min 最小值
分组查询:
having
关键字的执行顺序:
1、from
2、where
3、group by
4、select
5、order by
总结(单表的查询)
select
…
from
…
where
…
group by
…
having
…
order by
…
从某张表中查询数据,
先经过where条件筛选出有价值的数据。
对这些有价值的数据进行分组。
分组之后可以使用having继续筛选。
distinct关键字(放在所有字段的前面,用于数据去重)
1、内连接:
等值连接:两个表中某个值相等
非等值连接:一个表中的条件在另一个表的值某个区间
自连接:一张表看作两张表
sql92语法缺点:结构不清晰,表的连接条件,和后期进一步筛选的条件,都放到了where后面。
sql99语法:表连接的条件是独立的,连接之后,如果还需要进一步筛选,再往后继续添加where
select
…
from
a
inner join
b
on
ab连接条件
where
筛选条件
2、外连接:主要是为了将其中一张表的数据全部查询出来,捎带着查询另外一张表,出现了主次关系
右外连接:ringht join
左外连接:left join
3、一条sql中内连和外连可以混合:
select
…
from
a
join
b
on
a和b的连接条件
join
c
on
a和c的连接条件
right join
d
on
a和d的连接条件
4、子查询
select语句中嵌套select语句,被嵌套的select语句称为子查询。
where查询中出现的子查询;
from后面的子查询,可以将子查询的查询结果当做一张临时表。
5、union合并查询结果集
合并时要求结果合并集的列数相同。
mysql允许数据类型不同,oracle不可以
6、limit
6.1、limit作用:将查询结果集的一部分去处理啊。通常使用在分页查询当中。
用法:
select
….
from
….
order by
……
limit 5 //取前5 limit 0,5;(0代表位置,5代表长度)
注意:mysql当中limit再order by之后执行!!!!!
记公式:limit (pageNo-1)*pageSize,pageSize
7、表的创建(建表)
7.1、建表的语法格式:(建表属于DDL语句,DDL包括:creat drop alter)
create table 表名(字段名1 数据类型,字段名2 数据类型,字段名3 数据类型);
create table (
字段名1 数据类型,
字段名2 数据类型,
字段名3 数据类型
);
表名:建议以t或者tbl_开始,可读性强。见名知意。
表名和字段名都属于标识符。
7.2、关于mysql中的数据类型?
varchar(最长255):
可变长度的字符串
比较智能,节省空间。
会根据实际的数据长度动态分配空间。
优点:节省空间
缺点::需要动态分配空间,速度慢
char(最长255)
定长字符串
不管实际的数据长度是多少
分配固定长度的空间去存储数据。
使用不恰当的时候,可能会导致空间的浪费。
优点:不需要动态分配空间,速度快。
缺点:使用不当可能导致空间的浪费。
int(最长11):
数字中的整数型,等同于JAVA的int
bigint:
数字中的长整数型,等同于java中的long。
float:
单精度浮点型数据
double:
双精度浮点型数据
date
短日期类型
datetime
长日期类型
clob
字符大对象
最多可以存储4G的字符串
比如:存储一片文章,存储一个说明。
超过255个字符的都要采用CLOB字符大对象来存储。
character Large OBject:CLOB
blob
二进制大对象
Binary Large OBject
专门用来存储图片、声音、视频等流媒体数据。
往BLOB类型的字段上插入数据的时候,例如插入一个图片、视频等,
你需要使用IO流才行。
7.4 插入数据insert (DML)
语法格式:
insert into 表名(字段名1,字段名2….)values(值1,值2…..);
insert插入多条记录: insert into 表名(字段名1,字段名2….,create_time)values(值1,值2…..,now()),(值1,值2…..,now()),(值1,值2…..,now());
注意:字段名和值要一一对应。
7.5插入日期:
mysql日期格式:
%Y 年
%m 月
%d 日
%h 时
%i 分
%s 秒
str_to_date(‘01-10-1990’,‘%d-%m-%Y’)
date_format(birth,‘%m/%d/%Y’)
7.6date和datetime两个类型的区别?
date是短日期,只包括年月日信息。
datetime是长日期:包括年月日时分秒信息。
7.7、修改update(DML)
语法格式:
update 表名 set 字段名1=值1,字段名2=值2…..where 条件;
注意:如果没有条件限制会导致所有数据全部更新。
7..8删除数据delete(DML)
语法格式:
delete from where 条件
注意:没有条件整张表会全部删除!
1、快速创建表:
create table emp2 as select from emp;
create table empx as select from emp where ….;
insert:
insert into dept select from dept//很少用
2、快速删除表中的数据:
delete from dept_bak;
delete语句删除数据的原理?
表中的数据被删除了,但是这个数据在硬盘上的真实存储空间不会被释放!!!
缺点:删除效率低。
有点:支持回滚,后悔了可以再回滚,rollback。
truncate语句删除数据的原理?
用法:truncate table dept;
这种删除效率比较高,表被一次截断,物理删除。
这种删除缺点:不支持回滚。
这种删除优点:删除速率快。
约束
7.1、什么是约束(constraint)?
在创建表的时候,我们可以给表中的字段加上一些约束,来保证这个表中数据的完整性、有效性!!!
约束的作用就是为了保证:表中的数据有效!!
7.2、约束包括哪些?
非空约束:not null
唯一性约束:unique
主键约束:primary key(简称PK)
外键约束:foreign key(简称FK)
检查约束:check(mysql不支持,oracle支持)
7.3、非空约束:
非空约束not null约束的字段不能为NULL。
not null 只是列级约束,没有表级约束;
示例:
drop table if exists t_vip;
create table t_vip(
id int,
name varchar(255) not null
);
7.4、唯一性约束:unique
唯一性约束unique约束的字段不能重复,但是可以为NULL。
多个字段可以联合唯一
示例:
drop table ifexists t_vip
create table t_vip(
id int,
name varchar(255) unique,
email varchar(255)
);
联合唯一约束示例:
drop table if exists t_vip;
create table t_vip(
id int,
name varchar(255),
email varchar(255),
unique(name,email);
);
not null 和unique联合:
drop table if exists t_vip;
create table t_vip(
id int,
name varchar(255),
email varchar(255) not null unique,
);
7.5主键约束(primary key ,简称PK)
主键值是每一行记录的唯一标识。
可以复合主键,建议使用单一主键。
主键建议使用int,bigint,char等类型,不建议使用varchar来做主键。
示例:
drop table if exists t_vip;
create table t_vip(
id int primary key,
name varchar(255)
);
7.6、外键约束
示例:
create table t_class(
classno int primary key,
classname varchar(255),
);
create table t_student(
no int primary key auto_inorement,
name varchar(255),
cno int,
foreign key(cno) references t_class(classno)
);
索引:
创建索引:
mysql>create index emp_ename_index on emp(ename);
删除索引:
mysql>drop index emp_ename_index on emp;
explain:
explain select from emp where ename=’KING’
