MYSQL查询语句总结

SELECT语句

检查单个列

SELECT prod_name FROM products;

检查多个列

SELECT prod_id,prod_name,prod_price
FROM products;

检查所有列

SELECT * FROM products;

检查不同的行

SELECT DISTINCT vend_id From products;

限制结果

SELECT prod_name FROM products LIMIT 5;     #显示五行结果

排序检索数据

排序数据

SELECT prod_name  From products
ORDER BY prod_name;                                 #升序(从小到大)

按多个列排序

首先按价格,然后按名称排序

SELECT prod_name,prod_price,prod_name
FROM products
ORDER BY prod_price,prod_name;

制定排序方向

SELECT prod_id FROM products
ORDER BY prod_id DESC;                          # 降序(从大到小)

EG:通过排序显示最贵物品的价值

SELECT prod_price FROM products
ORDER BY prod_price DESC
LIMIT 1;

过滤分组

使用WHERE子句

SELECT prod_name,prod_price
FROM products
WHERE prod_price=2.50;                      # 寻找价格位2.50的物品

WEHERE字句操作符

  • = 等于
  • <> 不等于
  • != 不等于
  • <小于
  • <=小于等于
  • >大于
  • >=大于等于
  • BETWEEN在指定两个值之间

数据过滤

组合WHERE子句

AND操作符

SELECT prod_id,prod_price,prod_name
FROM products
WEHRE vend_id=1003 AND prod_price<=10;      #AND操作符,两个条件同时满足才满足

OR操作符

SELECT prod_id,prod_price,prod_name
FROM products
WEHRE vend_id=1003 OR vend_id=1002;      #OR操作符,两个条件满足一个即可。

AND运算符优先级高于OR

IN操作符

SELECT prod_name,prod_price
FROM products
WHERE vend_id IN(1002,1003)                                 #IN操作符,属于括号里面的即会出现。
ORDER BY prod_name; 

NOT操作符

SELECT prod_name,prod_price
FROM products
WHERE vend_id NOT IN(1002,1003)                             #NOT操作符,取相反结果

利用通配符进行过滤

LIKE操作符

百分号(%)通配符

%表示任意字符出现任意次

SELECT prod_id,prod_name FROM products
WHERE prod_name LIKE 'jet%'                                         #搜索所有name为jet的内容

SELECT prod_id,prod_name FROM products
WHERE prod_name LIKE '%anvil%'                                         #搜索所有name包含anvil的内容

下划线(_)通配符

_表示任意符号出现一次

SELECT prod_id,prod_name FROM product
WHERE prod_name LIKE '_ ton anvil';             #搜索出第一个字符任意,后面位ton anvil的内容

使用通配符技巧

  • 不要过度使用通配符。如果有其他操作符能达到相同的目的,应该使用其他操作符。
  • 在确实需要使用通配符时,除非非常有必要,否则不要把它们用在搜索模式的开始处。把通配符置于搜索模式开始处,搜索起来是最慢的。
  • 仔细注意通配符的位置。如果放错地方,可能不会返回想要的数剧。

用正则表达式进行搜索

使用MYSQL正则表达式

基本字符匹配

SELECT prod_name FROM products
WHERE prod_name REGEXP '1000';                          #name搜索出包含1000的内容

进行OR匹配

SELECT prod_name FROM products
WHERE prod_name REGEXP '1000|2000';             # 匹配到name包含1000或2000的内容

匹配几个字符之一

SELECT prod_name FROM products
WHERE prod_name REGEXP '[123] TON';               # 匹配到name包含1 TON、2TON、3TON的内容

匹配范围

SELECT prod_name FROM products
WHERE prod_name REGEXP'[1-5] ton'                   # 匹配到name包含1 TON、2TON……5TON的内容

创建计算字段

拼接字段

SELECT Concat(vend_name,' (',vend_country,')') 
FROM vendors;                                   


# 把vend_name和vend_country连接起来
# EG:vend_name='ACME' , vend_country='USA'
#OUTPUT: ACME (USA)

执行算术计算

SELECT prod_id,quantity,item_price,
quantity*item_prics as expanded_price                   # 可以把乘积结果显示到表中,并且列名可以用别名
FROM orderitems WHERE order_name=20005;

使用数据处理函数

文本处理函数

SELECT vend_name,Upper(vend_name) AS vend_name_upase
FROM vendors;                                                          # Upper函数,将字母转化为大写

日期和时间处理函数

SELECT cust_id,order_num
FROM order
WHERE Data(order_data) BETWEEN '2005-09-01' AND '2005-09-30';
# 用data函数可以进行日期处理

汇总数据

聚焦函数

AVG函数

SELECT AVG(prod_price) AS avg_price FROM products;
# 求出price的平均数。

COUT函数

SELECT cout(*) AS num_cust FROM customers; 
# 求出顾客总数。

MAX函数(MIN、SUM函数省略)

SELECT MAX(prod_price) AS max_price FROM produces;
求出price的最大值。

聚集不同值

SELECT AVG(DISTINCT prod_price) AS agv_price
FROM products WHERE vend_id=1003;                   #去重后的平均值。

组合聚集函数

SELECT COUNT(*) AS num_items,
                MIN(prod_price) AS price_min,
                MAX(prod_price) AS price_max,
                AVG(prod_price) AS price_avg
FROM produces;                                                              # 把这些函数结果组合起来

分组数据

创建分组

SELECT vend_id,COUNT(*) AS num_prods
FROM products
GROUP BY vend_id;
# 先对vend_id进行分组求出每组的个数后进行显示。

过滤分组

SELECT vend_id,COUNT(*) AS num_prods
FROM products
GROUP BY vend_id
HAVING COUNT(*)>=2;     #对显示的组加了判断条件


SELECT vend_id,COUNT(*) AS num_prods
FROM products WHERE prod_price>=10          # 进行条件赛选后分组,然后再次进行赛选
GROUP BY vend_id
HAVING COUNT(*)>=2;     #对显示的组加了判断条件

#同时用WEHRE和HAVING赛选

分组和排序

SELECT order_num.SUM(quantity*item_price) AS ordertotal
FROM orderitems
ORDER BY ordertotal;                    # 分组后进行排序

使用子查询

使用子查询进行过滤

SELECT cust_id
FROM orders
WHERE order_num IN(SELECT order_num 
                                            FROM orderitems
                                            WHERE prod_id='TNT2');
#先对orderitems表中检测出id为TNT2的数据的num,在从order中检索出num属于那个的id

作为计算字段的子查询

select cust_name,
    cust_state,
    (select count(*)
        from orders where orders.cust_id=customers.cust_id) 
    as orders
from customers;

# 将结果作为一个字段显示。
+----------------+---------------+----------+
| cust_name   | cust_state  | orders  |
+----------------+---------------+----------+
| Coyote Inc.   | MI                  |      2         |
| Mouse Hos    | OH               |      0 |
| Wascals        | IN         |      1 |
| Yosemite Place | AZ         |      1 |
| E Fudd         | IL         |      1 |
| Pep E. laPew   | CA         |      0 |
| M.Martian      | NY         |      0 |
+----------------+------------+--------+

联合表

SQL最强大的功能之一就是能在数据检索检查的执行中联结(jion)表。

创建联结

SELECT vend_name,prod_name,prod_price
FROM vendors,products
WHERE vendors.vend_id=products.vend_id;

# 将两个表通过笛卡尔积的方式联结起来,然后进行赛选。

内部联结

SELECT vend_name,prod_name,prod_price
FROM vendors INNER JOIN products
ON vendors.vend_id=products.vend_id;

# 将两个表进行内部联结(其实等价于笛卡尔积)后进行赛选

创建高级联结

使用不同类型的联结

自联结

SELECT p1.prod_id,p1.prod_name
FROM products AS p1,products AS p2
WHERE p1.vend_id=p2.vend_id
AND p2.prod_id='DTNTR';

# 两个products表进行笛卡尔积联结后进行筛选.

外部联结

SELECT customers.cust_id,orders.order_num
FROM customers LEFT OUTER JOIN orders
ON customers.cust_id=orders.cust_id;
# 检索所有客户的订单,没有订单的输出NULL
<think>好的,我现在需要帮助用户查找关于MySQL查询语句的总结、笔记和示例。首先,根据用户提供的引用内容,引用1、3、4都涉及SELECT语句的使用和基础操作。引用2提到MySQL在Linux下区分大小写,这点可能在查询时需要注意,但用户主要关心的是查询语句的总结,所以可能暂时不需要深入讨论大小写问题。 接下来,我需要整理用户提供的引用内容中的相关信息。引用3详细介绍了SELECT语句的语法结构,包括字段列表、FROM子句、WHERE条件、GROUP BY、HAVING、ORDER BY和LIMIT。这些都是查询语句的核心部分,需要重点归纳。引用1提到了SELECT语句的常见操作,如排序、限制数量、聚合计算,这些可以作为示例部分的内容。引用4虽然主要讲基础操作,但其中也提到数据查询和更新,可能对WHERE子句的使用有帮助。 用户的需求是总结、笔记和示例,所以应该分模块整理。例如,语法结构、常用子句、示例部分。需要注意每个部分的信息来源,正确标注引用。同时,用户可能希望看到具体的例子,比如如何写一个带WHERE条件的查询,如何使用聚合函数等。 在组织内容时,应保持结构清晰,逐步从基础到高级。比如先介绍SELECT的基本语法,然后各个子句的作用,接着给出示例,最后注意事项。这样用户能够循序渐进地理解。同时,要确保所有示例符合LaTeX格式要求,数学表达式使用$...$,独立公式用$$...$$,但在这个问题中可能涉及较少数学公式,更多是代码示例,所以需要注意代码块的格式是否正确,比如使用反引号包裹。 可能还需要检查是否有遗漏的部分,比如JOIN操作或子查询,但根据引用内容,用户提供的资料中没有详细提到这些高级内容,所以可能暂时不包含。但如果有相关引用,需要补充。此外,用户的问题中引用了四个来源,需要确保每个引用的信息正确对应,比如引用3中的语法结构,引用1中的常见操作等。 最后,生成相关问题,这些问题应该围绕用户的需求展开,比如优化查询、聚合函数的使用、分页技巧等,确保问题与之前的总结内容相关,并且能够帮助用户进一步学习。</think>### MySQL 查询语句总结与示例 #### 一、基本语法结构 MySQL 查询语句的核心是 `SELECT`,其完整语法格式为: $$ SELECT \ 字段列表|* \ FROM \ 表名 \ [WHERE \ 搜索条件] \ [GROUP BY \ 分组字段 \ [HAVING \ 分组条件]] \ [ORDER BY \ 排序字段 \ 排序规则] \ [LIMIT \ 分页参数] $$ (引用[3]) #### 二、常用子句详解 1. **基础查询** - 查询所有列: ```sql SELECT * FROM 表名; ``` - 指定字段查询: ```sql SELECT 字段1, 字段2 FROM 表名; ``` 2. **WHERE 条件过滤** 支持逻辑运算符(`AND`/`OR`)和比较运算符(`=`, `>`, `LIKE` 等): ```sql SELECT * FROM 表名 WHERE 字段1 > 100 AND 字段2 LIKE '%abc%'; ``` (引用[3]) 3. **聚合与分组** - 使用 `COUNT`, `SUM`, `AVG` 等聚合函数: ```sql SELECT 字段, COUNT(*) FROM 表名 GROUP BY 字段; ``` - `HAVING` 过滤分组结果: ```sql SELECT 字段, AVG(数值) FROM 表名 GROUP BY 字段 HAVING AVG(数值) > 50; ``` 4. **排序与分页** - `ORDER BY` 排序(默认升序,`DESC` 降序): ```sql SELECT * FROM 表名 ORDER BY 字段 DESC; ``` - `LIMIT` 限制返回行数(常用于分页): ```sql SELECT * FROM 表名 LIMIT 10 OFFSET 20; -- 跳过前20条,取10条 ``` (引用[1]) #### 三、示例场景 1. **条件查询与排序** ```sql SELECT 姓名, 成绩 FROM 学生表 WHERE 学科 = '数学' AND 成绩 >= 90 ORDER BY 成绩 DESC LIMIT 5; ``` 2. **分组统计** ```sql SELECT 部门, AVG(工资) AS 平均工资 FROM 员工表 GROUP BY 部门 HAVING 平均工资 > 10000; ``` #### 四、注意事项 1. 在 Linux 系统下,MySQL 对表名和字段名**区分大小写**,需保持语句与定义一致(引用[2])。 2. 避免使用 `SELECT *`,明确列出所需字段以提升性能(引用[4])。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值