发表于: 2018-01-12 22:25:59

1 745


一.今日完成

1.梳理SQL语句学习子查询和多表内连接以及索引管理,如下:

#时间格式化

SELECT date_format(from_unixtime(create_at/1000),'%Y-%m-%d') as date, count(id) as count FROM student GROUP BY date_format(from_unixtime(create_at/1000),'%Y-%m-%d');

#视图

CREATE VIEW student_vw  AS SELECT id, name, category, oath, tutor, crate_at FROM student;

SELECT name, category, oath,tutor FROM student_vw;

#表连接

SELECT employee.emp_id, employee.fname, employee.lname, department.name  dept_name FROM employee INNER JOIN department ON employee.dept_id = department.dept_id;

#定义表别名

SELECT e.emp_id,e.fname, e.lname, d.name dept_name FROM employee e INNER JOIN department d ON e.dept_id=d.dept_id;

#WHERE子句

SELECT emp_id, fname, lname, start_date, title FROM employee WHERE (title = 'Head Teller' AND start_date > '2006-01-01') OR (title = 'Teller' AND start_date > '2007-01-01');

#group by 和having 子句

SELECT d.name, count(e.emp_id) num_employees FROM department d INNER JOIN employee e ON d.dept_id = e.dept_id GROUP BY d.name HAVING count(e.emp_id) > 2;

#根据表达式排序

SELECT cust_id, cust_type_cd, city, state, fed_id FROM customer ORDER BY RIGHT(fed_id, 3);

#根据数字占位符排序

SELECT emp_id, title, start_date, fname, lname FROM employee ORDER BY 2, 5;

#不等条件

<>   !=

#between操作符

SELECT emp_id, fname, lname, start_date FROM employee WHERE start_date BETWEEN '2005-01-01'  AND '2007-01-01';

#成员条件

SELECT account_id, product_cd, cust_id, avail_balance FROM account WHERE product_cd IN ('CHK', 'SAV', 'CD', 'MM');

SELECT account_id, product_cd, cust_id, avail_balance FROM account WHERE product_cd  NOT IN ('CHK', 'SAV', 'CD', 'MM');

#匹配条件

# _  正好1个字符

# % 任意数目的字符(包括0)

SELECT lname FROM employee WHERE lname = LIKE '_a%e%';

#正则表达式

SELECT emp_id, fname, lname FROM  employee WHERE lname REGEXP '^[FG]' ;

#判空

SELECT emp_id, fname, lname, superior_emp_id FROM employee WHERE superior_emp_id IS NOT NULL;

 #笛卡儿积

 SELECT e.fname, e.lname, d.name FROM employee e JOIN department d;

 

 #内连接

 #on子句

 SELECT e.fname, e.lname, d.name FROM employee e INNER JOIN department d ON e.dept_id = d.dept_id;

#using子句

 SELECT e.fname, e.lname, d.name FROM employee e INNER JOIN department d USING  (dept_id);

 

 #符合SQL92版本的ANSI SQL标准

 

 #连接3个或者更多表

 SELECT a.account_id, c.fed_id, e.fname, e.lname 

FROM account a INNER JOIN customer c

ON a.cust_id = c.cust_id

INNER JOIN employee e

ON a.open_emp_id = e.emp_id

WHERE c.cust_type_cd = 'B';

 

#范围连接

SELECT e.emp_id, e.fname, e.lname, e.start_date

FROM employee e INNER JOIN product p

ON e.start_date >= p.date_offered

AND e.start_date <=p.date_retired

WHERE p.name = 'no-fee checking';

#不等连接

SELECT e1.fname, e1.lname, 'VS' vs , e2.fname, e2.lname

FROM employee e1 INNER JOIN employee e2

ON e1.emp_id < e2.emp_id

WHERE e1.title = 'Teller' AND e2.title = 'Teller';

#返回日期的时间函数

SELECT CURRENT_DATE(), CURRENT_TIME(), CURRENT_TIMESTAMP();

SELECT DATE_ADD(CURRENT_DATE(), interval 5 DAY);

SELECT LAST_DAY('2018-01-12');

SELECT CURRENT_TIMESTAMP()  current_est, CONVERT_TZ(CURRENT_TIMESTAMP(), 'US/Eastern', 'UTC')  current_utc;

SELECT DAYNAME('2018-01-12');

SELECT EXTRACT(YEAR FROM ' 2018-01-12 20:10:58');

#返回数字的时间函数

SELECT DATEDIFF('2018-01-12', '1993-03-21');

SELECT CAST('1456328', AS SIGNED INTEGER);

#分组

SELECT open_emp_id, COUNT(*) how_many FROM account GROUP BY open_emp_id HAVING COUNT(*) > 4;

#处理null

count(*)  count(id)的区别

#子查询

#标量子查询

SELECT account_id, product_cd, cust_id, avail_balance FROM account WHERE account_id = (SELECT MAX(account_id) FROM account);

#多行单列子查询

SELECT emp_id,fname, lname, title FROM employee WHERE emp_id <> ALL (SELECT superior_emp_id FROM employee WHERE superior_emp_id IS NOT NULL);

SELECT account_id, cust_id, product_cd, avail_balance FROM account WHERE avail_balance > ANY  (SELECT a.avail_balance FROM account a INNER JOIN individual i ON a.cust_id = i.cust_id WHERE i.fname = 'Frank' AND i.lname = 'Tucker');

#多列子查询

SELECT account_id, product_cd, cust_id, FROM account WHERE open_branch_id = (SELECT branch_id FROM branch WHERE name = 'Woburn Branch') AND open_emp_id IN (SELECT emp_id FROM employee WHERE title = 'Teller' OR title = 'Head Teller');

#关联子查询

SELECT c.cust_id, c.cust_type_cd, c.city FROM customer c WHERE 2 = (SELECT COUNT(*) FROM account a WHERE a.cust_id = c.cust_id);

#exists运算符

SELECT a.account_id, a.product_cd, a.cust_id, a.avail_balance FROM account a WHERE EXISTS (SELECT 1 FROM transaction t WHERE t.account_id = a.account_id AND t.txn_date = '2008-09-22');

#外连接

#左外连接

SELECT c.cust_id, b.name FROM customer c LEFT OUTER JOIN bussiness b ON c.cust_id = b.cust_id;

#右外连接

SELECT c.cust_id, b.name FROM customer c RIGHT OUTER JOIN bussiness b ON c.cust_id = b.cust_id;

#三路外连接

SELECT a.account_id, a.product_cd, CONCAT(i.fname, ' ', i.lname) person_name, b.name bussiness_name FROM account a LEFT OUTER JOIN individual i ON a.cust_id = i.cust_id  LEFT OUTER JOIN bussiness b ON a.cust_id = b.cust_id;

#自外连接

SELECT e.fname, e.lname e.mgr.fname mgr_fname, e_mgr.lname mgr_lname FROM employee e INNER JOIN employee e_mgr ON e.superior_emp_id = e_mgr.emp_id;

#创建索引

ALTER TABLE department ADD INDEX dept_name_idx (name);

#查看索引

SHOW INDEX FROM department \G;

#删除索引

ALTER TABLE student DROP INDEX dept_name_idx;

#limit子句

SELECT open_branch_id, COUNT(*) how_many FROM account GROUP BY open_emp_id LIMIT 3;

SELECT open_branch_id, COUNT(*) how_many FROM account GROUP BY open_emp_id LIMIT 2, 1;

#into outfile子句

SELECT emp_id, fname, lname start_date  INTO OUTFILE 'C:\\TEMP\\emp_list.txt' FROM employee;

2.把微信支付的业务流程理清楚了,主要参考了开荒组马正的《后端支付流程》(http://my.wiki.ptteng.com/pages/viewpage.action?pageId=32544341).搜集一些微信支付的博客教程,了解网友们踩过的坑,如下:

http://www.bijishequ.com/detail/424382?http://yurixu.com/blog/2016/08/16/%E6%BC%AB%E8%B0%88%E5%BE%AE%E4%BF%A1%E6%94%AF%E4%BB%98-%E5%85%AC%E5%85%B1%E5%8F%B7%E6%94%AF%E4%BB%98/

http://www.cnblogs.com/stoneniqiu/p/6308813.html

http://blog.51cto.com/wangfoye/1899480


二.明日计划

讲小课堂,关于部署py脚本执行查询任务


三.遇到问题

暂无.


四.收获

以上.


返回列表 返回列表
评论

    分享到