本篇内容包括:DQL 的简介、SELECT 语句、WHERE 条件语句、JOIN 连接查询(多表查询)和分组、过滤、排序、分页、子查询的使用。

一、DQL 简介

DQL(Data QueryLanguage)语句,即数据查询语句

常用的语句关键字有:SELECT、FROM、WHERE、ORDER BY、HAVING、ASC|DESC


二、SELECT 语句

1、SELECT 语句

SELECT [ALL | DISTINCT]
{* | table.* | [table.field1[as alias1] [,table.field[as alias2]][,...]]}
FROM table_name [as table_alias]
[left | right | inner join table_name2]  #联合查询
[WHERE ...]         # 指定结果需满足的条件
[GROUP BY ...]    # 指定结果按照哪几个字段来分组
[HAVNG ...]         # 过滤分组的记录必须满足的次要条件
[ORDER BY ...]    # 指定查询记录按一个或多个条件排序
[LIMIT { [offset,]row_count  |  row_count OFFSET offset}];  #指定查询的记录从哪条至哪条

PS:

  • []括号代表可选的;
  • {}括号代表必须的;
  • #为MySQL语句中的注释符,也可以用 /**/

指定查询字段:

  • 查询表中所有的数据列结果,采用"*"符号 :SELECT * FROM 表名;

  • 可指定查询的结果数据列:SELECT 字段1,字段2,.... FROM 表名;

  • 如需要区分连接查询时两个表有同名的字段:SELECT 表1.字段1,表2.字段2,字段3,.... FROM 表1,表2;

2、AS 子句

SELECT StudentNo AS "学号" FROM student;              # 可给数据列取一个新别名
SELECT a.StudentNo FROM student AS a;                       # 可给表取一个新别名
SELECT Phone+1 AS Tel FROM student;                            # 可把经计算或总结的结果用另外一个新名称来代替

3、DISTINCT 子句

SELECT DISTINCT 字段名1,字段名2...  FROM 表名            #掉SELECT查询返回的记录结果中重复的记录(所有返回列的值都相同),只返回一条

PS:ALL 关键字是默认的(不加DISTINCT默认ALL),返回所有的记录,与DISTINCT相反。

4、使用表达式的列

表达式一般由文本值、列值、NULL、函数和操作符等组成

应用场景:

  1. SELECT语句返回结果列中使用
  2. SELECT语句的ORDER BY 、HAVING等子句中使用
  3. DML语句中的WHERE条件语句中使用表达式

PS:需要避免SQL返回结果中包含".“,”*"和括号等干扰开发语言程序


三、WHERE 条件语句

1、WHERE 条件语句

用于检索数据表中符合条件的记录,搜索条件可由一个或多个逻辑表达式组成,结果一般为真或假。

搜索条件的组成:

  1. 逻辑操作符
  2. 比较操作符

2、逻辑操作符

操作符名称 语法 描述
AND&& a AND ba && b 逻辑与,同时为真,结果才为真
OR 或` `
NOT! NOT a!a 逻辑非,若操作数为假,结果则为真

3、比较操作符

操作符名称 语法 描述
IS NULL a IS NULL 若操作数为NULL,则结果为真
IS NOT NULL a IS NOT NULL 若操作数不为NULL,则结果为真
BETWEEN a BETWEEN b and c 若a范围在b与c之间,则结果为真
LIKE a LIKE b SQL模式匹配,若a匹配b,则结果为真
IN a IN (a1,a2,a3,…) 若a等于a1,a2,a3,…中的某一个,则结果为真

PS:1. 数值数据类型的记录之间才能进行算数运算;2. 相同数据类型的数据之间才能进行比较。

4、BETWEEN AND 范围查询子句

SELECT 字段1,字段2,.... FROM 表名 WHERE 字段X BETWEEN 值1 AND 值2              # 根据一个范围值来检索,等同于>=和<=联合使用

5、LIKE 模糊查询子句

在 WHERE 子句中,使用 LIKE 关键字进行模糊查询

  • %一起使用,表示匹配 0 或任意多个字符
  • _一起使用,表示匹配单个字符
  • 如果需要显示%或者_,可以使用转义字符\,也可以用ESCAPE关键字自定义转义符,如:

6、IN范围查询

在 WHERE 子句中使用 IN 关键字进行范围查询

SELECT 字段列1,字段2,...FROM 表名 WHERE 字段X IN (值1,值2,值3...)

查询的字段X的值,至少与括号中的一个值相同,多个值之间用英文逗号隔开

7、NULL空值条件查询

  • NULL代表"无值"
  • 区别于零值0和空字符串""
  • 只能出现在定义允许为NULL的字段
  • 须使用IS NULL 或 IS NOT NULL比较操作符去比较

四、JOIN 连接查询(多表查询)

1、JOIN 连接查询

如需要多张数据表进行查询,则可通过连接运算符实现多个查询

分类包括内连接和外连接

2、内连接(inner join)

在表中至少一个匹配时,则返回记录

SELECT 字段1,字段2,... FROM table_1
INNER JOIN table_2
ON table_1.字段X = table_2.字段Y;

3、等值连接

SELECT 字段1,字段2,.... FROM table_1,table_2
WHERE table_1.字段X =table_2.字段Y;
  • 与单表查询类似,都是SELECT语句
  • 把多个表放在FROM后,并用逗号隔开
  • 可使用AS关键字取别名,便于引用
  • 如无重名查询字段则可省略数据表的指定

4、非等值连接

SELECT 字段1,字段2,.... FROM table_1,table_2 ;
  • 返回记录数为两表记录数的乘积

5、自连接

SELECT 字段1,字段2,.... FROM 表1 别名1,表1 别名2;
  • 数据表与自身进行连接

6、外连接(out join)——左连接

从左表(table_1)中返回所有的记录,即便在右表(table_2)中没有匹配的行

SELECT 字段1,字段2,... FROM table_1
LEFT JOIN table_2
ON table_1.字段X =table_2.字段Y;

7、外连接(out join)——右连接

从右表(table_2)中返回所有的记录,即便在左表(table_1)中没有匹配的行

SELECT 字段1,字段2,... FROM table_1
RIGHT JOIN table_2
ON table_1.字段X =table_2.字段Y;

8、不同的SQL JOIN对比

操作符名称 描述
INNER JOIN (JOIN) 如果表中至少有一个匹配,则返回行
LEFT JOIN 无论右表是否有匹配,都会返回左表的所有行
RIGHT JOIN 无论左表是否有匹配,都会返回右表的所有行

9、full join

mysql 不支持 full join,使用 left joinright join。可以相当与左右链接的结果

select * from t1 left join t2 on t1.id = t2.id
union
select * from t1 right join t2 on t1.id = t2.id

五、分组、过滤、排序、分页

1、GROUP BY 语句

  • 对所有数据进行分组统计。分组的依据字段可以有多个,并依次分组
  • 与HAVING结合使用,进行分组后的数据筛选
  • GROUP BY的语句顺序在WHERE后面,ORDER BY 的前面
  • 通常在对数据使用计算统计的时候,会用到GROUP BY分组

2、HAVING 语句

过滤分组的记录必须满足的次要条件。SELECT语句中,在GROUP BY分组之后再进行条件筛选,就不能使用WHERE,而是在GROUP BY后面通过HAVING进行分组后的条件筛选。HAVING的作用等同于WHERE。

3、ORDER BY 语句

ORDER BY 列名1 ASC/DESC[,列名2 ASC/DESC,...]
  • SELECT 语句查询得到的结果,按某些字段进行排序
  • DESCASC搭配使用,默认为 ASC
  • ASC 为升序排列,DESC 为降序排列

4、LIMIT

分页显示,对用户体验、网络传输、查询压力上都有好处

LIMIT[m,]n 或 LIMIT n OFFSET m
  • 限制 SELECT 返回结果的行数
  • m 指定第一个返回记录行的偏移量(显示的起始位置)
  • n 指定返回记录行的最大数目(显示行数)
  • m 不指定则偏移量为 0,从第一条开始返回前 n 条记录
  • 在MySQL中,显示每页的行数可以使用 LIMIT (页码-1)*行数,行数

六、子查询

在查询语句中的WHERE条件子句中,又嵌套了另外一个查询语句

  • 嵌套查询可由多个子查询组成,求解的方式是由里及外
  • 子查询返回的结果一般都是集合,故而建议使用IN关键字

例如:

SELECTstudentno "学号",studentname "姓名"
FROMstudent
WHEREstudentno IN (SELECTstudentnoFROMresultWHEREsubjectno =(SELECTsubjectnoFROM`subject`WHEREsubjectname = '高等数学-2')AND studentresult >= 80)

MySQL:DQL 数据查询语句盘点相关推荐

  1. MySQL中SQL语句——DQL(数据查询语句)

    前言: 首先对于数据库有一定的了解,会对于Mysql的学习有一定的帮助: 数据库主要分为 DB(数据库),DBMS(数据库管理系统),SQL(结构化查询语言,用于和DBMS通信的语言):这篇要讲的DQ ...

  2. MySQL精讲(一) |DQL数据查询语句全解析

    MySQL精讲系列文章(更新完毕) <MySQL入门必看知识> <MySQL精讲(一) | DQL数据查询语句全解析> <MySQL精讲(二) | DML数据操作语句全解 ...

  3. 3、DQL(数据查询语句)

    目录 01.DQL(数据查询语言) 02.创建学生表(stu).雇员表(emp) 完成数据查询操作 0.创建表:学生表(stu).雇员表(emp) 1.基础查询 2.条件查询 3.模糊查询 4.字段控 ...

  4. MySQL中数据查询语句

    一.基本概念(查询语句)* ①基本语句 1."select * from 表名;",-可查询表中全部数据: 2."select 字段名 from 表名;",-可 ...

  5. MySQL学习记录 (二) ----- SQL数据查询语句(DQL)

    相关文章: <MySQL学习记录 (一) ----- 有关数据库的基本概念和MySQL常用命令> <MySQL学习记录 (二) ----- SQL数据查询语句(DQL)> &l ...

  6. MySQL数据查询语句

    MySQL数据查询语句 MySQL 表单查询是指从一张表的数据中查询所需的数据,主要有查询所有字段.查询指定字段.查询指定记录.查询空值.多条件的查询.对查询结果进行排序分组等. 查询结构 SELEC ...

  7. 数据库1:数据库、DDL数据库定义语言、DML操作数据库语言、DQL条件查询语句

    数据库 SQL(Structure Query Language)语言是数据库的核心语言. SQL语言共分为四大类:数据查询语言DQL,数据操做语言DML,数据定义语言DDL,数据控制语言DCL. 1 ...

  8. MySQL的基本查询语句

    MySQL的基本查询语句 一.数据准备 CREATE TABLE `customers` (`cust_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '顾客I ...

  9. MySQL多表查询语句

    MySQL多表查询语句 1.内连接查询 1.隐式内连接:使用where条件消除无用数据例子: --查询所有员工信息和对应的部门信息SELECT * FROM emp,dept WHERE emp.de ...

最新文章

  1. PCDN实现flash无延时直播的技术原理与优点
  2. 这项技术是谷歌AI的New Sexy:利于隐私、节能环保,目前最大挑战是布道阐释
  3. MySQL执行外部sql脚本文件的命令
  4. C#开发Android应用的必备——Mono for Android V1.0 发布
  5. 软件测试的特殊字符包含什么,测试常见的特殊字符集及接口测试中的测试字符...
  6. kickstart批量安装Linux系统
  7. JSP中的include指令
  8. java.lang.IllegalStateException: attempt to re-open an already-closed object
  9. vs2017 + miniUI 后端框架使用
  10. C语言中忽略scanf的价值,c语言的scanf接收到底是忽略空格还是不忽略呢?
  11. ZXing开发彩色二维码
  12. 三组计算机局域网组网方案,多种方式组建家庭局域网
  13. 【OGG】OGG故障错误处理总结
  14. c语言进行数据统计分析的研究报告,【干货分享】CCTS:临床试验统计分析计划及统计分析报告...
  15. NSA方程式泄漏工具包浅析
  16. 有自学能力的人,赚钱极其简单—来福宝盒
  17. Autolayout - NSLayoutAnchor
  18. ubuntu conf误删除的问题
  19. OC与C语言的一些区别
  20. SAP系统成本中心、内部订单、成本流、成本要素、成本对象

热门文章

  1. skip gram和cbow的优缺点
  2. 几个方法帮你加快Python运行速度
  3. 基于web的校园论坛的设计与实现-计算机毕设 附源码92291
  4. Android待机时收到screen on广播
  5. 基于java记账管理系统(论文+PPT+源码)
  6. 自媒体短视频怎么把文字转配音?
  7. js设置获取删除cookie
  8. python 将三维数据转为二维_将三维切片转换为二维图像
  9. 张军掌印羽协撬动大变局 国羽梦之队能否重振雄风?
  10. 电竞比分源码 免买分 可二开