数据操作
2、删
格式:delete from 表名 where 条件;
示例:delete from student where id=4;
注意:没有条件是全部删除,慎用!
3、改
格式:update 表名 set 列1=值1, 列2=值2, … where 条件;
示例:update student set age=16 where id=7;
注意:没有条件是全部的列修改,慎用!
4、查
格式:select * from 表名;
示例:select * from student;
说明:查询表中的全部数据
①基本语法
格式:select * from 表名;
说明:
a、from关键字后面是表名,表示数据来源于这张表
b、select后面写表中的列名,如果是 * 表示在结果集中显示表中的所有列
c、在select后面的列名部分,可以使用 as 为列 起别名,这个别名显示在结果集中
d、如果要查询多个列,之间使用逗号分隔
示例:
select * from student;
select name, age from student;
select name as a, age from student;
②消除重复行
在select后面列前面使用distinct可以消除重复的行(只留不同)
示例:
select gender from student;
select distinct gender from student;
③条件查询
a、语法
select * from 表名 where 条件
b、比较运算符
等于 =
大于 >
小于 <
大于等于 >=
小于等于 <=
不等于 !=或<>
需求:查询id值大于8的所有数据
示例:select * from student where id>8;
c、逻辑运算符
and 并且
or 或者
not 非
需求:查询id值大于7的女同学
示例:select * from student where id>7 and gender=0;
先插入3条数据
insert into student values(0, "李白", 18, 1, "北京", 0), (0, "李信", 18, 1, "武汉", 0), (0, "李清照", 18, 0, "北京", 0);
d、模糊查询
like
%接任意多个任意字符
_接一个任意字符
需求1:查询姓李的同学
示例:select * from student where name like "李%";
需求2:查询姓1个李的同学
示例:select * from student where name like "李_";
e、范围查询
in 表示在一个非连续的范围内
between...and... 表示在一个连续的范围内
需求:查询编号8、10、12的学生
实例:select * from student where id in(8, 10, 12);
需求:查询编号为6到8的学生
示例:select * from student where id between 6 and 8;
先插入1条数据
insert into student(name, age, gender) values(“公孙离”, 19, 0);
f、 空查询
注意: null 与 ""不同
判断空: is null
判断非空:is not null
需求:查询没有地址的同学
示例:select * from student where address is null;
g、优先级
小括号 > not非 > 比较运算符 > 逻辑运算符
and比or优先级高,如果同时出现并希望 先选 or ,
需要结果()来使用
④聚合
为了快速得到统计数据,提供5个聚合函数
a、count(*) 表示计算总行数,括号中可以写 * 和列名
需求:查询学生的总成绩
示例:select count(*) from student;
b、max() 计算此列的最大值
需求:查询女生的编号最大值
示例:select max(id) from student where gender=0;
c、min() 计算此列的最小值
需求:查询女生的编号最小值
示例:select min(id) from student where gender=0;
d、sum() 计算此列的和
需求:查询所有学生的年龄和
示例:select sum(age) from student;
e、avg() 计算此列的平均值
需求:查询所有女生的年龄的平均值
示例:select avg(age) from student where gender=0;
⑤分组
按照字段分组,表示此字段相同的数据会被放在一个集合中。
分组后,只能查询出相同的数据列,对于有差异的数据列无法显示在结果集合中
可以对分组后的数据进行统计,做聚合运算
语法: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, 列3, ... having 列1, ... 聚合... ;
示例:
select gender, count(*) from student group by gender having gender;
where与having的区别:
where 是对from后面指定的表进行筛选,属于对原始数据的筛选
having 是对group by的结果进行筛选
⑥排序
语法:select * from 表名 order by 列1 asc|desc, 列2 asc|desc, ...;
说明:
a、将数据按照列1进行排序,如果某些列1的值相同,则按照列2进行排序
b、默认按照从小到大的顺序排排序(默认asc升序)
c、asc 升序
d、desc 降序
需求:按照年龄排序
示例:
select * from student order by age;
select * from student order by age asc;
需求:将没有被删除的数据按年龄排序
select * from student where isDelete=0 order by age;
select * from student where isDelete=0 order by age asc;
⑦分页
语法:select * from 表名 limit start, count;
说明:start索引从0开始, count计数要看几条
示例:
select * from student limit 0,3;
select * from student limit 3,3;
select * from student where gender=1 limit 0,3;
5、关联
建表语句:
1、先建一个class表
create table class(id int auto_increment primary key, name varchar(20) not null, stuNum int not null);
2、
create table students(id int auto_increment primary key, name varchar(20) not null, gender bit default 1, classid int not null, foreign key(classid) references class(id));
在class班级表插入一些数据
insert into class values(0, "mysql01", 55), (0, "mysql02", 66), (0, "mysql03", 77), (0, "mysql05", 88);
在students表插入一些数据
insert into students values(0, "tom", 1, 1); --插入成功
insert into students values(0, "大乔", 0, 2); --插入成功
insert into students values(0, "妲己", 1, 10); --插入失败,因为 10classid 是外键,关联是class班级表的id(范围1-4) 没有10的.
查询 students学生表所有数据 select * from students;
关联查询
select students.name, class.name from class inner join students on class.id=students.classid;
学生的名字, 和在哪个班级 from从 class班级表中 inner join关联 students表 on由 class.id=students.classid
(students学生表的classid 对于 的是 班级class的id)
分类
1、表A inner join 表B
表A与表B匹配的行会出现在结果集中
2、表A left join 表B
表A与表B匹配的行会出现在结果集中,外加表A中独有的数据,未对于的数据使用NULL填充
select students.name, class.name from class left join students on class.id=students.classid;
首先在插入几个学生
insert into students values(0, "西施", 0, 3), (0, "孙尚香", 0, 3), (0, "瑶", 0, 2), (0, "蔡文姬", 0, 3), (0, "貂蝉", 0, 3);
3、表A right join 表B
表A与表B匹配的行会出现在结果集中,外加表B中独有的数据,未对于的数据使用NULL填充
select students.name, class.name from class right join students on class.id=students.classid;