基本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. 事件委托能够优化js性能
  2. 成功解决cv2.error: OpenCV(4.1.2) C:\projects\opencv-python\opencv\modules\imgproc\src\color.cpp:182: err
  3. 给你的博客加上“Fork me on Github”彩带(转)
  4. JavaWeb 后端 三 之 Response Request 学习笔记
  5. 祁是计算机,南京邮电大学计算机/软件学院导师介绍:祁正华
  6. SEO:避免关键词内部竞争带来的无法收录问题,
  7. 漫谈工业软件(2)-IEC61499标准
  8. islower,isalnum,isalpha,tolower,isdigit等c++对ascii字符的处理判断
  9. python语言简单界面选择苏康码图片文字识别
  10. 免费的查询IP归属地接口分享
  11. 计算机excel四舍五入,如何在Excel中设置四舍五入
  12. Unity批量给模型上同一个材质
  13. 关于融云在APIcloud中的集成
  14. 8086CPU结构与功能
  15. 黑客零基础入门教程,从入门到精通学习路线规划,看完这篇就够了。
  16. 宏基4738G拆机、除尘、加内存条图文教程
  17. python 龙型图(Dragon Curve)
  18. 2021河南CCPC省赛 1011 未成年之夜(签到题)
  19. 2021年电工(初级)考试题及电工(初级)模拟考试
  20. The bean 'xxx' could not be injected as a 'xxx'because it is a JDK dynamic proxy that implements

热门文章

  1. 【java】算法题:一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级台阶总共有多少种跳法?列举所有跳法
  2. Redis集群只读问题
  3. 【STM32】STM32 CubeMx使用教程一--安装教程
  4. for循环语句与while循环语句的结构与用法
  5. 转录组分析流程|数据处理与De novo组装(一)
  6. python爬视频选择清晰度_Python爬取新浪微博博主高清视频
  7. 这将会是我的第一篇博客
  8. 全网多种方法解决[rejected] master -> master (fetch first)的错误
  9. [HTML]URL(统一资源定位器)
  10. PyTorch 可视化工具visdom启动过程中报错解决方法