基本查询
查询列
select name,age,email from tempdb1; #查询列名为:name和age,email 三个列名的数据从表名为tempdb1中查询
查询所有
select * from tempdb1; #查询所有列名
修改临时表
select name,money12 as '年薪' from tempdb1; #12和as(别名) 都是在临时表中生成,不影响原表内容
条件查询
去重
select distinct manager_id from tempdb1; #distinct去重,查询列表为manager_id的列的内容,并且去掉重复
select name,age from tempdb1 order by salary asc; #查询列名为name和age从表名tempdb1中查询,order by age asc 表示age按升序查询, desc是降序
筛选 where 和逻辑判断(and,or,not) (<,>,<=,>=,!=)
select name,id from db1 where id=10; #筛选只显示id=10的数据
select salary,commission_pct db1 where salary=10000 and commission_pct=0.3; #筛选显示出salary(工资)=10000并且commission_pct(提成)=0.3的数据 or--条件1,或者条件2 有满足的都可以显示 not--除了 当前条件的 都显示出来
select salary,commission_pct db1 where salary>10000 and salary<20000;
where salary between 6000 and 10000; #(区间查询) between (小) and (大)--大小不能乱,而 and 可以
null(值判断) is null , is not null
where id is not null; #id不为空的显示出来
枚举查询 in
wher id in(70,80,100) #显示出 id=70的,80的,90的数据
模糊查询 like
where name like '张_'; #筛选'张'开头的数据 ,'张_' 几个下画线表示有几个字符,'张%' 表示任意长度
分支结构查询 case when 条件1 then 结果1 when 条件2 and 条件3 then 结果2 else 结果3 end
时间查询 select sysdate(); sysdate()--当前系统时间 curdate()--当前日期-- curtime()--当前时间 week(sysdate())--一年中的第几周 year('2020-1-1')--指年日期的年份 hour(curtime)--指定时间的小时值 select minute(curtime())--获取分钟值 select datediff('2020-41-1','2019-4-1');--指定日期这间相隔的天数--输出366 select adddate('2020-4-1',4);--计算date日期加上n天后的日期
字符串查询 拼接 select concat('my','s','ql');--字符串拼接--mysql select concat(firstname,lastname) as '姓名' from db1; 替换 select insert('这是一个数据库',3,2,'mysql')--从位置3开始,替换2个,改为mysql--这是mysql数据库
转大小写
select lower('MYSQL') -- mysql
select upper('mysql') -- MYSQL
截取
select substring('javamysqloracle',5,5)--从第5位置开始截5个--输出mysql
骤合函数 select sum(salary) from db1;--求单列所有数据的和 select avg(salary) from db1;--求单列所有数据的平均值 select max(salary) from db1;--最大值 select min(salary) from db1;--最小值 select count(id) from db1;--求id的总数(值为null的会忽略)
分组查询
查询各部门的总人数
select count(commission_pct) from db1;
select department_id,count(employee_id) from db1;
group by department_id;
查询各部门的平均工资
select department_id,avg(salary)from db1;
group by department_id;
查询各个部门,各个岗位的总人数
select department_id,job_id,count(employee_id) from db1;
group by department_id, job_id;
分组过滤查询
select 列名 from 表名 where 条件 group by 分组列 having 过滤规则
例 统计部门的最高工资
select department_id, max(salary) from db1;
group by department_id --确定分组依据id
having department_id in (60,70,90) --过滤出部门编号是60,70,90的信息
限定查询
select 列名 表名 limit 起始行,查询行数
select * from db1 limit 0,5; -- 查询前五条 (0,5)从0行开始,查5条
limit典型应用
select * from limit 0,10; 第一页 从0开始查10条
select * from limit 10,10; 第二页 从10开始查10条
select * from limit 20,10; 第三页 从20条开始查10条