一、条件查询
1、distinct去重
select distinct 列名 from 表名;
where用来引导判断条件
select * from 表名where id=?
select * from 表名 where 1=1;等式成立,条件永远成立,会把所有的东西都查询出来。
2、as可以修改列名----select name as empname from emp; 也可以省略as
3、length长度,一个中文是3个字符长度
4、limit:SELECt * FROM emp LIMIT 2;展示前面两天数据。
SELECt * FROM emp LIMIT 1,2;---从第二条展示两条数据。
5、order by---排序,默认是升序
格式是: select * from 表名 order by 查询的字段。
SELECt * FROM emp ORDER BY sal;按照薪资排序有小到大
降序排序 在后面加desc----SELECt * FROM emp ORDER BY sal DESC;薪资由大到小进行排序。
6、year(date--参数):查询那年以后的人员信息
SELECt * FROM emp WHERe YEAR(birthday) >1995;表示查询1995年以后出生的人员信息。
7、统计案例---统计emp中的年薪
select name,sal,bonus,sal*13+ifnull(bonus,0)*13 '年薪' from emp;
二、聚合函数
常见的有:count(),sum(),avg(),max(),min()
1、COUNT( 列名|* ):统计结果集中某一列或记录行的行数。--括号里可以写*也可以写列名。
假如说统计的行数里有null值是不会被统计进去的。
count(*):低效查询---都是查询所有
count(1):高效查询都是查询所有
2、SUM( 列 ):统计结果集中某一列所有值的和--多行函数会剔除null值,所以相加不会出现null。
3、avg()求平均数,max(),min()最大最小值
4、group by:表示分组查询
语法:SELECt 列 | * FROM 表名 [WHERe子句] GROUP BY 列;
SELECt job,AVG(sal+IFNULL(bonus,0)) '平均薪资' FROM emp GROUP BY job;---根据job分组求平均薪资。
统计每个部门的人数:SELECt job,COUNT(job) FROM emp GROUP BY job;
练习每年每年入职的人数,统计每个部门的最高薪
SELECt NAME,YEAR(birthday),COUNT(1) FROM emp GROUP BY YEAR(birthday);查询同年的出生日期相同的人数。
SELECt job,MAX(sal) FROM emp GROUP BY job;查询每个部门最高薪资。
5、having:分组后进行数据过滤。
语法:select job,max(sal) from emp group by job having max(sal)>4000;分组查询每个部门最高薪资后过滤最高薪资大于4000的部门有那些。
where里不能用别名,另外也不能出现聚合函数!!比having高效!!!~~
#having和where能互换吗?效率谁高?
不能互换,where是在查询前做条件限制,having是在查询后做数据筛选,查询前做限制的话,返回的值会少些,而在查询后的结果集上做限制的话,之前的查询结果可能会很多,这样就会影响性能,所以,一般是用where,having是在where不方便或者不能使用的情况下才使用
三、事务
概述:进行业务时,保证多条业务要么全成功,要么全失败。
四大特性:
原子性:表示多条SQL,看作一个原子,密不可分,要么全成功,要么全失败
隔离性:数据库为保证性能也支持高并发,但是有安全隐患,保证多个操作之间是隔离的
持久性:对数据库进行的操作是持久影响的。
一致性:保证数据在多个系统中是一致的。
隔离级别: 从上至下,安全性越来越好,但是性能越来越差
1, 读未提交: 性能最好,但是安全性最差
2, 读已提交: 性能较差,安全性较高,Oracle数据库的默认隔离级别
3, 可重复读: 性能较差,安全性较高,MySQL数据库的默认隔离级别
4, 串行化: 性能太差
自动管理事务步骤
开启事务:start transaction;
结束事务; commit(提交事务),rollback(回滚事务)
约束----
1、默认约束:default---设置好默认值。
2、检查约束:check--录入不合法数据时无法保存,check(age<10)
3、外键约束:foreign key----将两个表之间关联起来,格式时foreign key(表1的特性属性值) references 表2(要关联表1的特性属性值)
foreign key(dept_id) references dept(id)
特点:子表中的主键值 必须取自于主表,否则保存不下来的呀。



