一.sql语言之DQL
- DDL:数据定义语言。创建表结构,清空表、删除表、修改表
- DML:数据操纵语言。
- DQL:数据查询语句。表查询
- Where子句、集合(in | not in)
- 排序:在查询数据记录比较多时,对数据进行排序时:order by
位置:在from之后
格式:select … from user [where 子句] [order by 子句]
排序规则:asc 升序(默认)
Desc 降序
【排序】
练习1:查询员工表中的所有信息,按照部门号升序排序
练习2:查询员工的编号,姓名,工资,奖金,部门号,
按照部门号降序排序,员工编号升序排序
select * from emp order by deptno asc;
select empno,ename,sal,comm,deptno from emp order by deptno desc,empno asc;
练习3:查询30号部门的员工的姓名,工资,部门号。按照工资降序排序。
select ename,sal,deptno from emp where deptno=30 order by sal desc;
6.去重:关键字:distinct
位置 :紧跟select
select distinct deptno from emp
【去重】
练习1:查看员工表中有哪些部门号。
select distinct job from emp;
练习2:查看员工表中有几种奖金。
select distinct comm from emp;
7.分组查询与分组函数
关键字:group by
位置:select … from tableName [where 条件] [group by 子句]
用法:group by field1[,Field2].
注意:在分组查询时,select 子句中的字段,除了聚合函数之外,只能是 分组字段
Count(*)、sum(*)、max(*)、min(*)
Ps:聚合函数会忽略null值
因此会使用函数: ifnull()
函数ifnull(filed,0)
逻辑:如果field字段对应的值不是null,就使用field值,如果是null,就使用value
Field1 , field2
1 500
2 600
3 700
九组
通配符:*,可代替任何字段
【分组】
练习1:统计员工表中的姓名个数。
select count(ename) from emp;
练习2:统计员工表中有多少条记录。
通配符:*,可以替待任何字段
select count(*) from emp;
练习3:查询员工表中的 员工的总工资,最大工资,最小工资,平均工资。
select sum(sal),max(sal),min(sal),avg(sal) from emp;
练习4:查询30号部门的 总人数,工资之和,平均工资;
select count(*),sum(sal),avg(sal) from emp where deptno=30;
练习5:查询30号部门的总人数,奖金之和,平均奖金;
注意:需要对null值处理。
select count(*) "人数",sum(comm),avg(ifnull(comm,0)) from emp where deptno=30;
练习6:查询每个部门的总人数,总工资,平均奖金,最高工资和最低工资。
select deptno, count(*),sum(sal),avg(ifnull(comm,0)),max(sal),min(sal)
from emp group by deptno;
练习7:查询每种职位的总人数,最高工资,最低工资,以及平均工资
select job,count(*),max(sal),min(sal),avg(ifnull(sal,0)) from emp
group by job;
练习8:查询每个部门的每种职位的总人数,平均工资,工资之和。按照部门升序排序。
select deptno,job,count(*),avg(ifnull(sal,0)),sum(sal)
from emp
8.子句总结:select子句 from子句 where子句 having order by
一个完整sql语句:select from [where..] [group by..] [having..] [order by..]
执行顺序: 5 1 2 3 4 6
二.sql语言之TCL: 事务控制语言
对于事务,我们要保证事物的完整性(成功 or 撤回)
事务的四个特性(ACID):
a. 原子性(Atmoicity):事务要么成功,要么撤回。不可切割
b.一致性(Consistency):事物开始前和结束后,要保持数据的一致性(转账前A、 B账号的钱总额为1000,转账结束后也为1000)
c.隔离性(Isolation):当涉及到多用户操作同一张表的时候,数据库会为每一个用户开启一个事务。当其中一个事务正在进行,其他事务应该处于等待状态。保证事务不受影响
d.持久性(Durability):当一个事务被提交后,保证数据库的数据是永久改变的。即使数据库崩溃,我们也要保证事务的完整性。
Commit:提交
Rollback: 撤回、回滚
事务:只有DML操作会触发一个事务
事务的验证:
第一步:start transaction
第二步:savePoint 保存点名称
第三步:DML
第四步:commit/rollback
三.SQL之DCL:数据控制语言
【1】创建用户:create user username@ip identified by newPwd
【2】显示用户的权限:
Show grants for username@ip;
【3】授权
Grant 权限1、权限2、权限3 .. on 数据库名.* to username@ip
【4】撤销权限:
Revoke 权限1、权限2.. on 数据库名.* from username@ip
【5】删除用户
Drop user username;
Flush privileges 刷新权限(使权限立即生效)
关联查询
1.多表查询格式:Select * from tname1,tname2
T1有20条,t2有10
查出来的总数据:20*10=200
2.等值查询:两张表有关系的时候等值查询