数据库的简单查询

一、检索一列或多列1.检索单独一列

select 列名 from 表名;

select order_num from orders;

2.检索多列数据

select 列 1,列 2... from 表名;

select order_num,order_date from orders; select order_date,order_num from orders;

3.查询所有字段

select * from 表名; select * from orders;

注:在生产环境中,坚决不允许使用 select *

二、去除查询结果中的重复值

1.select distinct 列 1,列 2... from 表名;

select distinct vend_id,prod_price from products;

注:distinct 关键对它后面跟的所有列都生效

三、使用 limit 子句控制显示结果条目数

1.select 列 1,列 2... from 表名 limit 需要显示的行数;

select prod_name from products limit 5;

2.select 列 1,列 2... from 表名 limit x,y;

注:1)x 是从第几行开始显示(包括 x),y 是显示的行数

  1. MariaDB 的行数是从第 0 行开始的

select prod_name from products limit 3,4;

  1. select 列 1,列 2... from 表名 limit 4 offset 3;

select prod_name from products limit 4 offset 3;

四、完全限定表名、列名

select 表名.列名 from 数据库名.表名;

 select orders.order_num from test.orders;

注:完全限定列名可以避免歧义(多个表中含有相同列)

完全限定表名可以实现跨数据库查询

五、注释三种形式:--、#、/* */

注:--后面与注释内容之间至少有一个空格

六、使用 order by 子句对查询结果进行排序(默认正序)desc降序

1.针对单独列进行排序 select 列名 from 表名 order by 列名按照此列进行排序;

select prod_name from products order by prod_name;

或 select 列名 1 from 表名 order by 列名 2;

select prod_name,prod_price from products order by prod_price;

注:通常 order by 子句中使用的列就是需要显示的列,然而用非检索的列排序也是完全合法的

2.针对多列进行排序按第一列排序如果第一列有重复指按第二列排

1)select 列 1,列 2 from 表名 order by 列 1,列 2;

select prod_id,prod_name,prod_price from products order by prod_price,prod_name;

2)select 列 1,列 2 from 表名 order by 1,2;按第1列排序,有重复按第2列排

select prod_id,prod_name,prod_price from products order by 3,2;

 3)降序排序(desc)

select 列 1,列 2 from 表名 order by 列 1 desc,列 2;

select prod_name,prod_price from products order by prod_price desc,prod_name;

注:desc 仅对其前面的列有效,其他后面没有 desc 的列仍然以正序排序

七、使用 order by 子句和 limit 子句显示最大/最小值1.显示最小值

select 列 1 from 表名 order by 列 1 limit 1;

select prod_price from products order by prod_price limit 1;

2.显示最大值 select 列 1 from 表名 order by 列 1 desc limit 1;

select prod_price from products order by prod_price desc limit 1;

八、where 子句

1.使用=操作符查询 select 列 1,列 2... from 表名 where 列 1='值';

select prod_name,prod_price from products where prod_name='fuses';

2.使用<操作符查询 select 列 1,列 2... from 表名 where 列 1<'值';

select prod_name,prod_price from products where prod_price < '10';

3.使用<>或!=操作符查询 select 列 1,列 2... from 表名 where 列 1<>'值';

select vend_id,prod_name from products where vend_id <> '1003';

select 列 1,列 2... from 表名 where 列 1!='值';

select vend_id,prod_name from products where vend_id != '1003';

 4.使用 between 操作符查询

select 列 1,列 2... from 表名 where 列 between 值 1 and 值 2;

select prod_name,prod_price from products where prod_price between 5 and 10;

注:between 和 and 为闭区间(即包含两边的值)

  1. 检索空值与非空值

1)检索空值

select 列 1,列 2... from 表名 where 列 is null;

select cust_id,cust_email from customers where cust_email is null;

2)检索非空值 select 列 1,列 2... from 表名 where 列 is not null;

select cust_id,cust_email from customers where cust_email is not null;

  1. 使用 and 和 or 操作符查询

1)使用 and 操作符(

select 列 1,列 2... from 表名 where 限定条件 1 and 限定条件 2 select vend_id,prod_id,prod_name,prod_price from products where vend_id=1003 and prod_price <=10;

 2)使用 or 操作符(或)

select 列 1,列 2... from 表名 where 限定条件 1 or 限定条件 2 select vend_id,prod_name,prod_price from products where vend_id=1002 or vend_id=1003;

3)and 要比 or 的优先级高

select vend_id,prod_name,prod_price from products where vend_id=1002 or vend_id=1003 and prod_price >= 10;

select vend_id,prod_name,prod_price from products where (vend_id=1002 or vend_id=1003) and prod_price >= 10;

7.使用 in 操作符查询

select 列 1,列 2 from 表名 where 列 in (值 1,值 2,值 3...); select vend_id,prod_name,prod_price from products where vend_id in (1002,1003);1002或1003

select vend_id,prod_name,prod_price from products where vend_id in (1002,1003) and prod_price >=10;

注:当你使用很长的值列表选项时,IN 操作符语法更清晰易读更容易管理优先级顺序比一系列 or 操作符执行的快可以创建较为动态的 where 子句

  1. 使用 not 操作符查询 select vend_id,prod_name,prod_price from products where vend_id not in (1002,1003);

  • 使用 like 操作符配合通配符查询

select 列 1,列 2 from 表名 where 列 like '关键字与通配符';

select prod_id,prod_name from products where prod_name like 'jet%';

select prod_id,prod_name from products where prod_name like '_ ton anvil';

%:匹配多个字符

—:匹配一个字符

十、使用 regexp 操作符配合正则表达式查询

select 列 1,列 2... from 表名 where 列 regexp '关键字与正则表达式';

1.使用.进行匹配匹配多个字符

select prod_id,prod_name from products where prod_name regexp '.000';

2.如果想要强制区分大小写,可以使用关键字 binary select prod_id,prod_name from products where prod_name regexp binary 'JetPack .000';

3.执行 or 匹配| 或

select prod_id,prod_name from products where prod_name regexp '1000|2000|3000';

  1. 使用字符集匹配 []从中选中一个

select prod_id,prod_name from products where prod_name regexp '[1235] ton';

5.匹配特殊字符“.”

select vend_name from vendors where vend_name regexp '\\.';

注:使用\\转义符,去掉了.的特殊含义(匹配任意一个字符)

  1. 使用元字符匹配查询 select prod_name from products where prod_name regexp '\\([0-9] sticks?\\)';TNT  (?匹配前一个字符0次或者多次

+ 匹配前一个字符一次或多次)

select prod_name from products where prod_name regexp '[[:digit:]]{4}';

注:上述 sql 语句等同于 select prod_name from products where prod_name regexp '[0-9][0-9][0-9][0-9]';

select prod_name from products where prod_name regexp '^[0-9\\.]'

十一、子查询

多个表间的 select 语句的嵌套查询例:检索所有订单包含物品 TNT2 的客户信息customers  orders  ordersitems

1.不使用子查询时

1)先查询所有包含物品 TNT2 的订单的订单号

select order_num,prod_id from orderitems where prod_id='TNT2';

2)再查询上述订单号的订单是哪个客户下的

select cust_id,order_num from orders where order_num in(20005,20007);

 3)最后查询上述客户的详细信息

select cust_id,cust_name,cust_contact from customers where cust_id in (10001,10004);

2.使用子查询(嵌套查询)

select cust_id,cust_name,cust_contact from customers where cust_id in (select cust_id from orders where order_num in(select order_num from orderitems where prod_id='TNT2'));

:子查询最多不超过 15 级,一般使用时不超过 2 级

大多数子查询都可以更改为连接查询

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

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

相关文章

正排索引 vs 倒排索引 - 搜索引擎具体原理

阅读导航 一、正排索引1. 概念2. 实例 二、倒排索引1. 概念2. 实例 三、正排 VS 倒排1. 正排索引优缺点2. 倒排索引优缺点3. 应用场景 三、搜索引擎原理1. 宏观原理2. 具体原理 一、正排索引 1. 概念 正排索引是一种索引机制&#xff0c;它将文档或数据记录按照某种特定的顺序…

security如何不拦截websocket

只要添加一个关键配置就行 //忽略websocket拦截Overridepublic void configure(WebSecurity webSecurity){webSecurity.ignoring().antMatchers("/**");} 全部代码我放着了 package com.oddfar.campus.framework.config;import com.oddfar.campus.framework.secur…

016——DHT11驱动开发(基于I.MX6uLL)

目录 一、 模块介绍 1.1 简介 1.2 电路描述 1.3 通信协议 二、 驱动程序 三、 应用程序 四、 上机实验 一、 模块介绍 1.1 简介 DHT11 是一款可测量温度和湿度的传感器。比如市面上一些空气加湿器&#xff0c;会测量空气中湿度&#xff0c;再根据测量结果决定是否继续加…

Cortex-M7 内存映射模型

1 前言 如图1所示&#xff0c; Cortex-M7最大支持4GB的内存寻址&#xff0c;并对内存映射(memory map)做了初步的规定&#xff0c;将整个内存空间划分为了多个内存区域(region)。每个内存区域有着既定的内存类型(memory type)和内存属性(memory attribute)&#xff0c;这两者决…

numpy学习笔记,不定期更新

numpy类型入门 import numpy库后&#xff0c;通过numpy参数操作示例 import numpy as np# 创建ndarray&#xff0c;通过list创建 a np.array([1, 2, 3]) print(a)[1 2 3]# 通过元组创建ndarray&#xff0c;并指定数据类型为float (此处是python的float类型&#xff0c;不是n…

从石膏像到真人:素描的进步之路

从石膏像绘画到真人绘画&#xff1a;素描的进步之路怎么走 从石膏像绘画到真人绘画&#xff0c;素描的进步之路可以通过以下几个步骤来实现&#xff1a; 掌握基本技能&#xff1a;在开始真人绘画之前&#xff0c;需要先掌握基本的素描技能&#xff0c;包括构图、明暗关系、观察…

物理层习题及其相关知识(谁看谁不迷糊呢)

1. 对于带宽为50k Hz的信道&#xff0c;若有4种不同的物理状态来表示数据&#xff0c;信噪比为20dB 。&#xff08;1&#xff09; 按奈奎斯特定理&#xff0c;信道的最大传输数据速率是多少&#xff1f;&#xff08;2&#xff09; 按香农定理&#xff0c;信道的最大传输数据速度…

PSI相关存档

https://anquan.baidu.com/upload/ue/file/20190814/1565763561975581.pdf 关于PSI的研究综述_psi综述-CSDN博客 https://zhuanlan.zhihu.com/p/532761749 https://zhuanlan.zhihu.com/p/407290294 隐私集合求交(Private Set Intersection)问题综述 - 知乎 (zhihu.com) Pr…

基于Springboot+Vue实现前后端分离酒店管理系统

一、&#x1f680;选题背景介绍 &#x1f4da;推荐理由&#xff1a; 近几年来&#xff0c;随着各行各业计算机智能化管理的转型&#xff0c;以及人们经济实力的提升&#xff0c;人们对于酒店住宿的需求不断的提升&#xff0c;用户的增多导致酒店管理信息的不断增多&#xff0c;…

ICLR 2024 | 联邦学习后门攻击的模型关键层

ChatGPT狂飙160天&#xff0c;世界已经不是之前的样子。 新建了免费的人工智能中文站https://ai.weoknow.com 新建了收费的人工智能中文站https://ai.hzytsoft.cn/ 更多资源欢迎关注 联邦学习使多个参与方可以在数据隐私得到保护的情况下训练机器学习模型。但是由于服务器无法…

华为分红出炉,人均超50w!

华为分红 770 亿 4 月 2 日&#xff0c;北京金融资产交易所官网发布了《华为投资控股有限公司关于分配股利的公告》。 公告指出&#xff1a;经公司内部有权机构决议&#xff0c;拟向股东分配股利约 770.945 亿元。 众所周知&#xff0c;华为并不是一家上市公司&#xff0c;这里…

C++从入门到精通——初步认识面向对象及类的引入

初步认识面向对象及类的引入 前言一、面向过程和面向对象初步认识C语言C 二、类的引入C的类名代表什么示例 C与C语言的struct的比较成员函数访问权限继承默认构造函数默认成员初始化结构体大小 总结 前言 面向过程注重任务的流程和控制&#xff0c;适合简单任务和流程固定的场…

详解Qt中的布局管理器

Qt中的布局管理是用于组织用户界面中控件&#xff08;如按钮、文本框、标签等&#xff09;位置和尺寸调整的一种机制。说白了就是创建了一种规则&#xff0c;随着窗口变化其中的控件大小位置跟着变化。Qt提供了多种布局管理器&#xff0c;每种都有其特定用途和特点。以下是对Qt…

使用open3d分离背景和物体点云(二)

一、代码 Python import cv2 import open3d as o3d import matplotlib.pyplot as plt import numpy as npdef thPlaneSeg(pointcloud):pcd_np = np.asarray(pointcloud.points)# 设置深度阈值 (假设Z轴是深度轴)depth_threshold = 0.196 # 1.0米# 应用深度阈值,移除远于阈值…

自定义实现shell/bash

文章目录 函数和进程之间的相似性shell打印提示符&#xff0c;以及获取用户输入分割用户的输入判断是否是内建命令执行相关的命令 全部代码 正文开始前给大家推荐个网站&#xff0c;前些天发现了一个巨牛的 人工智能学习网站&#xff0c; 通俗易懂&#xff0c;风趣幽默&#…

vue项目打包

Vue项目打包的步骤如下&#xff1a; 确保环境配置正确&#xff1a;首先&#xff0c;确保你的开发环境已经安装了Node.js和npm&#xff08;Node.js的包管理器&#xff09;。Vue项目通常使用npm或yarn作为包管理器来安装依赖。 安装项目依赖&#xff1a;在项目根目录下&#xff…

Day30 线程安全之窗口售票问题(含代码)

Day30 线程安全之窗口售票问题&#xff08;含代码&#xff09; 一、需求&#xff1a; 铁道部发布了一个售票任务&#xff0c;要求销售1000张票&#xff0c;要求有3个窗口来进行销售&#xff0c; 请编写多线程程序来模拟这个效果&#xff08; 注意&#xff1a;使用线程类的方式…

【Qt 学习笔记】详解Qt中的信号和槽

博客主页&#xff1a;Duck Bro 博客主页系列专栏&#xff1a;Qt 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ 详解Qt中的信号与槽 文章编号&#xff1a;Qt 学习笔记 / 12 文章目录…

红黑树的平衡之道:深入解析右旋操作的原理与实践

红黑树的平衡之道&#xff1a;深入解析右旋操作的原理与实践 一、 红黑树旋转的背景二、右旋&#xff08;RIGHT-ROTATE&#xff09;的原理三、右旋&#xff08;RIGHT-ROTATE&#xff09;的算法步骤四、右旋&#xff08;RIGHT-ROTATE&#xff09;的伪代码五、右旋&#xff08;RI…

C语言-角谷步数

题目描述 你听说过角谷猜想吗&#xff1f; 任意的正整数&#xff0c;比如 5&#xff0c;我们从它开始&#xff0c;如下规则计算&#xff1a; 如果是偶数&#xff0c;则除以2&#xff1b;如果是奇数&#xff0c;则乘以 3 再加 1。 如此循环&#xff0c;最终必会得到 1&#xff…