数据库的基本知识
请移步到 百度百科–数据库
sql基础知识
1:简介
sql是结构化查询语言(Structured Query Language)简称SQL
2:分类
- DDL(数据定义语言)
其中包括 create ,alter,drop,truncate 这类的语言,也就是对表结构进行操作的语言 - DML(数据操纵语言)
insert ,delete,update,select 这类的语言的我们经常用到的语言 - DCL(数据控制语言)
grant ,revoke set role,这类的语言就是对用户权限的管理
3:简单的操作
insert 的简单用法
insert 用法有三种
1: insert into 表名 values(属性值1,属性值2,…);
2:insert into 表名 (字段名字1,字段名字2, …) values (属性值1,属性值2,…);
3: insert into 表名字 as (select 语句)
上面的三种用法, 在实际中最常用的是第三种,因为这个是可以批量插入的,因为实际开发的数据可能是亿万级数据,之前的一条一条不现实
select的用法
select 语句是DML语言中最不好用的,数据的查询是比较复杂的,并且还在考虑查询效率的问题,一条select 语句 执行下去,在数据库里面的执行步骤要清晰,这样才可以sql调优
格式:
select 字段名
from 表明
where 条件
group by 基于那个字段分组
having 对组处理
order by 排序
limit 开始行 结束行;
高级操作
连接查询
这里用数据来表示 ,我们有下面的表结构
数据如下:
- 自连接
自己和自己连接
问题:查询那些人是管理人员
select distinct t2.id
from test1 t1,
test t2
where t1.manager_id=t2.id;
- 内连接
关键字 inner join 可以省略掉inner
问题:查询那些人是管理人员
select distinct t2.id
from test1 t1,
inner join test1 t2
on t1.manager_id=t2.id;
- 左外连接
关键字 left outer join
问题:查询谁是 老板
select t1.id as 老板
from test1 t1
left outer join test1 t2
on t1.manager_id=t2.id
where t2.id is null;
在这里还有思考 为什么不把 上面的 where 换为 and呢?
强调一点: on 是在没有进行笛卡尔乘积之前, 去取数据,这里如果是on的话,在表中没有一条id是null的,这样编译都不会通过的
where 和 on 的区别:where在所有操作弄完之后,当然包括笛卡尔积之后,但是on是在之前,先把数据拿出来,再操作
4. 右外连接
关键字 right outer join
问题:那些人是普通员工
select t1.id
from test1 t2
right outer join test1 t1
on t2.manager_id=t1.id
where t2.id is null;
- 全连接
就是左外连接 + 右外连接
子查询
- 关联子查询
关联子查询就是在子查询里面还引用主查询的字段,有点像 双层循环
查询顺序
先是将主表中的数据送一个进来,之后子查询查询,之后在送出去给主查询
这种就很适合 主表中数据多,子表中数据少的情况 - 非关联子查询
只执行一次
执行顺序
先是执行子表,然后用子表中的数据去主表中找
这种就很适合 子表数据多的情况,