SQL分类

SQL 主要语句可以划分为一下3类

* DDL:数据定义语言,这些语句定义不同的数据段、数据库、表、列、索引等数据库对象。常用语句关键字主要包括create,drop,alter等
* DML:数据操作语句,用于添加、删除、更新和查询数据库记录,并检查数据完整性。常用语句关键字主要包括
insert,delete,update和select等。
* DCL数据控制语句,用于控制不同数据段直接的许可和访问级别的语句。这些语句定义了数据库、表、字段、用户的访问权限和安全级别。主要
的语句包括关键字grant、revoke等
DDL语句

是对数据库内部的数据表结构的进行添加
、删除、修改等操作语言,它和DML语句最大的区别是DML只是对表内部数据操作,而不涉及表的定义、结构的修改,更不会涉及其他对象。DDL更多地由数据库管理员(DBA)使用。
连接mysql服务器 mysql -uroot -p 创建数据库test1 create database test1; 显示有哪些数据库 show
databases; //mysql 自动创建的表有
information_schema:主要存储了系统中的一些数据库信息,比如用户表信息、列信息、权限信息、字符集信息、分区信息等等
cluster:存储了系统的集群信息 mysql:存储了系统的用户权限信息。 test:系统自动创建的测试数据库,任何用户都可以访问 选择数据库 use
test1 显示test1数据库中创建的所有表 show tables 删除数据库 drop database test1; 创建表 create table
emp(ename varchar(10),hiredata date,sal decimal(10,2),deptno int(2)); 查看表定义
desc emp; 查看创建表的定义 show create table emp; 删除表 drop table emp; 修改表 alter table
emp modify ename varchar(20); 增加表字段 alter table emp add column age int(3);
删除表字段 alter table emp drop column age; 字段改名 alter table emp change age age1
int(4); change
和modify都可以修改表的定义,不同的是change后面需要写两次列名,不方便,但是change的优点是可以修改列名称,则modify则不能 修改字段排序
alter table emp add birth date after ename; alter table emp modify age int(3)
first; 更改表名 alter table emp rename emp1;


DML语句 
是指对数据库中表记录的操作,主要包括表记录的插入(insert)、更新(update)、删除(delete)和查询(select)。
插入记录 insert into
emp(ename,hiredate,sal,deptno)values('zzx1','2000-01-01','2000',1);
也可以不用指定字段名称,但是values后面的顺序要和字段的排列顺序一致 inset into
emp('zzx1','2000-01-01','2000',1);
含可空字段、非空但是含有默认值的字段、自增字段、可以不用再insert后的字段列表里面出现,values后面只写对应字段名称的value,没写的字段可以自动设置为null、默认值、自增的下一个数字
批量增加用逗号隔开 insert into dept values(5,'xxx'),(8,'xxx'); 更新记录 update emp set
sal=4000 where ename='xxx'; 删除记录 delete from emp where ename='doney'; 查询记录
select * from emp; *表示所有记录,也可以用逗号隔开的字段来选择查询 查询不重复的记录 select distinct deptno
from emp; 条件查询 用where关键字来实现,可以使用<>!=等多条件可以使用or、and等 排序和限制
desc和asc是排序关键字,desc是降序、asc是升序排列 ORDER BY 排序,默认是升序 select * from emp order by
sal; 如果排序字段的值一样,则值相同的字段按照第二个排序字段进行排序,如果只有一个排序字段,则相同字段将会无序排序 select * from emp
order by deptno,sal desc; 限制 select * from emp order by sal limit 3;
//前者是起始偏移量,后者是显示行数 select * from emp order by sal limit 1,3; limit 和order by
一起使用来做分页 聚合 用户做一下些汇总操作 sum(求和),count(*)(记录数),max(最大值),min(最小值) with rollup
是可选语法,表示是否对分类聚合后的结果进行再汇总 having 表示对分类后的结果在进行条件的过滤。 select deptno,count(1) from
emp group by deptno having count(1)>=1;


表连接

大类上分为外连接和内连接 
外链接 又分为左连接和右连接

左连接:包含所以的左边表中的记录甚至是右边表中没有和它匹配的记录。 
右连接:同上
select ename,detname from emp left join dept on emp.deptno=dept.deptno;
左连接和右连接可以相互转换
子查询select * from emp where deptno in(select deptno from dept);
如果子查询记录唯一,可以使用=替代in select * from emp where deptno =(select deptno from dept
limit 1);

记录查询 
将两个表的数据按照一定的查询出来后,将结果合在一起显示

union all 是将结果集合并在一起,而union是将union all后的结果在进行一次distinct,去除重复
select deptno from emp union all select deptno from dept; select demtno from
emp union select deptno from dept;