select count(id) as 总人数 from student;
select count(*) as 总人数 from student;
我们发现对于 NULL 的记录不会统计,建议如果统计个数则不要使用有可能为 null 的列,但如果需要把 NULL
也统计进去呢?
IFNULL(列名,默认值) 如果列名不为空,返回这列的值。如果为 NULL,则返回默认值。
-- 查询 id 字段,如果为 null,则使用 0 代替
select ifnull(id,0) from student;
我们可以利用 IFNULL()函数,如果记录为 NULL,给个默认值,这样统计的数据就不会遗漏
select count(ifnull(id,0)) from student;
分组查询是指使用 GROUP BY 语句对查询信息进行分组,相同数据作为一组
SELECT 字段 1,字段 2... FROM 表名 GROUP BY 分组字段 [HAVING 条件];
GROUP BY 将分组字段结果中相同内容作为一组,并且返回每组的第一条数据,所以单独分组没什么用处。
分组的目的就是为了统计,一般分组会跟聚合函数一起使用。
-- 按性别进行分组,求男生和女生数学的平均分
select sex, avg(math) from student3 group by sex;
where 子句 1) 对查询结果进行分组前,将不符合 where 条件的先去掉,即在分组之前过滤数据,即先过滤
再分组。
2) where 后面不可以使用聚合函数
having 子句 1) having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,即先分组再过滤。
2) having 后面可以使用聚合函数
SELECT *|字段列表 [as 别名] FROM 表名 [WHERE 子句] [GROUP BY 子句][HAVING 子句][ORDER BY 子
句][LIMIT 子句];
第4节 数据库备份和还原
主键关键字: primary key
1. 在创建表的时候给字段添加主键
字段名 字段类型 PRIMARY KEY
2. 在已有表中添加主键
ALTER TABLE 表名 ADD PRIMARY KEY(字段名);
例如在学生表st5中添加主键:
alter table st5 add primary key(id);
删除主键
例如删除st5表中的主键:
alter table st5 drop primary key;
CREATE DATABASE lianxi;
CREATE TABLE bumen(#创建一张部门表
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(20),
adress VARCHAR(20)
)AUTO_INCREMENT=1;
SHOW TABLES;
CREATE TABLE yuangong(#创建一张员工表
id INT,
NAME VARCHAR(32),
age INT,
sex VARCHAR(20)
);#给部门表里面添加内容,创建部门
INSERT INTO bumen VALUES(NULL,"销售部","成都");
INSERT INTO bumen VALUES(NULL,"财务部","北京");
INSERT INTO bumen VALUES(NULL,"研发部","上海");
INSERT INTO bumen VALUES(NULL,"售后服务部","西安");
#给员工表里面添加员工
INSERT INTO yuangong VALUES(1,"张三",25,"男");
INSERT INTO yuangong VALUES(2,"李四",25,"女");
INSERT INTO yuangong VALUES(3,"王五",25,"男");
INSERT INTO yuangong VALUES(4,"赵六",25,"女");
INSERT INTO yuangong VALUES(5,"田七",25,"男");
INSERT INTO yuangong VALUES(6,"大王",25,"女");
INSERT INTO yuangong VALUES(7,"小王",25,"男");
SELECT * FROM yuangong;
SELECT * FROM bumen;
#将员工和部门之间建立外键连接
#在员工表中增加一列,用来建立外键连接
ALTER TABLE yuangong ADD yg_bm_id INT;
UPDATE yuangong SET yg_bm_id=1 WHERE id<3;
UPDATE yuangong SET yg_bm_id=2 WHERE id=3;
UPDATE yuangong SET yg_bm_id=3 WHERE id>3&&id<=6;
UPDATE yuangong SET yg_bm_id=4 WHERE id=7;
ALTER TABLE yuangong ADD CONSTRAINT lianjie FOREIGN KEY(yg_bm_id) REFERENCES
bumen(id);
INSERT INTO yuangong VALUES(8,"王炸",55,"女",3);
ALTER TABLE yuangong DROP FOREIGN KEY lianjie;
ALTER TABLE yuangong DROP FOREIGN KEY yg_bm_id;
INSERT INTO yuangong VALUES(9,"王炸",99,"男",9);
UPDATE yuangong SET yg_bm_id=4 WHERE id=9;
ALTER TABLE yuangong ADD CONSTRAINT yg_bm_id FOREIGN KEY(yg_bm_id)
REFERENCES bumen(id);
INSERT INTO yuangong VALUES(10,"da王炸",55,"女",9);
ALTER TABLE yuangong DROP FOREIGN KEY yg_bm_id;
UPDATE yuangong SET yg_bm_id=2 WHERE id=10;
ALTER TABLE yuangong ADD CONSTRAINT yg_bm_id FOREIGN KEY(yg_bm_id)
REFERENCES bumen(id) ON UPDATE CASCADE ON DELETE CASCADE;
UPDATE bumen SET id=10 WHERE id=1;