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 pt-slave-restart工具的使用简介
Apr 07 MySQL
超详细教你怎么升级Mysql的版本
May 19 MySQL
MySQL 8.0 Online DDL快速加列的相关总结
Jun 02 MySQL
浅谈MySQL next-key lock 加锁范围
Jun 07 MySQL
MySQL快速插入一亿测试数据
Jun 23 MySQL
为什么MySQL分页用limit会越来越慢
Jul 25 MySQL
SQL实现LeetCode(196.删除重复邮箱)
Aug 07 MySQL
MySQL数据库中varchar类型的数字比较大小的方法
Nov 17 MySQL
weblogic服务建立数据源连接测试更新mysql驱动包的问题及解决方法
Jan 22 MySQL
MySQL视图概念以及相关应用
Apr 19 MySQL
SQLServer常见数学函数梳理总结
Aug 05 MySQL
前端传参数进行Mybatis调用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
第十三节 对象串行化 [13]
2006/10/09 PHP
网友原创的PHP模板类代码
2008/09/07 PHP
php后退一页表单内容保存实现方法
2012/06/17 PHP
解析php安全性问题中的:Null 字符问题
2013/06/21 PHP
php生成EAN_13标准条形码实例
2013/11/13 PHP
PHP高精确度运算BC函数库实例详解
2017/08/15 PHP
PHP crypt()函数的用法讲解
2019/02/15 PHP
thinkphp5.1框架容器与依赖注入实例分析
2019/07/23 PHP
PHPstorm启用自动换行的方法详解(IDE)
2020/09/17 PHP
JavaScript 乱码问题
2009/08/06 Javascript
取选中的radio的值
2010/01/11 Javascript
js触发onchange事件的方法说明
2014/03/08 Javascript
javascript实现base64 md5 sha1 密码加密
2015/09/09 Javascript
Js+Ajax,Get和Post在使用上的区别小结
2016/06/08 Javascript
模拟javascript中的sort排序(简单实例)
2016/08/17 Javascript
VUE中使用Vue-resource完成交互
2017/07/21 Javascript
jQuery Easyui Treegrid实现显示checkbox功能
2017/08/08 jQuery
通过源码分析Vue的双向数据绑定详解
2017/09/24 Javascript
微信小程序 下拉刷新及上拉加载原理解析
2019/11/06 Javascript
Vue切换组件实现返回后不重置数据,保留历史设置操作
2020/07/21 Javascript
H5+css3+js搭建带验证码的登录页面
2020/10/11 Javascript
[46:09]2014 DOTA2华西杯精英邀请赛 5 25 LGD VS VG第三场
2014/05/26 DOTA
详尽讲述用Python的Django框架测试驱动开发的教程
2015/04/22 Python
实例讲解Python中global语句下全局变量的值的修改
2016/06/16 Python
Python基于正则表达式实现文件内容替换的方法
2017/08/30 Python
numpy下的flatten()函数用法详解
2019/05/27 Python
提升Python效率之使用循环机制代替递归函数
2019/07/23 Python
Python如何根据时间序列数据作图
2020/05/12 Python
Python如何将将模块分割成多个文件
2020/08/04 Python
Django mysqlclient安装和使用详解
2020/09/17 Python
使用CSS3配合IE滤镜实现渐变和投影的效果
2015/09/06 HTML / CSS
Giglio俄罗斯奢侈品购物网:男士、女士、儿童高级时装
2018/07/27 全球购物
四风问题班子对照检查材料
2014/09/27 职场文书
生日赠语
2015/06/23 职场文书
详解Vue的列表渲染
2021/11/20 Vue.js
漫画《催眠麦克风-Dawn Of Divisions》第二卷PV公开
2022/04/05 日漫