查询语句
过滤空值
过滤空值 如果该值是空的 就当做0来处理
SELECT IFNULL(字段名,0) FROM 表名
聚合函数
排序
利用ORDER BY 关键字 来 约束表按照什么 条件来排序
ASC代表升序 也是默认的
DESC代表降序
SELECT 字段名 FROM 表名 ORDER BY 字段名 ASC
聚合函数:
SUM AVG MAX MIN COUNT
SUM AVG MAX MIN 都可以自动过滤掉NULL,且不当做0处理
查询表的记录数 关键字COUNT
查询的是填写的字段名有几条记录,一行代表一条记录
SELECT COUNT(字段名) FROM 表名;
查询总和 关键字 SUM
查询的是 某个字段的所有数据总和 这个字段得是全数字
SELECT SUM(字段名) FROM 表名;
查询最大值 关键字MAX
SELECT MAX (字段名) FROM 表名;
查询最小值 关键字MIN
SELECT MIN(字段名) FROM 表名;
查询平均值 关键字 AVG
SELECT AVG(字段名) FROM 表名;
分组查询
分组查询 GROUP BY 关键字
SELECT 字段名 FROM 表名 GROUP BY 字段名
注意:分组查询时,查询的字段必须是分组的字段
因为记录数要对应,
例如查询的字段名可能有3条记录,而分组的字段只有2条记录,
不能构成一个表格,就会报错
按条件查询
按条件查询 HAVING 关键字
SELECT 字段名 FROM 表名 HAVING 筛选条件
例如:查询工资总和大于9000的部门编号以及工资和
SELECT deptno,SUM(sal) FROM emp GROUP BY deptno HAVING SUM(sal) > 9000;
HAVING条件要放在分组之后且可以使用函数
而WHERE是分组之前使用的筛选条件,且不能使用函数
分页查询
分页查询 LIMIT 关键字
SELECT 字段名 FROM 表名 LIMIT 起始页,一共显示几条记录
这里的起始页,如果是从第一页开始查询,那么起始页就是0
模糊查询
模糊查询 LIKE % 或 _ 关键字
%代表0-n个字符
_代表一个字符
// 查询emp表格中 开头是w后面是任意几个字符的记录
//w 后有0-n个字符 的记录 都可以被查询到
SELECT * FROM emp WHERE ename LIKE 'w%';
// 查询表格中 只要带有w字符的记录
// w前有0-n个字符 w后有0-n个字符 都可以被查询到
SELECT * FROM emp WHERE ename LIKE '%w%';
// 查询表格中 w后只带有1个字符的记录
// 0个和超过1个字符的记录都不会被查询到
SELECT * FROM emp WHERE ename LIKE 'w_';
// 查询表格中 w后只带有3个字符的记录
// 0个和超过3个字符的记录都不会被查询到
SELECT * FROM emp WHERE ename LIKE 'w___';
键
主键
主键 PRIMARY KEY 的特点:
1.唯一
2.不能是空的
在创建表的时候 添加主键 可以保证数据的完整性
添加主键的方式一:
CREATE TABLE 表名(
字段名 属性 PRIMARY KEY(主键),
);
添加主键的方式二:
CREATE TABLE 表名(
字段名 属性,
PRIMARY KEY(要设为主键的字段名)
);
方式二的好处: 可以添加联合主键
一旦确定主键,那么表中被设置为主键的属性就不能出现重复的,且不能为NULL
创建方式三:
CREATE TABLE 表名(
字段名 属性
);
ALTER TABLE 表名 ADD CONSTRAINT PRIMARY KEY(要设置为主键的字段名)
ADD CONSTRAINT 是添加约束的意思
联合主键
CREATE TABLE 表名(
字段名1 属性1,
字段名2 属性2,
字段名3 属性3,
// 添加联合主键
PRIMARY KEY(字段名1,字段名2)
);
当设置联合主键时,只要联合主键不完全一致,都可以插入到数据库中
例如:
字段名1 字段名2 字段名3
1 1 a --可以
1 2 a --可以
2 1 a --可以
2 2 a --可以
1 1 a --不可以
1 2 a --不可以
2 2 a --不可以
2 1 a --不可以
前四条记录不完全一样,
所以可以被插入到数据库中,
但是后四条记录在前四条中已经插入过了,
所以不能再被插入到数据库中,
所以只要设置了联合主键的两个字段不完全一样,
就可以被插入到数据库中
而字段三没有被设置联合主键,所以完全一样或者不一样,
都没有什么区别
外键
外键的作用:
引用完整性(外键约束 让表与表之间,通过字段建立联系)
设置外键 FOREIGN KEY 关键字
外键要设置在从表中
CONSTRAINT fk_从表名_设置外键的字段名 FOREIGN KEY(设置外键的字段名) REFERENCES 主表名(主表中,要和外键绑定的字段名)
// fk_从表名_设置外键的字段名
// 这是自己取的名字,取什么都可以
// 但是这样取名方便理解,一看就明白
// fk代表外键的意思
创建时,要先创建主表再创建从表,
因为没有主表字段,
那么从表的字段存在就没有任何意义了
删除记录的时候要先删除从表中的记录,
如果先删除主表的记录,
那么从表的记录就完全没有意义了,
所以要先删除从表的记录
-- 主表
CREATE TABLE student(
sid INT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
sex VARCHAR(100) DEFAULT 'nan'
);
-- 从表
CREATE TABLE score(
id INT ,
score INT NOT NULL,
sid INT,
-- 创建外键 建立表联系
-- FOREIGN KEY(当前表的字段)
-- REFERENCES student(sid);
CONSTRAINT fk_score_sid FOREIGN KEY(sid) REFERENCES student7(sid)
);
主表
从表
这里主表的sid和从表的sid是互相对应的
第二种添加外键的方式:
ALTER TABLE 从表名 ADD CONSTRAINT fk_从表名_设置外键的字段名 FOREIGN KEY(sid) REFERENCES stu(id);
// fk_从表名_设置外键的字段名
// 这是自己取的名字,取什么都可以
// 但是这样取名方便理解,一看就明白
// fk代表外键的意思
唯一约束
唯一约束 UNIQUE 关键字
(不能重复,可以为有空值)
CREATE TABLE 表名(
字段名1 属性1,
字段名2 属性2 UNIQUE
);
自动增长列
自动增长列 auto_increment 关键字
CREATE TABLE 表名(
字段名1 属性1 auto_increment,
字段名2 属性2
);
这里如果当字段名1为主键时,也可以插入NULL
因为这个关键字会自动给字段添加值,
且是+1增长的
域完整性
限制单元格的数据内容
值不为空 NOT NULL 关键字
CREATE TABLE 表名(
字段名1 属性1 NOT NULL,
字段名2 属性2
);
当插入数据时,字段1不能为空
默认值 DEFAULT 关键字
CREATE TABLE 表名(
字段名1 属性1 DEFAULT 默认值
);
当插入数据时,
字段1没有填,
那么就会自动将 默认值填上去
例如:
CREATE TABLE student(
gender VARCHAR(100) DEFAULT 'nan'
);
当插入数据 gender 没有填的时候,
会默认将 'nan' 填上去