《mysql》数据库查询汇总 ->不断更新

本文深入解析SQL查询的高级技巧,包括数据去重、限制查询结果、排序、搜索条件设置、模糊查询、分组及多表查询等核心操作,帮助读者提升数据库管理效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

查询结果去重


SELECT DISTINCT 列名 FROM 表名;

限制查询结果条数


LIMIT 开始行, 限制条数;

对查询结果排序(默认按照ASC升序排序)

ORDER BY 列名 ASC|DESC

asc:升序

desc:降序

按照多个列的值进行排序(用,分割)

ORDER BY 列1 ASC|DESC, 列2 ASC|DESC ...

排序和限制同时使用

ORDER BY 列名 LIMIT 限制数目

简单搜索条件(查询单个值)

需要把搜索条件放在WHERE子句中

SELECT * FROM student_info WHERE 条件(比如name = “大头”)

条件:

大于:>   ,

小于:< ,

不等于:!=  ,

之间:BETWEEN  1 AND 10

简单搜索条件(查询多个值中的一个)

需要把搜索条件放在WHERE子句中

SELECT * FROM 表名 WHERE 条件 IN(匹配条件一,匹配条件二)

例:查询user表中 名字为张三或者李四的用户

SELECT * FROM user WHERE name IN("张三",“李四”)

判断是否是NULL数据

SELECT * FROM 表名 WHERE 条件 IS NULL

例:查询user表中name为null的用户

SELECT * FROM user WHERE name IS NULL

 

多个条件联合查询

且:用AND连接

例:查询user表名字为张三且成绩大于75分的用户

SELECT * FROM user WHERE name = "张三" AND score > 75;

或:用OR连接

例:查询user表名字为张三或成绩大于75分的用户

SELECT * FROM user WHERE name = "张三" OR score > 75;

当AND 和OR一起用时 AND的优先级大于OR

 

模糊查询

关键词:LIKE

通配符:不能完整描述要查询的信息,那就用某个符号来替代这些模糊的信息

1: “%“”:代表一个字符串

 例:查询user表 姓 “”张“的用户(张三丰啊分)  /  查询user表 有 “”三“的用户

SELECT * FROM user WHERE name LIKE "张%";

SELECT * FROM user WHERE name LIKE "%三%";

 

 2:_:代表任意一个字符

 例:查询user表 姓 “”张“的用户(张三)  /  查询user表 有 “”三“的用户

SELECT * FROM user WHERE name LIKE "张_";

SELECT * FROM user WHERE name LIKE "%三%";

 

转义通配符

如果待匹配的字符串中本身就包含普通字符'%'或者'_'该咋办,怎么区分它是一个通配符还是一个普通字符呢?

答:如果匹配字符串中需要普通字符'%'或者'_'的话,需要在它们前边加一个反斜杠\来和通配符区分开来,也就是说:

  • '\%'代表普通字符'%'
  • '\_'代表普通字符'_'

 例:查询user表 姓 “”张“的用户(张%或者张_)

SELECT * FROM user

 WHERE name LIKE "张\_";

 

分组数据

理解:比如一条语句中同时查询全校的各科目的平均分

示例语句:SELECT subject, AVG(score) FROM student_score GROUP BY subject;

| subject      |      AVG(score) | +-----------------------------+------------+

|   数学       |       73.0000 |

|   语文       |       73.2500 |

+-----------------------------+------------+

SELECT [DISTINCT] 查询列表

[FROM 表名]

[WHERE 布尔表达式]

[GROUP BY 分组列表 ]

[HAVING 分组过滤条件]

[ORDER BY 排序列表]

[LIMIT 开始行, 限制条数]

多表查询

子查询:

栗子:

查询张三的分数:SELECT * FROM student_score WHERE number = (SELECT number FROM student_info WHERE name = '张三');

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

### 关于头歌 L-MYSQL 数据库高级查询中的连接查询数据库查询中,连接查询是一种非常重要的技术,用于从多个中检索数据。以下是关于头歌平台中 MySQL 高级查询中的连接查询的一些示例和说明。 #### 1. 基本概念 连接查询的核心在于如何将两个或更多数据关联起来。常见的连接类型包括 `INNER JOIN`、`LEFT JOIN`、`RIGHT JOIN` 和 `CROSS JOIN` 等。其中,`CROSS JOIN` 是一种特殊类型的连接,它会生成两张的笛卡尔积[^3]。 #### 2. 示例代码 以下是一些典型的连接查询示例: ##### (1)INNER JOIN 示例 假设我们有两个:`student` 和 `score` 。我们需要找到所有学生的姓名及其对应的分数。 ```sql SELECT s.name, sc.score FROM student AS s INNER JOIN score AS sc ON s.id = sc.student_id; ``` 此查询示只返回那些在 `student` 和 `score` 中都有对应记录的学生信息。 ##### (2)LEFT JOIN 示例 如果我们希望即使某些学生没有成绩也能显示其名字,则可以使用左外连接 (`LEFT JOIN`)。 ```sql SELECT s.name, sc.score FROM student AS s LEFT JOIN score AS sc ON s.id = sc.student_id; ``` 这将返回所有的学生名称以及他们的分数(如果存在的话),对于不存在的成绩字段则填充为 NULL。 ##### (3)CROSS JOIN 示例 为了展示所有可能的学生与课程组合,我们可以使用交叉连接 (`CROSS JOIN`)。 ```sql SELECT st.name AS StudentName, c.course_name AS CourseName FROM student AS st CROSS JOIN course AS c; ``` 这条 SQL 将列出每一个学生与每一门课的所有搭配情况,形成一张完整的笛卡尔乘积格。 #### 3. 性能优化技巧 当处理大规模数据,性能是一个重要考量因素。例如,在索引上完成排序分页后再回原获取额外列内容的方法能够有效减少不必要的 I/O 开销[^1]: ```sql EXPLAIN SELECT * FROM student t, (SELECT id FROM student ORDER BY id LIMIT 2000000, 10) a WHERE t.id = a.id; ``` 上述例子展示了先按主键筛选少量目标 ID 并进一步联结取全量详情的方式,有助于提升复杂场景下的效率现。 #### 4. 结合实际需求设计查询方案 根据不同业务逻辑选用合适的 join 类型至关重要。比如统计某段间内的订单总数并按照客户分类汇总可采用如下形式: ```sql SELECT c.customer_name, COUNT(o.order_id) as order_count FROM customers c LEFT JOIN orders o ON c.customer_id = o.customer_id AND o.date >= '2023-01-01' GROUP BY c.customer_name; ``` 这里通过条件过滤限定间范围的同利用 LEFT JOIN 确保即便部分顾客未下单也依然保留其基本信息参与计算。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值