数据库查询语言:
- 所有的查询都用它,Select
- 简单的查询,复杂的查询它都能做
- 数据库中最核心的语言,最重要的语句
- 使用频率最高的语句
指定查询字段:
1 --查询全部的学生 select 字段 from 表 2 select * from student 3 4 -- 查询指定字段 5 select `studentNo`,`studentName` from student 6 7 --别名,给结果起一个名字 AS 可以给字段起别名 也可以给表起别名 8 select `studentNo` as 学号,`studentname` as 学生姓名 from student as s 9 10 --函数 concat(a,b) 11 select concat(`姓名`,studentname) as 新名字 from student
语法:select 字段 .... from 表
有的时候,列名字不是那么的人性化,我们起别名 as 字段名 as 别名 表名 as 别名
去重查询
1 SELECT *FROM result--查询全部的考试成绩 2 SELECT`StudentNo`FROM result --查询有哪些同学参加了考试
1 --发现重复数据,去重 2 3 SELECT DISTINCT `StudentNo`FROM result
数据库的列:
SELECT VERSION--查询系统版本(函数) SELECT 100*3-1 AS 计算结果--用来计算(表达式) SELECT @@auto_increment_increment -- 查询自增的步长(变量) --学员考试成绩+1分查看 SELECT `studentNo `, 'studentResult` +1 AS '提分后’FROM result
数据库中的表达式:文本值,列,Null,函数,计算表达式,系统变量
select 表达式 from 表
where:
1 SELECT studentNo,'studentResult` FROM result 2 3 --查询考试成绩在95~100分之间 4 SELECT studentNo, 'studentResult` FROM resultWHERE StudentResult>=95 AND StudentResult<=100 5 6 7 -- and&& 8 SELECT studentNo,'studentResu1tFROM resultWHERE StudentResu1t>=95 &&studentResult<=100 9 10 --模糊查询(区间) 11 12 SELECT studentNo, studentResult` FROM resultWHERE StudentResult BETWEEN 95 AND 100 13 14 --除了1000号学生之外的同学的成绩 15 16 SELECT studentNo,'studentResult`FROM resultWHERE studentNo!=1000; 17 18 -- !=not 19 20 SELECT studentNo, 'studentResult`FROM resultWHERE NOT studentNo = 1000
模糊查询:比较运算符(重要)
-------------------------------LIKE-----------------------------
1 --查询姓刘的同学 2 3 -- like结合%(代表0到任意个字符) _(一个字符) 4 5 SELECT `StudentNo`, 'StudentName` FROM `student`WHERE StudentName LIKE '刘%'
1 -- 查询姓刘的,后面只有一个字 2 SELECT `StudentNo`, 'StudentName` FROM `student`WHERE StudentName LIKE '刘_'
------------------------IN(具体的一个或者多个值)----------------------------
1 -―查询1001,1002,1003号学员 2 3 SELECT`StudentNo`, `StudentName` FROM‘student`WHERE StudentNo IN(1001,1002,1003);
------------null not null-----------------
1 --查询地址为空的学生null'' 2 3 SELECT `StudentNo`, `StudentName` FROM‘student VHERE address='' OR address IS NULL
1 --查询没有有出生日期的同学为空 2 3 SELECT`StudentNo`, `StudentName` FROM`studentWHERE `BornDateT IS NULL
联表查询
/★思路 /
1.分析需求,分析查询的字段来自哪些表,(连接查询)
2.确定使用哪种连接查询?7种
(分析需求,分析查询的字段来自哪些表,(连接查询)
确定交叉点(这两个表中哪个数据是相同的)
判断的条件:学生表的中studentNo =成绩表studentNo
--join(连接的表) on(判断的条件) 连接查询
--where 等值查询
1 SELECT s.studentNO,studentName , SubjectNo,StudentResult 2 FROM student As s 3 INNER JOIN result AS r 4 on s.studentNO = r.studentNO
1 -- Right Join 2 3 4 SELECT s.studentNo,studentName , subjectNo ,studentResult 5 FROM student s 6 RIGHT JOIN result r 7 ON s.studentNo = r.studentNO
1 -- Left ]oin SELECT s.studentNo, studentName , subjectNo ,studentResult
FROM student s LEFT JOIN result r ON s.studentNo = r.studentNO
1 _―查询缺考的同学 2 3 SELECT s.studentNO, studentName , SubjectNo, StudentResult 4 FROM student s 5 LEFT JOIN result r 6 ON s.studentNO = r.studentNO
7 WHERE StudentResult IS NULL
总结:
---我要查询哪些数据 select....
---从哪几个表中查 FROM 表 xxx Join 连接的表 on 交叉条件
---假设要求为多张表查询,慢慢来,先查询两张表然后再慢慢增加
1 --思考题(查询了参加考试的同学信息:学号,学生姓名,科目名,分数)
*思路
3 1.分析需求,分析查询的字段来自哪些表,student、result、 subject(连接查询 4 2.确定使用哪种连接查询?7种 5 确定交叉点(这两个表中哪个数据是相同的) 6 判断的条件:学生表的中 studentNo =成绩表 studentNo 7 8 SELECT s.studentNo, studentName , subjectName,'studentResult 9 FROM student s 10 RIGHT JOIN result r 11 ON r.studentNo = s.studentNo 12 iNNERJOIN `subjectt` sub 13 ON r.subjectNo = sub. subjectNo
自连接:(了解)
自己的表和自己的表连接,核心:一张表拆为两张一样的表即可
1 -―查询父子信息 2 3 4 SELECT a.`categoryName` AS '父栏目',b. `categoryName`AS '子栏目' 5 FROM `category` AS a, `category` AS b 6 WHERE a.`categoryid` = b.`pid`
父类
categoryid | categoryName |
2 | 信息技术 |
3 | 软件开发 |
5 | 美术设计 |
子类
pid | categoryid | categoryName |
3 | 4 | 数据库 |
2 | 8 | 办公信息 |
3 | 6 | web开发 |
5 | 7 | ps技术 |
分组和过滤:
1 -- 查询不同课程的平均分,最高分,最低分,平均分大于80 2 -- 核心:(根据不同的课程分组) 3 4 SELECT subjectname, AVG(studentresult) AS 平均分 ,MAX(studentresult) AS 最高分,MIN(studentresult) AS 最低分 5 FROM result r 6 INNER JOIN SUBJECT sub 7 ON r.`subjectno` = sub.`subjectno` 8 GROUP BY r.subjectno -- 通过什么字段来分组 9 HAVING 平均分>80 -- group by 之后不能用where 只能用having来过滤