首页 > 其他分享 >三、DQL 查询数据(最重点)

三、DQL 查询数据(最重点)

时间:2024-08-01 14:21:45浏览次数:5  
标签:-- WHERE 查询 studentno student DQL 重点 SELECT

DQL 查询数据(最重点)

DQL

(Data Query LANGUAGE:数据查询语言)

  • 所有的查询操作都用它 select
  • 简单的查询、复杂的查询都能做
  • 数据库中最核心的语言,最重要的语句
  • 使用频率最高的语句

Select完整语法:

SELECT [ALL | DISTINCT]
{*  |  table.*  |  [table.field1[as alist1][,table.field2[as alist2]][,...]]}
FROM table_name [as table_alias]
	[left | right | inner  join table_name2] -- 联合查询
	[WHERE ....]   -- 指定结果需满足的条件
	[GROUP BY ...] -- 指定结果按照哪几个字段分组
	[HAVING ...]   -- 过滤分组的记录必须满足的条件
	[ORDER BY ...] -- 指定查询记录按一个或多个条件排序
	[LIMIT  {[offset,]row_count  |  row_countOFFSET offset}];-- 指定查询的记录从哪条到哪条

注意:[]括号表示可选的,{}括号表示必选的

指定查询字段

-- 查询全部的学生
SELECT * FROM student

-- 查询指定字段
SELECT `studentno` ,`studentname` FROM student

-- 别名,给结果起个名字 AS 可以给字段和表起别名
SELECT `studentno` as 学号,`studentname` AS 学生姓名 FROM student as s

-- 函数 concat(a,b)
SELECT CONCAT('姓名:',studentname)as 新名字 from student

语法:SELECT 字段,... FROM 表

有的时候,列名字不是那么见名知意,我们起别名 AS |字段名 as 别名 |表名 as 别名

去重

作用:去除SELECT查询出来的结果中重复的数据,重复的数据只显示一条

--查询一下有哪些同学参加了考试,成绩
SELECT * FROM result -- 查询全部的考试成绩
SELECT `studentno` FROM result --查询有哪些同学参加了考试
-- 去重
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条件子句

作用:检索数据中符合条件的值

逻辑运算符

运算符 语法 描述
and && a and b a && b
or || a or b a||b
Not !

尽量使用英文

-- 查询成绩在95-100分之间的
SELECT STUDENTNO,STUDENTRESULT FROM RESULT
-- AND
SELECT STUDENTNO,STUDENTRESULT FROM RESULT WHERE STUDENTRESULT >=95 AND STUDENTRESULT <=100
-- &&
SELECT STUDENTNO,STUDENTRESULT FROM RESULT WHERE STUDENTRESULT >=95 && STUDENTRESULT <=100
-- 模糊查询(区间)BETWEEN
SELECT STUDENTNO,STUDENTRESULT FROM RESULT WHERE STUDENTRESULT BETWEEN 95 AND 100 OR STUDENTRESULT BETWEEN 80 AND 90

-- 除了1000号学生以为的同学的成绩
-- !=
SELECT STUDENTNO,STUDENTRESULT FROM RESULT WHERE STUDENTNO != 1000 and STUDENTNO != 1001
-- NOT
SELECT STUDENTNO,STUDENTRESULT FROM RESULT WHERE NOT STUDENTNO = 1000 AND NOT STUDENTNO = 1001

模糊查询:比较运算符

运算符 语法 描述
IS NULL a is null 如果操作符为NULL,结果为真
IS NOT NULL a is not null 如果操作符不为NULL,结果为真
BETWEEN a between b and c 若a在b和之间,结果为真
LIKE a like b SQL匹配,如果a匹配b,结果为真
In a in (a1,a2,a3,...) 假设a在a1,a2....其中的某一个值中,结果为真
-- 查询姓刘的同学
-- like结合 % (代表0到任意个字符)_(一个字符)
SELECT studentNO,studentNAME FROM student WHERE studentNAME LIKE '刘%';
-- 查询姓刘的同学,名字后面一个字
SELECT studentNO,studentNAME FROM student WHERE studentNAME LIKE '刘_';
-- 查询姓刘的同学,名字后面两个个字
SELECT studentNO,studentNAME FROM student WHERE studentNAME LIKE '刘__';
-- 查询名字中间有嘉字的同学
SELECT studentNO,studentNAME FROM student WHERE studentNAME LIKE '%嘉%';

-- =====in=====
-- 查询 1001,1002,1003号学员
SELECT studentNO,studentNAME FROM student WHERE studentNO IN (1001,1002,1003)

-- 查询在北京的学生
SELECT studentNO,studentNAME FROM student WHERE ADDRESS IN ('北京')


--====null not null=====
-- 查询地址为空的学生
SELECT studentNO,studentNAME FROM student WHERE ADDRESS = '' OR ADDRESS IS NULL;
-- 查询有生日的同学 不为空
SELECT studentNO,studentNAME FROM student WHERE BORNDATE != '' OR BORNDATE IS NOT NULL;
  

联表查询

JOIN 对比


img

-- ======联表查询======
SELECT * FROM student
SELECT * FROM RESULT
/* 思路
1. 分析需求,分析查询的字段来自哪些表,(连接查询)
2. 确定使用哪种连接查询? 7种
确定交叉点(这两个表中哪个数据是相同的)
判断的条件:学生表中国 studentno = 成绩表 studentno*/
SELECT S.studentNO,studentNAME,SUBJECTNO,studentRESULT 
FROM student AS S
INNER JOIN RESULT AS R
WHERE S.studentNO = R.studentno

-- Right Join
SELECT S.studentNO,studentNAME,SUBJECTNO,studentRESULT 
FROM student AS S
RIGHT JOIN RESULT AS R
ON S.studentNO = R.studentno


-- LEFT Join
SELECT S.studentNO,studentNAME,SUBJECTNO,studentRESULT 
FROM student AS S
LEFT JOIN RESULT AS R
ON S.studentNO = R.studentno
操作 描述
INNER JOIN 如果表中至少有一个匹配,就返回行
RIGHT JOIN 会从右表中返回所有的值,即使右表中没有匹配
LEFT JOIN 会从左表中返回所有的值,即使左表中没有匹配
-- 思考题(查询参加了考试的同学信息:学号、姓名、科目名、分数)
/* 思路
1. 分析需求,分析查询的字段来自哪些表,student\result\subject (连接查询)
2. 确定使用哪种连接查询? 7种
确定交叉点(这两个表中哪个数据是相同的)
判断的条件:学生表中 studentno = 成绩表 studentno
*/
SELECT s.studentNO,studentNAME,subjectname,studentresult
FROM student AS S
RIGHT JOIN result AS R
ON S.studentno = R.studentno
INNER JOIN `subject` AS sub
ON R.subjectno = sub.subjectno

-- 要查询哪些数据 select ....
-- 从哪几个表中查  from 表  xxx Join 连接的表 on 交叉条件
-- 假设存在一种多张表查询,慢慢来,先查询两张表,然后再慢慢增加

-- From a left join b 主体为 a 表
-- From a RIGHT JOIN b 主体为 b 表

自连接(了解)

自己的表和自己的表连接,核心:一张表拆为两张一样的表即可

父类:

categoryid categoryName
2 信息技术
3 软件开发
5 美术设计

子类:

pid categoryid categoryName
3 4 数据库
2 8 办公信息
3 6 web开发
5 7 ps技术

操作:查询父类对应的子类关系

父类 子类
信息技术 办公信息
软件开发 数据库
软件开发 web开发
美术设计 ps技术
-- 查询父子信息
SELECT C1.categoryName AS '父类' , C2.categoryName AS '子类'
FROM category AS C1 , category AS C2
WHERE C1.categoryid = C2.pid

分页和排序

排序

-- 分页 limit  排序 order by 
-- 排序:升序 ASC  降序 DESC
-- order by 通过哪个字段排序,怎么排
-- 查询的结果按照 成绩降序排序
SELECT s.studentno,studentname,subjectname,studentresult
FROM student AS s
INNER JOIN result AS r
ON s.studentno = r.studentno
INNER JOIN subject AS sub
ON r.subjectNO = sub.subjectNO
WHERE subjectNAME = '高等数学-1'
ORDER BY studentresult DESC

分页

-- 分页,每页显示五条数据
-- 语法:limit 起始值,页面大小
-- limit 0,5  0-5
-- limit 6,5  6-11
-- limit 1,5  1-6

SELECT s.studentno,studentname,subjectname,studentresult
FROM student AS s
INNER JOIN result AS r
ON s.studentno = r.studentno
INNER JOIN subject AS sub
ON r.subjectNO = sub.subjectNO
WHERE subjectNAME = '高等数学-1'
ORDER BY studentresult DESC
LIMIT 0,5

-- 第一页 limit 0,5  (1-1)*5
-- 第二页 limit 0,5  (2-1)*5
-- 第三页 limit 0,5  (3-1)*5
-- 第N页  limit 0,5  (n-1)* pageSize
-- [pageSize 页面大小]
-- [(n-1)* pageSize 起始值]
-- [n:当前页]
-- [数据总数/页面大小 = 总页数]

语法:limit(查询起始下标,pageSize)

子查询

where(这个值是计算出来的)

本质:在where语句中嵌套一个where语句

-- 连表查询
-- 查询课程为 高等数学-2 且 分数不下于 80 的同学的学号和姓名  
SELECT S.studentno,studentname 
FROM student AS S
INNER JOIN result AS R
ON R.studentno = S.studentno
INNER JOIN subject AS sub
ON R.subjectno = sub.subjectno
WHERE subjectname = '高等数学-2' AND studentresult >= 80

-- 子查询
-- 分数不小于80分的学生的学号和姓名
SELECT DISTINCT S.studentno,studentname 
FROM student AS S
INNER JOIN result AS R
ON R.studentno = S.studentno
WHERE studentresult >= 80

-- 在这个基础上增加一个科目 高等数学-2
-- 查询高等数学-2 的编号
SELECT DISTINCT S.studentno,studentname 
FROM student AS S
INNER JOIN result AS R
ON R.studentno = S.studentno
WHERE studentresult >= 80 AND subjectno = (
    SELECT subjectno FROM subject
    WHERE subjectname = '高等数学-2'
)
-- 再改造
SELECT studentno,studentname FROM student WHERE studentno IN (
  SELECT studentno FROM result WHERE studentresult >= 80 AND
  subjectno = (
    SELECT subjectno FROM subject 
    WHERE subjectname = '高等数学-2'
  )
)

分组和过滤

-- 查询不同课程的平均分、最高分、最低分、平均分大于80
-- 核心:根据不同的课程分组
SELECT subjectname,AVG(studentresult) AS 平均分,MAX(studentresult),MIN(studentresult) FROM result r
INNER JOIN subject sub ON r.subjectno = sub.subjectno
GROUP BY r.subjectno -- 通过什么字段分组
HAVING 平均分 > 80

select小结

标签:--,WHERE,查询,studentno,student,DQL,重点,SELECT
From: https://www.cnblogs.com/shisi2001/p/18336562

相关文章

  • JDBC(重点)
    JDBC(重点)数据库驱动JDBCSUN公司为了简化开发人员的(对数据库的同一)操作,提供了一个(Java操作数据库的)规范,俗称JDBC这些规范的实现由具体的厂商去做对于开发人员来说,我们只需要掌握JDBC接口的操作即可java.sqljavax.sql还需要导入一个数据库驱动包第一个JDBC程序创建普......
  • 基于ssm+vue.js+uniapp的网络直播带货查询系统附带文章和源代码部署视频讲解等
    文章目录前言详细视频演示具体实现截图技术栈后端框架SSM前端框架Vue持久层框架MyBaits系统测试系统测试目的系统功能测试系统测试结论为什么选择我代码参考数据库参考源码获取前言......
  • 搜索查询后显示完整的 pandas
    我想实现以下非常小的项目,即用户应该输入产品名称,Python应该在数据库中搜索并在pyqt6桌面应用程序中显示查询结果,为此我已经实现了以下基本GUI形式:这里用户输入产品,然后单击按钮,结果将显示在空白处,即:QTextEdit(),最有趣的部分是这个功能:defreturn_product_......
  • 在 pyqt6 QTextEdit 中显示数据库查询
    我想实现以下非常小的项目,即用户应该输入产品名称,Python应该在数据库中搜索并在pyqt6桌面应用程序中显示查询结果,为此我已经实现了以下基本GUI形式:这里用户输入产品,然后单击按钮,结果将显示在空白处,即:QTextEdit(),最有趣的部分是这个功能:defreturn_product_......
  • .NET 开源的数据库文档查询和生成工具
    前言在实际项目开发中,需求变更和项目迭代是常态。要求我们能够迅速响应,对数据库结构进行相应的调整,如添加新表、更新现有表结构或增加字段等。为了确保团队成员之间的信息同步,实时更新和维护数据库文档变得至关重要。这不仅提升了数据库的可读性,也极大提高了开发效率和团队协作......
  • Dynamics 365 online查询共享给某个Team的记录,然后取消共享
    intiSuccess=0;intiFaile=0;varadminService=CrmServiceClientCommon.GetService();//创建QueryExpression对象QueryExpressionquery=newQueryExpression("opportunity");......
  • 基于Python网络爬虫的电子产品信息查询可视化系统
    作者主页:编程千纸鹤作者简介:Java领域优质创作者、CSDN博客专家、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、多年校企合作经验,被多个学校常年聘为校外企业导师,指导学生毕业设计并参与学生毕业答辩指导,有较为丰富的相关经验。期待......
  • 基于Python网络爬虫的电子产品信息查询可视化系统
    作者简介:Java领域优质创作者、CSDN博客专家、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、多年校企合作经验,被多个学校常年聘为校外企业导师,指导学生毕业设计并参与学生毕业答辩指导,有较为丰富的相关经验。期待与各位高校教师、企业......
  • SQL实战从在职到离职(1) 如何处理连续查询
    书接上回,最近离职在家了实在无聊,除了看看考研的书,打打dnf手游,也就只能写写代码,结果昨晚挂在某平台的一个技术出售有人下单了,大概业务是需要帮忙辅导一些面试需要用到的SQL。回想了下,在该平台接单SQL也超过3w元了,考察的也就是那几大类,我准备开一个新的专题,把我遇到的题目做一些示......
  • .NET 开源快捷的数据库文档查询和生成工具
    前言在实际项目开发中,需求变更和项目迭代是常态。要求我们能够迅速响应,对数据库结构进行相应的调整,如添加新表、更新现有表结构或增加字段等。为了确保团队成员之间的信息同步,实时更新和维护数据库文档变得至关重要。这不仅提升了数据库的可读性,也极大提高了开发效率和团队协作......