CREATETABLE student0(
id INTNOTNULLPRIMARYKEYAUTO_INCREMENT;
NAME VARCHAR(20),
age TINYINTUNSIGNEDDEFAULT18,
height DECIMAL(5,2),
gender ENUM("男","女","中"),DEFAULT"中",
cls_id INT);
crud
ALTERTABLE mytable ADD birthday DATE;-- 添加字段DESC mytable;ALTERTABLE mytable MODIFY birthday DATEDEFAULT"1990-01-01";-- 修改表字段ALTERTABLE mytable CHANGE birthday birth DATEDEFAULT"1990-02-02";ALTERTABLE mytable DROP hight;-- 删除表字段INSERTINTO mytable VALUES(6,"贝贝",1.80,"M","2000-01-01");-- 自增字段INSERTINTO mytable (NAME,height)VALUES("小白",1.60);-- 指定字段 插入语句 用() 保护INSERTINTO mytable (NAME,gender)VALUES("小a",1),("小b",1);-- 插入多行数据UPDATE mytable SET gender="F"WHERE NAME="小白";UPDATE mytable SET height="1.60",birth="1998-11-28"WHERE id=7;DELETEFROM mytable WHERE id=8;-- 物理删除 真正意义上的删除数据-- 逻辑删除 is_del 0 未删除 1 已删除-- 添加字段ALTERTABLE mytable ADD`is_del`INTDEFAULT0;-- 添加字段UPDATE mytable SET`is_del`=1WHERE id=10;-- 逻辑上的删除SELECT*FROM mytable;-- 查询整张表的数据 *代表所有的字段SELECT NAME,gender FROM mytable;-- 根据字段显示 SELECT(NAME)FROM mytable;-- 可以 SELECT NAME AS"姓名", gender AS"性别"FROM mytable;-- as 重命名SELECT s.`gender`FROM mytable AS s;-- as 重命名SELECTDISTINCT NAME FROM mytable;-- 去重SELECTDISTINCT NAME,gender FROM mytable;-- 多个字段 一行一行比较 去重SELECT*FROM mytable WHERE id>3;SELECT*FROM mytable WHERE NAME="小白";ALTERTABLE mytable ADD age INT;SELECT*FROM mytable WHERE age >=30OR age<=20;SELECT*FROM mytable WHERE id>3AND gender=2;SELECT*FROM mytable WHERENOT(age=20AND gender=2);SELECT*FROM mytable WHERE NAME LIKE"小%";-- 模糊查询SELECT*FROM mytable WHERE NAME LIKE"%白%";-- 含有 白的逻辑信息。SELECT*FROM mytable WHERE NAME LIKE"__";-- 任意俩个字符SELECT*FROM mytable WHERE NAME LIKE"__%";-- 至少含有2个字符的信息SELECT*FROM mytable WHERE id IN(1,4,6);-- id 是1,4,6或者的意思SELECT*FROM mytable WHERE age NOTIN(20,25);-- age 不是20 和25 的信息SELECT*FROM mytable WHERE id BETWEEN3AND6;-- id 在3-6之间SELECT*FROM mytable WHERE(id BETWEEN3AND6)AND gender="M";-- 增加可读性SELECT*FROM mytable WHERE(id NOTBETWEEN6AND9);-- id 不在6-9的学生信息SELECT*FROM mytable WHERE birth ISNOTNULL;-- 判断空 数据SELECTCOUNT(*)FROM mytable; 求 总人数
SELECTCOUNT(*)FROM mytable WHERE gender="F";-- 男性的人数SELECTMAX(age)FROM mytable;-- 查询最大的年龄SELECT NAME,MAX(age)AS"最大的年龄"FROM mytable;SELECTMIN(age)FROM mytable WHERE is_del=0;-- 未删除学生 年龄的最小值SELECTSUM(age)FROM mytable WHERE gender="f";-- 求和男性年龄SELECTAVG(age)FROM mytable WHERE is_del=0AND gender="m";SELECTROUND(AVG(age),2)FROM mytable WHERE is_del=0AND gender="f";ALTERTABLE mytable CHANGE id sid INTNOTNULLAUTO_INCREMENT;-- 修改此阶段 不需要修改主键 primary keyDESC mytable;
查询练习
SELECTCOUNT(*)FROM mytable GROUPBY gender;-- 计算男生与女生,保密的人数SELECT gender "性别",COUNT(*)FROM mytable GROUPBY gender;SELECT gender "性别",COUNT(*),GROUP_CONCAT(NAME)FROM mytable GROUPBY gender;-- 详细显示不同性别的名字-- 分组后查看总人数 还想产看总人数 with rollupSELECT gender ,COUNT(*)FROM mytable GROUPBY gender WITH ROLLUP;-- 查询组内年龄 姓名SELECT gender AS"性别",GROUP_CONCAT(NAME,age)FROM mytable GROUPBY gender;-- 姓名和年龄连在一起了SELECT gender AS"性别",GROUP_CONCAT(NAME,"-",age)FROM mytable GROUPBY gender;-- f返回结果用-来拼接-- 取数总数大于2的SELECT gender,COUNT(*)FROM mytable GROUPBY gender WHERECOUNT(*)>2;-- 会报错。分组之后的结果需要使用having进行过滤SELECT gender,COUNT(*)FROM mytable GROUPBY gender HAVINGCOUNT(*)>2;-- 查询男生、女生 平均年龄超过18岁的性别和名字SELECT gender ,AVG(age),GROUP_CONCAT(NAME)FROM mytable GROUPBY gender HAVINGAVG(age)>18;-- 排序 order by -- 查询年龄在18-30之间的男同学,按照年龄从小到大排序 升序SELECT*FROM mytable WHERE(age BETWEEN18AND30)AND gender="f"ORDERBY age;-- 默认升序SELECT*FROM mytable WHERE(age BETWEEN18AND30)AND gender="f"ORDERBY age ASC;-- 升序SELECT*FROM mytable WHERE(age BETWEEN18AND30)AND gender="f"ORDERBY age DESC;-- 降序 -- 查询年龄在18-30之间的女同学,id从高到低排序SELECT*FROM mytable WHERE(age BETWEEN18AND30)AND gender="f"ORDERBY sid DESC;ALTERTABLE mytable ADD weight FLOAT;DESC mytable;-- 年龄降序SELECT gender,NAME,weight,age FROM mytable WHERE(age BETWEEN18AND30)AND gender="f"GROUPBY age DESC,weight ASC;-- 限制SELECT*FROM mytable;SELECT*FROM mytable LIMIT2;-- 显示前两条SELECT*FROM mytable LIMIT6;-- 显示前6条SELECT*FROM mytable LIMIT3,3;-- 显示sid为4-6的数据 偏移量-- 制作分页SELECT*FROM mytable LIMIT0,3;-- 1SELECT*FROM mytable LIMIT3,3;-- 2SELECT*FROM mytable LIMIT6,3;-- 3-- 连接SELECT*FROM mytable INNERJOIN student;-- 直接内连接的数据集 是笛卡尔积SELECT*FROM mytable s INNERJOIN student c ON s.sid=c.id;SELECT s.name,c.name FROM mytable s INNERJOIN student c ON s.`sid`=c.`id`;-- 显示学生的所有信息,但只显示班级名称SELECT s.*,c.name FROM mytable s INNERJOIN student c ON s.`sid`=c.`id`;-- 查询 有能够对应班级的学生以及班级信息,按照班级进行排序SELECT*FROM mytable s INNERJOIN student c ON s.`sid`=c.`id`ORDERBY s.`sid`DESC;SELECT*FROM mytable s INNERJOIN student c ON s.`sid`=c.`id`ORDERBY s.`sid`ASC,s.`sid`ASC;-- 左连接SELECT*FROM mytable s LEFTJOIN student c ON s.`sid`=c.`id`;-- 查询最高的男生信息SELECT*FROM mytable WHERE height=1.82;-- 确定知道的身高SELECTMAX(height)FROM mytable WHERE gender="f";-- 男性的最高的身高SELECT NAME "名字",MAX(height)FROM mytable WHERE gender="f";-- 不行-- 子查询SELECT NAME,height FROM mytable s WHERE s.`height`=(SELECTMAX(height)FROM mytable WHERE gender="f");SELECT*FROM mytable WHERE height >(SELECTAVG(height)FROM mytable);-- 查询高于平均身高的学生信息SELECT*FROM mytable WHERE gender="m"AND(SELECTMAX(age)FROM mytable);SELECT*FROM mytable WHERE gender="m"AND age=(SELECTMAX(age)FROM mytable WHERE gender="m");