- 浏览: 258858 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
矮蛋蛋:
HttpClient
Android通过http协议POST传输方式 -
ern_me:
$ emca -config dbcontrol db
我 ...
OracleDBConsoleorcl 服务无法启动 -
WinLi:
很好,很强大
Android 开发笔记 动画效果 --Animation -
夜游神:
解决了。web.xml时面 编码过滤器的位置错了。。
(转)struts2解决中文乱码 -
左看右看:
写得很详细,学习了,谢谢!
(转)使用 JMeter 完成常用的压力测试
<o:p></o:p>
2 SQL语言与编程
SQL是Structured Query Language(结构化查询语言)的缩写,SQL是关系数据库的标准语言,其功能不是仅限于查询,而是非常全面强大,易学易用,所以几乎现在市面上的所有数据库管理系统都支持SQL语言,使之成为数据库领域中的主流语言.
2.1 SQL语言概述
<st1:chsdate w:st="on" isrocdate="False" islunardate="False" day="30" month="12" year="1899">2.1.1</st1:chsdate> SQL语言的基本概念
1.SQL语言的产生及发展
SQL是由Boyce和Chamberlin于1974提出的,并在IBM公司研制的关系型数据库管理系统上得以实现,它功能丰富,语言简洁,易学易用,赢得了众多的用户,被许多数据库厂商所采用,以后又由各厂商进行了不断的修改,完善.1986年10月,美国国家标准局(American National Standard Institute,简称ANSI)的数据库委员会X3H2批准了SQL作为关系数据库语言的美国标准,且公布了SQL标准文本(SQL-86),1987年,国际标准化组织(International Standard Organization,简称ISO)也采纳了这个标准.此后SQL标准不断得到修改和完善,ANSI又于1989年公布了SQL-89标准,1992年公布了SQL-92标准,1999年公布了SQL-99标准.
2.SQL语言的特点
SQL之所以能成为国际化的关系数据库标准语言,源于它的易用易学和功能强大,概况起来SQL的特点主要包括:
(1) 语言简单易学
SQL语言的语法结构中的关键字接近英语的自然语言,且只使用了几个关键字(如:CREATE,DROP,ALTER,UPDATE,INSERT,DELETE,SELECT)就可实现主要功能的操作,易学,易记,易操作.
(2) 是一种非过程化的语言
使用SQL语言在执行数据操作时,无需了解怎么做,只需告诉系统要做什么,至于怎样完成操作,都由系统自动安排.
(3) 是一种面向集合的语言
SQL语言操作的对象可以是元组的集合,操作的结果也可是元组的集合.
(4) 一种结构,多种使用方式
SQL语言即可作为一种独立的数据库语言来使用,又可嵌入其它高级语言(宿主语言)中作为嵌入式语言来使用.
(5) 综合功能强
SQL语言集数据定义,数据操纵和数据控制于一体,可以独立完成数据库的定义,查询,更新,维护,完整性控制,安全性控制等一系列操作.
2.1.2 SQL的语言分类
是目前使用最广泛的数据库语言.主要用于进行数据库的查询,定义,操纵和控制,是一种功能齐全的关系数据库标准语言.
SQL语言包括四大类:
数据定义语言(Date Definition Language):简称DDL,用于定义,修改,删除数据库表结构,视图,索引等.
数据操纵语言(Date Manegement Language):简称DML,用于对数据库中的数据进行查询和更新操作.
数据控制语言(Date Control Language):简称DCL,用于设置数据库用户的各种操作权限.
事务处理语言:用于保证数据库中数据的完整性.
1. 数据定义语言(DDL)
常用的DDL语句有:
Create Schema:创建模式
Create Table :创建基本表.
Create Index :创建索引.
Create View :创建视图.
Drop Schema:删除模式.
Drop Table :删除基本表.
Drop Index :删除索引.
Drop View :删除视图.
Alter Table :修改表结构.
2. 数据操作语言(DML)
常用的DML语句有:
Insert :插入记录到数据库表或视图.
Delete:删除数据库表或视图的记录.
Update:更改数据库表或视图的数据.
Select:查询数据库表或视图的数据.
3. 数据控制语言(DCL)
常用的DCL语句有:
GRANT:将权限或角色授予用户或其他角色.
REVOKE:撤消用户或数据库角色权限.
4. 数据库事务处理
常用的事务处理语句有:
BEGIN TRANSACTION
COMMIT
ROLLBACK
其中,BEGIN TRANSACTION用于控制事务的开始,COMMIT用于正常提交事务.ROLLBACK用于控制事务的非正常结束,将事务回滚.
2.1.3 SQL支持的数据库模式
SQL支持数据库的三级模式结构,其中,基本表与模式相对应;视图与外模式相对应;存储文件与内模式相对应.如图2-1.
如图所示,一个存储文件对应一个基本表,一个基本表可对应多个视图,一个视图可由多个基本表导出,一个视图可由多个用户访问,一个用户也可访问多个视图,用户也可直接访问多个基本表.
2.1.4 标准SQL语言与数据库产品中的SQL语言
标准SQL语言与实际数据库产品中的SQL语言并不完全一致,即标准SQL语言的某些功能在实际数据库产品中有可能实现不了,而在实际数据库产品中,也可能对标准SQL语言的功能进行了扩充,即在标准SQL语言中不能实现的某些功能,在实际数据库产品中却有可能实现.应在具体使用某个数据库产品时对此问题加以关注,使用时要查看有关产品的技术资料.
2.2 数据定义
SQL的数据定义包括模式定义,基本表定义,视图定义和索引定义.
2.2.1 模式的定义和删除
1. 模式定义
语法格式:CREATE SCHEMA AUTHORIZATION
创建了一个模式,即创建了一个数据库,许多的RDBMS中把创建模式称为创建数据库,如在SQL SERVER 2000中,就是用CREATE DATABASE语句代替CREATE SCHEMA语句.
创建模式后,可进一步创建该模式所包含的数据库对象.如:基本表,视图,索引等.
例 2-1 创建一个Teacher模式.
CREATE SCHEMA Teacher AUTHORIZATION ZYL;
其中Teacher为模式名,ZYL为用户名.若省略模式名,则模式名默认为用户名.
例2-2 在SQL SERVER 2000中创建数据库Teacher.
CREATE DATABASE Teacher;
其中,Teacher为数据库名.
2. 模式删除
语法格式:DROP SCHEMA
其中,选择CASCADE选项,表示在删除模式的同时,将该模式中的所有数据库对象一起删除.选择RESTRICT选项,表示在删除模式的时候,该模式中已经包含了数据库对象(表或视图等),则拒绝执行该删除语句;该模式中未包含任何数据库对象,则允许执行该删除语句.
例2-3 删除例2-1创建的Teacher模式.
DROP SCHEMA Teacher CASCADE;
例2-4 在SQL SERVER 2000中删除例2-2创建的数据库Teacher.
DROP DATABASE Teacher;
2.2.2 创建基本表
语法格式:
CREATE TABLE
(列定义[,...N],
表级完整性约束[,...N]);
说明:
(1) :所要创建的基本表的名称.
(2) 列定义::= [][,...N]
(3) :所定义的列(属性)的名称,一个表中不能有同名的列.
(4) :规定该列数据所属的数据类型,应视该列数据的具体内容和SQL提供的数据类型来定义.
数据类型
说明符
解释
数值型
长整型
INT 或 INTEGER
表示整数值,一般用4个字节存储
短整型
SMALLINT
表示整数值,一般用2个字节存储
定点数值型
DECIMAL(p,[s])
表示定点数.p指定总的数值位数,包括小数点和小数点后的位数.s表示小数点后的位数.
定点数值型
NUMERIC(p,[s])
同DECIMAL.
浮点数值型
REAL
取决于机器精度的浮点数.
浮点数值型
DOUBLE PRECISION
取决于机器精度的双精度浮点数.
浮点数值型
FLOAT
表示浮点数,一般精度至少为n位数字.
字符串
型
定长字符串
CHAR(n)
按固定长度n存储字符串,若实际字符串长度小于n,则后面填充空格,若实际字符串长度大于n,则报错.
变长字符串
VERCHAR(n)
按实际字符串长度存储,若实际字符串长度小于n,后面不填充空格,若实际字符串长度大于n,则报错.
位串型
位串
BIT(n)
表示长度为n的二进制位串
变长位串
BIT VARYING(n)
表示长度为n的变长二进制位串
日期时间型
日期型
DATE
表示日期值年,月,日.表示形式为YYYY-MM-DD.
时间型
TIME
表示时间值时,分,秒.格式为HH:MM:SS.
(1) 列完整性约束:定义该列上数据必须满足的条件.一般有:
NULL 允许为空值(默认值)
NOT NULL 不允许为空值
PRIMARY KEY 主键约束
FOREIGN KEY 外键约束
UNIQUE 唯一性约束
CHECK 检查约束
DEFAULT 默认值
(2) :定义在列或组合列上的完整性约束.
例2-5 创建"教工登记表"
CREATE TABLE 教工登记表
(教师编号 CHAR(6) PRIMARY KEY, /*定义为列级主键约束*/
姓名 CHAR(8) NOT NULL, /*姓名列不能取空值*/
性别 CHAR(2) NOT NULL, /*性别列不能取空值*/
年龄 SMALLINT,
婚否 BIT,
职称 CHAR(6),
基本工资 DECIMAL(7,2),
部门 CHAR(10));
系统执行以上语句后,数据库中就建立了一个名为"教工登记表"的空表,只有表结构而无记录(元组).系统将该表的定义及有关约束条件存放在数据字典中.
注意:
(1)定义每列时,要用逗号隔开每列.
(2)该例将"婚否"定义为BIT类型,则只能输入1或0,代表TRUE和FALSE.
例2-6 创建"教工工资表"
CREATE TABLE 教工工资表
(工资编号 INT,
姓名 CHAR(8) NOT NULL,
基本工资 DECIMAL(7,2),
岗位补贴 DECIMAL(7,2),
奖金 DECIMAL(7,2),
扣除 DECIMAL(7,2),
实发工资DECIMAL(7,2));
例2-7 创建"学生干部登记表"
CREATE TABLE 学生干部登记表
(学号 CHAR(8),
姓名 CHAR(8),
性别 CHAR(2),
年龄 SMALLINT,
班级 CHAR(12),
任职 CHAR(10),
教师编号 CHAR(6));
2.2.3 修改表结构
修改表结构,指的是对已定义的表增加新的列(属性)或删除多余的列(属性).
语法格式:
ALTER TABLE
[ADD[列完整性约束]]
[DROP ]
[MODIFY ]
[ADD CONSTRAINT]
[DROP CONSTAINT];
说明:
(1)ADD[列完整性约束]:为指定的表添加新的列,并可在新添加的列上增加列级完整性约束.
(2)MODIFY :修改表中指定列的数据类型,当该列有约束定义时,不能修改.
(3)DROP :删除表中指定的列.
(4)ADD CONSTRAINT:为指定表添加表级完整性约束.
(5)DROP CONSTAINT:删除指定表中的某个指定的表级完整性约束.
例2-8 在"教工登记表"中增加一列"政治面貌".
ALTER TABLE 教工登记表
ADD 政治面貌 CHAR(10);
例2-9 在"教工登记表"中修改"政治面貌"列的数据类型.
ALTER TABLE 教工登记表
MODIFY 政治面貌 VARCHAR(8);
例2-10 在"教工登记表"中删除"政治面貌" 一列.
ALTER TABLE 教工登记表
DROP 政治面貌;
例2-11 在"教工登记表"中的姓名列增加一个表级唯一性约束WYYS1.
ALTER TABLE 教工登记表
ADD CONSTRAINT WYYS1 UNIQUE (姓名);
例2-12 在"教工登记表"中删除上例中建立的一个表级主键约束WYYS1.
ALTER TABLE 教工登记表
DROP CONSTRAINT WYYS1;
2.2.4 删除基本表
即将指定的表从数据库中删除,删除表后,所有属于表的数据,索引,视图和触发器也将被自动删除,视图的定义仍被保留在数据字典中,但已无法使用.
语法格式:
DROP TABLE
例2-13 删除"教工工资表".
DROP TABLE 教工工资表;
2.2.5 创建索引
创建索引可提高查询速度,可在经常要进行检索的列上建立索引,但并非索引越多越好,因为索引自身也要占用一定的资源.索引可创建在一列或多列的组合上.
语法格式:
CREATE [UNIQUE][CLUSTER] INDEX ON 表名(列名[,…N])
说明:
(1)UNIQUE:表示建立唯一性索引,即索引列不允许有重复值.
(2)CLUSTER:表示建立的是聚簇索引,否则建立的是非聚簇索引.聚簇索引即指索引项的顺序与表中记录的物理存放顺序一致,一个表中最多可建立一个聚簇索引,可建多个非聚簇索引.
(3)在列名后可用ASC或DESC指定升序或降序,默认为升序(ASC).
(4)如在多列组合上建立索引,则各列名之间用逗号隔开.先按第一指定列排序,然后按第二,依此类推.
例2-14 重新创建"教工工资表"后,为该表创建一个索引,按"基本工资"降序排列.
CREATE INDEX SY1 ON 教工工资表(基本工资 DESC);
例2-15 为"教工登记表"创建一个索引,先按"职称"升序排列,然后按"基本工资"降序排列.
CREATE INDEX SY2 ON 教工登记表(职称,基本工资 DESC);
例2-16 在"教工登记表"的"姓名"列上按升序创建一个唯一性的聚簇索引.
CREATE UNIQUE CLUSTED INDEX SY3 ON 教工登记表(姓名);
2.2.6 删除索引
索引不再需要时,应及时将其删除,可释放空间,减少维护的开销.
语法格式:
DROP INDEX
例2-17 将"教工工资表"中"基本工资"列上建立的索引删除.
DROP INDEX 教工工资表.SY1;
例2-18 将"教工登记表"中"姓名"列上建立的唯一性的聚簇索引删除.
DROP INDEX 教工登记表.SY3;
索引删除后,有关索引的描述也将会从数据字典中删除.
2.3 数据更新
数据更新是指对基本表中数据进行更改,包括向基本表中插入数据,修改基本表中原有数据,删除基本表中的某些数据.
2.3.1 表中插入数据
在已存在的表中插入数据,一般有两种方法,一种是一次插入一个元组(一条记录),另一种是一次插入多个元组(一批记录).
1.插入一个元组
执行一次命令只能完成一个元组的插入.
语法格式:
INSERT [INTO] [()]
VALUES();
说明:
(1)():要插入值的列的列名序列,各列名之间用逗号隔开,该项为可选项,若省略该项,则表示插入数据到所有列.
(2)():是要插入到表中的数据值,各数据值之间用逗号隔开,各值对应于(列名表)中的各列.
例2-19 在"教工登记表"中插入一条记录.
INSERT INTO 教工登记表
VALUES('JSJ001','江河','男',30,1,'讲师',880,'计算机系');
例2-20 在"教工登记表"中插入一条记录,该记录只包含部分数据.
INSERT INTO 教工登记表 (编号,姓名,性别,部门)
VALUES('JSJ002','张大伟','男','计算机系');
注意:
(1) 没有指定属性列时,必须为每个列赋值,顺序必须与表的各列的顺序一致.
(2) 字符串类型的值要用单引号括起来.
(3) 部分列赋值时,对于允许为空的属性列,如果没有赋予具体值,系统将自动添加NULL(空值).
(4) 不允许为空的列必须赋值,否则出错.
以上两条命令执行后,"教工登记表 "中存在两条记录如下:
教师编号 姓名 性别 年龄 婚否 职称 基本工资 部门
JSJ001 江河 男 30 1 讲师 880 计算机系
JSJ002 张大伟 男 NULL NULL NULL NULL 计算机系
若要再插入下列记录:
JGX001 王冠 男 32 1 讲师 800 经管系
JGX002 刘柳 女 38 1 副教授 1000 经管系
JCB002 张扬 女 28 0 讲师 800 基础部
JGX003 王芝环 女 24 0 助教 500 经管系
则执行下列一组命令:
INSERT INTO 教工登记表
VALUES('JGX001','王冠','男',32,1,'讲师',800,'经管系');
INSERT INTO 教工登记表
VALUES('JGX002','刘柳','女',38,1,'副教授',1000,'经管系');
INSERT INTO 教工登记表
VALUES('JCB002','张扬','女',28,0,'讲师',800,'基础部');
INSERT INTO 教工登记表
VALUES('JGX003','王芝环','女',24,0,'助教',500,'经管系');
此时,教工登记表中有如下记录:
教师编号 姓名 性别 年龄 婚否 职称 基本工资 部门
JCB002 张扬 女 28 0 讲师 800 基础部
JGX001 王冠 男 32 1 讲师 800 经管系
JGX002 刘柳 女 38 1 副教授 1000 经管系
JGX003 王芝环 女 24 0 助教 500 经管系
JSJ001 江河 男 30 1 讲师 880 计算机系
JSJ002 张大伟 男 NULL NULL NULL NULL 计算机系
2.插入一组元组
可通过使用查询语句,将查询结果作为插入值,实现一组元组的插入.
语法格式:
INSERT [INTO] [()]
〈子查询〉;
例2-21 建立一个"教工查询表",在表中插入一批记录,这些记录取之于"教工登记表".
CREATE TABLE 教工查询表
(编号 CHAR(6) NOT NULL,
姓名 CHAR(8) NOT NULL,
性别 CHAR(2) NOT NULL,
职称 CHAR(6),
部门 CHAR(10) );
建立"教工查询表"后,再执行插入命令:
INSERT 教工查询表
SELECT 教师编号,姓名,性别,职称,部门
FROM 教工登记表;
命令执行后,"教工查询表"中存在下列记录,即同时插入了六条记录.
编号 姓名 性别 职称 部门
JCB002 张扬 女 讲师 基础部
JGX001 王冠 男 讲师 经管系
JGX002 刘柳 女 副教授 经管系
JGX003 王芝环 女 助教 经管系
JSJ001 江河 男 讲师 计算机系
JSJ002 张大伟 男 NULL 计算机系
2.3.2 表中修改数据
需要时,表中的数据值可进行修改.修改数据有几种方式,可按指定条件修改一个或多个元组,也可不指定条件从而对表中所有元组进行修改,还可利用子查询的结果进行修改(见3.4.9).
1.按指定条件修改元组
语法格式:
UPDATE
SET =[,=][,…N]
WHERE ;
说明:
列名1,列名2…为要修改的列的列名,表达式1,表达式2…为要赋予的新值.
WHERE:指定对满足条件的记录进行修改.
例2-22 修改"教工登记表"中'张大伟'的记录,年龄为24,婚否为未婚,职称为助教,基本工资为660.
UPDATE 教工登记表
SET 年龄=24,婚否=0,职称='助教',基本工资=660
WHERE 姓名='张大伟';
结果表中的记录为:
教师编号 姓名 性别 年龄 婚否 职称 基本工资 部门
JCB002 张扬 女 28 0 讲师 800 基础部
JGX001 王冠 男 32 1 讲师 800 经管系
JGX002 刘柳 女 38 1 副教授 1000 经管系
JGX003 王芝环 女 24 0 助教 500 经管系
JSJ001 江河 男 30 1 讲师 880 计算机系
JSJ002 张大伟 男 24 0 助教 660 计算机系
例2-23 修改"教工登记表"中的基本工资值,给所有的讲师增加基本工资100元.
UPDATE 教工登记表
SET 基本工资=基本工资+100
WHERE 职称='讲师';
结果表中的记录为:
教师编号 姓名 性别 年龄 婚否 职称 基本工资 部门
JCB002 张扬 女 28 0 讲师 900 基础部
JGX001 王冠 男 32 1 讲师 900 经管系
JGX002 刘柳 女 38 1 副教授 1000 经管系
JGX003 王芝环 女 24 0 助教 500 经管系
JSJ001 江河 男 30 1 讲师 980 计算机系
JSJ002 张大伟 男 24 0 助教 660 计算机系
2.修改表中所有元组
语法格式:
UPDATE
SET =[,=][,…N]
例2-24 修改"教工登记表"中的年龄值,给所有教工的年龄值增加1.
UPDATE 教工登记表
SET 年龄=年龄+1;
结果表中的记录为:
教师编号 姓名 性别 年龄 婚否 职称 基本工资 部门
JCB002 张扬 女 29 0 讲师 900 基础部
JGX001 王冠 男 33 1 讲师 900 经管系
JGX002 刘柳 女 39 1 副教授 1000 经管系
JGX003 王芝环 女 25 0 助教 500 经管系
JSJ001 江河 男 31 1 讲师 980 计算机系
JSJ002 张大伟 男 25 0 助教 660 计算机系
2.3.3 表中删除数据
删除表中数据,指的是在表中删除记录,表的结构,约束,索引等并没有被删除.删除数据有几种方式,可按指定条件删除一个或多个元组,也可不指定条件从而对表中所有元组进行删除,还可利用子查询的结果进行删除(见3.4.9).
1.按指定条件删除一个或多个元组
语法格式:
DELETE FROM
WHERE ;
例2-26 删除"教工工资表"中"李力"的记录.
DELETE
FROM 教工工资表
WHERE 姓名='李力';
假设删除前"教工工资表"中有如下记录:
工资号 姓名 基本工资 岗位补贴 奖金 扣除 实发工资
1 江河 980.00 400.00 400.00 250.00 1430.00
2 张大伟 660.00 300.00 250.00 120.00 1090.00
3 王冠 900.00 400.00 300.00 200.00 1300.00
4 刘柳 1000.00 600.00 400.00 260.00 1740.00
5 张扬 900.00 400.00 300.00 180.00 1320.00
6 王芝环 500.00 300.00 150.00 150.00 800.00
7 李力 900.00 600.00 400.00 236.00 1664.00
执行删除后结果表中的记录为:
工资号 姓名 基本工资 岗位补贴 奖金 扣除 实发工资
1 江河 980.00 400.00 400.00 250.00 1430.00
2 张大伟 660.00 300.00 250.00 120.00 1090.00
3 王冠 900.00 400.00 300.00 200.00 1300.00
4 刘柳 1000.00 600.00 400.00 260.00 1740.00
5 张扬 900.00 400.00 300.00 180.00 1320.00
6 王芝环 500.00 300.00 150.00 150.00 800.00
2.删除表中所有元组
语法格式:
DELETE FROM
例2-27 删除"教工查询表"中的所有记录.
DELETE
FROM 教工查询表
结果表为:
编号 姓名 性别 职称 部门
表中所有的元组被删除,但表的属性,约束,索引等仍被保留.
2.4 数据查询
查询是数据库的主要操作,SQL提供的查询语句SELECT,可以灵活方便地完成各种查询.
2.4.1 SELECT语句的格式
语法格式:
SELECT [ALL|DISTINCT]
FROM
[WHERE ]
[GROUP BY ]
[HAVING ]
[ORDER BY ]
说明:
(1)ALL| DISTINCT:选DISTINCT,则每组重复元组只输出一条元组;选ALL,则所有重复元组全部输出.默认为ALL.
(2)FROM :指定要查询的基本表或视图,可以是多个表或视图.
(3)WHERE :指定查询要满足的条件.
(4)GROUP BY :指定根据列名表进行分类汇总查询.
(5)ORDER BY :指定将查询结果按中指定的列进行升序(ASC)或降序(DESC)排列.〈列名表〉中可指定多个列,各列名之间用逗号隔开.先按第一指定列排序,然后按第二,依此类推.
2.4.2 简单查询
最基本的SELECT语句格式为:
SELECT [ALL|DISTINCT]
FROM
1.查询表中所有的列
若查询表中所有列,可不必将所有列名列出,而用"*"替代.
例2-28 查询"教工登记表"中的所有信息.
SELECT *
FROM教工登记表;
则查询结果为:
教师编号 姓名 性别 年龄 婚否 职称 基本工资 部门
JCB002 张扬 女 29 0 讲师 900 基础部
JGX001 王冠 男 33 1 讲师 900 经管系
JGX002 刘柳 女 39 1 副教授 1000 经管系
JGX003 王芝环 女 25 0 助教 500 经管系
JSJ001 江河 男 31 1 讲师 980 计算机系
JSJ002 张大伟 男 25 0 助教 660 计算机系
2.查询表中指定列
例2-29 查询"教工登记表"中"姓名","年龄","职称"列的所有信息.
SELECT姓名,年龄,职称
FROM教工登记表;
则查询结果为:
姓名 年龄 职称
张扬 29 讲师
王冠 33 讲师
刘柳 39 副教授
王芝环 25 助教
江河 31 讲师
张大伟 25 助教
3.查询列表中指定常量和计算表达式
例2-30 查询"教工工资表"中各教工的应发工资.
SELECT 姓名,基本工资+岗位补贴+奖金
FROM 教工工资表;
则查询结果为:
姓名
江河 1780.00
张大伟 1210.00
王冠 1600.00
刘柳 2000.00
张扬 1600.00
王芝环 950.00
4.给查询列指定别名
语法格式:列名 AS 别名
例2-31 查询"教工工资表"中各教工的应发工资,将计算查询出来的列用列名"应发工资"显示.
SELECT 姓名,基本工资+岗位补贴+奖金 AS 应发工资
FROM 教工工资表
则查询结果为:
姓名 应发工资
江河 1780.00
张大伟 1210.00
王冠 1600.00
刘柳 2000.00
张扬 1600.00
王芝环 950.00
5.消除查询结果中的重复行
在有些查询结果中,可能会包含一些重复行,使用DISTINCT关键字,可消除查询结果中的重复行,默认为ALL,取所有行.
例2-32 查询"教工登记表"中各部门名称.
若执行下列语句:
SELECT 部门
FROM 教工登记表
则执行结果为:
部门
基础部
经管系
经管系
经管系
计算机系
计算机系
若改为执行下列语句:
SELECT DISTINCT 部门
FROM 教工登记表
则执行结果为:
部门
基础部
计算机系
经管系
第一次执行,使用的是默认值ALL,所以将所有结果都列出;第二次执行,使用了DISTINCT关键字,消除了重复行,相同的部门只取一个.
2.4.3 选择查询
即根据给定的查询条件,查询出满足条件的记录.
语法格式:
SELECT [ALL|DISTINCT]
FROM
WHERE
根据WHERE子句中使用的关键字不同,可进行不同的选择查询.
1.使用关系表达式和逻辑表达式表示查询条件
关系运算符:>(大于),= (大于等于),<= (小于等于),=(等于),(不等于)
逻辑运算符:AND(与),OR(或),NOT(非)
例2-33 查询"教工登记表"中职称为"讲师"的记录.
SELECT *
FROM 教工登记表
WHERE 职称='讲师';
则查询结果为:
教师编号 姓名 性别 年龄 婚否 职称 基本工资 部门
JCB002 张扬 女 29 0 讲师 900.00 基础部
JGX001 王冠 男 33 1 讲师 900.00 经管系
JSJ001 江河 男 31 1 讲师 980.00 计算机系
例2-34 查询"教工工资表"中基本工资大于800的记录.
SELECT *
FROM 教工工资表
WHERE 基本工资>800;
则查询结果为:
工资号 姓名 基本工资 岗位补贴 奖金 扣除 实发工资
1 江河 980.00 400.00 400.00 250.00 1430.00
3 王冠 900.00 400.00 300.00 200.00 1300.00
4 刘柳 1000.00 600.00 400.00 260.00 1740.00
5 张扬 900.00 400.00 300.00 180.00 1320.00
例2-35 查询"教工登记表"中职称为"讲师"且年龄小于30的记录.
SELECT *
FROM 教工登记表
WHERE 职称='讲师' AND 年龄<30;
则查询结果为:
教师编号 姓名 性别 年龄 婚否 职称 基本工资 部门
JCB002 张扬 女 29 0 讲师 900.00 基础部
2.使用[NOT] BETWEEN关键字表示查询条件
使用BETWEEN关键字指定在某个范围内查询,NOT BETWEEN则正好相反.
例2-36 查询"教工登记表"中基本工资在500至800之间的记录.
SELECT *
FROM 教工登记表
WHERE 基本工资 BETWEEN 500 AND 800;
则查询结果为:
教师编号 姓名 性别 年龄 婚否 职称 基本工资 部门
JGX003 王芝环 女 25 0 助教 500.00 经管系
JSJ002 张大伟 男 25 0 助教 660.00 计算机系
例2-37 查询"教工登记表"中基本工资不在500至800之间的记录.
SELECT *
FROM 教工登记表
WHERE 基本工资 NOT BETWEEN 500 AND 800;
则查询结果为:
教师编号 姓名 性别 年龄 婚否 职称 基本工资 部门
JCB002 张扬 女 29 0 讲师 900.00 基础部
JGX001 王冠 男 33 1 讲师 900.00 经管系
JGX002 刘柳 女 39 1 副教授 1000.00 经管系
JSJ001 江河 男 31 1 讲师 980.00 计算机系
3.使用IN关键字表示查询条件
使用IN关键字可以查询符合列表中任何一个值的的记录.
例2-38 查询"教工登记表"中职称是"讲师","副教授","教授"的记录.
SELECT *
FROM 教工登记表
WHERE 职称 IN('讲师','副教授','教授');
则查询结果为:
教师编号 姓名 性别 年龄 婚否 职称 基本工资 部门
JCB002 张扬 女 29 0 讲师 900.00 基础部
JGX001 王冠 男 33 1 讲师 900.00 经管系
JGX002 刘柳 女 39 1 副教授 1000.00 经管系
JSJ001 江河 男 31 1 讲师 980.00 计算机系
4.使用LIKE关键字进行模糊查询
使用LIKE运算符可完成对字符串的模糊匹配.即查找指定的属性列值与相匹配(LIKE)或不相匹配(NOT LIKE)的元组,字符串中可使用通配符.
语法格式:
[NOT] LIKE '' [ESCAPE'']
通配符:%:表示任意多个字符.
_:表示单个任意字符.
[ESCAPE'']:指当要查询的字符串本身就含有通配符"%"或"_"时,要使用ESCAPE''来对通配符进行转义.
例2-39 查询"教工登记表"中江姓教工的记录.
SELECT *
FROM 教工登记表
WHERE 姓名 LIKE '江%';
则查询结果为:
教师编号 姓名 性别 年龄 婚否 职称 基本工资 部门
JSJ001 江河 男 31 1 讲师 980.00 计算机系
例2-40查询"教工登记表"中年龄为30几岁教工的记录.
SELECT *
FROM 教工登记表
WHERE 年龄 LIKE '3_';
则查询结果为:
教师编号 姓名 性别 年龄 婚否 职称 基本工资 部门
JGX001 王冠 男 33 1 讲师 900.00 经管系
JGX002 刘柳 女 39 1 副教授1000.00 经管系
JSJ001 江河 男 31 1 讲师 980.00 计算机系
例2-41查询"教工登记表"中非计算机系的教工的记录.
SELECT *
FROM 教工登记表
WHERE 部门 NOT LIKE '计%';
则查询结果为:
教师编号 姓名 性别 年龄 婚否 职称 基本工资 部门
JCB002 张扬 女 29 0 讲师 900.00 基础部
JGX001 王冠 男 33 1 讲师 900.00 经管系
JGX002 刘柳 女 39 1 副教授 1000.00 经管系
JGX003 王芝环 女 25 0 助教 500.00 经管系
5.使用[NOT] NULL关键字进行查询
使用NULL和NOT NULL关键字用于查询某一字段值为空或不空的记录.
例2-42 假设在"教工登记表"中插入一条记录:
JCB001 汪洋 男 27 1 NULL 500 基础部
再查询"教工登记表"中职称列不为空的记录
发表评论
-
mysql 导出sql文件
2009-04-05 15:32 3250mysql 导出sql文件:先用cmd到mysql的bin目录 ... -
OracleDBConsoleorcl 服务无法启动
2008-12-12 16:27 3303OracleDBConsoleorcl 服务无法启动 C:&g ... -
读取ORACLE表结构
2008-03-21 11:39 2098select A.column_name 字段名,A.d ... -
数据库连接池的基本原理
2008-01-10 21:00 2108传统的数据库连接方式(指通过DriverManager和基本实 ... -
(转)数据库连接池的原理机制
2008-01-10 20:56 12371、基本概念及原理 ... -
oracle备份数据
2007-11-16 16:26 857导出数据: exp 用户名/密码@服务名 导入数据 imp ... -
SQL语言与编程二
2007-11-14 10:07 20435.使用[NOT] NULL关键字进行查询 使用NULL和NO ...
相关推荐
【SQL语言编程基础】是数据库领域中的核心概念,它是一种标准化的查询语言,主要用于管理和操作关系型数据库。SQL,全称Structured Query Language,允许用户执行数据定义、查询、操纵和控制等一系列操作。在SQL ...
本书涵盖了SQL语言的基础知识,以及如何在实际环境中运用这些知识进行数据库编程。 在SQL Server 2008中,SQL(Structured Query Language)是管理和处理关系数据库系统的主要工具。它分为四大类别:数据查询语言...
Transact-SQL语言编程Transact-SQL语言编程
sql 语言 编程 数据库 sql语言入门 sql 语言 编程 数据库 sql语言入门
以上知识点详细介绍了T-SQL语言编程的基础语法、数据类型、系统函数、数据库对象操作、编程实践和控制流语句等多个方面。这些是T-SQL编程中的核心概念,掌握了这些概念,就能进行更复杂的数据库操作和程序设计。
但是,从标题我们可以推测该文档可能是关于如何使用Oracle数据库中的SQL语言进行高级编程。Oracle数据库是一个功能强大的关系数据库管理系统(RDBMS),支持复杂的数据处理和企业级的应用程序。Oracle SQL高级编程...
Java语言SQL编程接口
【T-SQL编程与应用】是关于数据库编程的重要主题,主要涵盖了T-SQL语言的基础知识。T-SQL,全称Transact-SQL,是SQL Server所使用的扩展SQL语言,用于执行数据库查询、更新、事务处理等多种任务。 T-SQL语言的基础...
首先,SQL Server 2000作为一款关系型数据库管理系统(RDBMS),其核心是SQL语言。书中会详细讲解SQL标准语言的语法,包括SELECT语句用于数据查询,INSERT、UPDATE和DELETE用于数据的增、改、删操作。此外,还会介绍...
【SQL语言】是编程入门的重要知识点,全称为“结构化查询语言”。它的出现源自IBM的SYSTEM R项目,基于E.E.Codd的关系模型理论。SQL语言因其简洁性、强大功能和易学性,自1981年推出后,迅速成为各种数据库管理系统...
尽管SQL语言很强大,但是对于 那些没有或者只有很少数据库和计算机科学相关知识的人来说,SQL语言是难以理解 的。另一方面,如果SQL语句写作不当,将会给数据库系统造成很大的安全隐患, 其中最重要的隐患就是SQL...
接着,书中会详细讲解SQL语言,这是所有数据库操作的基础。读者将学习如何使用SELECT语句进行数据查询,包括基本的字段选择、排序、分组,以及更复杂的子查询、联接操作。此外,还会涉及INSERT、UPDATE和DELETE语句...
不过,我可以根据标题和描述提供的信息,以及对SQL Server 2008和T-SQL语言基础知识的理解,为您构建一份关于Microsoft SQL Server 2008中T-SQL语言基础知识的知识点概要。 Microsoft SQL Server 2008是微软公司...
2. **T-SQL语言基础**:T-SQL(Transact-SQL)是SQL Server的扩展语法,用于执行查询、插入、更新和删除数据。学习T-SQL的基本语句,如SELECT、INSERT、UPDATE、DELETE,以及如何使用WHERE子句进行条件过滤。 3. **...
文章强调,高级语言的过程性结构可以弥补SQL语言在实现复杂应用系统方面的不足,比如在用户交互、图形化输入输出数据的处理上。因此,将SQL语言嵌入到C语言中,利用各自语言的优势,可以构建出高效的图像处理应用。 ...
sql编程语
oracle实验指导,pl/sql程序设计指导。
内容概要:《SQL语言基础》资源是一本全面深入介绍SQL(Structured Query Language 结构化查询语言)的教程,涵盖了SQL的基本概念、基本语法、数据查询语言(DQL)、数据操纵语言(DML)、数据定义语言(DDL)以及...
《Oracle SQL高级编程/数据库系列》的作者莫顿以精炼、风趣的语言揭开了Oracle SQL高级编程的神秘面纱。所涵盖的内容涉及SQL核心、SQL执行、分析函数、联结、测试与质量保证等,并提供大量实用性建议,且总结出...