SQL 分类、执行顺序

DQL(数据查询语言): 查询语句,凡是select语句都是DQL。
DML(数据操作语言):insert delete update,对表当中的数据进行增删改。
DDL(数据定义语言):create drop alter,对表结构的增删改。
TCL(事务控制语言):commit提交事务,rollback回滚事务。(TCL中的T是Transaction)
DCL(数据控制语言): grant授权、revoke撤销权限等

如果通过分区方式,不用考虑这个问题

如果通过物理分库分表

1、union all

2、视图 (几乎等同于 union all,不过使用起来相对方便)

3、自己做预处理,比如把范围内的数据提前做成一个内存表,供应后面查询;或者通过一个方法,判断where条件里的某个值,对应到哪个表上,然后对sql作表替换

语法顺序和执行顺序

SQL语句的语法顺序

1、FORM: 对FROM左边的表和右边的表计算笛卡尔积,产生虚表VT1。
2、ON: 对虚表VT1进行ON过滤,只有那些符合的行才会被记录在虚表VT2中。
3、JOIN: 如果指定了OUTER JOIN(比如left join、 right join),那么保留表中未匹配的行就会作为外部行添加到虚拟表VT2中,产生虚拟表VT3。
4、WHERE: 对虚拟表VT3进行WHERE条件过滤。只有符合的记录才会被插入到虚拟表VT4中。
5、GROUP BY: 根据group by子句中的列,对VT4中的记录进行分组操作,产生VT5。
6、HAVING: 对虚拟表VT5应用having过滤,只有符合的记录才会被 插入到虚拟表VT6中。
7、SELECT: 执行select操作,选择指定的列,插入到虚拟表VT7中。
8、DISTINCT: 对VT7中的记录进行去重。产生虚拟表VT8.
9、ORDER BY: 将虚拟表VT8中的记录按照<order_by_list>进行排序操作,产生虚拟表VT9.
10、LIMIT:取出指定行的记录,产生虚拟表VT10, 并将结果返回。

手撸算法1:查找数组中重复元素和重复元素的个数

select NAME,count(NAME) from NEU_ZYL.TMP group by NAME order by count(NAME) desc; 

练习:

有两张表 table1 和 table2 ; table1 记录公司员工信息, 包括编号(ID) , 姓名 (Name) 和生日(Birthday) , table2 记录员共销售金额 (每个员工对应多条销售记录) , 包括编号(ID) 和 销售金额(money).

问题: 请查找生日为1970/1/1至 1980/1/1 之间的每个员工销售总额,并按照生日大小的降序排列.

table1 (ID , Name , Birthday)
table2 (ID , money)

SELECT
	a.id,
	a.`name`,
	a.birthday,
	b.money_sum 
FROM
	table1 a
	INNER JOIN ( SELECT id, SUM( money ) money_sum FROM table2 GROUP BY id ) b ON a.id = b.id 
WHERE
	a.birthday BETWEEN '1970-01-01' 
	AND '1980-01-01' 
ORDER BY
	a.birthday DESC
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值