《MySQL必知必会》1-17章

#拼接成name(location)形式
SELECT Concat(vend_name,'(',vend_country,')')
FROM vendors
ORDER BY vend_name;

#删除数据右面的空格;RTrim右,LTrim左,Trim两边
SELECT Concat(RTrim(vend_name),'(',RTRIM(vend_country),')')
FROM vendors
ORDER BY vend_name;

#创建别名或导出列
SELECT Concat(vend_name,'(',vend_country,')') AS
vend_titles
FROM vendors
ORDER BY vend_name;

#对检索出来的数据进行算术计算
SELECT prod_id,quantity,item_price,
quantity*item_price AS expanded_price
FROM orderitems
WHERE order_num=20005;

#将文本转换为大写Lower(),Upper()文本处理函数
SELECT vend_name,Upper(vend_name) AS vend_name_upcase
FROM vendors
ORDER BY vend_name;

#匹配类似发音
SELECT cust_name,cust_contact
FROM customers
WHERE Soundex(cust_contact) = Soundex('Y.Lie');

#日期和时间处理函数,日期处理函数
SELECT cust_id,order_num
FROM orders
WHERE order_date = '2005-09-01';

#排除既包含日期又包含时间
SELECT cust_id,order_num
FROM orders
WHERE Date(order_date) = '2005-09-01';

#检索某个月所有日期的订单
SELECT cust_id,order_num
FROM orders
WHERE Date(order_date)  BETWEEN '2005-09-01' AND '2005-09-30';
#不用即每个月的天数
SELECT cust_id,order_num
FROM orders
WHERE Year(order_date) = 2005 AND Month(order_date) = 9;

#计算所有产品的平均值,AVG()函数
SELECT AVG(prod_price) AS avg_price
FROM products;
#计算特定行产品的平均值
SELECT AVG(prod_price) AS avg_price
FROM products
WHERE vend_id = 1003;
#只计算价格不同的
SELECT AVG(DISTINCT prod_price) AS avg_price
FROM products
WHERE vend_id = 1003;


#对行计数COUNT()函数
SELECT COUNT(*) AS num_cust
FROM customers;
#对特定列中具有值的行进行计数
SELECT COUNT(cust_email) AS num_cust
FROM customers;

#返回指定列中的最大值MAX()
SELECT MAX(prod_price) AS max_price
FROM products;
#返回指定列值的和,此处还要求是20005号的(由WHERE语句保证)
SELECT SUM(quantity) AS items_ordered
FROM orderitems
WHERE order_num = 20005;
#计算值
SELECT SUM(quantity*item_price) AS total_price
FROM orderitems
WHERE order_num = 20005;

#组合聚集函数
SELECT COUNT(*) AS num_items,
       MIN(prod_price) AS price_min,
			 AVG(prod_price) AS price_avg
FROM products;

#GROUP BY子句创建分组
SELECT vend_id,COUNT(*) AS num_prods
FROM products
GROUP BY vend_id;

#HAVING过滤分组
SELECT vend_id,prod_price,COUNT(*) AS num
FROM products
GROUP BY vend_id
HAVING COUNT(*)<7;

#HAVING分组以后用ORDER BY 排序
SELECT vend_id,prod_price,COUNT(*) AS num
FROM products
GROUP BY vend_id
HAVING COUNT(*)<7
ORDER BY prod_price;
#同上一个
SELECT vend_id,SUM(prod_price) AS price
FROM products
GROUP BY vend_id
HAVING price>1
ORDER BY price;

#使用子查询
SELECT order_num
FROM orderitems
WHERE prod_id = 'TNT2';

SELECT cust_id
FROM orders
WHERE order_num = 20005 OR order_num = 20007;
#等同于WHERE order_num IN(20005,20007)

SELECT *
FROM customers
WHERE cust_id=10001 OR cust_id=10004;
#三个子查询组合为一个查询
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'))
#使用联结
SELECT cust_name,cust_contact
FROM customers,orders,orderitems
WHERE prod_id = 'TNT2'
AND orders.order_num = orderitems.order_num
AND customers.cust_id=orders.cust_id;

#作为计算字段使用子查询
SELECT cust_name,cust_state,
(SELECT COUNT(*)
FROM orders
WHERE orders.cust_id=customers.cust_id) AS orders
FROM customers
ORDER BY cust_nameg;

#创建联结
SELECT vend_name,prod_name,prod_price
FROM vendors,products
WHERE vendors.vend_id = products.vend_id
ORDER BY vend_name,prod_name;
#等值联结(内部联结)
SELECT vend_name,prod_name,prod_price
FROM vendors INNER JOIN products
ON vendors.vend_id = products.vend_id

#联结多个列表
SELECT prod_name,vend_name,prod_price,quantity
FROM orderitems,products,vendors 
WHERE products.vend_id = vendors.vend_id
AND order_num = 20005
AND orderitems.prod_id = products.prod_id
#AND order_num = 20005

#使用UNION语句(UNION ALL 不消除重复)
SELECT vend_id,prod_id,prod_price
FROM products
WHERE prod_price <= 5
UNION
SELECT vend_id,prod_id,prod_price
FROM products
WHERE vend_id IN (1001,1002)
ORDER BY vend_id,prod_price
#若使用ORDER BY只能用一个


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值