Mysql - 常用sql
1. 查看sql执行情况,用于分析sql语句可优化方案(关键字:explain)。
explain select * from user where name = 'my name';
2. 查看字段名称和类型(COLUMN_NAME,DATA_TYPE)。
select * from information_schema.columns where table_name='表名'
3. 查询记录是否存在。
sql1: select count(*) from table where id = 1 最慢 sql2: select count(id) from table where id = 1 略快 sql2: select count(1) from table where id =1 比略快快 sql3 select 1 from table where id = 1 limit 1 暂时理论最快 解释:sql3 中1为常量,无需查字典表,Ilimit 如果遇到1条就返回,无需再向后查询。
4. 字符串比较通常不区分大小写,这意味着当你想要查询 where name = '小a' 的时候,小A也会和你say hello。如果你不想看见小A请在查询条件前使用关键字 BINARY; 例如:where BINARY name = '小a'。对于排序也是一样的。
5. 按月统计开始时间到结束时间的某些数据,当月数据不存在则显示0。
-- 以下并不是生产使用的sql, 只是简版,如果需要交叉生成日期,请搜索关键字 "mysql 笛卡尔积"
SELECT date_month.m, IF(data.BeginDate IS NULL,a.m, data.BeginDate) as BeginDate -- 如果data.BeginDate值为null,则等于date_month.m的值,否则等于data.BeginDate的值
FROM (
SELECT DATE_FORMAT(DATE_ADD("2020-10-01", INTERVAL - 0 MONTH),'%Y-%m') as m -- 查询日期并格式化格式
UNION ALL SELECT DATE_FORMAT(DATE_ADD("2020-10-01", INTERVAL - 1 MONTH),'%Y-%m') as m --查询日期-1个月格式化格式,结果合并到上表。(合并关键字:UNION)
UNION ALL SELECT DATE_FORMAT(DATE_ADD("2020-10-01", INTERVAL - 2 MONTH),'%Y-%m') as m
) as date_month
LEFT JOIN (
SELECT
DATE_FORMAT((date_begin),'%Y-%m')AS BeginDate, -- 格式化日期格式
sum(if(invalid=0,amount+tax_amount,0)) AS TaxableSales, --按条件累加
sum(if(invalid=0 AND invoice_type_code IN ('01','02','08','004','009','s'),amount+tax_amount,0)) AS OutputVATSpecialInvoiceAmount, -- 销项增值税专用发票金额
sum(if(amount<0 and tax_amount<0,amount+tax_amount,0)) AS RedNoteAmount,
sum(if(invalid=1,amount+tax_amount,0)) AS InvalidBillAmount,
count(1) as InvoicedQuantity,
count(if(invoice_type_code IN ('01','02','08','004','009','s'),true,null)) as OutputVATSpecialInvoiceQuantity,
count(if(amount<0,true,null)) as NumberOfRedTickets,
count(if(invalid=1,true,null)) as NumberOfInvalidTickets,
sum(if(invalid=0,tax_amount,0)) as TaxAmount
FROM
bs_invoice_bill_excluding_details
where query_id = "test"
AND date_begin >= "2012-12-12 12:12:12"
AND date_begin <= "2013-13-13 13:13:13"
group by BeginDate -- 根据BeginDate分组进行计算
) as data on data.BeginDate = date_month.m

浙公网安备 33010602011771号