笔记:
select 选择(查询)数据
insert 添加数据到数据库
update 修改数据库中的数据
delete 删除数据库中的数据
DESCRIBE 命令查询表结构符
1.一种语言
2.ANSI 标准
3.关键字不能缩写
4.使用语句控制数据库中的表的定义信息和表中的数据
1.一种环境
2.Oracle 的特性之一
3.关键字可以缩写
4.命令不能改变数据库中的数据的值
5.集中运行
“日期和字符只能在单引号中出现”
‘*’ 查询整个表的数据 select * from department
AS:后面自定义名称 别名使用
SELECT last_name AS name, commission_pct comm
FROM employees;
“||”合成一列(把连个字段合成一个字段显示)
SELECT last_name || job_id AS “Employees”
FROM employees;
distinct 删除重复行
SELECT DISTINCT department_id
FROM employees;
where过滤 where子句紧随from子句“日期默认格式 DD-MON月-RR”
Between…and…两个值之间(包含边界)
WHERE salary BETWEEN 2500 AND 3500;
like 模糊查询 “_“匹配一个字符“%”匹配多个字符 例:”_a%” 匹配第二个字符为a的字符串
WHERE first_name LIKE ‘S%’;
in (10,20 )获取10 或者20 的ID
WHERE manager_id IN (100, 101, 201);
Escape 转义符(专门用来回避特效符号的)
WHERE job_id LIKE ‘IT_%‘ escape ‘\‘;
or:或者的意思
and 并且
Not 否的意思
NOT IN (‘IT_PROG’, ‘ST_CLERK’, ‘SA_REP’);
升序ascend ASC
降序descend DEAC
order by 按别名录取
Lower(‘SQL Course’) 转换小写(sql course)
Upper (‘SQL Course’)转换大写(SQL COURSE)
INITCAP(‘SQL Course’)(Sql Course),将每个单词的第一个字母大写,其它字母变为小写返回
round 日期四舍五入
round()当与日期一起使用时,这些函数四舍五入或截断到指定的格式模型
round()可以将日期四舍五入到最近的年或月
trunc(100.456,2)截断 从小数点以后第二个开始截断
Mod 求余 MOD(salary, 5000)
CONCAT将两个列拼接起来(‘Hello’, ‘World’)–(HelloWorld)
Substr 提取一个确认的字符长度(‘HelloWorld’,1,5)—(Hello)
length()获取括号里的字符长度(‘HelloWorld’)—(10)
instr(‘CORPORATE FLOOR’,‘OR’, 3, 2)从第三个字符位置开始查找"OR",取第三个字后第2 个匹配项的位置(‘HelloWorld’, ‘W’)—(6)
LPAD(EMPLOYEE_ID,10,’’)左填充(salary,10,’’)—(24000)
Rpad 右填充(salary, 10, ‘*’)—(24000)
trim()去除开头或结尾字母 trim('h’from 'hello ')
replace 替换字符(‘abcd’,’b’,’m’)—(amcd)
sysdate 返回当前时间
months_between()两个日期相差的月数
MONTHS_BETWEEN (‘01-SEP-95’,‘11-JAN-94’)–(19.6774194)
add_months 向指定日期加上若干月数(‘11-JAN-94’,6)–(‘11-JUL-94’)
next_day 指定日期的下一个星期对应的日期 (‘01-SEP-95’,‘FRIDAY’) –(’08-sep-95’)
last_day 计算本月最后一天是什么时候
trunc 日期截断
extract()函数,用于从date类型或interval类型中截取到特定的部分
EXTRACT(MONTH FROM HIRE_DATE)extract()第一个可以截取年(year)或月(month)或日(day)第二写from,第三写时间
to_char(sysdate,‘yyyy-mm-dd hh:mi:ss’)to_char对日期的转换
to_char(HIRE_DATE,‘day’)“year年,month月,day 日”
to_char(SALARY,‘L999,999.99’)
“9 数字,0 零,$ 美元符,L 本地货比符号,. 小数点,’,’,千位数”
to_date(‘2015年3月18日13:13:13’,‘yyyy "年"mm"月"dd"日"hh24:mi:ss’)
超过十二小时就要在hh 写上24 --to_date将字符转换成数字
To_number 将字符转换为日期
TO_NUMBER(‘¥1,234,567,890.00’,’L999,999,999,999.99’)
nvl(commission_pct,0)如果为空则转换为0,使用的数据类型有日期、字符、数字
Nvl(expr1,expr2)
nvl2(expr1,expr2,expr3)expr1不为null,返回expr2;为空就返回expr3
Nvl2(expr1,expr2,expr3)
nullif(expr1,expr2)相等返回null,不等返回expr1
coalesce 可同时处理交替的多个值,如果第一个表达式为空,则返回下一个表达式
COALESCE(commission_pct, salary, 10) comm
条件表达式:
Case:
case when 后面跟着条件 then当when 符合条件时执行当不符合条件时执行else语句end后面是名称
嵌套函数:(嵌套函数由内到外)
Where table1.column1=table2.column2
Where employees.department_id=departments.department_id
Natural join (自动使用关联字段清楚笛卡儿积(一般关联字段是外键,但是此处它是以名称相同为主),属于内连接概念)以两个表中具有相同名字的列为条件创建等值连接
(列名相同而数据类型不同则会议产生错误)
Avg(salary)
平均值max(salary)
最大值min(salary)
最小值sum(salary)合计
count(salary)计数、组函数忽略空值
Nvl函数使用分组函数无法忽略空值
Group by 分组数据:将表中的数据分成若干组
Select列中,所有未包含在组函数中的列都应该包含在group by中
在group by中的列不必包含在select中
Where子句中不能用组函数、Having子句中可以用、having过滤分组函数
在select列表中所有未包含在组函数中的列都应该包含
在 GROUP BY 子句中
子查询只返回一行
子查询中的空值不反回任何行
In 等于列表中的任意一个
Any 和子查询返回的某一个值比较
All 和子查询返回的所有值比较
查看用户定义的表,直观的看到数据库下有多少表
查看用户定义的各种数据库对象
查看用户定义的表,视图同义词和序列
命令界面创建表成功以后会提示 Table created
Varchar2 (可变长字符数据)
Char(定长字符数据) Blon(二进制数据)
Number(可变长值数据) bfile(存储外部文件的二进制数据)
Date(日期型数据) RowID(行地址)
Long(可变长字符数据,最大2G) RAW(原始的二进制数据)
Clob(字符数据,最大4G)
AS 指定的列和子查询中的列要一一对应,通过列名和默认值定义列
Alter table 语句
1.追加新的列 ADD
2.修改现有的列 可以修改列的数据类型,尺寸,默认值 Modify
3.为新追加的列定义默认值
4.删除一个列 drop column
5.重命名表的一个列名
1.数据和结构都被删除
2.所有正在运行的相关事务被提交
3.所有相关索引被删除
4.DROP TABLE 语句不能回滚
Insert 语法数据处理
1. 可插入空值
2. 可插入指定的值(指定的值只要符合要求空值都可以)
执行后会弹出一个模态框
拷贝其他表的数据
Update set 语句语法
Dalect 语句
Savepoint 在当前事物中创建保存节点,
Rollback to savepoint 回滚到创建的保存点
约束范围:1.列级约束只能作用在一个列上
2.表级约束可以作用在多个列上,一个也可以
3.非空(not null)约束只能定义在列上
NOT NULL 非空
UNIQUE 唯一约束
PRIMARY KEY 定义主键
FOREIGN51 KEY 定义外键
FOREIGN KEY 跟着外键 REFERENCES 跟着就是父表的主键
CHECK 值范围自定义约束
例(salary>2000 and salary<5000)
Alter table 语句
添加或删除约束,但是不能修改约束
有效化或无效化约束
添加not null 约束要使用modify语句
‘表级约束是在建表完成后面写’
On delete cascade 当父表中的列被删除时,子表中相对应的列也被删除
ON DELETE SET NULL(级联置空): 子表中相应的列置空
简单视图中执行 DML 操作
(1)当视图定义中包含以下元素之一时不能使用delete:
1.组函数
2.GROUP BY 子句
3.DISTINCT 关键字
4.ROWNUM 伪列.
(2)当视图定义中包含以下元素之一时不能使用update
1.组函数
2.GROUP BY 子句
3.DISTINCT 关键字
4.ROWNUM 伪列
5.列的定义为表达式
(3)当视图定义中包含以下元素之一时不能使insert:
• 组函数
• GROUP BY 子句
• DISTINCT 关键字
• ROWNUM 伪列
• 列的定义为表达式
• 表中非空的列在视图定义中未包括
删除的视图只是删除的定义并不会删除基表的数据:DROP VIEW empvu80
Rownum 伪列 (假的的意思)
Rownum每次在查询结果后在对结果进行操作,从第一个数据开始
• 必须是序列的拥有者或对序列有 ALTER 权限
• 只有将来的序列值会被改变
• 改变序列的初始值只能通过删除序列之后重建序列的方法实现
使用 DROP SEQUENCE 语句删除序列
删除之后,序列不能再次被引用
在表 EMPLOYEES的列 LAST_NAME 上创建索引
可以使用数据字典视图USER_INDEXES 和 USER_IND_COLUMNS 查看索引的信息
DROP INDEX upper_last_name_id;
1. UNION:返回两个查询的结果集的并集(操作符对于两个结果集重复数据会选择一条显示)
2.UNION ALL:返回两个查询的结果集的并集,(两个结果集重复部分,不去重。)
3.INTERSECT 操作符:返回两个结果的交集。(返回两个集之间相同的数据)
4.MINUS 操作符:返回两个结果集的差。
SELECT employee_id, job_id
FROM employees
UNION /UNION ALL/ INTERSECT/ MINUS——都可以替换
SELECT employee_id, job_id
FROM job_history;
学习了一个多月的Oracle SQL 语言,勉强算是Oracle的初学者了,以上呢就是我这一个多月来接触到的东西,我都已近全部罗列出来还有解析以及一些题目的的注释,写这个总结不仅对于我个人是一个学习的巩固,以后就算遇到什么问题也可以回来翻翻,其实学习Oracle这门语言也挺简单的,只要个人平时多练多记单词到时候也是可以上手这门语言的。