oracle sql学习一

来源:互联网 发布:数据库删除后恢复 编辑:程序博客网 时间:2024/05/17 09:31

SQL语句分为以下三种类型:

DML: Data ManipulationLanguage数据操纵语言
DDL:  Data Definition Language数据定义语言

DCL:  Data Control Language数据控制语言

DML用于查询与修改数据记录,包括如下SQL语句:

INSERT:添加数据到数据库中
UPDATE:修改数据库中的数据
DELETE:删除数据库中的数据
SELECT:选择(查询)数据
SELECTSQL语言的基础,最为重要。

DDL用于定义数据库的结构,比如创建、修改或删除数据库对象,包括如下SQL语句:

CREATE TABLE:创建数据库表
ALTER  TABLE更改表结构、添加、删除、修改列长度
DROP TABLE:删除表
CREATE INDEX:在表上建立索引
DROP INDEX:删除索引

DCL用来控制数据库的访问,包括如下SQL语句:

GRANT:授予访问权限
REVOKE:撤销访问权限
COMMIT:提交事务处理
ROLLBACK:事务处理回退
SAVEPOINT:设置保存点
LOCK:对数据库的特定部分进行锁定

SELECT子句中使用关键字 ‘DISTINCT’ 删除重复行。



日期可以进行加减,但是不能进行乘除,例如:
select sysdate+1 from dual;正确的
select sysdate*2 from dual;错误的

空值不同于0,凡是空值参与的运算结果都为空。

列的别名:在列的后面空格+别名 或者列后面+ as +别名
别名不加双引号,则别名就全大写,例如



别名加双引号,则别名就是别名字符,例如


连接符:

把列与列,列与字符连接在一起。
||’表示。
可以用来‘合成’列。
例子:select first_name||'`s job is'||job_id from employees;

过滤和排序数据:

通过本章学习,您将可以:

在查询中过滤行。
在查询中对行进行排序

过滤的话,直接在后面加where语句。
where后面不可以用别名来做筛选条件,
如select first_name,salary*12 annul_sal from employees whereannul_sal>100000(错误的)
select * from employees where id=900;
字符和日期:
字符和日期要包含在单引号
字符大小写敏感,日期格式敏感
默认的日期格式是DD-MON-RR(不需要记忆)
例子:



sql中的不等于可以是!=也可以是<>.


例子:
where salary between 4000 and 7000
where salary in (4000,5000,6000)
模糊查询
% 代表零个或多个字符(任意个字符)
_ 代表一个字符
名字中包含a的员工:
where first_name like '%a%'

转译字符escape,例如我要查询名字中包含‘_’的员工
where first_name like '%\_%'  escape  '\'
也可以是where first_name like '%#_%' escape '#'
具体是\还是#,是自己指定的。

is null,查询是空值的,也可以查询不是空值的,is not null;

排序:

不写desc,asc,默认情况下是asc。




先按照department_id 升序排列,如果department_id 一样,再按照salary 降序排列。

单行函数:

通过本章学习,您将可以:

SQL中不同类型的函数
SELECT语句中使用字符,数字,日期和转换函数
使用条件表达式

两种sql函数:
单行函数:一个数据,出来一个结果。
多行函数:多个数据,出来一个结果



字符函数:



initcap()首字母大写


substr('hello',2,5) 从第二个开始,取五个字符。
instr('hello','l') 某个字符在字符串中首次出现的位置。如果不存在返回0.
trim()去除首位的字符。
replace()替换所有的。


日期函数:

两个日期只可以做减法,或者日期跟数字做运算。
select (sysdate-hire_date)/30 months  from employees;//求入职的月份


months_between(sysdate,hire_date)
add_months(sysdate,2)
next_day(sysdate,'星期五')
last_day(sysdate)




SELECT TO_CHAR(sysdate,'yyyy-MM-dd HH24:mi:ss') FROM dual;

select to_date('2005-01-01 13:14:20','yyyy-MM-dd HH24:mi:ss') from dual; 

通用函数:

这些函数适用于任何数据类型,同时也适用于空值

NVL (expr1, expr2):
当expr1为空的时候,用expr2代替,如果不为空,取它自己。
expr1和expr2的数据类型必须一致,如果不一致,得需要转换函数。
select nvl(to_char(department_id),'没有部门') from employees;(department_id是number类型的)

NVL2 (expr1, expr2, expr3)

 expr1不为NULL,返回expr2;为NULL,返回expr3

NULLIF (expr1, expr2)
相等返回NULL,不等返回expr1

条件表达式:

case表达式:



decode表达式:





多表查询:

使用等值不等值连接在SELECT语句中查询多个表中的数据。
使用自连接
使用外连接查询不满足连接条件的数据

等值连接:



非等值连接:
有两个表,一个是employees,每个员工有工资salary,还有一个工资等级表,1000到3000是A,3000到6000是B,以此类推。
现在想知道每个员工的工资等级。

SELECT e.last_name,e.salary,j.grade_level

FROM   employees e,job_grades j

WHERE  e.salary

       BETWEENj.lowest_sal ANDj.highest_sal;


外连接:

外连接:两个表在连接过程中除了返回满足连接条件的行以外还返回左(或右)表中不满足条件的行,这种连接称为左(或右) 外连接


左外连接:

SELECT  table1.column, table2.column

FROM  table1, table2

WHERE  table1.column=table2.column(+);


右外连接:

SELECT  table1.column, table2.column

FROM  table1, table2

WHERE  table1.column(+)= table2.column;


sql99语法:

内连接:

SELECT e.employee_id,e.last_name,e.department_id,

       d.department_id,d.location_id

FROM   employees eJOIN departments d

ON     (e.department_id =d.department_id);


多表连接:

SELECT employee_id, city,department_name

FROM   employees e

JOIN   departments d

ON     d.department_id =e.department_id

JOIN   locations l

ON     d.location_id =l.location_id;


左外连接:

SELECTe.last_name,e.department_id,d.department_name

FROM   employees e

LEFT OUTER JOINdepartments d

ON   (e.department_id =d.department_id) ;


右外连接:

SELECTe.last_name,e.department_id,d.department_name

FROM   employees e

RIGHT OUTER JOINdepartments d

ON    (e.department_id =d.department_id) ;


满外连接:

SELECTe.last_name,e.department_id,d.department_name

FROM   employees e

FULL OUTER JOINdepartments d

ON   (e.department_id =d.department_id) ;




0 0
原创粉丝点击