MySQL:开始深入其数据(二)DQL

在初识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 和 = !=的区别:

  1. “=”(等于)和"!="(不等于):
    • "="操作符用于比较两个值是否相等。
    • "!="操作符用于比较两个值是否不相等。

这两个操作符可以用于比较各种数据类型(数值、字符、日期等),并返回布尔值(True或False)。

示例:

SELECT * FROM table_name WHERE column1 = 10;
-- 返回column1等于10的记录

SELECT * FROM table_name WHERE column2 != 'abc';
-- 返回column2不等于'abc'的记录
  1. “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)。这些连接操作允许你根据关联条件从多个表中检索数据。以下是它们的简要介绍:

  1. 内连接(INNER JOIN)

    • 内连接根据两个表之间的相关列的值将两个表中的行组合起来。
    • 语法示例:
      SELECT student.age, teacher.name
      FROM student
      INNER JOIN teacher ON teacher.class = student.class;
      
    • 在上面的示例中,INNER JOIN 将根据 teacher 表和 student 表中的 class 列进行匹配,并返回满足条件的行。
  2. 外连接(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。

通过使用连接操作符,可以根据表之间的关联条件从多个表中检索数据,并根据需要选择合适的连接类型来获取所需的结果集。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

分才

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值