Oracle学习DayOne(SQL初步)
一、DML、DDL、DCL
SQL语句分为以下三种类型:
DML: Data Manipulation Language 数据操纵语言
DDL: Data Definition Language 数据定义语言
DCL: Data Control Language 数据控制语言
1.DML用于查询与修改数据记录,包括如下SQL语句:
INSERT:添加数据到数据库中
UPDATE:修改数据库中的数据
DELETE:删除数据库中的数据
SELECT:选择(查询)数据
SELECT是SQL语言的基础,最为重要。
2,DDL用于定义数据库的结构,比如创建、修改或删除数据库对象,包括如下SQL语句:
CREATE TABLE:创建数据库表
ALTER TABLE:更改表结构、添加、删除、修改列长度
DROP TABLE:删除表
CREATE INDEX:在表上建立索引
DROP INDEX:删除索引
3.DCL用来控制数据库的访问,包括如下SQL语句:
GRANT:授予访问权限
REVOKE:撤销访问权限
COMMIT:提交事务处理
ROLLBACK:事务处理回退
SAVEPOINT:设置保存点
LOCK:对数据库的特定部分进行锁定
二、基本SQL——select语句
1.格式
SELECT *|{[DISTINCT] column|expression [alias],...}
FROM table;
2.注意事项
SQL 语言大小写不敏感。
SQL 可以写在一行或者多行
关键字不能被缩写也不能分行
各子句一般要分行写。
使用缩进提高语句的可读性。
3.算术运算符的优先级
乘除的优先级高于加减。
同一优先级运算符从左向右执行。
括号内的运算先执行。
4.空值的定义
空值是无效的,未指定的,未知的或不可预知的值
空值不是空格或者0。
包含空值的数学表达式的值都为空值
5.列的别名
重命名一个列。
便于计算。
紧跟列名,也可以在列名和别名之间加入关键字‘AS’,别名使用双引号,以便在别名中包含空格或特殊的字符并区分大小写。
6.连接符
把列与列,列与字符连接在一起。
用 ‘||’表示。
可以用来‘合成’列。
7.字符串
字符串可以是 SELECT 列表中的一个字符,数字,日期。
日期和字符只能在单引号中出现。
每当返回一行时,字符串被输出一次。
8.删除重复行
在 SELECT 子句中使用关键字 ‘DISTINCT’ 删除重复行。
9.显示表结构
DESC[RIBE] tablename
10.过滤
使用WHERE 子句,将不满足条件的行过滤掉。
WHERE 子句紧随 FROM 子句。
11.字符和日期
字符和日期要包含在单引号中。
字符大小写敏感,日期格式敏感。
默认的日期格式是 DD-MON月-RR。
12.比较运算
区别于Java语言的有:
等于 =(不是==)
赋值 :=
不等于 <>(也可以是!=)
其他比较运算:
BETWEEN...AND...:在两个值之间(包含边界)
IN(set):等于值列表中的一个
LIKE:模糊查询
IS NULL:空值
13.LIKE运算
使用 LIKE 运算选择类似的值
选择条件可以包含字符或数字:
% 代表零个或多个字符(任意个字符)。
_ 代表一个字符。
回避特殊符号的:使用转义符。例如:将[%]转为[\%]、[_]转为[\_],然后再加上[ESCAPE ‘\’] 即可将%和_转换成原本的意义。
--表示以'IT_'开头的job_id
job_id LIKE 'IT\_%' escape '\';
14.逻辑运算符
AND:逻辑与
OR:逻辑或
NOT:逻辑非
15.order by子句
ORDER BY {column, expr, alias} [ASC|DESC];
ASC(ascend): 升序。默认为升序
DESC(descend): 降序
ORDER BY 子句在SELECT语句的结尾。
15.单行函数
(1)特点
操作数据对象
接受参数返回一个结果
只对一行进行变换
每行返回一个结果
可以转换数据类型
可以嵌套
参数可以是一列或一个值
(2)字符函数
大小写控制函数 结果
lower('SQL Course') sql course
upper('SQL Course') SQL COURSE
initcap('SQL Course') Sql Course
字符控制函数 结果
CONCAT('Hello', 'World') HelloWorld
SUBSTR('HelloWorld',2,3) ell
LENGTH('HelloWorld') 10
INSTR('HelloWorld', 'W') 6
LPAD(salary,10,'*') *****24000
RPAD(salary, 10, '*') 24000*****
TRIM('H' FROM 'HelloHWorldH') elloHWorld
REPLACE(‘babcdb’,’b’,’m’) mamcdm
注意:
substr函数的第三个参数指子字符串的长度,而不是右边界
trim函数只替换字符串左边界和右边界的所有字符,中间不会替换
replace函数替换字符串中的所有指定字符
(3)数字函数
ROUND(45.926,2) 45.93
TRUNC(45.926,2) 45.92
MOD(1600,300) 100
(4)日期函数
函数 结果 描述
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('01-FEB-95') '28-FEB-95' 本月的最后一天
ROUND(25-JUL-95,'MONTH') 01-AUG-95 日期四舍五入
TRUNC(25-JUL-95 ,'YEAR') 01-JAN-95 日期截断
注意:
在日期上加上或减去一个数字结果仍为日期。
两个日期相减返回日期之间相差的天数。
日期不允许做加法运算,无意义
可以用数字除24来向日期中加上或减去天数。
yyyy 年 mm 月 dd 日 day 星期 hh 小时 mi 分钟 ss 秒
(5)转换函数
TO_CHAR函数对日期的转换:TO_CHAR(date, 'format_model')
注意:
必须包含在单引号中而且大小写敏感。
可以包含任意的有效的日期格式。
日期之间用逗号隔开。
使用双引号向日期中添加字符。
实例:
SELECT TO_CHAR(sysdate,‘yyyy"年"mm"月"dd"日" hh:mi:ss’) FROM dual; 2019年3月31日 15:36:07
TO_DATE 函数对字符的转换 TO_DATE(char[, 'format_model'])
实例:
TO_DATE(‘2012年10月29日 08:10:21’,’yyyy“年”mm”月”dd“日”hh:mi:ss’) From dual;
TO_CHAR函数对数字的转换 TO_CHAR(number, 'format_model')
格式:
9 数字
0 没有数字则返回0
$ 美元符号
L 本地货币符号
, 千位符
实例:
TO_CHAR(1234567.89,'$000,000,999.99') 返回字符串'$001,234,567.89'
TO_NUMBER 函数对字符的转换 TO_NUMBER(char[, 'format_model'])
实例:
TO_NUMBER(‘¥1,234,567,890.00’,’L999,999,999,999.99’)
(6)通用函数:适用于任何数据类型,同时也适用于空值
NVL (expr1, expr2):将expr1的空值转换成expr2的值,可以使用的数据类型有日期、字符、数字
NVL2 (expr1, expr2, expr3) : expr1不为NULL,返回expr2;为NULL,返回expr3。
NULLIF (expr1, expr2):相等返回NULL,不等返回expr1
COALESCE (expr1, expr2, ..., exprn):如果第一个表达式为空,则返回下一个表达式,对其他的参数进行COALESCE
(7)条件表达式(if-then-else逻辑)
case表达式
格式:
CASE expr WHEN comparison_expr1 THEN return_expr1
[WHEN comparison_expr2 THEN return_expr2
WHEN comparison_exprn THEN return_exprn
ELSE else_expr]
END
decode函数
格式:
DECODE(col|expression, search1, result1 ,
[, search2, result2,...,]
[, default])
16.多表查询
使用表名前缀在多个表中区分相同的列
在不同表中具有相同列名的列可以用表的别名加以区分。
例如:按照department_id查询employees(员工表)和departments(部门表)
的信息。
方式一(通用型):SELECT ... FROM ... WHERE
SELECT e.last_name,e.department_id,d.department_name
FROM employees e,departments d
where e.department_id = d.department_id
方式二:SELECT ... FROM ... JOIN ... ON ...
常用方式,较方式一,更易实现外联接(左、右、满)
SELECT last_name,e.department_id,department_name
FROM employees e
JOIN departments d
ON e.department_id = d.department_id
内连接: 合并具有同一列的两个以上的表的行, 结果集中不包含一个表与另一个表不匹配的行
外连接: 两个表在连接过程中除了返回满足连接条件的行以外还返回左(或右)表中不满足条件的行 ,这种连接称为左(或右) 外连接。没有匹配的行时, 结果表中相应的列为空(NULL). 外连接的 WHERE 子句条件类似于内部连接, 但连接条件中没有匹配行的表的列后面要加外连接运算符, 即用圆括号括起来的加号(+).
右外连接:
SELECT table1.column, table2.column
FROM table1, table2
WHERE table1.column(+) = table2.column;
或
SELECT table1.column,table2.column
FROM table1 RIGHT OUTER JOIN table2
ON (table1.column = table2.column);
左外连接:
SELECT table1.column, table2.column
FROM table1, table2
WHERE table1.column = table2.column(+);
或
SELECT table1.column,table2.column
FROM table1 LEFT OUTER JOIN table2
ON (table1.column = table2.column);
满外连接:两个表在连接过程中除了返回满足连接条件的行以外还返回两个表中不满足条件的行 。
SELECT table1.column,table2.column
FROM table1 FULL OUTER JOIN table2
ON (table1.column = table2.column);
17.分组函数:作用于一组数据,并对一组数据返回一个值
AVG():求平均值
SUM():合计函数
MIN():最小值
MAX():最大值
COUNT(expr):返回expr不为空的记录总数
注意:
组函数忽略空值,如AVG(commission_pct),commission_pct在某些行中为null,而AVG() = sum()/count(),数值会发生错误。
NVL函数使分组函数无法忽略空值,如AVG(NVL(commission_pct,0))。
COUNT(DISTINCT expr)返回expr非空且不重复的记录总数。
不能在 WHERE 子句中使用组函数。
可以在 HAVING 子句中使用组函数。
group by子句语法:
可以使用GROUP BY子句将表中的数据分成若干组
在SELECT 列表中所有未包含在组函数中的列都应该包含在 GROUP BY 子句中。
例:
SELECT department_id,job_id, AVG(salary)
FROM employees
GROUP BY department_id,job_id ;
18.子查询
特点:
子查询 (内查询) 在主查询之前一次执行完成。
子查询的结果被主查询(外查询)使用 。
子查询要包含在括号内。
将子查询放在比较条件的右侧。
单行子查询:
只返回一行。
使用单行比较操作符: = > >= < <= <>
多行子查询:
返回多行。
使用多行比较操作符: IN 等于列表中的任意一个 ANY 和子查询返回的某一个值比较 ALL 和子查询返回的所有值比较
Oracle学习DayOne(SQL初步)的更多相关文章
- Oracle 学习PL/SQL
先上一张实用的图:用于转义字符的. SQL> select chr(42) ||'is what?' from dual; CHR(42)||---------*is what? 想转义哪个就转 ...
- Oracle学习笔记_01_SQL初步
1.分类 SQL语句分为以下三种类型: DML: Data Manipulation Language 数据操纵语言 DDL: Data Definition Languag ...
- (三)Oracle学习笔记—— sql语句
0. scott 用户默认表介绍 scott用户Tables目录下包含四张表 1. insert(插入)语句 给指定列插入数据: ,'xx'); 插入全部列数据: ,'xx','lll'); 2. u ...
- Oracle学习笔记三 SQL命令
SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)
- Oracle学习笔记之四,SQL语言入门
1. SQL语言概述 1.1 SQL语言特点 集合性,SQL可以的高层的数据结构上进行工作,工作时不是单条地处理记录,而对数据进行成组的处理. 统一性,操作任务主要包括:查询数据:插入.修改和删除数据 ...
- Oracle学习-Power Designer、visio 2003、Oracle sql developer、OEM、expdp
Oracle的体系太庞大了.对于刚開始学习的人来说,难免有些无从下手的感觉. 经过一学期的学习对Oracle学习有了一些深入的了解,由于之前学习过Oracle的一些主要的知识.所以学习起来上手比較快一 ...
- oracle学习笔记3:基本的SQL语句
oracle基本的SQL语句和SQLSERVER基本一样,在这里只简单列出与SQLSERVER不一样的地方 1.select * from orderinfo where address = 'abc ...
- Oracle学习笔记之PL/SQL编程
SQL(Structure Query Language)的含义是结构化查询语句,最早由Boyce和Chambedin在1974年提出,称为SEQUEL语言.1976年,IBM公司的Sa ...
- ORACLE数据库学习之SQL性能优化详解
Oracle sql 性能优化调整 ...
随机推荐
- 蓝牙 - 小米手环3 NFC版BLE协议研究
0x01 前言 最近买到了小米手环3nfc版本,基本上实现了我对手环的所有功能需求,高中的时候就缠线圈做过戒指一卡通,但是缺陷是不好看,而且只能储存一张卡,等 手环3nfc版我认为比较好的功能 可以储 ...
- zookeeper图形化的客户端工具
追加一个zookeeper图形化的客户端工具: 1.zookeeper图像化客户端工具的下载地址:https://issues.apache.org/jira/secure/attachment/12 ...
- dvi接口介绍
Most graphics cards and motherboards feature a Digital Video Interface (DVI) connector for connectin ...
- 漂亮数组 Beautiful Array
2019-04-06 16:09:56 问题描述: 问题求解: 本题还是挺有难度的,主要是要考虑好如何去进行构造. 首先考虑到2 * A[i] = A[j] + A[k],那么j,k就必须是同奇同偶, ...
- zoj2930
各点向S连推迟的花费,向T连提前的花费,S表示提前,T表示推迟.a推迟b也推迟b往a连INF.最小割后从各点出发,能直接或间接到T的就是必须推迟的,剩下的就是能提前的. #include < ...
- Docker生态会重蹈Hadoop的覆辙吗?
Docker生态会重蹈Hadoop的覆辙吗? http://mp.weixin.qq.com/s?__biz=MzA5NDg3ODMxNw==&mid=2649535024&idx=1 ...
- 关于java类加载机制的一些理解
关于java的类加载机制加载顺序,这个东西可以说是基础的东西,不过很遗憾这方面很多人也都不是很在意,比如我自己,最近上班闲下来了,就开始看一些博客文章了,今天恰好被一篇博文给吸引了,并且他的示例题一开 ...
- 空list赋值
list=[] i =0 list[i] =1 Traceback (most recent call last): File "D:\ProgramData\Anaconda3\lib\s ...
- Vue 知识整理—02-起步
一:Vue 语法格式: vue vm = new Vue({ //选项 }) 二:Vue 实例: <div id="app"> <p>{{message}} ...
- Js 框架之Vue .JS学习记录 ① 与Vue 初识
目录 与 Vue.js 认识 VUE.JS是个啥?有啥好处? Vue 的目标 战前准备 VUE.JS环境 VUE.JS 尝试一下,你就明白 第一步 实例化VUE 对象 第二步VueAPP 调用数据 ...