SQL查询语言,约束

查询语句

排序查询: order by  

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

                          注意:当有多个排序方式时候,只有第一排序方式排完的数据一样才按第二排序方式排序。

                           默认升序排序ASC,降序排序DESC

 

聚合函数:将一列数据作为一个整体,进行纵向计算。

                  count个数,max最大值,min最小值,sum和,avg平均值

         注意:聚合函数的计算排除了null值

         解决:1统计非空的列,主键

                   2 IFNULL函数 ifnull()

                 

CREATE TABLE student (

       id INT,

       NAME VARCHAR(30),

       age INT,

       score DOUBLE(5,1),

       birthday DATE

);

 

-- 查看表结构

DESC student;

 

-- 添加数据

-- insert into student (id,name,age) values (1,'小明',20),(3,'小强',21);

 

INSERT INTO student VALUES (1,'小红',18,90,'20000501'),

(2,'小明',16,99.1,'20000501'),

(3,'小强',18,60,'20000501'),

(4,'大明',26,99.1,'20000501'),

(5,'大强',28,60,'20000501');

 

 

SELECT *FROM student;

 

SELECT *FROM student ORDER BY age ,score DESC ; --用age升序排序,如果age一样用score降序排序

SELECT COUNT(NAME) FROM student;--计算name的个数

SELECT AVG(score) FROM student;--计算score的平均分

SELECT MAX(score) FROM student;--计算score的最大值

 

 

分组查询:

       group by

       where和having的区别?

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

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

分组前过滤用where,分组后过滤用having

       1按照性别分组。查询男女的平均分

       select sex,avg(score) from student group by sex;

       2按照性别分组。分别查询男、女同学的平均分,人数

       SELECT sex , AVG(score),COUNT(id) FROM student GROUP BY sex;

       3按照性别分组。分别查询男、女同学的平均分,人数 要求:分数低于70分的人,不参与分组

SELECT sex , AVG(math),COUNT(id) FROM student WHERE score > 70 GROUP BY sex;

                    

4. 按照性别分组。分别查询男、女同学的平均分,人数 要求:分数低于70分的人,不参与分组,分组之后。人数要大于2个

       SELECT sex , AVG(math),COUNT(id) FROM student WHERE math > 70 GROUP BY sex HAVING COUNT(id) > 2;

       或者把上面的count(id)起别名为人数,方便后面的查询(起别名用as,as可以省略)

分页查询:

limit 开始索引,每页的查询条数;

规律:开始的索引 = (当前的页码 - 1) * 每页显示的条数

注意:limit是方言,只在mysql中有作用,orcal中是其他的。

       每页显示3条记录 SELECT *FROM student LIMIT 0,3;

                                    SELECT *FROM student LIMIT 3,6;

 

约束

约束:对表中数据进行限定,从而保证数据的正确性,有效性,完整性

分类:

              1.主键约束:primary key(自带非空和唯一约束)

              2.非空约束:not null

              3.唯一约束:unique

              4.外键约束:foreign key

 

非空约束使用 not null

       1.创建表时添加约束

              name varchar(30) not null;

       2建过表添加约束

              alter table student modify name varchar(30) not null;

       3.删除name的非空约束

              alter table student modify name varchar(30);

唯一约束使用 unique

       创建表时添加唯一约束

              number varchar(20) unique;   -- 可以有null但是只能有一个null

       创建表后添加唯一约束:

              alter table student modify number varchar(20) unique;

       删除唯一约束:

              alter table student drop index number;

 

主键约束使用:primary key

       主键是表中记录的唯一标识,一张表只能由一个字段为主键,主键是非空且唯一的

      

       创建表时候添加主键约束:

              id int primary key,

       创建表后添加主键:

              alter table student modify id int primary key;

       删除主键

       alter table student drop primary key;

 

自动增长:auto_increment  让某一列使用完成值的自动增长

              一般自动增长配合主键,

创建表时添加主键约束,并完成自动增长primary key auto_increment;

添加自动增长:alter table stu modify id int auto_increment;

删除自动增长:alter table stu modify id int;

      

             

外键约束:

 constraint 外键名 foreign key (外键列) references 主表名;

创建表时候添加外键约束:

       在创建表的最后加上:

              constraint 外键名称 foreign key (外键列名称) references 主表名称(主表列名称)

 

创建表之后,添加外键

                     alter table 表名 add constraint 外键名称 foreign key(外键字段名称) references 主表名称(主表列名称);

 

删除外键

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

 

级联操作:

 添加级联操作
 1. 添加级联操作

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

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

       级联更新:ON UPDATE CASCADE 
       级联删除:ON DELETE CASCADE 

多表关系

       一对一,一对多,多对多

实现关系:

       一对一:任意一方添加主键

       一对多:在多的一方添加主键

       多对多:借助第三张表,表中至少由两个字段,这两个字段作为第三张表的外键,分别指向两张表的主键

备份和还原:

备份: mysqldump -u用户名 -p密码 数据库名称 > 保存的路径

或者用workbence图形化工具

还原:登陆数据库->创建数据库->使用数据库->执行文件(source+备份的路径)

更多学习资源请扫描下面的二维码关注公众号

-->往期回顾<--

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hbpartty

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值