首页 > 数据库 >SQL进阶查询

SQL进阶查询

时间:2024-09-19 20:34:58浏览次数:8  
标签:customer customers 进阶 orders 查询 SQL id SELECT name

前置知识

默认你已经掌握了基础的SQL使用,本文为复杂SQL查询编写。

需求场景

限制条数

限制结果为 10 条

SELECT * FROM table_name
LIMIT 10;

跳过前 5 条,返回接下来的 10 条

SELECT * FROM table_name LIMIT 5,10;

添加条件

基本格式

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

条件表达式

基本表达式
SELECT * 
FROM table_name 
WHERE column_name = 'value';//等于

SELECT * 
FROM table_name 
WHERE column_name <> 'value';//不等于
多重逻辑
SELECT * 
FROM table_name 
WHERE column1 = 'value1' AND column2 = 'value2'; //且

SELECT * 
FROM table_name 
WHERE column1 = 'value1' OR column2 = 'value2';//或

SELECT * 
FROM table_name 
WHERE NOT column_name = 'value';//非
范围条件
SELECT *
FROM products
WHERE price BETWEEN 10 AND 50;//在10和50之间


SELECT * 
FROM table_name 
WHERE column_name IN ('value1', 'value2', 'value3');//在这个三个数之间
模糊匹配
SELECT * 
FROM table_name 
WHERE column_name LIKE '%pattern%'; //包含 'pattern'


SELECT * 
FROM table_name 
WHERE column_name LIKE '%suffix';  //以 'suffix' 结尾
NULL 值检查
SELECT * 
FROM table_name 
WHERE column_name IS NULL;

处理结果

行处理

即改变行的数量

切分

即将一个大表,按照一个字段分为几个小表。

SELECT product_type, COUNT(*)
  FROM product
 GROUP BY product_type;// 按照商品种类统计数据行数
聚合

即配合上文的切分,组合特定的几个小表结果

SELECT department, COUNT(*) AS employee_count
FROM employees
WHERE salary > 50000
GROUP BY department
HAVING COUNT(*) > 5;//计算每个部门的员工数量,但只考虑工资大于 50000 的员工,并只返回员工数量超过 5 的部门

这里先使用GROUP BY 按照部门进行切分,在使用HAVING组合出员工数量大于5的部门

排序
SELECT name, salary
FROM employees
ORDER BY salary ASC (DESC);//按照工资从低到高排序(高到低)。
集合运算
SELECT name FROM employees
UNION
SELECT name FROM contractors;//并集

SELECT name FROM employees
UNION ALL
SELECT name FROM contractors;//不去重

列处理

即改变列的数量

内连结
SELECT customers.customer_name, orders.order_id
FROM customers
INNER JOIN orders
ON customers.customer_id = orders.customer_id;//重

这里的

FROM customers
INNER JOIN orders

说明了表,然后

ON customers.customer_id = orders.customer_id;

配置了合并条件

外连结

内连结会丢弃两张表中不满足 ON 条件的行,和内连结相对的就是外连结。外连结会根据外连结的种类有选择地保留无法匹配到的行。

外连结有三种形式:

  • 左连结会保存左表中无法按照 ON 子句匹配到的行,此时对应右表的行均为缺失值;
  • 右连结则会保存右表中无法按照 ON 子句匹配到的行,此时对应左表的行均为缺失值;
  • 而全外连结则会同时保存两个表中无法按照 ON子句匹配到的行,相应的另一张表中的行用缺失值填充。
SELECT customers.customer_name, orders.order_id
FROM customers
LEFT JOIN orders ON customers.customer_id = orders.customer_id;


SELECT customers.customer_name, orders.order_id
FROM customers
RIGHT JOIN orders ON customers.customer_id = orders.customer_id;

SELECT customers.customer_name, orders.order_id
FROM customers
FULL OUTER JOIN orders ON customers.customer_id = orders.customer_id;

标签:customer,customers,进阶,orders,查询,SQL,id,SELECT,name
From: https://www.cnblogs.com/Ho1dF0rward/p/18421276

相关文章

  • mysql容器使用
    一、镜像使用的部分介绍创建一个简单的mysql容器dockerrun--namesome-mysql-eMYSQL_ROOT_PASSWORD=my-secret-pw-dmysql:tag宿主机没有安装msql的情况下,可以通过docker命令连接mysql通过容器连接远程mysqldockerrun-it--rmmysqlmysql-hsome.mysql.host-usom......
  • 基于sqli-labs Less-7 的sql高权读写注入详解
    1.MySQL高权限读写简介1.1前置知识数据库的高权用户对服务器上的文件进行读取写入操作,从而可以进行写入一句话木马来获得服务器权限或者读取服务器上的配置型文件等注入行为。selectload_file('d:/w.txt');#读取w.txtselect'xxx'intooutfile'd:/1.txt';#将xxx写入......
  • MySQL之事务
    事务的简介:事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。例如生活中的转账事务的操作:方式一:关闭自动提交模式使用步骤:关闭自动提交模式:set@@autocommit=0;执行......
  • cover MySQL三部曲备份【逻辑备份+物理备份】脚本,生产实践
    前言:逻辑备份[mysqldump]物理备份[Xtrbackup]1、mysqldump全备建议手动制定库,不要选择–all,容易在数据恢复时发生问题–set-gtid-purged=OFF选项,在备份时会记录binlog日志,如果不加,不记录binlog日志,所以在我们做主从用了gtid时,用mysqldump备份时就要加–set-gtid-pur......
  • Hive sql 4:中位数
    先说下中位数的概念:中位数‌是统计学中的一个重要概念,它代表将一组数据按照大小排序后位于中间位置的数值。如果一组数据有奇数个数值,则中位数是中间那个数;如果数据中有偶数个数值,则中位数是中间两个数的平均值。中位数是一种位置平均数,它是按顺序排列的一组数据中居于中间位......
  • Hive sql 6:行转列及列转行
    1) 多行转单列user_idlogin_date10012024-09-0110012024-09-0210022024-09-0310032024-09-05比较常见的selectuser_id,concat_ws(',',collect_list(login_date))login_date_setfromtblgroupbyuser_id延伸下,集合中保证日期的有序启动多个mr,顺序会有问题1) 以前......
  • 域名信息查询可以知道什么信息?
    在互联网的浩瀚世界中,域名就如同是一个个独特的地标,指引着人们在信息的海洋中穿梭。而通过域名信息查询,我们可以获取诸多有价值的信息,为我们更好地理解和利用网络资源提供了有力的支持。首先,域名信息查询可以让我们了解域名的注册者信息。这包括注册人的名称、联系方式、地址等。对......
  • JAVA进阶-枚举,类加载器,反射
    day15-枚举,类加载器,反射枚举为什么有枚举为了简洁的表示一些固定的值,Java就给我们提供了枚举。定义格式是指将变量的值一一列出来,变量的值只限于列举出来的值的范围内。格式publicenums{ 枚举项1,枚举项2,枚枚举项3;}定义枚举类要用关键字enum定义......
  • Sql 数据存在就返回匹配数据 不存在就新增数据
    本次样例的执行内容是,匹配就返回匹配数据的id,不匹配就新增数据方式一DECLARE@userIdINTifnotEXISTS(select1fromdbo.UserwherePId=4ANDCode='XX')BEGININSERTINTOdbo.User(PId,Code)VALUES(4,'XX');SELECT@userId=IDENT_CURRENT('User');END......
  • 基于SpringBoot+Vue+MySQL的智能物流管理系统
    系统展示系统背景  随着信息技术的飞速发展和电子商务的蓬勃兴起,智能物流管理系统的需求日益迫切。传统的物流管理方式已难以满足高效、精准、实时的管理需求。因此,基于SpringBoot、Vue和MySQL的智能物流管理系统应运而生。该系统旨在通过现代化的技术手段,实现物......