limit 按分数排序, limit n
select * from emp limit 1,3 //从n+1条数据开始展示
select * from emp limit 2 --列出前两条
select * from emp limit 1,2 --从第二条开始,展示2条记录
select * from emp limit 0,3 --从第一条开始,展示3条记录--前三条
order by 排序
SELECT * FROM emp order by sal #默认升序 //ASC默认省略
SELECT * FROM emp order by sal desc #降序
SELECT * FROM emp ORDER BY ename //按照字母顺序
select * from emp order by hierdate //按数字大小升序
select *from emp order by job //汉字会查utf8里对应的数字,升序排列
统计需求
//2019年前入职员工的信息
select * from emp where hiredate<'2019-1-1'
select * from emp where year(hiredate)<2019
统计员工的年薪
select sal ,comm,sal*13+ifnull(comm,0)*13 from emp
聚合函数******aggregation 根据一列统计结果
常见的聚合函数:count() max() min() avg() sum()
count 计数
select count(1) from emp //高效
select count(*) from emp//低效
select count(comm) from emp //不统计null
max/min 最大与最小
select max(sal) from emp //求员工的最高薪
select min(sal) from emp//求员工的最低薪
sum/avg 求和/平均数
select count(*) from emp --总记录数
select sum(sal) from emp --求和
select avg(sal) from emp --平均数
分组 group by
把数据按照维度分组,后,数据分析
select avg(sal) from emp
select avg(sal) from emp group by job //统计每个岗位的平均数
select deptno count(1) from emp group by deptno
统计每年入职的人数
select year(hiredate),count(1)from emp group by year(hiredate)
统计每个部门的最高薪
select feptno,max(sal) from emp group by depyno
分组后过滤having
统计没个部门的最高薪,只要>10000的记录
select max(sal),deptno from emp group by deptno
having max(sal)>10000 //group by后的过滤必须用having
SELECT COUNT(1)b, YEAR(hiredate)a FROM emp
GROUP BY a
HAVING b>1
#where里不能用别名,不能出现聚合函数 count() max()/min() sum()/vag()
事务 transaction 保证多条要么成功,要么失败
数据库事务(Database Transaction),是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行
给A的账户减去100元;
update 账户表 set money=money**-100** where name='A';
给B的账户加上100元。
事务4个特性ACID
原子性(Atomicity,或称不可分割性)、一致性(Consistency)、隔离性(Isolation,又称独立性)、持久性(Durability)
原子性:一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中如果发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。
一致性:在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作。
隔离性:数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。
持久性:事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。
#字段约束:
CREATE TABLE e(
id INT PRIMARY KEY AUTO_INCREMENT,
sex VARCHAR(10) DEFAULT'女'#默认约束,设置默认值
)
#检查约束 check 未必生效
create table f(
id int primary key auto_increment,
age int,
check(age<80)
)
外键约束 foreign key
#重点# foreign key(本表的主键名) references对方表名(对方表名的主键)
forign key(user_id) refrences tb_user(id)
#特点:子表中的主键的值,必须取自主表
create table tb_user(
id int primary key auto_increment,
name varchar(20),
password varchar(20)
)
create table tb_user_addr(
user_id int primary key auto_increment,
address varchar(100),
#描述和rb_user表的关系,外键
#语法:
#foreign key(本表的主键名) references对方表名(对方表名的主键)
forign key(user_id) refrences tb_user(id)
foreign key(user_id) references tb_user(id)
)
SQL的执行顺序
(1) FROM [left_table] 选择表
(2) ON <join_condition> 链接条件
(3) <join_type> JOIN <right_table> 链接
(4) WHERE <where_condition> 条件过滤
(5) GROUP BY <group_by_list> 分组
(6) AGG_FUNC(column or expression),... 聚合
(7) HAVING <having_condition> 分组过滤
(8) SELECT (9) DISTINCT column,... 选择字段、去重
(9) ORDER BY <order_by_list> 排序
定表=》where过滤条件=》分组=》查
有主键约束
定表=》分组=》where过滤条件=》=》查