DQL命令查询数据实现方法详解

目录
  • 一、SELECT语法-排序
  • 二、SELECT语法-分页查询
  • 三、SELECT语法-分组查询
  • 四、WHERE与HAVING对比
  • 五、子查询
    • 1、IN子查询
    • 2、EXISTS子查询
  • 六、多表连接查询
    • 1、内连接
    • 2、多表内连接
    • 3、左外连接
    • 4、右外连接
    • 5、自连接
    • 6、不同的SQL JOIN对比

一、SELECT语法-排序

SELECT   [ALL | DISTINCT]
{  * |  table.* | [ table.field1 [ as  alias1] [, table.field2 [as  alias2]][, …]] }
FROM  table_name  [ as  table_ alias  ]
	[ left|out|inner  join  table_name2 ]    //多表连接查询
    [ WHERE  … ]   	//指定结果需满足的条件
    [ GROUP BY …]	//指定结果按照哪几个字段来分组
    [ HAVING …]	//过滤分组的记录必须满足的次要条件
    [ ORDER BY… ]	//指定查询记录按一个或者多个条件排序
	[ LIMIT  {   [ offset,] row_count    |   row_count OFFSET offset   }] ;  //分页查询

排序可以是升序(ASC)或者降序(DESC),如果不指定ASC或DESC,结果集默认按ASC升序排序:

如以下

//把成绩都降低10%后加5分,再查询及格成绩,并按照成绩从高到低排序。
SELECT studentno AS 学生编号,(studentresult*0.9+5 ) AS 综合成绩
FROM `result`
WHERE (`studentresult`*0.9+5) >=60
ORDER BY studentresult DESC;
//把成绩都降低10%后加5分,再查询及格成绩,并按照成绩从高到低排序,如果成绩
//相同,再按照课程编号进行排序。
SELECT studentno AS 学生编号,(studentresult*0.9+5 ) AS 综合成绩
FROM `result`
WHERE (`studentresult`*0.9+5) >=60
ORDER BY studentresult DESC,subjectno;

二、SELECT语法-分页查询

SELECT   [ALL | DISTINCT]
{  * |  table.* | [ table.field1 [ as  alias1] [, table.field2 [as  alias2]][, …]] }
FROM  table_name  [ as  table_ alias  ]
	[ left|out|inner  join  table_name2 ]    //多表连接查询
    [ WHERE  … ]   	//指定结果需满足的条件
    [ GROUP BY …]	//指定结果按照哪几个字段来分组
    [ HAVING …]	//过滤分组的记录必须满足的次要条件
    [ ORDER BY… ]	//指定查询记录按一个或者多个条件排序
    [ LIMIT  {   [ offset,] row_count    |   row_count OFFSET offset   }] ;  //分页查询
	offset://偏移量
	row_count://显示的记录数
	LIMIT //LIMIT 子句:MySQL查询语句中使用LIMIT子句限制结果集
	如:SELECT studentno,studentresult
		FROM result
		WHERE subjectno=1 AND YEAR(examdate)=2019
		ORDER BY studentresult DESC
		LIMIT 5 //限制显示的结果集的行数,只显示5条

三、SELECT语法-分组查询

SELECT   [ALL | DISTINCT]
{  * |  table.* | [ table.field1 [ as  alias1] [, table.field2 [as  alias2]][, …]] }
FROM  table_name  [ as  table_ alias  ]
    [ left|out|inner  join  table_name2 ]    //多表连接查询
    [ WHERE  … ]   	//指定结果需满足的条件
    [ GROUP BY …]	//指定结果按照哪几个字段来分组
    [ HAVING …]	//过滤分组的记录必须满足的次要条件
    [ ORDER BY… ]	//指定查询记录按一个或者多个条件排序
    [ LIMIT  {   [ offset,] row_count    |   row_count OFFSET offset   }] ;  //分页查询
GROUP BY作用:使用GROUP BY关键字对查询结果分组
	对所有的数据进行分组统计
	分组的依据字段可以有多个,并依次分组
	与HAVING结合使用,进行分组后的数据筛选
GROUP BY子句经常和聚合函数结合使用完成分组统计功能

四、WHERE与HAVING对比

WHERE子句

用来筛选 FROM 子句中指定的操作所产生的行

GROUP BY子句

用来分组 WHERE 子句的输出

HAVING子句

用来从分组的结果中筛选行

五、子查询

基本语法:

SELECT … FROM 表名 WHERE 字段X 比较运算符(子查询)

1.外层查询称为父查询,圆括号中的查询称为子查询。

2.执行SQL语句时,先执行子查询,返回所有来自子查询的结果,再执行外围的父查询,返回查询的最终结果。

3.将子查询和比较运算符联合使用,必须保证子查询返回的值不能多于一个。

1、IN子查询

IN后面的子查询可以返回多条记录。

SELECT … FROM 表名 WHERE 字段X IN(子查询)

2、EXISTS子查询

EXISTS 子查询:带有EXISTS的子查询不返回任何记录的数据,只返回逻辑值“True”或“False”。

有结果为“True”,执行语句;无结果为“False”,不执行语句。

子查询有返回结果: EXISTS子查询结果为TRUE,执行外层查询;

子查询无返回结果: EXISTS子查询结果为FALSE, 外层查询不执行;

SELECT …… FROM 表名 WHERE EXISTS(子查询);

六、多表连接查询

1、内连接

内连接使用比较运算符根据每个表的通用列中的值匹配两个表中的行。

SELECT   字段列表   FROM   表1  INNER JOIN  表2 ON    表1.通用字段名=表2.通用字段名
SELECT   字段列表 FROM   表1 ,表2 WHERE    表1.通用字段名=表2.通用字段名

需要注意的是:

如果两个表中有相同的字段名,必须在列名前加表名。否则将出现 错误代码:1052 Column ‘studentno’ in field

list is ambiguous

查询学生的学号、姓名和成绩,并按照成绩降序排列
//第一种写法
SELECT s.studentno,s.studentname,r.studentresult FROM
student AS s INNER JOIN  result AS r
ON s.studentno=r.studentno ORDER BY r.studentresult DESC
//第二种写法
SELECT s.studentno,s.studentname,r.studentresult FROM
student AS s,result AS r
WHERE s.studentno=r.studentno
ORDER BY r.studentresult DESC

2、多表内连接

ELECT   字段列表 FROM   表1 join 表2 on 表1.通用字段名=表2.通用字段名
join 表3 on 表1.通用字段名=表3.通用字段名
join 表4 on 表4.通用字段名=表3.通用字段名;

3、左外连接

左表(表1)的记录将会全部表示出来,而右表(表2)只会显示符合匹配条件的记录。如图:

匹配,返回到结果集

无匹配,NULL值返回到结果集

SELECT 字段列表 FROM 表1 LEFT JOIN 表2 ON 表1.通用字段名=表2.通用字段名

4、右外连接

右外连接:右表(表2)的记录将会全部表示出来,而左表(表1)只会显示符合匹配条件的记录。如图:

匹配,返回到结果集

无匹配,NULL值返回到结果集

SELECT 字段列表 FROM 表1 RIGHT JOIN 表2 ON 表1.通用字段名=表2.通用字段名

5、自连接

自连接查询其实等同于连接查询,需要两张表,只不过它的左表(父表)和右表(子表)都是自己。做自连接查询的时候,是自己和自己连接,分别给父表和子表取两个不同的别名,然后附上连接条件。

SELECT  c1.cname AS "父名称",c2.cname AS  "子名称"
FROM tbl_category AS c1, tbl_category  AS c2
WHERE c1.cid = c2.pid;

6、不同的SQL JOIN对比

如图片:

到此这篇关于DQL命令查询数据实现方法详解的文章就介绍到这了,更多相关DQL命令查询内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • MySQL 使用DQL命令查询数据的实现方法

    本篇文章博主将带大家一起学习MySQL中常用的数据查询语言. DQL(Data Query Language 数据查询语言) SELECT 语法 SELECT [ALL | DISTINCT] { * | table.* | [table.field1 [as alias1][,table.field2] [as alias2][,...]]} FROM table_name [as table_alias] [left | out | inner join table_name2] #联合查询

  • DQL命令查询数据实现方法详解

    目录 一.SELECT语法-排序 二.SELECT语法-分页查询 三.SELECT语法-分组查询 四.WHERE与HAVING对比 五.子查询 1.IN子查询 2.EXISTS子查询 六.多表连接查询 1.内连接 2.多表内连接 3.左外连接 4.右外连接 5.自连接 6.不同的SQL JOIN对比 一.SELECT语法-排序 SELECT [ALL | DISTINCT] { * | table.* | [ table.field1 [ as alias1] [, table.field2 [

  • MyBatis实现两种查询树形数据的方法详解(嵌套结果集和递归查询)

    目录 方法一:使用嵌套结果集实现 1,准备工作 2,实现代码 方法二:使用递归查询实现 树形结构数据在开发中十分常见,比如:菜单数.组织树, 利用 MyBatis 提供嵌套查询功能可以很方便地实现这个功能需求.而其具体地实现方法又有两种,下面分别通过样例进行演示. 方法一:使用嵌套结果集实现 1,准备工作 (1)假设我们有如下一张菜单表 menu,其中子菜单通过 parendId 与父菜单的 id 进行关联: (2)对应的实体类如下: @Setter @Getter public class M

  • Mongodb中MapReduce实现数据聚合方法详解

    Mongodb是针对大数据量环境下诞生的用于保存大数据量的非关系型数据库,针对大量的数据,如何进行统计操作至关重要,那么如何从Mongodb中统计一些数据呢? 在Mongodb中,给我们提供了三种用于数据聚合的方式: (1)简单的用户聚合函数: (2)使用aggregate进行统计: (3)使用mapReduce进行统计: 今天我们首先来讲讲mapReduce是如何统计,在后续的文章中,将另起文章进行相关说明. MapReduce是啥呢?以我的理解,其实就是对集合中的各个满足条件的文档进行预处理

  • PHP中filter函数校验数据的方法详解

    介绍PHP中filter函数校验数据的方法详解,PHP过滤器包含两种类型:Validation用来验证验证项是否合法 .Sanitization用来格式化被验证的项目,因此它可能会修改验证项的值,将不合法的字符删除. input_filters_list() 用来列出当前系统所支持的所有过滤器. 复制代码 代码如下: <?php foreach(filter_list() as $id => $filter) {     echo $filter.' '.filter_id($filter).

  • java执行SQL语句实现查询的通用方法详解

    完成SQL查询 并将查询结果放入Vector容器,以便其他程序使用 /* * 执行sql查询语句 */ public static <T> Vector<T> executeQuery(Class<T> clazz, String sql, Object... args) { Connection conn = null; PreparedStatement preparedstatement = null; ResultSet rs = null; Vector<

  • Java Fluent Mybatis 聚合查询与apply方法详解流程篇

    前言 接着上一篇文章:Java Fluent Mybatis 分页查询与sql日志输出详解流程篇 我把分页已经调整好了,现在实验一下官方给出的聚合查询方法. GitHub代码仓库:GitHub仓库 数据准备 为了聚合查询的条件,添加了几条数据. MIN 我们试着获取最小的年龄. 方法实现 @Override public Integer getAgeMin() { Map<String, Object> result = testFluentMybatisMapper .findOneMap(

  • SpringBoot导入导出数据实现方法详解

    今天给大家带来的是一个 SpringBoot导入导出数据 首先我们先创建项目 注意:创建SpringBoot项目时一定要联网不然会报错 项目创建好后我们首先对 application.yml 进行编译 server:  port: 8081# mysqlspring:  datasource:    driver-class-name: com.mysql.cj.jdbc.Driver    url: jdbc:mysql://127.0.0.1:3306/dvd?characterEncodi

  • AJAX实现JSON与XML数据交换方法详解

    目录 1.JS中如何创建和访问JSON对象 2.基于JSON的数据交换 3.基于XML的数据交换 1.JS中如何创建和访问JSON对象 (1)在javascript语言中怎么创建一个json对象,语法是什么? "属性名" : 属性值,"属性名" : 属性值.........的格式! 注意:属性值的数据类型随意:可能是数字,可能是布尔类型,可能是字符串,可能是数组,也可能是一个json对象..... <!DOCTYPE html> <html lan

  • Android通过json向MySQL中读写数据的方法详解【读取篇】

    本文实例讲述了Android通过json向MySQL中读取数据的方法.分享给大家供大家参考,具体如下: 首先 要定义几个解析json的方法parseJsonMulti,代码如下: private void parseJsonMulti(String strResult) { try { Log.v("strResult11","strResult11="+strResult); int index=strResult.indexOf("[");

  • vuejs动态组件给子组件传递数据的方法详解

    通过子组件定义时候的props可以支持父组件给子组件传递数据,这些定义的props在子组件的标签中使用绑定属性即可,但是如果使用的是<component>动态组件,这个时候就没有显式的子组件标签,要给子组件传递数据需要在<component> 中进行绑定 <div class="app" id="deviceready"> <component :is="currentView" :user_name.s

随机推荐