SQL语言一共分为四大类:DDL(数据库定义语言)、DML(数据库操纵语言)、DQL(数据库查询语言)、DCL(数据库控制语言)
一、DDL:数据库定义语言,主要操作对象是数据库和表结构
- 查看数据库:show database;
- 使用数据库:use 库名;
- 创建数据库:CREATE database 库名;
- 删除数据库:DROP database 库名;
- 查看表结构:DESC 表名;
- 创建表
CREATE TABLE 表名(
列名1 类型(长度) [约束],
列名2 类型(长度) [约束],
……)
- 添加一列:ALTER TABLE 表名 ADD 列名 数据类型;
- 删除一列:alter table 表名 drop 列名;
- 修改表的字段类型:ALTER TABLE 表名 MODIFY 列名 数据类型;
- 修改表名:ALTER TABLE 旧表名 TO 新表名;**
- 修改表的字符集:ALTER TABLE 表名 CHARACTER SET 字符集名称;
- 查看创表细节:show create table 表名;
二、DML:数据库操纵语言,主要是inster、update和delete
- 插入单条数据:insert into 表名(字段1,字段2...) values(值1,值2…);
-
插入多条数据:insert into 表名(字段1,字段2...) values(值1,值2…) ,(值1,值2…);
注:列名与列值的类型、个数、顺序要一一对应、值不要超出列定义的长度、插入的日期和字符一样,使用引号括起来。 - 修改全表的字段值:update 表名 set 字段=值;
- 带条件修改指定字段的值:update 表名 set 字段=值 where 条件;
- 带条件删除:delete from 表名 where 条件;
-
删除表数据:delete from 表名;或 truncate table 表名;
注:truncate是删除这个表,再重新创建一个一样的表(字段一样),属于DDL,delete是一条一条记录的删除。属于DML。
三、DQL:数据库查询语言,主要是select
前言:
1,总的原则:select 查询字段 from 表名 where 条件 group by 分组字段 having 条件 order by 排序 limit;
2,执行顺序:from > where > group by > having>order by > select
3,条件查询(where)比较运算符:=(等于)、!=(不等于)、>(大于)、>=(大于等于)、<(小于)、<=(小于等于)
4,条件查询(where)关键字:between...and(值在什么范围内)、is null (为空)、is not null(不为空)、and 与、or 或、not 非、in(set)固定范围值
- 查询所有的列:select * from student;
- 查询指定的列:select 列1,列2,列3... from 表名;
- 数据去重(distinct):select distinct 列... from 表名;
-
结果运算(必须要是数据型): select 列1 [+-*/] 列2 from 表名;
注:很多记录的值为null,因为任何东西与null相加还是null,所以运算下面使用了把null转换成了数值0的函数 IFNULL。例:select ifnull(age,0)+ifnull(score,0) as test from student; - 设置别名(AS):select 列1 as 别名1,列2 as 别名2 from 表名;# as可以省略不写
- 拼接结果:select concat(列1,列2) from 表;
- 查询结果排序:select * from 表名 order by 列 [asc/desc]; # asc升序,desc降序,若不写默认asc
- 聚集函数( 作用于一组数据,并对一组数据返回一个值 )
COUNT:统计结果记录数,若统计的是列,列中为Null,那么count将不会计算值
select count(*) from employee; # 查询所有记录数
select count(perfmoance) from employee; #查询有绩效的人数
MAX: 统计计算最大值 MIN: 统计计算最小值
select max(salary),min(salary) from employee; #查询最高工资和最低工资
SUM: 统计计算求和
select sum(salary+ifnull(perfomance,0)) from employee; #查询所有员工的月薪+绩效和
AVG: 统计计算平均值
select avg(salary) from emplpyee; #查询平均工资
- 模糊查询(like): % 表示多个字符,_ 表示一个字符,可以多次使用
select * from 表名 where 列 like %A; # 以A结尾
select * from 表名 where 列 like A%; # 以A开头
select * from 表名 where 列 like %A%; # 包含A
select * from 表名 where 列 like '_A_B%'; #第2个字符是A且第4个字符是B
- 条件查询:条件查询就是在查询时给出where子句,在where子句中可以使用一些运算符及关键字:
select 查询字段 from 表名 where 条件;
- 比较运算符:=(等于)、!=(不等于)、>(大于)、>=(大于等于)、<(小于)、<=(小于等于)
select 字段 from 表名 where 列 = 值;
- 关键字:范围查询 between...and(值在什么范围内)
where 列 between 条件1 and 条件2; # 列在这个区间的值
where 列 not between 条件1 and 条件2; # 不在这个区间
where !( 列 between 条件1 and 条件2 ); # 不在这个区间
- 关键字:集合查询 in(set)
select * from 表名 where 列 in(值1,值2); # 列中的数据是in指定值里面的
select * from 表名 where 列 not in(值1,值2); # 列中的数据不是in指定值里面的
- 关键字:null查询(注意:这里null前面是is,不是 = 号)
select * from 表名 where 列 is null; # 查询列为空的数据
select * from 表名 where 列 is not null;# 查询列不为空的数据
- 分组查询(group by):将查询结果按照1个或多个字段进行分组,字段值相同的为一组
select gender from employee group by gender;
注:当group by 单独使用时,只显示出每组的第一条记录,所以意义不大。
- group by+group_concat(字段名):表示分组之后,根据分组,使用group_concat(字段名)来放置每一组的某字段的值的集合。
select gender,group_concat(name) from employee group by gender;# 根据性别分组,并显示分组下的所有姓名
- group by+聚合函数
select dept,group_concat(name) ,sum(salary) from employee group by dept; #根据dept分组,并查看每组的人员姓名以及每组的薪资最大值
select dept,sum(salary),count(*) from employee group by dept; # 查询每个部门的部门名称和每个部门的工资和以及部门人数
select dept,count(*) from employee where salary>1500 group by dept; # 查询每个部门的名称以及每个部门工资大于1500的人数
- group by+having:用来分组后指定一些条件来限制输出查询结果
查询工资总和大于9000的部门名称以及工资和
select dept,sum(salary) as ssum from employee group by dept having ssum>9000;
查询工资大于2000的,工资和大于6000的部门名称以及工资和
select dept,group_concat(salary),sum(salary) as ssum from employee where salary>2000 group by dept having ssum >9000;
1,where 作用于分组前,用于表和视图;having作用于分组后的记录,用于选择满足条件的组。
2,where是对分组前记录的条件,如果某行记录没有满足where子句的条件,那么这行记录不会参加分组
3,having只作用于group byhaving后面,可以使用分组函数(统计函数)
网友评论