mysql 查找属性并去重_Mysql(1)

这篇博客详细介绍了MySQL数据库中的数据类型、字段属性,包括MYISAM和INNODB的区别。还讲解了如何修改和删除数据表字段,以及DML语言的操作,如INSERT、DELETE、UPDATE。此外,还深入探讨了DQL语言,如SELECT查询、去重、WHERE条件子句和JOIN查询。内容涵盖外键、逻辑运算符、模糊查询和联表查询等重要概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

d23b01dfefd964f4951feea4cbed4868.png

一、列的数据类型

5f3b9030c5150ebe1dd1af8a6bb9356f.png

7a9c1fab90d7584a598b5a5fd164ca58.png

e3cc079914e845a2c93b1efab108822a.png

9e790a8bc5047f395112891da33ac053.png

二、字段属性

27d80871368c2fae1688ea2c6ef3d018.png

4ccec04210ea7eeed4424e72bd2bdadc.png

三、数据表

[ ]里边的是可选属性

1.格式

41aa98de0f3ddd50f6bcc453318ab932.png

8a5ec9546a55da4f60fc30549654063a.png

2.常用命令

adaad20e694d5740a080124dab7bdc0f.png

3.数据表类型

MYISAM 和 INNODB 区别

a8f9013fe81a28db6abcb6c877086d6d.png

bf3ffa789b7eb7ef2ff6534b413b619e.png

4.修改和删除数据表字段

--修改表名(Alter table 旧表名 RENAME AS 新表名)

Alter TABLE student RENAME AS student1

--增加表的字段(Alter table 表名 ADD 字段名 列属性)

Alter TABLE student ADD id INT(11)

--修改表的字段(重命名,修改约束)

Alter TABLE student CHANGE id id1 INT(11) --重命名,不能修改字段类型和约束

Alter TABLE student MODIFY id VARCHAR(20) --修改约束,不能修改字段名

--删除表的字段(ALTER TABLE student DROP 字段名)

ALTER TABLE student DROP id1

--删除表(DROP TABLE 表名)

DROP TABLE IF EXISTS student --所有的创建和删除尽量加上判断

四、Mysql数据管理*

1.外键(了解)

创建方式一

fd95e4aa7ce81fca01853cec247b125a.png

删除有外键关系的表时,必须要先删除引用别人的表(从表),在删除被引用的表(主表)

创建方式二

99fee11fa20d518bb2d5419a892fe32b.png

ALTER TABLE 从表名

ADD CONSTRAINT 约束名 FOREIGN KEY (作为外键的列) REFERENCES 主表名(哪个列)

67a2960976d6e5d659654d3c10a9380b.png

以上都是物理外键操作,数据库级别的外键,不建议使用(要想删一个表还要看他有没有别的表跟他关联,避免数据库过多造成看困扰)

2.DML语言(全部记住)

数据库的意义:数据存储和管理

DML语言:数据操作语言

增(Insert)

--字段与值一一对应

--插入一列值

insert into 表名([字段名1,字段名2,...]) values ('值1','值2',...)

--插入多列值

insert into 表名([字段名1,字段名2,...]) values ('值1','值2',...),('值1','值2',...)

删(Delete、Truncate)

DELETE命令

--删除表所有数据

DELETE FORM 表名

--删除符合条件的数据

DELETE FORM 表名 WHERE ...(省略各种条件语句)

TRUNCATE命令

--清空表

TRUNCATE 表名

两个命令的区别

相同点:都能删除数据,都不会删除表结构

不同:TRUNCATE :重新设置 自增列 计数器归零,不会影响事务

改(Update)

where条件

a31d3e563f4cf3ab37f716911e6fb3db.png

--1.不带where的修改,会修改表中所有数据

格式:UPDATE TABLE 表名 SET 字段名=修改的值

UPDATE student SET `name`=5

--2.带where的修改,会修改表中指定数据

格式:UPDATE TABLE 表名 SET 字段名=修改的值 WHERE 字段名=值

--修改一个属性

UPDATE student SET `name`=5 WHERE id=1

--修改多个属性(逗号隔开)

UPDATE student SET `name`=5,`sex`='男' WHERE `id`=1

五、DQL语言

1.查询(SELECT)

--查询全部

SELECT FROM 表名

--查询指定字段

SELECT 查询的列 FROM 表名

SELECT `id` FROM student

--给字段和表起别名

SELECT 查询的列 AS 别名 FROM 表名 AS别名

SELECT `id` AS `编号` FROM student AS s

--函数 Concat(a,b) 拼接字符串

SELECT CONCAT('想显示的字符串',字段名)AS '别名' FROM 表名

SELECT CONCAT('name:',`name`)AS '别名' FROM student

b2dae9d2dfc9e0e22de658ea054738b8.png

2.去重

--去除SELECT语句中重复的数据,结果只显示一条

SELECT DISTINCT 字段名 FROM 条件

3.数据库表达式

数据库中的表达式:文本值,列,Null,函数,计算表达式,系统变量....

格式:SELECT 表达式 FROM 表名

--查询数据库版本(可以理解为函数)

SELECT VERSION()

--计算(表达式)

SELECT 4*26-1 AS 计算结果

--查询自增步长(变量)

SELECT @@auto_increment_increment

--指定的字段运算(对那个字段的所有数据进行操作)

SELECT `name`*2 AS newname FROM student

SELECT `name`-2 AS newname FROM student

SELECT `name`/2 AS newname FROM student

SELECT `name`%2 AS newname FROM student

......

4.*WHERE条件子句

逻辑运算符

e3d0eda755e101dea80cd77f9fcf693c.png

--逻辑与

SELECT `studentno`,`studentresult` FROM result

WHERE `studentresult` BETWEEN 50 AND 80 --[50,80]

等价于

SELECT `studentno`,`studentresult` FROM result

WHERE `studentresult` = 50 AND `studentresult` = 80

--逻辑或

SELECT `studentno`,`studentresult` FROM result

WHERE `studentresult`=50 OR `studentresult`=80

--逻辑非

SELECT `studentno`,`studentresult` FROM result

WHERE NOT `studentresult` BETWEEN 50 AND 80

等价于

SELECT `studentno`,`studentresult` FROM result

WHERE `studentresult` != 50 AND `studentresult` != 80

模糊查询:比较运算符

a396be21c4073997d0658aca0da794aa.png

一般like结合 %(0到任意个字符)和 _(1个字符)使用

--like使用

SELECT *FROM `subject`

WHERE `subjectname` LIKE '高%'

0d2dba706d5aa16ac3e37768adfc8eb1.png

--In使用

SELECT *FROM `subject`

WHERE `subjectno` IN(1,2,3,4)

--括号里边是具体的值,不能使用%,_的模糊查询

95ff8c964bbc692d20995f33d9342e52.png

5.联表查询

七种JOIN理论

9dfd66b655b23ada7e9580029d668e6d.png

b82fc88e2f877e8b2808441ef1cb4fe3.png

第一种INNER JOIN

--查询student表的studentno,studentname和result表的studentresult

SELECT s.`studentno`,`studentname`,`studentresult`

FROM `student` AS s

INNER JOIN `result` AS r

WHERE s.`studentno`=r.`studentno`

当要查询的数据在student表中找不到时候,就回去result表中查找

34ddfc787e02a099a85a462dfae6ba07.png

第二种RIGHT JOIN

--查询student表的studentno,studentname和result表的result

SELECT s.`studentno`,`studentname`,`studentresult`

FROM `student` AS s

RIGHT JOIN `result` AS r

ON s.`studentno`=r.`studentno`

34ddfc787e02a099a85a462dfae6ba07.png

第三种LEFT JOIN

--查询student表的studentno,studentname和result表的result

SELECT s.`studentno`,`studentname`,`studentresult`

FROM `student` AS s

LEFT JOIN `result` AS r

ON s.`studentno`=r.`studentno`

这里出现了一个赵强的学生,是因为我在student表中有这个人,而result表中没有这个人加上用的是LEFT JOIN,所以查询的时候呀,会返回result表中没有的值

26772e77b7f9a87d8001bf8c150247ca.png

注意:JOIN ON是一个语句,可以和WHERE一起使用,ON是判断语句

--查询三个表 student的studentno,studentname | result表的studentresult | subject表的subjectname

SELECT s.`studentno`,`studentname`,`studentresult`,`subjectname`

FROM `student` AS s

RIGHT JOIN `result` AS r

ON s.`studentno`=r.`studentno`

INNER JOIN `subject` sub

ON sub.`subjectno`=r.`subjectno`

cce22a696025d7289721ac85bd3beb19.png

6.自连接

自己和自己的表连接,核心:一张表拆为两张一样的表

现在有一张表如图

9306b1962d7f44a374af10f143dbcf01.png

对它进行自查询

先拆分成两张表,根据pid进行分类,pid=1的为父类

532c20edcef40428c9dafc6d3aec9659.png

就能得到这样的父子对应图

f0e0f6f285e4a0824abeaaa7315655fb.png

6b6e854a2dba5d264fe916e4b8825c2c.png

37f19a7c93eea91ebc3f1ea2e15c0052.png

本文地址:https://blog.youkuaiyun.com/weixin_45916005/article/details/107303982

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值