postgresql in模糊查询 plsql模糊查询表名 转载
一.简单查询
1.Select 列名,列名…from
select e.empno,e.ename,e.job,e.sal from emp e(别名);
2.带条件查询 select 列名,列名,…,列名 from 表名 where
–查询名字叫SMITH的员工的信息
select * from emp where ename=‘SMITH’;(字符串类型加单引号)
3.in(后面跟集合或者子查询) not in
Like
%:表示在这个%出现的地方可以有0个或者多个字符
_: 表示在_出现的地方有且只能一个任意字符
–查询emp表中员工姓名第三个字符是A的员工信息
select * from emp where ename like ‘__A%’;
like中的转义字符:\
select * from emp where ename like ‘%_%’ escape ‘’;把\后紧跟的字符转换成普通字符_,不然_的意思在这代表只能一个任意字符
all、any:后面都跟一个集合或者子查询
–查询工资比所有人(1600,2000,3000)都高的员工信息
select * from emp where sal > all(1600,2000,3000);
not exists:和exists 不和任何列一起使用,后面跟的是一个子查询(查询语句select语句),如果子查询能查出结果,那么这个条件就是成立的,查不出结果条件不成立
条件连接符 and or
Between value1 and value2 ;value1的值比value2值小,表示值在value1和value2之间
is null:表示这个值是空时条件成立
–select * from emp where comm is null;
is not null:表示值不为空时条件成立
–查询员工的年薪 Select ‘年薪’, sal*12 from emp;
4.排序分组
(1)排序
select 列名,列名,…,列名 from 表名 where 条件表达式 order by 排序列的列名(后可跟多个列,按照紧跟order by关键字的列排序,如果第一个排序字段的值相同,再按照第二个排序) asc(升序可省略)|desc(降序);
注意:order by 后面除了可以跟表中的列名外,还可以跟select 和from之间查询结果的序号
select empno,sal,job,ename,deptno from emp order by 5,2
(2)聚合函数
聚合函数:对一组值执行计算,并返回单个值
count(列名|*|常数):它求记录数(数据条数)
max(列名):取最大值
min(列名):取最小值
avg(列名):取平均值
sum(列名):求和
distinct:去重关键字,跟在列的最前面
分组,having
select 列名,列名,…,列名 from 表名where 条件group by 分组列having条件order by
–查询各个部门的部门编号和部门的平均工资
select deptno,avg(sal) from emp group by deptno;
注意:group by 后面跟多个列时,只有当多个列的值同时相等时,它才会分为同一个组;–select job,deptno,count(*) from emp group by job,deptno;
having:它是对分组后的数据进行筛选,条件表达式中可以使用聚合函数
–求平均工资大于2000的部门编号和平均工资
select deptno,avg(sal) from emp group by deptno having avg(sal)>2000;
where和having的异同
where:条件,where后面跟的条件比having后的条件先执行,条件中不允许使用聚合函数。
having:条件中可以使用聚合函数,一般having和group by联用。
5.集合,联合查询
集合:每一个sql查询的结果就是一个集合
并集:取两个集合中所有元素
Union all;取两个集合的并集,不删除重复数据
Union;去两个集合的并集,删除重复元素
交集:取两个集合重叠部分的元素 关键词:intersect
差集:第一个集合的所有元素减去两个集合重叠部分的元素 关键词Minus::表示差集(卖了思)
联合查询
交叉连接(笛卡尔积连接)select 列名,列名,…from a表 cross join b表;
select e.*,d.deptno dno,d.dname,d.loc from emp e cross join
select e.*,d.deptno dno,d.dname,d.loc from emp e,dept d;
内连接:把两个表中符合条件的数据连接为一条,如果哪个表中存在不符合连接条件的数据,那么这些数据就会被过滤掉(不显示)
select 列名,…,列名from a表 inner(可省) join b表 on 连接条件
自连接:特殊的内连接,内连接一般是两个表的连接,自连接将一个表和它自已进行连接
–查询员工信息,并显示它的上级姓名
select e1.*,e2.ename 上级姓名 from emp e1 join emp e2 on e1.mgr=e2.empno
不等连接:连接条件是不等条件,(大于、小于、不等于)
select e.*,s.grade,s.losal,s.hisal from emp e join salgrade s on e.sal between s.losal and s.hisal;
全连接:它会查出两个表中的所有数据
select 列名,列名,列名,…
from 表A full join 表B on 连接条件;
如果两个表中数据都符合条件,会将符合条件的数据连接为一条记录,如果第一张表中的数据在第二张表中没有,会显示第一张表中的数据同时第二张表的位置会为空,同理第二张表的数据在第一张表中查不到会显示第二张表的数据第一张表中的位置显示为空
左外连接;
select 列名,列名,…from 表A left join 表B on 连接条件
(lift join)查出左表的所有数据,根据连接条件去右表查询对应的数据
右外连接
select 列名,列名,列名,…from 左表 right
自然连接在两张表中找数据类型和列名都相同的字段,自动连接起来,返回符合条件的结果
select * f