MySQL增删改语法及多表联查的方式

发布于:2022-12-20 ⋅ 阅读:(513) ⋅ 点赞:(0)

目录

一.新增语句

二.插入语句

三.删除语句(必须带条件)

四.查询语句(所有查询皆是虚拟表)

五.多表联查


一.新增语句

INSERT INTO 表名(字段名...字段名) values(与字段名相对应的值...值);               

INSERT INTO student(sname,ssex) VALUES('王维','男');

二.插入语句

UPDATE 表名 SET 字段名=值,字段名=值,字段名=值;                --整张表的信息修改

--没有WHERE条件句就会把整张表的sname都改为“李白”

UPDATE 表名 SET sname='李白';

UPDATE 表名 SET 字段名=值,字段名=值,字段名=值     WHERE  条件语句;       --单条件的修改

--把sid为1的数据的sname改为“李白”

INSERT INTO student(sname) VALUES('李白') WHERE sid = 1;

三.删除语句(必须带条件)

(1)  DELETE     FROM    表名;                --不带条件就会整表删除元素,不能清除主键自增的序号

--删除student表中所有的数据,但无法清除主键自增的索引

DELETE FROM student;

(2)  DELETE    FROM    表名    WHERE 条件语句;        --删除满足条件的元素,不能清除主键自增的序号

--删除sid为1的数据

DELETE FROM student WHERE sid = 1;

delete,truncate,drop的区别
    1.drop属于DDL,delete、truncate属于DML
    2.delete只是删除数据
    3.truncate不光删除数据还清空索引但会保留表结构
    4.drop会同时删除表结构、索引、数据 

(3)  truncate    表名                    --清空整张表的数据还有索引(主键自增的序号),保留表结构

四.查询语句(所有查询皆是虚拟表)

--全字段的查询
SELECT 字段名,字段名 FROM 表名;		


--全字段的查询,效率相对较慢,因为要先去查表中都有什么字段
SELECT * FROM 表名;	


--查看部分字段
SELECT 想看的字段名 FROM 表名;


--起别名
SELECT	Sid,Sname,'School' AS '学院'	FROM	student;		--完整形式
SELECT	Sid,Sname,'School' '学院'	FROM	student;		    --省略AS
SELECT	Sid,Sname,'School' 学院	FROM	student;		        --省略AS和' '


--去除重复的数据
SELECT DISTINCT Sname,Ssex FROM student;	--DISTINCT后面的值完全相同时才会去除重复


--带条件的查询
SELECT * FROM 表名 WHERE classid=1 AND ssex='女';	    	--查询一班的女同学
SELECT * FROM 表名 WHERE classid>=1 AND classid<=5;		    --范围性条件
SELECT * FROM student WHERE classid BETWEEN 1 AND 5;		--范围性条件	


--like模糊查询
--模糊符号  %  表示任意多的任意字符(意思就是什么都可以代替)
%key	--查询以key结尾的(前模糊)
key%	--查询以key开头的(后模糊)
%key%	--只要有key的(前后模糊)
SELECT * FROM 表名 WHERE sname like '%彭%';


--查看姓彭单名一字
SELECT * FROM student WHERE Sname LIKE 	'彭_';	


--in  在某个特定范围内
SELECT * FROM student	WHERE Sid IN(1,2,5);


--查询null数据类型
SELECT * FROM	student	WHERE  classid IS NULL;
SELECT * FROM	student	WHERE birthday IS NOT NULL;



--聚合函数
count()		--统计个数
sum()		--总和
max()		--最大值
min()		--最小值
avg()		--平均值


--一共多少学生	COUNT()函数
SELECT COUNT(*) FROM student;
SELECT COUNT(字段名) FROM student;		--null值不算,一般写主键名
SELECT COUNT(1) FROM student;		    --参数可以是常量


--SUM()函数
SELECT SUM(score) FROM sc;			--计算总和



--MAX()函数
SELECT MAX(score) FROM sc;			--计算最大值

--MIN()函数
SELECT MIN(score) FROM sc;			--计算最小值

--AVG()函数
SELECT AVG(score) FROM sc;			--计算平均值

--分组
SELECT * FROM 表名 GROUP BY 要分组的字段名
例如:SELECT Sex,count(1) FROM student GROUP BY Sex;

--HAVING	对分组之后的数据进行筛选,HAVING不能单独出现必须要有GROUP BY
例如:SELECT sid,sum(score)	 FROM sc GROUP BY sid HAVING sum(score) > 200;



--WHERE后的筛选是针对表中的每一条数据
--HAVING后的筛选是分组之后的数据进行筛选且HAVING不能单独出现必须要有GROUP BY
例如:
SELECT sid,sum(score) FROM sc 
WHERE score > 60 GROUP BY sid HAVING sum(score) > 200;


--order by
--升序
--降序
SELECT * FROM student ORDER BY sid asc;		    --默认排序规则(升序)
SELECT * FROM student ORDER BY sid desc;		--降序排序规则

例如: SELECT * FROM sc ORDER BY score desc,cid desc,sid desc	--根据多个字段进行排序,先写先排



分页公式:	SELECT * FROM 表名 LIMIT(页码-1) * 步长,步长
例如:SELECT * FROM 表名 LIMIT(1-1) * 3 , 3        --从第一个数据开始看,每页三个数据    
		

 五.多表联查

(1) SELECT * FROM student,class,sc 
    WHERE student.classid = class.classid             --多表中有相同数据称为内联查询
    AND sc.Sid = student.Sid                          --会先获得一个笛卡尔积再筛选所以适合多                        
    AND student.classid = 1                             表,表中数据少的联查


(2)INNER JOIN ... ON(内联查询)

例如:
SELECT * FROM student 				
INNER JOIN class 					                  --进行多次拼接,适合表少数据多
ON class.classid = student.classid


(3)外联查询     要注意主表和从表

左外联  LEFT JOIN ON

--LEFT JOIN左边主表右边从表
例如:SELECT * FROM student  LEFT JOIN class ON class.classid = student.classid	

右外联  RIGHT JOIN ON 

--RIGHT JOIN左边从表右边主表
例如:SELECT * FROM  class  RIGHT JOIN student ON class.classid = student.classid	

--UNION    表示查询两张表的并集    
                1.数据类型不同也可以进行合并
                2.两张表的列数要一致
                3.表头是第一张表的信息(意味着只能给第一张表的字段起别名)
                4.UNION会去重(在UNION后加上ALL则不去重)


SELECT * FROM class LEFT JOIN student 
ON student.classid = class.classid
WHERE student.sid IS NULL
UNION						                        --查找没有班级的学生和没有学生的班级				
SELECT * FROM class RIGHT JOIN student 
ON student.classid = class.classid
WHERE student.classid IS NULL