本文从实际具体的使用场景记录在MySQL下SQL的使用。
一、基本功能
- 唯一列表关联多列表展示(例子:有一张用户表,一张用户购买商品的订单表;用户表一列一个用户不会重复,订单表中同一个用户可能有多个购买记录;)问题是如何统计每个用户购买的总金额,表结构如下: 实现:通过ID关联两张表,同时对订单表的金额项求和,根据用户ID分组。
数据库:MySQL常用SQL查询一、基本功能二、高级功能
SELECT a.ID,a.Name,a.Age,SUM(b.Amount) FROM tb_a AS a,tb_order As b WHERE a.ID = b.ID GROUP BY a.ID;![]()
数据库:MySQL常用SQL查询一、基本功能二、高级功能
-
不同数据库之间的联表查询(例子:数据库A中的a表与数据库B中的b表关联查询)
实现:跟日常的联表查询其实差不多,唯一的区别是在表名前加上所属数据库。
最后联表查询的结果如下:数据库:MySQL常用SQL查询一、基本功能二、高级功能 数据库:MySQL常用SQL查询一、基本功能二、高级功能 - SELECT嵌套查询;有两种方式:
SELECT * FROM WHERE col IN (SELECT cols FROM tb);
SELECT t.* (SELECT * FROM tb) t;
数据库:MySQL常用SQL查询一、基本功能二、高级功能 - 使用CASE…WHEN…THEN…ELSE…END求和。
select sum(case when symbol=’-’ then -1*value else value end) AS sums from tb_d;
数据库:MySQL常用SQL查询一、基本功能二、高级功能 - JOIN…ON…、LEFT JOIN…ON…、RIGHT JOIN…ON…
SELECT * FROM tb_join_a JOIN tb_join_b ON tb_join_a.id = tb_join_b.id JOIN tb_join_c ON tb_join_a.id = tb_join_c.id;
SELECT * FROM tb_join_a LEFT JOIN tb_join_b ON tb_join_a.id = tb_join_b.id LEFT JOIN tb_join_c ON tb_join_b.id = tb_join_c.id;
SELECT * FROM tb_join_a RIGHT JOIN tb_join_b ON tb_join_a.id = tb_join_b.id RIGHT JOIN tb_join_c ON tb_join_b.id = tb_join_c.id;
数据库:MySQL常用SQL查询一、基本功能二、高级功能
二、高级功能
- 复制表结构和数据
CREATE TABLE tb_a_copy SELECT * FROM tb_a;
数据库:MySQL常用SQL查询一、基本功能二、高级功能 -
多表关联合并(表中字段不完全相同)
实际工作中,我们经常遇到要把A表和B表相同字段合并,不同字段分开显示,举个例子如下,我们需要把这两张表合并成一张表,合并后的表有三个字段(id, name, age)。
上面这个问题我们如何解决呢,思路应该是先分别对两张表做LEFT JOIN和RIGHT JOIN,使其变成结构相同的两张表,然后通过UNION把两表合并去掉重复数据,最终的语句和效果如下:数据库:MySQL常用SQL查询一、基本功能二、高级功能 SELECT tb_join_a.id,tb_join_a.name,tb_join_b.age FROM tb_join_a LEFT JOIN tb_join_b ON tb_join_a.id=tb_join_b.id
UNION
SELECT tb_join_b.id,tb_join_a.name,tb_join_b.age FROM tb_join_b LEFT JOIN tb_join_a ON tb_join_a.id=tb_join_b.id;
数据库:MySQL常用SQL查询一、基本功能二、高级功能
【参考文献】
1.MySQL用命令行复制表的方法