SQL中的别名;
对象名 as 别名
对象名 别名
条件查询:
条件查询就是在查询时给出WHERE子句,在WHERE子句中可以使用如下条件表达式及关键字
and,or:
条件连接符;
in:
后面跟一个集合或者子查询 select * from emp where sal in(800,1600,3000);
Is null:
表示这个值是空时条件成立 select ename from emp where comm is null
between A and B :
like:
模糊查询它只用在字符串列,表示对字符串进行模糊匹配
其中“_”表示任意一个字符
其中“%”表示0~n个字符 select * from emp where ename like '__A%';
all&any:后面都跟一个集合或者子查询
select * from emp where sal <all(1600,2000,3000);
exists:它不和任何列一起使用,后面跟的是一个子查询(查询语句select语句),如果子查询能查出结果
not:取反
distinct:去重关键字,跟在列的最前面
那么这个条件就是成立 的,查不出结果条件不成立
having子句:
在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与合计函数一起使用。
SELECT Customer,SUM(OrderPrice) FROM Orders WHERE Customer='Bush' OR Customer='Adams' GROUP BY Customer HAVING SUM(OrderPrice)>1500当同时含有where子句、group by 子句 、having子句及聚集函数时,执行顺序如下:
执行where子句查找符合条件的数据;
使用group by 子句对数据进行分组;对group by 子句形成的组运行聚集函数计算每一组的值;
最后用having 子句去掉不符合条件的组。
排序:
order by排序关键字
asc|desc:asc表示升序,desc表示降序
select * from emp order by sal asc;
order by :后面可以跟多个排序列,跟多个排序列时,
聚合函数:
聚合函数是用来做纵向运算的函数:
count():COUNT():统计指定列不为NULL的记录行数;
select count(deptno) from emp;
*MAX():计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算;
*MIN():计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;*
*SUM():计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0;*
*AVG():计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;*
分组:group by
group by:分组的关键字,后面跟分组列名,可以是一个分组列,也可以是多个列
*注意:group by 后面跟多个列时,只有当多个列的值同时相等时,它才会分为同一个组;*
*having:它是对分组后的数据进行筛选,条件表达式中可以使用聚合函数*
*where和having的异同*
where:条件,where后面跟的条件比having后的条件先执行,条件中不允许使用聚合函数。
having:条件中可以使用聚合函数,一般having和group by联用。
集合:
并集:取两个集合中所有元素
union all:表示取两个集合的并集,不删除重复元素
union:取两个集合的并集,删除重复的元素
union、union all:union all执行效率高,
交集:取两个集合重叠部分的元素**
intersect:表示交集
差集:第一个集合的所有元素减去两个集合重叠部分的元素**
minus:表示差集
联合查询
交叉连接(笛卡尔积连接):
select 列名,列名,...from a表 cross join b表
select e.*,d.deptno dno,d.dname,d.loc from emp e cross join dept d;
select e.*,d.deptno dno,d.dname,d.loc from emp e,dept d;
内连接:
内连接:是把两个表中符合条件的数据连接为一条数据,如果哪个表中存在不符合连接条件的数据,
那么这些数据就会被过滤掉(不显示)
语法:
select 列名,...,列名
from a表 inner join b表 on 连接条件
inner join:中的inner可以省略不写
--查询员工信息及他的部门信息
select e.,d. from emp e inner join dept d on e.deptno=d.deptno;
自连接:
自连接是一个特殊的内连接,内连接一般是两个表的连接,自连接将一个表和它自已进行连接
--查询员工信息,并显示它的上级姓名
select e1.*,e2.ename 上级姓名 from emp e1 join emp e2 on e1.mgr=e2.empno
select e1.*,e2.ename from emp e1,emp e2 where e1.mgr=e2.empno;
不等连接
不等连接:连接条件是不等条件,(大于、小于、不等于)
--查询员工信息,并显示员工的工资等级
select * from salgrade;
外连接(全连接、左外连接、右外连接):
全连接
全连接:它会查出两个表中的所有数据,
左外连接
语义:查出左表(left outer join关键字前面的表)的所有数据,根据连接条件去右表中找对应的数据,如果找到变显示出来,如果找不到就显示空
语法:
select 列名,列名,...
from 表A left outer join 表B on 连接条件 left outer join :其中outer可以省略
查询所有部门信息,以及各部门下的员工信息
select d.,e. from dept d left join emp e on d.deptno=e.deptno;
右外连接
语义:它会查出右表的所有数据,根据连接条件去左表查找对应的数据,如果找到就显示,如果找不到就显示为空语法:
select 列名,列名,列名,...
from 左表 right outer join 右表 on 连接条件
right outer join:其中outer可以省略
--左连接
select d.,e. from dept d,emp e where e.deptno(+)=d.deptno;
--右连接
select d.,e. from dept d,emp e where d.deptno(+)=e.deptno;
自然连接:
自然连接是在两张表中寻找那些数据类型和列名都相同的字段,
然后自动地将他们连接起来,并返回所有符合条件的结果。