查询语句


排序查询  order by  desc

--排序查询
 --排序查询使用order by进行查询,执行是先查询(数据)后排序
 --默认的排序使用升序排序,也可以使用asc进行显示声明;也可以使用desc进行降序排序
 select * from libprivilege order by pid desc;
 
 --在排序查询时,如果有多个排序列可以使用逗号进行分隔,
 --查询会按照排序列先排第一列,排完后再按照第二列进行排序,排完后再按照第N列进排序
 select parentid,pname from libprivilege order by parentid,pname asc;
 
 select parentid,pname from libprivilege order by parentid,pname desc;
 
 select parentid,pname from libprivilege order by parentid desc,pname desc;
 
组查询  count(列名)

--组查询
 --计数查询--使用count进行计数
 select count(pid) 记录总数  from libprivilege;

--组查询:查询的列必须出现在分组中.
 select pid,pname,parentid from libprivilege group by pid,parentid,pname;

--按照parentid进行分组,查询每个分组下有几个权限
 --统计查询,统计每个权限下都有几个直接子权限
 --分组查询:查询的列可以使用统计(分组)函数,或者是分组的列
 select count(pid),parentid from libprivilege group by parentid;
 
求和查询  sum(列名)
 --求和查询
 select * from book;
 select sum(price)  总价值,sum(pages) 总页数 from book;
--查询书籍的平均价格是多少
 select avg(price) 平均价格  from book;
 
 --查询价格低于平均价格的数据信息
 --select * from book where price <avg(price); 不能在查询条件中直接使用分组函数
 
 select * from book where price <(select avg(price) 平均价格  from book);
 
 --查询价格不低于平均价格的数据信息 >=
 --查询价格不高于平均价格的数据信息 <=
 --查询价格高于平均价格的数据信息   >
 --查询价格不等于平均价格的数据信息 !=
 
 
 --查找出价格最低的书籍信息
 select * from book where price = (select min(price) from book);
 
 --查找出价格最高的书籍信息
 select * from book where price = (select max(price) from book);
 
 
 --把价格低于平均价格的书籍,价格加10元
 update book set price=price+10 where price <(select avg(price) from book);
 
 --
 select * from libprivilege;
 
 select * from libprivilege group by parentid;

统计查询  count(列名)from  列名  where 列名=‘’


--统计查询:书籍名称为"测试书籍1"的书籍有多少本
 select count(bookid) from testbook where bookname='测试书籍1';
 
 --根据书名进行分组统计,同一书名下有几本书
 --1.如有查询过滤条件才需要使用where查询
 --2.如果一个查询中,包含有分组(group by bookname)和条件过滤(where   bookname='测试书籍1'),则分组查询需要放到where的后面 
 --分组是对查询出来的数据进行分组显示,先查询后分组
 select bookname,count(bookid) from testbook  group by bookname ;
 --select bookname,count(bookid) from testbook where   bookname='测试书籍1'  group by bookname ;
 
 
 
 --根据书名进行分组统计,同一书名下有几本书,并按照数量的多少进行升序排序
 -- select bookname,count(bookid) bookcount from testbook  order by bookcount  group by bookname ;
 --3.在分组查询中如有排序列,则先执行分组后执行排序(排序是对分组后的结果进行排序)
  select bookname,count(bookid) bookcount from testbook   group by bookname   order by bookcount desc;
 
 
 --查询价格大于60元的数据,根据书名进行分组统计,同一书名下有几本书,并按照数量的多少进行升序排序
 -- select count(bookid) bookcount from testbook where price >60;
 --4.在组合查询中,先进行where条件过滤数据,再执行分组,最后对分组后的信息进行排序
 select bookname,count(bookid) bookcount from testbook where price >60 group by bookname order by bookcount asc;
 

最全查询语法


 --最全的语法
 --where是对查询前(对表中)的数据进行过滤,having是对查询后的数据进行二次过滤
 select bookname,count(bookid) bookcount from testbook where price >60  group by bookname
      having bookname like '测试书籍%'  order by bookcount asc  ;

--SELECT [hint][DISTINCT] select_list
--   FROM table_list
--   [WHERE conditions]
--   [GROUP BY group_by_list]
--  [HAVING search_conditions]
--  [ORDER BY order_list [ASC | DESC] ]
--  [FOR UPDATE for_update_options]

权限查询


  --2.根据该账号查询该账号拥有的所有权限;
         
         select p.* from libprivilege p join rroleprivilege rr on p.pid = rr.privilegeid 
                   join librole r on rr.roleid = r.rid join libmanager m on r.rid = m.roleid where m.maccount='superAdmin';
                        
         --2.1查询邮箱账号包含:  sina.com.cn的账号的所有权限      
         
         select p.* from libprivilege p join rroleprivilege rr on p.pid=rr.privilegeid 
              join librole r on rr.roleid =r.rid join libmanager m on r.rid=m.roleid where m.email like '%sina.com.cn';   
                   
          
          select p.* from libprivilege p join rroleprivilege rr on p.pid=rr.privilegeid 
              join librole r on rr.roleid =r.rid join libmanager m on r.rid=m.roleid where m.email like '%book@sina.com.cn'; 
              
         --3.给定一个权限,找出拥有该权限的所有管理账号
         
         select m.* from libmanager m join librole r on m.roleid = r.rid 
              join rroleprivilege rr on r.rid =rr.roleid join libprivilege p on rr.privilegeid = p.pid where p.pname='退出';
         
         
         select m.* from libmanager m join librole r on m.roleid = r.rid 
              join rroleprivilege rr on r.rid =rr.roleid join libprivilege p on rr.privilegeid = p.pid where p.pname='角色管理';
              
              
         select m.* from libmanager m join librole r on m.roleid = r.rid 
              join rroleprivilege rr on r.rid =rr.roleid join libprivilege p on rr.privilegeid = p.pid where p.pname='书籍分类管理';
              
         --作业:    
         --3.1查找注册时间是:2016-07-19的账号的权限
         --时间的精确判断
         select p.* from libprivilege p join rroleprivilege rr on p.pid=rr.PRIVILEGEID
            join librole r on rr.roleid =r.rid join libmanager m on r.rid=m.roleid where  to_char(m.regdate,'yyyy-mm-dd')='2016-07-19';
         
         --时间的模糊判断
         --3.2查找注册时间在2015-12-12后的账号的权限
         
         select p.* from libprivilege p join rroleprivilege rr on p.pid=rr.PRIVILEGEID
            join librole r on rr.roleid =r.rid join libmanager m on r.rid=m.roleid where m.regdate>to_date('2016-07-18','yyyy-mm-dd');
         
         --3.3查找账号为superAdmin,密码是123456的账号的权限
         select p.* from libprivilege p join rroleprivilege rr on p.pid=rr.PRIVILEGEID
            join librole r on rr.roleid =r.rid join libmanager m on r.rid=m.roleid where m.maccount='superAdmin' and m.passwd='123456';
   
         --3.4查找注册时间在2015-12-12~2016-07-15的账号的权限
         --3.5查找注册时间在2015-12-12~2016-07-15,且电话号码包含8444的的账号的权限

 

 

 

posted @ 2016-11-07 21:14  binbgo  阅读(333)  评论(0编辑  收藏  举报