常用数据操纵语言

DISTINCT:
    指定结果集中返回指定列存在不重复数据的记录
SELECT DISTINCT EMAIL  FROM HR.EMPLOYEES;

ROWNUM:
    使用ROWNUM列来查询结果集中前N个记录
SELECT * FROM HR.EMPLOYEES WHERE ROWNUM<=3;

显示列别名:

SELECT EMP_NAME AS 姓名 FROM HR.EMPLOYEES;

设置查询条件:
SELECT SALARY FROM HR.EMPLOYEES WHERE SALARY>2000 AND SALARY <4000;

在查询条件中使用BETWEEN关键字
SELECT SALARY FROM HR.EMPLOYEES WHERE SALARY BETWEEN 2000 AND 4000;

在查询条件中使用IN关键字
    指定查询的取值列表
SYS AS [email protected]>SELECT FIRST_NAME,LAST_NAME, SALARY FROM HR.EMPLOYEES WHERE SALARY IN (‘2000‘,‘3000‘);

FIRST_NAME         LAST_NAME               SALARY
-------------------- ------------------------- ----------
Anthony          Cabrio                 3000
Kevin             Feeney                 3000

实现模糊查询:
    使用LIKE关键字和通配符实现模糊查询
%    包含零个或多个任意字符的字符串
-    任意单个字符
?    任意单个字符
#    表示0~9的数字
[]    指定范围或集合中的任意单个字符,[a~f]表示a~f中的一个字符

SYS AS [email protected]>SELECT FIRST_NAME,LAST_NAME,PHONE_NUMBER FROM HR.EMPLOYEES WHERE PHONE_NUMBER LIKE ‘%80%‘;

FIRST_NAME         LAST_NAME               PHONE_NUMBER
-------------------- ------------------------- --------------------
Shelley          Higgins               515.123.8080
Trenna             Rajs               650.121.8009

排序结果集:
ORDER BY {<排序表达式>[ASC|DESC]} [,...N]
SELECT FIRST_NAME,LAST_NAME,SALARY FROM HR.EMPLOYEES WHERE ROWNUM<=10 ORDER BY SALARY DESC

对多列进行排序:
SELECT FIRST_NAME,LAST_NAME,SALARY,PHONE_NUMBER FROM HR.EMPLOYEES WHERE ROWNUM<=10 ORDER BY SALARY,PHONE_NUMBER;

使用分组统计:
    使用GROUP BY子句指定查询结果的分组条件
    选择列表中每一个非聚合表达式内的所有列都应包含在GROUP BY列表中,GROUP BY 表达式必须与选择列表表达式完全匹配
GROUP BY [ALL] <分组表达式>[,....n]
SYS AS [email protected]>SELECT DEPARTMENT_ID,AVG(SALARY) FROM HR.EMPLOYEES GROUP BY DEPARTMENT_ID;
DEPARTMENT_ID AVG(SALARY)
------------- -----------
      100  8601.33333
       30         4150

HAVING
    HAVING通常与GROUP BY 子句一起使用,作用与WHERE子句一样
    HAVING:子句搜索条件在进行分组操作之后应用
    WHERE:子句搜索条件在进行分组之前应用
SYS AS [email protected]>SELECT DEPARTMENT_ID,AVG(SALARY) FROM HR.EMPLOYEES GROUP BY DEPARTMENT_ID HAVING  AVG(SALARY)>4000;

DEPARTMENT_ID AVG(SALARY)
------------- -----------
      100  8601.33333
       30         4150
             7000
       20         9500

连接查询:
    内连接 使用比较运算符(=号),包含空值的列不与任何值匹配,不能包含在结果集中,空值不与其他的空值匹配
SYS AS [email protected]>SELECT T1.FIRST_NAME,T1.LAST_NAME,T2.DEPARTMENT_NAME FROM HR.DEPARTMENTS T2,HR.EMPLOYEES T1 WHERE T1.DEPARTMENT_ID=T2.DEPARTMENT_ID;

SYS AS [email protected]>SELECT T1.FIRST_NAME,T1.LAST_NAME,T2.DEPARTMENT_NAME FROM HR.DEPARTMENTS T2 INNER JOIN HR.EMPLOYEES T1 ON  T1.DEPARTMENT_ID=T2.DEPARTMENT_ID;

外连接:主表的每一行数据去匹配从表中的数据列,符合的返回到结果集中,不符合的,将被填上空值后返回到结果集中
     
    LEFT [OUTER] JOIN左向外连接:连接子句左侧的表为主表,主表中的所有记录都将出现在结果集中,如果主表中的记录在右表中没有匹配的数据,则结果集中右表的列值为空    
    SYS AS [email protected]>SELECT T1.DEPARTMENT_NAME,T2.FIRST_NAME FROM HR.DEPARTMENTS T1 LEFT OUTER JOIN HR.EMPLOYEES T2 ON T1.DEPARTMENT_ID=T2.DEPARTMENT_ID;
    
    RIGHT [OUTER] JOIN右向外连接:子句右侧的表为主表,主表中所有记录都将出现在结果集中,如果主表中的记录在左表中没有匹配的数据,则结果集中右表的列
    SYS AS [email protected]>SELECT T1.FIRST_NAME,T2.DEPARTMENT_NAME FROM HR.EMPLOYEES T1  RIGHT OUTER JOIN HR.DEPARTMENTS T2 ON T1.DEPARTMENT_ID=T2.DEPARTMENT_ID;

FULL [OUTER] JOIN完整外部连接:    连接包括连接表中的所有行,无论它们是否匹配(相关于左向外连接与右向外连接的并集)
SYS AS [email protected]>SELECT T1.FIRST_NAME,T2.DEPARTMENT_NAME FROM HR.EMPLOYEES T1  FULL  OUTER JOIN HR.DEPARTMENTS T2 ON T1.DEPARTMENT_ID=T2.DEPARTMENT_ID;

交叉连接:不常用,两个表中的每两行都可能互相组合成为结果集中的一行,一般用于穷举两个表的所有可能的记录组合
    SELECT T1.FIRST_NAME,T2.DEPARTMENT_NAME FROM HR.EMPLOYEES T1  CROSS  JOIN HR.DEPARTMENTS T2
    查询不存在员工的部门:
    SYS AS [email protected]>SELECT T1.FIRST_NAME,T2.DEPARTMENT_NAME FROM HR.EMPLOYEES T1  RIGHT OUTER JOIN HR.DEPARTMENTS T2 ON T1.DEPARTMENT_ID=T2.DEPARTMENT_ID WHERE T1.FIRST_NAME IS NULL;

使用简单的子查询:
    子查询就是在一个SELECT语句中又嵌套一个SELECT语句
    SYS AS [email protected]>SELECT FIRST_NAME,LAST_NAME,SALARY FROM HR.EMPLOYEES WHERE DEPARTMENT_ID=(SELECT DEPARTMENT_ID FROM HR.DEPARTMENTS WHERE DEPARTMENT_NAME=‘Marketing‘);
    
    查询所有低于平均工资的员工:
SYS AS [email protected]>SELECT FIRST_NAME,SALARY FROM HR.EMPLOYEES WHERE SALARY<(SELECT AVG(SALARY) FROM HR.EMPLOYEES);
    
    IN关键字与返回多值的子查询
    SYS AS [email protected]>SELECT FIRST_NAME,LAST_NAME,SALARY FROM HR.EMPLOYEES  WHERE DEPARTMENT_ID IN (SELECT DEPARTMENT_ID FROM HR.DEPARTMENTS WHERE DEPARTMENT_NAME=‘Marketing‘ OR DEPARTMENT_NAME=‘Purchasing‘);

使用UNION关键字的合并查询:
    将两个或更多查询的结果给合为单个结果集,结果集包含联合查询中的所有查询的全部行,会自动过滤重复的记录
    SYS AS [email protected]>SELECT DEPARTMENT_ID,DEPARTMENT_NAME FROM HR.DEPARTMENTS
        UNION   SELECT DEPARTMENT_ID,FIRST_NAME FROM HR.EMPLOYEES WHERE SALARY>1000;
    UNION ALL: 将不会过滤重复的记录

在SELECT语句中使用DECODE函数:
    将输入值和函数职的参数列表相比较,根据输入值返回一个对应值,如果参数列表中没有对应值,则返回默认值
    DECODE(<输入值>,<值1>,<结果1>[,<值2>,<结果2>][,<默认值>])
    SYS AS [email protected]>SELECT FIRST_NAME,DECODE(SALARY,‘2600‘,‘LOW‘,‘10000‘,‘HIGH‘,‘VERY_LOW‘)AS SALARY FROM HR.EMPLOYEES;
    
在SELECT 语句中使用CASE函数(与DECODE函数功能相同)
    CASE<输入值>WHEN<值1>THEN<结果1>
    [WHEN<值2>THEN<结果2>]
    [ELSE<默认结果>]
    END
SYS AS [email protected]>SELECT FIRST_NAME,CASE SALARY WHEN 2600 THEN ‘LOW‘ WHEN 10000 THEN ‘HIGH‘ ELSE ‘VERY_LOW‘ END  AS SALARY FROM HR.EMPLOYEES;
    CASE
    WHEN<逻辑表达式1>THEN<结果1>
    [WHEN<逻辑表达式2>THEN<结果2>]
    [ELSE<默认结果>]
    END

SELECT FIRST_NAME,CASE WHEN SALARY<=2000 THEN ‘LOW‘ WHEN SALARY>=3000 AND SALARY<=10000 THEN ‘HIGH‘ ELSE ‘VERY_LOW‘ END AS SALARY FROM HR.EMPLOYEES;

保存查询结果:
    将查询结果保存到一个新表中
    CREATE TABLE <新表名> AS
    <SELECT 子句>
    <FROM 子句>
    <WHERE 子句>
    SYS AS [email protected]>CREATE TABLE HR.EMP_USER AS SELECT FIRST_NAME,LAST_NAME,SALARY FROM HR.EMPLOYEES;
    SYS AS [email protected]>DESC HR.EMP_USER;
 Name                                   Null?    Type
 ----------------------------------------------------------------- -------- --------------------------------------------
 FIRST_NAME                                    VARCHAR2(20)
 LAST_NAME                               NOT NULL VARCHAR2(25)
 SALARY                                     NUMBER(8,2)

时间: 2024-10-25 02:42:27

常用数据操纵语言的相关文章

常用SQL语言概述(DDL、DML、DQL)

众所周知,SQL(Structure Query Language)是数据库的核心语言,近段时间学习数据库,部分基础概念有点模棱两可,今天索性把这几个常用的SQL概念简单记录下以作区分. 分类: DDL:数据定义语言(CREATE.DROP.ALTER) DML:数据操纵语言(INSERT.DELETE.UPDATE) DCL:数据控制语言(GRANT.REVOKE) DQL:数据查询语言(SELECT) 概述: 1.DDL(Data Definition Language):数据定义语言 DD

让你提前认识软件开发(33):数据操纵语言(DML)

第2部分 数据库SQL语言 数据操纵语言(DML) 数据操纵语言(Data Manipulation Language,DML)包括insert.delete和update语句,用于增.删.改数据. 本文用以下的表tb_employeeinfo作为例子加以说明: create table tb_employeeinfo (     employeeno         varchar(20)       not null,       -- 员工工号     employeename    va

oracle sql 基础(三):数据操纵语言

数据操纵语言,Data manipulation language,检称DML,主要包括检索(SELECT).插入(INSERT).更新(UPDATE).删除(DELETE),是SQL的一个核心部分.一条DML将开始一个事务,接下来的DML都是同一事务中的语句,直到提交(COMMIT)或回滚(ROLLBACK).下面我们来逐一介绍下ORACLE中的插入.更新.删除和合并(MERGE)的语法及实例解析.       一.INSERT 语句 1.INSERT 语句的语法 插入单行记录语法:INSER

PLC常用程序设计语言有哪些?

PLC常用程序设计语言: 在可编程控制器中有多种程序设计语言,它们是梯形图语言.布尔助记符语言.功能表图语言.功能模块图语言及结构化语句描述语言等.梯形图语言和布尔助记符语言是基本程序设计语言,它通常由一系列指令组成,用这些指令可以完成大多数简单的控制功能,例如,代替继电器.计数器.计时器完成顺序控制和逻辑控制等,通过扩展或增强指令集,它们也能执行其它的基本操作.功能表图语言和语句描述语言是高级的程序设计语言,它可根据需要去执行更有效的操作,例如,模拟量的控制,数据的操纵,报表的报印和其他基本程

30442数据操纵语言DML

5.5 SQL的数据操纵功能 5.5.1 数据插入 使用CREATE语句创建的数据表还只是一个“空壳”,表中没有任何数据.利用SQL语言提供的INSERT语句可以完成向数据表插入数据的任务. INSERT语句的语法格式为: INSERT [INTO] <table>[(<column1>[, <column2>…])] VALUES(<value1>[, <value2>…]); table表示表名,value1, value2, …分别表示待插

css常用中文语言包

/** * 中文语言包 */UM.I18N['zh-cn'] = { 'labelMap':{ 'anchor':'锚点', 'undo':'撤销', 'redo':'重做', 'bold':'加粗', 'indent':'首行缩进', 'snapscreen':'截图', 'italic':'斜体', 'underline':'下划线', 'strikethrough':'删除线', 'subscript':'下标','fontborder':'字符边框', 'superscript':'上标

DML 数据操纵语言

1.INSERT(插入)语言结构 INSERT INTO table(表名)(要插入的列名) VALUES(要插入的具体值): table:要插入数据的表的表名 column[,column]:表中要插入数据的列名 value:对应列中要插入的具体的数据值 列名:table(saledate)上架时间 1.对应:value(sysdate)当前系统时间 2.value(to_date('2012-3-3','yyyy-mm-dd'))某个具体时间

【三支火把】---常用C语言控制台函数总结(持续更新)

写了这么久的C程序,每次看到输出的结果都是从上往下排列的黑白框,有没有感觉很无聊啊?今天再次总结一个常用的控制台函数,能够帮助你做好一个好看的界面. 1.设置光标位置代码如下: 1 int main(void) 2 { 3 int a = 5; 4 COORD pos = {10,10}; //定义光标坐标位置 5 HANDLE hout://定义一个句柄 6 hout = GetStdHandle(STD_OUTPUT_HANDLE); //获得输出设备的句柄 7 SetConsoleCurs

常用C语言函数 - sprintf()

#define PrgFileNameFormatEx "O%04ld.txt" sprintf(Temp,PrgFileNameFormatEx,(long)(data1->Pcode)) int sprintf( char *buffer, const char *format [, argument] ... ); 除了前两个参数类型固定外,后面可以接任意多个参数.而它的精华,显然就在第二个参数:格式化字符串上. printf和sprintf都使用格式化字符串来指定串的格式