Excel2010 常用SQL语句解释

Excel2010 常用SQL语句解释
Excel2010 常用SQL语句解释

Excel常用SQL语句解释

SELECT查询

图C- 1展示了某公司的员工信息数据列表。

图C- 1 公司员工信息数据列表

含义:从指定的表中返回符合条件的指定字段的记录。

语法:

SELECT {谓词} 字段AS 别名 FROM 表

{WHEREE 分组前条件}

{GROUP BY 分组依据}

{HAVING 分组后条件}

{ORDER BY 指定排序}

SELECT查询各部分的说明如表格C- 1所示。

SELECT查询的基本语句

如果希望在如图C- 1所示的“员工信息”数据列表中,查询所有字段的数据记录,可以使用以下SQL语句。

SELECT * FROM [员工信息$]

如果希望在如图C- 1所示的“员工信息”数据列表中,查询每个员工所在的部门及其婚姻状况的数据记录,可以使用以下SQL语句。

SELECT 部门,姓名,婚姻状况 FROM [员工信息$]

WHERE子句

如果希望在如图C- 1所示的“员工信息”数据列表中,查询员工性别为男的数据记录,可以使用以下SQL语句。

SELECT * FROM [员工信息$] WHERE 性别='男'

BETWEEN…AND运算符

用于确定指定字段的记录是否在指定值范围之内。

如果希望在如图C- 1所示的“员工信息”数据列表中,查询基本工资在1500到2000之间(含1500和2000)的数据记录,可以使用以下SQL语句。

SELECT * FROM [员工信息$] WHERE 基本工资BETWEEN 1500 AND 2000

NOT运算符

表示取相反的条件。

如果希望在如图C- 1所示的“员工信息”数据列表中,查询基本工资不在1500到2000之间(即基本工资小于1500或大于2000)的所有记录,可以使用以下SQL语句。

SELECT * FROM [员工信息$] WHERE NOT 基本工资BETWEEN 1500 AND 2000

AND、OR运算符

当查询条件在两个或两个以上,需要使用AND或OR等运算符将不同的条件连接,其中,使用AND运算符表示连接的条件,只有同时成立才返回记录,使用OR运算符表示连接的条件中,只要有一个条件成立,即可返回记录。需要注意的是,AND运算符执行次序比OR运算符优先,如果用户需要更改运算符的运算次序,请用小括号将需要优先执行的条件括起来。

如果希望在如图C- 1所示的“员工信息”数据列表中,查询“财务室”部门员工的基本工资高于2000的数据记录,可以使用以下语句。

SELECT * FROM [员工信息$] WHERE 部门='财务室' AND 基本工资>2000

如果希望在如图C- 1所示的“员工信息”数据列表中,查询“财务室”或“业务部”两个部门的数据记录,可以使用以下语句。

SELECT * FROM [员工信息$] WHERE 部门='财务室' OR 部门='业务部'

IN运算符

确定字段的记录是否在指定的集合之中。

如果希望在如图C- 1所示的“员工信息”数据列表中,查询“陈丰笑”、“孙娇雪”和“刘风权”等3位员工的数据记录,可以使用以下SQL语句。

SELECT * FROM [员工信息$] WHERE 姓名IN ('陈丰笑','孙娇雪','刘风权')

使用NOT IN,可以返回字段记录在指定集合之外的记录。

如果希望在如图C- 1所示的“员工信息”数据列表中,查询除“陈丰笑”、“孙娇雪”和“刘风权”等3位员工外的数据记录,可以使用以下SQL语句。

SELECT * FROM [员工信息$] WHERE 姓名NOT IN ('陈丰笑','孙娇雪','刘风权') LIKE运算符

返回与指定模式匹配的记录,若需要返回与指定模式匹配相反的记录,请使用NOT LIKE,LIKE 运算符支持使用通配符。

LIKE使用的通配符如表格C- 2所示。

表格C- 2 通配符说明

提示:常用的字符列表包括数字字符列表[0-9]、大写字母字符列表[A-Z]和小写字母字符列表[a-z]。

如果希望在如图C- 1所示的“员工信息”数据列表中,查询姓名以“陈”开头的数据记录,可以使用以下语句。

SELECT * FROM [员工信息$] WHERE 姓名LIKE '陈%'

如果希望在如图C- 1所示的“员工信息”数据列表中,查询姓名不以“陈”开头的数据记录,可以使用以下语句。

SELECT * FROM [员工信息$] WHERE 姓名LIKE '[!陈]%'

也使用以下语句。

SELECT * FROM [员工信息$] WHERE 姓名NOT LIKE '陈%'

如果希望在如图C- 1所示的“员工信息”数据列表中,查询姓名以“翠”结尾且姓名长度为2的数据记录,可以使用以下语句。

SELECT * FROM [员工信息$] WHERE 姓名LIKE '_翠'

如果希望在如图C- 1所示的“员工信息”数据列表中,查询姓名包含字母的数据记录,可以使用以下语句。

SELECT * FROM [员工信息$] WHERE 姓名LIKE '%[a-zA-Z]%'

注意:在Excel 2010保存的工作薄中,使用SQL语句返回的记录不区分大小写,但以兼容形式另存为Excel 2010版本以下的工作簿时(如Excel 97-2003版本),记录区分大小写。

常量NULL

表示未知值或结果未知。判断记录是否为空,可以用ISNULL或IS NOT NULL。

如果希望在如图C- 1所示的“员工信息”数据列表中,查询没有领取住房津贴的数据记录,可以使用以下语句。

SELECT * FROM [员工信息$] WHERE 住房津贴IS NULL

如果希望在如图C- 1所示的“员工信息”数据列表中,查询有领取住房津贴的数据记录,可以使用以下语句。

SELECT * FROM [员工信息$] WHERE 住房津贴IS NOT NULL

已知员工的实际收入等于基本工资加上住房津贴,如果希望在如图C- 1所示的“员工信息”数据列表中,统计每个部门的员工的实际收入,可以使用以下SQL语句。

SELECT 部门,姓名,基本工资+IIF(住房津贴IS NULL,0,住房津贴) AS 实际收入 FROM [员工信息$] 提示:NULL表示未知值或结果未知,如何与NULL进行的运算,其结果也是未知的,返回NULL。所以,这里需要使用IIF函数,将住房津贴为NULL的值返回0,否则返回住房津贴,然后再与基本工资相加,从而得到实际收入。

GROUP BY子句

如果希望在如图C- 1所示的“员工信息”数据列表中,统计每个部门的员工人数,可以使用以下SQL语句。

SELECT 部门,COUNT(姓名) AS 员工人数FROM [员工信息$] GROUP BY 部门

HAVING子句

如果希望在如图C- 1所示的“员工信息”数据列表中,查询员工人数超过7人(含7人)的部门记录,可以使用以下SQL语句。

SELECT 部门 FROM [员工信息$]GROUP BY 部门HAVING COUNT(姓名)>=7

提示:HAVING子句通常需要结合GROUP BY子句使用。

聚合函数

聚合函数的说明如表格C- 3所示。

表格C- 3 聚合函数

提示:使用如表格C- 3所示的聚合函数中,除FIRST和LAST函数外,其余函数均忽略空值(NULL)。

如果希望在如图C- 1所示的“员工信息”数据列表中,查询每个部门最高可领取的住房津贴的数据记录,可以使用以下SQL语句。

SELECT 部门,MAX(住房津贴) AS 最高住房津贴FROM [员工信息$] GROUP BY 部门

DISTINCT谓词

使用DISTINCT谓词,将忽略指定字段返回的重复记录,即重复的记录只保留其中一条。

如果希望在如图C- 1所示的“员工信息”数据列表中,查询部门的不重复记录,可以使用以下SQL语句。

SELECT DISTINCT部门FROM [员工信息$]

ORDER BY子句

使用ORDER BY子句,可以使结果根据一个或多个字段的指定排序方式进行排序。如果指定的字段没有指定排序模式,则默认为按此字段升序排序。

提示:在数据透视表中,字段的排序结果最终取决于数据透视表的字段排序方式。

TOP谓词

使用TOP谓词,可以返回位于ORDER BY 子句所指定范围内靠前或靠后的某些记录。

如果不指定排序方式,则返回此TOP谓词所对应表或查询的靠前的指定记录。

如果希望在如图C- 1所示的“员工信息”数据列表中,查询前10条记录,可以使用以下SQL 语句。

SELECT TOP 10 * FROM [员工信息$]

如果希望在如图C- 1所示的“员工信息”数据列表中,查询基本工资在前10位的数据记录,可以使用以下SQL语句。

SELECT TOP 10 * FROM [员工信息$] ORDER BY 基本工资DESC

结合使用PERCENT 保留字可以返回位于ORDER BY 子句所指定范围内靠前或靠后的一定百分比的记录。

如果希望在如图C- 1所示的“员工信息”数据列表中,查询基本工资前30%的数据记录,可以使用以下语句。

SELECT TOP 30 PERCENT * FROM [员工信息$] ORDER BY 基本工资DESC

提示:如果使用ORDER BY子句,那么假如在指定范围内最后一条记录有多个相同的值,那么这些值对应的记录也会被返回。如果没有OREDR BY子句,那么在指定范围内最后一条记录即使有多个相同的值,也只会返回在指定范围内靠前的记录。

联合查询

图C- 2展示了某连锁集团“三角头”、“江南”和“东山”三间分店的销售数据列表。

图C- 2 分店销售数据列表

含义:合并多个查询的结果集,这些查询具有相同的字段数目且包含相同或可以兼容的数据类型。语法:

SELECT 字段 FROM 表1UNION {ALL}

……

SELECT 字段 FROM 表x

联合查询的特点:

使用联合查询,需要确保查询的字段数目相同,且包含相同或兼容的数据类型。

在联合查询中,最终返回的记录的字段名称以第一个查询的字段名称为准,其余进行联合查询的查询,使用的字段别名将被忽略。

UNION和UNION ALL的区别在于,UNION会将所有进行联合查询的表的记录进行汇总,并返回不重复记录(即重复记录只返回其中一条记录),同时对记录进行升序排序,而UNION ALL则只将所有进行联合查询的表的记录进行汇总,不管记录是否重复,也不对记录进行排序。

提示:“数字”和“文本”在联合查询中,是可以兼容的数据类型

如果希望查询如图C- 2所示的“三角头”、“江南”和“东山”三间分店销售数据列表中,各分店所有产品不重复个数,可以使用以下SQL语句。

SELECT '三角头' AS 分店,产品 FROM [三角头$]UNION

SELECT '江南',产品FROM [江南$]UNION

SELECT '东山',产品FROM [东山$]

如果希望将如图C- 2所示的“三角头”、“江南”和“东山”三间分店销售数据列表进行汇总,可以使用以下SQL语句。

SELECT '三角头' AS 分店,* FROM [三角头$] UNION ALL

SELECT '江南',* FROM [江南$] UNION ALL

SELECT '东山',* FROM [东山$]

多表查询

图C- 3展示了某班级“学生信息”、“科目”和“成绩表”三张数据列表。

图C- 3 班级成绩数据列表

含义:根据约束条件,返回查询指定字段记录所有可能的组合。

语法:

SELECT{表名称}.字段FROM 表1,表2,……表x {WHERE 约束条件}

多表查询的特点:

在同一语句中,若需要查询的字段名称存在于多张表中,那么,此字段名称需要声明来源表,否则该字段可省略声明来源表。

当查询涉及多张表关联时,需要注意使用约束条件,没有约束条件或约束条件设置不当,将可能出现笛卡尔积,从而导致数据虚增。

如果希望在如图C- 3所示的“科目”和“成绩表”数据列表中,查询各科目的平均成绩及各科目任课老师的数据记录,可以使用以下SQL语句。

SELECT A.科目名称,A.任课老师,AVG(B.分数) AS 平均分 FROM [科目$]A,[成绩表$]B WHERE A.

科目名称=B.科目 GROUP BY A.科目名称,A.任课老师

设置“平均分”字段的数字格式为【数值】,【小数位数】为0,最终生成的数据透视表如图C- 4所示。

图C- 4 科目任课老师和科目平均分数据列表

内部联接

含义:对于不同结构的表或查询,如果这些表或查询具有关联的字段,那么将这些表或查询指定字段的记录按关联的字段整合在一起。

使用单个内部联接的语法:

SELECT {表名称.}字段 FROM 表1 INNER JOIN 表2 ON 关联字段

如果希望在如图C- 3所示的“学生信息”和“成绩表”数据列表中,查询参加考试学生的各科目成绩及其担任职务的数据记录,可以使用以下SQL语句。

SELECT A.*,B.职务FROM [成绩表$]A INNER JOIN [学生信息$]B ON A.学生=B.学生 WHERE B.

职务IS NOT NULL

最终生成的数据透视表如图C- 5所示。

图C- 5 担任职务的学生成绩数据列表

使用多个内部联接的语法:

SELECT {表名称.}字段FROM (……(表1 INNER JOIN 表2 ON 关联字段) INNER JOIN 表3 ON 关联字段……)INNER JOIN 表x ON 关联字段

如果希望在如图C- 3所示的“学生信息”、“科目”和“成绩表”数据列表中,查询参加考试的学生担任的职务、各科目的成绩和各科目任课老师的数据记录,可以使用以下SQL语句。SELECT A.学生,A.科目,A.分数,B.职务,C.任课老师 FROM ([成绩表$]A INNER JOIN [学生信息$]B ON A.学生=B.学生) INNER JOIN [科目$]C ON A.科目=C.科目名称

最终生成的数据透视表如图C- 6所示。

图C- 6 学生职务、科目成绩和科目任课老师数据列表

左外部联接和右外部联接

含义:左外部联接返回左表所有记录和右表符合关联条件的部分记录,右外部联接刚好与左外部联接相反,右外部联接返回的是右表所有记录和左表符合关联条件的部分记录。

单个左外部联接/右外部联接:

SELECT {表名称.}字段 FROM 表1 LEFT JOIN/RIGHT JION 表2 ON 关联条件

如果希望在如图C- 3所示的“学生信息”和“成绩表”数据列表中,查询所有科目都缺考学生的学生信息,可以使用以下SQL语句。

SELECT A.* FROM [学生信息$]A LEFT JOIN [成绩表$]B ON A.学生=B.学生 WHERE B.分数 IS NULL 或使用以下SQL语句。

SELECT B.* FROM [成绩表$]A RIGHT JOIN [学生信息$]B ON A.学生=B.学生WHERE A.分数IS NULL

最终生成的数据透视表如图C- 7所示。

图C- 7 所有科目都缺考的学生信息数据列表

提示:多个左外部联接/右外部联接的语法请参考多个内部联接。

子查询

三种常用子查询语法:

SELECT (子查询) {AS 字段} FROM 表

SELECT 字段 FROM 表 WHERE 字段运算符{谓词} (子查询)

SELECT 字段 FROM 表 WHERE {NOT} EXISTS (子查询)

如果希望在如图C- 3所示的“成绩表”数据列表中,对参加考试的学生的总成绩进行排名,可以使用以下SQL语句。

SELECT *,(SELECT COUNT(学生) FROM (SELECT 学生,SUM(分数) AS 总分 FROM [成绩表$] GROUP BY 学生)A WHERE A.总分>B.总分)+1 AS 排名 FROM (SELECT 学生,SUM(分数) AS 总分 FROM [成绩表$] GROUP BY 学生)B

最终生成的数据透视表如图C- 8所示。

图C- 8 学生总分排名数据列表

如果希望在如图C- 3所示的“成绩表”数据列表中,查询各科目分数最高的学生成绩数据记录,可以使用以下SQL语句。

SELECT * FROM [成绩表$]A WHERE 分数=(SELECT MAX(分数) FROM [成绩表$]B WHERE A.科目

=B.科目 GROUP BY B.科目)

也使用以下SQL语句。

SELECT * FROM [成绩表$]A WHERE 分数IN (SELECT MAX(分数) FROM [成绩表$]B WHERE A.科目=B.科目 GROUP BY B.科目)

还可以使用以下SQL语句。

SELECT * FROM [成绩表$]A WHERE EXISTS (SELECT 最高分FROM (SELECT 科目,MAX(分数) AS 最高分 FROM [成绩表$] GROUP BY 科目)B WHERE A.科目=B.科目AND A.分数=B.最高分)

最终生成的数据透视表如图C- 9所示。

图C- 9 各科目分数最高的学生数据列表

常用SQL语句大全

常用SQL语句大全 一、基础 1、说明:创建数据库 CREATE DATABASE database-name 2、说明:删除数据库 DROP database dbname 3、说明:备份sql server --- 创建备份数据的device USE master EXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat' --- 开始备份 BACKUP DATABASE pubs TO testBack 4、说明:创建新表 create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..) 根据已有的表创建新表: A:create table tab_new like tab_old (使用旧表创建新表) B:create table tab_new as select col1,col2…from tab_old definition only 5、说明:删除新表 DROP table tabname 6、说明:增加一个列 Alter table tabname add column col type 注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。 7、说明:添加主键:Alter table tabname add primary key(col) 说明:删除主键:Alter table tabname DROP primary key(col) 8、说明:创建索引:create [unique] index idxname on tabname(col….) 删除索引:DROP index idxname 注:索引是不可更改的,想更改必须删除重新建。 9、说明:创建视图:create view viewname as select statement 删除视图:DROP view viewname 10、说明:几个简单的基本的sql语句 选择:select * from table1 where 范围 插入:insert into table1(field1,field2) values(value1,value2) 删除:delete from table1 where 范围 更新:update table1 set field1=value1 where 范围 查找:select * from table1 where field1 like ’%value1%’---like的语法很精妙,查资料! 排序:select * from table1 order by field1,field2 [desc] 总数:select count as totalcount from table1 求和:select sum(field1) as sumvalue from table1 平均:select avg(field1) as avgvalue from table1 最大:select max(field1) as maxvalue from table1 最小:select min(field1) as minvalue from table1 11、说明:几个高级查询运算词

SQL常用语法及例子精简——快速入手

sql语言 库表的增删改查常用语及语法 (1)数据记录筛选: sql="select*from 数据表where 字段名=字段值orderby字段名[desc]" sql="select*from 数据表where 字段名like'%字段值%'orderby字段名[desc]" sql="selecttop10*from 数据表where 字段名orderby字段名[desc]" sql="select*from 数据表where 字段名in('值1','值2','值3')" sql="select*from 数据表where 字段名between 值1and 值2" (2)更新数据记录: sql="update 数据表set 字段名=字段值where 条件表达式" sql="update 数据表set 字段1=值1,字段2=值2……字段n=值nwhere条件表达式" (3)删除数据记录: sql="de letefrom数据表where 条件表达式" sql="de letefrom数据表"(将数据表所有记录删除) (4)添加数据记录: sql="insertinto数据表(字段1,字段2,字段3…)values(值1,值2,值3…)" sql="insertinto目标数据表select*from 源数据表"(把源数据表的记录添加到目标数据表) (5)数据记录统计函数: AVG(字段名)得出一个表格栏平均值 COUNT(*|字段名)对数据行数的统计或对某一栏有值的数据行数统计 MAX(字段名)取得一个表格栏最大的值 MIN(字段名)取得一个表格栏最小的值 SUM(字段名)把数据栏的值相加 引用以上函数的方法: sql="selectsum(字段名)as 别名from 数据表where 条件表达式" setrs=conn.excute(sql) 用rs("别名")获取统的计值,其它函数运用同上。 (6)数据表的建立和删除: CREATETABLE 数据表名称(字段1 类型1(长度),字段2 类型2(长度)……) 例:CREATETABLEtab01 (namevarchar (50), datetimedefaultnow ()) DROPTABLE 数据表名称(永久性删除一个数据表) 4.记录集对象的方法: rs.movenext将记录指针从当前的位置向下移一行 rs.moveprevious将记录指针从当前的位置向上移一行 rs.movefirst将记录指针移到数据表第一行 rs.movelast将记录指针移到数据表最后一行 rs.absoluteposition=N 将记录指针移到数据表第N 行 rs.absolutepage=N 将记录指针移到第N 页的第一行 rs.pagesize=N 设置每页为N 条记录 rs.pagecount根据pagesize的设置返回总页数 rs.recordcount返回记录总数 rs.bof返回记录指针是否超出数据表首端,true 表示是,false 为否

SQL语句实例

表操作 例1 对于表的教学管理数据库中的表STUDENTS,可以定义如下:CREATE TABLE STUDENTS, ( SNO NUMERIC (6, 0) NOT NULL, SNAME CHAR (8) NOT NULL, AGE NUMERIC(3,0), SEX CHAR(2), BPLACE CHAR(20), PRIMARY KEY(SNO) ) 例2 对于表的教学管理数据库中的表ENROLLS,可以定义如下:CREATE TABLE ENROLLS ( SNO NUMERIC(6,0) NOT NULL, CNO CHAR(4) NOT NULL, GRADE INT, PRIMARY KEY(SNO,CNO), FOREIGN KEY(SNO) REFERENCES STUDENTS(SNO), FOREIGN KEY(CNO) REFERENCES COURSES(CNO), CHECK ((GRADE IS NULL) OR (GRADE BETWEEN 0 AND 100)) ) 例3 根据表的STUDENTS 表,建立一个只包含学号、姓名、年龄的女学生表。CREATE TABLE GIRL AS SELECT SNO, SNAME, AGE FROM STUDENTS WHERE SEX='女'; 例4 删除教师表TEACHER。 DROP TABLE TEACHER 例5 在教师表中增加住址列。 ALTER TABLE TEACHERS ADD (ADDR CHAR(50))

例6 把STUDENTS表中的BPLACE列删除,并且把引用BPLACE列的所有视图和约束也一起删除。 ALTER TABLE STUDENTS DROP BPLACE CASCADE 例7 补充定义ENROLLS表的主关键字。 ALTER TABLE ENROLLS ADD PRIMARY KEY (SNO,CNO); 视图操作(虚表) 例9 建立一个只包括教师号、姓名和年龄的视图FACULTY。(在视图定义中不能包含ORDER BY子句) CREATE VIEW FACULTY AS SELECT TNO, TNAME, AGE FROM TEACHERS 例10 从学生表、课程表和选课表中产生一个视图GRADE_TABLE,它包括学生姓名、课程名和成绩。 CREATE VIEW GRADE_TABLE AS SELECT SNAME,CNAME,GRADE FROM STUDENTS,COURSES,ENROLLS WHERE STUDENTS.SNO=ENROLLS.SNO AND https://www.360docs.net/doc/c01901882.html,O=https://www.360docs.net/doc/c01901882.html,O 例11 删除视图GRADE_TABLE DROP VIEW GRADE_TABLE RESTRICT 索引操作 例12 在学生表中按学号建立索引。 CREATE UNIQUE INDEX ST ON STUDENTS (SNO,ASC) 例13 删除按学号所建立的索引。 DROP INDEX ST 数据库模式操作 例14 创建一个简易教学数据库的数据库模式TEACHING_DB,属主为ZHANG。 CREATE SCHEMA TEACHING_DB AUTHRIZATION ZHANG 例15 删除简易教学数据库模式TEACHING_DB。((1)选用CASCADE,即当删除数据库模式时,则本数据库模式和其下属的基本表、视图、索引等全

SQL语句大全实例

SQL语句实例 表操作 例 1 对于表的教学管理数据库中的表STUDENTS ,可以定义如下:CREATE TABLE STUDENTS (SNO NUMERIC (6, 0) NOT NULL SNAME CHAR (8) NOT NULL AGE NUMERIC(3,0) SEX CHAR(2) BPLACE CHAR(20) PRIMARY KEY(SNO)) 例 2 对于表的教学管理数据库中的表ENROLLS ,可以定义如下: CREATE TABLE ENROLLS (SNO NUMERIC(6,0) NOT NULL CNO CHAR(4) NOT NULL GRADE INT PRIMARY KEY(SNO,CNO) FOREIGN KEY(SNO) REFERENCES STUDENTS(SNO) FOREIGN KEY(CNO) REFERENCES COURSES(CNO) CHECK ((GRADE IS NULL) OR (GRADE BETWEEN 0 AND 100))) 例 3 根据表的STUDENTS 表,建立一个只包含学号、姓名、年龄的女学生表。 CREATE TABLE GIRL

AS SELECT SNO, SNAME, AGE FROM STUDENTS WHERE SEX=' 女'; 例 4 删除教师表TEACHER 。 DROP TABLE TEACHER 例 5 在教师表中增加住址列。 ALTER TABLE TEACHERS ADD (ADDR CHAR(50)) 例 6 把STUDENTS 表中的BPLACE 列删除,并且把引用BPLACE 列的所有视图和约束也一起删除。 ALTER TABLE STUDENTS DROP BPLACE CASCADE 例7 补充定义ENROLLS 表的主关键字。 ALTER TABLE ENROLLS ADD PRIMARY KEY (SNO,CNO) ; 视图操作(虚表) 例9 建立一个只包括教师号、姓名和年龄的视图FACULTY 。( 在视图定义中不能包含ORDER BY 子句) CREATE VIEW FACULTY AS SELECT TNO, TNAME, AGE FROM TEACHERS 例10 从学生表、课程表和选课表中产生一个视图GRADE_TABLE ,它包括学生姓名、课程名和成绩。 CREATE VIEW GRADE_TABLE AS SELECT SNAME,CNAME,GRADE FROM STUDENTS,COURSES,ENROLLS WHERE STUDENTS.SNO =ENROLLS.SNO AND https://www.360docs.net/doc/c01901882.html,O=https://www.360docs.net/doc/c01901882.html,O 例11 删除视图GRADE_TABLE DROP VIEW GRADE_TABLE RESTRICT 索引操作 例12 在学生表中按学号建立索引。 CREATE UNIQUE INDEX ST ON STUDENTS (SNO,ASC) 例13 删除按学号所建立的索引。 DROP INDEX ST 数据库模式操作

SQL常用语句+举例

SQL 常用语句+举例 相关表: 1. distinct: 剔除重复记录 例:select distinct stroe_name from Store_information 结果: 2. And / or: 并且/或 例:在表中选出所有sales 高于$1000或是sales 在$275及$500之间的记录 Select store_name ,sales from Store_information Where sales>1000 Or (sales>275 and sales <500) 3. 例:在表中查找store_name 包含 Los Angeles 或San Diego 的记录 Select * from Store_information where store_name in (‘Los Angeles ’,’San Diego ’) 结果: 4. Between : 可以运用一个范围抓出表中的值

与in 的区别:in 依照一个或数个不连续的值的限制抓出表中的值 例:查找表中介于Jan-06-1999 及Jan-10-1999 中的记录 Select * from Store_information where date between ‘Jan-06-1999’ and ‘Jan-10-1999’ 结果: 5. Like : 让我们依据一个套式来找出我们要的记录 套式通常包含: ’A_Z ’: 所有以A 开头,中间包含一个字符,以Z 结尾的字串 ’ABC%’: 所有以ABC 起头的字串 ’%XYZ ’: 所有以XYZ 结尾的字串 ’%AN%’: 所有包含AN 的字串 例:Select * from Store_information where store_name like ‘%An%’ 结果: 6. Order by: 排序,通常与ASC (从小到大,升序)、DESC (从大到小,降序)结合使用 当排序字段不止一个时,先依据字段1排序,当字段1有几个值相同时,再依据字段2排序 例:表中sales 由大到小列出Store_information 的所有记录 Select Store_name, sales,date from Store_information order by sales desc 结果: 7. 函数:AVG (平均值)、COUNT (计数)、MAX (最大值)、MIN (最小值)、SUM(求和) 语句:select 函数名(字段名) from 表名 例:求出sales 的总和 Select sum(sales) from Store_information 结果 8. COUNT (计数) 例:找出Store_information 表中 有几个store_name 值不是空的记录

50个常用sql语句实例(学生表 课程表 成绩表 教师表)

Student(S#,Sname,Sage,Ssex) 学生表 Course(C#,Cname,T#) 课程表 SC(S#,C#,score) 成绩表 Teacher(T#,Tname) 教师表 create table Student(S# varchar(20),Sname varchar(10),Sage int,Ssex varchar(2)) 前面加一列序号: if exists(select table_name from information_schema.tables where table_name='Temp_Table') drop table Temp_Table go select 排名=identity(int,1,1),* INTO Temp_Table from Student go select * from Temp_Table go drop database [ ] --删除空的没有名字的数据库 问题: 1、查询“”课程比“”课程成绩高的所有学生的学号; select a.S# from (select s#,score from SC where C#='001') a,(select s#,score from SC where C#='002') b where a.score>b.score and a.s#=b.s#; 2、查询平均成绩大于分的同学的学号和平均成绩; select S#,avg(score) from sc group by S# having avg(score) >60; 3、查询所有同学的学号、姓名、选课数、总成绩; select Student.S#,Student.Sname,count(SC.C#),sum(score) from Student left Outer join SC on Student.S#=SC.S# group by Student.S#,Sname 4、查询姓“李”的老师的个数; select count(distinct(Tname)) from Teacher where Tname like '李%'; 5、查询没学过“叶平”老师课的同学的学号、姓名; select Student.S#,Student.Sname from Student

SQL查询语句例子

数据表的查询(select) select 字段列表[as 别名], * from 数据表名 [where 条件语句] [group by 分组字段] [order by 排序字段列表desc] [LIMIT startrow,rownumber] 1、Select 字段列表From 数据表 例:①、select id,gsmc,add,tel from haf (* 表示数据表中所有字段) ②、select 单价,数量,单价*数量as 合计金额from haf (As 设置字段的别名) 2、Select …from …Where 筛选条件式 筛选条件式:①、字符串数据:select * from 成绩单Where 姓名='李明' ②、万用字符:select * from 成绩单Where 姓名like '李%' select * from 成绩单Where 姓名like '%李%' select * from 成绩单Where 姓名like '%李_' ③、特殊的条件式: ⑴= / > / < / <> / >= / <= ⑵AND(逻辑与) OR(逻辑或) NOT(逻辑非) ⑶Where 字段名称in(值一,值二) ⑷Where 字段名称Is Null / Where 字段名称Is Not Null 3、Select …from …group by 字段 SQL函数: SELECT sex,count(id) as women from `user` group by 'sex'; 函数名描述函数名描述 AVG平均值Count计数 MAX最大值MIN最小值 Sum求和

sql基础语句

掌握SQL四条最基本的数据操作语句:Insert,Select,Update和Delete。 练掌握SQL是数据库用户的宝贵财富。在本文中,我们将引导你掌握四条最基本的数据操作语句—SQL的核心功能—来依次介绍比较操作符、选择断言以及三值逻辑。当你完成这些学习后,显然你已经开始算是精通SQL了。 在我们开始之前,先使用CREATE TABLE语句来创建一个表(如图1所示)。DDL语句对数据库对象如表、列和视进行定义。它们并不对表中的行进行处理,这是因为DDL语句并不处理数据库中实际的数据。这些工作由另一类SQL语句—数据操作语言(DML)语句进行处理。 SQL中有四种基本的DML操作:INSERT,SELECT,UPDA TE和DELETE。由于这是大多数SQL用户经常用到的,我们有必要在此对它们进行一一说明。在图1中我们给出了一个名为EMPLOYEES的表。其中的每一行对应一个特定的雇员记录。请熟悉这张表,我们在后面的例子中将要用到它。 INSERT语句 用户可以用INSERT语句将一行记录插入到指定的一个表中。例如,要将雇员John Smith的记录插入到本例的表中,可以使用如下语句: INSERT INTO EMPLOYEES V ALUES ('Smith','John','1980-06-10', 'Los Angles',16,45000); 通过这样的INSERT语句,系统将试着将这些值填入到相应的列中。这些列按照我们创建表时定义的顺序排列。在本例中,第一个值“Smith”将填到第一个列LAST_NAME中;第二个值“John”将填到第二列FIRST_NAME中……以此类推。 我们说过系统会“试着”将值填入,除了执行规则之外它还要进行类型检查。如果类型不符(如将一个字符串填入到类型为数字的列中),系统将拒绝这一次操作并返回一个错误信息。 如果SQL拒绝了你所填入的一列值,语句中其他各列的值也不会填入。这是因为SQL提供对事务的支持。一次事务将数据库从一种一致性转移到另一种一致性。如果事务的某一部分失败,则整个事务都会失败,系统将会被恢复(或称之为回退)到此事务之前的状态。 回到原来的INSERT的例子,请注意所有的整形十进制数都不需要用单引号引起来,而字符串和日期类型的值都要用单引号来区别。为了增加可读性而在数字间插入逗号将会引起错误。记住,在SQL中逗号是元素的分隔符。 同样要注意输入文字值时要使用单引号。双引号用来封装限界标识符。 对于日期类型,我们必须使用SQL标准日期格式(yyyy-mm-dd),但是在系统中可以进行定义,以接受其他的格式。当然,2000年临近,请你最好还是使用四位来表示年份。

50个常用的SQL语句练习

基本信息Student(`S#`,Sname,Sage,Ssex) 学生表 Course(`C#`,Cname,`T#`) 课程表 SC(`S#`,`C#`,score) 成绩表 Teacher(`T#`,Tname) 教师表 问题: 1、查询“001”课程比“002”课程成绩高的所有学生的学号; select a.`S#` from (select `S#`,score from SC where `C#`='001') a,(select `S#`,score from SC where `C#`='002') b where a.score>b.score and a.`S#`=b.`S#`; ↑一张表中存在多对多情况的 2、查询平均成绩大于60分的同学的学号和平均成绩; 答案一:select `S#`,avg(score) from sc group by `S#` having avg(score) >60; ↑一对多,对组进行筛选 答案二:SELECT s ,scr FROM (SELECT sc.`S#` s,AVG(sc.`score`) scr FROM sc GROUP BY sc.`S#`) rs WHERE rs.scr>60 ORDER BY rs.scr DESC ↑嵌套查询可能影响效率 3、查询所有同学的学号、姓名、选课数、总成绩; 答案一:select Student.`S#`,Student.Sname,count(`C#`),sum(score) from Student left Outer join SC on Student.`S#`=SC.`S#` group by Student.`S#`,Sname ↑如果学生没有选课,仍然能查出,显示总分null(边界情况) 答案二:SELECT student.`S#`,student.`Sname`,COUNT(sc.`score`) 选课数,SUM(sc.`score`) 总分FROM Student,sc WHERE student.`S#`=sc.`S#` GROUP BY sc.`S#` ↑如果学生没有选课,sc表中没有他的学号,就查不出该学生,有缺陷! 4、查询姓“李”的老师的个数; select count(distinct(Tname)) from Teacher where Tname like '李%'; 5、查询没学过“叶平”老师课的同学的学号、姓名; select Student.`S#`,Student.Sname from Student where `S#` not in (select distinct(SC.`S#`) from SC,Course,Teacher where SC.`C#`=Course.`C#` and Teacher.`T#`=Course.`T#` and Teacher.Tname='叶平'); ↑反面思考Step1:先找学过叶平老师课的学生学号,三表联合查询 Step2:在用not in 选出没学过的 Step3:distinct以防叶平老师教多节课;否则若某同学的几节课都由叶平教,学号就会出现重复 6、查询学过“001”并且也学过编号“002”课程的同学的学号、姓名; select Student.`S#`,Student.Sname from Student,SC where Student.`S#`=SC.`S#` and SC.`C#`='001'and exists( Select * from SC as SC_2 where SC_2.`S#`=SC.`S#` and SC_2.`C#`='002' ); ↑注意目标字段`S#`关联 exists subquery 可以用in subquery代替,如下 select Student.`S#`,Student.Sname from Student,Sc where Student.`S#`=SC.`S#` and SC.`C#`='001'and sc.`s#` in ( select sc_2.`s#` from sc as sc_2 where sc_2.`c#`='002' ); ↑不同之处,in subquery此处就不需要关联了

sql常用语句100例

--update phoneinfo set cityname = '克孜勒苏柯尔克孜' where cityname = '克孜勒苏柯尔克孜州' --update phoneinfo set cityname = '湘西' where pad1 = '湖南 吉首' select * from dbo.PhoneInfo --update dbo.PhoneInfo set provincename=b.provincename,cityname=b.cityname from dbo.PhoneInfo a,PhoneInfo_hl b --where a.phonebound=b.phonebound --select * from dbo.UnknowPhoneBound --select * from dbo.Area --select * from phoneinfo a, phoneinfo_old b, phoneinfo_hl c where a.phonebound = b.phonebound and a.phonebound = c.phonebound and (a.cityname <> b.cityname or a.cityname <> c.cityname) --select * from phoneinfo a, phoneinfo_hl b where a.phonebound = b.phonebound and a.cityname <> b.citynameselect * from phoneinfo a, phoneinfo_old b where a.phonebound = b.phonebound and a.cityname <> b.cityname --select * into phoneinfo_bak from phoneinfo --select * from phoneinfo_bak select * from phoneinfo a, phoneinfo_old b where a.phonebound = b.phonebound and a.cityname <> b.cityname --select * from dbo.PhoneInfo_Telecom --update PhoneInfo_Telecom set provincename = '内蒙古' where pad1 = '内蒙兴安盟' update PhoneInfo set cityname = '酒泉' where pad1 = '甘肃 酒泉嘉峪关' --update dbo.PhoneInfo_old set provincename=b.provincename,cityname=b.cityname from dbo.PhoneInfo_old a,PhoneInfo_Telecom b --where a.phonebound=b.phonebound create table client_all as

sql常用语句

iBATIS常用Sql语句 版本1.0

文档修订记录 版本编号或者更改记录编号*变化 状态 简要说明(变更内容和变更范 围) 日期变更人审核日期审核人 1.0 新建2009-4-17 谷涛 1.1 增加2009-4-28 谷涛*变化状态:A——增加,M——修改,D——删除

(1) 输入参数为单个值 delete from MemberAccessLog where #value# <= accessTimestamp (2) 输入参数为一个对象

相关主题
相关文档
最新文档