SQL-入门-02(1)

2023-05-16

MySQL-02

  • 比较运算符
  • 逻辑运算符
    • 使用 AND 连接多条件
    • 使用 OR 连接多个条件
    • 使用 NOT 过滤不满足条件的数据(理解题意,看题意确定逻辑)
  • 特殊条件
    • 使用 IN 查询多条件
    • 使用 NOT IN 排除
    • 使用 BETWEEN AND 查询两值间的数据范围
    • 使用 IS NULL 查询空数据
    • 使用 LIKE 模糊查询
  • 使用 ORDER BY(order by) 对数据进行排序
      • 对多列进行排序
  • 使用 LIMIT 限制输出行数
  • DISTINCT(distinct) 返回唯一不同的值。

比较运算符

比较运算符用于比较运算,判断逻辑是否成立。
比较运算符的使用方式如下:
A operator B
其中 operator 是比较运算符,用于对 A 和 B 进行比较运算。

常用的比较运算符有 =(等于) 、!=(不等于)、 <>(不等于)、<(小于)、<=(小于等于)、>(大于)、>=(大于等于),其中 != 和 <> 在特殊情况下用法是不同的,这里暂时不提。
比较运算符常常与 WHERE 在一起使用。WHERE 用于逻辑判断,WHERE 后面写判断的条件,满足条件的语句会被筛选出来。

逻辑运算符

使用 AND 连接多条件

使用 SQL 中的逻辑运算符 AND 可以将 WHERE 子句中将两个或两个以上的条件结合起来,其结果是满足 AND 连接的所有条件的数据。
语法
SELECT column_name
FROM table_name
WHERE condition1 AND condition2;
其中:
condition 为设置的条件,最后返回的结果应为满足 condition1 和 condition2 的数据。

使用 OR 连接多个条件

使用 SQL 中的逻辑运算符 OR 与 AND 关键字不同,OR 关键字,只要记录满足任意一个条件,就会被查询出来。
语法
SELECT column_name
FROM table_name
WHERE condition1 or condition2;
其中:
condition1 和 condition2 为设置的条件,最后返回的结果应满足 condition1 或 condition2 的数据

使用 NOT 过滤不满足条件的数据(理解题意,看题意确定逻辑)

使用 SQL 中的逻辑运算符 NOT 可以过滤掉 WHERE 子句中不满足条件的结果集。
语法
SELECT column_name
FROM table_name
WHERE NOT condition;
其中:
condition 为设置的条件,最后返回的结果应不满足 condition 。

假设我们要查询教师表 teachers 中除了年龄 age 在 20 岁以上(不包括 20 岁)且来自于中国(CN)的以外所有教师信息,我们可以使用下面的 SQL 语句

SELECT * FROM teachers WHERE NOT (age > 20 AND country = ‘CN’);
SELECT * FROM teachers WHERE age <20 or country != ‘CN’;

题目要求查询课程表 courses 中,教师 id teacher_id 不为 3,且学生人数 student_count 超过 800 的所有课程,最后返回满足条件的课程的所有信息。

select * from courses where not (teacher_id = 3 or student_count<=800);
select * from courses where teacher_id <>3 and student_count>800;

特殊条件

使用 IN 查询多条件

当我们需要查询单个表条件过多时,就会用多个 ‘OR’ 连接或者嵌套,这会比较麻烦,现在我们有 ‘IN’ 能更方便的解决这一问题。
IN 用法:
SELECT *
FROM table_name
WHERE column_name IN value;

👇 我们可以通过下面的实例来感受一下 IN 的用法。
假如我们想查询教师表 teachers 中教师国籍为中国 (CN) 或英国 (UK) 的所有教师信息,我们可以使用下面的 SQL 语句:

SELECT *
FROM teachers
WHERE country IN (‘CN’, ‘UK’);

使用 NOT IN 排除

前面我们已经学习了逻辑运算符,这里的 ‘IN’ 也可以与逻辑运算符 ‘NOT’ 并用,组成 ‘NOT IN’,表示不在集合中的所有结果。
NOT IN 用法:
SELECT *
FROM table_name
WHERE column_name NOT IN value;

👇 我们可以通过下面的实例来感受一下 NOT IN 的用法。
假如我们想查询教师表 teachers 中国籍 “country” 不为日本 (JP) 和美国 (USA) 的所有教师信息,我们可以使用下面的 SQL 语句:

SELECT *
FROM teachers
WHERE country NOT IN (‘JP’, ‘USA’);

使用 BETWEEN AND 查询两值间的数据范围

ETWEEN AND 会选取介于两个值之间的数据范围。这些值可以是数值、文本或者日期。
请注意,在不同的数据库中,BETWEEN 操作符会产生不同的结果!
在某些数据库中,BETWEEN 选取介于两个值之间但不包括两个测试值的字段。
在某些数据库中,BETWEEN 选取介于两个值之间且包括两个测试值的字段。
在某些数据库中,BETWEEN 选取介于两个值之间且包括第一个测试值但不包括最后一个测试值的字段。
因此,请检查您的数据库是如何处理 BETWEEN 操作符!
我们这里选用的是 MySQL 的支持,BETWEEN 选取介于两个值之间且包括两个测试值的字段,即
BETWEEN 200 AND 250 选取结果会包括 200 和 250

BETWEEN AND 用法:
SELECT *
FROM table_name
WHERE column_name BETWEEN value AND value;

👇 我们可以通过下面的实例来感受一下 BETWEEN AND 的用法。
下面的 SQL 语句从 teachers 表中查询年龄在 20 到 25 岁之间( 包括 20 和 25 岁 ),但是国籍不为中国和英国的教师信息,注意,BETWEEN AND 包括选取的两个值:

SELECT *
FROM teachers
WHERE (age BETWEEN 20 AND 25) AND (country NOT IN (‘CN’,‘UK’));

注意这里我们 AND 左右的条件语句加入了括号(),是为了让括号()内的子语句优先计算,得到逻辑值真 (True) 或假 (False),再通过 AND 比较获得结果。

使用 IS NULL 查询空数据

NULL 值代表遗漏的未知数据。默认的,表的列可以存放 NULL 值。
如果表中的某个列是可选的,那么我们可以在不向该列添加值的情况下插入新记录或更新已有的记录。这意味着该字段将以 NULL 值保存。

NULL 用作未知的或不适用的值的占位符。
注释:无法比较 NULL 和 0;它们是不等价的。
无法使用比较运算符来测试 NULL 值,比如 =、!= 或 <>。

我们必须使用 IS NULL 和 IS NOT NULL操作符。

IS NULL 用法:
SELECT *
FROM table_name
WHERE column_name IS NULL;

👇 我们可以通过下面的实例来感受一下 IS NULL 的用法。
假如我们想从教师表 teachers 中查询邮箱 email 为空的所有教师信息,我们可以使用下面的 SQL 语句:

SELECT *
FROM teachers
WHERE email IS NULL;

使用 LIKE 模糊查询

在这里我们学习使用 LIKE 更准确规范得解决文本比较问题。
LIKE 比较类似我们平时用到的搜索。
\

SELECT *
FROM table_name
WHERE column_name LIKE value;

👇 我们可以通过下面的实例来感受一下 LIKE 的用法。
假如我们想查询课程表 courses 中以字母 ‘D’ 开头的所有课程,我们可以使用下面的 SQL 语句:

SELECT *
FROM courses
WHERE name LIKE ‘D%’;

其中 ‘D%’ 表示以 D 开头的所有单词,% 表示为通配符,可以替代 0 个或多个字符

通配符描述
%替代 0 个或多个字符
_替代一个字符
[charlist]字符列中的任何单一字符
或 [!charlist]不在字符列中的任何单一字符

使用 ORDER BY(order by) 对数据进行排序

当我们想要查询具有明确排序的数据时,ORDER BY 关键字就可以帮助到我们。
ORDER BY 关键字用于对结果集按照一个列或者多个列进行排序,其具有 ASC(升序)和 DESC(降序)两个关键字,且默认按照升序排列。

ASC :按升序排列,ORDER BY 默认按照升序对记录进行排序,因此升序的关键字 ASC 可以省去不写。
DESC:按降序排列,如果需要按照降序对记录进行排序,可以使用 DESC 关键字。

基本语法
SELECT column_name, column_name
FROM table_name
ORDER BY column_name, column_name ASC|DESC;

对多列进行排序

在对多列进行排序时,ORDER BY 关键字后面列的顺序就是排序的顺序,先按照第一个 column_name 排序,再按照第二个 column_name 排序,依次类推。

假如我们想查询课程表 courses 中的课程信息中 teacher_id 为 1、2 或 3 的课程的名称、教师 id 和创建时间,并使结果按照教师 id 排序,如果教师 id 相同,则按照创建课程时间排序。

我们可以使用下面的 SQL 语句:
SELECT name,teacher_id,created_at
FROM courses
WHERE teacher_id in (1,2,3)
ORDER BY teacher_id,created_at;
这里 ORDER BY 关键字要写在 WHERE 关键字后面,先条件后排序,不然会报错。

使用 LIMIT 限制输出行数

是当我们数据非常多时,如果只希望返回有限个数的数据的时候我们该怎么办呢?这时候 LIMIT 子句就能帮助到我们。
LIMIT 子句用于 SELECT 中,对输出结果集的行数进行约束,LIMIT 接收2个参数 offset 和 count,两个参数都是整型数字,但通常只用一个。

基本语法
SELECT column_name, column_name
FROM table_name
LIMIT offset , count;
offset :是返回集的初始标注,起始点是0,不是1哦
count :制定返回的数量

请编写 SQL 语句,从教师表(teachers)中查询一条年龄最大的中国教师的信息。

select * from teachers where country =‘CN’ order by age desc limit 0,1;

DISTINCT(distinct) 返回唯一不同的值。

DISTINCT 关键词用于返回唯一不同的值。
语法:
SELECT DISTINCT column_name,column_name
FROM table_name

如有错误,欢迎评论指正~~

参考文献:
LinkCode.
百度百科

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQL-入门-02(1) 的相关文章

  • SQL 分隔符上的逗号分隔列

    这是一个 split 函数 它可以应用为dbo Split sf we fs we 当我将字符串更改为列名时 它不起作用 例如dbo Split table columnName Select from dbo Split email pr
  • FireDac 添加下划线 1 以区分具有相同名称的 2 个列名

    我有一个连接 2 个表的选择 因此这些表中存在具有相似名称的列 因此现在在检索结果时 FireDac 将下划线 1 添加到第二个列名称以区分这两个表 Select from Table1 inner join Table2 on Table
  • MySQL 5:我的 GROUP BY 字段的顺序重要吗?

    Peeps 我的 MySQL 查询中有一些聚合 计算字段 我的 GROUP BY 子句是动态生成的 具体取决于用户在 Web 表单中选择的选项 很好奇 GROUP BY 子句中列出的字段顺序是否会对计算产生任何影响 例如 SUM AVERA
  • MySQL通过UPDATE/DELETE合并重复数据记录

    我有一个看起来像这样的表 mysql gt SELECT FROM Colors ID USERNAME RED GREEN YELLOW BLUE ORANGE PURPLE 1 joe 1 null 1 null null null 2
  • 从 Presto 中的 JSON 列获取特定值

    我有一个带有 JSON 列的表points其中一行为 0 0 2 1 1 2 2 0 5 15 1 2 20 0 7 我想获取键的值 1 and 20 并将它们存储为别名 例如first and second在查询中 到目前为止我所做的是
  • SQL Server 2008 中的全文搜索一步一步

    如何开始使用SQL Server 2008 中的全文搜索 阅读这些链接 SQL SERVER 2008 创建全文目录和全文搜索 http blog sqlauthority com 2008 09 05 sql server creatin
  • 在内连接中重用 mysql 子查询

    我正在尝试优化查询 试图避免重复用 指示的查询 复杂查询 使用两次 结果相同 原始查询 SELECT news FROM news INNER JOIN SELECT myposter FROM SELECT COMPLEX QUERY U
  • SQL Server 2008 GUID 列全为 0

    我希望这是我做的一个简单的傻事 我的数据库中有一个表 设置如下 column name widget guid data type uniqueidentifier allow nulls false default value newid
  • PostgreSQL 窗口函数:row_number() over(按 col2 分区 col 顺序)

    以下结果集源自具有一些连接和联合的 SQL 查询 SQL 查询已经对 Date 和 game 上的行进行了分组 我需要一列来描述按日期列分区的游戏的尝试次数 Username Game ID Date johndoe1 Game 1 100
  • 如何在postgresql中编写有关最大行数的约束?

    我认为这是一个很常见的问题 我有一张桌子user id INT 和一张桌子photo id BIGINT owner INT 所有者是一个参考user id 我想向表照片添加一个约束 以防止每个用户将超过 10 张照片输入数据库 写这个的最
  • 将自动递增值添加到只有一列的表中

    我需要创建一个基本上仅保留索引列表的表 因此 我创建了一个只有一个名为 id 的自动递增列的表 但是 我似乎无法隐式地将自动递增值添加到该表中 我知道通常当您在表中有这样一列 不仅仅是此列 时 您可以执行以下操作 插入表 col1 col2
  • IN 运算符对 SQL 查询性能的影响有多大?

    我的 SQL 查询需要 9 个小时才能执行 见下文 Select Field1 Field2 From A Where Field3 IN 45 unique values here 当我将此查询拆分为 3 个完全相同的查询 仅每个 IN
  • 内连接 3 个表

    我正在使用 PHP 和 PDO 我需要重新收集连接 3 个表的信息 photos albums 相册照片 该表具有以下结构 photos photo id int path varchar nick varchar date timesta
  • value >= all(select v2 ...) 产生与 value = (select max(v2) ...) 不同的结果

    Here https stackoverflow com questions 17026651 query from union of joins 17027784 noredirect 1 comment24611997 17027784
  • 如何在 Postgresql 中将 GIST 或 GIN 索引与 hstore 列一起使用?

    我正在使用 postgresql 9 3 的 hstore 我正在尝试对 hstore 列使用索引就像文档所述 http www postgresql org docs 9 3 static hstore html 我的问题是索引似乎没有被
  • 总结同一个 SQL 表上的两个条件

    给定一个 SQL 表 Transactions ID INT COMPANY ID INT STATUS INT where STATUS IN 0 1 表示免费交易并且STATUS IN 2 3 表示可计费交易 简单的 我希望 ANSI
  • 如何选择从数据集中进入数据表的列?

    作为数据工作的新手 我希望我能正确地提出这个问题 如何选择从数据集中进入数据表的列 我知道我可以使用 填充数据表 DataTable table dataSet1 Tables 0 但这会引入所有列 如何仅使用某些列填充数据表 我正在使用
  • 停止在 Visual Studio 2010 中显示 SQL 错误

    如何阻止 VS2010 在附加到项目的 sql 文件中显示错误 我根本不想检查它们 只想检查 C 代码 这些文件用作资源 构建操作 设置为 内容 我想保留 sql 扩展名以用于语法着色目的 Regards 看起来你的问题在这里得到了回答 h
  • 使用 C# 和 ADO.NET SET NOCOUNT ON 并读取消息

    SET NOCOUNT ON 会阻止显示受 Transact SQL 语句或存储过程影响的行数的消息作为结果集的一部分返回 a 如何使用 C 和 ADO NET 读取这些消息 我假设读取这些消息的 C 代码是相同的 无论 T SQL 语句是
  • 有没有任何工具可以查看针对数据库运行的查询?

    是否有任何工具可以检查 asp net 或 sql server 并报告针对数据库运行的所有查询 我问这个问题的原因是我正在一个项目中使用 Linq 并且想要仔细检查它对每个页面实际执行的操作 理想情况下 我想在浏览器中查看页面并获得为创建

随机推荐