day3 -- select语句学习

news2024/12/24 10:11:17

文章目录

  • 数据库和表的准备
  • select
  • select + order by
  • select + where
  • select + 高级过滤操作
  • 使用通配符进行过滤
  • 使用正则表达式进行搜索

数据库和表的准备

  • 下载《mysql必知必会》提供的脚本用于创建样例表
cd /mnt/d/unix_dir
wget https://forta.com/wp-content/uploads/books/0672327120/mysql_scripts.zip
unzip mysql_scripts.zip
  • 运行对应的脚本创建样例表
create database crashtest;
show databases;
use crashtest;
source /mnt/d/unix_dir/create.sql;
source /mnt/d/unix_dir/populate.sql;
show tables;
desc customers;

在这里插入图片描述
在这里插入图片描述

select

SQL语句是由简单的英语单词构成的。这些单词称为关键字,每个SQL语句都是由一个或多个关键字构成的。
大概,最经常使用的SQL语句就是SELECT语句了。它的用途是从一个或多个表中检索信息。

为了使用SELECT检索表数据,必须至少给出两条信息——想选择什么,以及从什么地方选择
SQL 语句不区分大小写,通常大家把关键字大写
在处理SQL语句时,其中所有空格都被忽略

# 从products表中检索一个名为 prod_name的列
select prod_name from products; 

# 选择多列,列名之间逗号分隔,最后一个列名不需要加入逗号
select prod_id,prod_name,prod_price from products;

# 选择所有列,使用通配符可能会使检索输出的列位置和实际表中的位置不符
select * from products;

# 使用DISTINCT关键字 此关键字指示MySQL只返回不同的值,类似于 程序设计语言种的 unique
select distinct vend_id from products;

# LIMIT 5指示MySQL返回 不多于5行,检索位置靠前的行被返回
select * from products limit 5;
# LIMIT 5, 5指示MySQL返回从行5开始的5行
select * from products limit 55;
# or 从第四行检索,返回最多5行
select * from products limit 5 offset 4;

# 限定表名和数据库名
# products.prod_name 限定了那个表的哪一列
# crashtest.products 限定了哪个数据库的哪一个表
select products.prod_name from crashtest.products

select + order by

# 从products表中检索一个名为 prod_name的列并排序
select prod_name from products order by prod_name;

# 从products表中检索一个名为 prod_name的列并按照降序排序
select prod_name from products order by prod_name desc;
# 降序还可以这样用
# 先根据 prod_id降序,再根据prod_price升序
select prod_id,prod_name,prod_price from products order by prod_id desc,prod_price;

# 用非检索列排序,也是合法的
select prod_name from products order by prod_id;

# 选择多列,列名之间逗号分隔,最后一个列名不需要加入逗号
# 同时根据多列数据进行排序,列名之间需要逗号隔开
select prod_id,prod_name,prod_price from products order by prod_id,prod_name,prod_price;

# 多个子句的组合,先选再排最后输出
select prod_name from products order by prod_id limit 1

select + where

NULL 无值(no value),它与字段包含0、空字符串或仅仅包含空格不同
因为未知具有 特殊的含义,数据库不知道它们是否匹配,所以在匹配过滤 或不匹配过滤时不返回它们

# 选择 prod_price列中等于2.5的数据
select prod_price from products where prod_price = 2.5;
# mysql> select prod_price from products where prod_price == 2.5; 将会报错

# 在同时使用ORDER BY和WHERE子句时,应该让ORDER BY位于WHERE之后, 否则将会产生错误
select prod_price from products where prod_price = 2.5 order by prod_name;

# MySQL在执行匹配时默认不区分大小写
select prod_price,prod_name from products where prod_name = "fuses";

# between and 关键字实现区间选取
select prod_price,prod_name from products where prod_price between 5 and 10 ;

# 检查空值 NULL需要特殊的语句
select prod_price,prod_name from products where prod_price IS NULL ;

select + 高级过滤操作

AND 用在WHERE子句中的关键字,用来指示检索满足所有给定 条件的行
OR操作符与AND操作符不同,它指示MySQL检索匹配任一条件的行
AND / OR操作符可以任意次数的组合但是 AND的计算次序优先级更高 <== 结合序问题 <== 使用圆括号括起来解决

# AND / OR 连接组合where 子句
select prod_price,prod_name from products where prod_price IS NULL AND prod_name = "fuses";
select prod_price,prod_name from products where prod_price IS NULL OR prod_name = "fuses";

select prod_price,prod_name from products where (prod_price IS NULL OR prod_name = "fuses") AND prod_id >= 1000;

# 区别与betwenn and ,IN操 作符后跟由逗号分隔的合法值清单,整个清单必须括在圆括号中。
SELECT prod_name,prod_price FROM  products WHERE vend_id IN (1002,1004) ORDER BY prod_name;

# WHERE子句中的NOT操作符有且只有一个功能,那就是否定它之后所跟的任何条件 ⇐  == 取反操作
SELECT prod_name,prod_price FROM  products WHERE vend_id NOT IN (1002,1004) ORDER BY prod_name;

使用通配符进行过滤

为在搜索子句中使用通配符,必须使用LIKE操作符。
LIKE指示MySQL,后跟的搜索模式利用通配符匹配而不是直接相等匹配进行比较。

最后需要注意的是,通配符并不是完全意义上的通配,至少它不匹配 NULL。

# 通配符是百分号(%),表示任何字符出现 任意次数  <== 和unix中的正则表达式有区别呀
# 找出所有以词jet起头的产品,%告诉MySQL接受jet之后的任意字符
SELECT prod_name,prod_price FROM  products WHERE prod_name LIKE "jet%";

# 匹配任何位置包含文本jet的值,而不论它之前或之后出现什么字符
SELECT prod_name,prod_price FROM  products WHERE prod_name LIKE "%jet%";

# 通配符也可以出现在搜索模式的中间
SELECT prod_name,prod_price FROM  products WHERE prod_name LIKE "je%t";

# 下划线(_)。下划线的用途与%一样,但下划线只匹配单个字符而不是多个字符
SELECT prod_name,prod_price FROM  products WHERE prod_name LIKE "_jet";
  • 正如所见, MySQL的通配符很有用。但这种功能是有代价的:通配符搜索的处理一般要比前面讨论的其他搜索所花时间更长
  • 不要过度使用通配符。如果其他操作符能达到相同的目的,应该使用其他操作符
  • 在确实需要使用通配符时,除非绝对有必要,否则不要把它们用在搜索模式的开始处。把通配符置于搜索模式的开始处,搜索起来是最慢的
  • 仔细注意通配符的位置。如果放错地方,可能不会返回想要的数据

使用正则表达式进行搜索

个人认为 LIKE 进行的通配符检索和正则很像,
主要区别是 LIKE 后面接的是 ^pattern$ 这种形式,却写作 pattern <= 隐式表达
正则的pattern 则需要手动指定 定位符 ^ pattern $ <= 显示表达

# 下面的语句检索列prod_name包含 文本1000的所有行
SELECT prod_name,prod_price FROM  products WHERE prod_name REGEXP "1000" ORDER BY prod_name;

# 正则表达式中的特殊字符,比如 . 表示任意且切实存在的一位字符
SELECT prod_name,prod_price FROM  products WHERE prod_name REGEXP ".000" ORDER BY prod_name;

# 正则表达式中的 OR,它表示匹配其中之一,因此1000和2000都匹配并返回
SELECT prod_name,prod_price FROM  products WHERE prod_name REGEXP "1000|2000";

# 只想匹配特定的字符,可通过指定一组用[和]括起来的字符来完成
# [123]定义一组字符,它的意思是匹配1或2或3
SELECT prod_name,prod_price FROM  products WHERE prod_name REGEXP "[12]000";

# 字符集合的取反操作
SELECT prod_name,prod_price FROM  products WHERE prod_name REGEXP "[^12]000";

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

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

相关文章

【Linux从入门到精通】进程的状态

当我们了解到进程是什么东西后&#xff0c;我们再来看看进程都会有那些状态。本篇文章会对进程的不同状态进行详解&#xff0c;希望会对你的理解有所帮助&#xff01; 文章目录 一、了解进程的不同状态 二、详解进程的不同状态 2、1 R运行状态&#xff08;running&#xff09; …

开源赋能 普惠未来|中软国际寄语 2023 开放原子全球开源峰会

中软国际作为行业领先的全球化软件与信息技术服务企业及数字化转型服务商&#xff0c;近年来积极布局开源生态&#xff08;OpenHarmony、openEuler&#xff09;、智能云、ERP、AIGC、教育科技、智能车六大赛道&#xff0c;加速业务转型创新。 中软国际为开放原子开源基金会白金…

文字环绕图片效果实现

书接上回&#xff0c;我们来讲讲如何实现“文字环绕图片”的效果吧。整体预计实现的效果如下&#xff1a; 日常杂谈 我喜欢看动漫&#xff0c;接下来的所有博客都会和我日常生活结合在一起写&#xff0c;这样感觉会让自己的博客会有温度&#xff0c;我感觉每个人都应该有自己的…

最新喜讯|易知微入选2023数字孪生解决方案提供商TOP50

近日&#xff0c;互联网周刊发布《2023数字孪生解决方案提供商TOP50》&#xff0c;杭州易知微科技有限公司在榜。 中国科学院主管的《互联网周刊》&#xff0c;创刊于1998年&#xff0c;是中国最具公信力的杂志之一&#xff0c;其颁布的榜单极具权威性与专业度&#xff0c;对产…

基于非局部图注意力网络的鲁棒三维形状分类

文章目录 Robust 3D Shape Classification via Non-local Graph Attention Network摘要本文方法Global Structure Network (GSN)Global Relationship Network (GRN)Local Feature Learning based on MLP-STNetwork Channel Fusion ModuleGlobal descriptor 实验结果 Robust 3D …

分布式锁的应用场景与分布式锁实现(四):基于MySQL实现分布式锁与分布式锁总结

分布式锁的应用场景与分布式锁实现&#xff08;三&#xff09;&#xff1a;基于Zookeeper实现分布式锁 基于MySQL实现分布式锁 ​ 不管是JVM锁还是MySQL锁&#xff0c;为了保证线程的并发安全&#xff0c;都提供了悲观独占排他锁。所以独占排他也是分布式锁的基本要求。 ​ …

在can协议的基础下编写DBC文件,然后使用该DBC文件下发can协议到底盘完整流程

目录 前言一、VectorCANdb下载及安装二、DBC文件的编写1.新建dbc文件2.建立dbc2.1根据CAN协议设置以下的signals2.2设置报文2.3建立报文与信号的关系2.4建立节点 三、编写程序使用UDP通信下发can协议1.查看can口、电脑ip以及端口号2.编写测试程序 前言 最近完成了一个项目&…

热烈庆祝兴业法拍网与宁波银行北京分行签订“法拍贷”业务合作

6月1日&#xff0c;兴业法拍网与宁波银行北京分行签订“法拍贷”合作协议。 “法拍贷”是以法院房产拍卖为核心、线上平台拓宽拍卖渠道、保险公司提供阶段性保证、公证机构加大司法效力、银行提供全程金融服务的“14”创新合作模式。该模式汇聚五方合力让更多竞拍人享受到便利…

2天时间3个面试,百度进了3面!

昨天和朋友复盘了一下最近的面试经历&#xff0c;分享给大家&#xff1a; 关于就业环境 忠告&#xff1a;如果不是在二三线买车买房结婚生子了&#xff0c;还是到一线城市去吧。 或者换个行业&#xff01; 关于焦虑和摆烂 如果你也在焦虑迷茫、精神内耗。找阳哥给你做“心理…

spring-boot版本影响Spring AOP @Before @Around @After等执行顺序

郁闷了半天&#xff0c;我通过AOP切面打印的日志顺序怪怪的&#xff0c;网上查了好几篇文章都说没问题&#xff0c;最后发现是springboot版本升级后Before Around After等执行顺序发生了变化。 1.切面类 Aspect// 这是一个切面 Component// 这是一个需要被装配的spring bean S…

零基础如何实现 Python 自动化办公 ?

996 一直是互联网老生常谈的话题了&#xff0c;但抛开其他只谈工作本身&#xff0c;你有没有想过&#xff0c;下班晚、加班&#xff0c;有时候可能是因为自己工作比较低效&#xff1f; 在这给你分享一个案例&#xff1a; 场景是在维护日活超过 3 亿用户的微博私信平台&#x…

Linux开机rc.local不自启动执行脚本其他一些问题进行补充说明

Linux开机rc.local不自启动执行脚本其他一些问题进行补充说明 在上一篇&#xff0c;我们讲了Linux开机rc.local不自启动执行脚本问题的排查思路及问题解决 这一篇我们补充一些其他的问题 问题一&#xff1a;我怎么知道我rc.local里面的命令启动成功不成功呢&#xff0c;我怎…

为什么说 Java 比 C / C++ 慢?

因为C/C允许程序员做出更多选择。 选择更多&#xff0c;那么&#xff1a; 弊端&#xff1a;开发效率难以提高&#xff0c;因为有太多选择需要斟酌。 优势&#xff1a;执行效率可以逼近极限&#xff0c;因为不会有什么抽象拦住你。 举个例子吧&#xff1a;大家可能对Java无处不…

New bing出现“重定向”无法使用解决方法来了

我又来分享干货了&#xff01;&#xff01;&#xff01; 因为要润色论文&#xff0c;又是经过几天的折腾&#xff0c;终于可以正常使用bing聊天了&#xff0c;泪目&#xff01; 首先你要有VPN才能使用New bing聊天的&#xff01;要求使用edge浏览器&#xff08;虽然我最后用的…

电脑mp3转换器哪个好用?我来告诉你电脑mp3转换器哪个好

假如你下载了一些音乐或者录音文件&#xff0c;但是它们可能不是mp3格式的&#xff0c;而是其他格式&#xff0c;如wav、flac等。而有一些设备又只能播放mp3格式的音频&#xff0c;这时候就需要使用mp3转换器将其转换成mp3格式&#xff0c;以便于在各种设备上播放和分享。不过你…

RustChinaConf 2023官网上线,精彩议题早知道

随着大会日益临近&#xff0c;我们RustChinaConf 2023筹备委员会的工作也在有条不紊的进行中。最新的好消息来了&#xff0c;官网已上线&#xff0c;访问地址&#xff1a; https://rustcc.cn/2023rustchinaconf/ 从官网进去也可以报名&#xff01; 大会时间地址 6.17 - 6.1…

电影《异形》标志性雕塑将分割为500个NFT出售

由佳士得前高管领导的美术平台Particle曾创造历史般售出班克西的《爱在空中》的10000件数字作品。 5 月 31 日 - Particle &#xff0c;作为去中心化的艺术生态系统和Banksy 的“Love is in the Air”画作的代币商&#xff0c;它将让收藏者有机会购买H.R. Giger的《异形3》原创…

我发现3个国内一直能用的免费版ChatGPT 免登免注册无广告 再不赶紧保存就没啦!

&#x1f680; 个人主页 极客小俊 ✍&#x1f3fb; 作者简介&#xff1a;web开发者、设计师、技术分享博主 &#x1f40b; 希望大家多多支持一下, 我们一起进步&#xff01;&#x1f604; &#x1f3c5; 如果文章对你有帮助的话&#xff0c;欢迎评论 &#x1f4ac;点赞&#x1…

Linux多Reactor多线程网络模型

多Reactor多线程网络模型是一种用于构建高性能网络应用的并发模型。它基于事件驱动的思想&#xff0c;通过使用多个Reactor线程和多个工作线程来处理并发的网络请求。 底层调用关系&#xff1a; 在多Reactor多线程网络模型中&#xff0c;通常会有一个主Reactor线程和多个工作线…

凌云出海 决胜万里丨华为云中企出海领袖班第五期顺利结束!

互联网大潮风起云涌&#xff0c;国内竞争日益激烈内卷&#xff0c;越来越多的互联网企业选择国际化走出去&#xff0c;在全球市场这个更大舞台上找寻机会。想要抓住技术红利并惠及企业全球化&#xff0c;成为当下众多出海从业者的共识。 为了帮助更多的CTO领袖具备更专业的国际…