关系数据库标准语言SQL汇总
- 格式:doc
- 大小:66.50 KB
- 文档页数:14
sql知识点总结大全一、SQL的基本概念SQL(Structured Query Language)是一种专门用来与数据库进行交互的语言,它是一种标准的数据库查询语言,被用于操作关系数据库管理系统(RDMS)。
SQL可以用来增删改查数据库中的数据,也可以用来创建或删除数据库和表格。
SQL是一个非常强大而且灵活的语言,它为程序员和数据库管理员提供了强大的数据管理和查询能力。
SQL的基本概念包括:数据定义语言(DDL)、数据操纵语言(DML)、数据查询语言(DQL)、数据控制语言(DCL)以及数据事务控制语言(TCL)。
1.数据定义语言(DDL)数据定义语言用于定义数据库的结构和组件,包括创建、修改和删除数据库、表格、索引等。
常见的DDL语句包括:CREATE、ALTER、DROP等。
2.数据操纵语言(DML)数据操纵语言用于对数据库中的数据进行增、删、改。
常见的DML语句包括:SELECT、INSERT、UPDATE、DELETE等。
3.数据查询语言(DQL)数据查询语言用于从数据库中检索数据,包括查询特定的数据行或列。
DQL语句中最常用的是SELECT语句,用于检索数据库中的数据。
4.数据控制语言(DCL)数据控制语言用于控制数据库的访问权限和安全性,包括分配权限、撤销权限、创建角色等。
常见的DCL语句包括:GRANT、REVOKE等。
5.数据事务控制语言(TCL)数据事务控制语言用于管理数据库的事务,包括事务的开始、提交、回滚等。
常见的TCL语句包括:BEGIN TRANSACTION、COMMIT、ROLLBACK等。
二、SQL的数据类型在SQL中,每个表格的列都要被指定数据类型。
常见的数据类型包括:整数、小数、日期和时间、字符串等。
比如:INT、VARCHAR、DATE等。
常见的数据类型包括:整数型(INTEGER、INT)、浮点数型(FLOAT、DOUBLE)、货币类型(MONEY)、日期和时间类型(DATE、TIME)、字符串类型(CHAR、VARCHAR)、布尔型(BOOLEAN)等。
创建表语法CREATE TABLE <表名>(<列名> <数据类型>[列级完整性约束条件][,<列名> <数据类型>[列级完整性约束条件]]…);列级完整性约束条件有NULL[可为空]、NOT NULL[不为空]、UNIQUE[唯一],可以组合使用,但是不能重复和对立关系同时存在。
示例-- 创建学生表CREATE TABLE Student(Id INT NOT NULL UNIQUE PRIMARY KEY,Name VARCHAR(20) NOT NULL,Age INT NULL,Gender VARCHAR(4) NULL);删除表语法DROP TABLE <表名>;示例-- 删除学生表DROP TABLE Student;清空表语法TRUNCATE TABLE <表名>;示例-- 删除学生表TRUNCATE TABLE Student;修改表语法-- 添加列ALERT TABLE <表名> [ADD <新列名> <数据类型>[列级完整性约束条件]]-- 删除列ALERT TABLE <表名> [DROP COLUMN <列名>]-- 修改列ALERT TABLE <表名> [MODIFY COLUMN <列名> <数据类型> [列级完整性约束条件]]示例-- 添加学生表`Phone`列ALERT TABLE Student ADD Phone VARCHAR(15) NULL;-- 删除学生表`Phone`列ALERT TABLE Student DROP COLUMN Phone;-- 修改学生表`Phone`列ALERT TABLE Student MODIFY Phone VARCHAR(13) NULL;SQL查询语句语法SELECT [ALL|DISTINCT] <目标列表达式>[,<目标列表达式>]…FROM <表名或视图名>[,<表名或视图名>]…[WHERE <条件表达式>][GROUP BY <列名> [HAVING <条件表达式>]][ORDER BY <列名> [ASC|DESC]…]SQL查询语句的顺序:SELECT、FROM、WHERE、GROUP BY、HAVING、ORDER BY。
第四章关系数据库标准语言SQL第一节查询功能一.最短格式:SELECT <查询项> FROM <表名列表|视图名列表>注:查询项:要查询的字段,表达式例:查询职工表中的所有信息SELE * FROM 职工注: *代表所有字段例:查询仓库表中仓库号,面积信息SELE 仓库号,面积 FROM 仓库例:查询职工表中不重复的仓库号信息SELE DIST 仓库号 FROM 职工注: DISTINCT代表在查询结果中去掉重复值,并进行升序排序例:查询职工表所有职工的职工号,月工资(工资)和年工资(工资*12)SELE 职工号,工资 AS 月工资,工资*12 AS 年工资 FROM 职工二.条件短语…WHERE <条件表达式>…注:条件表达式是能返回一个逻辑值的式子,该短语相当于VFP命令中的FOR <条件>短语,让查询命令仅对符合条件的记录进行操作例:查询职工表中工资大于1210元的职工信息SELE * FROM 职工 WHERE 工资>1210例:查询在北京和上海的仓库信息SELE * FROM 仓库 WHERE 城市 IN([北京],[上海])注: <字段名> IN (表达式列表)当字段的值与表达式列表中的任何一项相等时返回.T.例:查询不在北京和上海的仓库信息SELE * FROM 仓库WHERE 城市 NOT IN ([北京],[上海])注: <字段名> NOT IN (表达式列表)当字段的值与表达式列表中的任何一项都不相等时返回.T.例:查询职工表中工资在1230与1250之间的职工信息SELE * FROM 职工 WHERE 工资 BETWEEN 1230 AND 1250注: <字段名> BETWEEN <数据1> AND <数据2>当字段的值在数据1与数据2之间时返回.T.例:查询订购单表中所有供应商号为NULL值的信息SELE * FROM 订购单 WHERE 供应商号 IS NULL注: <字段名> IS NULL当字段的值为NULL值时返回.T.例:查询订购单表中所有订购日期不为NULL 值的信息SELE * FROM 订购单 WHERE 订购日期IS NOT NULL注: <字段名> IS NOT NULL当字段的值不为NULL值时返回.T.例:查询供应商表中供应商名里包含"厂"字的信息SELE * FROM 供应商WHERE 供应商名LIKE "%厂%"注: 字段名 LIKE <通配符表达式>当字符型字段的值符合通配符表达式时返回.T.在SQL中,"%"代表多个任意字符, "_"代表单个字符三.排序短语…ORDER BY <字段名1> [DESC][ASC][,<字段名2> [DESC][ASC]…]…例:按面积降序查询仓库表的所有信息SELE * FROM 仓库 ORDER BY 面积 DESC 例:按工资降序,工资相同按职工号升序查询职工表的所有信息SELE * FROM 职工 ORDER BY 工资 DESC,职工号例:按仓库号降序查询职工表的所有信息SELE * FROM 职工 ORDER BY 1 DESC 注: ORDER BY 或GROUP BY 短语后跟的是数字而不是字段名则代表按查询结果的第几列进行排序或分组四.计算查询1.SUM 求和2.AVG 求平均3.MAX 求最大值4.MIN 求最小值5.COUNT计数SELE <计算函数>(表达式) FROM <表名列表|视图名列表>注:根据使用的计算函数,查询计算结果.一般在查询项中只包括计算项,查询结果如果没有分组短语则只有一条记录例:查询职工表中的职工人数SELE COUNT(*) AS 职工人数 FROM 职工注:COUNT函数是用来统计记录个数的,因此,括号内如果没有DISTINCT选项则无论是使用哪一个字段名都是同样的结果,所以一般使用*例:统计职工表中的仓库个数SELE COUNT(DIST 仓库号) AS 仓库个数FROM 职工例:查询职工表中职工的总工资和平均工资以及年总工资和年平均工资SELE SUM(工资) AS 总工资,AVG(工资) AS 平均工资,SUM(工资*12) AS 年总工资,AVG(工资*12) AS 年平均工资 FROM 职工例:查询职工表中职工的最高工资和最低工资SELE MAX(工资) AS 最高工资,MIN(工资)AS 最低工资 FROM 职工五.分组计算查询…GROUP BY <分组项1>[,<分组项2>…] [HAVING <分组条件>]…例:查询各仓库职工的总工资和平均工资SELE 仓库号,SUM(工资) AS 总工资,AVG(工资) AS 平均工资FROM 职工GROUP BY 仓库号例:查询订单数不小于2的所有职工的订单数,平均金额信息SELE 职工号,COUNT(*) AS 订单数,AVG(总金额) AS 平均金额 FROM 订购单 GROUP BY 职工号 HAVI COUNT(*)>=2六.联接查询SELE <查询项> FROM <表1>,<表2>[,<表3>…] WHERE <联接条件> [AND <查询条件>]…例:查询在北京工作的职工的职工号,工资及所在仓库的仓库号,面积SELE 职工号,工资,仓库.仓库号,面积FROM 仓库,职工 WHERE 仓库.仓库号=职工.仓库号 AND 城市="北京"例:查询由在北京工作的职工所开的订购单的订购单号,订购日期,职工号,供应商号,并将结果按订购单号升序排列SELE 订购单号,订购日期,职工.职工号,供应商号 FROM 仓库,职工,订购单 WHERE 仓库.仓库号=职工.仓库号 AND 职工.职工号=订购单.职工号 AND 城市="北京" ORDER BY 订购单号七.嵌套查询SELE <查询项> FROM <表名列表> WHERE <字段名> IN|=|>=|<=|<>|NOT IN <(子查询)> 注:子查询是另一个查询,它只有一个查询项,它的查询结果是括号外查询的条件的一部分例:查询在北京和上海工作的职工的职工号,工资信息SELE 职工号,工资 FROM 职工,仓库 WHERE 职工.仓库号=仓库.仓库号 AND 城市 IN ([北京],[上海])**以上方法是用连接完成的**SELE 职工号,工资 FROM 职工 WHERE 仓库号 IN (SELE 仓库号 FROM 仓库 WHERE城市 IN ("北京","上海"))**此类查询(查询项在一个表,查询条件在另一表)的一般格式SELE <查询项> FROM <查询项所在表> WHERE <共同字段> IN (SELE <共同字段> FROM <条件所在表> WHERE <查询条件>)注:在VFP中,SQL语言的嵌套只能有一层例:查询没有职工工作的仓库信息SELE * FROM 仓库 WHERE 仓库号 NOT IN (SELE 仓库号 FROM 职工)例:查询工资高于所有职工平均工资的职工信息(大于等于)SELE * FROM 职工WHERE 工资>=(SELE AVG(工资) FROM 职工)八.超连接查询SELE <查询项> FROM <表1> INNER|LEFT|RIGHT|FULL JOIN <表2> ON <联接条件> …INNER JOIN 等价于 JOIN 为内部连接,与普通连接相同LEFT JOIN 左连接,即除满足条件的记录出现在查询结果中外,第一个表中不满足连接条件的记录也出现在查询中RIGH JOIN 右连接,即除满足条件的记录出现在查询结果中外,第二个表中不满足连接条件的记录也出现在查询中FULL JOIN 完全连接,即两个表中记录不管是否满足条件都在查询结果中出现注:不满足条件的记录对应部分显示为.NULL.例:INSERT INTO 职工VALUE([WH5],[E8],1240)注: 在职工表的尾部加入一条新记录*普通连接SELE * FROM 仓库,职工 WHERE 仓库.仓库号=职工.仓库号*超连接SELE * FROM 仓库 INNER JOIN 职工 ON仓库.仓库号=职工.仓库号将INNER JOIN 改为LEFT JOIN 、RIGHT JOIN、FULL JOIN分别练习。
vf第四章关系数据库标准语言SQL SQL(Structured Query Language),即结构化查询语言,是一种专门用于管理和操作关系数据库的标准语言。
本章将介绍SQL的基本语法和常用操作,包括数据查询、数据修改、数据删除和数据插入等。
下面将逐一详细介绍这些内容。
一、数据查询1.1 SELECT语句SELECT语句是SQL中最常用的查询语句,其基本语法如下所示:SELECT 列名 FROM 表名 WHERE 条件;其中,“列名”表示需要查询的列,可以使用“*”表示查询所有列;“表名”表示需要查询的表;“WHERE”子句用于设定查询条件,可以根据需要使用各种条件运算符(如“=、>、<、>=、<=、<>”)来进行查询。
示例如下:SELECT * FROM Employees;以上语句将查询名为“Employees”的表中的所有数据。
1.2 ORDER BY语句ORDER BY语句用于对查询结果进行排序,默认是按照升序排列,可以通过添加“DESC”关键字来改为降序排列。
示例如下:SELECT * FROM Employees ORDER BY Salary DESC;以上语句将按照“Salary”列对名为“Employees”的表中的数据进行降序排列。
二、数据修改2.1 UPDATE语句UPDATE语句用于修改表中的数据,其基本语法如下所示:UPDATE 表名 SET 列名=新值 WHERE 条件;其中,“表名”表示需要修改数据的表,“列名=新值”表示需要修改的列和对应的新值,“WHERE”子句用于设定需要修改的数据的条件。
示例如下:UPDATE Employees SET Salary=5000 WHERE EmployeeID=1001;以上语句将修改名为“Employees”的表中“EmployeeID”为1001的记录的“Salary”列的值为5000;2.2 DELETE语句DELETE语句用于删除表中的数据,其基本语法如下所示:DELETE FROM 表名 WHERE 条件;其中,“表名”表示需要删除数据的表,“WHERE”子句用于设定需要删除的数据的条件。
sql语言总结SQL(结构化查询语言)是用于管理关系数据库的标准编程语言。
以下是SQL语言的一些关键点总结:1. 数据查询语言 (DQL):用于从数据库中检索数据。
使用 `SELECT` 语句。
可以加入 `WHERE` 子句来过滤结果。
可以使用 `ORDER BY` 对结果进行排序。
2. 数据定义语言 (DDL):用于定义或修改数据库结构。
包括 `CREATE`, `ALTER`, 和 `DROP` 语句。
使用 `CREATE TABLE` 创建新表。
使用 `ALTER TABLE` 修改现有表。
使用 `DROP TABLE` 删除表。
3. 数据操纵语言 (DML):用于插入、更新和删除数据库中的数据。
包括 `INSERT`, `UPDATE`, 和 `DELETE` 语句。
使用 `INSERT INTO` 插入新记录。
使用 `UPDATE` 更新现有记录。
使用 `DELETE` 删除记录。
4. 事务控制语言 (TCL):用于管理数据库事务。
包括 `BEGIN TRANSACTION`, `COMMIT`, 和 `ROLLBACK` 语句。
使用 `BEGIN TRANSACTION` 开始事务。
使用 `COMMIT` 提交事务。
使用 `ROLLBACK` 回滚事务。
5. 其他功能:使用聚合函数,如 `SUM`, `AVG`, `COUNT` 等,对数据进行汇总。
使用 `JOIN` 语句连接多个表。
使用视图、存储过程和触发器进行更复杂的操作和数据处理。
6. 安全性:使用权限和角色来控制对数据库的访问。
GRANT 和 REVOKE 语句用于授予和撤销权限。
7. 性能优化:使用索引来提高查询性能。
对查询进行优化,避免全表扫描。
8. 数据类型:每种数据库系统都有其自己的数据类型集,如 INT, VARCHAR, DATE 等。
9. 规范化与反规范化:在设计数据库时,应遵循规范化原则以减少数据冗余和提高数据完整性,但有时为了性能考虑,需要进行反规范化。
关系数据库标准语言sql关系数据库标准语言SQL。
关系数据库标准语言SQL(Structured Query Language)是一种用于管理关系数据库的标准化语言。
它可以用于创建、修改和删除数据库中的表格和数据,以及执行查询和分析操作。
SQL是一种强大而灵活的语言,它为用户提供了丰富的功能和丰富的语法,使得用户可以轻松地对数据库进行操作和管理。
SQL的基本语法包括对数据进行增删改查的操作,以及对数据库对象进行管理的操作。
通过使用SQL,用户可以轻松地创建新的数据库表格,向表格中添加数据,修改已有数据,删除不需要的数据,以及执行复杂的查询操作。
SQL还提供了丰富的聚合函数和分组操作,使用户可以轻松地进行数据分析和统计。
SQL语言的核心是对数据库的查询操作。
用户可以使用SELECT 语句来从数据库中检索数据,通过指定条件和排序规则,用户可以轻松地获取需要的数据。
同时,SQL还提供了丰富的连接操作和子查询功能,使用户可以轻松地进行多表查询和复杂的数据分析。
除了查询操作,SQL还提供了丰富的数据操作功能。
用户可以使用INSERT语句向数据库中插入新的数据,使用UPDATE语句修改已有数据,使用DELETE语句删除不需要的数据。
通过这些操作,用户可以轻松地对数据库中的数据进行管理和维护。
除了对数据的操作,SQL还提供了丰富的数据库对象管理功能。
用户可以使用CREATE语句创建新的数据库表格和索引,使用ALTER语句修改表格结构,使用DROP语句删除不需要的表格和索引。
通过这些操作,用户可以轻松地对数据库的结构进行管理和维护。
总的来说,SQL是一种强大而灵活的语言,它为用户提供了丰富的功能和丰富的语法,使得用户可以轻松地对数据库进行操作和管理。
通过使用SQL,用户可以轻松地进行数据的增删改查操作,进行复杂的数据分析和统计,以及对数据库的结构进行管理和维护。
因此,掌握SQL语言是非常重要的,它可以帮助用户更好地管理和分析数据库中的数据。
关系数据库标准语言sql关系数据库标准语言SQL。
SQL(Structured Query Language)是一种专门用来管理关系数据库的标准化语言。
它可以用来执行各种数据库操作,包括创建和删除数据库、创建和删除表、插入、更新和删除数据、以及执行查询操作。
SQL是一种强大而灵活的语言,它可以帮助用户轻松地操作数据库,实现数据的存储、管理和检索。
SQL的基本语法包括一些关键字和操作符。
其中,最常用的操作包括SELECT、INSERT、UPDATE和DELETE。
这些操作可以实现对数据库中数据的查询、插入、更新和删除。
通过这些操作,用户可以轻松地对数据库进行各种管理和操作。
除了基本的操作外,SQL还提供了丰富的功能和特性。
比如,SQL支持对数据进行排序、分组、聚合等操作,还可以进行多表连接、子查询等高级操作。
这些功能使得SQL成为了数据库管理中不可或缺的一部分。
在使用SQL时,需要注意一些细节。
比如,SQL是大小写不敏感的,但是在编写SQL语句时,通常会使用大写来表示关键字,以增加代码的可读性。
此外,SQL语句通常以分号结尾,以表示语句的结束。
另外,SQL中的注释可以使用--或者/.../来表示,以便在代码中添加注释。
除了基本的SQL语法外,不同的数据库系统还提供了各种扩展和特性。
比如,MySQL提供了存储过程和触发器的支持,Oracle提供了分区表和索引的特性,SQL Server提供了CLR集成和XML支持等。
这些特性使得不同的数据库系统在SQL的基础上有了更多的功能和灵活性。
总的来说,SQL是一种非常重要的数据库管理语言,它为用户提供了丰富的功能和灵活的操作方式。
通过学习和掌握SQL,用户可以轻松地管理和操作数据库,实现数据的存储、管理和检索。
因此,掌握SQL是数据库管理人员和开发人员的基本技能之一。
希望本文对SQL的介绍能够帮助读者更好地理解和应用这一重要的数据库管理语言。
关系数据库标准语言SQL一、SQL概述与查询功能1、SQL概述SQL是Structured Query Language(结构化查询语言)的缩写。
可以说查询是SQL语言的重要组成部分,但不是全部,SQL还包括数据定义、数据操纵和数据控制功能等部分。
Visual FoxPro在SQL方面支持数据定义、数据查询和数据操纵功能,但在具体表现方面也存在一些差异,由于安全控制方面的缺陷,没有提供数据控制功能。
2、查询功能Visual FoxPro的SQL SELECT命令格式如下:SELECT……FROM……[WHERE……][GROUP BY……][HAVING……][UNION[ALL]……][ORDER BY……] SELECT [ALL|DISTINCT][<别名>.]<选项>[AS<显示列名>][,[<别名>.]<选项>[AS<显示列名>]…]FROM [<数据库名>!]<表名>[[AS]<本地别名>][[INNER|LEFT|[OUTER]|RIGHT[OUTER]|FULL[OUTER]JI ON<数据库名>!]<表名>[AS]<本地别名>][ON<连接条件>…][[INTO<目标>|[TO FILE<文件名>][ADDITIVE]|TO PRINTER [PROMPT]|TO SCREEN]][PREFERENCE<参照名>][NOCONSOLE][PLAIN][NOWAIT][WHERE<连接条件1>[AND <连接条件2>…]AND|OR <过滤条件1>[AND|OR <过滤条件2>…]]][GROUP BY <分组列名1>[,<分组列名2>…]][HAVING<过滤条件>][UNION[ALL]SELECT命令][ORDER BY <排序选项1>[ASC|DESC][,<排序选项2>[ASC|DESC]…]]SELECT说明要查询的数据。
FROM说明要查询的数据来自哪个(些)表。
WHERE说明查询条件,即选择元组的条件。
GROUP BY用于对查询结果进行分组,可以利用它进行分类汇总。
HAVING必须跟随GROUP BY使用,客观存它用来限定分组必须满足的条件。
ORDER BY用来对查询的结果进行排序。
数据查询语句SQL数据查询命令是SELECT命令。
该命令的基本框架是SELECT…FROM…WHERE,它包含输出字段、数据来源、查询条件等基本子句。
在这种固定格式中,可以不用WHERE,但是SELECT 和FROM是必备的。
基本查询所谓基本查询是指无条件查询,其常用格式是:SELECT [ALL|DISTINCT][〈别名〉.]〈选项〉[AS 〈显示列名〉][,[〈别名〉.]〈选项〉[AS 〈显示列名〉…]]FROM 〈表名1〉[〈别名1〉][,〈表名2〉[〈别名2〉…]]其中ALL表示输出所有记录,包括重复记录。
DISTINCT表示输出无重复结果的记录。
基本查询示例写出对学生表进行如下操作的命令。
(1) 列出全部学生信息。
(2) 列出全部学生的姓名和年龄(去掉重名的)。
操作1:SELECT * FROM 学生操作2:SELECT DISTINCT 姓名AS 学生名单,YEAR(DATE())-YEAR(出生日期)AS年龄FROM 学生带条件查询WHERE 子句用于指定查询条件,其格式是:WHERE 〈条件表达式〉其中条件表达式可以是单表的条件表达式,也可以是多表之间的条件表达式,表达式用的比较符为:=(等于)、<>、!=,#(不等于)、==(精确等于)、>(大于)、>=(大于等于)、<(小于)、<=(小于等于)。
带条件查询示例写出对学生表进行如下操作的命令。
(1) 列出入学成绩在560分以上的学生记录。
(2) 求出湖南学生入学成绩平均分。
操作1:SELECT * FROM 学生WHERE 入学成绩>560操作2:SELECT 籍贯,AVG(入学成绩) AS 入学成绩平均分FROM 学生WHERE 籍贯=″湖南″写出对教学管理数据库进行如下操作的命令。
(1)列出非湖南籍的学生名单(2)列出江苏籍和贵州籍的学生名单(3)列出入学成绩在560分到650分之间的学生名单(4)列出所有姓赵的学生名单(5)列出所有成绩为空值的学生学号和课程号操作1:SELECT 学号,姓名,籍贯FROM 学生WHERE 籍贯<>”湖南”或者SELECT 学号,姓名,籍贯FROM 学生WHERE 籍贯!=”湖南”或者SELECT 学号,姓名,籍贯FROM 学生WHERE NOT(籍贯=”湖南”)操作2:SELECT 学号,姓名,籍贯FROM 学生WHERE 籍贯IN(”江苏”,”贵州”)或者SELECT 学号,姓名,籍贯FROM 学生WHERE 籍贯=”江苏” OR 籍贯=”贵州”操作3:SELECT 学号,姓名,入学成绩FROM 学生WHERE 入学成绩BETWEEN 560 AND 650或者SELECT 学号,姓名,入学成绩FROM 学生WHERE 入学成绩>= 560 AND 入学成绩<=650操作4:SELECT 学号,姓名FROM 学生WHERE 姓名LIKE “赵%”或者SELECT 学号,姓名FROM 学生WHERE 姓名=“赵”或者SELECT 学号,姓名FROM 学生WHERE AT(“赵”,姓名)=1 或者SELECT 学号,姓名FROM 学生LEFT(姓名,2)=“赵”操作5:SELECT 学号,课程号FROM 选课WHERE 成绩IS NULL 嵌套查询有时候一个SELECT命令无法完成查询任务,而需要一个子SELECT的结果作为查询的条件,即需要在一个SELECT命令的WHERE子句中出现另一个SELECT命令,这种查询称为嵌套查询。
通常把仅嵌入一层子查询的SELECT命令称为单层嵌套查询,把嵌入子查询多于一层的查询称为多层嵌套查询。
Visual FoxPro只支持单层嵌套查询。
1.返回单值的子查询例:对教学管理数据库,列出选修”数据库原理”的所有学生的学号SELECT 学号FROM 选课WHERE 课程号=( SELECT 课程号FROM 课程WHERE 课程名=”数据库原理”)2.返回一组值的子查询(1)ANY运算符的用法例:对教学管理数据库,列出选修”W01”课的学生中成绩比选修”K02”的最低成绩高的学生的学号和成绩.SELECT 学号,成绩FROM 选课WHERE 课程号=”W01”AND 成绩>ANY(SELECT 成绩FROM 选课WHERE 课程号=”K02”)(2)ALL运算符的用法例: 对教学管理数据库,列出选修”W01”课的学生中成绩比选修”K02”的最高成绩还要高的学生的学号和成绩.SELECT 学号,成绩FROM 选课WHERE 课程号=”W01”AND 成绩>ALL(SELECT 成绩FROM 选课WHERE 课程号=”K02”)(3)IN运算符的用法(等价于”=ANY”)例:对教学管理数据库,列出选修”数据库原理”或”软件工程”的所有学生的学号.SELECT 学号FROM 选课WHERE 课程号IN( SELECT 课程号FROM 课程WHERE 课程名=”数据库原理”OR 课程名=”软件工程”)多表查询等值连接等值连接是按对应字段的共同值将一个表中的记录与另一个表中的记录相连接。
例:写出对教学管理数据库进行如下操作的命令(1)输出所有学生的成绩单,要求给出学号,姓名,课程号,课程名和成绩.(2)列出男生的选课情况,要求列出学号,姓名,课程号,课程名,授课教师和学分数.(3)列出至少选修”W01”课和”K02”课的学生学号.操作1:SELECT a.学号,姓名,b.课程号,课程名,成绩FROM 学生a,选课b,课程c WHERE a.学号=b.学号AND b.课程号=c.课程号操作2:SELECT a.学号,a.姓名AS 学生姓名,b.课程号,课程名, e.姓名AS 教师姓名,学分FROM 学生a,选课b,课程c,授课d,教师 eWHERE a.学号=b.学号AND b.课程号=c.课程号AND c.课程号=d.课程号AND d.教师号=e.教师号AND 性别=”男”操作3:SELECT a.学号FROM 选课a,课程b WHERE a.学号=b.学号AND b.课程号=”W01”AND a.课程号=”K02”非等值连接非等值连接按对应字段的记录的某种不等值关系进行连接例:对教学管理数据库,列出选修”K02”课的学生中,成绩大于学号为”200109”的学生该门课程成绩的那些学生的学号及其成绩. SELECT a.学号,a.成绩FROM 选课a,课程b WHERE a.成绩>b.成绩AND a.课程号=b.课程号AND b.课程号=”K02”AND b.学号=”200109”连接查询内部连接(Inner Join)所谓内部连接是指包括符合条件的每个表中的记录。
也就是说是所有满足连接条件的记录都包含在查询结果中。
例:对教学管理数据库,列出少数民族学生的学号,课程号及成绩. SELECT a.学号,b.课程号FROM 选课a,课程b WHERE a.学号=b.学号AND 少数民族否若采用内部连接则为:SELECT a.学号,b.课程号FROM 选课a INNER JOIN 课程b ON a.学号=b.学号WHERE 少数民族否外部连接左外连接左外连接也叫左连接(Left Outer Join),其系统执行过程是将左表的某条记录与右表的所有记录依次比较,若有满足连接条件的,则产生一个真实值记录;若都不满足,则产生一个含有NULL值的记录。
接着,左表的下一记录与右表的所有记录依次比较字段值,重复上述过程,直到左表所有记录都比较完为止。
连接结果的记录个数与左表的记录个数一致。
右外连接右外连接也叫右连接(Right Outer Join),其系统执行过程是右表的某条记录与左表的所有记录依次比较,若有满足连接条件的,则产生一个真实值记录;若都不满足,则产生一个含有NULL值的记录。
接着,右表的下一记录与左表的所有记录依次比较字段值,重复上述过程,直到左表的所有记录都比较完为止。
连接结果的记录个数与右表的记录个数一致。
全外连接全外连接也叫完全连接(Full Join),其系统执行过程是先按右连接比较字段值,然后按左连接比较字段值,重复记录不记入查询结果中。