DQL查询数据(最重点)

数据库查询语言:

  • 所有的查询都用它,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来过滤

 

posted on 2021-05-11 20:27  Love&Share  阅读(75)  评论(0编辑  收藏  举报

导航