sql语句全解.doc_第1页
sql语句全解.doc_第2页
sql语句全解.doc_第3页
sql语句全解.doc_第4页
sql语句全解.doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Sql语句详解数据库Schoolselect studentID,name,sex,age from School.dbo.Student在列名前加distinct,就可以去掉本列中重复的行select DISTINCT sex from School.dbo.Studentwhere用于条件判断,只有符合where后的条件的行才会被列出来select * from School.dbo.Student where Sex=女And or用法用于where后面条件连接SELECT * FROM School.dbo.StudentWHERE Sex=女 OR (Age 10) in是条件在这个范围内SELECT * FROM School.dbo.StudentWHERE Age in(11,12,13) exists后面是一个子查询,返回值为boolean型,与in的差别在于in后 只能跟单列的子查询,像下面这种情况就只能用exists,还有一个就是 in后面可以是一个集合,exists用法是把主查询中的字段传入到子查询中去。 如果有符合的条件,会停止全表检索,返回TRUE。所以效率才要高于IN,IN是 要进行完全表检索得到集合才会结束执行。而EXISTS遇到符合的条件,就会 停止执行子查询。 select StudentID,CourseID,Score from School.dbo.Scores where exists (select * from School.dbo.Student where Scores.StudentID=Student.StudentID and Student.Name=王宇)betweenand跟in用法相似,这个指闭区间SELECT * FROM School.dbo.StudentWHERE Age between 11 and 14like通配符,其中,%a指以a结尾的,a%指以a开头的,%a%指所有含有a的SELECT * FROM School.dbo.StudentWHERE Age like 11%order by排序,其中asc升序,desc降序,下面例子指先按年龄降序排序,年龄相同的,再按学号升序排SELECT * FROM School.dbo.Studentorder by Age desc,StudentID asc函数 AVG (平均) COUNT (计数) MAX (最大值) MIN (最小值) SUM (总合) SELECT count(*)as 元祖个数,AVG(age) as 平均年龄,SUM(age)as 总和年龄,MIN(age)as 最小年龄,MAX(age)as 最大年龄 FROM School.dbo.Student group by是对score表按学号studentID进行分组,而having是因为在聚集函数中不能用 where进行条件筛选,而它刚好能弥补这一不足 select StudentID,count(*) as NumberCourse,AVG(Score) as AvgScore from School.dbo.Scores group by StudentID having AVG(Score)80 order by AVG(Score)desc 别名alias,首先聚集函数可以用 as+新列名,而列明可以用直接加新列名的方式获得别名 select StudentID 学号,count(*) as 课程数,AVG(Score) as 平均成绩 from School.dbo.Scores group by StudentID having AVG(Score)80 order by AVG(Score)desc 表格连接,一是内连接,二是外连接(左外连接,右外连接,全外连接),三是交叉连接Cross join内连接包括(等值连接,非等值连接,自连接):只连接匹配的行select School.dbo.Student.StudentID,name,Sex,Age,dbo.Course.CourseID,Teacher,Scorefrom School.dbo.Scoresinner join School.dbo.Studenton School.dbo.Student.StudentID=School.dbo.Scores.StudentIDinner join School.dbo.Courseon School.dbo.Scores.CourseID=School.dbo.Course.CourseID左外连接:包含左边表的全部行(不管右边的表中是否存在与它们匹配的行),以及右边表中全部匹配的行select School.dbo.Student.StudentID,name,Sex,Age,dbo.Course.CourseID,Teacher,Scorefrom School.dbo.Studentleft outer join School.dbo.Scoreson School.dbo.Student.StudentID=School.dbo.Scores.StudentIDleft outer join School.dbo.Courseon School.dbo.Scores.CourseID=School.dbo.Course.CourseID右外连接:包含右边表的全部行(不管左边的表中是否存在与它们匹配的行),以及左边表中全部匹配的行。select School.dbo.Student.StudentID,name,Sex,Age,dbo.Course.CourseID,Teacher,Scorefrom School.dbo.Studentright outer join School.dbo.Scoreson School.dbo.Student.StudentID=School.dbo.Scores.StudentIDright outer join School.dbo.Courseon School.dbo.Scores.CourseID=School.dbo.Course.CourseID全外连接:包含左、右两个表的全部行,不管另外一边的表中是否存在与它们匹配的行。select School.dbo.Student.StudentID,name,Sex,Age,dbo.Course.CourseID,Teacher,Scorefrom School.dbo.Studentfull outer join School.dbo.Scoreson School.dbo.Student.StudentID=School.dbo.Scores.StudentIDfull outer join School.dbo.Courseon School.dbo.Scores.CourseID=School.dbo.Course.CourseID交叉连接:(不带条件where,如果带返回或显示的是匹配的行数,没什么意义,一般不用)select * from School.dbo.Studentcross join School.dbo.Scorescross join School.dbo.Course结果太长就不显示了,总之就是每个表格每行数据都要匹配subquery 的架构可以被用来连接表格。另外,有的时候 subquery 是唯一能够连接两个表格的方式select * from School.dbo.Scores where StudentID in(select StudentID from School.dbo.Student where Sex=女)UNION 指令的目的是将两个 SQL 语句的结果合并起来。从这个角度来看,UNION 跟 JOIN 有些许类似,因为这两个指令都可以由多个表格中撷取资料。UNION 的一个限制是两个 SQL 语句所生的栏位需要是同样的资料种类。另外,当我们用 UNION这个指令时,我们只会看到不同的资料值 (类似 SELECT DISTINCT)。UNION 的语法如下:SQL 语句1UNIONSQL 语句2 select studentID from School.dbo.Scoresunion select studentID from School.dbo.StudentUNION ALL 这个指令的目的也是要将两个 SQL 语句的结果合并在一起。UNION ALL 和 UNION 不同之处在于 UNION ALL 会将每一笔符合条件的资料都列出来,无论资料值有无重复。和 UNION 指令类似,INTERSECT 也是对两个 SQL 语句所产生的结果做处理的。不同的地方是,UNION 基本上是一个 OR (如果这个值存在于第一句或是第二句,它就会被选出),而 INTERSECT则比较像 AND ( 这个值要存在于第一句和第二句才会被选出)。UNION 是联集,而 INTERSECT 是交集。INTERSECT 的语法如下:SQL语句1INTERSECTSQL语句2 select studentID from School.dbo.ScoresINTERSECT select studentID from School.dbo.StudentMINUS 指令是运用在两个 SQL 语句上。它先找出第一个 SQL 语句所产生的结果,然后看这些结果有没有在第二个 SQL 语句的结果中。如果有的话,那这一笔资料就被去除,而不会在最后的结果中出现。如果第二个 SQL 语句所产生的结果并没有存在于第一个 SQL 语句所产生的结果内,那这笔资料就被抛弃。MINUS 的语法如下:SQL 语句1MINUSSQL 语句2 select studentID from School.dbo.ScoresMINUS select studentID from School.dbo.Student有需要将由不同栏位获得的资料串连在一起,CONCAT(字串, 字串, 字串, .): 将字串、字串、字串,等字串连在一起select name+sex from School.dbo.Student where Name=王宇-表格-CREATE TABLE 表格名(栏位1 栏位1 资料种类,栏位2 栏位2 资料种类,. ) CREATE VIEW 视图名AS SELECT 栏位1, 栏位1, 栏位1,. FROM 表名 where条件句从资料库表格中寻找资料也是同样的原理。如果一个表格没有索引的话,资料库系统就需要将整个表格的资料读出 (这个过程叫做table scan)。若有适当的索引存在,资料库系统就可以先由这个索引去找出需要的资料是在表格的什么地方,然后直接去那些地方抓资料。这样子速度就快多了。因此,在表格上建立索引是一件有利于系统效率的事。一个索引可以涵盖一或多个栏位。建立索引的语法如下CREATE INDEX INDEX_NAME ON TABLE_NAME (COLUMN_NAME1,COLUMN_NAME2,.)在表格被建立在资料库中后,我们常常会发现,这个表格的结构需要有所改变。常见的改变如下ALTER TABLE table_name改变方式 加一个栏位 ADD 栏位1 栏位1 资料种类 删去一个栏位 DROP 栏位1 改变栏位名称 CHANGE 原本栏位名 新栏位名 新栏位名资料种类 改变栏位的资料种类 MODIFY 栏位1 新资料种类清除表格。DROP TABLE 的语法是:DROP TABLE 表格名 有时候我们会需要清除一个表格中的所有资料。要达到者个目的,一种方式是我们在 SQL DROP 那一页 看到的 DROP TABLE 指令。不过这样整个表格就消失,而无法再被用了。另一种方式就是运用 TRUNCATE TABLE 的指令。在这个指令之下,表格中的资料会完全消失,可是表格

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论