sql分类
- DDL(Data Definition Languages-数据定义语言):create, drop, alter
- DML(Data Manipulation Language-数据操纵语言):select, delete, update, insert
- DCL(Data Control Language-数据控制语言):grant, revoke
一:DDL
1.创建数据库(create,drop)
- 展示用:show database test,切换用 use test;
- 用命令链接到数据库:mysql -u root -p
- 创建test数据库:create database test;
- 删除test数据库:drop database test;
2.创建表(create,drop,alter)
- 查看数据库中的表:show tables;展示表详情:desc user
- 创建表user:create table user( name varchar(10),age int(2),psd varchar(20));
- 删除表user:drop table user;
- 修改表user的psd 类型为varchar(50):alter table user psd modify varchar(50);
- 增加字段:alter table user add column sex varchar(5);
- 删除字段:alter table user drop column sex;
- 字段改名:alter table user change age age1 varchar(10);名字改为age1,类型改varchar(10)
- 新增birth加到name后:alert table user add birth string after name;
- 修改age加到最前面:alter table user modify age int(3) first;
- 更改表名为user1:alter table user rename user1;
二.DML(表:user-name,age,psd,salary-name,money)
1.插入数据:
插入记录:insert into user (name,psd,age)values (“张三” ,”123456”,30);
也可不指定字段,按顺序插入:insert into user values (“李四” ,”123456”,30,”95.12.16”);
也可一次插入多条:insert into user values(“hqq” ,”123”,15,”95.12.16”),(“joye” ,”123”,30,”95.12.16”)
2.修改数据
把hqq薪水改10000:update salary set money=10000 where name=”hqq”
也可以同时改多个表
3.删除数据
删除李四记录:delete from user where name=”李四”;
同时删多个表:delete u,s from user u,salary s where u.name=”hqq” and s.name=”joye”;
4.查询数据
查询全部:select * from user;
查询name 去重:select distinct name from user;
排序:select * from salary order by money,name;
Limit查询:(默认偏移量为0)
查询前5条记录:select * from salary order by money limit 5;
从第二条开始的5条记录: select * from salary order by money limit 1,5;
聚合查询:
聚合函数有:sum,avg,min,max,count
Group by:分类聚合字段,比如按照部门分类统计员工人数
Having:表示对分类后的结果再进行条件判断
With rollup:是可选语法,表名是否对分类聚合后的结果进行汇总
统计公司总人数:select count(1) from emp;
统计各部门人数:select deptname,count(1) from emp group by deptname;
统计部门人数大于1的:select deptname,count(1) from emp group by deptname having count(1)>1;
统计所有员工工资总和,最低,最高:select sum(salary),max(salary),min(salary) from emp;
即统计各部门人数,又统计总人数:select deptname,count(1) from emp group by deptname with rollup;
连接查询:
内连接:
隐式
显式:join或inner join
外连接:
左外连接:left join或left outer join
右外连接:right join 或 right outer join
全连接:full join 或 full outer join
交叉连接:(笛卡尔积)
隐式:内连接隐式去掉(改变)where 后面的条件
显式:cross join
注意:那么现在来说说join on和where区别
1、 on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。
2、where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须 返回左边表的记录)了,条件不为真的就全部过滤掉。
子查询:(常用关键字:in,not in,exists,not exists,=,!=等)
如果子查询结果唯一,可以用=代替in
某些时候子查询可以转换为表联合,即内连接那种方式,达到优化效果
记录联合:(union,union all)
注意两个select查询的结果列数、类型尽量一样