03 排序、聚合函数、分组、分页、约束、多对多关系

  一、 DQL:查询语句

    1. 排序查询

          * 语法:order by 子句

          * order by 排序字段1 排序方式1 ,  排序字段2 排序方式2...

            * 注意:

            * 如果有多个排序条件,则当前边的条件值一样时,才会判断第二条件。

    2. 聚合函数

            1. count:计算个数

                1. 一般选择非空的列:主键(例如count(uuid))

                2. count(*) 不推荐使用

                * 注意:聚合函数的计算,排除null值。

                    解决方案:

                        1. 选择不包含非空的列进行计算

                        2. IFNULL函数

            2. max:计算最大值

            3. min:计算最小值

            4. sum:计算和

            5. avg:计算平均值

    3. 分组查询

         注意:

        1. 分组之后查询的字段:分组字段、聚合函数

        2. where 和 having 的区别?

            1. where 在分组之前进行限定,如果不满足条件,则不参与分组。having在分组之后进行限定,如果不满足结果,则不会被查询出来

            2. where 后不可以跟聚合函数,having可以进行聚合函数的判断。 

    4. 分页查询

         1. 语法:limit 开始的索引 , 每页查询的条数;(如果不写开始索引,默认从0开始)

         2. 公式:开始的索引 = (当前的页码 - 1) * 每页显示的条数

        注意:limit只能使用在mysql数据库

二、 约束

     * 分类:

    1. 主键约束:primary key

        1. 注意:

                1. 含义:非空且唯一

                2. 一张表只能有一个字段为主键

                3. 主键就是表中记录的唯一标识

        2. 在创建表时,添加主键约束

                create table stu(

                    id int primary key,-- 给id添加主键约束

                    name varchar(20)

                );

        3. 删除主键

                -- 错误 alter table stu modify id int ;

                ALTER TABLE stu DROP PRIMARY KEY;

        4. 创建完表后,添加主键

                ALTER TABLE stu MODIFY id INT PRIMARY KEY;

        5. 自动增长:

                 1.  概念:如果某一列是数值类型的,使用 auto_increment 可以来完成值得自动增长

                 2. 在创建表时,添加主键约束,并且完成主键自增长

                        create table stu(

                            id int primary key auto_increment,-- 给id添加主键约束

                            name varchar(20)

                        );

                3. 删除自动增长

                        ALTER TABLE stu MODIFY id INT;

                4. 添加自动增长

                        ALTER TABLE stu MODIFY id INT AUTO_INCREMENT;

    2. 非空约束:not null

        * 非空约束:not null,值不能为null

       1. 创建表时添加约束

           CREATE TABLE stu(

                id INT,

                NAME VARCHAR(20) NOT NULL -- name为非空

           );

       2. 创建表完后,添加非空约束

           ALTER TABLE stu MODIFY NAME VARCHAR(20) NOT NULL;

       3. 删除name的非空约束

           ALTER TABLE stu MODIFY NAME VARCHAR(20);

    3. 唯一约束:unique

            1. 创建表时,添加唯一约束

                    CREATE TABLE stu(

                        id INT,

                        phone_number VARCHAR(20) UNIQUE -- 添加了唯一约束

        

                    );

            * 注意mysql中,唯一约束限定的列的值可以有多个null

            2. 删除唯一约束

                    ALTER TABLE stu DROP INDEX phone_number;

            3. 在创建表后,添加唯一约束

                    ALTER TABLE stu MODIFY phone_number VARCHAR(20) UNIQUE;

    4. 外键约束:foreign key

            一对多关系中,:在多的一方建立外键,指向一的一方的主键。

            如:employee(员工表--->多方)

            create table employee(

                id int primary key auto_increment,

                name varchar(20),

                age int,

                dep_id int, -- 外键字段对应主表的主键

                -- 创建外键约束

                constraint emp_depid_fk foreign key (dep_id) references department(id)

            );

 

            1. 在创建表时,可以添加外键

                * 语法:

                    create table 表名(

                        ....

                        外键列

                        [constraint 外键名称] foreign key (外键列名称) references 主表名称(主表列名称(一般是主键))

                    );

            2. 删除外键

                    ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;

            3. 创建表之后,添加外键

                    ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名称) REFERENCES 主表名称(主表列名称);

            4. 级联操作(一般不推荐使用,太不安全了,如果非要删除,我会先删除从表中关联的数据,然后在删除主表的一条数据

                    1. 添加级联操作

                            语法:ALTER TABLE 表名 ADD CONSTRAINT 外键名称

                            FOREIGN KEY (外键字段名称) REFERENCES 主表名称(主表列名称) ON UPDATE CASCADE ON DELETE CASCADE  ;

                    2. 分类:

                            1. 级联更新:ON UPDATE CASCADE

                            2. 级联删除:ON DELETE CASCADE

 

        5.默认值

            create table stu9 (

                id int,

                name varchar(20),

                address varchar(20) default  '广州'

            )

 

三、多表之间的关系

 

    1.  一对多关系中,:在多的一方建立外键,指向一的一方的主键。

            如:employee(员工表--->多方)

            create table employee(

                id int primary key auto_increment,

                name varchar(20),

                age int,

                dep_id int, -- 外键对应主表的主键

                -- 创建外键约束

                constraint emp_depid_fk foreign key (dep_id) references department(id)

            );

 

   2.  多对多:

            * 如:学生和课程

            * 实现方式:多对多关系实现需要借助第三张中间表。中间表至少包含两个字段,这两个字段作为第三张表的外键,分别指向两张表的主键

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值