sql语言分类
SQL分类:
DCL:数据控制语言。grant --授予用户访问权 deny--拒绝用户访问 revoke --解除用户访问权限
DDL:数据定义语言。 对数据库、表结构的操作(创建、修改、删除 ) create、alter、drop 。 数据库设计软件替代
DML:数据更新语言。 对表数据的更新(增加、修改、删除) insert into、update、delete from。
DQL:数据查询语言。 select
面试题1:SQL语言的四类程序设计语言是什么?DDL,DML,DCL,TCL。
TCL:事务控制语言:commit 、rollback
1.2、sql查询语句书写和执行顺序
书写顺序:
select字段 from 表名 where 条件 group by 字段 having 运算 order by 字段 limit
执行顺序:
执行顺序:From 表名 Where 伪表条件 Gourp by 字段 Having 运算区条件 Select字段 Order by 字段 Limit
u From 表名 把数据从硬盘读取出来,形成内存中的一张伪表
u Where 条件 对伪表进行条件运算
u Gourp by 字段 分组,字段值相同的分在一组。
划分了不同的运算区,运算区相互之间没有影响
(原来的伪表就不存在)
u Having 运算 是在每个运算区中都分别进行一次运算
u Select 字段 把各个运算区进行了合并,新伪表
把每个运算区的第一条数据拿出来拼接
注:如果该运算区第一条没有数据,该运算区没有返回数据
假如:第一条没有,第二条有数据,也叫做没有返回数据
u Order by 字段 对某个字段进行值的升序、降序排序
u Limit 对新伪表进行限制显示(分页)
思考题
SELECT * FROM product2 GROUP BY cid HAVINGpid!='a'
SELECT * FROM product2 GROUP BY cid HAVINGpid!='b'
SELECT * FROM product2 WHERE pid!='a'GROUPBY cid
注意:
Count,sum,min,max,avg 聚合函数---分组函数----只能在运算区中执行。
问题来了:SELECT COUNT(*) FROM product;为什么此句没有运算区能执行?
特殊:SELECT COUNT(*) FROM product;
因为它是将整个伪表划分到一个运算区中,底层把条件进行having执行。
把结果放置到select 字段中
where和having的区别?
Where:
①伪表中进行运算
②先执行
③不可以使用分组函数
Having:
①各个运算区中分别进行运算
②后执行
③可以使用分组函数