mysql 数据操作 增删改查

1、增
a、全列插入:
insert into 表名 values(...)
通常主键列是自动增长的,但是在全列插入时需要占位,通常使用0,插入数据后以
实际使用为准
例如:insert into student values(0,"tom",19,1,0);

b、缺省插入
insert into 表名(列名,列名,...) values(值1,值2,...)
例如:insert into student(name,age) values("lili",17);

c、同时插入多条数据
insert into 表名 values(),(),...
例如:insert into student values(0,"han",15,1,0),(0,"tyu",19,1,0),(0,"tfgm",29,1,0);

2、删
delete from 表名 where 条件
例如 delete from student where id = 3;

3、改
update student set 列1=值1,列2=值2,列3=值3,...where 条件;
update student set age=16 where id =5;
没有条件就是全部列都修改,慎用

4、查
a、基本语法
select *(列名称) from 表名
    from关键字后面是表名,表名数据来源
    select后面是表中的列名,如果是*,表示在查询结果中显示表的所有列
    在select后面的列名部分,可以使用as为列名起别名,这个列名显示在结果中
    如果要查询多个列,之间使用逗号分隔
    
b、消除重复行
在列名前面使用distinct可以消除重复行
    select distinct gender from student
    
c、条件查询
1)语法
select *from 表名 where 条件

2)比较运算符
等于      =
大于      >
小于      <
大于等于  >=
小于等于  <=
不等于    !=
如:select * from student where id >4;

3)逻辑运算符
and     并且
or      或者
not     非
select * from student where (id>2 and id<5);

4)模糊查询
select * from 表名 where 列名 like 表达式    
_       -->一个任意字符
%       -->任意多个任意字符

例如 select * from student  where name like "h%";

5)范围查询
in                  表示在一个非连续的范围内
    select * from student where id in (1,2,5);
between...and...    表示在一连续的范围内
    select * from student where id between 1 and 5;
    
6)空判断
select * from 表名 where 列名 is null;
注意null与""是不同的
判断空:is null
判断非空:is not null
    select * from student where address is null;

d、聚合
为了快速的统计数据,提供了5个聚合函数
1)count(*)  计算总行数,()中可以写*及列名
    select count(*) from student;
2)max(列)    求此列的最大值
    select max(id) from student where gender=0; 
3)min(列)     求此列的最小值
4)sum(列)    求此列的和
    select sum(age) from student;
5)avg(列)    求此列的平均值

e、分组
按照字段分组,表示此字段相同的数据会被放到一个集合中
分组后,只能查询出相同的数据列,对于有差异的数据列无法显示在结果集中
可以对分组后的数据进行统计,做聚合运算

语法 select 列1 列2 聚合... from 表名 group by 列1,列2,列3,...
    查询男女生总数
    select gender,count(*) from student group by gender;
    select name,gender,count(*) from student group by gender,age;
    
    分组后的数据筛选:select 列1,列2,聚合... from 表名 group by 
    列1,列2,... having 列1,... 聚合...
    例如:select gender,count(*) from student group by gender having gender=0;
    
where与having的区别:
    where是对原始数据查询,having是的分组的结果进行查询
    
f、排序
语法 select * from 表名 order by 列1 asc|desc, 列2 asc|desc,...
说明:
    将数据按照列1进行排序,如果某些列1的值相同,则按照列2排序...
    默认按照从小到大的顺序排序
    asc升序
    desc降序
        按照年龄排序
        select * from student  where gender=0 order by age desc;
        
g、分页
语法:select * from 表名 limit start/起始项,count/条数
    如: select * from student limit 1,4;
        select * from student where gender=0 limit 0,1;
        
5.关联
    建表语句
    create table class(id int auto_increment primary key,name varchar(20) not null,stuNum int not null)
    create table students(id int auto_increment primary key,name varchar(20) not null,
    gerder bit default 1 not null,classid int not null,foreign key (classid) references class(id));
    
    插入数据
    insert into class values(0,"english",23),(0,"math",53),(0,"chainese",34);
    insert into students values(0,"toma",1,1),(0,"lilei",0,2);
    
    关联查询:
    select students.name,class.name from class inner join students on class.id=students.classid;
    
    表A inner join 表B
        表A与表B匹配的行会出现在查询结果中
    表A left join 表B
        表A与表B匹配的行会出现在结果集中,外加表A中独有的数据,未对应的数据使用null填充
    表A right join 表B
        表A与表B匹配的行会出现在结果集中,外加表B中独有的数据,未对应的数据使用null填充

猜你喜欢

转载自blog.csdn.net/weixin_40938748/article/details/85346192