Ⅰ sql语句的写法
这是sql server 2000的方法,如果是2005以上可以用row_number(),oracle可以用rank,比这个就方便多了。
说明一下:class1就是一级分类的ID,class2就是二级分类ID,id就是产品表的产品id,这个也可以换成产品名称。
select a.class1, b.*
from class a, (
select *, px=(select count(*)
from proct a
where a.class2=b.class2 and a.id < b.id)+1
from
proct b) b
where a.class2 = b.class2
and px <=3 and a.class1 = 输入的一级分类ID
Ⅱ 求助一条sql语句的写法
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('delete from zy_inbase_temp ');
ADOQuery1.SQL.Add(' insert into zy_inbase_temp values( select * from zy_inbase where indate between '''+sdate+''' and '''+edate+''' '));
ADOQuery1.ExecSQL;
你去试一下行不?如果不行,在两个ADOQuery1.SQL.Add(....)之间加上这么一句:
ADOQuery1.SQL.Clear;
Ⅲ java里面.xml中的sql语句是否也要用驼峰命名
XML的sql命名的话 就随意了。通常都是 文件名 模块名 功能名
比如 userloginxml_userinfo_selectpassword
Ⅳ 一个sql语句的写法
SQL语句这样写:
Select
表1.姓名,表2.成绩
As
成绩
Form
表1
Left
Join
表2
On
表1.成绩=表2.id
有人觉得这样写过于复杂化,但这是最标准的,当你知道是什么意思后,其它复杂关系的数据库的联合查询你就会了。
表2.成绩
As
成绩:这样用是因为两个表中都有成绩,如果不这样用可能查询结果字段可能会是“表2_成绩”之类的名字,要看你的是什么数据库。
表1
Left
Join
表2:Left
Join是左链接,表示表2的内容以表1为标准链接进入查询结果,当表2中有表1没有对应关系的数据时会丢弃,如果不用这种方式,则在当表1只有张三李四时查询结果会有三条记录,第三条没有姓名,成绩是差。
On
表1.成绩=表2.id:这是链接的条件。
Ⅳ sql语句的写法,希望有人指点下
既然取每个月的交易量,肯定是按照月份来分组了,取的月份就有很多方法了
1.如果时间字段是字符串类型,就截取前六位,就算是数值型的,在截取时也会自动转换为字符串
group by substr(col_name,1,6)
2.如果是数值型的,还可以直接除以100取整
group by trunc(col_name/100)
还可以将时间字段转换为date类型,使用to_date(),to_char()函数,具体如何使用可以网络一下了。oracle的函数。
Ⅵ 怎么让数据库的字段以驼峰命名的方式返回出来
怎么让数据库的字段以驼峰命名的方式返回出来
package test;
import java.util.ArrayList;
import java.util.List;
public class Test {
public static void main(String[] args) {
//testing for data base column-key to java field
String[] dbKeys = {"id", "user_age", "user_addr_"};
Test t = new Test();
t.convertToJava(dbKeys);
System.out.println("-----------------------------------");
//testing for Java field to data base column-key
String javaFieldNames[] = {"id","userAge","userHomeAddr"};
t.getDBKey(javaFieldNames);
}
Ⅶ 求sql语句的写法
SQL> select name,to_char(time,'yyyy-mm-dd') time,
2 max(decode(rid,1,to_char(time,'hh24:mi'),0)) as time1,
3 max(decode(rid,2,to_char(time,'hh24:mi'),0)) as time2,
4 max(decode(rid,3,to_char(time,'hh24:mi'),0)) as time3
5 from (
6 select row_number() over (partition by name,to_char(time,'yyyy-mm-dd') order by to_char(time,'yyyymmdd hh24:mi:ss') ) rid
7 ,a.*
8 from tmp_a a
9 ) a
10 group by name,to_char(time,'yyyy-mm-dd')
11 /
NAME TIME TIME1 TIME2 TIME3
-------------------- ---------- ----- ----- -----
A 2009-03-01 01:00 02:00 0
B 2009-03-02 00:00 0 0
C 2009-03-03 00:00 0 0
Ⅷ 如何书写高效的SQL语句
优化SQL查询:如何写出高性能SQL语句
1、首先要搞明白什么叫执行计划?
执行计划是数据库根据SQL语句和相关表的统计信息作出的一个查询方案,这个方案是由查询优化器自动分析产生欀如一条SQL语句如果用来从一个10万条记录的表中查1条记录,那查询优化器会选择“索引查找”方式,如果该表进行了归档,当前只剩下5000条记录了,那查询优化器就会改变方案,采用 “全表扫描”方式。
可见,执行计划并不是固定的,它是“个性化的”。产生一个正确的“执行计划”有两点很重要:
(1) SQL语句是否清晰地告诉查询优化器它想干什么?
(2) 查询优化器得到的数据库统计信息是否是最新的、正确的?
2、统一SQL语句的写法
对于以下两句SQL语句,程序员认为是相同的,数据库查询优化器认为是不同的。
select * from al
select * From al
其实就是大小写不同,查询分析器就认为是两句不同的SQL语句,必须进行两次解析。生成2个执行计划。
所以作为程序员,应该保证相同的查询语句在任何地方都一致,多一个空格都不行!
3、不要把SQL语句写得太复杂
我经常看到,从数据库中捕捉到的一条SQL语句打印出来有2张A4纸这么长。一般来说这么复杂的语句通常都是有问题的。我拿着这2页长的SQL语句去请教原作者,结果他说时间太长,他一时也看不懂了。可想而知,连原作者都有可能看糊涂的SQL语句,数据库也一样会看糊涂。
一般,将一个Select语句的结果作为子集,然后从该子集中再进行查询,这种一层嵌套语句还是比较常见的,但是根据经验,超过3层嵌套,查询优化器就很容易给出错误的执行计划。因为它被绕晕了。像这种类似人工智能的东西,终究比人的分辨力要差些,如果人都看晕了,我可以保证数据库也会晕的。
另外,执行计划是可以被重用的,越简单的SQL语句被重用的可能性越高。而复杂的SQL语句只要有一个字符发生变化就必须重新解析,然后再把这一大堆垃圾塞在内存里。可想而知,数据库的效率会何等低下。
4、使用“临时表”暂存中间结果
简化SQL语句的重要方法就是采用临时表暂存中间结果,但是,临时表的好处远远不止这些,将临时结果暂存在临时表,后面的查询就在tempdb中了,这可以避免程序中多次扫描主表,也大大减少了程序执行中“共享锁”阻塞“更新锁”,减少了阻塞,提高了并发性能。
5、 OLTP系统SQL语句必须采用绑定变量
select * from orderheader where changetime > ’2010-10-20 00:00:01′
select * from orderheader where changetime > ’2010-09-22 00:00:01′
以上两句语句,查询优化器认为是不同的SQL语句,需要解析两次。
如果采用绑定变量
select * from orderheader where changetime > @chgtime
@chgtime变量可以传入任何值,这样大量的类似查询可以重用该执行计划了,这可以大大降低数据库解析SQL语句的负担。一次解析,多次重用,是提高数据库效率的原则。
6、绑定变量窥测
Ⅸ sql 语句写法
select u.unit,s..部门名,s.领用人,s.仪器名称,s.型号,s.单价,s.存放地
from users u
inner join s on s.部门号= u.unit
where u.user_id='01'
Ⅹ sql中外键怎么写
1、创建测试表;
create table test_class(class_id varchar2(10), class_name varchar2(30));
create table test_student(student_id varchar2(10), student_name varchar2(30), class_id varchar2(10));