文章目录
- 前言
- 一、Sql语句基础
- 二、Oracle中的主要的数据类型
- 三、Sql语句分类
- 四、SQL语句的书写规则
- 注意
- 五、运算符的优先级
- 六、空值的使用
- 知识点
- 空值的运算表达式
- 七、文本字符串的使用
- 八、输出结果中列标题的默认显示
- 1、Sql*plus的默认显示
- 2、iSql*plus的默认显示
- 九、Oracle中简单的创建表
- 案例:新建表
- 十、Oracle简单的删除表
- 案例:删除表
- 十一、Oracle中对表的简单查询操作
- 案例一:查询表的数据
- 案例二:查询表的结构
- 十二、从表中查询部分字段
- 案例:查询部分字段
- 十三、对表中数据进行简单运算
- 案例:数据进行简单运算
- 十四、定义字段的别名
- 知识点
- 案例:起别名
- 十五、字符串的连结操作符使用
- 知识点
- 案例一:简单合并运算
- 案例二:字符数据运用及空值的运算
- 十六、对表中数据进行修改
- 十七、 对日期型数据进行加减运算
- 案例一
- 案例二
- 十八、去除重复行
- 知识点
- 案例一:去除单列重复数据
- 案例二:去除多列重复数据
- 十九、限定所选择查询记录
- 知识点
- 案例一:注意单引号
- 案例二:字符型数据
- 案例三:日期型数据
- 案例四:在查询条件中使用比较运算符
- 案例五:逻辑运算符
- 二十、对查询数据的排序
- 知识点
- 案例一:普通升降序
- 案例二:按照多个字段进行排序
- 案例三:使用字段的别名来进行排序
- 总结
前言
此篇文章是我在B站学习时所做的笔记,主要对Oracle数据库部分SQL语句做了简单的介绍,文中的数据库为已建好的数据库,为方便演示用的。此篇文章仅供学习参考,禁止转载!
提示:以下是本篇文章正文内容,下面案例可供参考
一、Sql语句基础
- SQL被称为结构化查询语句
- SQL是操作和检索关系型数据库的标准语言
- 使用SQL语句,程序员和数据库管理员可以完成如下的任务:
二、Oracle中的主要的数据类型
三、Sql语句分类
四、SQL语句的书写规则
- 在Oracle数据库中,Sql语句大小写不敏感
- Sql语句可单行或多行书写
- 在Sql语句中,关键字不能跨多行或缩写
- 为了提高可读性,一般关键字大写,其他小写
- 子句通常位于独立行,便于编辑,提高可读性
- 空格和缩进使程序易读
注意
SQL语句是不区分大小写的,包括登录的用户名,密码都是不区分大小写的,且要注意输入的符号要英文半角格式。
SeLEcT * FrOm A_CHENS;
--等价于
SELECT * FROM A_CHENS;
五、运算符的优先级
- 乘法和除法的优先级高于加法和减法
- 同级运算的顺序是从左到右
- 表达式中使用括号可强行改变优先级的运算顺序
六、空值的使用
知识点
- 空值是指不可用、未分配的值
- 空值不等于零或空格
- 任意类型都可以支持空值
空值的运算表达式
- 包括空值的任何算术表达式都等于空
- 包括空值的连接表达式等于与空字符串连接,也就是原来的字符串
七、文本字符串的使用
- 文本字符串是一个包括在SELECT查询列表中的字符,表达式,或数字
- 日期和字符型文本字符串必须用单引号扩起来(例如:十五、案例二)
- 每返回一条记录文本字符串被显示一次
八、输出结果中列标题的默认显示
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)
);
注意:
- 每个字段后面必须加分号。
- 表里边就是一个一个的字段。
步骤一:点击选择“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窗口中输入需运算的语句,选中所有语句,点击左上角齿轮运行,即可得结果。
十四、定义字段的别名
知识点
- 改变列的标题头
- 用于表示计算结果的含义
- 作为列的别名
- 如果别名中使用特殊字符,或者是强制大小写敏感,或有空格时,都需加双引号
注意:如果字符型写小写不加双引号,会强制输出大写表名,若需保持大小写或小写,则需加双引号。
案例:起别名
--可以给查询字段起别名,有不同的方式,可以不用"",也可以不用"",可以用As(as),也可以不用As
SELECT CHENGJI "ChengJi",CHENGJI*2 两倍成绩,XUENIAN "学年",XINGMING as 姓名,KEMU As 科目,PINGSHIFEN psf
FROM A_CJJ_4;
步骤:在SQL Window窗口中输入命名语句,选中所有语句,点击左上角齿轮运行,即可得结果。
十五、字符串的连结操作符使用
知识点
- 将列或字符与其它列连结
- 用双竖线表示(||)
- 产生的结果列是另一个字符表达式
案例一:简单合并运算
- 用 || 可以将两列或多列查询结果合并到一起
--用||可以将两列或多列查询结果合并到一起
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 | 所有的比较运算 |
2 | NOT |
3 | AND |
4 | OR |
(注意:括号将跨越所有优先级规则)
--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子句以便对查询出的数据进行排序显示。
如若侵权,请及时与我联系。
此篇文章仅供学习参考,禁止转载!
更多推荐
Oracle简单SQL语句(详细!!!)
发布评论