yi:Oracle中字符串连接的实现方法
1.和其他数据库系统类似,Oracle字符串连接使用“||”进行字符串拼接,其使用方式和MSSQLServer中的加号“+”一样。
例如:
SELECT '工号为'||FNumber||'的员工姓名为'||FName FROM T_Employee
WHERE FName IS NOT NULL
2.除了“||”,Oracle还支持使用CONCAT()函数进行字符串拼接,比如执行下面的SQL语句:
SELECT CONCAT('工号:',FNumber) FROM T_Employee
如果CONCAT中连接的值不是字符串,Oracle会尝试将其转换为字符串,比如执行下面的SQL语句:
SELECT CONCAT('年龄:',FAge) FROM T_Employee
与MYSQL的CONCAT()函数不同,Oracle的CONCAT()函数只支持两个参数,不支持两个以上字符串的拼接,比如下面的SQL语句在Oracle中是错误的:
SELECT CONCAT('工号为',FNumber,'的员工姓名为',FName) FROM T_Employee
WHERE FName IS NOT NULL
运行以后Oracle会报出下面的错误信息:
参数个数无效
3.如果要进行多个字符串的拼接的话,可以使用多个CONCAT()函数嵌套使用,上面的SQL可以如下改写:
SELECT CONCAT(CONCAT(CONCAT('工号为',FNumber),'的员工姓名为'),FName) FROM
T_Employee
WHERE FName IS NOT NULL
er: 关于“limit” 的使用
limit:是MySQL内置函数,其作用是用于限制查询结果的条数。
1)其语法格式如下:
LIMIT[位置偏移量,]行数
其中,中括号里面的参数是可选参数,位置偏移量是指MySQL查询分析器要从哪一行开始显示,索引值从0开始,即第一条记录位置偏移量是0,第二条记录的位置偏移量是1,依此类推...,第二个参数为“行数”即指示返回的记录条数。
位置偏移量可以理解为跳过前xx条记录(元组).
2)基本用法
/*当没有指定位置偏移量时,只取4条时,可以这样写*/
SELECT * FROM YourTableName LIMIT 4;
/*当指定了位置偏移量时,从第3条起取4条时,可以这样写*/
/*因为索引是从0开始计数的,所以第3条对应的索引就是2*/
SELECT * FROM YourTableName LIMIT 2,4;
3)应用场合:分页 ------------------------
san: SQL union 与 union all操作符
UNION 操作符用于合并两个或多个 SELECT 语句的结果集。
请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。
注释:默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL。
例:
Employees_China:
E_ID | E_Name |
---|---|
01 | Zhang, Hua |
02 | Wang, Wei |
03 | Carter, Thomas |
04 | Yang, Ming |
Employees_USA:
E_ID | E_Name |
---|---|
01 | Adams, John |
02 | Bush, George |
03 | Carter, Thomas |
04 | Gates, Bill |
使用 UNION 命令
实例
列出所有在中国和美国的不同的雇员名:
SELECT E_Name FROM Employees_China
UNION
SELECT E_Name FROM Employees_USA
结果
E_Name |
---|
Zhang, Hua |
Wang, Wei |
Carter, Thomas |
Yang, Ming |
Adams, John |
Bush, George |
Gates, Bill |
注释:这个命令无法列出在中国和美国的所有雇员。在上面的例子中,我们有两个名字相同的雇员,他们当中只有一个人被列出来了。UNION 命令只会选取不同的值。
UNION ALL
UNION ALL 命令和 UNION 命令几乎是等效的,不过 UNION ALL 命令会列出所有的值。
SQL Statement 1
UNION ALL
SQL Statement 2
使用 UNION ALL 命令
实例:
列出在中国和美国的所有的雇员:
SELECT E_Name FROM Employees_China
UNION ALL
SELECT E_Name FROM Employees_USA
结果
E_Name |
---|
Zhang, Hua |
Wang, Wei |
Carter, Thomas |
Yang, Ming |
Adams, John |
Bush, George |
Carter, Thomas |
Gates, Bill |
SI:表空间 ----------SQL Server数据库与Oracle数据库之间最大的区别要属表空间设计
1:表空间是数据库的逻辑划分,一个表空间只能属于一个数据库。所有的数据库对象都存放在指定的表空间中。但主要存放的是表, 所以称作表空间。
2:Oracle数据库中至少存在一个表空间,即SYSTEM的表空间。
3:SQL Server数据库与Oracle数据库之间最大的区别要属表空间设计。Oracle数据库开创性地提出了表空间的设计理念,这为Oracle数据库的高性能做出了不可磨灭的贡献。可以这么说,Oracle中很多优化都是基于表空间的设计理念而实现的。
4:重点:
我们可以在Oracle数据库中,建立不同的表空间,为其设置最大的存储容量,然后把用户归属于这个表空间。如此的话,这个用户的存储容量,就受到这个表空间大小的限制。
面试题:
下面关于表空间错误的说法是:(A)
A 表空间的大小忧他所包含的文件大小所决定
B 用户创建的表都必须存储在某个表空间里
C 如果某张表很大 可以把它放在两个表空间里
D 每个数据库至少要有一个表空间
WU: 关系模型的三种完整性约束
在关系模型中,关系完整性主要是指以下三方面:
1、实体完整性:所谓的实体完整性就是指关系(所谓的关系就是表)的主码不能取空值;
比如学生表的主码通常是取学号为主码
2、参照完整性:是指参照关系中每个元素的外码要么为空(NULL),要么等于被参照关系中某个元素的主码;
比如今天是9月2日是开学日,大学新生刚来报道,在学生表里,有的学生可能还没来得及分配具体的班,所以这些还未来得及分班的学生教务处可以在学生表里的班级属性取空值NULL(空值代表“不确定”),而哪些已分了班的学生就必须取班级表里的某些属性,比如班级类别,即学生属于哪个班。比如取“软件工程”,”计算机技术应用“等等。
参照关系也称为外键表,被参照关系也称为主键表。
3、用户定义的完整性:指对关系中每个属性的取值作一个限制(或称为约束)的具体定义。比如 性别属性只能取”男“或”女“ ,再就是年龄的取值范围,可以取值0-130 ,但不能取负数,因为年龄不可能是负数。
面试题:
关系模型有三类完整性约束: 实体完整性 参照完整性, 和用户完整性 定义外键实现的是__(B)___
A 实体完整性
B 参照完整性
C用户定义的完整性
D 实体完整性 参照完整性 和用户定义的完整性
Liu: "currVal" 与 "nextVal"
1:CurrVal:返回 sequence的当前值
2: NextVal:增加sequence的值,然后返回 增加后sequence值
Qi:常用ASCII数字对应表:
0~9数字对应十进制48-57
a~z字母对应的十进制97-122十六进制61-7A
A~Z字母对应的十进制65-90十六进制41-5A
Ba:请自己实现两个整数变量的交换,用不同的方式实现。
/*
面试题:
请自己实现两个整数变量的交换,用不同的方式实现
*/
public class OperatorTest2 {
public static void main(String[] args) {
int a = 10;
int b = 20;
System.out.println("a:"+a+",b:"+b);
//方式1:使用第三方变量
/*
int c = a;
a = b;
b = c;
System.out.println("a:"+a+",b:"+b);
System.out.println("------------");
*/
//方式2:用位异或实现
//左边:a,b,a
//右边:a ^ b
/*
a = a ^ b;
b = a ^ b; //a ^ b ^ b = a
a = a ^ b; //a ^ b ^ a = b
System.out.println("a:"+a+",b:"+b);
*/
//方式3:用变量相加的做法
/*
a = a + b; //a=30
b = a - b; //b=10
a = a - b; //a=20
System.out.println("a:"+a+",b:"+b);
*/
//方式4:
b = (a+b) - (a=b); //b=30-20=10,a=20
System.out.println("a:"+a+",b:"+b);
}
}
三元运算符:
1、格式
比较表达式?表达式1:表达式2;
2、执行流程:
首先计算比较表达式的值,看是true还是false。
如果是true,表达式1就是结果。
如果是false,表达式2就是结果。
public class OperatorDemo9 {
public static void main(String[] args) {
int x = 100;
int y = 200;
int z = ((x > y)? x: y);
//报错
//int z = ((x = y)? x : y);//比较表达式:结果是一个boolean类型。
System.out.println("z:"+z);//z:200
}
}
Jiu: " modify" 与 “alter” 区别:
1、
modidy是修改字段的属性
只是alter的一个功能
alter还能做add,set等操作
修改数据表的名称用rename
字段名以及属性用modify
字段值用set
这些全是alter