-
@MySQL---JOIN优化聚合子查询
1.一般写法,未能解决SELECT g.user_name,MAX(k.kills),k.time FROM `group` AS g JOIN kills AS k ON g.id=k.user_id GROUP BY g.user_name ORDER BY g.user_name;
2.使用JOIN优化聚合子查询
SELECT a.user_name,b.timestr,b.kills FROM user1 a JOIN user_kills b ON a.id = b.user_id JOIN user_kills c ON c.user_id = b.user_id GROUP BY a.user_name,b.timestr,b.kills HAVING b.kills = MAX(c.kills);
查看全部 -
@MySQL---JOIN优化子查询技巧
1.一般子查询写法
SELECT a.user_name,a.voer, (SELECT over FROM user2 WHERE a.user_name = b,user_name) AS over2 FROM user1 a;
问题:子查询对A表的每一条记录都要进行一次子查询,
数据小时,没有多大影响,如果数据量大时,则要消耗大量的查2.JOIN优化(左连接)后的写法
SELECT a.user_name,a.over,b.over FROM user1 a LEFT JOIN user2 b ON a.user_name = b.user_name;
查看全部 -
@MySQL---用JOIN更新表
1.问题---ERROR 1093错误 不能更新from语句中出现的表字段update user1 set over=‘齐天大圣’ where user1.user_name in ( select b.user_name from user1 a join user2 b on a.user_name = b.user_name);
2.解决办法---使用JOIN进行联合更新
UPDATE user1 a INNER JOIN user2 b ON a.user_name = b.user_name SET a.over='齐天大圣'; #推荐
UPDATE user1 a JOIN (SELECT b.user_name FROM user1 a JOIN user2 b ON a.user_name = b.user_name) b ON a.user_name = b.user_name SET a.over=‘齐天大圣’;
查看全部 -
@MySQL---CROSS JOIN 交叉连接
1.笛卡尔连接或叉乘,没有ON从句。
2.eg:SELECT a.name,a.id, b.id FROM items a CROSS JOIN items1 b;
查看全部 -
@MySQL---FULL JOIN 全连接
1.FULL JOIN:是LEFT OUTER JOIN和RIGHT OUTER JOIN的合集。
显示出两张表中的所有数据,当一张表的连接谓词无法满足时,则另一张表的字段在该表中为NULL。2.MySQL不支持FULL JOIN的解决方法:
#通过UNION将左连接和右连接的结果合并 SELECT select_expressions FROM TABLE A LEFT JOIN TABLE B ON A.key=B.key UNION ALL SELECT select_expressions FROM TABLE A RIGHT JOIN TABLE B ON A.key=B.key;
3.UNION与UNION ALL的区别
UNION 将自动删除重复项。
UNION ALL 将所有的数据都列出来。查看全部 -
@MySQL---SQL语句标准中JOIN的类型
INNER JOIN:内连接【A,B表公共部分】
LEFT [OUTER] JOIN:左外连接【左表完整】
RIGHT [OUTER] JOIN:右外连接【右表完整】
FULL JOIN:全连接【显示符合条件的所有信息】
CROSS JOIN;交叉连接/笛卡尔连接【a表n行,b表m行,查到nm行】查看全部 -
@MySQL---SQL语句分类
DDL:数据定义语言 --- CREATE、ALTER、DROP、TRUNCATE
TPL:事务处理语言 --- COMMIT、ROLLBACK、SAVEPOINT、SET TRANSACTION
DCL:数据控制语言 --- GRANT、REVOKE
DML:数据操作语言 --- SELECT、UPDATE、INSERT、DELETE查看全部 -
SQL分为关系型数据库和非关型数据库。
查看全部 -
左外连接是以左表为基础查询,不加过滤条件时,将会查出左表中的所有数据,如果左表和右表关键时,左表关键条件对应的id在右表中不存在,则结果集右表中的数据为null,当有过滤条件时,条件为右表的两表的关键条件,b.username not null意思为,以左表为基准,在右表中存在的username的数据集合查看全部
-
左连接,右连接,条件加 where b.clo is null 可以代替in,优化查询
查看全部 -
更新使用过滤条件中包括自身的表
UPDATE user1 SET over='齐天大圣' WHERE user1.`user_name` IN (SELECT b.`user_name` FROM user1 a INNER JOIN user2 b ON a.`user_name` = b.`user_name`) --该语句不能在MySQL 中执行,但是是正确的,
在MYSQL中更新的表不能出现在FROM后
MYSQL:替换UPDATE user1 a join(select b.`user_name` from user1 a join user2 b on a.user_name=b.user_name) b on a.user_name = b.user_name set a.over = '齐天大圣',建立一个虚拟表与user1内联接
查看全部 -
笛卡尔联接,交叉联接,没有ON从句的,CROSS JOIN
查看全部 -
Join操作的类型-Full Join
1,SELECT<select_list> FROM TableA A FULL OUTER JOIN TableB B ON A.Key = B.Key
2,SELECT<select_list> FROM TableA A FULL OUTER JOIN TableB B ON A.Key = B.Key WHERE A.Key IS NULL OR B.Key IS NULL
3,MySQL 不支持 Full Join 联接
4,在MySQL中实现Full join 联接
LEFT JOIN UNION ALL RIGHT JOIN 模拟全联接查看全部 -
Join从句的操作类型,Right Out Join
查看全部 -
Join从句操作的类型-Left Outer Join
查看全部
举报