码迷,mamicode.com
首页 > 数据库 > 详细

Oracle数据库学习(一)

时间:2018-06-08 10:38:35      阅读:223      评论:0      收藏:0      [点我收藏+]

标签:name   not   vgs   分组   多个   过滤   信息   接收   esc   

SQL语言是通用的数据库语言

SQL命令可分为数据定义语言、数据操纵语言、事务控制语言和数据控制语言

Oracle支持的数据类型包括字符、数值、日期时间、RAW和LOB等

伪列:ROWID、ROWNUM

数据完整性:实体完整性、域完整性、引用完整性、自定义完整性

1、选择无重复的行,使用distinct关键字

     select  distinct  sclass  from  student;

2、给列指定别名

     select  cid  as 课程号,cname  as  课程名 from course;

3、对查询结果进行排序   order by  排序字段  排序方式

     select  * from score where sid=‘10011‘  order  by  score  desc;

4、模糊查询:字段  like  匹配表达式

      %:0个或多个字符

       _:任意单个字符

       select  * from  student  where  sname like ‘张%‘;

5、利用现有的表创建表

     create  table <new_table_name>  as  select column_names  from  <old_table_name>;

     例如:create  table  stubak  as  select * from student;

               create  table  stuclass  as  select  *  from  student  where  sclass=1;

               create  table  stuemp   as   select  *  from  student   where  1=2;

联接查询(多表)

     交叉联接(cross join)

     select  列名列表  from T1  cross  join  T2;

      一个交叉联接(cross join)接收两个分别有N行和M行的表T1和T2,然后返回一个包含交叉乘积N×M条记录的联接表

     例如:知道学生与课程有多少可能的组合:select *  from student  cross join course;

                也可以不适用join:select  *  from student,course;

      内联接(等值联接)

      例如:查询学生总体学习情况:学生姓名,课程名,成绩

                 select  sname,cname,score  from  t_student  join  t_score  on                t_student.sid=t_score.sid  join  t_course  on t_course.cid=t_score.cid;

      或者:select sname,cname,score  from  t_student,t_score,t_coure where  t_student.sid=t_score.sid  and  t_coure.cid=t_score.cid; 

      外联接

       例如:内联接查询教师和课程的对应情况

                  select  * from  teacher  join teachcourse  on  teacher.tid=teachcourse.tid;

                 查看所有教师的工作分配情况,即没有课程的教师也要出现在查询结果中,此时就用外联接

                select  *  from  teacher  full  join  teachcourse  on  teacher.tid=teachcourse.tid;

 

       左外联接left

       右外联接right

       全联接

分组聚合

     SQL中提供得聚合函数  Min、Max、Sum、Avg、Count

     对记录分组通过关键字group  by 实现

      select sid, max(score) as maxscore, min(score) as minscore, sum(score) as totalscore, avg(score) as avgscore from t_score group by sid;

 Having子句

     Having子句主要用于聚合查询中,在group之后过滤那些不符合条件的组

      例如:平均成绩超过75的学生的学号和平均成绩

          select  sid,avg(score)  as avgscore  from  t_score  group  by  sid  having  avg(score)>=75;

子查询

      例如:查询比大山老师年龄大的教师的信息

      select * from  teacher  where  tage > (select  tage  from  teacher  where  tname=‘大山‘);

      [not]in子查询   适用于子查询中返回多个值时的情况

      select  列名  from  表名  where  列名  [not] in (子查询)

      例如:查询所有已经安排教师上课的课程信息

                 select  *  from  course  where  cid  in  (select  cid  from  teachcourse);

       exists子查询:存在查询,子查询不返回任何结果,只产生逻辑真或逻辑假

       select  列名  from  表名  where  [not] eaists (子查询)

       例如:查询所有已经安排教师上课的课程信息

                 select  *  from  course  where  exists  (select  *  from  teachcourse where teachcourse.cid=course.cid);

       在from里面的子查询

       当子查询返回一个结果集时,那么它就相当于一个普通的表,所以,在from子句我们同样可以使用子查询

        在成绩表中查询出所有学生的最高平均分

         select max(avgscore) from (select avg(score) as avgscore from t_score group by sid);

       分页查询:rownum伪列

       select * from (select rownum as num,sid,sname,ssex,sclass from t_student) where num>=11 and num<=20;

 

Oracle数据库学习(一)

标签:name   not   vgs   分组   多个   过滤   信息   接收   esc   

原文地址:https://www.cnblogs.com/Java-125/p/9151077.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!