数据库学习第二天

数据库学习第二天

今日内容

DML 操作表中的数据

1 插入记录

  1. 插入全部字段insert into 表名 (字段名1,字段名2,字段名3.....)values(值1,值2,值3.....);
  2. 也可以不写字段名insert into 表名 values(值1,值2,值3.。。);
  3. 插入部分数据insert into 表名(字段名1,字段名2,。。。)values (值1,值2,。。。);
    注意,没有添加数据的字段会使用null
    插入字符类型和日期类型的数据的时候一定要加双引号或者单引号

2 更新表记录

  1. update 表名,set 列名=值[where 条件表达式];如:UPDATE table1 SET NAME="yyy";此时如果不加条件会将这一列所有的字段都改变。

3 删除表记录

  1. delete from 表名 [where 条件表达式];如delete from table1 where name=yyy;如果没有指定where子句,就会删除所有记录,因此是危险的举动,而且一般不推荐使用这个方法,效率很低,它会一条一条的删除语句。一般会使用truncate table 表名;这条语句则是直接删除表,然后创建一个结构一模一样的表出来。

4 DQL 查询表记录

简单查询

1.查询所有列select * from 表名;
2. 查询指定字段的列的数据,多个数据之间用逗号分隔select 字段名1,字段名2,...from 表名;

指定列的别名进行查询

  1. select 字段名1 as 别名1,字段名2 as 别名2... from 表名 as 表别名;这里列和表都可以有别名可以用于简化查询

清除重复值

  1. 查询指定列并且保证不出现重复字段select distinct 字段名 from 表名;

查询结果参与运算

  1. 某列数据与固定值计算select 列名+固定值 from 表名;
  2. 某列数据与其他列数据参与计算select 列名1+列名2 from 表名;
  3. 这里参与运算的必须得是数值类型

条件查询

  1. 条件查询的语法:select 字段名 from 表名 where 条件;它的流程是取出表中所有数据,如果满足条件就返回,不满足条件就不返回。
  2. 运算符
    在这里插入图片描述
  3. 逻辑运算符
    在这里插入图片描述
    其中模糊查询中的通配符这里做一个说明:在这里插入图片描述
    _代表一个字符,%是0个或者多个。

排序查询

  1. 排序查询
    * 语法:order by 子句
    * order by 排序字段1 排序方式1 , 排序字段2 排序方式2...

     * 排序方式:
     	* ASC:升序,默认的。
     	* DESC:降序。
    
     * 注意:
     	* 如果有多个排序条件,则当前边的条件值一样时,才会判断第二条件。
    

聚合函数

将一列数据作为一个整体,进行纵向的计算。

  1. 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.选择不包含非空的列进行计算

分组查询

  1. 语法: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;

分页查询

  1. 语法: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为非空 );

  1. 创建表完后,添加非空约束:ALTER TABLE stu MODIFY NAME VARCHAR(20) NOT NULL;(这时先保证该列没有null数据,才能添加这个约束)
    `

  2. 删除name的非空约束:ALTER TABLE stu MODIFY NAME VARCHAR(20);

    扫描二维码关注公众号,回复: 12979128 查看本文章
  • 唯一约束:unique,值不能重复
    1. 创建表时,添加唯一约束CREATE TABLE stu(id INT,phone_number VARCHAR(20) UNIQUE -- 添加了唯一约束)

    注意mysql中,唯一约束限定的列的值可以有多个null也就是说在mysql中多个null不代表重复,mysql会认为这个值不确定

    1. 删除唯一约束:ALTER TABLE stu DROP INDEX phone_number;

    2. 在创建表后,添加唯一约束:ALTER TABLE stu MODIFY phone_number VARCHAR(20) UNIQUE;

猜你喜欢

转载自blog.csdn.net/m0_54814599/article/details/115256521