MySQL:DQL 数据查询语句盘点

本篇内容包括: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 NULLa IS NULL若操作数为NULL,则结果为真
IS NOT NULLa IS NOT NULL若操作数不为NULL,则结果为真
BETWEENa BETWEEN b and c若a范围在b与c之间,则结果为真
LIKEa LIKE bSQL模式匹配,若a匹配b,则结果为真
INa 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)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/535523.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL:DML 数据操作语句盘点

本篇内容包括&#xff1a;DML 的简介、INSERT 命令、UPDATE 命令、DELETE 命令以及 TRUNCATE 命令的使用。 一、DML 简介 DML&#xff08;Data Manipulation Language&#xff09;语句&#xff0c;即数据操作语句&#xff0c;用于操作数据库对象中所包含的数据。 常用关键字包…

MySQL:DDL 数据定义语句盘点

本篇内容包括&#xff1a;DDL 的简介、SHOW 查看语句、CREATE 创建语句、ALTER 修改语句以及 DROP 删除语句的使用。 一、DDL 简介 DDL&#xff08;Data Definition Language&#xff09;&#xff0c;即数据定义语句&#xff0c;功能就是定义数据库DATabase、表table、索引ind…

MySQL:DCL 数据控制语句盘点

本篇内容包括:DCL 简介、GRANT、REVOKE、COMMIT、ROLLBACK、SAVEPOINT、LOCK命令的使用。 一、DCL 简介 DCL&#xff08;Data Control Language&#xff09;语句&#xff0c;即数据控制语句&#xff0c;用于设置或更改数据库用户或角色权限的语句 常用关键字包括&#xff1a;…

oracle迁移父子数据

现有需求如下&#xff0c;业务组织单元表中id字段数据在另外一个系统全部重复&#xff0c;但需要将此业务单元组织导入另一系统 业务组织单元表Isc_Specialorg_Unit 表中存在ID字段为子节点数据&#xff0c;parent_id为父节点数据&#xff0c;orgpath为组织路径 现在做如下操…

批量更新数据库数据

"update isc22.isc_user t set t.saphrid "&E1&"where t.id "&B1&";"

oracle控制文件

控制文件是数据库里面非常重要的一类文件,它记录了当前实例连接的数据库的结构和行为&#xff0c;并维护数据库的一致性。 初始化参数文件中描述其位置&#xff0c;很小的:二进制文件,一般不要超过100mmount读open一直在用 控制文件只能连接一个database丢失要恢复 …

oracle表空间

概念 表空间和数据文件 ●表空间是逻辑存储概念&#xff0c;一个表空间是一个或多个数据文件的逻辑集合 ●存储对象(表、索引)逻辑的存储在表空间上&#xff0c;而存储对象的数据物理的存放在数据文件上 ●数据库至少需要一个叫做system的表空间&#xff0c;也就是系统表空间 ●…

oracle日志

日志分类 redo log files联机日志或重做日志 archived log files归档日志 1184198alert log files 告警日志 trace files user_ _dump_ _dest 用户信息日志如跟踪会话日志 background dump_ dest进程日志还有其他一-些不常用的日志 v$database的log_mode 数据库归档模式…

MySQL:分库分表知识点盘点

本篇内容包括&#xff1a;数据库瓶颈、分库分表以及分库分表相关问题 一、数据库瓶颈 不管是IO瓶颈&#xff0c;还是CPU瓶颈&#xff0c;最终都会导致数据库的活跃连接数增加&#xff0c;进而逼近甚至达到数据库可承载活跃连接数的阈值。在业务Service来看就是&#xff0c;可用…

oracle的sga

sga SGA的管理 ■有三种方式&#xff1a; ●8i:SGA的总大小由所有内存组件大小之和决定&#xff0c;不能直接定义SCA大小。对内部组件大小的修改必须在数据库重起 后 才能生为&#xff0c;所以叫做SGA的静态管理。 ●9i&#xff…

MySQL:日志知识点盘点

本篇内容包括&#xff1a;binlog&#xff08;二进制日志&#xff09;、redo log 以及 undo log 一、binlog&#xff08;二进制日志&#xff09; binlog 用于记录数据库执行的写入性操作(不包括查询)信息&#xff0c;以二进制的形式保存在磁盘中。binlog是mysql的逻辑日志&…

ROWNUM的使用

一个伪列看起来像是一个表中的列&#xff0c;但实际上并不保存在表中。你可以查询&#xff0c; 但是不能插入&#xff0c;修改和删除其中的值。一个伪列也类似于一个没有参数的函 数。但是在典型情况下&#xff0c;在结果集中可以为每一行返回相同的值&#xff0c;而伪列通 常为…

MySQL:主从相关知识点盘点

本篇内容包括&#xff1a;MySQL 主从复制简介、主从复制的原理以及主从搭建 一、MySQL 主从复制简介 在实际的生产中&#xff0c;为了解决Mysql的单点故障已经提高MySQL的整体服务性能&#xff0c;一般都会采用**「主从复制」**。 比如&#xff1a;在复杂的业务系统中&#x…

oracle导出expdp

expdp/impdp 是 oracle 10g 版本后推出的服务器端工具--数据泵&#xff0c;作用是为了将数据库中的逻辑对象&#xff0c;比如表、用户、全库、表空间进 行导入&#xff0c;导出 命令解析 ATTACH ATTACH [[schema_name.]job_name] schema_name 表示用户名,job_name 表示导出的作…

oracle导入impdp

expdp/impdp 是 oracle 10g 版本后推出的服务器端工具--数据泵&#xff0c;作用是为了将数据库中的逻辑对象&#xff0c;比如表、用户、全库、表空间进 行导入&#xff0c;导出REMAP_DATAFILE 该选项用于将源数据文件名转变为目标数据文件名, 在不同平台之间搬移表空间时可能需…

oracle高水位线

ORACLE在逻辑存储上分4个粒度: 表空间, 段, 区 和 块. 1.1 块: 是粒度最小的存储单位,现在标准的块大小是8K,ORACLE每一次I/O操作也是按块来操作的,也就是说当ORACLE从数据文件读数据时,是读取多少个块,而不是多少行. 每一个Block里可以包含多个row. 1.2 区:…

oracle检查点

检 查 点 概述 ■l当修改数据时&#xff0c;需要首先将数据读入内存中&#xff08;Buffer Cache&#xff09;&#xff0c;修改数据的同时&#xff0c;Oracle会记录重做信息&#xff08;Redo&#xff09;用于恢复。因 为有了重做信息的存在&#xff0c;Oracle不需要在提交时…

文献翻译:Java theory and practice: Fixing the Java Memory Model, Part 2

Java theory and practice: Fixing the Java Memory Model, Part 2 译&#xff1a;Java 理论与实践&#xff1a;修复 Java 内存模型&#xff0c;第 2 部分 翻译自&#xff1a;http://www.ibm.com/developerworks/library/j-jtp03304/&#xff08;原文写于2004年3月&#xff0…

oracle的buffercache

LRU空闲或者干净的链&#xff0c;可以从这里找到未修改的数据LRUW脏链&#xff0c;一个脏块同时挂到了lruw和检查点队列&#xff0c;LRUW分冷端和热端&#xff0c;冷端即为更新频率较低的一端&#xff0c;热端为更新频率较高的一端&#xff0c;dbwn写入数据文件时从冷端开始写入…

oracle的undo

Undo段中区的状态free expiredinactiveactive 显示UNDO区信息 SELECT extent_ id, bytes&#xff0c; status FROM dba_ _undo_ _extentsWHERE segment_ name SYSSMU1S ; 图解一一个事务的操作流程 Undo段的组成:段头、回滚块 事务ID …