企业门户网站建设方案怎么写,门户网站建设工作总结,织梦高端大气网站模板,长沙中企动力DM_SQL 语言符合结构化查询语言 SQL 标准#xff0c;是标准 SQL 的扩充。它集数据定义、数据查询、数据操纵和数据控制于一体#xff0c;是一种统一的、综合的关系数据库语言。它功能强大#xff0c;使用简单方便、容易为用户掌握。DM_SQL 语言具有如下特点#xff1a;
1.…DM_SQL 语言符合结构化查询语言 SQL 标准是标准 SQL 的扩充。它集数据定义、数据查询、数据操纵和数据控制于一体是一种统一的、综合的关系数据库语言。它功能强大使用简单方便、容易为用户掌握。DM_SQL 语言具有如下特点
1.功能一体化
DM_SQL 的功能一体化表现在以下两个方面 DM_SQL 支持多媒体数据类型用户在建表时可直接使用。DM 系统在处理常规数据与多媒体数据时达到了四个一体化一体化定义、一体化存储、一体化检索、一体化处理最大限度地提高了数据库管理系统处理多媒体的能力和速度 DM_SQL 语言集数据库的定义、查询、更新、控制、维护、恢复、安全等一系列操作于一体每一项操作都只需一种操作符表示格式规范风格一致简单方便很容易为用户所掌握。
2.两种用户接口使用统一语法结构的语言
DM_SQL 语言既是自含式语言又是嵌入式语言。作为自含式语言它能独立运行于联机交互方式。作为嵌入式语言DM_SQL 语句能够嵌入到 C 和 C 语言程序中将高级语言(也称主语言)灵活的表达能力、强大的计算功能与 DM_SQL 语言的数据处理功能相结合完成各种复杂的事务处理。而在这两种不同的使用方式中DM_SQL 语言的语法结构是一致的从而为用户使用提供了极大的方便性和灵活性。
3.高度非过程化
DM_SQL 语言是一种非过程化语言。用户只需指出“做什么”而不需指出“怎么做”对数据存取路径的选择以及 DM_SQL 语句功能的实现均由系统自动完成与用户编制的应用程序与具体的机器及关系 DBMS 的实现细节无关从而方便了用户提高了应用程序的开发效率也增强了数据独立性和应用系统的可移植性。
4.面向集合的操作方式
DM_SQL 语言采用了集合操作方式。不仅查询结果可以是元组的集合而且一次插入、删除、修改操作的对象也可以是元组的集合相对于面向记录的数据库语言 (一次只能操作一条记录) 来说DM_SQL 语言的使用简化了用户的处理提高了应用程序的运行效率。
5.语言简洁方便易学
DM_SQL 语言功能强大格式规范表达简洁接近英语的语法结构容易为用户所掌握。
DM_SQL 所支持的数据类型
字符数据类型
CHAR/CHARACTER
语法CHAR[(长度)]
CHAR 数据类型指定定长字符串。定义 CHAR 类型的列时可以指定一个不超过 32767 的正整数作为字节长度
例如
CHAR(100)
如果未指定长度缺省为 1
CHAR 类型列的最大存储长度由数据库页面大小决定CHAR 数据类型最大存储长度和页面大小的对应关系请见下表。
但是在表达式计算中该类型的长度上限不受页面大小限制为 32767。
数据库页面大小实际最大长度4 K19008 K390016 K800032 K8188
这个限制长度只针对基表中的列在定义变量的时候可以不受这个限制长度的限制。
另外实际插入表中的列长度要受到记录长度的约束每条记录总长度不能大于页面大小的一半。
VARCHAR/VARCHAR2
语法VARCHAR[(长度)]
VARCHAR 数据类型指定变长字符串用法类似 CHAR 数据类型可以指定一个不超过 32767 的正整数作为字节或字符长度
例如
VARCHAR(100)指定 100 字节长度
VARCHAR(100 CHAR)指定 100 字符长度。
如果未指定长度缺省为 8188 字节。
VARCHAR 类型在表达式计算中的长度上限不受页面大小限制为 32767.
CHAR 同 VARCHAR 的区别在于前者长度不足时系统自动填充空格而后者只占用实际的字节空间。
另外实际插入表中的列长度要受到记录长度的约束每条记录总长度不能大于页面大小的一半。
数值数据类型
NUMERIC/DECIMAL/DEC/NUMBER 类型
语法NUMERIC[(精度 [, 标度])]
NUMERIC 数据类型用于存储零、正负定点数。其中精度是一个无符号整数定义了总的数字数精度范围是 1 至 38。标度定义了小数点右边的数字位数。
一个数的标度不应大于其精度如果实际标度大于指定标度那么超出标度的位数将会四舍五入省去。
例如NUMERIC(4,1)定义了小数点前面 3 位和小数点后面 1 位共 4 位的数字范围在-999.9 到 999.9。
所有 NUMERIC 数据类型如果其值超过精度DM 会返回一个出错信息如果超过标度则多余的位会被截断。
如果不指定精度和标度缺省精度为 38标度无限定。
INTEGER/INT 类型
语法INTEGER
用于存储有符号整数精度为 10标度为 0。取值范围为-2147483648 (-2^31) 2147483647(2^31-1)。
BIGINT 类型
语法BIGINT
用于存储有符号整数精度为 19标度为 0。取值范围为-9223372036854775808(-2^63)9223372036854775807(2^63-1)。
SMALLINT 类型
语法SMALLINT
用于存储有符号整数精度为 5标度为 0。取值范围为-32768(-2^15) 32767(2^15-1)。
TINYINT/BYTE 类型
语法TINYINT
用于存储有符号整数精度为 3标度为 0。取值范围为-128 127。
FLOAT 类型
语法FLOAT[(精度)]
FLOAT 是带二进制精度的浮点数精度范围1~126。
当精度小于等于 24 时DM 将其转换为标准 C 语言中的 REAL 类型当精度大于 24 时转换为标准 C 语言中的 DOUBLE 类型。
FLOAT 取值范围-1.710^308 1.710^308。
DOUBLE 类型
语法DOUBLE[(精度)]
DOUBLE 是带二进制精度的浮点数。DOUBLE 类型的设置是为了移植的兼容性。精度与取值范围与 FLOAT 一样。
DOUBLE PRECISION 类型
语法DOUBLE PRECISION[(精度)]
该类型指明双精度浮点数。DOUBLE PRECISION 类型的设置是为了移植的兼容性。精度与取值范围与 FLOAT 一样。
位串数据类型
BIT 类型
语法BIT
BIT 类型用于存储整数数据 1、0 或 NULL只有 0 才转换为假其他非空、非 0 值都会自动转换为真可以用来支持 ODBC 和 JDBC 的布尔数据类型。
DM 的 BIT 类型与 SQL SERVER2000 的 BIT 数据类型相似。
日期时间数据类型
DATE 类型
语法DATE
DATE 类型包括年、月、日信息定义了-4712-01-01和9999-12-31之间任何一个有效的格里高利日期。
CREATE TABLE T2(C1 DATE,C2 DATE,C3 DATE);
INSERT INTO T2 VALUES(DATE 1999-10-01,1999/10/01,1999.10.01);
TIME 类型
语法TIME[(小数秒精度)]
TIME 类型包括时、分、秒信息定义了一个在00:00:00.000000和23:59:59.999999之间的有效时间。
TIME 值的书写方式有两种一是 TIME时:分:秒二是时:分:秒。
CREATE TABLE T2(C1 TIME(2),C2 TIME,C3 TIME);
INSERT INTO T2 VALUES(TIME 09:10:21.20,09:10:21,9:10:21.49);
TIMESTAMP/DATETIME 类型
语法TIMESTAMP[(小数秒精度)]
TIMESTAMP 类型包括年、月、日、时、分、秒信息定义了一个在-4712-01-01 00:00:00.000000000和9999-12-31 23:59:59.999999999之间的日期时间。
TIMESTAMP 值的书写方式有两种一是 TIMESTAMPDATE 值 TIME 值 二是DATE 值 TIME 值 。语法中TIMESTAMP 也可以写为 DATETIME。
CREATE TABLE T2(C1 TIMESTAMP,C2 DATETIME,C3 TIMESTAMP,C4 DATETIME,C5 TIMESTAMP);
INSERT INTO T2 VALUES(TIMESTAMP 2002-12-12 09:10:21,TIMESTAMP 2002-12-12 09:10:21,2002/12/12 09:10:21,2002.12.12 09:10:21,DATETIME2002-12-12 09:10:21 );
多媒体数据类型
多媒体数据类型的字值有两种格式一是字符串例如’ABCD’二是 BINARY例如0x61626364。
TEXT、LONG、LONGVARCHAR、CLOB 只支持字符串。
BFILE 不适用上面两种格式。BFILE 指明的文件只能只读访问。
BINARY 格式的多媒体数据类型以及 BFILE 数据类型不支持比较。
不支持为多媒体数据类型的字段指定精度。
BINARY 类型
语法BINARY[(长度)]
BINARY 数据类型用来存储定长二进制数据。在基表中定义 BINARY 类型的列时其最大存储长度由数据库页面大小决定可以指定一个不超过其最大存储长度的正整数作为列长度缺省长度为 1 个字节。
BINARY 类型在表达式计算中的长度上限为 32767。
BINARY 常量以 0x 开始后面跟着数据的十六进制表示例如0x2A3B4058。
VARBINARY/RAW 类型
语法VARBINARY[(长度)]
VARBINARY 数据类型用来存储变长二进制数据用法类似 BINARY 数据类型可以指定一个不超过 32767 的正整数作为数据长度。缺省长度为 8188 个字节。VARBINARY 数据类型的实际最大存储长度由数据库页面大小决定具体最大长度算法与 VARCHAR 类型的相同其在表达式计算中的长度上限也与 VARCHAR 类型相同为 32767。
TEXT/LONG/LONGVARCHAR/CLOB 类型
语法TEXT
TEXT 为变长字符串类型。其字符串的长度最大为 100G-1 字节。DM 利用它存储长的文本串。
IMAGE/LONGVARBINARY 类型
语法IMAGE
IMAGE 用于指明多媒体信息中的图像类型。图像由不定长的象素点阵组成长度最大为 100G-1 字节。该类型除了存储图像数据之外还可用于存储任何其它二进制数据。
BLOB 类型
语法BLOB
BLOB 类型用于指明变长的二进制大对象长度最大为 100G-1 字节。
BFILE 类型
语法BFILE
BFILE 用于指明存储在操作系统中的二进制文件文件存储在操作系统而非数据库中仅能进行只读访问。
DM_SQL 语言支持的表达式
DM 支持多种类型的表达式包括数值表达式、字符串表达式、时间值表达式、时间间隔值表达式等。
数值表达式
一元算符 和 -
语法exp 、-exp
当单独使用时 和 – 代表表达式的正负号。
select -(-5), NOWPRICE from PRODUCTION.PRODUCT WHERE NOWPRICE10;
查询结果为5 6.1000 在 SQL 中由于两短横即“--”表示“注释开始”则双负号必须是-(-5)而不是--5。 一元算符 ~
语法~exp
按位非算符要求参与运算的操作数都为整数数据类型。
select ~10 from PRODUCTION.PRODUCT WHERE NOWPRICE10;
查询结果为-11
只有精确数值数据类型的运算
两个相同类型的整数运算的结果类型不变两个不同类型的整数运算的结果类型转换为范围较大的那个整数类型。
整数与 NUMERICDEC 等类型运算时SMALLINT 类型的精度固定为 5标度为 0
INTEGER 类型的精度固定为 10标度为 0BIGINT 类型的精度固定为 19标度为 0。
exp1exp2 结果的精度为二者整数部分长度(即精度标度)的最大值与二者标度的最大值之和标度是二者标度的最大值
exp1-exp2 结果的精度为二者整数部分长度的最大值与二者标度的最大值之和标度是二者标度的最大值
exp1*exp2 结果的精度为二者的精度之和标度也是二者的标度之和
exp1/exp2 结果为 DEC 类型缺省的精度为 38标度未限定
exp1%exp2 结果为 DEC 类型缺省的精度为 38标度未限定。
使用 、-运算
select NOWPRICE1, NOWPRICE-1 from PRODUCTION.PRODUCT WHERE NOWPRICE10;
查询结果为7.1 5.1
使用*、/运算
select NOWPRICE*10, NOWPRICE/10 from PRODUCTION.PRODUCT WHERE NOWPRICE10;
查询结果为61 0.61
使用 % 运算
select NOWPRICE%4 from PRODUCTION.PRODUCT WHERE NOWPRICE10;
查询结果为2.1
有近似数值数据类型的运算
对于 exp1exp2 、exp1- exp2 、exp1*exp2 、exp1/exp2 、exp1%exp2 中 exp1 和 exp2 只要有一个为近似数值数据类型则结果为近似数值数据类型。
drop table TEST;
create table TEST(C1 int, C2 double);
insert into TEST values(5, 3.3);
select C1-C2, C1/C2 from TEST;
查询结果为1.700000000000000E00 1.515151515151515E00
二元算符
语法exp1 exp2
按位与算符要求参与运算的操作数都为整数数据类型。
select 20 10 from PRODUCTION.PRODUCT WHERE NOWPRICE10;
查询结果为0
二元算符 |
语法exp1 | exp2
按位或算符要求参与运算的操作数都为整数数据类型。
select 20 | 10 from PRODUCTION.PRODUCT WHERE NOWPRICE10;
结果是30
二元算符 ^
语法exp1 ^ exp2
按位异或算符要求参与运算的操作数都为整数数据类型。
select 20 ^ 10 from PRODUCTION.PRODUCT WHERE NOWPRICE10;
查询结果为30
二元算符、
语法exp1 exp2
exp1 exp2
左移、右移运算符要求参与运算的操作数只能为整数数据类型、精确数据类型。
左移运算符的使用
select 1 3 from PRODUCTION.PRODUCT WHERE NOWPRICE10;
查询结果为8
右移运算符的使用
select 8 3 from PRODUCTION.PRODUCT WHERE NOWPRICE10;
查询结果为1
当在表达式之间使用 、 时对于表达式 exp1、exp2 的类型规则如下 只有整数数据类型的运算
左右操作数都为 smallint、tinyint 时操作结果为 int 类型
左右操作数都为 int 类型时操作结果为 int 类型
左右操作数都为 bigint 类型时操作结果为 bigint 类型。
左操作数是 int、smallint、tinyint 类型右操作数为 int、smallint、tinyint 类型时操作结果为范围较大的类型。
当左操作数或右操作数有一个是 bigint 类型时操作结果为 bigint 类型。 有精确数据类型的运算
当左操作数、右操作数都是精确数据类型时分别四舍五入转化成 bigint 类型后运算结果为 bigint 类型
当整数与精确数据类型运算时将精确数据类型四舍五入转化成 bigint 类型后运算结果为 bigint 类型。 有字符串数据类型的运算
字符串指数字字符串不支持字符串与字符串运算
当整数与数字字符串数据类型运算时结果为整数数据类型
当精确数据类型与字符串数据类型运算时结果为 bigint 类型。
字符串表达式
连接 ||
语法STR1 || STR2
(STR1 代表字符串 1STR2 代表字符串 2)
连接操作符对两个运算数进行运算其中每一个都是对属于同一字符集的字符串的求值。它以给定的顺序将字符串连接在一起并返回一个字符串。其长度等于两个运算数长度之和。如果两个运算数中有一个是 NULL则 NULL 等价为空串。
select 武汉 || ADDRESS1 from PERSON.ADDRESS WHERE ADDRESSID3;
查询结果为武汉青山区青翠苑 1 号
时间值表达式
时间值表达式的结果为时间值类型包括日期(DATE)类型时间(TIME)类型和时间戳(TIMESTAMP)间隔类型。DM SQL 不是对于任何的日期时间和间隔运算数的组合都可以计算。如果任何一个运算数是 NULL运算结果也是 NULL。下面列出了有效的可能性和结果的数据类型。
日期 间隔日期-间隔和间隔 日期得到日期
日期表达式的计算是根据有效格里高利历日期的规则。如果结果是一个无效的日期表达式将出错。参与运算的间隔类型只能是 INTERVAL YEAR、INTERVAL MONTH、INTERVAL YEAR TO MONTH、INTERVAL DAY。
如果间隔运算数是年-月间隔则没有从运算数的 DAY 字段的进位。
select PUBLISHTIME INTERVAL 1 YEAR, PUBLISHTIME - INTERVAL 1 YEAR
from PRODUCTION.PRODUCT
where PRODUCTID1;
查询结果为2006-04-01 2004-04-0144444
时间 间隔时间-间隔和间隔 时间得到时间
时间表达式的计算是根据有效格里高利历日期的规则。如果结果是一个无效的时间表达式将出错。参与运算的间隔类型只能是 INTERVAL DAY、INTERVAL HOUR、INTERVAL MINUTE、INTERVAL SECOND、INTERVAL DAY TO HOUR、INTERVAL DAY TO MINUTE、INTERVAL DAY TO SECOND、INTERVAL HOUR TO MINUTE、INTERVAL HOUR TO SECOND、INTERVAL MINUTE TO SECOND。
例 对时间值进行 、-小时间隔运算。
SELECT TIME 19:00:00INTERVAL 9 HOUR,TIME 19:00:00-INTERVAL 9 HOUR;
查询结果为04:00:00 10:00:00
时间戳记 间隔时间戳记-间隔和间隔 时间戳记得到时间戳记
时间戳记表达式的计算是根据有效格里高利历日期的规则。如果结果是一个无效的时间戳记表达式将出错。参与运算的间隔类型只能是 INTERVAL YEAR、INTERVAL MONTH、INTERVAL YEAR TO MONTH、INTERVAL DAY、INTERVAL HOUR、INTERVAL MINUTE、INTERVAL SECOND、INTERVAL DAY TO HOUR、INTERVAL DAY TO MINUTE、INTERVAL DAY TO SECOND、INTERVAL HOUR TO MINUTE、INTERVAL HOUR TO SECOND、INTERVAL MINUTE TO SECOND。
与时间的计算不同当结果的小时值大于等于 24 时结果进位到天。
例
SELECT TIMESTAMP2007-07-15 19:00:00INTERVAL9HOUR,TIMESTAMP2007-07-15 19:00:00-INTERVAL9HOUR;
查询结果为2007-07-16 04:00:00 2007-07-15 10:00:00
注在含有 SECOND 值的运算数之间的一个运算的结果具有等于运算数的小数秒精度的小数秒精度。
日期 数值日期-数值和数值 日期得到日期
日期与数值的运算等价于日期与一个 INTERVAL ‘数值’ DAY 的时间间隔的运算。
例 1 未设置 或-的数值时返回操作发生的日期
SELECT CURDATE(); //假设该查询操作发生在2011年9月29日
查询结果为2011-09-29
例 2 返回当前日期 数值后的结果
SELECT CURDATE() 2;
查询结果为2011-10-01
例 3 返回当前日期-数值的结果
SELECT CURDATE() - 100;
查询结果为2011-06-21
时间间隔值表达式
日期-日期得到间隔
由于得到的结果可能会是“年-月-日”间隔而这是不支持的间隔类型故要对结果强制使用语法
(日期表达式-日期表达式)时间间隔限定符
结果由时间间隔限定符中最不重要的日期字段决定。
例 日期值-日期值得到间隔
SELECT (PUBLISHTIME-DATE1990-01-01)YEAR TO MONTH FROM PRODUCTION.PRODUCT WHERE PRODUCTID1;
查询结果为INTERVAL 15-3 YEAR(9) TO MONTH
时间时间得到间隔
要对结果强制使用语法
(时间表达式-时间表达式)时间间隔限定符
结果由时间间隔限定符中最不重要的时间字段决定。
例 时间值-时间值得到间隔
SELECT (TIME19:00:00-TIME10:00:00) HOUR;
查询结果为INTERVAL 9 HOUR(9)
时间戳记 - 时间戳记得到间隔
要对结果强制使用语法
(时间戳记表达式-时间戳记表达式)时间间隔限定符
结果由时间间隔限定符中最不重要的日期时间字段决定。
例 时间戳值-时间戳值得到间隔
SELECT (TIMESTAMP 2007-07-15 19:00:00- TIMESTAMP 2007-01-15 19:00:00) HOUR;
查询结果为INTERVAL 4344 HOUR(9)
年月间隔 年月间隔和年月间隔 - 年月间隔得到年月间隔
参加运算的两个间隔必须有相同的数据类型若得出无效的间隔的表达式将出错。结果的子类型包括运算数子类型所有的域关于结果的引导精度规定如下
如果二者的子类型相同则为二者引导精度的最大值如果二者的子类型不同则为与结果类型首字段相同的那个运算数的引导精度。
例 对年月间隔进行 、-运算得到年月间隔
SELECT INTERVAL2007-07YEAR(4) TO MONTH INTERVAL7MONTH,
INTERVAL2007-07YEAR(4) TO MONTH - INTERVAL7MONTH;
查询结果为INTERVAL 2008-2 YEAR(9) TO MONTH INTERVAL 2007-0 YEAR(9) TO MONTH
日时间隔 日时间隔和日时间隔 - 日时间隔得到日时间隔
参加运算的两个间隔必须有相同的数据类型若得出无效的间隔表达式将出错。结果的子类型包含运算数子类型所有的域结果的小数秒精度为两运算数的小数秒精度的最大值关于结果的引导精度规定如下
如果二者的子类型相同则为二者引导精度的最大值如果二者的子类型不同则为与结果类型首字段相同的那个运算数的引导精度。
例 对日时间隔进行 、-运算得到日时间隔
SELECT INTERVAL7 15DAY TO HOUR INTERVAL10:10MINUTE TO SECOND,
INTERVAL7 15DAY TO HOUR - INTERVAL10:10MINUTE TO SECOND;
查询结果为
INTERVAL 7 15:10:10.000000 DAY(9) TO SECOND(6)INTERVAL 7 14:49:50.000000 DAY(9) TO SECOND(6)
运算符的优先级
当一个复杂的表达式有多个运算符时运算符优先性决定执行运算的先后次序。运算符有下面这些优先等级(从高到低排列)。在较低等级的运算符之前先对较高等级的运算符进行求值。
( )
(一元正)、-(一元负)、~(一元按位非)
*(乘)、/(除)、%(取余数)
(加)、-(减)
|| (串联)
(左移)、(右移)
(按位与)、^(按位异)、|(按位或)
DM_SQL 数据定义语言
用户数据库建立后就可以定义基表来保存用户数据的结构。
DM 数据库的表可以分为 两类分别为数据库内部表和外部表数据库内部表由数据库管理系统自行组织管理而外部表在数据库的外部组织是操作系统文件。
其中内部表包括数据库基表、HUGE 表和水平分区表。
定义数据库基表
-- 创建employee表
CREATE TABLE employee
(employee_id INTEGER,employee_name VARCHAR2(20) NOT NULL,hire_date DATE,salary INTEGER,department_id INTEGER NOT NULL
);-- 使用 CREATE TABLE 语句创建 department 表
CREATE TABLE department
(department_id INTEGER PRIMARY KEY,department_name VARCHAR(30) NOT NULL
);
-- 非空约束
ALTER TABLE employee MODIFY(hire_date not null);
-- 主键约束
ALTER TABLE employee ADD constraint pk_empid PRIMARY KEY(employee_id);
-- 外键约束ALTER TABLE employee ADD constraint fk_dept FOREIGN KEY (department_id) REFERENCES department (department_id);
DM_SQL 数据操纵语言
SQL书写规范
A. 关键字不能被拆分、缩写 也不能分行 B. 大小写不敏感除了’ ’、” ”以外 C. 可以写在一行或者多行可以换行 D. 采用缩进可提高语句的可读性。
简单查询
A. SELECT 标识选择哪些列FROM标识从哪个表中选择 B. 省略模式名set schema 模式名 C. 查询结果出现乱码客户端字符集和数据库冲突 语法 select () from ();
--单列查询
eg:查询员工表的姓名
SQLselect employee_name from dmhr.employee;
--多列查询
eg:查询员工表的姓名部门编号工资
SQL select employee_name,department_id,salary from dmhr.employee;
--查询所有列
SQLSelect * from dmhr.employee;
--对列起别名
eg:查询员工姓名和工资
SQLselect employee_name,salary as gz from dmhr.employee;
SQLselect employee_name,salary gz from dmhr.employee;
连接 ||
eg:查询“***的工资是”
SQLselect employee_name|| 的工资是:||salary from dmhr.employee;
去重复 distinct (隐藏排序-升序)
eg:在员工表查询部门编号
SQLselect distinct department_id from dmhr.employee;
--表达式
eg:为所有人工资加 2000 SQLselect employee_name,salary,salary2000 from dmhr.employee;
过滤查询带条件查询
比较运算符、逻辑运算、in、is null/is not null、between and like 语法Select () from () where ();
--比较运算符 !
eg:查询名为“马学铭”的工资
SQLselect employee_name,salary from dmhr.employee where employee_name马学铭;
SQLselect employee_name,salary,department_id from dmhr.employee where salary30000;
--逻辑运算符and or not
and:如果两个分量条件都为真则返回true
or如果其中一个分量条件为真则返回true
not:如果下面的条件为假则返回true
eg:查询部门编号为101且工资大于10000的员工
SQLselect employee_name,salary,department_id from dmhr.employee where department_id101 and salary 10000; eg:查询部门编号为103或者工资大于30000的员工
SQLselect employee_name,salary,department_id from dmhr.employee where department_id103 or salary 30000;
--模糊查询like % _
%匹配0个或多个字符_匹配 1 个字符
eg:查询姓陈的员工姓名和部门编号
SQLselect employee_name,department_id from dmhr.employee where employee_name like 陈%;
eg:查询名字里带有“强”的员工姓名和部门编号
SQLselect employee_name,department_id from dmhr.employee where employee_name like %强%; eg:查询姓陈且姓名为两个字的员工姓名和部门编号
SQLselect employee_name,department_id from dmhr.employee where employee_name like 陈_;
--in 用来查询某列值属于指定集合的元组
eg:查询部门编号为101和102的员工
SQLselect employee_name,department_id from dmhr.employee where department_id in (101,102)
--is null/is not null null 为空不等于 0
eg:查询部门编号为空/不为空的员工
SQLselect employee_name,job_id,department_id from dmhr.employee where department_id is null;
SQLselect employee_name,job_id,department_id from dmhr.employee where department_id is not null;
between *** and *** 表示范围
eg:工资在10000~20000之间的员工
SQLselect employee_name,department_id,salary from dmhr.employee where salary BETWEEN 10000 and 20000;
等价于SQLselect employee_name,salary from dmhr.employee where salary 10000 and salary 20000;
分组函数
COUNT总个数函数 MAX最大值函数 MIN最小值函数 AVG平均值集数 SUM总和函数 语法Select () from () where () group by () having (); 使用说明 AVG、SUM 的参数必须为数值类型 MAX、MIN 的结果数据类型与参数类型保持一致 group by(先分组,再聚合)给查询的结果进行分组除了聚合函数不用跟在 group by 后面其他 select 列必须要跟在 group by 后面having是对 group by 的进一步过滤having 不能单独使用。
eg:统计工资大于30000的员工数
SQLselect count(1)from dmhr.employee where salary30000;
eg:求部门工资和大于 10 万的部门
SQLselect department_id,sum (salary) from dmhr.employee group by department_id having sum (salary) 100000;
eg求部门编号为101的员工工资最大值
SQLselect department_id,max(salary)from dmhr.employee group by department_id having department_id101;
eg求部门编号为103的员工工资最小值
SQLselect department_id,min(salary)from dmhr.employee group by department_id having department_id103;
eg求部门编号为104的员工工资平均值SQLselect department_id,avg(salary)from dmhr.employee group by department_id having department_id104;
连接查询
内连接inner)
结果集只显示满足条件的记录
--自然连接 -
查询不需要指定连接列列名自己过滤两个表的连接列的列名和数据类型要一致。
eg:连接列department_id
SQLselect employee_name,department_id,department_name from dmhr.employee natural join dmhr.department;
--交叉连接cross join笛卡集---尽量避免容易拖死数据库
SQLselect count(*) from dmhr.employee; emoployee表的行集
SQLselect count(*) from dmhr.department; departmen表的行集
SQLselect count(*) from dmhr.employee cross join dmhr.department; 两表行集乘积
--join ... using 子句
在满足多个连接列时可以指定一个列做连接连接列的前面不能加表名或者是前缀join 关键字指定连接的两张表using 指明连接列要求 using 中的列存在于两张连接表中。
eg:指定连接列 department_id
SQLselect employee_name,department_name,department_id
from dmhr.employee
join dmhr.department
using (department_id);
--join ... on子句
join 关键字指定连接的两张表on 子句指定连接条件表达式其中不允许出现 rownum可为表设置简单代称。
eg查询员工入职时间
SQLselect e1.employee_name,j1.start_date
from dmhr.employee e1
join dmhr.job_history j1
on e1.employee_idj1.employee_id;
--hash join
可以通过 hint 强制走 hash join
优化器 CBO 根据小表的连接列生成 hash 值连接大表扫描大表
eg查询员工编号和所属部门SQLselect e.EMPLOYEE_ID,e.EMPLOYEE_NAME,d.DEPARTMENT_NAME from dmhr.employee e inner
hash join dmhr.department d
on e.department_id d.department_id;
外连接outer) 结果集除了显示满足条件的记录不满足的也显示用 null 代替
左外连接
把 left join 左边的全部显示出来右边只显示满足条件的记录不满足条件的用 null 代替
eg查询员工电话号码和所属部门
SQLselect e.employee_name,e.phone_num,d.department_name
from dmhr.employee e
left join dmhr.department d
on d.department_ide.department_id;
右外连接
把 right join 右边的全部显示出来右边只显示满足条件的记录不满足条件的用 null 代替
SQLselect e.employee_name,e.phone_num,d.department_name
from dmhr.employee e
right join dmhr.department d
on d.department_ide.department_id;
全外连接
左外连接右外连接 SQLselect e.employee_name,e.phone_num,d.department_name
from dmhr.employee e
full join dmhr.department d
on d.department_ide.department_id;
子查询
当一个查询的结果是另一个查询的条件时就叫子查询。子查询先运行子查询的结果是主查询的条件。子查询可以嵌套子查询子查询可以做临时表字段。
单行子查询一次只返回一条记录
eg查询马学铭的工资和部门编号
SQLselect employee_name,salary,department_id
from dmhr.employee
where employee_id (select employee_id from dmhr.employee where employee_name马学铭); 多行子查询一次返回多条记录
eg查询比102部门所有人工资都高的员工
SQLselect employee_name,salary,department_id
from dmhr.employee
where salary all (select salary from dmhr.employee where department_id102);