当前位置:文档之家› SQL语言SELECT 语句及其子句

SQL语言SELECT 语句及其子句

ü掌握SQL的概念及特点ü掌握SQLserver 的安装方法ü理解SQL中的数据定义ü理解SELECT 语句及其子句Ø关系型数据库标准语言SQL®SQL是Structured Query Language的缩写,即结构化查询语言。

它是关系数据库的标准语言。

查询是SQL语言的重要组成部分,SQL还包含数据定义、数据操作和数据控制功能等内容。

SQL已经成为关系数据库的标准数据语言,所以现在所有的关系数据库管理系统都支持SQL。

掌握SQL语法可以更加灵活地建立查询和视图。

® SQL语言来源于20世纪70年代IBM的一个被称为SEQUEL(Structured English Query Language)的研究项目。

20世纪80年代,SQL由ANSI进行了标准化,它包括了定义和操作数据的指令。

由于它具有功能丰富、使用方式灵活、语言简洁易学等突出特点,在计算机界深受广大用户欢迎,许多数据库生产厂家都相继推出各自支持SQL标准。

1998年4月,ISO提出了具有完整性特征的SQL,并将其定为国际标准,推荐它为标准关系数据库语言。

1990年,我国也颁布了《信息处理系统数据库语言SQL》,将其定为中国国家标准。

®SQL的特点®1. 综合统一®2. 高度非过程化®3. 面向集合的操作方式®4. 以同一种语法结构提供两种使用方法®例语言简洁,易学易用综合统一(操纵三级模式)SQL视图1视图2基表1基表2基表3基表4存储文件1存储文件2外模式模式内模式数据安全数据完整性实例引入:SQL 语句需要在数据库上执行的大部分工作都由 SQL 语句完成。

下面的 SQL 语句,从 "Websites" 表中选取所有记录:解析use RUNOOB; 命令用于选择数据库。

set names utf8; 命令用于设置使用的字符集。

SELECT * FROM Websites; 读取数据表的信息。

上面的表包含五条记录(每一条对应一个网站信息)和5个列(id、name、url、alexa 和country)。

SQL语句可以在命令窗口中执行,也可以作为查询或视图容)被使用,还可以在程序文件被执行。

//一些最重要的 SQL 命令//SELECT - 从数据库中提取数据UPDATE - 更新数据库中的数据DELETE - 从数据库中删除数据INSERT INTO - 向数据库中插入新数据CREATE DATABASE - 创建新数据库ALTER DATABASE - 修改数据库CREATE TABLE - 创建新表ALTER TABLE - 变更(改变)数据库表DROP TABLE - 删除表CREATE INDEX - 创建索引(搜索键)DROP INDEX - 删除索引®数据库中最常见的操作是数据查询,也是SQL的核心。

SQL SELECT 语句SELECT 语句用于从数据库中选取数据。

结果被存储在一个结果表中,称为结果集。

SQL SELECT 语法SELECT column_name,column_name FROM table_name;与SELECT * FROM table_name;®SQL给出了简单而又丰富的查询语句形式,SQL的查询命令也称作SELECT命令,它的基本形式由SELECT-FROM-WHERE查询块组成,多个查询块可以嵌套执行。

®格式:® SELECT [ALL|DISTINCT][ TOP〈表达式〉][〈别名〉]〈Select表达式〉[AS 〈列名〉][, [〈别名〉]〈Select表达式〉[AS 〈列名〉]…]FORM[〈数据库名〉 !]〈表名〉[[AS]Local_Alias][[INNER | LEFT [OUTER] | RIGHT [OUTER] | FULL [OUTER]JOIN[〈数据库名〉!]〈表名〉[[AS]Local_Alias][ON〈联接条件〉]][INTO 〈查询结果〉 |TO FILE 〈文件名〉[ADDITIVE]| TO PRINTER [PROMPT] | TO SCREEN][PREFERENCE PreferenceName][NOCONSOLE][PLAIN][NOWAIT][WHERE 〈联接条件1〉[AND 〈联接条件2〉…][AND | OR 〈筛选条件〉…]][GROUP BY 〈组表达式〉][, 〈组表达式〉…]][HAVING ]〈筛选条件〉][UNION [ALL]〈SELECT命令〉][ORDER BY 〈关键字表达式〉[ASC |DESC][, 〈关键字表达式〉[ASC |DESC]…]]®说明:SELECT-SQL命令的格式包括三个基本子句:SELECT子句、FROM子句、WHERE子句,还包括操作子句:ORDER子句、GROUP子句、UNION子句以及其他一些选项。

An Introduction to Database System<表名>:所要定义的基本表的名字®<列名>:组成该表的各个属性(列)®<列级完整性约束条件>:涉及相应属性列的完整性约束条件®<表级完整性约束条件>:涉及一个或多个属性列的完整性约束条件CREATE TABLE <表名>(<列名> <数据类型>[ <列级完整性约束条件> ][,<列名> <数据类型>[ <列级完整性约束条件>] ] …[,<表级完整性约束条件> ] );®SELECT子句用来指定查询结果中的数据。

其中:®ALL选项:表示选出的记录中包括重复记录,这时缺省值;DISTINCT则表示选出的记录中不包括重复记录。

®TOP〈表达式〉选项:表示在符合条件的记录中,选取指定数量或百分比(〈表达式〉)记录。

[〈别名〉]〈Select表达式〉[AS〈列名〉]选项中的别名是字段所在的表名;〈Select表达式〉,可以是字段名或字段表达式;〈列名〉用于指定输出时使用的列标题,可以不同于字段名。

®〈Select表达式〉用一个*号来表示时,指定所有的字段。

®用于指定查询的表与联接类型。

其中:®JOIN关键字用于联接其左右两个〈表名〉所指定的表。

INNER | LEFT[OUTER] | RIGHT [OUTER] | FULL[OUTER]选项,指定两表联接时的联接类型,联接类型有4种,如表例2所示。

其中的OUTER选项,表示外部联接,即允许满足联接条件的记录,又允许不满足联接条件的记录。

若省略OUTER选项,效果不变。

®用来指定查询的条件。

其中的 〈联接条件〉 指定一个字段,该字段连接FROM子句中的表。

®如果查询中包含不止一个表,就应该为第一个表后的每一个表指定连接条件。

对查询结果按〈组表达式〉值分组,常用于分组统计。

例 HAVING子句当含有GROUP BY子句时,HAVING子句可用作记录查询的限制条件;无GROUP BY 子句时,HAVING子句的作用如同 WHERE子句。

6. ORDER BY子句指定查询结查中记录按〈关键字表达式〉排序,默认升序。

选项ASC表示升序,DESE表示降序。

®UNION子句:可以用UNION子句嵌入另一个SELECT-SQL命令,使这两个命令的查询结果合并输,但输出字段的类型和宽度必须一致。

UNION子句默认组合结果中排除重复行,使用ALL,则允许包含重复行。

®SELECT查询命令的使用非常灵活,用它可以构造各种各样的查询。

本章将通过大量的实例来介绍SELECT命令的使用方法。

简单查询只含有基本子句,可有简单的查询条件。

【例2】在zggz表中,检索实发工资大于2000元的记录。

SELECT 编号,姓名,实发工资FROM zggzWHERE 实发工资>2000【例3】在zgda表中,检索所有职称名称。

SELECT DISTINCT 职称 FROM zgda 【例4】在zgda表中,检索职称是助教的记录。

SELECT 编号,姓名,职称FROM zgdaWHERE 职称="助教"【例5】在zggz表中,检索实发工资小于1000大于1800元的记录。

SELECT 编号,姓名,实发工资FROM zggzWHERE 实发工资>1000 AND 实发工资<1800®在SQL语句中,WHERE子句后面的联接条件,除了可以使用VFP语言中的关系表达式以及逻辑表达外,还可以使用几个特殊运算符:(1)[NOT]IN:表示[不]在…之中。

(2)[NOT]BETWEEN…AND…:表示[不]在…之间。

(3)[NOT]LIKE:表示[不]与…匹配。

下面以实例来说明此用法。

说明:(1)NOT运算符来设计否定条件。

(2)LIKE运算符提供两种字符串匹配方式,一种是使用下划线符号“_”,匹配一个和任意字符,另一种是使用百分号“%”,匹配0个或多个任意字符。

(3)IN运算符,格式为IN(常量1,常量2,…)。

含义为查找和常量相等的值。

【例6】在zgda表中,检索性别是男的记录。

SELECT DISTINCT 编号,姓名,性别 FROM zgda WHERE 性别 LIKE "男"可以使用NOT运算符来设计否定条件,检索性别不是男的记录。

SELECT DISTINCT 编号,姓名,性别FROM zgdaWHERE NOT(性别 LIKE "男")【例7】在zgda表中,检索所有姓刘的记录。

SELECT 编号,姓名FROM zgdaWHERE 姓名 LIKE "刘%"【例8】在zgda表中,检索所有姓陈和姜的记录。

SELECT 编号,姓名FROM zgdaWHERE 姓名 IN("陈","姜")上式可以改为VFP条件,执行结果是一样的。

SELECT 编号,姓名FROM zgdaWHERE 姓名="陈" OR 姓名="姜"2.4 简单的联接查询联接是关系的基本操作之一,联接查询是一种基于多个关系的查询。

【例9】在zgda表和zggz表中,检索实发工资大于2000元的记录。

SELECT zgda.编号,zgda.姓名,zggz.实发工资FROM zgda,zggzWHERE (实发工资>2000) AND (zgda.编号=zggz.编号)zgda.编号=zggz.编号 &&编号是联接的条件2.4 简单的联接查询【例10】在zgda表和zggz表中,检索职称是讲师, 并且实发工资大于1900元的记录SELECT zgda.编号,zgda.姓名,zgda.职称,zggz.实发工资FROM zgda,zggzWHERE (职称="讲师") AND (实发工资>1900)AND (zgda.编号=zggz.编号)2.5 嵌套查询®为了讨论嵌套查询,在此引入一个订货管理数据库,此数据库涉及4个表(4 个关系),即仓库表、职工表、订购单表、供应商表,4个表的内容见教材 P.90。

相关主题