首页 > 代码库 > 查询语句1

查询语句1

查询语法与类型
Select *  from  表名
select  列名1,、列名2、列名3 、列名4  from  表名

 --在数据库中查询数据使用select命令
 --执行数据库查询时,可以使用*表示查询表格所有的列
 select * from libuser;
 
 --执行数据查询时,也可以指定要查询的列
 --select userid,uaccount,passwd,age,regdate,sex from libuser;
 --select userid,uaccount,age,regdate from libuser;

精确查询
Select *  from  表名  where  列名=‘查询条件’

 -使用精确查询
-- 查询数据使用select进行查询, select 列名(多个列可以使用逗号进行分隔或使用*表示所有的列) from 表名 where 条件(列名=查询条件) 
 select * from libuser where uaccount = lisi; 

模糊查询
select  列名1,、列名2  from  表名  where 列名>=查询条件
                     列名 like%123%’   ‘%123’   ‘%12__’
--使用模糊查询
--查询年龄大于等于19岁的人
 select userid,uaccount,passwd,age,regdate,sex from libuser where age >= 22;
 
--查询账号包含有lin的人
select * from libuser where uaccount like %lin%; 

--查询所有以lin开头的人
select * from libuser where uaccount like lin%;
 
--查询所有以ing结尾的人
select * from libuser where uaccount like %ing; 

--模糊查询可以使用like查询实现,可以使用%表示0个或多个字符,还可使用_表示一个不确定的字符
select * from libuser where uaccount like %ing_;
--注意:一条下划线_表示一个不确定的字符,N条下划线表示N个不确定的字符
select * from libuser where uaccount like %in__;


时间查询
select  列名1,、列名2  from  表名  where 列名格式=查询条件

--查询注册时间是6月份的人
select userid,uaccount,age,to_char(regdate,yyyy-mm-dd hh24:mi:ss) from libuser where to_char(regdate,yyyymm)=201606;

--练习:查询指定年月日的人 
 
--日期比较
--找出注册时间在7月13号前的人
--编程语言中的时间是指从1970年1月1号0点0时0分0秒0毫秒到当前时间点的时间差,所以日期越往后值越大;这里使用的数值判断两个数值谁大谁小
select userid,uaccount,age,to_char(regdate,yyyy-mm-dd hh24:mi:ss) from libuser where regdate<to_date(2016-7-13,yyyy-mm-dd);


--练习:查找注册时间在2016-07-12 13:30:52后的人,包含2016-07-12 13:30:52

 --查询星期几--注意每周是从星期天开始的,故星期天的数值是1
 select to_char(regdate,day),to_number(to_char(regdate,D)) from libuser;
 

多条件查询
select  列名1,、列名2  from  表名  where 列名=查询条件 and列名=查询条件
 列名=查询条件 or列名=查询条件   1X(1+0)X1=1   1X(1+0)X0=0
列名=查询条件 or列名=查询条件 and列名=查询条件 or列名=查询条件             
--多条件查询
 --根据用户的账号和密码找出用户的信息
 --需要同时满足两个查询条件的,需要进行逻辑与操作,使用and运算符号实现(如果是多条件都需要满足,使用多个and)
 select userid,uaccount,passwd,age,to_char(regdate,yyyy-mm-dd hh24:mi:ss) from libuser where uaccount=linling and passwd=linling;
 
 
 --查找linling或linling2的数据
 --或查询时逻辑或操作,使用or运算符实现(如果有多个条件使用多个or)
 select userid,uaccount,passwd,age,to_char(regdate,yyyy-mm-dd hh24:mi:ss) from libuser where uaccount=linling or uaccount=linling8
 
 
 --查找出userid为10003且密码等于123456的用户 或者账号为linling且密码等于linling的用户
 --注意:在同一查询条件中,如有and与(乘法)运算,又有or或(加法)运算;这样的运算可以看成算术运算的混合运算.先乘除后加减
 select userid,uaccount,passwd,age,to_char(regdate,yyyy-mm-dd hh24:mi:ss) from libuser 
       where userid=10003 and passwd=123456 or uaccount=linling and passwd=linling;
 --可以使用小括号改变运算的优先级别
  select userid,uaccount,passwd,age,to_char(regdate,yyyy-mm-dd hh24:mi:ss) from libuser 
       where (userid=10003 and passwd=123456) or (uaccount=linling and passwd=linling);
    
  -- 理解逻辑运行的优先级别  
   select userid,uaccount,passwd,age,to_char(regdate,yyyy-mm-dd hh24:mi:ss) from libuser 
       where userid=10003 and (passwd=123456 or uaccount=linling) and passwd=linling;  

非空查询
select  列名1,、列名2  from  表名  where 列名 is null
select  列名1,、列名2  from  表名  where 列名 is not null

  --查询字段为null的数据用 is null
  select userid,uaccount,passwd,age ,to_char(regdate,yyyy-mm-dd hh24:mi:ss) regdate from libuser where age is null;
  --查询字段不为空null的数据用is not null 
  select userid,uaccount,passwd,age ,to_char(regdate,yyyy-mm-dd hh24:mi:ss) regdate from libuser where age is not null;

  
过滤查询
select  列名1,、列名2  from  表名  where 表名in(查询条件)
select  列名1,、列名2  from  表名  where 表名not in(查询条件)

--使用in查询过滤数据
  select userid,uaccount,passwd,age ,to_char(regdate,yyyy-mm-dd hh24:mi:ss) regdate from libuser 
     where userid in (10003,10005 ,100020 ,20000 ,2001 ,200003, 200052); 
 --使用 not in 查询过滤数据
 select userid,uaccount,passwd,age ,to_char(regdate,yyyy-mm-dd hh24:mi:ss) regdate from libuser 
     where userid not in (10003,10005 ,100020 ,20000 ,2001 ,200003, 200052); 


关联查询 子查询 使用join关联查询 
select stationid,stationname,select Areaid from Area where Areaname = 北京市,stationsite, from Station where stationid=1;
  
  select s.stationid,s.stationname,s.stationsite,a.areaname from Station s join area a on s.areaid=a.areaid;
  
  
  --自关联查询
  select a.areaid,a.areaname,a.superior,a2.areaname from Area a left join Area a2 on a.superior = a2.areaid order by a.areaid ;
  --多表关联查询
  select s.stationid,s.stationname,a.areaname,s.stationsite from Station s join Area a on s.areaid=a.areaid order by s.stationid;
  
  ---多表查询,子查询
  select t.trainid,tr.typename,st.stationname z,sta.stationname,t.starttime,t.sndtime,t.mile,t.price from train t join traintype tr on t.tpid=tr.tpid join Station st on st.stationid=t.starstation join Station sta on sta.stationid=t.endstation;
  
 
--左连接查询--会把join左边的表的所有数据都查询出来
select * from goods t left outer join category c on t.category=c.id;

--右连接查询--会把join右边的表的所有数据都查询出来
select * from goods t right outer join category c on t.category=c.id;

--内连接查询--只查询有关联关系的数据
select * from goods t  join category c on t.category=c.id;
select * from goods t inner join category c on t.category=c.id;

  --查找书籍分类是"航空航天3"的书籍
   select * from book where btype=(select bid from booktype where btname=航空航天3);
   
   
   --课后练习:查找书籍分类是"航空航天3"的书籍,要求同时显示分类名称
   --多表联合查询--
   --查找的数据如果保存在多个表中,且这些表有主外键关系,可以通过主外键进关联查询
   
   
   --select 列名 from 外键表,主键表  where 外键表的外键=主键表的主键
   select * from book b,booktype bt where b.btype=bt.bid
   --颠倒表或表关系查询的结果是一样的
   select * from booktype bt,book b where bt.bid=b.btype
   
   
   
   --在查询列时,可以使用表的别名分别制定两个表要查询的列
   select b.*,bt.btname from booktype bt,book b where bt.bid=b.btype
   --使用表的别名指定要查询的列
   select b.bookname,b.price,bt.btname from book b,booktype bt where b.btype=bt.bid;
   
   
   --练习:
   --1.根据书籍类名查询书籍名称(已知书籍类名称"航空航天3",要求查询该类型下的书籍名称); 
   
   --1.1把两张表都在主查询中进行关联查询:满足主外键关系,满足查询条件
   SELECT * FROM BOOK;
   --select b.bookname from book b,booktype bt where   bt.btname=‘航空航天3‘;
   select b.bookname from book b,booktype bt where b.btype=bt.bid and bt.btname=航空航天3;
   
   
   --1.2使用子查询方法
   --select b.bookname from book b where b.btype=16
   --select bid from booktype where btname=‘航空航天3‘
   
   select b.bookname from book b where b.btype=( select bid from booktype where btname=航空航天3);
   
   
   --1.3使用关联查询
   --select 列 from 表  join 关联表 on 关联条件 where 其他查询条件
   select b.bookname from book b join booktype bt on b.btype=bt.bid where bt.btname=航空航天3;
   
   --查询加强:查询isbn为ISBN-2016-NUM23的书名和类型名
   select b.bookname,bt.btname from book b join booktype bt on b.btype=bt.bid where b.isbn=ISBN-2016-NUM23;
   
   --练习:查询价格为"20.02" ,且类型名为"航空航天3"的书名
   select b.bookname from book b join booktype bt on b.btype=bt.bid where b.price=20.02 and bt.btname=航空航天3;
   
   select b.bookname from book b join booktype bt on b.btype=bt.bid and b.price=20.02 and bt.btname=航空航天3;
   
   
   
     
   -- 2.根据书籍名称查询类型名称(已知书籍的名称"oracle项目化编程",要求查询该书籍的类型名称)
   --2.1通过主查询进行关联
   select bt.btname from booktype bt ,book b where bt.bid=b.btype and b.bookname=oracle项目化编程;
   --2.2通过子查询进行关联查询
   select bt.btname from booktype bt where bt.bid = (select btype from book where  bookname=oracle项目化编程);
   --2.3通过join关联查询
   select bt.btname from booktype bt join book b on bt.bid = b.btype where b.bookname=oracle项目化编程;
   

 

查询语句1