SQL语句实例说明 方便学习mysql的朋友(4)
来源:asp之家 发布时间:2012-11-30 20:02:43
复合条件连接:
WHERE子句中可以有多个连接条件,称为复合条件连接
select s.sno,s.name,c.name,s.score from student s,class c where s.cno = c.cno and s.score < 60;
复合条件连接查询,查询学生信息和课程信息,并且成绩小于60的记录
嵌套查询:
一个SELECT-FROM-WHERE语句称为一个查询块。将一个查询块嵌套在另一个查询块的WHERE子句或HAVING短语的条件中的查询称为嵌套查询。
子查询的SELECT语句中不能使用ORDER BY子句,ORDER BY 子句只能对最终查询结果排序
带有IN谓词的子查询:
select sno,name from student
where cno in
(
select cno from student
where name = '华雄'
);
查询和"华雄"选同一课程的所有学生的学号和姓名。
子查询的查询条件不依赖于父查询,称为不相关子查询。
如果子查询条件依赖于父查询,这类子查询称为相关子查询,整个查询语句称为相关嵌套查询语句。
带有比较运算符的子查询:
select name,cno from student s1
where score >
(
select avg(score) from student s2
where s2.name = s1.name
);
查询学生的大于各科平均成绩的科目
以上是相关子查询。
带有ANY(SOME)或ALL谓词的子查询
子查询返回单值时可以用比较运算符,但返回多值时要用ANY(有的系统用SOME)或ALL谓词修饰。使用ALL或ALL谓词时必须使用比较运算符。
>ANY 大于子查询结果的某个值
>ALL 大于子查询结果的所有值
<ANY 小于子查询结果的某个值
<ALL 小于子查询结果的所有值
>=ANY 大于等于子查询结果的某个值
>=ALL 大于等于子查询结果的所有值
<=ANY 小于等于子查询结果的某个值
<=ALL 小于等于子查询结果的所有值
=ANY 等于子查询结果的某个值
=ALL 等于子查询结果的所有值(通常没有实际意义)
!=(或<>)ANY 不等于子查询结果的某个值
!=(或<>)ALL 不等于子查询结果的任何一个值
select name,score from student where score <= all (select score from student);
查询成绩最小的学生姓名和成绩
集合查询:
SELECT语句的查询结果是元组的集合,所以多个SELECT语句的结果可进行集合操作。集合操作主要包括并操作(UNION),交操作(INTERSECT),差操作(EXCEPT)。
参加集合操作的各查询结果的列数必须相同;对应项的数据类型也必须相同。
MySQL数据库不支持INTERSECT和EXCEPT操作!
select * from student where cno=1
union
select * from student where cno=2;
查询班级1和班级2所有学生信息
数据更新:
插入数据:
插入元组:
INSERT
INTO <表名> [(<属性列1>)[,<属性列2>]……]
VALUES (<常量1>[,<常量2>]……);
例子:
insert into student (cno,name,score) values (2,'横切',85);
插入子查询结果:
INSERT
INTO <表名> [(<属性1>[,<属性2>]……)]
子查询;
例子:
insert into studentcopy select * from student;
将student表的信息全部复制到studentcopy表中
修改数据:
UPDATE <表名>
SET <列名>=<表达式>[,<列名>=<表达式>]……
[WHERE <条件>]
修改某一元组的值:
update studentcopy set score=80 where sno=1;
修改多个元组的值:
update studentcopy set score=score-20;
删除数据:
DELETE
FROM <表名>
[WHERE <条件>];
删除某一元组:
delete from studentcopy where sno=1;
删除多个元组:
delete from studentcopy;
带子查询的删除语句:
delete from studentcopy where cno in (select cno from student as s where s.cno = 2);
视图:
关于视图,它的作用和优缺点可以参考文章:数据库视图介绍
建立视图:
CREATE VIEW <视图名> [(<列名>[,<列名>]……)]
AS <子查询>
[WITH CHECK OPTION]
子查询可以是任意复杂的SELECT语句,但通常不允许含有ORDER BY子句和DISTINCT语句。
WITH CHECK OPTION 表示对视图进行UPDATA,INSERT和DELETE操作时要保证更新,插入或删除的行满足视图定义中的谓词条件
组成视图的属性列名或者全部省略或者全部指定,没有第三种选择。如果省略了视图的各个属性列名,则隐含该视图由子查询中SELECT子句目标列中的诸字段组成。
但在下面三种情况下必须明确指定组成视图的所有列名:
(1) 某个目标列不是单纯的属性名,而是聚集函数或列表达式。
(2) 多表连接时选出了几个同名列作为视图的字段。
(3) 需要在视图中为某个列启用新的更合适的名字。
create view part_student
as
select * from student
where cno = 2;
建立物理班学生的视图
create view student_class (sno,student_name,class_name,score)
as
select s.sno,s.name,c.name,s.score
from student as s,class as c
where s.cno = c.cno;
结合学生表和选课表建立视图
如果以后修改了基本表的结构,则基本表与视图的映射关系就被破坏了,该视图就不能正确工作了。为避免出现这类问题,最好在修改基本表之后删除由该基本表导出的视图,然后重建这个视图。
删除视图:
DROP VIEW <视图名> [CASCADE];
如果视图上还导出了其他视图,则使用CASCADE级联删除语句,把该视图和由它导出的所有视图一起删除。
查询视图:
查询视图和查询基本表类似。
更新视图:
更新视图和更新基本表类似,不过有些限制。
猜你喜欢
- 保持良好的代码风格是每个Coder必学的课程,同样在HTML设计的时候也要特别注意代码的规范性,虽然说不规范的代码不会直接造成严重的后果,但
- <%on error resume nextdim conn,sql,rsset conn=Server.CreateObject(&
- 一套javascript摇奖程序,随机6+1选号码,类似游戏彩票摇奖效果,实时滚动。截图:<style>.inp{ width:
- 将有安全问题的SQL过程删除.比较全面.一切为了安全!删除了调用shell,注册表,COM组件的破坏权限MS SQL SERVER2000使
- 阅读:Dreamweaver量身打造Wordpress留言板(一)虽然说在Dreamweaver量身打造Wordpress留言板(二)这一篇
- 如果你想进一步了解如何用JavaScript来为网页添加交互性的话,你也许已经听过JavaScript的事件代理(event delegat
- 如何使用Iframe实现本页提交?例:chunfeng.html< html>< head>&n
- 提到sa弱口令,我们首先就会想到,许多数据库都有1个类似的超级管理员账号,比如:Oracle是"system"和&quo
- 利用图标工具(有很多)制作图标文件(favicon.ico)上传到网站所在的服务器的根目录下,这个文件必须是16*16大小的图标文件。当然,
- 数据完整性是任何数据库系统要保证的重点。不管系统计划得有多好,空数据值的问题总是存在。本文探讨了在SQL Server中处理这些值时涉及的3
- jquery作为一款高质量的框架被大多web开发者所推崇。jquery也的确是一款伟大的产品,在实际开发中明显提高了效率。但是任何产品并不是
- 浏览器对于CSS的支持问题落后于CSS的发展,以占有市场绝对份额的Internet Explorer来说,直到其前不久发布的第8个版本才刚刚
- 引言在负责咨询工作的过去 6 年中,我曾多次听说关于数据访问和操作方面的问题,它时刻困扰着用户:“如何编写应用程序,以便
- SQL Server Extended Events(下面简称XEvent)是SQL Server 2008里新加的事件处理系统,用来取代S
- 相信有很多人有用程序向Excel导数据的需求, 且做过. 一般导出一些文本数据是很方便的, 可选方法很多, 比如拼接文本字符串存.cvs格式
- 首先,我们需要着重介绍一些概念,以给你提供一些使这个“奇迹”得以发生的组成部分。太轻易地泄露伏笔对于讲故事来说不是个好的形式,所以那些不愿意
- IE8主页http://www.microsoft.com/windows/products/winfamily/ie/ie8/defaul
- 使用SQL SERVER的[导入]功能,便可将access数据转换,但要注意原来的'自增字段'需要修改,将相应字段标识修改为
- 什么是存储过程呢?定义:将常用的或很复杂的工作,预先用SQL语句写好并用一个指定的名称存储起来, 那么以后要叫数据库提供与已定义好的存储过程
- 一、数组的创建方式一var a = new Array(); a[0]="wo"