sql简单查询语句

2024-09-15 版权声明 我要投稿

sql简单查询语句(精选11篇)

sql简单查询语句 篇1

第一次:查询(显示)、条件、排序、空记录

第二次:通配符、生成表、文件(记事本)、数组、临时表,数学函数、分组、嵌套查询

第三次:插入记录、删除记录、更新记录 第四次:超连接、新建(打开)数据库、表的建立、表的删除、第五次 表结构的修改,添加记录 显示同张芳同一天出生的学生的信息 格式:

1、查询(显示)记录

显示所有男学生的学号,姓名,性别 区分:字段、条件、表名

Select 字段名列表(*)from 表名; where 条件表达式;

into table(dbf)文件名;

into cursor 临时表名;

into array 数组名;

to file 文件名;

order by 字段名列表(asc desc);

group by 字段名 having 条件;

显示所有大于平均分的学生的学号、姓名 显示同E4挣同样工资的职工信息

Select * from 职工 where 工资=(select 工资 from 职工 where 职工号=”E4”)职工(仓库号C(10),职工号 C(10),工资 N(10,2))

显示所有工资大于1500的员工的仓库号、职工号及所在的城市

2、插入记录

Insert into 表名(字段名列表)values(记录值)

3、删除记录

Delete from 表名 where 条件

4、更新记录

Update 表名 set 字段名=记录值; Where 条件

5、表的删除

drop table 表名

6、表的建立

create table 表名(字段名 数据类型(宽度))

7、表结构的修改select * from 职工where 职工号!=“E4” AND 工资=(select 工资 from 职工 where 职工号=“E4”)

alter table 表名

1)增加字段

alter table student add 身份证号 c(10)

2)删除字段

alter table student drop colum 身份证号

3)修改字段名

alter table student rename colum 出生日期 to 出生年月

4)增加字段有效性规则

alter table student alter 成绩 set check 成绩>=0 and 成绩<=100;

error “成绩输入错误,成绩应该在0-100之间”

5)删除字段有效性规则

alter table student alter 成绩 drop check 注意:

以上题目中用到的 SQL语句粘贴到计事本文件XY.TXT中(每行一条语句)。对两个表操作的方法:

1)同时打开两个表

select 仓库.仓库号,城市,职工号,工资 from 仓库,职工;

where 职工.仓库号=仓库.仓库号 and 工资=1250

2)超连接(内连接、左连接、右连接、全连

接)

内连接:只显示符合条件的记录

左连接:显示符合条件的记录及第一个表中不符合条件的记录

右连接:显示符合条件的记录及第二个表中不符合条件的记录

全连接:显示符合条件的记录及第一、二个表中不符合条件的记录

成绩表(score)

学号姓名课程名成绩 2001张三计算机10 2003张四英语20 2001张三语言30 2005张三数据40 2003张四计算机50

Select sum(成绩)from score group by 学号

Select sum(成绩)from score group by 课程名

select 字段名列表(*)from 表名;where 条件;

order by 字段名列表 asc|desc;

into table(dbf)表名;

into array 数组名;

to file 文件名;

into cursor 临时表名

题目练习

实现以下功能:在考生文件夹下,打开“陶的数据库”的数据库,并利用SQL语句在该数据库中新建一个表:gongzi(职工号 c(4),实发工资 n(7,0)),将zhigong表中基本工资大于1330(含1330)的记录存储在gongzi表中,其中实发工资为:基本工资+加班费(白天20,晚上30),最后将所有的SQL语句保存到考生目录下的sqlanswer.txt文件中(自行建立,一行一条语句)

open database 陶的数据库

create table gongzi(职工号 c(4),基本工资 n(7,2))

select 职工号,基本工资+白班*20+晚班*30 from zhigong;where 基本工资>1350 into array xy

sql简单查询语句 篇2

关键词:SQL,优化策略,数据库性能,谓词

0 引言

查询是数据库中最基本、最常用、最复杂的操作。在数据库的管理信息系统中,查询操作是所有数据库操作中所占据比重最大的操作。当数据库系统积累到一定程度,若查询时采用单条顺序扫描,那么扫描一遍所有的记录可能就得花上几十分钟,甚至几小时,这样的系统就失去了现实的使用价值。采取什么样的查询策略,使查询时间降为几分钟或者几秒钟,就是这里需要研究的查询优化问题。

1 优化原理[1]

查询优化力图找出给定表达式等价,但执行效率更高的一个表达式,一个查询往往会有许多实现方法,关键是如何找出一个与之等价的且操作时间又少的表达式,查询优化关注的问题是怎样省时、省空间以及效率高。优化的核心问题是尽可能减少查询中各表的参与加工的数据量,从而达到优化时间和空间的目的。

2 SQL优化的方法

2.1 模糊匹配的避免

LIKE关键字支持通配符匹配,技术上称为正则表达式。但这种匹配特别耗费时间,尽量避免使用模糊匹配。例:

即使在rx score字段上建立了索引,在这种情况下也还是采用顺序扫描的方式。

可改写为:

这样,在执行查询时就会利用索引来查询,显然会大大提高速度。

2.2 逻辑表达式的等价变换

由于执行引擎对各种谓词的处理方法不同,因此把逻辑表达式重写成等价的且效率较高的表达式是提高查询效率的有效方法,同时也是切实可行的[2]。通过查阅大量的文献资料以及大量的实验,分析了RDBMS执行引擎对各种谓词执行效率的不同,总结出以下几种逻辑表达式转换规则:

2.2.1 将多个OR连接的表达式转化为ANY表达式

当条件表达式中同层次上出现由连接词OR连接的表达式,并且OR所连接的表达式的左表达式相同且谓词符号也相同时,那么可以将这些表达式合并为一个右表达式用ANY来描述的表达式。例:

可改写为:

2.2.2 将ANY或ALL转化为简单的比较表达式

当谓词的右表达式为ANY或ALL的形式,并且ANY(ALL)包含的各表达式均有固定值,并且可以比较大小,则可根据谓词符号(仅限于比较大小的操作符)将ANY(ALL)重写为简单的比较表达式。例:

x>ANY(100,200,300) 可改写为:x>100;

x>ALL(100,200,300) 可改写为:x>300

2.2.3 将BETWEEN…AND转化为AND连接的表达式

可以把由BETWEEN expr1 AND expr2的形式重写为用AND连接的两个表达式,效率往往有一定的提高。例:

可改写为:

2.2.4 将IN谓词表达式转换为OR连接的谓词表达式

例:年龄IN(20,30,40)

可写为:年龄=20 OR年龄=30 OR年龄=40

以上提到的4类谓词重写规则均有其特定的条件,在条件满足的情况下才可以使用。对于简单谓词的重写,每条规则提高的效率可能不太明显,但如果查询语句的WHERE条件同时使用多条规则进行重写时,效率的提高将非常可观。

2.3 子查询合并

子查询合并是将某些特定的子查询重写为等价的多个表的连接操作。子查询合并的作用在于能使查询语句的层次尽可能地减少,从而可提高查询的效率。子查询合并的一般规则为:

(1)如果外层查询的结果没有重复,即SELECT子句中包含主码,则可以合并其子查询,并且合并后的SELECT子句前应加上DISTINCT标志;

(2)如果外层查询的SELECT子句中有DISTINCT标志,那么可以直接进行子查询合并;

(3)如果内部子查询结果没有重复元组,则可以合并。

例:查询选修002号课程的学生基本信息。

用子查询的方法如下所示,例:

可改写为:

2.4 用集合运算来代替逻辑运算

0R在嵌套查询中,表的顺序存取对查询效率可能产生致命的影响,避免这种情况的方法就是对连接的列进行索引。例如两个表:student(sno,sname,age)和sc(sno,cno,score)。如果两个表要做连接,就要在“sno”这个连接字段上建立索引。还可以使用并集来避免顺序存取,尽管在所有检查列上都有索引,但某些形式的WHERE子句强迫优化器使用顺序存取。下面的查询将强迫对student表执行顺序操作:

OR xb=′计算机系′

虽然在sno和系别名上都建有索引,但是在上面的语句中优化器还是使用顺序存取的方法扫描整个表因为这个语句要检索的是分离的行的集合,所以应该改为如下语句:

UNION SELECT*FROM student WHERE xb=′计算机系′

2.5 多表连接优化

最能体现查询复杂性的就是多表连接,多表连接操作往往要耗费大量的CPU时间和内存,因此多表连接查询性能优化往往是SQL优化的重点与难点[3]。

2.5.1 充分利用连接条件

在某种情况下,两个表之间可能不只一个的连接条件,这时在WHERE子句中将连接条件完整的写上,有可能大大提高查询速度。例:

这里,第二句将比第一句执行快得多。

2.5.2 先筛选后连接

当查询多个数据表时,要先过滤后再连接。例:

它们的执行效率相差很大。第一个查询语句首先将两个数据表按照用户ID进行连接,然后再将符合条件的记录筛选。由于两个数据表进行连接时记录有些是以后还要筛选掉的,这显然会占用更多的时间,且多个数据表连接是笛卡儿积运算,消耗的时间会随着记录个数的增加很快地增长。第二个查询语句克服了这个缺点,首先筛选出符合条件的记录,减少了进行连接的记录个数,然后再执行连接查询,大大提高了查询效率。

3 结语

查询优化要抓住关键问题,对于数据库应用程序,重点在于如何提高SQL的执行效率。在数据库的开发和维护过程中,查询的优化设计可以提高系统性能,对于数据量大的数据库系统尤为重要。以上介绍的几种优化策略使查询在时间和空间上提高了系统的性能,在一定程度上提高了查询效率。

参考文献

[1]王珊,萨师煊.数据库系统概论[M].4版.北京:高等教育出版社,2006.

[2]丁宝康,董健全.数据库实用教程[M].2版.北京:清华大学出版社,2003.

[3]范剑波,张晓云.网络数据库技术与应用[M].西安:西安电子科技大学出版社,2004.

[4]刘志成,彭勇.数据库系统原理与应用[M].北京:机械工业出版社,2007.

[5]罗运模.SQL Server数据库系统基础[M].北京:高等教育出版社,2006.

[6]宋瀚涛,李新社.数据库编程与应用[M].北京:电子工业出版社,1998.

[7]史嘉权.数据库系统概论[M].北京:清华大学出版社,2006.

[8]马李明,王守桃,徐艳蕾.SQL语句的优化在提高数据查询中的应用[J].电脑知识与技术,2008(20):200,223.

sql简单查询语句 篇3

昨天去面试时遇到一个这样的问题:

有一张成绩表,只有两个字段,姓名和成绩,怎样用一个sql语句查询出某个学生的姓名,成绩以及在表中的排名?

一时间我也想不出具体实现,我就提了两种思路:一种是通过join关联一个查询出他排名的sql语句;一种是通过group by来实现。

回答得连自己都觉得有点心虚。请问大家如何实现呢?

假设:表名字为Course,两个字段分别为name和score

实现语句:

SELECT 学生,成绩, (SELECT COUNT(*) FROM 表 WHERE a.成绩<=成绩) AS 排名 FROM 表 AS a

方法二:

declare @Course table(name varchar(100),cj int) insert into @Course select ‘a‘,99 union all select ‘b‘,66 union all select ‘c‘,88 select * from ( select (select 1+count(name) from @Course where cj>t.cj) mc,name,cj from @Course t ) tem where name=‘b‘

如果有成绩相同的记录的时候,goodspeed的语句确实有一些瑕疵,但是我根据他的语句稍微修改了一下就很完美了,

SELECT name,score, (SELECT COUNT(*)+1 FROM course WHERE a.score

经典sql语句 篇4

法一:select * into b from a where 11(仅用于SQlServer)

法二:select top 0 * into b from a

2、说明:拷贝表(拷贝数据,源表名:a 目标表名:b) (Access可用)

into b(a, b, c) select d,e,f from b;

3、说明:跨数据库之间表的拷贝(具体数据使用绝对路径) (Access可用)

into b(a, b, c) select d,e,f from b in ‘具体数据库’ where 条件

例子:..from b in “&Server.MapPath(”.“)&”data.mdb“ &” where..

4、说明:子查询(表名1:a 表名2:b)

select a,b,c from a where a IN (select d from b ) 或者: select a,b,c from a where a IN (1,2,3)

5、说明:显示文章、提交人和最后回复时间

select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b

6、说明:外连接查询(表名1:a 表名2:b)

select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c

7、说明:在线视图查询(表名1:a )

select * from (SELECT a,b,c FROM a) T where t.a > 1;

8、说明:between的用法,between限制查询数据范围时包括了边界值,not between不包括

select * from table1 where time between time1 and time2

select a,b,c, from table1 where a not between 数值1 and 数值2

9、说明:in 的使用方法

select * from table1 where a [not] in (‘值1’,’值2’,’值4’,’值6’)

10、说明:两张关联表,删除主表中已经在副表中没有的信息

from table1 where not exists ( select * from table2 where table1.field1=table2.field1 )

11、说明:四表联查问题:

select * from a left inner join b on a.a=b.b right inner join c on a.a=c.c inner join d on a.a=d.d where .....

12、说明:日程安排提前五分钟提醒

SQL: select * from 日程安排 where datediff(minute,f开始时间,getdate)>5

13、说明:一条sql 语句搞定数据库分页

select top 10 b.* from (select top 20 主键字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主键字段 = a.主键字段 order by a.排序字段

具体实现:

关于数据库分页:

declare @start int,@end int

@sql nvar600)

set @sql=’select top’+str(@end-@start+1)+’+from T where rid not in(select top’+str(@str-1)+’Rid from T where Rid>-1)’

exec sp_executesql @sql

注意:在top后不能直接跟一个变量,所以在实际应用中只有这样的进行特殊的处理。Rid为一个标识列,如果top后还有具体的字段,这样做是非常有好处的。因为这样可以避免 top的字段如果是逻辑索引的,查询的结果后实际表中的不一致(逻辑索引中的数据有可能和数据表中的不一致,而查询时如果处在索引则首先查询索引)

14、说明:前10条记录

select top 10 * form table1 where 范围

15、说明:选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.)

select a,b,c from tablename ta where a=(select max(a) from tablename tb where tb.b=ta.b)

16、说明:包括所有在 TableA中但不在 TableB和TableC中的行并消除所有重复行而派生出一个结果表

(select a from tableA ) except (select a from tableB) except (select a from tableC)

17、说明:随机取出10条数据

select top 10 * from tablename order by newid()

18、说明:随机选择记录

select newid()

19、说明:删除重复记录

1), from tablename where id not in (select max(id) from tablename group by col1,col2,...)

2),select distinct * into temp from tablename

from tablename

into tablename select * from temp

评价: 这种操作牵连大量的数据的移动,这种做法不适合大容量但数据操作

3),例如:在一个外部表中导入数据,由于某些原因第一次只导入了一部分,但很难判断具体位置,这样只有在下一次全部导入,这样也就产生好多重复的字段,怎样删除重复字段

alter table tablename

--添加一个自增列

add column_b int identity(1,1)

from tablename where column_b not in(

select max(column_b) from tablename group by column1,column2,...)

alter table tablename drop column column_b

20、说明:列出数据库里所有的表名

select name from sysobjects where type=U // U代表用户

21、说明:列出表里的所有的列名

select name from syscolumns where id=object_id(TableName)

22、说明:列示type、vender、pcs字段,以type字段排列,case可以方便地实现多重选择,类似select 中的case。

select type,sum(case vender when A then pcs else 0 end),sum(case vender when C then pcs else 0 end),sum(case vender when B then pcs else 0 end) FROM tablename group by type

显示结果:

type vender pcs

电脑 A 1

电脑 A 1

光盘 B 2

光盘 A 2

手机 B 3

手机 C 3

23、说明:初始化表table1

TRUNCATE TABLE table1

24、说明:选择从10到15的记录

用SQL进行函数查询数据库教程 篇5

用SQL进行函数查询数据库教程

。接下来我们介绍常用的函数功能及使用方法。

4.5.1 【ceil】函数

在【命令编辑区】输入“select mgr, mgr/100,ceil(mgr/100) from scott.emp;”,然后单击【执行】按钮,出现如图4.29所示的结果。

【参见光盘文件】:第4章4.5451.sql。

【ceil】函数用法:ceil(n),取大于扔谑值n的最小整数。

4.5.2 【floor】函数

在【命令编辑区】输入“select mgr, mgr/100,floor(mgr/100) from scott.emp;”,然后单击【执行】按钮,出现如图4.30所示的结果。

【参见光盘文件】:第4章4.5452.sql。

【floor】函数用法:floor(n),取小于等于数值n的最大整数。

4.5.3 【mod】函数

在【命令编辑区】输入“select mgr, mod(mgr,1000), mod(mgr,100), mod(mgr,10) from scott.emp;”,然后单击【执行】按钮,出现如图4.31所示的结果。

【参见光盘文件】:第4章4.5453.sql。

【mod】函数用法:mod(m,n),取m整除n后的余数。

4.5.4 【power】函数

在【命令编辑区】输入“select mgr, power(mgr,2),power(mgr,3) from scott.emp;”,然后单击【执行】按钮,出现如图4.32所示的结果。

【参见光盘文件】:第4章4.5454.sql。

【power】函数用法:power(m,n),取m的n次方。

4.5.5 【round】函数

在【命令编辑区】输入“select mgr, round(mgr/100,2),round(mgr/1000,2) from scott.emp;”,然后单击【执行】按钮,出现如图4.33所示的结果。

【参见光盘文件】:第4章4.5455.sql。

【round】函数用法:round(m,n),四舍五入,保留n位。

4.5.6 【sign】函数

在【命令编辑区】输入“select mgr, mgr-7800,sign(mgr-7800) from scott.emp;”,然后单击【执行】按钮,出现如图4.34所示的结果,

【参见光盘文件】:第4章4.5456.sql。

【sign】函数用法:sign(n)。n>0,取1;n=0,取0;n<0,取-1。

4.5.7 【avg】函数

在【命令编辑区】输入“select avg(mgr)平均薪水 from scott.emp;”,然后单击【执行】按钮,出现如图4.35所示的结果。

【参见光盘文件】:第4章4.5457.sql。

【avg】函数用法:avg(字段名),求平均值。要求字段为数值型。

4.5.8 【count】函数

(1)在【命令编辑区】输入“select count(*) 记录总数 from scott.emp;”,然后单击【执行】按钮,出现如图4.36所示的结果。

【参见光盘文件】:第4章4.5458-1.sql。

(2)在【命令编辑区】输入“select count(distinct job ) 工作类别总数 from scott.emp;”,然后单击【执行】按钮,出现如图4.37所示的结果。

【参见光盘文件】:第4章4.5458-2.sql。

【count】函数用法:count(字段名)或count(*),统计总数。

4.5.9 【min】函数

在【命令编辑区】输入“select min(sal) 最少薪水 from scott.emp;”,然后单击【执行】按钮,出现如图4.38所示的结果。

【参见光盘文件】:第4章4.5459.sql。

【min】函数用法:min(字段名),计算数值型字段最小数。

4.5.10 【max】函数

在【命令编辑区】输入“select max(sal) 最高薪水 from scott.emp;”,然后单击【执行】按钮,出现如图4.39所示的结果。

【参见光盘文件】:第4章4.54510.sql。

【max】函数用法:max(字段名),计算数值型字段最大数。

4.5.11 【sum】函数

在【命令编辑区】输入“select sum(sal) 薪水总和 from scott.emp;”,然后单击【执行】按钮,出现如图4.40所示的结果。

【参见光盘文件】:第4章4.54511.sql。

【sum】函数用法:sum(字段名),计算数值型字段总和。

标准SQL语句注意事项 篇6

(暂适用于sqlserver,sybase,db2的odbc的接口)

1. INSERT 语句

写法为 :INSERT INTO 表名(字段,….)VALUES(值,….)

2. DELETE 语句

写法为:DELETE FROM 表名 WHERE ….如果删除数据为0行,则某些数据库sqlca.sqlcode的返回值为-1,需要在DELTETE 以前加以SELECT语句判断是否有真正的删除行。

3. UPDATE 语句

写法为:UPDATE 表名 se t 字段 = 值 WHERE ……

不支持写法为:UPDATE 表名 se t 字段 = 值 FROM 表名WHERE ……

如果更新数据为0行,则某些数据库sqlca.sqlcode的返回值为-1,需要在UPDATE 以前加以SELECT语句判断是否有真正的更新行。

4. 存取字符串时,应该用单引号,不能用双引号

5. 存取时间的标准字符串写法为“{ts’ yyyy-mm-dd hh:mm:ss’}”

6. 外连接的写法为:{oj master_table left outer join primary_table on(连接条件)}

例如:SELECT MS_YJ01.YJXH,MS_YJ01.TJHM,MS_BRDA.MZHM FROM {oj MS_YJ01 LEFT OUTER JOIN MS_BRDA ON(MS_YJ01.ID = MS_BRDA.ID)};

但某些数据库还不支持多重连接的标准写法,示例如下:

SELECT MS_YJ01.YJXH,MS_YJ01.TJHM,MS_BRDA.MZHM ,GY_KSDM.KSMC FROM {oj MS_YJ01 LEFT OUTER JOIN MS_BRDA ON(MS_YJ01.ID = MS_BRDA.ID)LEFT OUTER JOIN GY_KSDM(MS_YJ01.SJKS = GY_KSDM.KSDM)};

7. 在游标中不能使用sql语句

8. 在一个事务中不能有 CREATE TABLE,CREATE INDEX,DROP TABLE 语句

9.在保存实数时,应该用decimal{n} 类型(明确指出小数的位数),不能用double 或 real

10.某些数据库在sql语句中对大小写敏感。

11.某些数据库在sql语句中两个字符串不能相加

12.数值列中最好有默认值,如有null 值,则会sum统计出错

SQL语句 数据完整性控制 篇7

一、实验目的1、掌握数据完整性控制的几种定义方法;

2、利用T-SQL命令和图形化界面操作常用控制数据的方法。

二、实验任务

1、使用SSMS对StudentCourseMS数据库3个表的各类约束进

行定义、查看、修改、删除等基本操作;

2、使用T-SQL命令对StudentCourseMS数据库3个表的各类约束进行定义、查看、修改、删除等基本操作;

三、实验内容

1、主键约束

(1)创建新的表

A)单一字段上添加主键约束

Create table 学生表

(学号 char(12)constraint pk_xh primarykey,姓名 char(8)not null,性别 char(2))

B)多个字段上添加主键约束

Create table 学生选课表

(constraint pk_xx primary key(学号,课程号),学号 char(12),课程号 char(8),成绩 tinyint)

(2)修改表

Alter table 课程表

Add constraint pk_kch primary key(课程号);

Go

(3)删除主键约束

Alter table 课程表

Drop constraint pk_kch;

(4)查看约束

Sp_help pk_xh2、唯一约束

(1)在创建表时创建唯一约束

Create table 学生表

(学号 char(12)constraint pk_xh primarykey, 姓名 char(8)not null unique,性别 char(2))

(2)修改表

(3)删除唯一约束

(4)查看唯一约束

3、外键约束

4、检查约束

5、默认值约束

对记录进行增删改的sql语句 篇8

--不存在的记录删掉

delete a from ECOrganizationPositionRelation a left join @ECOrganizationPositionRelation b

on a.OrganPostionID=b.OrganizationID and a.PositionID=b.PositionID

where not exists(select * from ECOrganizationPositionRelation where rganizationID=b.OrganizationID and PositionID=b.PositionID)

--存在的记录修改

update a set

rganizationID=b.OrganizationID,

PositionID=b.PositionID

from ECOrganizationPositionRelation a,@ECOrganizationPositionRelation b

where a.OrganizationID=b.OrganizationID and a.PositionID=b.PositionID

--没有的记录增加

insert into dbo.ECOrganizationPositionRelation(OrganPostionID,OrganizationID,PositionID)

select

NEWID,

OrganizationID,

PositionID

from @ECOrganizationPositionRelation b

where not exists(

select * from ECOrganizationPositionRelation

where rganizationID=b.OrganizationID and PositionID=b.PositionID

)

sql简单查询语句 篇9

Step 1:书写sql语句实例

Select * from admin where uname=’pass’ and upwd=’123456’

Step2:将常量换成变量,并在两端加”+”

Select * from admin where uname=’+txtuname.text+’ and upwd=’+txtpwd.text+’

Step3:将被+隔开的字符串两端加上””

sql简单查询语句 篇10

UNION ALL的语法如下:

[SQL 语句 1]

UNION ALL

[SQL 语句 2];

我们用和上一页同样的例子来显示出UNION ALL和UNION的不同。同样假设我们有以下两个表格,

Store_Information表格

Store_NameSalesTxn_DateLos Angeles150005-Jan-1999San Diego25007-Jan-1999Los Angeles30008-Jan-1999Boston70008-Jan-1999

Internet Sales表格

Txn_DateSales07-Jan-199925010-Jan-199953511-Jan-199932012-Jan-1999750

而我们要找出有店面营业额以及网络营业额的日子,

要达到这个目的,我们用以下的 SQL 语句:

SELECT Txn_Date FROM Store_Information

UNION ALL

SELECT Txn_Date FROM Internet_Sales;

结果:

Txn_DateJan-05-1999Jan-07-1999Jan-08-1999Jan-08-1999Jan-07-1999Jan-10-1999Jan-11-1999Jan-12-1999

Linux实测如下:

sql简单查询语句 篇11

Phpcms2008之前已经暴过很多问题了,但这个本地包含一直无人提起,小明曾经在t00ls里核心版块说过,但其实这个本地包含即使不通过旁注也是有办法利用的,那就是增加管理员或者修改管理员密码!

好了,先说本地包含,有几处,我不知道乌云上说的是哪一处,于是我就当其说的是最明显的那处吧。很明显的漏洞,不知道为啥还在phpcms中出现,先看代码:

文件在wap/index.php

include../include/common.inc.php;

include./include/global.func.php;

$lang= include./include/lang.inc.php;

if(preg_match(/(mozilla|m3gate|winwap|openwave)/i,$_SERVER[HTTP_USER_AGENT]))

{

header(location:../);//判断,调试时先注释掉,from www.oldjun.com

}

wmlHeader($PHPCMS[sitename]);//判断,调试时先注释掉,from www.oldjun.com

$action= isset($action) && !empty($action) ?$action:index;//直接把action带进来了,from www.oldjun.com

if($action)

{

include./include/.$action..inc.php;//本地包含,from www.oldjun.com

}

$html=CHARSET!=utf-8?iconv(CHARSET,utf-8,$html) :$html;

echostr_replace(

,“

”,$html);

wmlFooter();

?>

去掉几处判断条件就可以调试了,action没有进行限制与过滤,然后悲剧的全局:

if($_REQUEST)

{

if(MAGIC_QUOTES_GPC)

{

$_REQUEST = new_stripslashes($_REQUEST);

if($_COOKIE) $_COOKIE = new_stripslashes($_COOKIE);

extract($db->escape($_REQUEST), EXTR_SKIP);

}

else

{

$_POST = $db->escape($_POST);

$_GET = $db->escape($_GET);

$_COOKIE = $db->escape($_COOKIE);

@extract($_POST,EXTR_SKIP);

@extract($_GET,EXTR_SKIP);

@extract($_COOKIE,EXTR_SKIP);

}

if(!defined(IN_ADMIN)) $_REQUEST = filter_xss($_REQUEST, ALLOWED_HTMLTAGS);

if($_COOKIE) $db->escape($_COOKIE);

}

于是可以成功本地包含,剩下来的就是这个本地包含怎么利用的问题了,

包含的文件限制为*.inc.php,phpcms的开发者非常喜欢用这个命名规则,于是好多好多文件都是说明什么.inc.php,随便包含一个有利用价值的即可,随便找找:

formguide/admin/include/fields/datetime/field_add.inc.php

if($dateformat==date)

{

$sql=“ALTER TABLE `$tablename` ADD `$field` DATE NOT NULL DEFAULT 0000-00-00”;

}

elseif($dateformat==datetime)

{

$sql=“ALTER TABLE `$tablename` ADD `$field` DATETIME NOT NULL DEFAULT 0000-00-00 00:00:00”;

}

elseif($dateformat==int)

{

if($format)

上一篇:和爸爸妈妈一起过六一下一篇:怀孕休假申请书