基本SQL语句

01 SQL语言基础

一、先睹为快

二、什么是SQL语言
结构化查询语言(Structured Query Language)(发音?es kju??)
SQL是最重要的关系数据库操作语言,是所有关系数据库管理系统的标准语言
许多数据库厂商在使用SQL的同时,都对SQL进行了扩展,比如ORACLE的PL/SQL语言, MS SQL -Server的T-SQL语言
SQL语言是一种非过程化语言, 只需要提出"做什么”,而不需要指明“怎么做”
三、SQL可以做什么
数据库数据的增删改查操作(CRUD)
数据库对象的创建,修改和删除操作
用户权限/角色的授予和取消
事务控制
四、SQL语言的分类
1.DQL(数据查询语言)select
2. DML (数据操作语言) insert、 update、
delete
3. DDL (数据定义语言) create、 alter、 drop
4. DCL (数据控制语言) grant、 revoke
5. TCL(事务控制语言)SAVEPOINT、
ROLLBACK、SET TRANSACTION ,
COMMIT
数据操作语言针对表中的数据,而数据定义语言针对数据库对象(表、索引、视图、触发器、存储过程、函数、表空间等)
五、SQL标准的发展

02 练习表介绍

一、用户
scott
二、数据库表
1.Dept部门表
2. Emp员工表
3. Salgrade 工资等级表
4. Bonus奖金表


三、表和表之间的关系
员工属于某个部门
四、关系数据库基本概念
1.关系:整个二维表
2.关系名:表格名称.
3.元组:行数据(记录)
4.属性:列数据(字段)
5.属性名:列名称(字段名)
6.主键:唯一-确定元组的属性组(关键字)
7.域:属性的取值范围

03 select单表查询语句

一、最简单的查询方式

select * from emp;
select * from dept;
select empno, ename ,sal from emp;

二、使用算术表达式

select empno, ename,sal,sal*1 .08 from emp;
select empno, ename,sal, sal* 12 from emp;
select empno, ename ,sal, sal*12 + 1000 from emp;

注:在Select语句中,对数值型数据可以使用算术运算符创建表达式
三、使用字段别名

select empno as员工编号,ename员工姓名,
sal*12年薪from emp;
select empno, ename "Ename", sal*12 "Anual
Salary" from emp;
select sal*12+5000 as "年度工资(加年终奖)"
from emp;

四、字段别名
重命名查询结果中的字段,以增强可读性。
别名如果含有空格或其他特殊字符或大小写敏
感,需用双引号引|起来。
AS可以省略
五、连接运算符

select ename ||'is a '|| job from emp;
select empno, ename || '"s annual salary is ' ||sal*12 from emp;

连接运算符“||”可以把列与字符、或其它表达式连接在一起,得到一个新的字符串,实现’合成’列的功能。

04 查询语去除重复行

一,缺省情况下,查询结果中包含所有符合条件的记录行,包括重复行

select deptno from emp;

二,使用DISTINCT关键字可从查询结果中清除重复行

select distinct deptno from emp;
select distinct job from emp;

三,DISTINCT的作用范围是后面所有字段的组合

select, distinct deptno job from emp;

05 order by 子句排序

一、使用order by子句对查询结果进行排序
二,排序方式包括升序(asc, 缺省)和降序(desc) 两种:

select empno, ename, sal from emp order by sal;
select empno, ename, sal from emp order by sal desc ;

三,按多字段排序

select deptno, empno, ename, sal from emp order by deptno, sal;

四,使用字段别名排序

select empno, ename, sal*12 annsal from emp order by annsal;

06 where 子句

作用:指定查询条件使用where子句
一、用法举例

select * from emp where deptno=10;
select * from emp where ename = 'SMITH;
select * from emp where hiredate = '02-4-81;

注意:
字符串和日期值要用单引号扩起来
字符串大小写敏感
日期值格式敏感,缺省的日期格式是’DD-MON-RR‘
二、查询条件中可以使用比较运算符

select * from emp where sal > 2900;
select * from emp where deptno <> 30;
select * from emp where sal between 1600 and 2900;
select * from emp where ename in('SMITH','CL ARK';KING');


三、使用LIKE运算符执行模糊查询(通配查询)
%表示零或多个字符
_表示一个字符
对于特殊符号可使用ESCAPE标识符来查找
用法举例

select * from emp where ename like 'S%';
select * from emp where ename like ' A%';
select * from emp where ename like '%\_ _%' escape ";

四|使用IS NULL运算符进行空值判断
用法举例

select * from emp where comm is null;
select * from emp where comm is not null;

五、查询条件中可以使用逻辑运算符

select * from emp where deptno= 10 and sal> 1000;
select * from emp where deptno= 10 or job= 'CLERK';
select * from emp where sal not in (800, 1500, 2000);

六、SQL优化问题:
AND:把检索结果较少的条件放到后面
OR:把检索结果较多的条件放到后面
七、四种运算符优先级:算术>连接>比较>逻辑

可使用小括号强行改变运算顺序

select * from emp where job='SALESMAN' or job='CLERK' and sal>=1280;
select * from emp where (job='SALESMAN' or job='CLERK') and sal>= 1280;

07 函数的使用——单行

一、前言
使用函数可以大大提高SEL ECT语句操作数据库的能力。它给数据的转换和处理提供了方便。函数只是将取出的数据进行处理,不会改变数据库中的值。
Oracle函数分为单行函数和多行函数两大类
●单行函数分类
1.字符函数
2.转换函数
3.通用函数
4.数值函数
5.日期函数
多行函数
1.sum() avg() 仅适用数值型
2. count() max() min() 适用任何类型数据
一、字符函数

二、数值函数

三、日期函数

四、转换函数
Oracle的类型转换分为自动类型转换和强制类型转换。

select '12.5'+30 from dual;
select '12 5'||30 from dual;

尽管数据类型之间可以进行自动转换,仍建议使用显示转换函数,以保持良好的设计风格。常用类型转换函数有to_ char(), to_ date(), to number()。



五、其他函数

08 函数的使用——多行

一、定义
对一组数据进行运算,针对一组数据(多行记录)只返回一个结果,也称分组函数。
二、看图说话

三、常用的多行函数
1.sum() avg()仅适用数值型
2. count() max() min() 适用任何类型数据

select avg(sal), max(sal), min(sal), sum(sal) from emp;
select max(hiredate), min(hiredate) from emp;

四、多行函数与空值
多行函数除了count(*)外,都跳过空值而处理非空值

select count(comm),sum(comm),avg(comm) from emp;

可使用NVL()函数强制多行函数处理空值

select count(nvl(comm,0)),sum(nvl(comm,0)),avg(nvl(comm,0)) from emp;

五、count函数的说明
count(* )返回组中总记录数目;
count(exp)返回表达式exp值非空的记录数目;
count(distinct(exp))返回表达式exp值不重复的、非空的记录数目。

select count(*) from emp;
select count(comm) from emp;
select count(distinct(deptno)) from emp;
select count(nvl(comm,0)) from emp;

六、GROUP BY子句
GROUP BY子句将表中数据分成若干小组
语法格式

select column, group_ function(column)
from table
[where condition]
[group by group_ by_ expression]
[order by column];

使用举例

select deptno, avg(sal) from emp group by deptno;
select deptno, job, count(*),avg(sal) from emp group by
deptno, job;

注意事项
出现在SELECT列表中的字段,如果不是包含在多行函数中,那么该字段必须同时在GROUP BY子句中出现。
错误: select ename,job,sum(sal) from emp group by job;包含在GROUP BY子句中的字段则不必须出现在SELECT列表中。
如果没有GROUP BY子句,SELECT列表中不允许出现字段(单行函数)与多行函数混用的情况

select empno, sal from emp; //合法
select avg(sal) from emp; //合法
select empno, avg(sal) from emp; //非法

不允许在WHERE子句中使用多行函数

select deptno, avg(sal) from emp
where avg(sal) > 2000; 、/执行where时尚未执行groupby

及其他group by deptno;
七、having子句
对分组查询的结果进行过滤,要使用having从句。having从句过滤分组后的结果,它只能出现在group by从句之后,而where从句要出现在group by从句之前。
where过滤行,having过滤分组。 having支 持所有where操作符。
语法格式

select column, group_function(column)
from table
[where condition]
[group by group_by_expression] .
[having group_ condition]
[order by column];

执行过程: from–where - group by- having- select-- order by
用法举例
在emp表中,列出工资最小值小于2000的职位。
思考:

select job,min(sal) from emp where min(sal)<=2000
Select job,min(sal) from emp group by job having min(sal)
<2000

八、相关SQL

select max(sal),count(*) from emp;
//显示所有员工的最高工资和人数
//显示每个部]的最高工资和人数
select deptno,max(sal),count(*) from emp group by deptno;
select deptno,max(sal),count(*) from emp group by deptno ;
select deptno,max(sal),count(*) from emp group by deptno order by deptno;
select deptno,max(sal),count(*) from emp group by deptno order by max(sal);

出现在SELECT列表中的字段,如果不是包含在多行函数中,那么该字段必须同时在GROUP BY子句中出现。
显示每个岗位的人数

select upper(job), count(*) from emp
group by upper(job);
select * from emp for update;

显示每个部]的不同岗位的人数

select deptno,job, count(*)
from emp
where deptno >10
group by deptno,job
order by deptno desc,job desc;

where与having的区别
区别1: where是分组之前对所有的记录进行筛选,having是分组之后对分组的数据进行筛选。
区别2: where中不允许出现多行函数, having中可以出现多行函数。
区别3:某些功能使用where和having都可以实现, 使用where效率高;某些功能只有才有having才可以实现。
显示部门]编号大于10 的部门的人数,要求人数大于4 .

select deptno,count(*)
from emp
where count(* )>4
group by deptno;
select deptno,count(*)
from emp
group by deptno
having count(*)>4;

在emp表中,列出工资最小值小于2000的职位。

select job,min(sal)
from emp
where job <> 'PRESIDENT'
group by job
having min(sal)<2000
order by job desc;

09 DML语句

一、插入
往表中插入数据的语句是insert语句,方式有两种,一种是记录值的插入,一种是查询结果的插入
记录值的插入语法如下: .

INSERT INTO table [(column [, colum..)] VALUES
(value [, value..]);

特点: 一次插入操作只插入一行
可以添加所有列

insert into emp (empno,ename,job,mgr hiredate, sal, comm, deptno) values(1111,'gao'clerk',7902,sysdate, 10000,3000,40)

此处插入的元组中列的个数、顺序与emp的结构完全一致,因此表名之后的列名可以省略不写

insert into emp values(2222,'gaohs' ,'clerk' ,7902 ,sysdate, 10000,3000,40)

也可以只添加部分列

insert into emp(empno,ename) values (3333, xiaozhang')

但要求省略的列必须满足下面的条件:
该列定义为允许Null值。
在表定义中给出默认值,这表示如果不给出值,将使用默认值。
如果不符合.上面两个条件,将会报错。不能成功插入。
查询结果插入
可以用insert语句把一个select语句的查询结果插入到一 个基本表中,语法如下:

Insert into tablename(column,.)
select * from tablename2

创建一个临时表

create table temp As select * from emp where 1 =2

执行插入

insert into temp select * from emp;

二、更新
Update语句用于修改基本表中元组的某些列,其语法如下:

UPDATE table
SET column = value [, column = value] ...
[WHERE condition];

其语义是:修改基本表中满足条件表达式的那些元组的列值,需修改的列值在set子句中指出。

UPDATE TEMP SET ENAME=’ 张三’, SAL=10000 WHERE empno=7369;

三、删除
1.使用DELETE
SQL的删除操作是指从基本表中删除元组,语法如下:

DELETE [FROM] table [WHERE condition];

其语义是从基本表中删除满足条件表达式的元组.
delete from table表示从表中删除-切元组
如果想从表中删除所有的行,不要使用delete,可使用truncate table语句,完成相同的工作,但是速度更快。
SQL

DELETE FROM TEMP WHERE EMPNO=7369;

2.使用TRUNCATE
使用Truncate语句是删除表中的所有记录。
语法格式: Truncate [table] table_ name;
(1 )删除所有记录不保留记录占用空间

Truncate [table] table_ name [drop storage];

如:删除users表中的所有数据并不保存占用空间: Truncate table users drop storage;由于默认使用drop storage关键字,所以可以省略drop storage;
(2)删除所有记录保留记录占用空间

Truncate [table] table_ name [reuse storage];

如:删除users表中的所有数据并保存占用空间: Truncate table users reuse storage;
四,注意
进行添加,删除,更新这之后可以回滚可以提交,只有提交了才算真正更改了

oracle之基本SQL语句相关推荐

  1. oracle维护常用SQL语句(查看系统表和视图)

    转:http://www.360doc.com/content/11/1230/15/7489308_176090474.shtml oracle维护常用SQL语句(查看系统表和视图) 1.查看表空间 ...

  2. Oracle]高效的SQL语句之分析函数

    [Oracle]高效的SQL语句之分析函数(一)--sum() 实际应用中我们可以通过sum()统计出组中的总计或者是累加值,具体示例如下: 1.创建演示表 create table emp as s ...

  3. 本地可以使用oracle吗,Oracle - PLS-00642:SQL语句中不允许使用本地集合类型

    我是ORACLE编程中的新手,我试图将表列值与传入的数组进行比较,并且我在此过程中遇到了相当令人沮丧的时间.Oracle - PLS-00642:SQL语句中不允许使用本地集合类型 这是来自包头的类型 ...

  4. Oracle数据库中SQL语句用法(一)

    Copyright © 2019 @Linyer. All Rights Reserved 下接Oracle数据库中SQL语句用法(二)[点击以查看] 目录 第1章:编写基本的SQL SELECT语句 ...

  5. Oracle查看注释SQL语句

    Oracle查看注释SQL语句 --查询表的列名和对应列名的注释 --查询表的字段类型及字段长度 --查询表名注释 --查询创建视图语句 --查询视图的列注释 --删除视图 --查看视图名注释 --修 ...

  6. oracle表中增加字段 sql语句,ORACLE中通过SQL语句(alter table)来增加、删除、修改字段...

    1.添加字段: alter table  表名  add (字段  字段类型)  [ default  '输入默认值']  [null/not null]  ; 2.添加备注: comment on ...

  7. ORACLE中使用SQL语句查询所有员工的职位信息,并用DISTINCT消除重复信息。

    ORACLE中使用SQL语句查询所有员工的职位信息,并用DISTINCT消除重复信息. 在sqlplus中执行下面语句: select job from emp: 显示结果如下: SQL> se ...

  8. oracle分页查询sql语句通用,oracle分页查询sql语句,oracle分页查询sql语句详解

    oracle分页查询sql语句,oracle分页查询sql语句详解,Oracle分页查询sql语句 Oracle中分页和MySql中的分页不同,MySql中的分页使用关键字limit即可,相对简单一点 ...

  9. ORACLE百万记录SQL语句优化技巧

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...

  10. oracle 追踪特定sql语句

    --新建测试表 create tablespace test datafile 'E:\APP\ADMINISTRATOR\ORADATA\ORCL\test01.DBF' size 500m aut ...

最新文章

  1. 【C#】事件,委托3点详解
  2. TF:利用TF的train.Saver将训练好的W、b模型文件保存+新建载入刚训练好模型(用于以后预测新的数据)
  3. Windows内核实验004 API调用
  4. 13、Power Query-逆透视列的实例(下)
  5. Python基础教程:3个方面理解Python的类方法与静态方法
  6. Canvas的save和restore
  7. P6295 有标号 DAG 计数(多项式指数函数对数函数/二项式反演/动态规划/生成函数)
  8. (马世龙)Linux下CACTI完全搭建技术文档二
  9. 提出建议Do you want to..._44
  10. 计算机应用基础课改期望,《计算机应用基础》课改总结.doc
  11. java文件中注释出现乱码解决办法
  12. 学习NA,Dynamips实验环境(工大瑞普)下载地址
  13. 【Debug】 Packet for query is too large (1155878 > 1048576),max_allowed_packet设置.
  14. 60行C代码的shell领略Unix哲学之美
  15. unity3D游戏开发十之粒子系统
  16. 【百面机器学习之算法工程师读书笔记】——第十四章:人工智能的热门应用-游戏AI
  17. java.lang.OutOfMemoryError: GC overhead limit exceeded解决办法
  18. 贝叶斯估计、最大似然估计、最大后验概率估计的区别
  19. SAP 银企直连 通过 Http Get 方式下载交易明细文件
  20. 基于nodejs+vue的平面设计课程管理系统vscode

热门文章

  1. HbuilderX Node插件[sass]安装失败,可在命令行中使用'npm install'命令进行重新安装
  2. 如何使用DiskPart命令行格式化分区?
  3. 概率论与数理统计学习笔记——第8讲——多维随机变量的概念(3.1.3联合分布律的概念及性质)
  4. Neural Body
  5. RTP协议全解(H264码流和PS流)——看完这篇可以毕业
  6. 多用户 php源码_PHP多用户网络日记(青春日记) v1.0
  7. 关于频率(波长)与穿透、绕射能力的关系,终于有人能说明白了
  8. Merkle DAGs
  9. No qualifying bean of type ‘com.suming.crowd.service.api.AdminService‘ available: expected at least
  10. Centos7 unbound域名解析