查询时,select语句不区分大小写,但是查询的内容区分大小写。
set timing on; //显示操作的时间
select count(*) from 表名; //显示查的这张表有多少行
insert into 表名(字段名,字段名,....) select * from 表名; //自我复制记录,这样的话就可以疯狂复制了。
select distinct 字段名,字段名,....from 表名; // 查询时,把重复的记录过滤掉
select sal*12 from emp; //查一年的工资
select sal*12 '年工资', ename from emp; //给字段名起别名
如何查找1982.1.1后入职的员工?
如何显示工资在2000到3000之间的员工情况
如何使用 like 操作符:
%:表示任意0到多个字符 _:表示任意单个字符
?如何显示首字符为 S 的员工姓名和工资
如何显示第三个字符为 O 的所有员工姓名和工资
在where条件中使用 in
如何显示empno 为7844,345,234的雇员情况
使用 is null 的操作符
如何显示没有上级的雇员情况,也就是要查MGR为空的那个人。
不要这样写,统统不行:
select * from emp where mgr = null;
select * from emp where mgr = ' ';
使用逻辑操作符号
查询工资高于 500或是岗位为MANAGER的雇员,同时还要满足他们的姓名的首写字母为大写 J
使用 order by 子句,order by 就是按照什么什么来排序,默认从低到高 。
如何按照工资从低到高的顺序显示雇员的信息
select * from emp order by sal; = select * from emp order sal asc;
如果想从高到低来排序,则这样写: select * from emp order by sal desc;
按照部门号升序而雇员的工资降序排列:
select * from emp order by deptno , sal desc;
使用列的别名来排序
别名需要用双引号来圈中。
在实际应用中经常需要执行复杂的数据统计,经常需要显示多张表的数据
数据分组:max , min , avg , sum , count ;
显示所有员工中最高工资和最低工资:
把最高工资的那个人,并把他的工资显示出来:
显示工资高于平均工资的员工信息,也就是要用到子查询咯:
group by 和 having 子句
group by 用于对查询的结果分组统计
having 子句用于限制分组显示结果
显示每个部门的平均工资和最高工资
显示每个部门的每种岗位的最高工资和平均工资
显示平均工资高于2000的部门号和它的平均工资:
对数组分组的总结:
1、分组函数只能出现在选择列表,having,order by中。
2、如果 在select语句中同时出现包含有 group by,having,order by ,那么他们的顺序是 group by,having,order by 。
3、在选择列中如果有列,表达式和分组函数 ,那么这些列和表达式必须有一个出现在group by 子句中,否则就会出错。
例如: select max(sal) , avg(sal) , deptno from emp group by deptno having avg(sal)<2000;这里deptno就一定要出现在 group by 中!
多表查询
说明
多表查询是指基于两个和两个以上的表或是视图的查询。在实际应用中,查询单个表可能不能满足你的需求,(如显示sales部门位置和其员工的姓名),这种情况下需要使用到(dept表和emp表)
问题:显示雇员名,雇员工资及所在部门的名字【笛卡尔集】?
规定:多表查询的条件是至少不能少于表的个数-1 才能排除笛卡尔集 ,例如这里 下图的deptno 就是这两张表的一个条件。
显示各个员工的姓名,工资,及其工资的级别:
自连接
自连接指的是在同一张表的连接查询
什么是子查询?
子查询是指嵌套在其他sql语句中的select语句,也叫嵌套查询。