【笔记】MySQL常用语句

本文主要介绍了MySQL数据库中常用的SQL语句,包括SELECT语句的不同用法,如使用DISTINCT检索不同的值、使用LIMIT限制结果数量、使用ORDER BY进行排序等。此外还详细解释了WHERE子句中的过滤操作符及如何使用IN、LIKE等关键字进行数据过滤。

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

本博客为博主查阅大量资料后整理原创,虽水仍不易,如需转载,请附上本文链接https://blog.youkuaiyun.com/JasonLeeeeeeeeee/article/details/82319756,谢谢
本文若有不足之处可以交流沟通,互相学习
本文是博主读了《SQL必知必会》后,觉得有用的一些地方特地拿出来汇成一篇博客,当笔记用吧。书中对于常见的几种数据库的语法都有提到,本文只罗列了MySQL语句。

SELECT

检索不同的值:

SELECT DISTINCT vend_id FROM Products;
DISTINCT关键字作用于所有的列,不仅仅是跟在其后的那一列。例如,SELECT DISTINCT vend_id, prod_price, 因为指定的两列不完全相同,所以所有的行都会被检测出来。

限制结果:

SELECT prod_name FROM Products LIMIT 5;
表示返回的值是前5行的结果。用关键字LIMIT来限制最多返回多少行。

SELECT prod_name FROM Products LIMIT 5 OFFSET 5;
LIMIT带的OFFSET指定从第几行开始。注意第一个被检索的行是第0行,因此LIMIT 1 OFFSET 1 会返回检索第二行。对于这条语句MySQL还有一个简化版的语句,例如LIMIT 4 OFFSET 3的语句,简化版为LIMIT 3,4 ,其中逗号前为OFFSET值,逗号后为LIMIT值

使用注释:

– 这是嵌在SQL语句行后的注释符; # 表示一整行都是注释; /* 范围内的行都是注释 */。

排序:

SELECT prod_id, prod_price, prod_name FROM Products ORDER BY prod_price, prod_name;
上句表示先按照prod_price进行升序,然后按照prod_name进行升序排序;

SELECT prod_id, prod_price, prod_name FROM Products ORDER BY 2,3;
表示先按照第二个字段prod_price进行升序,然后按照prod_name升序进行排序,注意当根据不出现在SELECT清单中的列进行排序时,不能用此法。相对列的位置和实际列名混合使用。

SELECT prod_id, prod_price, peod_name FROM Products ORDER BY prod_price DESC, prod_name;
表示先按照prod_price进行降序,然后按照prod_name进行升序排序。如果想在多个列上进行降序排序,必须对每一列都指定关键字DESC。

在排序的时候,A与a默认为是相同大小。

WHERE过滤数据

当同时使用 ORDER BY 和 WHERE 子句时,先写 WHERE,再写 ORDER BY,否则会报错。
条件操作符 <> 与 != 相同, !< 相当于 >=。

IN 在 WHERE 子句中用来指定要匹配值的清单的关键字,功能与OR相当。
例如 SELECT prod_price, prod_name FROM Products WHERE vend_id IN (‘DLL01’,’BRS01’);相当于SELECT prod_price, prod_name FROM Products WHERE vend_id = ‘DLL01’ OR vend_id = ‘BRS01’;

IN的优点:更清楚,更直观;求值顺序更容易管理;IN操作符一般比一组OR操作符执行得更快;IN可以包含其他的SELECT语句。

LIKE过滤数据

SELECT prod_id, prod_name FROM Products WHERE prod_name LIKE ‘Fish%’;
表示搜索prod_name字段以 ‘Fish’ 开头的,后续任意长度字符的行。

拼接字段

SELECT Concat(vend_name, ‘(‘, vend_country, ‘)’) AS vend_title FROM Vendors ORDER BY vend_name;
将 vend_name(vend_country) 拼接起来,并进行重新命名为 vend_title。
在SELECT之后也可进行加减乘除的运算。

函数

函数说明
NOW()获取当前日期
YEAR()从日期中提取年份
SUBSTRING()提取字符串的子串
LEFT()返回字符串左边的字符
RIGHT()返回字符串右边的字符
LENGTH()返回字符串的长度
LOWER()将字符串转换为小写
UPPER()将字符串转换为大写
SOUNDEX()返回字符串的SOUNDEX值,用来查找发音相似的字符串
LTRIM()去掉字符串左边的空格
RTRIM()去掉字符串右边的空格
TRIM()去掉字符串两边的空格
SIN()返回一个角度的正弦
COS()返回一个角度的余弦
TAN()返回一个角度的正切
ABS()返回一个数的绝对值
EXP()返回一个数的指数值
SQRT()返回一个数的平方根
PI()返回圆周率
CONVERT()数据类型转换
AVG()返回某列的平均值
COUNT()返回某列的行数
MAX()返回某列的最大值
MIN()返回某列的最小值
SUM()返回某列值之和

创建和过滤分组

SELECT cust_id, COUNT() AS orders FROM Orders GROUP BY cust_id HAVING COUNT() >= 2;
这条语句是先按照cust_id进行分组统计每个客户id的订单量,然后筛选订单量至少为2的客户id,最后输出客户id和该客户的订单量。

HAVING 和 WHERE 的区别:HAVING过滤分组,而WHERE过滤行;HAVING是在分组后进行过滤,而WHERE是在分组前进行过滤,也就是说WHERE排除的行不在分组中。

SELECT子句顺序

子句说明是否必须使用
SELECT返回的列或表达式
FROM从中检索的数据表仅在从表中选择数据时使用
WHERE行级过滤
GROUP BY分组说明仅在按组聚集时使用
HAVING组级过滤
ORDER BY输出排序顺序

联接表

SELECT vend_name, prod_name, prod_price
FROM Vendors INNER JOIN Products
ON Vendors.vend_id = Products.vend_id;
在使用这种语法时,联结条件用特定的ON子句而不是WHERE子句。

SELECT Customers.cust_id, Orders.order_num
FROM Customers LEFT OUTER JOIN Orders
ON Customers.cust_id = Orders.cust_id;
这里与上条语句不同的是,这里是外联接,上面是内联接。外联结包括没有关联行的行,也就是该语句的返回中不但包括左右有联接的行,而且包括其中左表中其他未找到联接行的行。如果想返回全部Orders表内容,可以调换两个表的位置或者将关键字LEFT改为RIGHT。

参考文献:
SQL必知必会 Ben Forta

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值