+SQL语法:
- select 字段列表
- from 表名列表
- where 条件列表
- group by 分组列表
- having 分组之后的条件
注意:使用having时候要保证使用的字段出现在前面的select语句之中,或者使用的是聚合函数(max,min,avg,count,sum等等)。 - order by 排序
- limit 分页限定(限制查询结果返回的数量)
例子:select * from student limit 2;
或者select * from student limit 1,2;(表示第二行开始的两行)
排序查询
*语法:order by 子句
select * from student ORDER BY math;
排序方式:
*ASC:升序,不写默认是升序
*DESC:降序
举例:select * from student ORDER BY math DESC;
插入数据:
insert into student value stu_name
聚合函数:将一列数据作为一个整体,进行纵向的计算
1.count:计算个数[SELECT count(主键) FROM 表名]
2.max:计算最大值[SELECT MAX(math) FROM student]
3.min:计算最小值[SELECT MIN(math) FROM student]
4.sum:计算和[SELECT SUM(math) FROM student]
5.avg:计算平均值[SELECT AVG(math) FROM student]
分组查询:
语法:group by 分组字段
where 和 having 的区别?
1. where 在分组之前进行限定,如果不满足条件,则不参与分组。
having在分组之后进行限定,如果不满足结果,则不会被查询出来。
2. where 后不可以跟聚合函数,having可以进行聚合函数的判断。
使用案例:
– 按照性别分组。分别查询男、女同学的平均分,人数
SELECT sex , AVG(math),COUNT(id) FROM student GROUP BY sex;
– 按照性别分组。分别查询男、女同学的平均分,人数 要求:分数低于70分的人,
不参与分组,分组之后。人数要大于2个人
SELECT sex , AVG(math),COUNT(id) FROM student WHERE math < 70
GROUP BY sex HAVING COUNT(id) > 2;
GROUP BY 将分组字段结果中相同内容作为一组,并且返回每组的第一条数据,
所以单独分组没什么用处。分组的目的就是为了统计,一般分组会跟聚合函数一起使用。
分页查询:
语法:limit 开始的索引,每页查询的条数;
公式:开始的索引 = (当前的页码 -1) * 每页显示的条数
例子:------每页显示三条记录
SELECT * FROM student LIMIT 0,3;-- 第一页
MYSQL约束:
约束可以分为非空约束、主键约束、唯一约束、外键约束、默认约束。
按数据列的数目划分为:表级约束,列级约束。
== 注意:==非空约束和默认约束不存在表级约束。
PRIMARY KEY主键约束: 在表中定义一个主键来唯一确定表中每一行数据的标识符.主键保证记录的唯一性,自动为not null。
添加主键约束:ALTER TABLE tbl_name ADD [CONSTRAINT [symbol]即主键的约束名字] PRIMARY KEY[index_type即主键];
UNIQUE KEY唯一约束: ALTER TABLE tbl_name ADD [ CONSTRAINT [symbol]] UNIQUE [INDEX|KEY] [index_name] [index_type];
FOREIGN KEY 外键约束: 保持数据一致性,完整性,实现一对一或一对多关系。
添加外键约束:ALTER TABLE tbl_name ADD [CONSTRAINT [symbol]] FOREIGN KEY [index_name] (index_col_name,…)reference_definition
例子:ALTER TABLE Student ADD [CONSTRAINT [fk_id]] FOREIGN KEY sid REFERENCES id;
删除外键
格式:ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;
DEFAULT KEY默认约束: 当插入记录时,如果没有明确为字段赋值,则自动赋予默认值。
添加默认约束:ALTER TABLE tbl_name ALTER [COLUMN] col_name{SET DEFAULT literal|DROP DEFAULT}
例子:
修改数据表
添加单列格式:
ALTER TABLE tbl_name ADD [COLUMN] col_name column_definition [FIRST|AFTER col_name ];
例子如下:
添加多列格式:
ALTER TABLE tbl_name ADD [COLUMN] (col_name column_definition,…);
删除列格式:
ALTER TABLE tbl_name DROP [COLUMN] col_name
修改列定义:可用于修改列的位置,列的定义
ALTER TABLE tbl_name MODIFY [COLUMN] col_name column_definition [FIRST|AFTER col_name]
修改列名称:
ALTER TABLE tbl_name CHANGE [COLUMN] old_col_name new_col_name column_definition [FIRST|AFTER col_name]
数据表更名:
方法1:ALTER TABLE tbl_name RENAME new_tbl_name;
方法2:RENAME TABLE tbl_name TO new_tbl_name;
级联更新、删除
相关联的所有记录都更新,或者删除。(使用级联删除需谨慎,他会删除关联的一切记录。)
1、添加级联操作
语法:ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名称) REFERENCES 主表名称 (主表列名称) ON UPDATE CASCADE ON DELETE CASCADE;
2、分类
级联更新: ON UPDATE CASCADE
级联删除: ON DELETE CASCADE
三种插入记录的方式
插入记录的格式:
INSERT INTO user values(‘ ’);
INSERT INTO user set username = ‘ ’;
INSERT INTO user SELECT…;
更新记录
更新记录(单表)的格式:
UPDATE [ LOW_PRIORITY ] [ IGNORE ] table_reference SET col_name1={expr1|DEFAULT}[, col_name2={expr2|DEFAULT}] … [WHERE where_condition]
例子:UPDATE users SET age =age + 10 WHERE id%2 = 0;
删除记录(单表)的格式:
DELETE FROM tbl_name [WHERE where_condition]
例子:DELETE FROM users WHERE id = 6;
注意:当我们删除记录的时候,再次添加数据的时候,会从已有的ID号最大的加一,而不是去补充被删除的那一条数据。
多表更新
例子格式:UPDATE tdb_goods(被更新的表) INNER JOIN tbd_goods_cates(更新所参照的表) ON goods_cate = cate_name(两个表内连接的条件) SET goods_cate = cate_id(所要设置的更新的列);
查询记录(表达式)
使用别名的时候加上关键词AS,比如:
SELECT id AS p_id,username AS un FROM student;
代替:SELECT student.id,student.usename FROM student;
子查询 连接
子查询
子查询指的是出现在其他SQL语句的SELETE语句,子查询必须要出现在小括号内。
引发子查询的三种条件:
1、由比较运算符引发的
2、由IN | NOT IN运算符引发的
3、由EXIST | NOT EXIST引发的
ANY SOME ALL
这三个不是很懂?
连接
连接类型:内连接INNER JOIN、左|右外连接 LEFT|RIGHT JOIN
在MySQL中,JOIN,CROSS JOIN和INNER JOIN是等价的。
**内连接:**仅显示两个或者多个表之间符合条件的部分。
**左外连接:**左表中的全部记录和右表中的符合连接条件的记录。
**右外连接:**右表中的全部记录和左表中的符合连接条件的记录。
多表删除:相关的文章连接
运算符
函数
- 字符函数 如图一
- 数值运算符与函数 如图二
- 比较运算符与函数 如图三
- 日期时间函数 如图四
- 信息函数 如图五
- 聚合函数
- 加密函数
图一
图二
图三
图四
图五
数据库设计的范式
概念:
- 第一范式(1NF):每一列都是不可分割的原子数据项
- 第二范式(2NF):在1NF的基础上,非码属性必须完全依赖于候选码(在1NF基础上消除非主属性对主码的部分函数依赖)
- 第三范式(3NF):在2NF基础上,任何非主属性不依赖与其他非主属性(在2NF基础上消除传递依赖)