18.9.4
left join中,on是用于生成临时表的,与where无关,但是on中的查询条件也是可以起作用的。而where是在临时表生成后根据where条件取数据的。故在多表查询时,on比where更早起作用。
select a.id,a.No,b.name from table1 a left join table2 b on (a.No = b.No and b.name='aaa');
sql的执行流程:首先找到b表的name为aaa的记录行(on (a.No = b.No and b.name=’aaa’) )。然后找到a的数据(即使不符合b表的规则),生成临时表返回用户。
select a.id,a.No,b.name from table1 a left join table2 b on (a.No = b.No) where b.name='aaa';
sql的执行流程:首先生成临时表,然后执行where过滤b.name=’aaa’不为真的结果集,最后返回给用户。
参考链接:https://blog.csdn.net/cs958903980/article/details/60139792
18.6.12
char(1)和tinyint(1)比较,用于做标记的时候,这俩空间需求差不多,但是tinyint运算要比char更快一些,虽然也不会多很多。
18.6.10
1、mysql中int最大程度11是带了正负符号,正常长度为10,也就是2的32次幂结果是一个十位数。
bigint最大是20,带了正负符号,正常长度为19,也就是2的64次幂结果是一个十九位数。
bigint支持的数字的大小范围为:19位,存电话号码。有符号范围:-9223372036854775808 到 9223372036854775807
int支持的数字范围为:10位,有符号范围:-2147483648 到 2147483647 无符号范围:0-4294967295
2、获取随机数据:SELECT * FROM info ORDER BY RAND() LIMIT 1 ;
3、查询数据库表中某一字段重复次数排序的结果:
select category , count(*) AS count from publication_has_category
group by category order by count DESC
此查询语句返回的是publication_has_category 表中category字段属性值重复次数(count)最多的前5个记录
参考:https://blog.csdn.net/ahjxhy2010/article/details/50552758
18.3.21
(1)OR 优先级 比AND低。所以要先执行OR两边的AND,最后执行OR。
OR的意思是分别符合两边条件的数据都查出来。
(2)比较天数可以用TO_DAYS()方法。
TO_DAYS函数 返回一个从年份0开始的天数 。
SELECT TO_DAYS(‘1997-10-07′); 结果是729669
mysql> SELECT something FROM table
WHERE TO_DAYS(NOW()) - TO_DAYS(date) <= 30;
参数可以是字符串,也可以是date类型。
还有很多对时间的操作,非常实用。如下:
https://www.cnblogs.com/weiwang/p/3245915.html
————————————————
17.12.5
修改属性,必须把全部属性都带上。
ALTER TABLE buy_supplier_inspect MODIFY last_turnover
decimal(12,2) DEFAULT NULL COMMENT '上一年营业额';
ALTERTABLEt1 CHANGE column_a column_b INTEGER;
ALTERTABLEt1 CHANGE column_b column_b BIGINTNOTNULL;
ALTERTABLEt1 MODIFYcolumn_b BIGINTNOTNULL;
change和modify的区别不明显,change可以修改字段名,如果只修改属性也需要带上新旧字段名。
modify不可以修改字段名。与change相比就是这样的差距。
感觉修改字段名用change。
修改属性用modify比较合适。
——————————————————————
17.12.4
1、需求:根据两个条件one_type和two_type查询一条数据,同一个one_type=1190对应多个two_type。
但是其他,比如one_type=1001则没有two_type(null)。
所有查询条件都一定包含 one_type和two_type。
2、写了一个特别恶心的sql:
select contact_email from buy_supplier_manager_email where one_type=1190 and (select count(two_type) from buy_supplier_manager_email where one_type=1190)!=0 and two_type=1191 and yn=1 or one_type=1190 and (select count(two_type) from buy_supplier_manager_email where one_type=1190)=0 and yn=1
3、请教亮哥得到正确的sql:
select * from buy_supplier_manager_email where one_type=1190 and (two_type=1191 or two_type is null);
4、解析:第一个条件一定执行,第二个条件则根据数据库字段two_type是否存在。与输入不冲突。
5、结论:sql还要好好学一下!
——————————————————
sql杂记
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...