-- 实现studentresult字段的所有成绩都+1 SELECT studentno AS 学号,studentresult+1AS 成绩 FROMresult;
2.3WHERE语句
1 2 3 4 5 6 7 8 9
-- WHERE语句搭配逻辑运算符使用
-- 查询成绩在此范围内的数据 SELECT studentno,studentresult FROMresult WHERE studentresult >=90AND studentresult <=100;
-- 除了学号1000以外所有学生的成绩 SELECT studentno,studentresult FROMresult WHERE studentno !=1001;
3.模糊查询
3.1LIKE
1 2 3 4 5 6
-- LIKE需结合 %代表所有字符 _代表一个字符 SELECT*FROM student WHERE studentname LIKE'值%';
SELECT*FROM student WHERE studentname LIKE'%值%';
SELECT*FROM student WHERE studentname LIKE'值_';
3.2IN
1 2 3 4 5 6 7 8 9
-- IN具体的一个或多个值 SELECT*FROM student WHERE studentno IN (值1,值2,.....,值n);
-- IS null 显示指定字段为null的所有数据 SELECT*FROM 表名 WHERE 字段 ISNULL; -- NOT null 显示指定字段非null的所有数据 SELECT*FROM 表名 WHERE 字段 ISNOTNULL; -- BETWEEN AND闭区间内的数据 SELECT*FROM 表名 WHERE 字段 BETWEEN 值 AND 值;
4.联表查询
4.1内外连接
内链接指的是把两个表关联起来后,只有当两个表中共同有的数据才进行显示,内链接是最普通的联表查询
外链接可以分为左外链接和右外链接,其实这两种方式在本质上是相同的。
如果说内链接是两个表都有数据时才会显示,那么外链接就是主表中有数据就显示,而不管从表。
对于左外链接来说,from后面紧跟着的表就是主表。
而对于右外链接来说,则正好相反,join后面紧跟着的表是主表。
4.2核心步骤
确定要查询的数据 SELECT 字段1,字段2,…字段n
从哪几个表中去查 FROM 表名称 XXX JOIN 连接的表 ON 交叉条件
若需要进行多张表查询时,一步一步来,从两张表查开始
1 2 3 4 5 6 7 8 9
-- 1.确定要查询的字段 SELECT s.字段1,...,字段n -- 2.确定使用的联表类型 FROM 表1AS s INNERJOIN 表2AS r -- 3.判断条件两个表里面具有两个相同的字段 ON s.相同字段 = r.相同字段; INNERJOIN 表n AS n ............
4.3自连接
一个表具有连个表的属性时,需要把一张表拆分为两张表,通过子夫字段的关系来进行判断(使用较少)
格式
1 2 3
SELECT a.`字段名1` AS'father',b.`字段名1` AS'son' FROM 表1AS a , 表1AS b WHERE a.`子字段` = b.`父字段`;
4.4子查询
当数据查询的条件依赖于其他查询结果时,子查询提供了较好的查询方式
带IN嵌套
1 2 3 4 5 6
-- 查询高等数学-1分数大于80的学号和姓名 select StudentNo,StudentName from student where studentno in ( select StudentNo fromresultwhere StudentResult >=80and SubjectNo in( select SubjectNo from subject where SubjectName='高等数学-1' ) )
带比较运算符
1 2 3 4 5 6 7 8 9 10 11 12 13 14
-- 查询高等数学-1排行前五的学生信息 -- 1.确定查询字段 selectdistinct a.`StudentNo`,`StudentName`,`StudentResult` -- 2.连表查询 from student as a innerjoinresultas b on a.StudentNo = b.StudentNo -- 3.子查询 WHERE b.SubjectNo =( select SubjectNo from subject where SubjectName='高等数学-1' ) orderby StudentResult DESC LIMIT 0,5;