查询语句
排序查询:order by
orderby排序字段1 排序方式1,排序字段2 排序方式2,
注意:当有多个排序方式时候,只有第一排序方式排完的数据一样才按第二排序方式排序。
默认升序排序ASC,降序排序DESC
聚合函数:将一列数据作为一个整体,进行纵向计算。
count个数,max最大值,min最小值,sum和,avg平均值
注意:聚合函数的计算排除了null值
解决:1统计非空的列,主键
2 IFNULL函数 ifnull()
CREATE TABLE student(
id INT,
NAME VARCHAR(30),
age INT,
score DOUBLE(5,1),
birthday DATE
);
--查看表结构
DESC student;
--添加数据
-- insert intostudent (id,name,age) values (1,'小明',20),(3,'小强',21);
INSERT INTO studentVALUES (1,'小红',18,90,'20000501'),
(2,'小明',16,99.1,'20000501'),
(3,'小强',18,60,'20000501'),
(4,'大明',26,99.1,'20000501'),
(5,'大强',28,60,'20000501');
SELECT *FROM student;
SELECT *FROM studentORDER BY age ,score DESC ;--用age升序排序,如果age一样用score降序排序
SELECT COUNT(NAME)FROM student;--计算name的个数
SELECT AVG(score)FROM student;--计算score的平均分
SELECT MAX(score)FROM student;--计算score的最大值
分组查询:
groupby
where和having的区别?
1 where在分组之前进行限定,如果不满足条件,则不参加与分组。having在分组之后进行限定,如果不满足结果,则不会被查询出来
2 where后不可以跟聚合函数,having可以进行聚合函数的判断。
分组前过滤用where,分组后过滤用having
1按照性别分组。查询男女的平均分
selectsex,avg(score) from student group by sex;
2按照性别分组。分别查询男、女同学的平均分,人数
SELECTsex , AVG(score),COUNT(id) FROM student GROUP BY sex;
3按照性别分组。分别查询男、女同学的平均分,人数 要求:分数低于70分的人,不参与分组
SELECT sex , AVG(math),COUNT(id) FROMstudent WHERE score > 70 GROUP BY sex;
4. 按照性别分组。分别查询男、女同学的平均分,人数 要求:分数低于70分的人,不参与分组,分组之后。人数要大于2个
SELECTsex , AVG(math),COUNT(id) FROM student WHERE math > 70 GROUP BY sex HAVINGCOUNT(id) > 2;
或者把上面的count(id)起别名为人数,方便后面的查询(起别名用as,as可以省略)
分页查询:
limit 开始索引,每页的查询条数;
规律:开始的索引 = (当前的页码 - 1) * 每页显示的条数
注意:limit是方言,只在mysql中有作用,orcal中是其他的。
每页显示3条记录 SELECT *FROM student LIMIT 0,3;
SELECT *FROM student LIMIT 3,6;
约束
约束:对表中数据进行限定,从而保证数据的正确性,有效性,完整性
分类:
1.主键约束:primary key(自带非空和唯一约束)
2.非空约束:not null
3.唯一约束:unique
4.外键约束:foreign key
非空约束使用 not null
1.创建表时添加约束
namevarchar(30) not null;
2建过表添加约束
altertable student modify name varchar(30) not null;
3.删除name的非空约束
altertable student modify name varchar(30);
唯一约束使用 unique
创建表时添加唯一约束
numbervarchar(20) unique; -- 可以有null但是只能有一个null
创建表后添加唯一约束:
altertable student modify number varchar(20) unique;
删除唯一约束:
altertable student drop index number;
主键约束使用:primary key
主键是表中记录的唯一标识,一张表只能由一个字段为主键,主键是非空且唯一的
创建表时候添加主键约束:
idint primary key,
创建表后添加主键:
altertable student modify id int primary key;
删除主键
altertable student drop primary key;
自动增长:auto_increment 让某一列使用完成值的自动增长
一般自动增长配合主键,
创建表时添加主键约束,并完成自动增长primary key auto_increment;
添加自动增长:alter table stu modify id intauto_increment;
删除自动增长:alter table stu modify id int;
外键约束:
constraint外键名 foreign key (外键列) references主表名;
创建表时候添加外键约束:
在创建表的最后加上:
constraint外键名称 foreign key (外键列名称)references 主表名称(主表列名称)
创建表之后,添加外键
altertable 表名 add constraint 外键名称foreign key(外键字段名称) references 主表名称(主表列名称);
删除外键
ALTERTABLE 表名 DROP FOREIGN KEY 外键名称;
级联操作:
添加级联操作
1.添加级联操作
语法:ALTER TABLE 表名 ADD CONSTRAINT 外键名称
FOREIGNKEY (外键字段名称) REFERENCES 主表名称(主表列名称) ON UPDATE CASCADE ON DELETE CASCADE ;
级联更新:ON UPDATE CASCADE
级联删除:ON DELETE CASCADE
多表关系
一对一,一对多,多对多
实现关系:
一对一:任意一方添加主键
一对多:在多的一方添加主键
多对多:借助第三张表,表中至少由两个字段,这两个字段作为第三张表的外键,分别指向两张表的主键
备份和还原:
备份: mysqldump -u用户名-p密码 数据库名称 > 保存的路径
或者用workbence图形化工具
还原:登陆数据库->创建数据库->使用数据库->执行文件(source+备份的路径)
领取专属 10元无门槛券
私享最新 技术干货