文章目录
数据库学习第二天
今日内容
DML 操作表中的数据
1 插入记录
- 插入全部字段
insert into 表名 (字段名1,字段名2,字段名3.....)values(值1,值2,值3.....);
- 也可以不写字段名
insert into 表名 values(值1,值2,值3.。。);
- 插入部分数据
insert into 表名(字段名1,字段名2,。。。)values (值1,值2,。。。);
注意,没有添加数据的字段会使用null
插入字符类型和日期类型的数据的时候一定要加双引号或者单引号
2 更新表记录
update 表名,set 列名=值[where 条件表达式];如:UPDATE table1 SET NAME="yyy";
此时如果不加条件会将这一列所有的字段都改变。
3 删除表记录
delete from 表名 [where 条件表达式];如delete from table1 where name=yyy;
如果没有指定where子句,就会删除所有记录,因此是危险的举动,而且一般不推荐使用这个方法,效率很低,它会一条一条的删除语句。一般会使用truncate table 表名;
这条语句则是直接删除表,然后创建一个结构一模一样的表出来。
4 DQL 查询表记录
简单查询
1.查询所有列select * from 表名;
2. 查询指定字段的列的数据,多个数据之间用逗号分隔select 字段名1,字段名2,...from 表名;
指定列的别名进行查询
select 字段名1 as 别名1,字段名2 as 别名2... from 表名 as 表别名;
这里列和表都可以有别名可以用于简化查询
清除重复值
- 查询指定列并且保证不出现重复字段
select distinct 字段名 from 表名;
查询结果参与运算
- 某列数据与固定值计算
select 列名+固定值 from 表名;
- 某列数据与其他列数据参与计算
select 列名1+列名2 from 表名;
- 这里参与运算的必须得是数值类型
条件查询
- 条件查询的语法:
select 字段名 from 表名 where 条件;
它的流程是取出表中所有数据,如果满足条件就返回,不满足条件就不返回。 - 运算符
- 逻辑运算符
其中模糊查询中的通配符这里做一个说明:
_代表一个字符,%是0个或者多个。
排序查询
-
排序查询
* 语法:order by 子句
*order by 排序字段1 排序方式1 , 排序字段2 排序方式2...
* 排序方式: * ASC:升序,默认的。 * DESC:降序。 * 注意: * 如果有多个排序条件,则当前边的条件值一样时,才会判断第二条件。
聚合函数
将一列数据作为一个整体,进行纵向的计算。
- count:计算个数
1. 一般选择非空的列:主键
2. count(*)
2. max:计算最大值
3. min:计算最小值
4. sum:计算和
5. avg:计算平均值
注意!聚合函数的计算自动排除带null的字段
解决方法:1.利用ifnull语句进行判断如select count(ifnull(id,0)) from student;
如果id值为null则给个默认值0;
2.选择不包含非空的列进行计算
分组查询
- 语法:group by 分组字段;
2. 注意:
1. 分组之后查询的字段:分组字段、聚合函数比如:SELECT sex , AVG(math) FROM student GROUP BY sex;
这时候select后面除了跟sex和聚合函数,其他都没有意义。
2. where 和 having 的区别?
(1) where 在分组之前进行限定,如果不满足条件,则不参与分组。having在分组之后进行限定,如果不满足结果,则不会被查询出来
(2)here 后不可以跟聚合函数,having可以进行聚合函数的判断。
综合使用:SELECT sex , AVG(math),COUNT(id) FROM student WHERE math > 70 GROUP BY sex HAVING COUNT(id) > 2;
也可以利用别名去简化:SELECT sex , AVG(math),COUNT(id) 人数 FROM student WHERE math > 70 GROUP BY sex HAVING 人数 > 2;
分页查询
-
语法:limit 开始的索引,每页查询的条数;
2. 公式:开始的索引 = (当前的页码 - 1) * 每页显示的条数(非常重要!)后面是你每一页显示多少数据,前面则是计算第几页应该传的数据
– 每页显示3条记录SELECT * FROM student LIMIT 0,3; -- 第1页 SELECT * FROM student LIMIT 3,3; -- 第2页 SELECT * FROM student LIMIT 6,3; -- 第3页 3. limit 是一个MySQL"方言",别的不是这么用的!
约束
概念:对表中的数据进行限定,保证数据的正确性、有效性和完整性。
-
分类:
1. 主键约束:primary key
2. 非空约束:not null
3. 唯一约束:unique
4. 外键约束:foreign key -
非空约束:not null,值不能为null
1. 创建表时添加约束CREATE TABLE stu( id INT, NAME VARCHAR(20) NOT NULL -- name为非空 );
-
创建表完后,添加非空约束:
ALTER TABLE stu MODIFY NAME VARCHAR(20) NOT NULL;
(这时先保证该列没有null数据,才能添加这个约束)
` -
删除name的非空约束:
ALTER TABLE stu MODIFY NAME VARCHAR(20);
-
唯一约束:unique,值不能重复
1. 创建表时,添加唯一约束CREATE TABLE stu(id INT,phone_number VARCHAR(20) UNIQUE -- 添加了唯一约束)
注意mysql中,唯一约束限定的列的值可以有多个null也就是说在mysql中多个null不代表重复,mysql会认为这个值不确定
-
删除唯一约束:
ALTER TABLE stu DROP INDEX phone_number;
-
在创建表后,添加唯一约束:
ALTER TABLE stu MODIFY phone_number VARCHAR(20) UNIQUE;
-