初学者SQL语句介绍 1.用 Select 子句检索记录 Select 子句是每一个检索数据的查询核心。它告诉数据库引擎返回什么字段。 Select 子句的常见形式是: Select * 该子句的意思是“返回在所指定的记录源中能找到的所有字段”。这种命令形式很方便,因为你无需知道从表中检索的字段名称。然而,检索表中的所有列是低效的。因此,因该只检索需要的字段,这样可以大大的提高查询的效率。 2.使用 From 子句指定记录源 From 子句说明的是查询检索记录的记录源;该记录源可以是一个表或另一个存储查询。 你还能从多个表中检索记录,这在后面的章节中将介绍。 例子: Select * From students 检索students表中的所有记录 3.用 Where 子句说明条件 Where 子句告诉数据库引擎根据所提供的一个或多个条件限定其检索的记录。条件是一个表达式,可具有真假两种判断。 例子: Select * From students Where name="影子" 返回students中name字段为影子的列表,这次所返回的结果没有特定顺序,除非你使用了 Order By 子句。该子句将在后面的章节介绍。 注意:Where 子句中的文本字符串界限符是双引号,在VB中因改为单引号,因为在VB中字符串的界定符是双引号。 补充: 使用 And 和 Or 逻辑可以将两个或更多的条件链接到一起以创建更高级的 Where 子句。 例子: Select * From students Where name="影子" And number>100 返回name为影子number大于100的列表。 例子: Select * From students Where name="影子" And (number>100 Or number<50) 返回name为影子,number大于100或者小于50的列表。 Where 子句中用到的操作符 操作符 功能 < 小于 <= 小于或等于 > 大于 >= 大于或等于 = 等于 <> 不等于 Between 在某个取值范围内 Like 匹配某个模式 In 包含在某个值列表中 SQL中的等于和不等于等操作符与VB中的意义和使用相同 例子: (1).Between 操作符 Use cust Select * From students Where number Between 1 and 100 Between 操作符返回的是位于所说明的界限之内的所有记录值。这个例子就返回 number 字段 1 到 100 之间的全部记录。 (2). Like 操作符和通配符 Use cust Select * From students Where name Like "%影%" Like 操作符把记录匹配到你说明的某个模式。这个例子是返回含“影”的任意字符串。 四种通配符的含义 通配符 描述 % 代表零个或者多个任意字符 _(下划线) 代表一个任意字符 [] 指定范围内的任意单个字符 [^] 不在指定范围内的任意单个字符 全部示例子如下: Like "BR%" 返回以"BR"开始的任意字符串 Like "br%" 返回以"Br"开始的任意字符串 Like "%een" 返回以"een"结束的任意字符串 Like "%en%" 返回包含"en"的任意字符串 Like "_en" 返回以"en"结束的三个字符串 Like "[CK]%" 返回以"C"或者"K"开始的任意字符串 Like "[S-V]ing" 返回长为四个字符的字符串,结尾是"ing",开始是从S到V。 Like "M[^c]%" 返回以"M"开始且第二个字符不是"c"的任意字符串。 4. 使用 Order By 对结果排序 Order By 子句告诉数据库引擎对其检索的记录进行排序。可以对任何字段排序,或者对多个字段排序,并且可以以升序或隆序进行排序。 在一个正式的 Select 查询之后包含一个 Order By 子句,后跟想排序的字段(可以有多个)便可以说明一个排序顺序。 例子: Use cust Select * From students Where name Like "%影%" Order By number 对返回的结果按 number 进行排序。 以降序排序 如要以隆序排序,只需在排序的字段之后使用 Desc 关键字。 例子: Use cust Select * From students Where name Like "%影%" Order By number Desc 5. 使用 Top 显示某个范围的第一个记录或最后一个记录。 使用 Top 关键字可以只显示一个大记录前面或后面的少数几个记录。在查询中,Top 关键字与排序子句一起把结果集限制为少数几个记录或按某个百分比显示整个结果记录集合中的一部分。 例子: Select Top 3 * From students 返回 students 表中的前3条记录 Select Top 10 Percent * From students 返回 students 表中前面的10%个记录 Select Top 3 * From students Order By number desc 返回 students 表中 number 最大的(最后)的3条记录 6. 用 As 对字段名进行别名化 为什么在查询中对字段命以别名,或重新命名,这样做的原因有两个: ☆所涉及的表的字段名很长,想使字段在结果集中更易处理一些。 ☆创建的查询产生了某些计算或合计列,需要对之进行命名。 不管是什么原因对字段命以别名,在 SQL 中都可以容易地使用 As 子句做得。 例子: Select number As 学号 ,name As 姓名 From students 7. 合并查询 合并查询( Union Query )用于合并具有相同字段结构的两个表的内容,如果想在一个结果集中显示多个记录源中的不相关的记录时,这十分有用。 例子: Select * From students Union Select * From students1 该查询结果集把 students 和 students1 中的记录合并到一个结果中,其输出就和原表归档之前一模一样。 注意:缺省情况下,合并查询不会返回重复记录(如果记录归档系统在把记录拷到归档表中后不将相应的记录删除,这时该功能就有用了),可以加上 All 关键字而让合并查询显示重复记录。 例子: Select * From students Union All Select * From students1 该合并查询显示 students 表和 students1 表的内容时,没有对重复记录进行处理 补充: Union 运算符允许把两个或者多个查询结果合并到一个查询结果集中。如果比较 Union 和 Join 两咱运算符,那么 Union 运算符增加行的数量,而 Join 运算符增加列的数量。使用 Union 时应该注意,两个结果中的列的结构必须匹配,数据类型必须兼容等等。 Union 运算符的语法形式如下: Select select_list From clause Where clause Group By clause Having clause Union [All] Select select_list From clause Where clause Group By clause Having clause Order By clause Compute clause 对于 Union 运算符,有下列几点需要说明: ·在默认情况下,Union 运算符删除全部冗余行。如果使用All 选项,那么冗余行不删除。 ·在 Union 语句中的全部 select_list 必须有相同数量的列、兼容的数据类型并且按照同样的顺序出现。 ·在结果集中,列名来自第一个 Select 语句。 8.连接查询 在实际使用过程中经常需要同时从两个表或者两个以上表中检索数据。连接就是允许同时从两个表或者两个以上表中检索数据,指定这些表中某个或者某些列作为连接条件。在 SQL Server 中,可以使用两种连接语法形式,一种是 Ansi 连接语法形式,这是连接用在 From 子句中,另外一种是 SQL Server 连接语句形式,这是连接用在 Where 子句中。 Ansi 连接语法形式如下: Select table_name.column_name,table_name.column_name,... From {table_name [join_type] Join table_name On search_conditions} Where [search_conditions] 在 Ansi 语法形式中,可以 Ansi 连接关键字来确定使用的连接形式。例如: ☆使用 Inner Join 关键字,结果集中仅包含满足条件的行。 ☆使用 Cross Join 关键字,结果集中包含两个表中所有行的组合。 ☆使用 Outer Join 关键字,结果集中既包含那些满足条件的行,还包含那些其中某个表的全部行。 SQL Server 连接语法形式如下所示: Select table_name.column_name,table_name.column_name,... From [table_name,tab
说明:查询从第30条到第40条的记录数
SQL:select top 10 * from temp where id not in (select top 30 id from temp order by id asc) order by id asc
说明:复制表(只复制结构,源表名:a 新表名:b)
SQL: select * into b from a where 1<>1
说明:拷贝表(拷贝数据,源表名:a 目标表名:b)
SQL: insert into b(a, b, c) select d,e,f from b;
说明:显示文章、提交人和最后回复时间
SQL: select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b
说明:外连接查询(表名1:a 表名2:b)
SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c
说明:日程安排提前五分钟提醒
SQL: select * from 日程安排 where datediff(’minute’,f开始时间,getdate())>5
说明:两张关联表,删除主表中已经在副表中没有的信息
SQL:
delete from info where not exists ( select * from infobz where info.infid=infobz.infid )
说明:--
SQL:
SELECT A.NUM, A.NAME, B.UPD_DATE, B.PREV_UPD_DATE FROM TABLE1,(SELECT X.NUM, X.UPD_DATE, Y.UPD_DATE PREV_UPD_DATE FROM (SELECT NUM, UPD_DATE, INBOUND_QTY, STOCK_ONHAND FROM TABLE2 WHERE
TO_CHAR(UPD_DATE,’YYYY/MM’) = TO_CHAR(SYSDATE, ’YYYY/MM’)) X, (SELECT NUM, UPD_DATE, STOCK_ONHAND FROM TABLE2 WHERE TO_CHAR(UPD_DATE,’YYYY/MM’) = TO_CHAR(TO_DATE(TO_CHAR(SYSDATE, ’YYYY/MM’) || ’/01’,’YYYY/MM/DD’) - 1, ’YYYY/MM’) ) Y, WHERE X.NUM = Y.NUM (+)AND X.INBOUND_QTY + NVL(Y.STOCK_ONHAND,0) <> X.STOCK_ONHAND ) B WHERE A.NUM = B.NUM
说明:--
SQL:
select * from studentinfo where not exists(select * from student where studentinfo.id=student.id) and 系名称=’"&strdepartmentname&"’ and 专业名称=’"&strprofessionname&"’ order by 性别,生源地,高考总成绩
说明: 从数据库中去一年的各单位电话费统计(电话费定额贺电化肥清单两个表来源)
SQL:
SELECT a.userper, a.tel, a.standfee, TO_CHAR(a.telfeedate, /’yyyy/’) AS telyear, SUM(decode(TO_CHAR(a.telfeedate, /’mm/’), /’01/’, a.factration)) AS JAN, SUM(decode(TO_CHAR(a.telfeedate, /’mm/’), /’02/’, a.factration)) AS FRI, SUM(decode(TO_CHAR(a.telfeedate, /’mm/’), /’03/’, a.factration)) AS MAR, SUM(decode(TO_CHAR(a.telfeedate, /’mm/’), /’04/’, a.factration)) AS APR, SUM(decode(TO_CHAR(a.telfeedate, /’mm/’), /’05/’, a.factration)) AS MAY, SUM(decode(TO_CHAR(a.telfeedate, /’mm/’), /’06/’, a.factration)) AS JUE,SUM(decode(TO_CHAR(a.telfeedate, /’mm/’), /’07/’, a.factration)) AS JUL, SUM(decode(TO_CHAR(a.telfeedate, /’mm/’), /’08/’, a.factration)) AS AGU, SUM(decode(TO_CHAR(a.telfeedate, /’mm/’), /’09/’, a.factration)) AS SEP, SUM(decode(TO_CHAR(a.telfeedate, /’mm/’), /’10/’, a.factration)) AS OCT, SUM(decode(TO_CHAR(a.telfeedate, /’mm/’), /’11/’, a.factration)) AS NOV,SUM(decode(TO_CHAR(a.telfeedate, /’mm/’), /’12/’, a.factration)) AS DEC FROM (SELECT a.userper, a.tel, a.standfee, b.telfeedate, b.factration FROM TELFEESTAND a, TELFEE b WHERE a.tel = b.telfax) a GROUP BY a.userper, a.tel, a.standfee, TO_CHAR(a.telfeedate, /’yyyy/’)
Sql 多条件查询的一种简单的方法
以后我们做多条件查询,一种是排列结合,另一种是动态拼接SQL 如:我们要有两个条件,一个日期@addDate,一个是@name 第一种写法是 if (@addDate is not null) and (@name <> ’’) select * from table where addDate = @addDate and name = @name else if (@addDate is not null) and (@name =’’) select * from table where addDate = @addDate else if(@addDate is null) and (@name <> ’’) select * from table where and name = @name else if(@addDate is null) and (@name = ’’) select * from table 第二种就是动态组成SQL,通过exec来执行,我就不写, 昨天我想到一种办法 select * from table where (addDate =
新闻热点
疑难解答