在初识MySQL中我们就知道了DQL只有一个关键字select。
可是数据库管理中我们用的最多的就是查询,为了方便我们使用,MySQL定义了大量关键字给我们使用,泪目。
DQL
我们开始认识它
DQL(Data Query Language,数据查询语言)
- 查询数据库数据,如SELECT语句
- 简单的单表查询或多表的复杂查询和嵌套查询
- 数据库语言中
最核心、最重要
的语句使用频率最高
的语句
select语法
SELECT [ALL | DISTINCT]
{ * | table.* | [ table.field1 [ as alias1] [, table.field2 [as alias2]][, …]] }
FROM table_name [ as table_ alias ]
[ left|right|inner join table_name2 ] #联合查询
[ WHERE … ] #指定结果需满足的条件
[ GROUP BY …] #指定结果按照哪几个字段来分组
[ HAVING …] #过滤分组的记录必须满足的次要条件
[ ORDER BY… ] #指定查询记录按一个或者多个条件排序
[ LIMIT { [ offset,] row_count | row_count OFFSET offset }] ; #指定查询的记录从哪条至哪条
注意:
[] 括号代表可选的;
{} 括号代表必须的;
# MySQL语句中的注释符,也可以用 \*该处为注释*/
看起来很多很复杂,其实很简单,让我们从上往下一步一步看
指定查询字段
SELECT [ALL | DISTINCT] { * | table.* | [ table.field1 [ as alias1] [, table.field2 [as alias2]][, …]] FROM table_name [ as table_ alias ]
[ALL | DISTINCT]:
ALL(默认)
:返回所有满足条件的记录,不去重。
DISTINCT
:返回去重后的记录,即每个不同的值只返回一次。
{ * | table.* | [table.field1 [as alias1] [, table.field2 [as alias2]][, …]] }
*
:选择所有列。
table.*
:选择指定表中的所有列。
table.field1 [as alias1]
:选择指定表中的某一列,并可使用别名进行重命名。
多个列用逗号分隔,在 SELECT 语句返回的结果集中将会包含指定的列。可以使用 as 关键字给列起别名,别名可以在结果集中使用。
FROM table_name [as table_alias]:
table_name
:指定要从中查询数据的表的名称。
as table_alias
(可选):给表设置别名,用于简化查询语句的书写,可以在后续的查询中使用该别名
where条件语句
用于检索数据表中符合条件的记录,搜索条件可由一个或多个逻辑表达式组成,结果一般为真或假 。
where搜索条件的组成 :逻辑操作符+ 比较操作符
逻辑操作符
逻辑操作符用于连接或改变条件表达式之间的逻辑关系,常见的逻辑操作符有:
操作符 | 描述 |
---|---|
AND | 与操作,所有条件都必须为真 |
OR | 或操作,只要有一个条件为真即可 |
NOT | 非操作,取反条件的结果 |
比较操作符
比较操作符用于比较两个表达式之间的关系,常见的比较操作符有:
操作符 | 描述 |
---|---|
= | 等于 |
!= | 不等于 |
> | 大于 |
< | 小于 |
<> | 不等于 |
>= | 大于等于 |
<= | 小于等于 |
is | 相同 |
is not | 不相同 |
BETWEEN | 在某个范围内 |
LIKE | 模糊匹配 |
IN | 在给定的值列表中 |
这些操作符可以与WHERE语句结合使用,用于构建复杂的搜索条件,以过滤出满足特定条件的记录。注意,逻辑操作符和比较操作符可以根据需要进行组合和嵌套,以构建更复杂的条件表达式。
例如,可以使用WHERE语句如下:
SELECT column1, column2
FROM table_name
WHERE column1 = 'value' AND column2 > 10
is isnot 和 = !=的区别:
- “=”(等于)和"!="(不等于):
- "="操作符用于比较两个值是否相等。
- "!="操作符用于比较两个值是否不相等。
这两个操作符可以用于比较各种数据类型(数值、字符、日期等),并返回布尔值(True或False)。
示例:
SELECT * FROM table_name WHERE column1 = 10;
-- 返回column1等于10的记录
SELECT * FROM table_name WHERE column2 != 'abc';
-- 返回column2不等于'abc'的记录
- “IS"和"IS NOT”:
- "IS"操作符用于比较一个值是否与另一个值相同或为NULL。
- "IS NOT"操作符用于比较一个值是否与另一个值不同或不为NULL。
这两个操作符主要用于NULL值的比较。
示例:
SELECT * FROM table_name WHERE column1 IS NULL;
-- 返回column1为NULL的记录
SELECT * FROM table_name WHERE column2 IS NOT NULL;
-- 返回column2不为NULL的记录
需要注意的是,"IS"和"IS NOT"操作符只能用于比较NULL值,而不能用于比较其他数据类型的值。
between and操作符
between and操作符用于指定范围,以便选择在指定范围内的数据
语法:
SELECT 字段列1,字段列2 ,…FROM 表名 WHERE 字段列x BETWEEN 值1 AND 值2
相当于于 >= 和 <= 联合使用
举例 :
#查询课程表中课时在110和120之间的所有记录
select * from subject where ClassHour between 110 and 120;
等同于:
SELECT * FROM subject WHERE ClassHour >= 110 AND ClassHour <=120;
再次提醒mysql不区分大小写
like操作符
like操作符用于在where子句中搜索符合特定模式的数据(模糊查询)。LIKE操作符通常与通配符一起使用,常见的通配符有 % 和 _。
%:代表零个、一个或多个字符。
_:代表一个单一字符。
举例:
#查询包含“数学”的所有课程
SELECT * FROM subject WHERE SubjectName LIKE "%数学%";
#查询所有姓名为“李**”三个字的学生信息
SELECT StudentNo,StudentName FROM student
WHERE StudentName LIKE "李__";
null空值条件查询
用来判断字段是不是null,常于is 和is not 一起使用。
null 的概念:
- NULL代表“无值”
- 区别于零值0和空符串“”
- 只能出现在定义允许为NULL的字段
- 须使用 IS NULL 或 IS NOT NULL比较操作符去比较
联合查询
in操作语句
IN操作符用于指定条件范围,以便从一组可能的值中选择。
语法:
SELECT 字段列1,字段列2 ,…FROM 表名 WHERE 字段列x IN ( 值1,值2,值3…)
相当于or
的使用
示例:
SELECT * FROM subject where ClassHour = 100 OR ClassHour =110 OR ClassHour = 120; #普通处理方式
SELECT * FROM subject where ClassHour IN ( 100, 110,120 );
#相比于or,使用IN进行查询方式,更为简洁,效率更高
join连接符
在表中至少一个匹配时,则返回记录
在 MySQL 中,除了使用 UNION 进行联合查询外,你提到的另一种情况涉及连接(JOIN)操作,包括内连接(INNER JOIN)和外连接(OUTER JOIN)。这些连接操作允许你根据关联条件从多个表中检索数据。以下是它们的简要介绍:
-
内连接(INNER JOIN):
- 内连接根据两个表之间的相关列的值将两个表中的行组合起来。
- 语法示例:
SELECT student.age, teacher.name FROM student INNER JOIN teacher ON teacher.class = student.class;
- 在上面的示例中,INNER JOIN 将根据 teacher 表和 student 表中的 class 列进行匹配,并返回满足条件的行。
-
外连接(OUTER JOIN):
- 外连接又分为左外连接(LEFT JOIN)、右外连接(RIGHT JOIN)和全外连接(FULL JOIN)。
- 左外连接(LEFT JOIN):返回左表中的所有行,以及右表中匹配的行。
- 右外连接(RIGHT JOIN):返回右表中的所有行,以及左表中匹配的行。
- 全外连接(FULL JOIN):返回左表和右表中的所有行,如果没有匹配的行则用 NULL 值填充。
- 语法示例:
SELECT student.age, teacher.name FROM student LEFT JOIN teacher ON teacher.class = student.class;
- 在上面的示例中,LEFT JOIN 将返回 student 表中的所有行,并且匹配 teacher 表中的行,如果没有匹配的行则用 NULL 值填充 teacher.name。
通过使用连接操作符,可以根据表之间的关联条件从多个表中检索数据,并根据需要选择合适的连接类型来获取所需的结果集。