设为首页 收藏本站
查看: 1020|回复: 0

[经验分享] oracle简单学习总结(二)——查询

[复制链接]

尚未签到

发表于 2016-8-4 09:40:15 | 显示全部楼层 |阅读模式
  一、建表

  CREATE TABLE userInfor(idint NOT NULL primary key,name varchar(50) NULL,birthday dateNOTNULL,ageintNOTNULL,sex intNOTNULL);
DSC0000.jpg
  二、查询

1、查询指定表的所有数据
  sql: SELECT * FROM userInfor;
  说明:查询usertable中所有的数据信息
2、查询指定字段的数据

  sql: select name ,birthdayfromuserInfor;

DSC0001.jpg
  说明:结果只包含2列name和birthday。在语句中给出要显示的列名,列名之间用“,”分隔。表头的显示默认为全部大写。

3、显示行号

  sql: SELECT *,ROWNUM FROM userInfor where id>3;

DSC0002.jpg

  说明:每个表都有一个虚列ROWNUM,它用来显示结果中记录的行号
  问题:rowid 与 ROWNUM 区别
  答:rowid和rownum都是虚列。rowid是物理地址,用于定位oracle中具体数据的物理存储位置,而rownum则是sql的输出结果排序

4、显示计算列

  在查询语句中可以有算术表达式,它将形成一个新列,用于显示计算的结果,通常称为计算列。表达式中可以包含列名、算术运算符和括号。括号用来改变运算的优先次序。
  常用的算术运算符包括:
+:加法运算符。  -:减法运算符。  *:乘法运算符。  /:除法运算符。

  sql:SELECT name,age,age*(10) age2FROMuserInfor ;
DSC0003.jpg

  说明:age*(10) age2指明增加一列计算出年龄的十倍,并把此列命名为age2(见5),它不是表中存在的列,而是计算产生的结果,称为计算列

5、使用别名

  可以为表的列起一个别名,好处是,可以改变表头的显示。特别是对于计算列,可以为它起一个简单的列别名以代替计算表达式在表头的显示。

  sql:SELECT name as 姓名,age userage,age*(10) "年龄(10倍)" FROMuserInfor;
DSC0004.jpg

  说明:在列名和别名之间要用AS分隔,如name和它的别名“姓名”之间用AS隔开。AS也可以省略,如age和它的别名“userage”之间用空格分割,用空格分割,要区别好前面为列名,后面是别名。别名如果含有空格或特殊字符或大小写敏感,需要使用双引号将它引起来。

6、连接运算符
  sql:SELECT name 姓名,age 年龄,name||' IS '||age||' age' AS "用户年龄" FROM userInfor ;
DSC0005.jpg

  说明:连接运算符是双竖线“||”。通过连接运算可以将两个字符串连接在一起。

7、使用的关键字DISTINCT消除重复显示
  sql:SELECT DISTINCT sex FROM userInfor ;

DSC0006.jpg
  说明:关键字DISTINCT消除重复显示
8、查询结果的排序
  升序:asc

  sql:SELECT * FROM userInfor ORDER BY sexASC;
DSC0007.jpg
  降序:desc

  sql:SELECT * FROM userInfor ORDER BY sexDESC;
DSC0008.jpg
  多字段排序:
  sql:SELECT * FROM userInfor ORDER BY sex desc , birthday asc;
DSC0009.jpg

  说明:ORDER BY 从句出现在SELECT语句的最后,后跟要排序的列。ASC表示升序排序,DESC表示降序排序。默认的排序顺序为升序。可以按多列进行排序,先按第一列,然后按第二列、第三列......。
9、简单条件查询
  
运算符 功 能 实 例
>,<大于,小于Select * from userInfor where age>10
>=.<=大于等于,小于等于Select * from userInfor where age>=10
=等于Select * from userInfor where age=10
!=,<>,^=不等于Select * fromuserInforwhere age!>=12
sql:SELECT * FROM userInfor where age>10; DSC00010.jpg
  说明:在FROM从句后使用WHERE从句,在WHERE从句中给出限定的条件,因为限定条件是一个表达式,所以称为条件表达式。条件表达式中可以包含比较运算,表达式的值为真的记录将被显示。字符串和日期型数据的值是包含在单引号中的。字符的值对大小写敏感
10、复合条件查询NOT,AND,OR

  
运算符说 明实 例
AND逻辑与,表示两个条件必须同时满足Select t.* from userInfor t where t.age>2 and t.birthday=to_date('1986-02-08','yyyy:MM:dd');
OR逻辑或,表示两个条件中有一个条件满足即可Select t.* from userInfor t where t.age>2 and t.birthday=to_date('1986-02-08','yyyy:MM:dd');
NOT逻辑非,返回与某条件相反的结果Select t.* from userInfor t where not t.birthday=to_date('1986-02-08','yyyy:MM:dd');

  sql:Select t.* from userInfort where t.age>2 and not t.birthday=to_date('1986-02-08','yyyy:MM:dd');
DSC00011.jpg
  说明:运算的优先顺序是NOT,AND,OR。如果要改变优先顺序,可以使用括号。

  11、特殊运算符
  
运 算功 能实 例
[NOT]
BETWEEN…AND…
用于测试是否在范围内Select * from userInforWhere age between 10
and 12
[NOT] IN (…)用于测试是否在列表中Select * from userInforWhere age in(1,10,
12
);
[NOT] LIKE用于进行模式匹配Select * from userInfor Where name like '张%'
IS [NOT] NULL用于测试是否为空值Select * from userInfor Where name is not null
ANY ,SOME同列表或查询中的每一个值进行比较,测试是否有一个满足,前面必须使用的
运算符包括=、!=、>=、<=、>、<等
Select * from userInfor Where age>any(select age from userInfor where name='张三')
ALL同列表或查询中的每一个值进行比较,测试是否所有的值都满足,前面必须使用的运算符包括=、!=、>=、<=、>、<等Select*from userInforWhere
age<all(26,12,10)
[NOT] EXISTS测试是否子查询至少返回一行Select name 用户,age from userInfor where exists(select age from userInfor where birthday>to_date('1986-02-08','yyyy:MM:dd'));
  说明:1、BETWEEN:对于数值型或日期型数据,表示范围时用。下限在前,上限在后,不能颠倒。查询范围中包含上下限的值
   2、LIKE:完成按通配符查找字符串的查询操作,该操作符适合于对数据进行模糊查询;%:代表0个或多个任意字符。_ :代表一个任意字符。
  问题1:any , some ,all 区别
  解答:

  * Some:表示满足其中一个的意义,是用or串起来的比较从句。

  sql: Select t.* from userInfor t Where t.age=some(select age from userInfor where sex=0);
   DSC00012.jpg
  
  理解:先执行:select age from userInfor where sex=0

   再执行:select t.* from userInfor t Where t.age=26ort.age=12;
  * Any:也表示满足其中一个的意义,也是用or串起来的比较从句,区别是any一般用在非“=”的比较关系中,这也很好理解,英文中的否定句中使用any肯定句中使用some,这一点是一样的。

  sql: Select t.* from userInfor t Where t.age<any(select age from userInfor where sex=0);
  


  理解:先执行:select age from userInfor where sex=0

   再执行:select t.* from userInfor t Where t.age<26ort.age<12;
  * All:表示满足其中所有的查询结果的含义,使用and串起来的比较从句。
  sql:select t.* from userInfor t Where t.age<all(select age from userInfor where sex=0);

  理解:先执行:select age fromuserInfor where sex=0
   再执行:selectt.* from userInfor t Where t.age<26 and t.age<12;
  问题二:in , EXISTS的理解
  解答:
  *EXISTS

  sql:Select name 用户,age from userInfor where exists(select age from userInfor where birthday>to_date('1986-02-08','yyyy:MM:dd'));


  学习参考:http://www.blogjava.net/terry-zj/archive/2006/04/18/41662.html
    http://www.360doc.com/content/09/1109/22/342503_8700654.shtml
    http://chenshuai365-163-com.iyunv.com/blog/1003247

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-252616-1-1.html 上篇帖子: oracle约束学习(1)unique和check 下篇帖子: Oracle group by 用法实例详解
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表