[笔记]MySQL学习(1)
检索数据
限制结果
limit 5 返回不多于5行
limit 5, 5 从行5开始的5行
排序检索
ORDER BY 列 (可以是检索列或非检索列)
ORDER BY 列1 DESC,列2 DESC,列3
DESC 降序 (如果想对多个列降序排序,必须每个列指定DESC)
ASC 升序
过滤数据
=、!=、BETWEEN AND
IS NULL
mysql在执行匹配时,默认不区分大小写
AND、OR、IN(value1,value2)、NOT IN
通配符:
LIKE
% 任何字符出现任意次数,搜索区分大小写
_ 匹配单个字符
花费之间更长
正则表达式:
RGEXP '...'
RGEXP '1000|2000'
RGEXP '[123]TON' (OR)
RGEXP '[1-3]TON' (范围)
特使字符前加\\ 包括. [ ] | -
[:alnum:] [a-zA-Z0-9]任意字母和数字
[:alpha:] 任意字母
* 0个或多个
+ 1个或多个
汇总数据
AVG COUNT MAX MIN SUM 某列 (忽略NULL的行)
分组
1. GROUP BY 可以包含任意数目的列
2. GROUP BY 子句中列出的每个列都必须是检索列或者有效的表达式(但不能是聚集函数)
3. 如果在SELECT中使用表达式,则必须在GROUP BY子句中指定相同的表达式,不能用别名
4. 除聚集语句外,select中的每个列都必须在group by子句中列出
5. group by子句必须出现在where子句之后,order by子句之前
6. 过滤分组:having,在分组后进行过滤 例如 having count(*) > 2
子查询
1. 子查询总是从内向外处理
2. 列必须匹配,在where子句中使用子查询,应该保证select语句具有与where子句中相同数目的列
通常子查询将返回单个列,并且与单个列匹配。
3. 利用子查询进行过滤, 例子:
orderitems: order_num, prod_id, cust_id
customers: cust_id, cust_name, cust_contact, cust_state
查询包含物品TNT2订单的所有客户的客户信息
SELECT cust_name, cust_contact
FROM customers
WHERE cust_id IN (SELECT cust_id
FROM orders
WHERE order_num IN (SELECT order_num
FROM orderitems
WHERE prod_id='TNT2')));
4. 子查询作为计算字段
查询customers中每个客户的订单总数
SELECT cust_name, cust_state, (SELECT COUNT(*)
FROM orders
WHERE orders.cust_id = customers.cust_id) AS orders
FROM customers
ORDER BY cust_name;
联结表
用来检索出存储在多个表中的信息
关系表的设计就是要保证把信息分解成多个表,一类数据一个表。各表通过某些常用的值(即关系设计中的关系)互相关联。
vendors 供应商信息 vend_id vend_name
products 产品信息 prod_id prod_name prod_price vend_id
内部联结 等值联结
SELECT vend_name, prod_name, prod_price
FROM vendors INNER JOIN products
ON vendors.vend_id = products.vend_id;
使用连接查询包含物品TNT2订单的所有客户的客户信息
SELECT cust_name, cust_contact
FROM customers, orders, orderitems
WHERE customers.cust_id = orders.cust_id
AND orderitems.order_num = orders.order_num
AND prod_id = 'TNT2';
本文地址:https://blog.csdn.net/m0_37855217/article/details/107676828