Oracle学习
1 SQL初步
SQL语句分为三种类型:
DML:数据操纵语言
DDL:数据定义语言
DCL:数据控制语言
1.1 DML
INSERT UPDATE DELETE SELECT
1.2 DDL
CREATE TABLE ALTER TABLE DROP TABLE CREATE INDEX DROP INDEX
1.3 DCL
GRANT REVOKE COMMIT ROLLBACK SAVEPOINT LOCK
2 基本查询语句SELECT
查看表结构:desc table_name;
在select的语句中可以加上算术运算符;
查看系统当前时间:select sysdate from dual;
空值是无效的,未指定的,未知的,或不可预知的值;空值不是0或者空格;
使用别名三种方式:
第一种:select cloumn_name1 alias_name1 from table_name;
第二种:select column_name1 as alias_name from table_name;
第三种:select column_name1 “aliasName” from table_name;
第一、 二种的别名都是默认的大写,第三种大小写默认的不变
查询中的连接符“||”:
可以将两个列的查询结果合成一个:
Select last_name || employee_id from employees;
显示的结果:
employees
-----------------------------------
BaerPR_REP
HigginsAC_MGR
GietzAC_ACCOUNT
Select last_name,employee_id from employees;
显示的结果:
LAST_NAME EMPLOYEE_ID
------------------------- -----------
Baer 204
Higgins 205
Gietz 206
日期和字符只能在单引号中出现,每当返回一行时,字符串被输出一次,
Select lastname || ‘ is a ’ job_id as “employee details” from employees;
删除重复行:
Select dinstinct department_id from employees;
但结果可能返回为空
Sql语句和SQL plus的区别:
Sql语句是一种语言,一种标准,关键字不能缩写
Sql plus是一种环境,Oracle的特性之一,关键字可以缩写
Desc实际上就是describe的缩写
Select last_name,distinct department_id from employees;
语句错误,last_name有107条,而department_id用distinct修饰后,只剩12条,不能匹配
显示出表employees的全部列,各个列之间用逗号连接,列头显示成OUT_PUT:
Select employee_id || ‘,’ || last_name || ‘,’ ||salary from employees;
3 过滤和排序行
过滤使用where加上查询条件,需要注意的是,where后的条件如果是字符/日期,需要用单引号来修饰,数字类型不需要修饰。
比较运算:> < <= >= <>
其他运算比较: between and, in(set),like, is null
Like ‘s%’; like ‘_o%’:%代表一个多个字符,_代表一个字符
判断是否为空:is(not) null
Escape: select * from job_id where job_id like ‘IT\_%’ escape ‘\’,这代表的是_就是_
Order by asc/desc: 升序/降序
多个列排列:
选择名字中有a或e的员工:
Select * from employees where last_name like ‘%a%e%’ or ‘%e%a%’
4 单行函数
大小写函数:
Lower()
Upper()
Initcap():字符首字母大写
字符控制函数:
函数 | 结果 |
CONCAT('Hello', 'World') SUBSTR('HelloWorld',1,5) LENGTH('HelloWorld') INSTR('HelloWorld', 'W') LPAD(salary,10,'*') RPAD(salary, 10, '*') TRIM('H' FROM 'HelloWorld') REPLACE(‘abcd’,’b’,’m’) | HelloWorld Hello 10 6 *****24000 24000***** elloWorld amcd |
数字函数:
ROUND(四舍五入) ROUND(45.926,2) | 45.93 |
TRUNC(截断) TRUNC(45.926) | 45.92 |
MOD(求余) MOD(1600,300) | 100 |
5 多表查询
Select employees.employee_id,employees.department_id, departments.department_id
From employees,departments;
上面的语句查询结果有2000多条记录,这种现象被称为笛卡儿积。
笛卡儿积的产生情况在下面这些条件产生:
(1)省略连接条件;
(2)连接条件无效;
(3)所有表中的所有行互相连接。
避免笛卡儿积的方式可以加上where过滤
内连接与外连接:
内连接:合并具有同一列的两个以上的表的行,结果集中不包含一个表与另一个表不匹配的行;
外连接:两个表在连接的过程中,除了返回满足连接条件的行以外,还返回左表或右表中不满足条件的行,这中连接称为左外连接或右外连接。外连接的where子句条件类似于内部连接,但连接条件中没有匹配行的表的列后面要加外连接运算符,即用圆括号括起来的加号(+).
左连接:左边的全都显示,右边的用null来补上
Select table1.column,table2.column
From table1,table2
Where table1.column= table2.column(+);
右连接:右边的全都显示,左边的用null来补上
Select table1.column,table2.column
From table1,table2
Where table1.column(+) = table2.column