敲机房收费系统的时候,感觉我的SELECT语句总是千篇一律,txtSQL=”select* from talbel _source where search_condition ”这怎么可以,把整个系统敲完也没有把最基本的select语句格式用到自己的代码中,不仅收获会很少,到了复杂的地方只能创建N多个记录集mrc N来救场,还费了事。不行,我得回头去充充电。
-------前言
SELECT语句的功能有:数据查询(精确or模糊)、统计、分组、排序等。我们常用的功能是数据查询,对于其他三方面的运用比较少,下面就对其进行整理。
如上图是对数据库操作的简单分类,通过对其中的学习,完全可以把它的四个主要功能涉及到,首先我先对“获取简单数据”进行总结,这样在机房系统中就可以做到玩转SELECT了,好了不啰嗦了,直奔主题。
1SELECT [ALL|DISTINCT] select_list
2[INTO new _table]
3FROM table_source (as 别名)
4[WHERE search_condition] (比较、逻辑、范围、列表、字符、未知)
5[GROUP BY group_by_expression]
6[HAVING search_conditions]
7[ORDER BY order_expression][ASC|DESC]SELECT的经典语句结构中共有5个子句,分别是SELECT\FROM\WHERE\GROUPBY\ORDERBY 其中select和from为必选,其余为可选,语句顺序不能变,其实我认为要玩转SELECT语句,最重要的是玩转以where条件子句为中心的和其他语句的混搭。掌握了它的一些技巧,再次遇到它就不会犯难了。
首先说一下where子句,search_condition可以为比较、逻辑、范围、列表、字符、未知运算符,在此主要说明逻辑和列表运算符,下面先说列表运算符,WHERE expression [Not] IN value_list,
例如:机房收费中查询学号除012和034以外所有人的信息时,
SELECT * FROM student_Infowhere stdNo not in (‘012’,’034’)就可以了。
再举个例子就是今天做自考题时遇到的一个问题,
设学生社团管理数据库有三个关系:
S(Sno,Sname,Age,Sex,Dept)
A(Ano,Aname,Location,Manager)
SA(Sno,Ano,Date)
其中表S的属性分别表示学号、姓名、年龄、性别和所在系;表A的属性分别表示会员编号、协会名、协会 的办公地点和负责人(负责人为学号);表SA描述了学生参加社团的情况,其属性分别表示学号、协会编号 、加入协会时间。
试用SQL语言查询参加“篮球”协会的学生姓名和所在系。
只要你会用WHERE子句的列表运算符便可轻轻松松搞定:
SELECTSname,Dept
FROM S
WHERE Sno IN (
SELECT Sno FROM SA
WHERE Ano IN(
SELECT Ano FROM A WHERE A.Aname='篮球'));
回到话题其中我认为逻辑运算符要比其他四类高一个级别,可以将其他的四种进行组合,比如where Age>10 and sex=’M’, 逻辑运算符AND ORNO 起到了连接多个search condition的作用,但是需要注意:
1、NOT仅用于简单条件,不能用于包含AND和OR的复合条件,例如NOT(sex=’M’ AND age>10)是错的。
2、AND用于合并简单条件和包含NOT的条件,但这些条件不允许包含OR,例如sex=’M’ AND (NOT age>10)是正确的,但是sex=’M’ AND(age>10 OR age<5)是错误的。
3、OR可以使用AND和NOT合并的所有复合条件。
4、优先级NOT>AND>OR,处理时系统先处理优先级高的,再处理优先级低的。
对于SELECT语句的其他4条子句,都是比较常用的,就不做说明了。
对于利用SEL语句进行多表操作,将会在下一篇博客中提到哦~~~