`
txf2004
  • 浏览: 6866231 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Oracle 11g系列—7—SQL 基础学习

 
阅读更多

前言

数据的作业不仅仅是存放数据,它的更重要的作用是根据用户的需求(也就是条件)来显示用户所需要的数据。

本章详细介绍select语句、DMT语句、事物控制等等知识。

一。SQL语言概述

SQL(Structured Query Language,结构化查询语言),用来实现关系运算中的查询、选择等操作,是一个综合的、功能极强同时也是一种简单易学的语音。

1.1 SQL 语言的特点

  • SQL语言采用集合操作方式,对数据的处理是成组进行的
  • 执行SQL语句时,每次只能发送并处理一条语句
  • 执行SQL语句时,用户只需要知道逻辑含义,无需关心SQL的具体执行

1.2 SQL语言分类

①查询语言

比如select

②数据操纵语言(Data Manipulation Lanuage,DMT)

  • Insert
  • Update
  • Delete
  • Merge(合并 插入 修改)

③数据定义语言(Data Definition Language,DDL)

  • Create
  • Drop
  • Rename
  • Truncate(删除表的全部内容)

④事物控制(Transaction Control ,TC)语句

  • Commit 永久性的保存对行所做的修改
  • Rollback 取消对行所做的修改
  • Savepoint 设置一个“保存点”,可以将对行的修改回滚到此处

⑤数据控制语言(Data Control Language,DCL)

  • Grant 授予其他用户对数据库结构的访问权限
  • Revoke 收回用户数据库结构的权限

1.3 SQL语句的编写规则

  • SQL关键字不区分大小写,也就是大小写不敏感
  • 对象名和列名不区分大小写
  • 字符值和日期值区分大小写

具体一些 看后记中的参考文献

二。数据查询语法

Select [All|Distinct] <列名> [,<列名> ]...

from <表名或试图名>

[where <条件表达式>]

[Group by <列名1> [Having <条件表达式>]]

[Order by <列名2> [ASC|DESC]]

OK,上面就是查询语句的语法。这个怎么看呢?很简单。。貌似以前也说过。就是方括号([])中的内容是可选的,尖括号(<>)是一定要选择的。

测试数据

我新建了3个表,如下

学生表:Student(Sno,Sname,Ssex,Sage,Ddept)

课程表:Course(Cno,Cname,Cpno(先行课),Ccredit(学分))

这里需要解释一下,什么叫先行课:就是比如你要学C#,那么你需要一定的计算机基础的知识,那么这个计算机知识就是先行课。

学生选课表:SC(Sno,Cno,Grade)

三。数据查询-----单表查询

顾名思义就是在一个表中查询。这个是最简单的查询咯!

3.1选择表中的若干列

①查询指定列

【例子1】从student表中查出所有学生姓名和学号

②查询所有的列值

【例子2】从course表中查出所有的课程信息

③查询经过计算的值

【例子3】从student表中查出学生的姓名和生日日期

<列名>不仅可以是算数表达式,还可以是字符串常量、函数等。

【例子4】我现在要找出全体学生的姓名、出生年份以及院系,但要求院系都要小写!如下:

用户可以通过指定别名来改变查询结果的列标题,例子如下:

3.2选择表中的若干元组

①消除取值重复的行

需要记住的关键字是:distinct

【例子5】使用distinct

②查询满足条件的元组

我们都知道查询满足指定条件是可以通过Where字句来实现的,where字句常用的查询条件如下:

查询条件 谓词
比较大小 =,<,>>=,<=,!=,<>....
确定范围 between and,not between and
确定集合 In,not in
字符匹配 Like,not like
空值 is null, is not null
多重条件(逻辑运算) and ,or ,not

(1)比较大小

【例子6】查询计算机系全体学生的名单

【例子7】查询年龄在20岁以下的学生

(2)确定范围

【例子8】查询年龄在20~25(包括20 和25)岁之间的学生名字、系别和年龄。

同理,如果不在这个范围,则使用not between关键字。

(3)确定集合

谓词in可以用来查找属性属于指定集合的元组

【例子9】查找计算机系(CS)、数学系(MA)的学生姓名和性别。

与in相对应的谓词是not in,用于查找不在这个范围的值。

(4)字符匹配

用like可以进行字符串的匹配,语法如下:

[not] like '<匹配串>' [escape '<换码字符>']

其含义是找出指定的属性列值与匹配串的结果。匹配串可以是字符串,也可以是通配符%和_,含义如下:

%(百分号):代表任意长度。比如a%b,则表示aeweb,或者ab

_(下划线):代表任意个字符。比如a_b则代表,a开头,b结尾的3个字符串。

【例子10】找出名字中以 Hong结尾的名字

很明显,找出不在字符串中的匹配是not like。

【例子11】找出学生名字xiao后面只有2个字符的名字:

得到的结果是XiaoLi,因为上面图的缘故,所以只能看到一条下划线,其实有2个。

NOTE:如果用户要查询的字符串本身就包含通配符%或_中,那怎么办呢?在上面的语法中,我们提到。这个时候,我们就需要使用escape ‘换码字符’ 这个知识了,对通配符进行转义了。

啥意思呢?就是在escape ‘换码字符’后面的字符串是正常的字符串。

【例子12】找出课程名DB_开头,并且倒数第三个字符为i的课程的详细信息。

这个怎么看呢?escape '\' 表示 '\'为换码字符。这样匹配串中紧跟在“\”后面的字符串“_”不在具有匹配符的含义,和普通字符一样。所以,第一个“_”被转义为普通字符,第二和第三个的前面没有换吗码字符,所以依然是匹配符。

(5)涉及空值的查询

【例子13】查询缺少成绩的学生号和课程号,因为有些学生没有参加课也很正常。

OK,可能有些园子的朋友会觉得 这里的is 用“=”代替,可以吗?结果如下:

得出的结果是不可以的,所以在判断为空的时候用is,而不是“=”

(6)多重条件查询

逻辑运算符 and和or可以用来连接多个查询条件。and的优先级高于or的哦。亲。

【例子14】查询年龄在20岁以下且是计算机系的学生

【例子15】在例子9中,我们使用了in,其实,我们也可以用or来代替找出在学生的系在CS和MA的学生。

3.3Order by 字句

用户可以使用order by语句来进行对查询结构的列进行升序(ASC)或者降序(DESC)

【例子16】从course表中,查找出课程号2及其的学生成绩,结果按分数降序 排列。

对于空值,若按升序排列,含空值的元组会最后显示。若降序排列,空值的元组会最先显示。

3.4 集合函数(Aggregate function)

SQL 提供了许多的集合函数,主要有:

Count([Distinct|All]*) 统计元组个数

Count([Distinct|All]* <列名>) 统计一列中值的个数

Sum([Distinct|All]* <列名>)计算一列值的综合

Avg([Distinct|All]* <列名>) 计算一列值的平均值

Max([Distinct|All]* <列名>) 求一列值中最大值

Min([Distinct|All]* <列名>) 求一列值最小值

【例子17】求student表中的学生数

【例子18】计算选择1号课程的平均成绩

在聚集函数遇到空值的时候,除了count(*),都跳过空值而只是处理非空值。注意where字句中是不能聚集函数作为条件表达式的。

【例子19】求学号为4选修课的总学分数:

3.5 Group by

group by字句将查询结果按某一列或多列的值分组,值相等的为一组。对查询结果分组是为了细化聚集函数的作用。

【例子20】求每个课程号及相应的的选课人数

该语句对查询结果按Cno的值分组,所以具有相同Cno值的元组都为一组,然后对每一组进行统计个数。

如果分组后还需要按照一定的条件对这些组进行刷选,则可以使用having短语指定刷选条件。

【例子21】

这里选用group by字句按照sno进行分组,在用聚合函数count对每一组进行统计,having给出了条件,只有满足条件的组才会显示出来。因为Sno=3的课程人数只有1人,所以没有显示出来。

where和having的区别是:where字句作用于基本表或视图;而having作于元组中(就像我们这里一样)。

3.6 Order By 排序

Order By主要是对一列或多列进行排序。

语法格式如下:

Order by 列名1 [,列名2 。。] [ASC | DESC]

ASC:升序排列(默认方式)

DESC:降序排列

【例22】找出sc表中的所有成绩按照降序排列

当然,你的排列不紧可以是一列,也可以是多列。比如上面,我们先按grade降序排列,然后 接着在按sno降序排列,如下:

OK.

分享到:
评论

相关推荐

    Oracle Database 11g初学者指南--详细书签版

     本书能使读者快捷地掌握oracle database 11g的基础知识。通过自我评估教程,介绍了核心数据库技术、管理员职责、高可用性以及大型数据库特性。本书带领读者循序渐进地学习数据库设置、管理、编程、备份和恢复。还...

    深入解析Oracle.DBA入门进阶与诊断案例

    针对数据库的启动和关闭、控制文件与数据库初始化、参数及参数文件、数据字典、内存管理、Buffer Cache与Shared Pool原理、重做、回滚与撤销、等待事件、性能诊断与SQL优化等几大Oracle热点主题,本书从基础知识入手...

    深入解析OracleDBA入门进阶与诊断案例 3/4

    包括详细的操作步骤,具有很强的实战性和可操作性,适用于具备一定数据库基础、打算深入学习Oracle技术的数据库从业人员,尤其适用于入门、进阶以及希望深入研究Oracle技术的数据库管理人员。 目录 第1章 数据库的...

    深入解析OracleDBA入门进阶与诊断案例 2/4

    包括详细的操作步骤,具有很强的实战性和可操作性,适用于具备一定数据库基础、打算深入学习Oracle技术的数据库从业人员,尤其适用于入门、进阶以及希望深入研究Oracle技术的数据库管理人员。 目录 第1章 数据库的...

    深入解析OracleDBA入门进阶与诊断案例 4/4

    包括详细的操作步骤,具有很强的实战性和可操作性,适用于具备一定数据库基础、打算深入学习Oracle技术的数据库从业人员,尤其适用于入门、进阶以及希望深入研究Oracle技术的数据库管理人员。 目录 第1章 数据库的...

    2009.6.19—30举办3S研讨会暨Google Earth与Google Map等仿真建模与共享及ARCGIS与遥感高级程序员培训班

    3、以ARCCIS9的功能结构主线,学习利用ARCCIS进行数据输入,数据编辑,地图配标,投影转换,数据转换,数据显示(包括三维显示)与制图,数据查询与分析,数据输出等一系列操作。(以ARCCIS在农业中的应为例介绍) ...

    java面试题以及技巧

    │ 学习Struts提供的和Form相关标签.txt │ 日企编码规范.doc │ 电信盈科面试题.pdf │ 速算.txt │ 面试题URL.txt │ ├─Javascript │ │ javascript资料(源码,教材,ppt).rar │ │ │ └─javascript资料...

    java面试题目与技巧1

    │ 学习Struts提供的和Form相关标签.txt │ 日企编码规范.doc │ 电信盈科面试题.pdf │ 速算.txt │ 面试题URL.txt │ ├─Javascript │ │ javascript资料(源码,教材,ppt).rar │ │ │ └─javascript资料...

    java面试题及技巧4

    │ 学习Struts提供的和Form相关标签.txt │ 日企编码规范.doc │ 电信盈科面试题.pdf │ 速算.txt │ 面试题URL.txt │ ├─Javascript │ │ javascript资料(源码,教材,ppt).rar │ │ │ └─javascript资料...

    java面试题及技巧3

    │ 学习Struts提供的和Form相关标签.txt │ 日企编码规范.doc │ 电信盈科面试题.pdf │ 速算.txt │ 面试题URL.txt │ ├─Javascript │ │ javascript资料(源码,教材,ppt).rar │ │ │ └─javascript资料...

    java面试题以及技巧6

    │ 学习Struts提供的和Form相关标签.txt │ 日企编码规范.doc │ 电信盈科面试题.pdf │ 速算.txt │ 面试题URL.txt │ ├─Javascript │ │ javascript资料(源码,教材,ppt).rar │ │ │ └─javascript资料...

Global site tag (gtag.js) - Google Analytics