MySQL数据库(三)

数据库三

表的操作

#例子
CREATE TABLE z1(
	id INT(5),
	name CHAR(5),
	number INT(5)
)
1.添加约束键

ADD PRIMARY KEY( )//主键

ADD UNIQUE KEY( )//唯一键

ALTER TABLE z1
ADD PRIMARY KEY(id);

在这里插入图片描述

ALTER TABLE z1
ADD UNIQUE KEY(number);

在这里插入图片描述

2.删除约束键

DROP PRIMARY KEY //不需要加参数,因为主键必须是唯一的

DROP KEY()

ALTER TABLE z1
DROP PRIMARY KEY; 

在这里插入图片描述


ALTER TABLE z1
DROP KEY number;#直接删除该字段的key也可以

在这里插入图片描述

索引和视图

在这里插入图片描述

这是DBA的主要工作,对数据库的优化工作,这里仅作为了解

索引:
#加索引
ALTER TABLE z1
ADD KEY(name);

在这里插入图片描述

视图:

视图的作用类似于表,可以理解为查询结果保存到一个表里,或者当成一个链接。

视图不是真正的表,它虚表,没有数据
只是封装一个查询语句
可以理解为链接,快捷方式

CREATE VIEW view_name AS 
SELECT * FROM students WHERE age>19;

在这里插入图片描述

别名

就是将一个字段改成其他名字

SELECT number AS 学号,name AS 姓名  
FROM student;

效果:

在这里插入图片描述

                	 ↓

                     ↓

在这里插入图片描述

子查询(查询结果为表)
  SELECT * FROM (SELECT * FROM students   WHERE age=19) AS tb WHERE age > 17;  

筛选条件

比较运算符

[外链图片转存失败(img-ov701Gs5-1563684788400)(E:\python vip\进阶班\03-0523-MySQL数据库(三)]\截图\10.png)

INSERT INTO students VALUES('201804011',NULL,NULL,NULL);
INSERT INTO students VALUE('201804012',NULL,NULL,NULL);#加入两个空的行
SELECT * FROM students 
WHERE name IS NOT  NULL;

SELECT * FROM students 
WHERE name IS NULL;

SELECT * FROM students 
WHERE name<>NULL;

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

逻辑运算符

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

SELECT * FROM students 
WHERE age>19 AND age<22;

SELECT * FROM students 
WHERE age>18 OR age<22;

SELECT * FROM students 
WHERE age BETWEEN 19 AND 22; #和第一个效果一样

SELECT * FROM students
WHERE age IN(19,20,22);#这里括号里面不是范围,是指age的元素,也就是当age是19,20,22的时候才会返回
#模糊查找
INSERT INTO students VALUES('201804111','周一',NULL,NULL);
INSERT INTO students VALUES('201804112','周一一',NULL,NULL);
INSERT INTO students VALUES('201804113','周扒皮',NULL,NULL);#先插入三条信息
SELECT * FROM students
WHERE name LIKE '周%';

在这里插入图片描述

排序与去重

1.排序

问题一: 如果希望查询的结果依据某列排序该怎么做 ?

问题二: 是否支持正序与反序排列 ?

问题三: 如果只查询部分列,能否去重 ?

SELECT columns

FROM tb_name

ORDER BY ord_col_1 [asc/desc];       // 正序:  asc (默认)    倒序 :   desc
SELECT * FROM students
ORDER BY age; #升序
SELECT * FROM students
ORDER BY name DESC; #倒序 但是字符的顺序默认为编码顺序,不是字母顺序

在这里插入图片描述
在这里插入图片描述

2.去重

SELECT DISTINCT name FROM students;#把重复的去掉,随机留一个

在这里插入图片描述

聚合与分组

问题一: 仅从文字上看,你认为聚合是什么意思 ?

[外链图片转存失败(img-Y3anDFLX-1563684788405)(E:\python vip\进阶班\03-0523-MySQL数据库(三)]\截图\21.png)对筛选聚合值 ?

#统计个数
SELECT COUNT(name) FROM students;#注意NULL不记录在结果中

在这里插入图片描述

SELECT MAX(age) FROM students;#最大值
SELECT MAX(name) FROM students;#最小值

1.分组查询

SELECT group_column, aggregations

FROM tb_name

**GROUP**  **BY**  group_column;

在分组的情况下,只应该出现分组列和聚合列**

其他的列没有意义 !

SELECT student_number FROM grades
GROUP BY student_number;#把重复的分在一起,最后显示的结果就没有重复的

在这里插入图片描述

			  ↓

			  ↓

在这里插入图片描述

2.聚合筛选

SELECT group_column, aggregations

FROM tb_name

GROUP group_column

**HAVING** conditions;
SELECT student_number FROM grades #此处student——number不能改成*
GROUP BY student_number
HAVING student_number>201804004;#将student——number分组后筛选出大于某值的情况
#这里HAVING后面必须是 SELECT后面的字段,所以第一行不能改成*

[外链图片转存失败(img-QM3Mm6ZZ-1563684788406)(E:\python vip\进阶班\03-0523-MySQL数据库(三)]\截图\25.png)

注意!!!

[外链图片转存失败(img-BU4HeXnt-1563684788406)(E:\python vip\进阶班\03-0523-MySQL数据库(三)]\截图\26.png)、

限制与分页

(分页就是显示行数)

问题一: 如果一次性不需要那么多数据,该如何做 ?

问题二: 能否从指定位置开始取 ?

问题三: 分页是如何做的 ?

1.限制结果个数

SELECT columns FROM tb_name

**LIMIT** count;

SELECT columns FROM tb_name

**LIMIT** start, count;
SELECT * FROM 	students
LIMIT 2;    	# 只显示头两行,不管多少数据


SELECT * FROM 	students
LIMIT 3,4;		#从第三个开始显示,往后显示四条数据,不显示第三条数据

在这里插入图片描述
在这里插入图片描述

2.分页(就是类似于将一部小说分成好几页)

SELECT columns

FROM tb_name

**LIMIT** (n-1)*m, m

举个例子:

n为1 m为10 则显示从0到10行数据

n为2 m为10 则显示从11到20行数据

…以此类推

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值