SQL基础——查询基础

news2024/11/25 6:54:57

查询基础

  • 前言
  • 整体思维导图
  • 列的查询
    • 语法2.1 基本的SELECT语句
    • 代码示例:从Product表中输出3列
      • 执行结果
  • 查询出所有的列
    • 语法2.2 查询全部的列
    • 代码示例2.2 输出Product表中全部的列
      • 执行结果
  • 为列设置别名
    • 代码示例2.3 为列设置别名
      • 执行结果
    • 代码示例2.4 设置中文别名
      • 执行结果
  • 常数的查询
    • 代码示例2.5 查询常数
      • 执行结果
  • 从结果中删除重复行
    • 代码示例2.6 使用DISTINCT删除product_type列中重复的数据
      • 执行结果
    • 代码示例2.7 在多列之前使用DISTINCT
      • 执行结果
  • 根据WHERE语句来选择记录
    • 语法示例2.3 SELECT语句中的WHERE子句
    • 代码示例2.8 用来选取product_type列为'衣服'的记录的SELECT语句
      • 执行结果
  • SQL注释的书写方法
    • 单行注释
      • 代码示例2.9 单行注释
    • 多行注释
      • 代码示例2.10 多行注释
  • 算术运算符和比较运算符
    • 比较运算符
      • 代码示例2.11 选取出销售单价大于等于1000日元的记录
        • 执行结果
      • 代码示例2.12 选取出登记日期在2009年9月27日之前的记录
        • 执行结果
      • 代码示例2.13 WHERE子句的条件表达式中也可以使用计算表达式
        • 执行结果
  • 对字符串使用不等号时的注意事项
  • 不能对NULL使用比较运算符
    • 代码示例2.14 选取NULL的记录
      • 执行结果
    • 代码示例2.15 选取不为NULL的记录
      • 执行结果
  • 逻辑运算符
    • NOT运算符
      • 代码示例2.16
        • 执行结果
    • AND运算符和OR运算符
      • 代码示例2.17 在WHERE子句的查询条件中使用AND运算符
        • 执行结果
      • 代码示例 2.18 在WHERE子句的查询条件中使用OR运算符
        • 执行结果
    • 注意 AND运算符优先于OR运算符
      • 代码示例2.19
        • 执行结果
      • 代码示例2.20 通过括号让OR运算符优先于AND运算符执行
        • 执行结果
  • 如果博主的文章对您有所帮助,可以评论、点赞、收藏,支持一下博主!!!

前言

系统学习SQL的笔记,用于记录学习过程。

整体思维导图

在这里插入图片描述

列的查询

从表中选取数据是需要使用SELECT语句,通过SELECT语句查询并选取出必要数据的过程称为匹配查询或查询(query)

语法2.1 基本的SELECT语句

 SELECT <列名>,
 …… FROM <表名>

该SELECT语句包含SELECT和FROM两个子句(clause)。子句是SQL语句的组成要素,是以SELECT或者FROM等作为起始的短语。

SELECT子句中列举了希望从表中查询出的列的名称,而FROM子句则指出选择出数据的表的名称。

在这里插入图片描述

代码示例:从Product表中输出3列

 SELECT product_id, product_name, purchase_price  FROM Product;

执行结果

在这里插入图片描述
SELECT语句第一行的SELECT product_id, product_name, purchase_price就是SELECT子句。查询出的列的顺序可以任意指定。查询多列时,需要使用逗号进行分隔。查询结果中列的顺序和SELECT子句中的顺序相同。

查询出所有的列

想要查询出全部列是,可以使用代表所有列的星号(*)

语法2.2 查询全部的列

 SELECT *  FROM <表名>;

代码示例2.2 输出Product表中全部的列

 SELECT *  FROM Product;

执行结果

在这里插入图片描述
注意:星号(*)代表全部列的意思。但是,如果使用星号的话,就无法设定列的显示顺序了。这时就会按照CREATE TABLE语句的定义对列进行排序。

为列设置别名

SQL语句可以使用AS关键字为列设定别名。

代码示例2.3 为列设置别名

SELECT
    product_id AS id,
    product_name AS `name`,
    purchase_price AS price 
FROM
    Product;

执行结果

在这里插入图片描述

代码示例2.4 设置中文别名

SELECT
    product_id AS "商品编号",
    product_name AS "商品名称",
    purchase_price AS "进货单价" 
FROM
    Product;

通过执行结果就可以知道相对于英文别名来说,会更好理解与操作。

执行结果

在这里插入图片描述
注意:设定汉语别名时需要使用双引号(")括起来。

常数的查询

SELECT子句不仅可以书写列名,还可以书写常数。

代码示例2.5 查询常数

SELECT
    '商品' AS string,
    38 AS number,
    '2009-02-24' AS date,
    product_id,
    product_name 
FROM
    Product;

执行结果

在这里插入图片描述

从结果中删除重复行

想要删除重复行时,可以通过在SELECT子句中使用DISTINCT来实现

代码示例2.6 使用DISTINCT删除product_type列中重复的数据

 SELECT DISTINCT product_type  FROM Product;

执行结果

在这里插入图片描述
注意:在SELECT语句中使用DISTINCT可以删除重复行。
在使用DISTINCT时,NULL也被视为一类数据。NULL存在于多行中时,也会被合并为一条NULL数据。

代码示例2.7 在多列之前使用DISTINCT

SELECT DISTINCT
    product_type,
    regist_date 
FROM
    Product;

执行结果

在这里插入图片描述
注意:DISTINCT关键字只能用在第一个列名之前,因此,请大家注意不能写成regist_date, DISTINCT product_type。

根据WHERE语句来选择记录

SELECT语句通过WHERE子句来指定查询数据的条件。

语法示例2.3 SELECT语句中的WHERE子句

SELECT
    <列名>,
    …… 
FROM
    <表名> 
WHERE
    <条件表达式>;

代码示例2.8 用来选取product_type列为’衣服’的记录的SELECT语句

SELECT
    product_name,
    product_type 
FROM
    Product 
WHERE
    product_type = '衣服';

执行结果

在这里插入图片描述
通过WHERE子句查询出符合指定条件的记录,然后再选取出SELECT语句指定的列。
注意:SQL中子句的书写顺序是固定的,不能随意更改。WHERE子句必须紧跟在FROM子句之后,书写顺序发生改变的话会造成执行错误。

SQL注释的书写方法

注释对SQL的执行没有任何影响。因此,无论是英文字母还是汉字都可以随意使用。
注释的书写方法有如下两种。

单行注释

书写在"–"之后,只能写在同一行。

代码示例2.9 单行注释

-- 本SELECT语句会从结果中删除重复行。
SELECT DISTINCT
    product_id,
    purchase_price 
FROM
    Product;
SELECT DISTINCT
    product_id,
    purchase_price
     -- 本SELECT语句会从结果中删除重复行。  
FROM
    Product;

多行注释

多行注释
书写在“ /*
”和“ /”之间,可以跨多行。

代码示例2.10 多行注释

/* 本SELECT语句,   会从结果中删除重复行。*/ 
SELECT DISTINCT
product_id,
purchase_price 
FROM
    Product;
SELECT DISTINCT
    product_id,
    purchase_price
  /* 本SELECT语句,   会从结果中删除重复行。*/
    
FROM
    Product;

这些SELECT语句的执行结果与没有使用注释时完全一样。注释能够帮助阅读者更好地理解SQL语句,特别是在书写复杂的SQL语句时注释不仅可以写在SELECT语句中,而且可以写在任何SQL语句当中。

算术运算符和比较运算符

四则运算使用的运算符(+,-,*,/)成为算术运算符。运算符就是使用两边的值进行四则运算或者字符串拼接、数值大小比较等运算,并返回结果的符号。加法运算符(+)前后入股欧式数字或者数字类型的列名的话,就会返回加法运算的结果。

括号可以提升运算的优先顺序(优先进行运算)。
包含NULL的运算,其结果也是NULL。

比较运算符

比较运算符可以用来判断列或者值是否相等,还可以用来比较大小。

比较运算符含义
=相等
<>不相等
.>=大于等于
.>大于
<=小于等于
<小于

代码示例2.11 选取出销售单价大于等于1000日元的记录

SELECT
    product_name,
    product_type,
    sale_price 
FROM
    Product 
WHERE
    sale_price >= 1000;

执行结果

在这里插入图片描述

代码示例2.12 选取出登记日期在2009年9月27日之前的记录

SELECT
    product_name,
    product_type,
    regist_date 
FROM
    Product 
WHERE
    regist_date < '2009-09-27';

执行结果

在这里插入图片描述
还可以使用比较运算符对计算结果进行比较

代码示例2.13 WHERE子句的条件表达式中也可以使用计算表达式

SELECT
    product_name,
    sale_price,
    purchase_price 
FROM
    Product 
WHERE
    sale_price - purchase_price >= 500;

执行结果

在这里插入图片描述

对字符串使用不等号时的注意事项

字符串类型的数据原则上按照字典顺序进行排序,不能与数字的大小顺序混淆。

不能对NULL使用比较运算符

SQL提供了专门用来判断是否为NULL的IS NULL运算符。想要选取NULL的记录时,可以像代码示例2.14那样来书写条件表达式。

代码示例2.14 选取NULL的记录

SELECT
    product_name,
    purchase_price 
FROM
    Product 
WHERE
    purchase_price IS NULL;

执行结果

在这里插入图片描述
希望选取不是NULL的记录时,需要使用IS NOT NULL运算符

代码示例2.15 选取不为NULL的记录

SELECT
    product_name,
    purchase_price 
FROM
    Product 
WHERE
    purchase_price IS NOT NULL;

执行结果

在这里插入图片描述

希望选取NULL记录时,需要在条件表达式中使用IS NULL运算符。希望选取不是NULL的记录时,需要在条件表达式中使用IS NOT NULL运算符。

逻辑运算符

通过使用逻辑运算符,可以将多个查询条件进行组合。
通过NOT运算符可以生成“不是~”这样的查询条件。
两边条件都成立时,使用AND运算符的查询条件才成立。
只要两边的条件中有一个成立,使用OR运算符的查询条件就可以成立。

NOT运算符

NOT不能单独使用,必须和其他查询条件组合起来使用。例如,选取出销售单价(sale_price)不大于等于1000日元的记录的SELECT语句如下所示

代码示例2.16

SELECT 
    product_name,
    product_type,
    sale_price
    FROM
    Product
    WHERE
    NOT sale_price >=1000;
    

执行结果

在这里插入图片描述

AND运算符和OR运算符

在实际使用当中,往往都是同时指定多个查询条件对数据进行查询的。例如,想要查询“商品种类为厨房用具、销售单价大于等于3000日元”或“进货单价大于等于5000日元或小于1000日元”的商品等情况。
在WHERE子句中使用AND运算符或者OR运算符,可以对多个查询条件进行组合。
AND运算符在其两侧的查询条件都成立是整个查询条件才成立,意思相当于“并且”
OR运算符在其两侧的查询条件有一个成立整个查询条件都成立,意思相当于“或者”

例如,从Product表中选取出“商品种类为厨房用具(product_type = ‘厨房用具’),并且销售单价大于等于3000日元(sale_price >= 3000)的商品”

代码示例2.17 在WHERE子句的查询条件中使用AND运算符

SELECT
    product_name,
    purchase_price 
FROM
    Product 
WHERE
    product_type = '厨房用具' 
    AND sale_price >= 3000;

执行结果

在这里插入图片描述

选取出“商品种类为厨房用具(product_type = ‘厨房用具’),或者销售单价大于等于3000日元(sale_price >= 3000)的商品”

代码示例 2.18 在WHERE子句的查询条件中使用OR运算符

SELECT
    product_name,
    purchase_price 
FROM
    Product 
WHERE
    product_type = '厨房用具' 
    OR sale_price >= 3000;

执行结果

在这里插入图片描述

注意 AND运算符优先于OR运算符

查询条件:“商品种类为办公用品” 并且“登记日期是2009年9月11日或者2009年9月20日”

代码示例2.19

SELECT
    product_name,
    product_type,
    regist_date 
FROM
    Product 
WHERE
    product_type = '办公用品' 
    AND regist_date = '2009-09-11' 
    OR regist_date = '2009-09-20';

执行结果

在这里插入图片描述
过观察发现,不想要的T恤衫和菜刀和叉子也被选择出来了,这是由于AND运算符优选与OR运算符导致的。
将代码示例2.19的条件表达式会被解释翻译成下面这样:

「 product_type = '办公用品' 
AND regist_date = '2009-09-11'OR 「 regist_date = '2009-09-20'

也就是,“商品种类为办公用品,并且登记日期是2009年9月11日”
或者
“登记日期是2009年9月20日”这和想要指定的查询条件并不相符

想要优先执行OR运算符时,可以通过使用括号将OR运算符优先于AND运算符执行。

代码示例2.20 通过括号让OR运算符优先于AND运算符执行

SELECT
    product_name,
    product_type,
    regist_date 
FROM
    Product 
WHERE
    product_type = '办公用品' 
    AND ( regist_date = '2009-09-11' OR regist_date = '2009-09-20' );

执行结果

在这里插入图片描述

如果博主的文章对您有所帮助,可以评论、点赞、收藏,支持一下博主!!!

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

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

相关文章

Redis持久化没玩明白,你就会把缓存数据丢了

引言 我们都知道Redis是微服务架构中重要的基础数据库中间件&#xff0c;通过Redis可以将数据库中的数据缓存到内存中&#xff0c;当服务端有数据查询请求的时候&#xff0c;可以直接从内存中获取数据。如此&#xff0c;一方面服务端可以获得比较快的数据请求响应&#xff0c;…

透明质酸-嵌段共聚物 透明质酸修饰聚乳酸 HA-PLA/PCL/PLGA/PEI/PLL

品牌&#xff1a;为华生物 产地&#xff1a;广州 中文名称&#xff1a;透明质酸-聚乳酸 英文名称&#xff1a;HA-PLA 溶解度&#xff1a;溶于部分有机溶剂 保存时间&#xff1a;一年 PLA分子量&#xff1a;根据客户要求定制 HA分子量&#xff1a;3000--1500K 其他分子量可根据客…

鑫磊股份通过注册:年营收8.2亿 为钟仁志与蔡海红夫妻店

雷递网 雷建平 12月15日鑫磊压缩机股份有限公司&#xff08;简称&#xff1a;“鑫磊股份”&#xff09;日前通过注册&#xff0c;准备在深交所创业板上市。鑫磊股份计划募资4.53亿元&#xff0c;其中&#xff0c;1.97亿元用于新增年产3万台螺杆式空压机技改项目&#xff0c;1.0…

Python+Selenium使用Page Object实现页面自动化测试

&#x1f4cc; 博客主页&#xff1a; 程序员二黑 &#x1f4cc; 专注于软件测试领域相关技术实践和思考&#xff0c;持续分享自动化软件测试开发干货知识&#xff01; &#x1f4cc; 公号同名&#xff0c;欢迎加入我的测试交流群&#xff0c;我们一起交流学习&#xff01; 目录…

03解锁源码分析-ReentrantReadWriteLock原理-AQS-并发编程(Java)

文章目录1 读锁解锁1.1 tryReleaseShared()1.2 doReleaseShared()1.3 unparkSuccessor()1.4 示意图2 写锁解锁2.1 tryRelease()2.2 尝试解锁成功2.3 setHeadAndPropagate()5 后记1 读锁解锁 查看下读锁的解锁相关源代码&#xff1a; public void unlock() {sync.releaseShare…

【实时数仓】在Hbase建立维度表、保存维度数据到Hbase、保存业务数据到kafka主题

文章目录一 分流Sink之建立维度表到HBase(Phoenix)1 拼接建表语句&#xff08;1&#xff09;定义配置常量类&#xff08;2&#xff09;引入依赖&#xff08;3&#xff09;hbase-site.xml&#xff08;4&#xff09;在phoenix中执行&#xff08;5&#xff09;增加代码a TableProc…

Docker安装简单命令

一、 Docker是什么? 要了解Docker&#xff0c;首先要了解什么是容器&#xff1f; 容器是一个软件的轻量级独立可执行软件包&#xff0c;包含运行它所需的一切&#xff1a;代码&#xff0c;运行时&#xff0c;系统工具&#xff0c;系统库&#xff0c;设置。不管环境如何&…

C++(第十二篇):多态(虚函数、抽象类、虚函数表、虚表指针、多继承下的多态)

&#x1f4d2;博客主页&#xff1a;Morning_Yang丶 &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; &#x1f4cc;本文所属专栏&#xff1a; 【C拒绝从入门到跑路】 &#x1f64f;作者水平有限&#xff0c;如果发现错误&#xff0c;敬请指正&…

13485-59-1,二肽Ala-Pro,H2N-AP-OH

Substrate for skin fibroblast prolidase.皮肤成纤维细胞prolida酶的底物。 编号: 199181中文名称: 二肽Ala-Pro英文名: Ala-ProCAS号: 13485-59-1单字母: H2N-AP-OH三字母: H2N-Ala-Pro-COOH氨基酸个数: 2分子式: C8H14N2O3平均分子量: 186.21精确分子量: 186.1等电点(PI): 6…

web前端期末大作业:红色主题中国文化网页设计与实现——基于HTML+CSS实现中国梦(20页)

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

电脑技巧:Win11系统新增的磁盘分区功能介绍

很多用户发现&#xff0c;新买的电脑中出厂自带的硬盘只有一个分区&#xff0c;目前只有少部分电脑机型出厂会有分多个分区的。 磁盘的单一分区往往不能满足我们的使用需要&#xff0c;Win7/8/10我们都知道可以在磁盘管理下通过压缩卷的方式来分区&#xff0c;Win11操作系统又新…

C# 程序的错误与调试

一 错误的zhongl 程序的错误通常可以分为三大类 ① 语法错误 ② 运行错误 ③ 逻辑错误 二 语法错误 1 常见的语法错误 ① 如括号不配对&#xff0c;多了或少了分号&#xff1b; ② 字母写错&#xff0c;变量未定义&#xff0c;控件命名写错&#xff1b; ③ 函数少了一个参数…

2022面试官常考的前端面试题

Ajax 它是一种异步通信的方法&#xff0c;通过直接由 js 脚本向服务器发起 http 通信&#xff0c;然后根据服务器返回的数据&#xff0c;更新网页的相应部分&#xff0c;而不用刷新整个页面的一种方法。 面试手写&#xff08;原生&#xff09;&#xff1a; //1&#xff1a;创建…

大一学生《Web编程基础》期末网页制作 HTML+CSS鲜花网页设计实例

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

NLP学习笔记(二) LSTM基本介绍

大家好&#xff0c;我是半虹&#xff0c;这篇文章来讲长短期记忆网络 (Long Short-Term Memory, LSTM) 文章行文思路如下&#xff1a; 首先通过循环神经网络引出为啥需要长短期记忆网络然后介绍长短期记忆网络的核心思想与运作方式最后通过简短的代码深入理解长短期记忆网络的…

Java面试题总结-hashcode和equals

前段时间有朋友问我&#xff1a;“你重写过 hashcode 和 equals 么&#xff0c;为什么重写 equals 时必须重写 hashCode 方法&#xff1f;” 之前的学习中有深入了解过&#xff0c;后来很久没复习了&#xff0c;淡忘许多&#xff0c;回答的时候也有很多地方卡壳&#xff0c;干脆…

【数据结构Java版】Queue队列的活用

目录 一、队列的定义 二、队列的使用 &#xff08;1&#xff09;主要方法 &#xff08;2&#xff09;实例演示 ​&#xff08;3&#xff09;注意事项 三、队列的模拟实现 四、循环队列 &#xff08;1&#xff09;循环队列定义 ​&#xff08;2&#xff09;循环队列的表…

web前端期末大作业:美食文化网页设计与实现——美食餐厅三级(HTML+CSS+JavaScript)

&#x1f468;‍&#x1f393;静态网站的编写主要是用HTML DIVCSS JS等来完成页面的排版设计&#x1f469;‍&#x1f393;,常用的网页设计软件有Dreamweaver、EditPlus、HBuilderX、VScode 、Webstorm、Animate等等&#xff0c;用的最多的还是DW&#xff0c;当然不同软件写出的…

Cambridge IGCSE Mathematics真题讲解1

考试局&#xff1a;Cambridge Assessment International Education (CAIE)考试类别&#xff1a;Cambridge International General Certificate of Secondary Education (IGCSE)考试科目&#xff1a;Mathematics考试单元&#xff1a;Paper 2 (Extended)试卷代码&#xff1a;0580…

全栈Jmeter接口测试(十四):跨线程组传递jmeter变量及cookie的处理

setUp线程组 setUp thread group&#xff1a; 一种特殊类型的线程组&#xff0c;用于在执行常规线程组之前执行一些必要的操作。 在 setup线程组下提到的线程行为与普通线程组完全相同。不同的是执行顺序--- 它会在普通线程组执行之前被触发&#xff1b; 应用场景举例&#xf…