当前位置:首页 » 编程语言 » 程序员不会写sql
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

程序员不会写sql

发布时间: 2023-05-28 05:05:52

A. sql基本语句不会写,希望会的朋友百忙之中帮我解答一下

你可以通过下面的函数进行转换
to_timestamp('2006-01-01 12:10:10.1','yyyy-mm-dd hh24:mi:ss.ff')

insert into 表 values(字段内容);
你有9个字段,那9个字段的内容必须都指定好

B. sql语句不会写

首先确定A表和B表的主键,并且找他们的关联关系,然后找到计算库存的方法
例如:某型号库存 = 上期结余 + 本期入库 - 本期出库
这样就会发现 用这俩个表是实现不了你的需求的
如果上期并不存在结余则 库存 = 本期入库 - 本期出库
那么依照这个方法可以得到SQL为:
select sum(b.数量) - sum(a.数量 ),a.物料号,a.名称,a..型号
from a,b
where a.型号 = b.型号 and a.物料号 = b.物料号
group by a.物料号,a.名称,a..型号

C. Java程序员需要精通SQL数据库

理论上是这样,软件工程师更应该关注于程序设计而非对于某一技术的掌握,编写和优化SQL应该交由数据库专家负责,这是一种关注分离。
但实际和理论相差甚远,尤其在中国:
很少公司会聘请数据库专家进行开发的工作。
而且相对的,数据库专家并不了解具体软件开发的技术,然而也没有人要求数据库专家要了解这些技术(是不是觉得对软件工程师很不公平),如果想让数据库专家能够工作起来,软件工程师就必须从设计上把业务层与持久层的分离,目前很少工程师能够做到这一点,基本上都是把SQL内嵌到业务层里了。
所以如果公司没有提供这样理想的开发环境,还是有必要熟悉SQL的。

D. 一个Java程序员有必要精通SQL么

程序员精通SQL是最基本的要求
因为做的程序是需要跟数据进行交互的,没有数据交互的程序,应用层面太狭隘了。
国外的岗位区分的很明确,专门写代码的,专门做数据库的,即便如此,也有区分,专门处理前台的、后台,专门做框架的架构师,还有专门的测试工程师。
但是国内不同,基本上程序员要掌握除了架构以外的全部技能。可以说国内的一流程序员就是万能的,什么都会。
这个也导致了国内IT行业从业人员入门的门槛高,培训不规范。新人不知道该从何入手。
现在国内的IT行业人才缺口很大。这个问题,本身跟行业规范也有一定原因。
作为刚刚进入行业的程序员,第一考虑的是自身能力一定要跟上公司的技能需求,然后在此基础上不断学习,有方向有机会的学习新的技能。这样才能拿到高薪。

E. Java程序员在写SQL时常犯的错误!

Java程序员编程时需要混合面向对象思维和一般命令式编程的方法,能否完美的将两者结合起来完全得依靠编程人员的水准:

技能(任何人都能容易学会命令式编程)模式(有些人用“模式-模式”,举个例子,模式可以应用到任何地方,而且都可以归为某一类模式)心境(首先,要写个好的面向对象程序是比命令式程序难的多,你得花费一些功夫)

但当Java程序员写SQL语句时,一切都不一样了。SQL是说明性语言而非面向对象或是命令式编程语言。在SQL中要写个查询语句是很简单的。但在Java里类似的语句却不容易,因为程序员不仅要反复考虑编程范式,而且也要考虑算法的问题。

下面是Java程序员在写SQL时常犯的10个错误(没有特定的顺序)。

1、忘掉NULL

Java程序员写SQL时对NULL的误解可能是最大的错误。也许是因为(并非唯一理由)NULL也称作UNKNOWN。如果被称作 UNKNOWN,这还好理解些。另一个原因是,当你从数据库拿东西或是绑定变量时,JDBC将SQL NULL 和Java中的null对应了起来。这样导致了NULL = NULL(SQL)和null=null(Java)的误解。

对于NULL最大的误解是当NULL被用作行值表达式完整性约束条件时。另一个误解出现在对于NULL 在 NOT IN anti-joins的应用中。

解决方法:

好好的训练你自己。当你写SQL时要不停得想到NULL的用法:这个NULL完整性约束条件是正确的?NULL是否影响到结果?

2、在Java内存中处理数据

很少有Java开发者能将SQL理解的很好。偶尔使用的JOIN,还有古怪的UNION,好吧,但是对于窗口函数呢?还有对集合进行分组呢?许多 的Java开发者将SQL数据加载到内存中,将这些数据转换成某些相近的集合类型,然后再那些集合上面使用边界循环控制结构(至少在Java8的集合升级 以前)执行令人生厌的数学运算。

但是一些SQL数据库支持先进的(而且是SQL标准支持的)OLAP特性,这一特性表现更好而且写起来也更加方便。一个(并不怎么标准的)例子就 是Oracle超棒的MODEL分句。只让数据库来做处理然后只把结果带到Java内存中吧。因为毕竟所有非常聪明的家伙已经对这些昂贵的产品进行了优 化。因此实际上,通过将OLAP移到数据库,你将获得一下两项好处:

便利性。这比在Java中编写正确的SQL可能更加的容易。性能表现。数据库应该比你的算法处理起来更加快.而且更加重要的是,你不必再去传递数百万条记录了。

解决方法:

每次你使用Java实现一个以数据为中心的算法时,问问自己:有没有一种方法可以让数据库代替为我做这种麻烦事。

3、使用UNION代替UNION ALL

和UNION相比UNION ALL还需要额外的关键字。如果SQL标准已经规定了支持,那么可能会更好点。

UNION(允许重复)UNION DISTINCT (去除了重复)

移除重复行不仅很少需要(有时甚至是错的),而且对于带很多行的大数据集合会相当慢,因为两个子select需要排序,而且每个元组也需要和它的子序列元组比较。

注意即使SQL标准规定了INTERSECT ALL和EXCEPT ALL,很少数据库会实现这些没用的集合操作符。

解决方法:

每次写UNION语句时,考虑实际上是否需要UNION ALL语句。

4、通过JDBC分页技术给大量的结果进行分页操作

大部分的数据库都会支持一些分页命令实现分页效果,譬如LIMIT..OFFSET,TOP..START AT,OFFSET..FETCH语句等。即使没有支持这些语句的数据库,仍有可能对ROWNUM(Oracle)或者是ROW NUMBER()、OVER()过滤(DB2、SQL Server2008等),这些比在内存中实现分页更快速。在处理大量数据中,效果尤其明显。

解决方法:

仅仅使用这些语句,那么一个工具(例如JOOQ)就可以模拟这些语句的操作。

5、在Java内存中加入数据

从SQL的初期开始,当在SQL中使用JOIN语句时,一些开发者仍旧有不安的感觉。这是源自对加入JOIN后会变慢的固有恐惧。假如基于成本的 优化选择去实现嵌套循环,在创建一张连接表源前,可能加载所有的表在数据库内存中,这可能是真的。但是这事发生的概率太低了。通过合适的预测,约束和索 引,合并连接和哈希连接的操作都是相当的快。这完全是是关于正确元数据(在这里我不能够引用Tom Kyte的太多)。而且,可能仍然有不少的Java开发人员加载两张表通过分开查询到一个映射中,并且在某种程度上把他们加到了内存当中。

解决方法:

假如你在各个步骤中有从各种表的查询操作,好好想想是否可以表达你的查询操作在单条语句中。

6、在一个临时的笛卡尔积集合中使用 DISTINCT 或 UNION 消除重复项

通过复杂的连接,人们可能会对SQL语句中扮演关键角色的所有关系失去概念。特别的,如果这涉及到多列外键关系的话,很有可能会忘记在JOIN .. ON子句中增加相关的判断。这会导致重复的记录,但或许只是在特殊的情况下。有些开发者因此可能选择DISTINCT来消除这些重复记录。从三个方面来说 这是错误的:

它(也许)解决了表面症状但并没有解决问题。它也有可能无法解决极端情况下的症状。对具有很多列的庞大的结果集合来说它很慢。DISTINCT要执行ORDER BY操作来消除重复。对庞大的笛卡尔积集合来说它很慢,还是需要加载很多的数据到内存中。

解决方法:

根据经验,如果你获得了不需要的重复记录,还是检查你的JOIN判断吧。可能在某个地方有一个很难觉察的笛卡尔积集合。

7、不使用MERGE语句

这并不是一个过失,但是可能是缺少知识或者对于强悍的MERGE语句信心不足。一些数据库理解其它形式的更新插入(UPSERT)语句, 如 MYSQL的重复主键更新语句,但是MERGE在数据库中确是很强大,很重要,以至于大肆扩展SQL标准,例如SQL SERVER。

解决方法:

如果你使用像联合INSERT和UPDATE或者联合SELECT .. FOR UPDATE然后在INSERT或UPDATE等更新插入时,请三思。你完全可以使用一个更简单的MERGE语句来远离冒险竞争条件。

8、使用聚合函数代替窗口函数(window functions)

在介绍窗口函数之前,在SQL中聚合数据意味着使用GROUP BY语句与聚合函数相映射。在很多情形下都工作得很好,如聚合数据需要浓缩常规数据,那么就在join子查询中使用group查询。

但是在SQL2003中定义了窗口函数,这个在很多主流数据库都实现了它。窗口函数能够在结果集上聚合数据,但是却没有分组。事实上,每个窗口函数都有自己的、独立的PARTITION BY语句,这个工具对于显示报告太好了。

使用窗口函数:

使SQL更易读(但在子查询中没有GROUP BY语句专业)提升性能,像关系数据库管理系统能够更容易优化窗口函数

解决方法:

当你在子查询中使用GROUP BY语句时,请再三考虑是否可以使用窗口函数完成。

9、使用内存间接排序

SQL的ORDER BY语句支持很多类型的表达式,包括CASE语句,对于间接排序十分有用。你可能重来不会在Java内存中排序数据,因为你会想:

SQL排序很慢SQL排序办不到

解决方法:

如果你在内存中排序任何SQL数据,请再三考虑,是否不能在数据库中排序。这对于数据库分页数据十分有用。

10、一条一条地插入大量记录

JDBC“懂”批处理(batch),你应该不会忘了它。不要使用INSERT语句来一条一条的出入成千上万的记录,(因为)每次都会创建一个新 的PreparedStatement对象。如果你的所有记录都插入到同一个表时,那么就创建一个带有一条SQL语句以及附带很多值集合的插入批处理语 句。你可能需要在达到一定量的插入记录后才提交来保证UNDO日志瘦小,这依赖于你的数据库和数据库设置。

解决方法:

总是使用批处理插入大量数据。

来自:OSChina

译者:oschina.net/translate/10-common-mistakes-java-developers-make-when-writing-sql

F. 为什么很多程序员不愿意写sql

因为.net和sql
server都是微软的产品,自家兄弟兼容性肯定较好。

G. 业务人员不会写sql,稍微复杂一些的报表就做不出来怎么办

很正常,业务人员对业务很熟悉,但是编程技术是硬伤。他们也会觉得我本来就是做业务的,干嘛要费劲学这些语法软件的。一般的数据分析软件需要拖拽字段,这些字段存储的名称并不明确,这也是主要的分析困难。建议试试帆软的商业智能产品finebi。它在数据字段选取转义这一块做得很好,甚至支持直接从excel里面取数。

H. 手上有一部分java代码,但是不会用sql语句连数据库,谁有意愿帮忙弄一下

java7以后自带apache derby数据库,这个数据库跟其他数据库一样,操作都相同。
先用数据库配置文件写下配置信息。database.properties文件配置数据库内容。
jdbc.drivers=org.apache.derby.jdbc.Clientdriver
jdbc.url=jdbc:derby://localhost:1527/“数据库名称”;create=true
jdbc.username=“数据库名称”
jdbc.password=“数据库密码”这是数据库配置信息文件内容。下面是链接数据库代码。
properties props=new properties();//获得配置文件操作类。
try(Inputstream in=Files.newInputstream(Paths.get()“database.properties”)){
props.load(in)}//获取文件输入流,加载文件信息到props中。
String drivers=props.geproperty(“jdbc.drivers”);
//获取配置文件jdbc.drivers的值。
if(drivers!=null){
System.setproperty(“jdbc.drivers”,drivers);}
然后依并陵次调用props.getproperty(“配置文件中的Key”)获搏高得url,username,password,最后调用
Connection conn=DriversManager.getConnection(url,username,password);链接数据库。
Statment stat=con.createStatment();//获得数据库操作句柄。
stat.executeupdate(“执行除查询数据库sql语句外的所有语句”)
stat.exeutequery(“执行数据库sql的查询语句”)
ResultSet result=上面那条查询语句。
然后用while(result.next()){
获取查询的所有信息
result.getcolumnCount()获取查询的条数基蔽尺
用for循环遍历,条数从1开始,区别于数组的0,
result.getString(for循环的每个值当然String类型由这个获得,其他类型同理);
}

I. 写sql完全没思路,求sql大佬

首先,业务逻辑有点不清晰,现在假设第一道工序是开浇,开浇有开浇时间和结束时间,结束后在进行停浇工序,停浇有开浇时间和停浇时间。
目前来看,从你给出的数据,开浇和停浇,没有必然的联系,但是从数据分析,从开浇开始到开浇结束,至少用一个整天,而停浇开始时间一定是在开浇结束当天进行的,并且同一个中包号,每次停浇结束后,当天是不会在开浇的。
有了这些条件,应该可以查询了。定义以上的查询结果是表table
select * from table a,table b
where substr(a.停浇时间,1,10)=substr(b.开浇时间,1,10) and a.中包号=b.中包号