SQL高级操作的总结&||ddl

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_37012236/article/details/79025828

一、

当我们使用外连接等SQL高级操作时候你很可能被业务搞得思路很不清晰,况且很多情况下是在别人的代码基础之改,那这种情况下很容易写出不满足需求的SQL下面我们来说一下如何尽量确保SQL的精准性:

我们在用左链接等查询数据时候,链接条件on首选权重较高的的决定了我们查询出来数据的准确性,冗余数据是允许数显的,我们在连接查询的时候 ,外连接的笛卡尔积相对来说比内连接要多一点,但是绝对要符合一点,查询出的冗余数据中不允许包含未满足业务条件(已左表为基准思考是否满足)的数据。

总结来说一句话,看你的on条件使两边生成的笛卡尔积是否满足你的业务需求条件

注:

GROUP BY语句一般都是为了结合函数比如COUNT()来求出某个计算出来的值,我们使用时应该注意

不要把其当成查询语句来使用,你会发现只是查询出来了每组中的第一条记录

注:

ON   AND ..AND..   与   WHERE AND ..AND.. 的区别

当我们在用left join的时候,在用ON限制的时候请注意,在满足on。。and中多种限制之后,满足条件的数据确实会完全展示,若你在on and 中只限制了左表,那么右表的数据正常与左表中满足限制的数据进行left join,然后不满足的左表数据也会完全展示,只是如果你SELECT了右表的数据,而且右表的数据又不满足你的on条件,那么他将跟在左表后显示为null,

若你在on and 中只限制了右表,那么右表中满足限制的数据正常与左表进行left join,因为只限制了右表,左表的每一行都会被join,所以并没有左表会不显示。

若两边的数据都做了限制,那么右表中满足限制的数据与左表满足限制的数据进行left join,若没有满足的数据则左表全量显示,SELECT的右表数据为null

二、

or和and多条件连用会有什么效果呢:

select * from shop_item where yn=1 AND platform_id = 30 AND  id = 452  or id = 100000255

or两边各成条件,也就是说yn=1 AND platform_id = 30 AND  id = 452  与 id = 100000255,为两种不同条件,满足这两种的数据都会查询出来

三、

常用ddl的复习

ALTER TABLE `position` ADD COLUMN `user_id` bigint(20) DEFAULT NULL COMMENT '归属人Id' AFTER `position_level_id`;

CREATE TABLE `award_record` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键id',
`platform_id` bigint(20) DEFAULT NULL COMMENT '平台id',
`award_type` tinyint(4) DEFAULT NULL COMMENT '奖励类型: 1 新用户注册,2 新用户交易',
`new_user_id` bigint(20) DEFAULT NULL COMMENT '新用户id',
`new_user_name` varchar(255) DEFAULT NULL COMMENT '新用户名称',
`old_user_id` bigint(20) DEFAULT NULL COMMENT '受奖励用户id',
`old_user_name` varchar(255) DEFAULT NULL COMMENT '受奖励用户名',
`register_time` datetime DEFAULT NULL COMMENT '注册时间',
`order_no` bigint(20) DEFAULT NULL COMMENT '订单号',
`payment_Price` decimal(14,2) DEFAULT NULL COMMENT '交易金额',
`score` int(11) DEFAULT NULL COMMENT '奖励积分',
`award_status` tinyint(4) DEFAULT NULL COMMENT '积分是否已奖励 0:否 1:是',
`created` datetime DEFAULT NULL COMMENT '创建时间',
`yn` tinyint(4) DEFAULT NULL COMMENT '是否有效1:是 0:否',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


//关键词后可以不跟表明-

DELETE
r,pra
FROM
resource r,
position_resource_authority pra
WHERE
r.id = pra.resource_id
AND r.`code` IN (
6205,
6206,
6207,
6208,
6209,
6210,
6211,
6212,
6213,
6214,
6215,
6216,
6217,
6218,
6219,
6220,
6221,
6222,
6223,
6224,
6225,
6226,
6227
);



四、

GROUP_CONCAT()字符串连接用法

https://www.cnblogs.com/zhming26/p/6382995.html

猜你喜欢

转载自blog.csdn.net/qq_37012236/article/details/79025828