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