MySQL SQL语句知识点总结

检索数据

检索单个列: (列名为prod_name,表名为products

SELECT prod_name FROM products;

 

检索多个列: (列名为prod_id,prod_name,prod_price,表名为products

SELECT prod_id,prod_name,prod_price FROM products;

 

检索所有列:(使用星号*通配符)

SELECT  *  FROM products;

 

检索不同的行 (使用DISTINCT关键字,指示MySQL只返回不同的值)

SELECT DISTINCT FROM products;

 

限制返回行数 (使用LIMIT关键字,LIMIT 5指示MySQL返回不多于5行)

SELECT prod_name FROM products LIMIT 5;

 

限制返回行数和起始位置:LIMIT 5,5指示MySQL返回从第5行开始的5行)

SELECT prod_name FROM products LIMIT 5,5;

 

使用完全限定的表名: products.prod_name同时使用表名和列名指定该列)

SELECT products.prod_name FROM products;

 

排序检索数据

排序数据:  (使用ORDER BY子句,指示MySQLprod_name列以字母顺序排序数据

SELECT prod_name FROM products ORDER BY prod_name;

 

按多个列排序:  (仅在多个行具有相同的prod_price值时才按照prod_name进行排序)

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

 

指定排序方向:  (使用DESC 关键字,指示降序排序,ASC升序排序是默认排序方向

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

 

ORDER BYLIMIT 的组合  (找出一个列中最高或最低的值)

SELECT  prod_price FROM products ORDER BY prod_price DESC LIMIT 1;

 

过滤数据

where子句操作符

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

检查单个值:  (使用WHERE子句,指定搜索条件进行过滤

SELECT prod_name,prod_price FROM products WHERE prod_price=2.50;

 

不匹配检查:  过滤出vend_id不等于1003的数据)

SELECT vend_id,prod_name FROM products WHERE vend_id<>1003;

 

范围值检查:  (使用BETWEEN操作符,过滤出prod_price5~10之间的数据)

SELECT prod_name,prod_price FROM products WHERE prod_price BETWEEN 5 AND 10;

 

空值检查:  过滤出prod_price 为空值的数据)

SELECT prod_name FROM products WHERE prod_price IS NULL;

 

对多个列进行过滤:  (使用AND操作符,给WHERE字句附加条件)

SELECT prod_id, prod_price,prod_name FROM products

WHERE vend_id=1003 AND prod_price <=10;

 

匹配条件中的某一个:  (使用OR操作符,指示MySQL检索匹配任一条件的行)

SELECT prod_id, prod_price,prod_name FROM products

WHERE vend_id=1003 OR vend_id=1002;

 

注意:在ANDOR组合的时候,AND再计算次序中的优先级更高。

 

匹配范围中的条件:(使用IN操作符,指定条件范围,检索vend_id10021003的数据)

SELECT prod_id, prod_price,prod_name FROM products

WHERE vend_id IN (1002,1003);

 

否定某个条件:(使用NOT操作符,检索除了vend_id10021003的数据)

SELECT prod_id, prod_price,prod_name FROM products

WHERE vend_id NOT IN (1002,1003);

 

用通配符进行过滤(LIKE

 

百分号(%)通配符:  (使%通配符,找到所有以词jet起头的产品,%表示任何字符出现任意多次

SELECT prod_id,prod_name FROM products WHERE prod_name LIKE ‘jet%’;

 

注意:根据MySQL的配置方式,搜索可以是不区分大小写的或者是区分大小写的。

 

下划线(_)通配符:  (使_通配符,下划线只匹配单个字符而不是多个字符

SELECT prod_id,prod_name FROM products WHERE prod_name LIKE ‘_ ton anvil’;

 

注意:根据通配符搜索的处理一般要比前面讨论的其他搜索说花时间更长,不要多度使用通配符。


用正则表达式进行搜索(REGEXP

基本字符匹配: (关键字EXGEXP后所跟的东西作为正则表达式处理,检索列prod_name 包含文本1000的所有行)

SELECT prod_name FROM products

WHERE prod_name REGEXP ‘1000’ ORDER BY prod_name;

 

注意:LIKE匹配和REGEXP之间有一个重要差别,LIKE匹配整个串,REGEXP匹配子串,如果被匹配的文本在列值中出现,相应的行将被返回。通过用^开始每个表达式,用$结束每个表达式,可以使REGEXP的作用和LIKE一样。


创建计算字段

拼接字段: (使用Concat拼接函数,将值连接到一起构成单个值)

SELECT Concat(vend_name, ‘(’ ,vend_country, ’)’) FROM vendors ORDER BY vend_name;

 

 

使用别名: (使用AS关键字,将某一列赋予别名)

SELECT Concat(vend_name, ‘(’ ,vend_country, ’)’) AS vend_title

FROM vendors ORDER BY vend_name;

 

执行算术计算: (对检索到的数据进行算术计算,MySQL算术操作符有+ - * /

SELECT prod_id,quantity,item_price,quantity*item_price  AS expanded_price FROM vendors ORDER BY vend_name;

 

使用数据处理函数

SQL支持利用函数来处理数据,函数一般是在数据上执行的。它给数据的转换个处理提供了方便。

 

文本处理函数

时间和日期处理函数

数值处理函数

 

汇总数据

求平均值:  (使用AVG()函数求平均值,下例使用AVG()返回products表中所有产品的平均价格)

SELECT AVG(prod_price) AS avg_price FROM products;

 

计数:  (使用COUNT()函数确定表中行的数目或符合特定条件的行的数目,下例对表中行的数目进行计数)

SELECT COUNT(*) AS num_cust FROM customers;

 

对有值行进行计数:  (下例使用COUNT(cust_email)cust_email列中有值的行数进行计数)

SELECT COUNT(cust_email) AS num_cust FROM customers;

 

取得最大值: (使用MAX()函数返回指定列中的最大值)

SELECT MAX(prod_price) AS max_price FROM products;

 

取得最小值: (使用MIN()函数返回指定列中的最小值)

SELECT MIN(prod_price) AS min_price FROM products;

 

总计: (使用SUM()函数返回指定列值的和)

SELECT SUM(quantity) AS item_ordered FROM orderitems WHERE order_num=’20005’;

 

分组数据(GROUP BY

创建分组:  (使用GROUP BY子句创建分组,下例对每个vend_id 进行一个计数而不是整个表)

SELECT vend_id,COUNT(*) AS num_prods FROM products GROUP BY vend_id;

 

过滤分组:  WHERE用来过滤行,HAVING用来过滤分组。下例过滤出条数大于等于2的分组)

SELECT cust_id,COUNT(*) AS orders FROM orders GROUP BY cust_id HAVING COUNT(*) >=2;

 


SELECT子句顺序

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


使用子查询

子查询组合两个查询: (一条语句查询的结果作为另一条语句查询的条件)

SELECT cust_id FROM orders

WHERE order_num IN (SELECT order_num FROM orderitems WHERE prod_id =’TNT2’);




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值