DQL数据查询语句使用示例


Posted in MySQL onDecember 24, 2022

DQL

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

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

指定查询字段

-- 查询所有的学生  select 字段 from 表
select * from student
-- 查询指定字段
select studentno,studentname from student
-- 给结果起一个名字 , As,可以给字段起别名,也可以给表起别名
select studentno as 学号,studentname as 学生姓名 from student
select studentno 学号,studentname 学生姓名 from student
-- 函数 concat(a,b)
select CONCAT('姓名:',studentname) as 新名字 from student

语法:select 字段 from 表

有时候,列的名字不是那么的见名之意,我们可以用as给字段起别名

字段名 as 别名 或者是 表名 as 表别名

去重 distinct

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

-- 查询一下有哪些同学参加了考试
select * from result -- 查询全部的考试成绩
select studentno from result -- 查询有哪些学生参加了考试
select distinct studentno from result -- 去重

数据库的列(表达式)

select version() -- 查询系统版本号(函数)
select 100*3-2 -- 用来计算(表达式)
select @@auto_increment_increment -- 查询自增的步长(变量)
-- 学生考试成绩+1分查看
select studentno,studentresult+1 as '提分后' from result

数据库中的表达式:文本值,列,null,函数,计算表达式,系统变量

select 表达式 from 表

where条件子句

作用:检索符合条件的值

搜索的条件都是由一个或者多个表达式组成!结果都是布尔值

逻辑运算符

DQL数据查询语句使用示例

select studentno,studentresult from result
-- 查询考试成绩在95~100之间的
-- and &&
select studentno,studentresult from result 
where studentresult>=95 and studentresult<=100
-- 模糊查询(区间)
select studentno,studentresult from result 
where studentresult between 95 and 100
-- ! not
select studentno,studentresult from result 
where not studentno=1000

模糊查询:比较运算符

DQL数据查询语句使用示例

-- ===========模糊查询========================
-- 查询姓张的同学
-- like结合%(代表0到任意个字符) _(一个字符)
select studentno,studentname from student
where studentname like '张%'
-- 查询姓张的同学,名字只有两个字
select studentno,studentname from student
where studentname like '张_'
-- ======in(具体的一个或者多个值)========
-- 查询学号1000,1001的学生
select studentno,studentname from student
where studentno in(1000,1001)
-- 查询在北京的学生
select studentno,studentname from student
where address in('北京朝阳')
-- ========null not null====================
-- 查询地址为空的同学 null或者''
select studentno,studentname from student
where address='' or address is null
-- 查询出生日期不为空的学生
select studentno,studentname from student
where borndate is not null

联表查询

DQL数据查询语句使用示例

-- 查询参加考试的同学(学号,姓名,科目编号,分数)
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

DQL数据查询语句使用示例

练习:

-- ===============联表查询==================
 -- 查询参加考试的同学(学号,姓名,科目编号,分数)
select * from student
select * from result
/*思路:
1.分析需求:分析查询的字段来自哪些表(连接查询)
2.确定使用哪种连接查询? 7种
  确定交叉点,这两个表中哪些数据是相同的
	判断的条件:学生表的studentno=成绩表 studentno	
*/
-- join(连接的表) on(判断的条件) 连接查询
-- where 等值查询
select s.studentno,studentname,subjectno,studentresult 
from student as s
inner join  result as r
where s.studentno=r.studentno
select s.studentno,studentname,subjectno,studentresult 
from student as s
inner join  result as r
on s.studentno=r.studentno
-- right join 
select s.studentno,studentname,subjectno,studentresult 
from student as s
right join result as r
on r.studentno = s.studentno
-- left join 
select s.studentno,studentname,subjectno,studentresult 
from student as s
left join result as r
on s.studentno = r.studentno
-- 查询缺考的同学(只要让成绩为null,就能找到)
select s.studentno,studentname,subjectno,studentresult 
from student as s
left join result as r
on s.studentno = r.studentno where studentresult is null
-- 查询了参加考试的同学信息:学号,学生姓名,科目名称,分数
-- 表 student result subject
-- 右查询
-- 交叉点:学生表 studentno=成绩表 studentno  
--         成绩表 subjectno=科目表 subjectno
select s.studentno,studentname,sub.subjectname,studentresult
from student as s
right join result as r
on r.studentno=s.studentno
inner join `subject` as sub
on r.subjectno=sub.subjectno
-- 我要查询哪些数据 select ...
-- 从哪几个表中查询 from 表 xxx join 连接的表 on 较差条件
-- 假设存在一种多张表查询,先查询两张表开始,然后再慢慢增加
-- from a left join b
-- from a right join b

自连接

自己的表和自己的表连接;

核心:一张表拆分成两张一样的表即可

父类表:

DQL数据查询语句使用示例

子类表

DQL数据查询语句使用示例

查询父类对应的子类关系

DQL数据查询语句使用示例

-- 查询父子信息:把一张表看为两个一模一样的表
select a.categoryname as '父栏目',b.categoryname as '子栏目'
from category as a,category as b
where a.categoryid = b.pid

分页和排序

排序

-- 排序:升序 ASC  降序DESC
-- 通过哪个字段排序,怎么排
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 sub.subjectno=r.subjectno
where subjectname = '高等数学-1'
order by studentresult DESC

分页

-- 为什么要分页
-- 缓解数据库的压力,给人更好的体验  ---瀑布流
-- 分页,每页显示五条数据
-- 语法:limit 起始值,页面的大小
-- 网页应用:当前页,总页数,页面的大小
-- limit 0,5 1~5条数据
-- limit 1,5 2~6条数据
select * from student limit 0,5
-- 第一页 limit 0,5   (1-1)*5
-- 第二页 limit 5,5   (2-1)*5
-- 第二页 limit 10,5  (3-1)*5
-- 第N页  limit       (n-1)*5
-- pageSize:页面的大小
-- (n-1)*pageSize:起始值
-- n:当前页
-- 数据总数/页面大小=总页数

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

子查询

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

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

-- 查询高等数学-1的所有考试结果(学号,科目编号,成绩),降序排列
-- 方式1
select studentno,subjectno,studentresult
from result as r
inner join `subject` as sub
on r.subjectno=sub.subjectno
where subjectname='高等数学-1'
order by studentresult DESC
-- 方式2:使用子查询
select studentno,subjectno,studentresult
from result
where subjectno=(
	select subjectno from `subject` 
	where  subjectname='高等数学-1'
)order by studentresult DESC
-- 查询所有高等数学-1的学生的学号
select subjectno from `subject` where subjectname='高等数学-1'
-- 查询分数不小于80分的学生的学号和姓名
select studentno,studentname
from student 
where studentno=(
select distinct studentno from result where studentresult>=80
)
-- 查询课程为高等数学-2并且分数不小于80分的同学的学号和姓名
-- 联表查询
select s.studentno,studentname
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='高等数学-2' and studentresult>=80
-- 子查询
select DISTINCT s.studentno,studentname
from student as s
inner join result as r
on s.studentno=r.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'
	)
)

到此这篇关于DQL数据查询语句使用示例的文章就介绍到这了,更多相关DQL数据查询内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

MySQL 相关文章推荐
超详细教你怎么升级Mysql的版本
May 19 MySQL
MYSQL 无法识别中文的永久解决方法
Jun 03 MySQL
MySQL库表名大小写的选择
Jun 05 MySQL
Mysql数据库按时间点恢复实战记录
Jun 30 MySQL
MySQL系列之四 SQL语法
Jul 02 MySQL
MySQL系列之八 MySQL服务器变量
Jul 02 MySQL
Mysql中一千万条数据怎么快速查询
Dec 06 MySQL
数据分析数据库ClickHouse在大数据领域应用实践
Apr 03 MySQL
mysql查询结果实现多列拼接查询
Apr 03 MySQL
MySQL事务操作的四大特性以及并发事务问题
Apr 12 MySQL
mysql 排序失效
May 20 MySQL
MySQL 原理与优化之原数据锁的应用
Aug 14 MySQL
mysql数据库如何转移到oracle
Dec 24 #MySQL
mysql序号rownum行号实现方式
Dec 24 #MySQL
Mysql的Table doesn't exist问题及解决
Dec 24 #MySQL
Mysql如何查看是否使用到索引
Dec 24 #MySQL
MySQL新手入门进阶语句汇总
Sep 23 #MySQL
MySQL下载安装配置详细教程 附下载资源
Sep 23 #MySQL
SQLyog的下载、安装、破解、配置教程(MySQL可视化工具安装)
Sep 23 #MySQL
You might like
The specified CGI application misbehaved by not returning a complete set of HTTP headers
2011/03/31 PHP
PHP动态规划解决0-1背包问题实例分析
2015/03/23 PHP
PHP设计模式之装饰者模式代码实例
2015/05/11 PHP
简单谈谈PHP中的include、include_once、require以及require_once语句
2016/04/23 PHP
Redis构建分布式锁
2017/03/28 PHP
PHP实现的简单路由和类自动加载功能
2018/03/13 PHP
Prototype 学习 工具函数学习($w,$F方法)
2009/07/12 Javascript
javascript 面向对象编程 万物皆对象
2009/09/17 Javascript
jQuery函数的第二个参数获取指定上下文中的DOM元素
2014/05/19 Javascript
Javascript基础知识(三)BOM,DOM总结
2014/09/29 Javascript
jQuery简单实现日历的方法
2015/05/04 Javascript
JavaScript获得指定对象大小的方法
2015/07/01 Javascript
javascript实现移动端上的触屏拖拽功能
2016/03/04 Javascript
利用jquery给指定的table动态添加一行、删除一行的方法
2016/10/12 Javascript
jQuery判断网页是否已经滚动到浏览器底部的实现方法
2017/10/27 jQuery
详解微信小程序调起键盘性能优化
2018/07/24 Javascript
layui table设置前台过滤转义等方法
2018/08/17 Javascript
微信小程序bindinput与bindsubmit的区别实例分析
2019/04/17 Javascript
vue3.0 搭建项目总结(详细步骤)
2019/05/20 Javascript
[52:26]完美世界DOTA2联赛决赛 FTD vs Phoenix 第一场 11.08
2020/11/11 DOTA
Python写的Discuz7.2版faq.php注入漏洞工具
2014/08/06 Python
python格式化字符串实例总结
2014/09/28 Python
在Django中创建URLconf相关的通用视图的方法
2015/07/20 Python
Python编程实战之Oracle数据库操作示例
2017/06/21 Python
Python面向对象之类和对象属性的增删改查操作示例
2018/12/14 Python
python3.6+selenium实现操作Frame中的页面元素
2019/07/16 Python
Window10下python3.7 安装与卸载教程图解
2019/09/30 Python
pytorch学习教程之自定义数据集
2020/11/10 Python
HTML5 中新的全局属性(整理)
2013/07/31 HTML / CSS
德国滑雪和户外用品网上商店:XSPO
2019/10/30 全球购物
俄罗斯运动、健康和美容产品在线商店:Lactomin.ru
2020/07/23 全球购物
面向对象概念面试题(.NET)
2016/11/04 面试题
生物科学专业毕业生求职信
2014/06/02 职场文书
个人租房协议书范本
2014/09/30 职场文书
将图片保存到mysql数据库并展示在前端页面的实现代码
2021/05/02 MySQL
java项目构建Gradle的使用教程
2022/03/24 Java/Android