目录
一.新增语句
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