SELECT sal,comm,sal+comm AS total FROM emp;
结果:
任何数值和null值相加 都是null值
IFNULL 这时需要过滤空值 如果该值是空的就当做0来处理
SELECT sal,comm,sal + IFNULL(comm, 0) AS total FROM emp;
结果:
ORDER BY 排序 默认是升序的 ASC升序 | DESC降序
SELECT * FROM 表名 ORDER BY 字段名 ASC|DESC;
SELECT * FROM 表名 ORDER BY 字段名1 ASC|DESC,字段名2 ASC|DESC;
聚合函数是用来做纵向运算的函数(COUNT、MAX、MIN、SUM、AVG)
COUNT():统计指定列不为NULL的记录行数;
MAX():计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算;
MIN():计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;
SUM():计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0;
AVG():计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;
当需要纵向统计时使用COUNT:
查询表中所有记录数:
SELECT COUNT(*) FROM 表名;
查询表中某个字段的个数:
SELECT COUNT(字段名) FROM 表名;
查询表中多个字段的个数:
SELECT COUNT(字段1),COUNT(字段2) FROM 表名;
注意:使用COUNT查询的是不为null的记录数
SUM和AVG(自动过滤空值)
查询表中某个字段的总和:
SELECT SUM(字段名) FROM 表名;
查询表中多个字段的总和:
SELECT SUM(字段名1),SUM(字段名2) FROM 表名;
查询表中某个字段的平均值:
SELECT AVG(字段名) FROM 表名;
MAX和MIN
查询表中某个字段最高和最低的值:
SELECT MAX(字段名),MIN(字段名) FROM 表名;
当需要分组查询时需要使用GROUP BY子句
例如查询每个部门的工资和,这说明要使用部门来分组。
实例如下:
查询每个部门的部门编号和每个部门的工资和:
SELECT deptno,SUM(sal) FROM emp GROUP BY deptno;
查询每个部门的部门编号以及每个部门的人数:
SELECT deptno,COUNT(*) FROM emp GROUP BY deptno;
查询每个部门的部门编号以及每个部门工资大于1500的人数:
SELECT deptno,COUNT(*) FROM emp WHERE sal>1500 GROUP BY deptno;
注意:凡是和聚合函数同时出现的字段名,一定要写在GROUP BY之后
HAVING子句(分组后使用的条件)
HAVING与WHERE的区别:
1.HAVING是在分组之后对数据进行筛选,WHERE是在分组之前对数据进行筛选
2.HAVING后面可以使用聚合函数,WHERE后面不可以使用聚合函数
例如: 查询工资总和大于9000的部门编号以及工资和:
SELECT deptno,SUM(sal) FROM emp GROUP BY deptno HAVING SUM(sal)>9000;
LIMIT 参数1代表起始页 参数2代表一共显示几条记录
例如:
SELECT * FROM 表名 LIMIT 0,5;
表示查询5行记录,起始从0开始(即从第一行开始)
模糊查询使用关键字 LIKE
通配符:
_ 代表任意一个字符
% 代表任意0~n个字符
例如:
// 代表查询到的是包含w的结果
SELECT * FROM 表名 WHERE 字段名 LIKE '%w%';
// 代表查询到的是以w开头的两个字符
SELECT * FROM 表名 WHERE 字段名 LIKE 'w_';
作用:保证用户输入的数据保存到数据库中是正确的
确保数据的完整性 = 在创建表时给表中添加约束
实体完整性:
实体即表中的一行(一条记录)代表一个实体
实体完整性的作用:标识每一行数据不重复
约束类型:主键约束(PRIMARY KEY) 唯一约束(UNIQUE) 自动增长列(auto_increment)
主键约束(PRIMARY KEY):
注意:每个表都要有一个主键
特点:数据唯一且不能为null
第一种添加方式:
CREATE TABLE student(
id int PRIMARY KEY,
name varchar(50)
);
第二种添加方式:(好处:可以添加联合主键)
CREATE TABLE student1(
id int,
name varchar(50),
PRIMARY KEY(id)
);
联合主键是一个主键 只要两个字段不完全一致就可以都插入到数据库中
CREATE TABLE student2(
classid int,
stuid int,
name varchar(100),
PRIMARY KEY(classid,stuid)
);
第三种添加方式:
CREATE TABLE student3(
id int,
name varchar(100)
);
// 通过修改表结构 添加主键约束
ALTER TABLE student3 ADD CONSTRAINT PRIMARY KEY (id);
唯一约束(UNIQUE)
特点:数据不能重复,可以有空值
CREATE TABLE student4(
id int PRIMARY KEY,
name varchar(100) UNIQUE
);
自动增长列(auto_increment)
给主键添加自动增长的数值,列只能是整数类型
注意:数据被删除了也会按照原来的数进行增长 不是主键也能添加自动增长列
CREATE TABLE student5(
id int PRIMARY KEY auto_increment,
name varchar(100)
);
// 给主键插入空值,会自动给字段添加值
INSERT INTO student5 VALUES(NULL,'zs');
INSERT INTO student5 VALUES(NULL,'ls');
域完整性 限制单元格的数据内容
域完整性的作用:限制此单元格的数据正确,不对照此列的其它单元格比较
非空约束 (not null) 和 默认值 (default)
CREATE TABLE student6(
id int PRIMARY KEY,
name varchar(50) not null,
sex varchar(50) DEFAULT '男'
);
// 错误插入 值不能为空
// INSERT INTO student6 VALUES(1,NULL,'男');
// 性别默认为男
INSERT INTO student6 (id,name) VALUES(3,'wl');
// 给null 会把null插入进去
INSERT INTO student6 VALUES(2,'wl',NULL);
引用完整性 (外键约束 让表与表之间通过字段建立联系)
外键约束: FOREIGN KEY
CREATE TABLE student7(
sid int PRIMARY KEY,
name varchar(100)
);
CREATE TABLE score(
score int,
sid int,
// 第一种创建外键
// 建立表联系 FOREIGN KEY(当前表的字段)
CONSTRAINT fk_score_sid FOREIGN KEY(sid) REFERENCES student7(sid)
);
第二种创建方式:
CREATE TABLE score1(
score int,
sid int
);
ALTER TABLE score1 ADD CONSTRAINT fk_score_sid FOREIGN KEY(sid) REFERENCES student7(id);