Oracle学习笔记(三):SELECT详解

自己学习Oracle的相关笔记,主要备忘,并不详细,如有错误欢迎大家指正~~~


SELECT查询

  • SELECT基础查询

    • 基本语法:
         SELECT [DISTINCT | ALL] select_list FROM table_list [where_clause] [group_by_clause] [HAVING condition] [order_by_clause]
    
    • SELECT: 查询必备关键字
    • -[DISTINCT | ALL]: 查询记录中是否除去重复记录
    • select_list: 需要查询的字段列表,一个或多个
    • -[where_clause]: WHERE条件查询
    • -[group_by_clause]: GROUP BY子句
    • -[HAVING condiition]: HAVING子句
    • -[order_by_clause]: 排序语句
SELECT * FROM student  --查询student表中所有数据;
SELECT student_id,student_name FROM student --查询student表中student_id和student_name;
select student_id as 学号,student_name as 姓名 from student --使用别名代替,AS也可直接用空格代替;
select math_score 数学成绩,english_score 英语成绩,math_score+english_score as 总成绩 from student_scores--表达式查询;
select distinct(student_id) from student--去重;
  • SELECT排序数据

    • 语法:
    ORDER BY      
    {expr | position | c_alias} 
     [ASC | DESC] 
    [NULL FIRST | NULL LAST] 
    [,{expr | position | c_alias} [ASC | DESC] [NULL FIRST | NULL LAST]   ]...
    
    • ORDER BY: 排序关键字
    • expr: 表达式
    • position: 表中列的位置
    • c_alias: 别名
    • -[ASC | DESC]: 升序或降序
    • -[NULL FIRST | NULL LAST]:对空字符串的处理,在前或在后,默认NULL为最大值
     select math_score 数学,english_score 英语,math_score+english_score 总成绩 from student_scores order by 总成绩 desc;--默认为升序排列
     select * from student_scores order 2;--按照2位置字段排序
     select * from student_scores order by 2 desc, 3 desc;--按多字段排序
    
  • SELECT+WHERE字句查询

    • WHERE子句中的操作符
      1. 关系操作符:<,>,=,<=,>=,!=,<>
      2. 比较操作符:
        • IS NULL: 如果为NULL返回TRUE
        • LIKE: 模糊比较字符串值
        • BETWEEN...AND...: 验证值是否在范围内
        • IN: 验证操作数在设定的一系列值中
      3. 逻辑操作符:
        • AND : 两个条件都必须满足
        • OR: 满足其中一个条件即可
        • NOT: 与某个逻辑值相反
    • 语句示例:
SELECT * FROM student_scores WHERE math_score > 92;
SELECT * FROM student_scores WHERE math_score > 92 AND english_score >98;
SELECT * FROM student_scores WHERE math_score BETWEEN 90 AND 92;
SELECT * FROM student_scores WHERE math_score > 90 OR english_score >1000;
SELECT * FROM student WHERE student_name LIKE '%T%'--_代替一个字符,%代替多个字符;
SELECT * FROM student_scores WHERE student_id IN(1,2);
  • GROUP BY 和 HAVING

    GROUP BY 用于组的查询,使用分组查询可以统计数据
    • 语法:
    GROUP BY
      {expr --通常为列名
      | {ROLLUP | CUBE} --GROUP BY的扩展子句,返回小计和总计
     ({expr [.expr]...})
    }
    
    • 示例
    SELECT class_id,AVG(math_score) FROM student_scores GROUP BY class_id;
    
    HAVING通常和GROUP BY一起使用,用于限制搜索条件,与组相关而不与单个值相关
    SELECT class_id,AVG(math_score) FROM student_scores GROUP BY class_id HAVING AVG(math_score)>95;
    
  • SELECT子查询

    子查询指嵌套查询,多数为WHERE后一个条件表达式
    select * from student_scores where student_id=(select student_id from student_scores where math_score=90);
    select student_id from student_scores where student_id in (select student_id from student_scores where math_score>90 AND english_score >95);
    
  • SELECT连接查询

    多表数据联系查询
    • 简单连接
    SELECT * FROM student,student_scores;
    
    • 内连接
      • 等值连接(含'=')
        select s.class_id,s.student_name,sc.math_score,sc.english_score from student s,student_scores sc where s.student_id=sc.student_id;
        
      • 不等值连接
        含>,<,>=,<=,!=,<>,BETWEEN...AND...,IN等
        select s.class_id,s.student_name,sc.math_score,sc.english_score from student s,student_scores sc where s.student_id in sc.student_id;
        
    • 自连接
      把自身表的引用作为另一个表来处理
      select s.class_id,sc.english_score from student_scores s,student_scores sc where s.class_id!=sc.class_id AND sc.english_score=s.english_score;
      
    • 外连接
      • 左外连接(LEFT JOIN)
        左向外连接,返回的结果不仅是符合连接条件的行记录,还包含左边表的全部记录。
      • 右外连接(RIGHT JOIN)
        右向外连接,将右边表中数据与左边表中数据匹配,返回的结果除了配备成功的记录,还有右表中为匹配的记录,并将左表补NULL
      • 全外连接(FULL JOIN)
        左右外连接的综合,未匹配的都补NULL
      • 外链接中的(+)<符号形式表示外连接>
        • 放在非主表的一方(左外连接(+)放在右表),并使用where子句,不使用OUT JOIN;
        • 不能用于全外连接
        • 若外连接有多个条件,则每个条件后都要加一个(+)

你可能感兴趣的:(Oracle学习笔记(三):SELECT详解)