数据查询语言(Oracle VS MySQL)
数据查询语言(Oracle VS MySQL)
简单查询
假设有这样一张表students:
STUDENT_ID MONITOR_ID NAME SEX DOB SPECIALTY
---------- ---------- ---------- ------ -------------- ----------
10101 王晓芳 女 07-5月 -88 计算机
10205 李秋枫 男 25-11月-90 自动化
10102 10101 刘春苹 女 12-8月 -91 计算机
10301 高山 男 08-10月-90 机电工程
10207 10205 易做图 男 03-4月 -87 自动化
10112 10101 张纯玉 男 21-7月 -89 计算机
10318 10301 张冬云 女 26-12月-89 机电工程
10103 10101 王天仪 男 26-12月-89 计算机
10201 10205 赵风雨 男 25-10月-90 自动化
10105 10101 韩刘 男 03-8月 -91 计算机
10311 10301 张杨 男 08-5月 -90 机电工程
10213 10205 高淼 男 11-3月 -87 自动化
10212 10205 欧阳春岚 女 12-3月 -89 自动化
10314 10301 赵迪帆 男 22-9月 -89 机电工程
10312 10301 白菲菲 女 07-5月 -88 机电工程
10328 10301 曾程程 男 机电工程
10128 10101 白昕 男 计算机
10228 10205 林紫寒 女 自动化
查询表中所有信息
select * from [tableName];
eg: select * from students;
显示指定列的信息:
select [columnName1 <as otherName1>,columnName2 <as otherName2>, ...] from [tableName];
columnName列名, columnName <as otherName>表示将columnName这个列名改成别名otherName,如果别名otherName有大小之分,或者 包含特殊字符或空格,则别名必须用""引上;如果不改名则可以省略 <as otherName>;
eg:select student_id, monitor_id as 班长ID, name as 姓名 from students;
空值处理
空值(NULL)用来在数据库中表示未知或未确定的值。任何类型的列,只要没有使用非空(NOT NULL)或主键(PRIMARY KEY)完整性限制,都可能出现空值(NULL).
空值没有数据类型,在数据库中表示未知或未确定的值,无论是数字类型、文本类型或日期类型,都可以用统一的空值(NULL)表示。
1.如果表中某列没有使用非空(NOT NULL)或主键(PRIMARY KEY)完整性限制,其默认值为空值。使用insert语句插入数据时未指定该列的值,则其值为空值;指定的列,如果其值确实为空,则可以用NULL表示;使用UPDATE语句将表中某列数据改成空值,可以用NULL表示。
2.空值参与运算时,如果在算术表达式中,其结果为宿空值,Oracle中不显示任何值,MySQL上显示NULL。如果在字符串连接表达式中,Oracle将其作为空串处理;
MySQL中好像没有字符串连接的操作,但在搜索的结果中表示成为NULL。为了正确解决上述因为NULL参加运算时出现的问题,Oracle提供了3个函数可以进行处理。3个函数的用法如下:
(1).NVL(expr1, expr2);
expr1, expr2为函数参数表达式,可以是任意的Oracle内部数据类型,但expr1与expr2的数据类型必须要匹配;
函数的功能:如果expr1为NULL,则返回expr2的值,否则如果不为NULL则返回expr1的值。
eg.有teachers表如下:
TEACHER_ID NAME TITLE HIRE_DATE BONUS WAGE DEPARTMENT_ID
------ -------- ------ -------------- ---------- ---------- -------------
10210 杨文化 教授 03-10月-89 1000 3100 102
10206 崔天 助教 05-9月 -00 500 1900 102
10209 孙晴碧 讲师 11-5月 -98 600 2500 102
10207 张珂 讲师 16-8月 -97 700 2700 102
10308 齐沈阳 高工 03-10月-89 1000 3100 103
10306 车东日 助教 05-9月 -01 500 1900 103
10309 臧海涛 工程师 29-6月 -99 600 2400 103
10307 赵昆 讲师 18-2月 -96 800 2700 103
10128 王晓 05-9月 -07 1000 101
10328 张笑 29-9月 -07 1000 103
10228 赵天宇 18-9月 -07 1000 102
SQL> SELECT name AS "姓名", NVL(bonus,0)+wage AS "月总收入" FROM teachers;
姓名 月总收入
-------- ----------
杨文化 4100
崔天 2400
孙晴碧 3100
张珂 3400
齐沈阳 4100
车东日 2400
臧海涛 3000
赵昆 3500
王晓 1000
张笑 1000
赵天宇 1000
(2).NVL2(expr1, expr2, expr3);
expr1, expr2为函数参数表达式,取Oracle内部数据类型,但expr2、expr3的数据类型必须要与expr1的数据类型相匹配;
函数的功能:如果expr1的值为空,则返回expr3的值;如果expr1的值不为空,则返回expr2的值。
SQL> SELECT name AS "姓名", NVL2(bonus,bonus+wage,wage) AS "月总收入" FROM teachers;
姓名 月总收入
-------- ----------
杨文化 4100
崔天 2400
孙晴碧 3100
张珂 3400
齐沈阳 4100
车东日 2400
臧海涛 3000
赵昆 3500
王晓 1000
张笑 1000
赵天宇 1000
(3).COALESCE(expr, [, expr] ...);
其中,expr1、expr2、...为函数参数表达式,取Oracle的内部数据类型;函数功能:返回参数列表中的第一个非空值。如果表达式都是空值,则返回一个空值。
条件查询
select * from [tableName] where [condition];
select [columnName1 <as otherName1>,columnName2 <as otherName2>, ...] from [tableName] where [condition];
简单查询
假设有这样一张表students:
STUDENT_ID MONITOR_ID NAME SEX DOB SPECIALTY
---------- ---------- ---------- ------ -------------- ----------
10101 王晓芳 女 07-5月 -88 计算机
10205 李秋枫 男 25-11月-90 自动化
10102 10101 刘春苹 女 12-8月 -91 计算机
10301 高山 男 08-10月-90 机电工程
10207 10205 易做图 男 03-4月 -87 自动化
10112 10101 张纯玉 男 21-7月 -89 计算机
10318 10301 张冬云 女 26-12月-89 机电工程
10103 10101 王天仪 男 26-12月-89 计算机
10201 10205 赵风雨 男 25-10月-90 自动化
10105 10101 韩刘 男 03-8月 -91 计算机
10311 10301 张杨 男 08-5月 -90 机电工程
10213 10205 高淼 男 11-3月 -87 自动化
10212 10205 欧阳春岚 女 12-3月 -89 自动化
10314 10301 赵迪帆 男 22-9月 -89 机电工程
10312 10301 白菲菲 女 07-5月 -88 机电工程
10328 10301 曾程程 男 机电工程
10128 10101 白昕 男 计算机
10228 10205 林紫寒 女 自动化
查询表中所有信息
select * from [tableName];
eg: select * from students;
显示指定列的信息:
select [columnName1 <as otherName1>,columnName2 <as otherName2>, ...] from [tableName];
columnName列名, columnName <as otherName>表示将columnName这个列名改成别名otherName,如果别名otherName有大小之分,或者 包含特殊字符或空格,则别名必须用""引上;如果不改名则可以省略 <as otherName>;
eg:select student_id, monitor_id as 班长ID, name as 姓名 from students;
空值处理
空值(NULL)用来在数据库中表示未知或未确定的值。任何类型的列,只要没有使用非空(NOT NULL)或主键(PRIMARY KEY)完整性限制,都可能出现空值(NULL).
空值没有数据类型,在数据库中表示未知或未确定的值,无论是数字类型、文本类型或日期类型,都可以用统一的空值(NULL)表示。
1.如果表中某列没有使用非空(NOT NULL)或主键(PRIMARY KEY)完整性限制,其默认值为空值。使用insert语句插入数据时未指定该列的值,则其值为空值;指定的列,如果其值确实为空,则可以用NULL表示;使用UPDATE语句将表中某列数据改成空值,可以用NULL表示。
2.空值参与运算时,如果在算术表达式中,其结果为宿空值,Oracle中不显示任何值,MySQL上显示NULL。如果在字符串连接表达式中,Oracle将其作为空串处理;
MySQL中好像没有字符串连接的操作,但在搜索的结果中表示成为NULL。为了正确解决上述因为NULL参加运算时出现的问题,Oracle提供了3个函数可以进行处理。3个函数的用法如下:
(1).NVL(expr1, expr2);
expr1, expr2为函数参数表达式,可以是任意的Oracle内部数据类型,但expr1与expr2的数据类型必须要匹配;
函数的功能:如果expr1为NULL,则返回expr2的值,否则如果不为NULL则返回expr1的值。
eg.有teachers表如下:
TEACHER_ID NAME TITLE HIRE_DATE BONUS WAGE DEPARTMENT_ID
------ -------- ------ -------------- ---------- ---------- -------------
10210 杨文化 教授 03-10月-89 1000 3100 102
10206 崔天 助教 05-9月 -00 500 1900 102
10209 孙晴碧 讲师 11-5月 -98 600 2500 102
10207 张珂 讲师 16-8月 -97 700 2700 102
10308 齐沈阳 高工 03-10月-89 1000 3100 103
10306 车东日 助教 05-9月 -01 500 1900 103
10309 臧海涛 工程师 29-6月 -99 600 2400 103
10307 赵昆 讲师 18-2月 -96 800 2700 103
10128 王晓 05-9月 -07 1000 101
10328 张笑 29-9月 -07 1000 103
10228 赵天宇 18-9月 -07 1000 102
SQL> SELECT name AS "姓名", NVL(bonus,0)+wage AS "月总收入" FROM teachers;
姓名 月总收入
-------- ----------
杨文化 4100
崔天 2400
孙晴碧 3100
张珂 3400
齐沈阳 4100
车东日 2400
臧海涛 3000
赵昆 3500
王晓 1000
张笑 1000
赵天宇 1000
(2).NVL2(expr1, expr2, expr3);
expr1, expr2为函数参数表达式,取Oracle内部数据类型,但expr2、expr3的数据类型必须要与expr1的数据类型相匹配;
函数的功能:如果expr1的值为空,则返回expr3的值;如果expr1的值不为空,则返回expr2的值。
SQL> SELECT name AS "姓名", NVL2(bonus,bonus+wage,wage) AS "月总收入" FROM teachers;
姓名 月总收入
-------- ----------
杨文化 4100
崔天 2400
孙晴碧 3100
张珂 3400
齐沈阳 4100
车东日 2400
臧海涛 3000
赵昆 3500
王晓 1000
张笑 1000
赵天宇 1000
(3).COALESCE(expr, [, expr] ...);
其中,expr1、expr2、...为函数参数表达式,取Oracle的内部数据类型;函数功能:返回参数列表中的第一个非空值。如果表达式都是空值,则返回一个空值。
条件查询
select * from [tableName] where [condition];
select [columnName1 <as otherName1>,columnName2 <as otherName2>, ...] from [tableName] where [condition];
where子句用于指定查询条件,condition是具体的条件表达式。当condition的值值为true时检索相应的数据。
比较条件
功能描述
例子
算术比较条件
=
等于
Name=’张三’
>
大于
Bonus>500
>=
大于等于
Bonus>=500
<
小于
Bonus<1000
<=
小于等于
Hire_date < ‘06-7月-2001’
<>、
不等于
Bonus>=1000
包含测试
IN
在指定的集合中
Student_id in(10101、10102)
NOT IN
不在指定的集合中
Student_id not in(10101、10102)
范围测试
BETWEEN ... AND
在指定的范围内
Age between 10 and 40
NOT BETWEEN ... AND
不在指定的范围内
Age between 0 and 15
匹配测试
LIKE
与指定模式匹配
Name like ‘罗%’
NOT LIKE
不与指定模式匹配
Name not lik ‘李%’
NULL测试
IS NULL
是NULL值
Name is null
IS NOT NULL
不是NULL值
Name is not null
逻辑运算符
AND
逻辑与运算
Bouns >500 and bounus < =1000
OR
逻辑或运算
Bouns>500 or name like ‘王%’
NOT
逻辑非运算
Not bonus=500
功能描述
例子
算术比较条件
=
等于
Name=’张三’
>
大于
Bonus>500
>=
大于等于
Bonus>=500
<
小于
Bonus<1000
<=
小于等于
Hire_date < ‘06-7月-2001’
<>、
不等于
Bonus>=1000
包含测试
IN
在指定的集合中
Student_id in(10101、10102)
NOT IN
不在指定的集合中
Student_id not in(10101、10102)
范围测试
BETWEEN ... AND
在指定的范围内
Age between 10 and 40
NOT BETWEEN ... AND
不在指定的范围内
Age between 0 and 15
匹配测试
LIKE
与指定模式匹配
Name like ‘罗%’
NOT LIKE
不与指定模式匹配
Name not lik ‘李%’
NULL测试
IS NULL
是NULL值
Name is null
IS NOT NULL
不是NULL值
Name is not null
逻辑运算符
AND
逻辑与运算
Bouns >500 and bounus < =1000
OR
逻辑或运算
Bouns>500 or name like ‘王%’
NOT
逻辑非运算
Not bonus=500
单一条件查询
在condition中,值使用一个比较符构成的条件查询条件。如:
SQL> select * from students where student_id<=10128;
STUDENT_ID MONITOR_ID NAME SEX DOB SPECIALTY
---------- ---------- ---------- ------ -------------- ----------
10101 王晓芳 女 07-5月 -88 计算机
10102&
SQL> select * from students where student_id<=10128;
STUDENT_ID MONITOR_ID NAME SEX DOB SPECIALTY
---------- ---------- ---------- ------ -------------- ----------
10101 王晓芳 女 07-5月 -88 计算机
10102&
上一个:oracle索引详解-1
下一个:oracle日常检查脚本
- 更多Oracle疑问解答:
- 运行exp备份oracle数据库提示oracle-12154错误
- 有没有,生产Oracle Rman 备份脚本的工具啊!
- 初学orcle,希望有大大帮忙解说一下详细步骤,从登录oracle到创建表的过程
- oracle语句问题:一张user表,三个字段,id,name,time,插入记录比如:张三2007,李四2008,张三2011
- 如何写一个ORACLE触发器同步两个表中的数据?
- oracle 如何查看一个服务器上有多少个数据库.
- oracle 创建包的时候错误 求解
- oracle 重复列的问题
- oracle 中如何查处2星期前的数据
- 请教oracle数据库安装中的问题
- 请问谁能提供给我标准的oracle ERP的数据库表结构并详细说明各表主要的作用?
- 安装oracle遇到的问题 invalid entry CRC (expected 0x3e12e795 but got 0x9db0e9fd)
- 我的是ORACLE 10G,在RMAN中如何按指定的时间恢复数据文件啊?
- oracle为什么没有自动增长列
- oracle快捷键都有哪些啊?