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;
        • 不能用于全外连接
        • 若外连接有多个条件,则每个条件后都要加一个(+)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,298评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,701评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,078评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,687评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,018评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,410评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,729评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,412评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,124评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,379评论 2 242
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,903评论 1 257
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,268评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,894评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,014评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,770评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,435评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,312评论 2 260

推荐阅读更多精彩内容

  • 50个常用的sql语句Student(S#,Sname,Sage,Ssex) 学生表Course(C#,Cname...
    哈哈海阅读 1,207评论 0 7
  • Student(S#,Sname,Sage,Ssex) 学生表 Course(C#,Cname,T#) 课程表 S...
    望l阅读 292评论 0 0
  • 说明:以下五十个语句都按照测试数据进行过测试,最好每次只单独运行一个语句。 问题及描述: --1.学生表 Stud...
    lijun_m阅读 1,256评论 0 1
  • 一直自认为七号性格的我是个超级乐天派。当下雨天别人在家悲春伤秋的时候,我带着孩子们穿上雨衣雨鞋,在小...
    朱莉叶6666阅读 451评论 0 0
  • 看到一个人分享了一个泰国的微短片,一个乐观的大小伙,走在路上,一路很随意做了一些小事,帮助推大排档车的大姐推过障碍...
    Dotartisan阅读 273评论 0 0