查询语法与类型 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项目化编程‘;
时间: 2024-10-12 18:51:33