Oracle简单SQL语句(详细!!!)


前言

此篇文章是我在B站学习时所做的笔记,主要对Oracle数据库部分SQL语句做了简单的介绍,文中的数据库为已建好的数据库,为方便演示用的。此篇文章仅供学习参考,禁止转载!


提示:以下是本篇文章正文内容,下面案例可供参考

一、Sql语句基础

  1. SQL被称为结构化查询语句
  2. SQL是操作和检索关系型数据库的标准语言
  3. 使用SQL语句,程序员和数据库管理员可以完成如下的任务:

在这里插入图片描述

二、Oracle中的主要的数据类型

在这里插入图片描述

三、Sql语句分类

在这里插入图片描述

四、SQL语句的书写规则

  1. 在Oracle数据库中,Sql语句大小写不敏感
  2. Sql语句可单行或多行书写
  3. 在Sql语句中,关键字不能跨多行或缩写
  4. 为了提高可读性,一般关键字大写,其他小写
  5. 子句通常位于独立行,便于编辑,提高可读性
  6. 空格和缩进使程序易读

注意

SQL语句是不区分大小写的,包括登录的用户名,密码都是不区分大小写的,且要注意输入的符号要英文半角格式。

SeLEcT * FrOm A_CHENS;
--等价于
SELECT * FROM A_CHENS;

五、运算符的优先级

  1. 乘法和除法的优先级高于加法和减法
  2. 同级运算的顺序是从左到右
  3. 表达式中使用括号可强行改变优先级的运算顺序

六、空值的使用

知识点
  1. 空值是指不可用、未分配的值
  2. 空值不等于零或空格
  3. 任意类型都可以支持空值
空值的运算表达式
  1. 包括空值的任何算术表达式都等于空
  2. 包括空值的连接表达式等于与空字符串连接,也就是原来的字符串

七、文本字符串的使用

  1. 文本字符串是一个包括在SELECT查询列表中的字符,表达式,或数字
  2. 日期和字符型文本字符串必须用单引号扩起来(例如:十五、案例二)
  3. 每返回一条记录文本字符串被显示一次

八、输出结果中列标题的默认显示

1、Sql*plus的默认显示
  • Date和character型数据左对齐
  • Numeric型数据右对齐
  • 列标题默认显示为大写(如:EMPNO,ENAME,JOB…)
2、iSql*plus的默认显示
  • 列标题缺省居中对齐
  • 列标题默认显示为大写

摘自B站在这里插入图片描述

九、Oracle中简单的创建表

案例:新建表
CREATE TABLE A_CHENS (
    ID       NUMBER(4)  PRIMARY KEY,
    NAME     VARCHAR(10),
    SEX      CHAR(2),
    ADDR     VARCHAR2(20),
    BIRTHDAY DATE,
    SAL      NUMBER(8,2)
);

注意:

  1. 每个字段后面必须加分号。
  2. 表里边就是一个一个的字段。

步骤一:点击选择“My objects”
步骤一
步骤二:点击左上角“File-New-SQL Window”

步骤二
步骤三:在弹出的SQL Window窗口中输入sql建表语句,选中所有语句,点击左上角齿轮运行

步骤三
步骤四:点击Tables,右键refresh刷新一下,找到新建的表CHENS,右键点击“Edit data”可查看表内容。

步骤四
步骤四

十、Oracle简单的删除表

案例:删除表
DROP TABLE A_CHENS;

步骤:在SQL Window窗口中输入删除语句,选中所有语句,点击左上角齿轮运行,即可删除。

在这里插入图片描述

删除前
在这里插入图片描述
删除后
在这里插入图片描述

十一、Oracle中对表的简单查询操作

案例一:查询表的数据
SELECT * FROM A_CHENS;

步骤:在SQL Window窗口中输入查询语句,选中所有语句,点击左上角齿轮运行,即可显示结果。

在这里插入图片描述


案例二:查询表的结构

注意:只能在命令行的模式下使用

DESC A_CHENS;

步骤一:点击左上角“File-New-Command Window”。

在这里插入图片描述

步骤二:在弹出的Command Window窗口中输入查询语句,即可得到结果。

在这里插入图片描述

十二、从表中查询部分字段

原表数据:
在这里插入图片描述

案例:查询部分字段

注意:此表A_CJJ_3为已建好表

--SELECT 语句的使用
--从表中查询部分的字段
SELECT CHENGJI,XUENIAN,XINGMING,KEMU
FROM A_CJJ_3;

步骤:在SQL Window窗口中输入需查询部分字段的语句,选中所有语句,点击左上角齿轮运行,即可得结果。

在这里插入图片描述

十三、对表中数据进行简单运算

案例:数据进行简单运算
--在查询过程中,对于数值型的数据,可以执行+,-,*,/运算
SELECT CHENGJI,CHENGJI*2,XUENIAN,XINGMING,KEMU
FROM A_CJJ_3;

步骤:在SQL Window窗口中输入需运算的语句,选中所有语句,点击左上角齿轮运行,即可得结果。

在这里插入图片描述

十四、定义字段的别名

知识点
  1. 改变列的标题头
  2. 用于表示计算结果的含义
  3. 作为列的别名
  4. 如果别名中使用特殊字符,或者是强制大小写敏感,或有空格时,都需加双引号

注意:如果字符型写小写不加双引号,会强制输出大写表名,若需保持大小写或小写,则需加双引号。

案例:起别名
--可以给查询字段起别名,有不同的方式,可以不用"",也可以不用"",可以用As(as),也可以不用As
SELECT CHENGJI "ChengJi",CHENGJI*2 两倍成绩,XUENIAN "学年",XINGMING as 姓名,KEMU As 科目,PINGSHIFEN psf
FROM A_CJJ_4;

步骤:在SQL Window窗口中输入命名语句,选中所有语句,点击左上角齿轮运行,即可得结果。

在这里插入图片描述

十五、字符串的连结操作符使用

知识点
  1. 将列或字符与其它列连结
  2. 用双竖线表示(||)
  3. 产生的结果列是另一个字符表达式
案例一:简单合并运算
  • 用 || 可以将两列或多列查询结果合并到一起
--用||可以将两列或多列查询结果合并到一起
SELECT XUENIAN "学年",XINGMING as 姓名,XINGMING||XUEHAO 学生信息,XUEHAO AS 学号
FROM A_CJJ_4;

(注意:此处的表A_CJJ_4是已建好的)

结果在这里插入图片描述

案例二:字符数据运用及空值的运算
  • 在连接表达式中出现字符数据,字符型的数据必须要使用单引号’ ’
  • 在连接表达式中出现null,就是原来的字符型数据,即原来是null,现在还是null类型
--在连接表达式中出现字符数据,字符型的数据必须要使用单引号''
--在连接表达式中出现null,就是原来的字符型数据,即原来是null,现在还是null类型
SELECT XUENIAN 学年,XINGMING 姓名,XINGMING||'的平时分是'||PINGSHIFEN "学生信息1",PINGSHIFEN 平时分
FROM A_CJJ_4;

结果:
在这里插入图片描述

十六、对表中数据进行修改

SELECT * 
FROM A_CJJ_4
FOR UPDATE;

十七、 对日期型数据进行加减运算

案例一
  • 对于日期型的数据可以使用+,-运算符
  • 1个日期 ±1个数值(就是±1个天数)=1个新的日期
--对于日期型的数据可以使用+,-运算符
--1.一个日期 +— 一个数值(就是+-一个天数)=一个新的日期
SELECT NAME,ADDR 地址,BIRTHDAY "今天",(BIRTHDAY+7)"过七天"
FROM A_CHENS;

结果:
在这里插入图片描述

案例二
  • SYSDATE取得系统当前日期
  • 2个日期型的数据相减,得到的是两者之间相差的天数
  • 2个日期型的数据不能相加,日期型的数据不能进行乘除运算
--SYSDATE取得系统当前日期
--2.两个日期型的数据相减,得到的是两者之间相差的天数
--2个日期型的数据不能相加,日期型的数据不能进行乘除运算
SELECT NAME,ADDR 地址,BIRTHDAY "今天",(SYSDATE-BIRTHDAY)已存活天数
FROM A_CHENS;

结果:
在这里插入图片描述

十八、去除重复行

知识点
  • 缺省情况下查询显示所有行,包括重复行,使用DISTINCT关键字可从查询结果中清除重复行
  • DISTINCT的作用范围是后面所有宇段的组合

查看表A_CHENS的原始数据

SELECT * FROM A_CHENS;

结果:
在这里插入图片描述

案例一:去除单列重复数据
--去除单列重复数据
SELECT DISTINCT NAME
FROM A_CHENS;

结果:
在这里插入图片描述

案例二:去除多列重复数据
--去除多列重复数据
SELECT DISTINCT ADDR,BIRTHDAY
FROM A_CHENS;

结果:
在这里插入图片描述

十九、限定所选择查询记录

知识点

1、Where中的字符串日期值

  • 字符串和日期要用单引号扩起来
  • 字符串是大小写敏感的,日期值是格式敏感的
  • 缺省的日期格式是’DD-MON-YY’

2、使用BETWEEN运算符

  • 使用BETWEEN运算符显示某一值域范围的记录

3、使用IN运算符

  • 使用IN运算符获得匹配列表值的记录

4、使用LIKE运算符

  • 使用LIKE运算符执行通配查询
  • 查询条件可包含文字字符或数字
    (%)可表示零或多个字符
    (_)可表示一个字符

5、使用IS NULL运算符

  • 查询包含空值的记录

案例一:注意单引号
  • 对于字符型的数据和日期型的数据必须使用单引号’ ’

正确:

--使用WHERE子句对数据进行过滤
--对于字符型的数据和日期型的数据必须使用单引号''
SELECT * 
FROM A_CHENS
WHERE NAME='陈一';

结果:

在这里插入图片描述
错误语句:

SELECT * 
FROM A_CHENS
WHERE PASSWORD=chengyi;

结果:
在这里插入图片描述

案例二:字符型数据
  • 字符型的数据对大小写是敏感的

正确:

--字符型的数据对大小写是敏感的
SELECT * 
FROM A_CHENS
WHERE PASSWORD='chenyi';

结果:
在这里插入图片描述


例子:

SELECT * 
FROM A_CHENS
WHERE PASSWORD='CHENGYI';

结果:
在这里插入图片描述

案例三:日期型数据

正确:

--对日期型数据,格式是敏感的,使用日期型数据的格式是DD-MM-YYY(日-月-年)
SELECT * 
FROM A_CHENS
WHERE BIRTHDAY='20-7月-2001';

结果:
在这里插入图片描述

错误一: 输入日期型格式不对

--对日期型数据,格式是敏感的,使用日期型数据的格式是DD-MM-YYY(日-月-年)
SELECT * 
FROM A_CHENS
WHERE BIRTHDAY='2001-7-20';

结果:
在这里插入图片描述

错误二: 由于系统设置中文的编码格式,缺少“月”字

--对日期型数据,格式是敏感的,使用日期型数据的格式是DD-MM-YYY(日-月-年)
SELECT * 
FROM A_CHENS
WHERE BIRTHDAY='20-7-2001';

结果:
在这里插入图片描述

案例四:在查询条件中使用比较运算符

where中的比较运算符

运算符含义
=等于
>大于
>=大于等于
<小于
<=小于等于
<> 或 !=不等于
--在查询条件中使用其他的比较运算符
SELECT *
FROM A_CJJ_4
WHERE CHENGJI >=80;

SELECT *
FROM A_CJJ_4
WHERE CHENGJI !=90;
--等价于
SELECT *
FROM A_CJJ_4
WHERE CHENGJI <>90;

其他的比较运算符

运算符含义
BETWEEN…AND…在两值之间(包含)
IN(list)匹配列出的值
LIKE匹配一个字符模式
IS NULL是空值
--使用BETWEEN...AND
SELECT *
FROM A_CJJ_4
WHERE CHENGJI BETWEEN 80 AND 100;
--等价于
--在Oracle中用AND来执行&&的功能
SELECT *
FROM A_CJJ_4
WHERE CHENGJI >=80 AND CHENGJI<=100;
------------------------------------------------
--使用IN子查询学科为数学和java的同学的全部信息
SELECT *
FROM A_CJJ_4
WHERE KEMU IN ('数学''java');
------------------------------------------------
--在Oracle中用OR来执行||的功能
SELECT *
FROM A_CJJ_4
WHERE KEMU='java' OR KEMU='英语';
------------------------------------------------
--LIKE用于字符型数据的查询,可以执行模糊查询
-- % 表示0个或多个字符
SELECT *
FROM A_CJJ_4
WHERE KEMU LIKE'%A%';

SELECT *
FROM A_CJJ_4
WHERE KEMU LIKE'A%';

-- _表示一个字符
SELECT *
FROM A_CJJ_4
WHERE KEMU LIKE'_A%';
----------------------------------------
--转义字符的使用,输出数据中含有%的信息
SELECT *
FROM A_CJJ_4
WHERE NAME LIKE '%\%%' ESCAPE '\';
----------------------------------------
--对于空值,要使用IS NULL进行比较
SELECT *
FROM A_CHENS
WHERE PASSWORD IS NULL;
案例五:逻辑运算符
运算符含义
AND &&如果组合的条件都是TRUE,返回TRUE
OR ||如果组合的条件之一是TRUE,返回TRUE
NOT !如果下面的条件是FALSE,返回TRUE
--使用NOT运算符

SELECT *
FROM A_CJJ_4
WHERE CHENGJI NOT BETWEEN 80 AND 100;
--等价于
SELECT *
FROM A_CJJ_4
WHERE CHENGJI <80 OR CHENGJI>100;
--------------------------------------------
SELECT *
FROM A_CJJ_4
WHERE KEMU NOT IN ('数学''java');
--等价于
SELECT *
FROM A_CJJ_4
WHERE KEMU != '数学' AND KEMU != 'java';
--------------------------------------------
SELECT *
FROM A_CHENS
WHERE PASSWORD IS NOT NULL;

优先级规则

次序运算符
1所有的比较运算
2NOT
3AND
4OR

(注意:括号将跨越所有优先级规则)

--NOT AND OR的运算顺序
SELECT *
FROM A_CHENS
WHERE NAME='陈一' AND PASSWORD='chenyi';

--admin' OR 'x'='x
--SQL注入攻击
SELECT *
FROM A_CHENS
WHERE NAME='陈一' OR ('X'='X' AND PASSWORD='chenyi');
--  = WHERE NAME='陈一' OR 'X'='X' AND PASSWORD='chenyi';

二十、对查询数据的排序

知识点
  • 使用ORDER BY子句将记录排序
    ASC:升序,缺省
    DESC:降序
  • ORDER BY子句出现在SELECT语句的最后
  • 使用列的别名排序
案例一:普通升降序
--对查询后的数据进行排序,使用ORDER BY子句
SELECT *
FROM A_CJJ_4
WHERE CHENGJI>80
ORDER BY CHENGJI;

--显示的时候默认的按照指定的字段升序排列
SELECT *
FROM A_CJJ_4
ORDER BY CHENGJI;
--用指定的字段显示的指定升序排序
SELECT *
FROM A_CJJ_4
ORDER BY CHENGJI ASC;
--------------------------------------------
--用指定的字段显示的指定降序排序
SELECT *
FROM A_CJJ_4
ORDER BY CHENGJI DESC;
---------------------------------------------

案例二:按照多个字段进行排序
--可以按照多个字段进行排序
--此处表示的是,先让CHENGJI按升序排序,PINGSHIFEG不管顺序,
--若CHENGJI有相同的,PINGSHIFEN再按升序排序
SELECT *
FROM A_CJJ_4
ORDER BY CHENGJI,PINGSHIFEN;
案例三:使用字段的别名来进行排序
--使用字段的别名来进行排序
SELECT XINGMING,KEMU,(CHENGJI*0.6+PINGSHIFEN*0.4)"总分"
FROM A_CJJ_4
ORDER BY "总分"

总结

在本章的一开始创建了最简单的表,对表有了一个基本的认识。对Sql语句也做了简单介绍,讲述了Sql的分类和Sql*Plus的基本特点,用一些例子描述了最简单的Select查询语句的基本用法,并在此基础上进行了语句扩充,增加了Where子句以便能够执行带有限制条件的查询,增加了Order By子句以便对查询出的数据进行排序显示。


如若侵权,请及时与我联系。
此篇文章仅供学习参考,禁止转载!

  • 31
    点赞
  • 151
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蜗牛_Chenpangzi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值