一.查询语句
1.查询去重信息:关键字 distinct
SELECT DISTINCT 去重的字段名,需要查询的信息字段名 FROM 表名;
2.两值相加时的判断条件IFNULL
查询两值之和, 两列值相加并且组成一个新的字段,一个值和null相加,只能返回null
所以要用到判断语句IFNULL(参数1,参数2); 如果在此值是空,就用0代替,放在参数2.
代码:
SELECT
字段名1,
字段名2 + IFNULL(字段名3, 0)
FROM
表名;
注意:字段名3是需要判断的字段
3.给查询的字段起别名 关键词AS 可以省略
SELECT
字段名1,
字段名2 + IFNULL(字段名3, 0) AS 新取的字段名
FROM
表名;
- 查询表记录,按某一字段升序排序
排序 关键词 order by 升序默认asc
排序 关键词 ORDER BY 排序的字段名 DESC 降序desc (查询字段取名的AS省略)
升序格式:
SELECT
*
FROM
表名
ORDER BY
排序规则的字段名 ASC;
降序格式:
SELECT
*
FROM
表名
ORDER BY
排序规则的字段名 DESC;
查询所有信息,按字段1降序排序,如果字段1相同时,按字段2升序排序
解题格式:
SELECT
*
FROM
e表名
ORDER BY
字段1名 DESC,
字段2名 ASC;
注意:默认ASC可省略
5.聚合函数 sum avg max min count(总记录数)
可以自动去除空值
格式:
SELECT
COUNT(规则字段名1),
COUNT(规则字段名2)
## 注意:查询时,要保证查询的字段记录数对等
FROM
表名
WHERE
条件;
其他四个和count用法一致.
6.分组查询 GROUP BY
按什么分组,前面查询的字段就是什么,为了保证查询结果数量对等
格式:
SELECT
SUM(规则字段名),
分组条件
FROM
表名
GROUP BY
分组条件;
7.where条件和关键字having
where条件要加在group by之前;
注意:
- 1.where后面不能使用聚合函数
- 2.分组之后,如果要使用添加筛选条件需要使用 Having关键词
- 3.having后边可以使用聚合函数
- 4.where条件是在分组之前进行筛选(即在group by之前)
- 5.Having条件是在分组之后进行筛选(即在group by之后)
where格式:
SELECT
COUNT(*),
分组条件
FROM
表名
WHERE
条件
GROUP BY
分组条件;
having格式:
SELECT
SUM(sal),
分组条件
FROM
表名
GROUP BY
分组条件
HAVING
SUM(字段名) > 9000;
8.分页查询 关键词 limit(mysql方言)
- limit 从第几条开始显示的数据,一共显示多少条数据
limit 0,3;
limit 3,3;
- 从第0条数据开始显示;
- limit关键词 要在所有的条件之后写
格式:
SELECT * FROM 表名 LIMIT 0,显示条数;
SELECT * FROM 表名 LIMIT 1*显示条数,显示条数;
SELECT * FROM 表名 LIMIT 2*显示条数,显示条数;
..............
9.模糊查询 关键词 like
使用占位符: %(多个字符), _(一个下划线表示一个字符).
常用:%条件%
%条件:以什么条件结束的;
条件%:以什么条件开始的;
SELECT * FROM 表名 WHERE 字段名 LIKE '%条件%';
二.数据完整性
- 数据完整性(保证用户插入的数据有效)
- 引用完整性(多张表依赖的关系,单表不存在此完整性)
- 域完整性(一个单元格的完整性)
- 实体完整性(保证一条数据局的完整性)
- 主键(唯一且不能为空) 精准删除
- 唯一键(唯一的 但是可以是空)
- 主键自增
1.设置主键的三种方式:
关键字 PRIMARY KEY
方式一:
CREATE TABLE 表名(
字段1 字段类型 PRIMARY KEY,
字段2 字段类型,
字段3 字段类型
);
方式二:在最后指定主键
CREATE TABLE 表名(
字段1 字段类型,
字段2 字段类型,
字段3 字段类型 ,
PRIMARY KEY (指定字段名)
);
此方式可以创建联合主键(用两个字段 同时当主键)
注意:联合主键都相同才算重复
CREATE TABLE 表名(
字段1 字段类型,
字段2 字段类型,
字段3 字段类型 ,
PRIMARY KEY (指定字段名1,指定字段名2)
);
方式三:
CREATE TABLE 表名(
字段1 字段类型,
字段2 字段类型
);
## 添加主键约束 关键词constraint
ALTER TABLE 表名 ADD CONSTRAINT PRIMARY KEY (指定字段名);
2.#删除主键约束 注意:删除主键不用约束 关键词
ALTER TABLE 表名 DROP PRIMARY KEY;
3.唯一键约束 关键词 unique
格式:
CREATE TABLE 表名(
字段名1 字段类型 PRIMARY KEY,
字段名2 字段类型 UNIQUE
);
4.主键自增 关键词 auto_increment
格式:
CREATE TABLE 表名(
字段名1 字段类型 PRIMARY KEY auto_increment ,
字段名2 字段类型 UNIQUE
);
注意:主键只能自增,删除了也不会倒退(即删除之后,再添加会接着自增).
插入时,可以给null,让他自己自增.
5.域完整性:
not null(非空)
default(默认值)
字段类型
注意:有默认值约束时,直接插入空可以,
要使用默认值,可以不插入该默认字段(和主键不同)
格式:
CREATE TABLE 表名(
字段名1 字段类型 PRIMARY KEY auto_increment,
字段名2 字段类型 NOT NULL,
性别 varchar(50) DEFAULT '男'
);
6. 引用完整性(参照物约束)
表和表之间的关系
- 一对一(罕见) 一对多 多对多(常用)
- 学生表(主) 和分数表(从) (可以通过外键来建立两张表之间的关系)
建立外键的方式
建立外键的方式1:明确外键是在从表中,
外键别名规范: fk_主表名_从表名_字段名.
格式:CONSTRAINT 外键别名 FOREIGN KEY (从表中的字段) REFERENCES 主表名 (主表中关联的字段)
例如:
主表创建:
CREATE TABLE student(
sid INT PRIMARY key,
snamme VARCHAR(50)
);
从表创建:
CREATE TABLE score(
sid INT,
score INT,
CONSTRAINT fk_student_score_sid
FOREIGN KEY (sid) REFERENCES student (sid)
);
建立外键的方式2
主表:
CREATE TABLE student1(
sid INT PRIMARY key,
snamme VARCHAR(50)
);
从表:
CREATE TABLE score1(
sid INT,
score INT
);
添加外键约束
ALTER TABLE score1 ADD CONSTRAINT fk_student1_score1_sid
FOREIGN KEY (sid) REFERENCES student1 (sid);
删除外键(一个表中可能有多个外键)
ALTER TABLE score1 DROP FOREIGN KEY fk_student1_score1_sid;
多对多关系
## 老师表和学生表
CREATE TABLE teacher(
tid INT PRIMARY KEY,
tname VARCHAR(50)
);
CREATE TABLE studentx(
sid INT PRIMARY KEY,
sname VARCHAR(50)
);
## 中间表
CREATE TABLE teacher_studentx(
tid INT,
sid INT
);
## 添加外键(多对多关系,外键在中间表中)
ALTER TABLE teacher_studentx ADD CONSTRAINT fk_teacher_studentX_tid FOREIGN KEY
(tid) REFERENCES teacher (tid);
ALTER TABLE teacher_studentx ADD CONSTRAINT fk_teacher_studentX_sid FOREIGN KEY
(sid) REFERENCES studentx (sid);