论关系型数据库中 NULL 值对 SQL 查询语句的影响

论关系型数据库中 NULL 值对 SQL 查询语句的影响,第1张

假设有如下一张表,名为 Product (DDL 见本文结尾):

在使用 DISTINCT 时, NULL 也被视为一类数据。 NULL 存在于多行中时,也会被合并为一条 NULL 数据。

对含有 NULL 数据的列使用 DISTINCT 关键字:

执行结果为:

考虑一下在 SQL 语句中如下运算的结果:

正确答案是 全为 NULL 。实际上 所有包含 NULL 的计算,结果肯定是 NULL

当我们尝试取出不是进货单价不是 2800 日元( purchase_price <> 2800 )的记录时:

执行结果为:

执行结果中并 没有 “叉子”和“圆珠笔”。这两条记录由于进货单价不明( NULL ),因此无法判定是不是 2800 日元。

当你尝试使用 purchase_price = NULL 或 purchase_price <> NULL 作为查询条件时,均 查询不到任何记录

替代的,你可以使用 purchase_price IS NULL 和 purchase_price IS NOT NULL 来查询你想要的记录。如:

执行结果为:

下列是三值逻辑中 AND 和 OR 运算的真值表:

除 COUNT() 外,聚合函数只对 NULL 以外的对象进行汇总。

执行如下查询语句,结果已在注释中标出:

当聚合键中包含 NULL 时,也会将 NULL 作为一组特定的数据:

执行结果为:

使用含有 NULL 的列作为排序键时,NULL 会在结果的 开头或末尾 汇总显示:

执行结果为:

第一步建连接:就是一java连接就行

第二步是建立一个类 这类的与数据库字段对象用于java的面向对象 import javautilDate;

//存放数据的javabean,属性和表中的字段是一一对应的 public class User {

private int userid;

private String username;

private String password;

private Date logintime;

public User() {

}

public void setUserid(int userid) {

thisuserid = userid;

}

public void setUsername(String username) {

thisusername = username;

}

public void setPassword(String password) {

thispassword = password;

}

public void setLogintime(Date logintime) {

thislogintime = logintime;

}

public int getUserid() {

return userid;

}

public String getUsername() {

return username;

}

public String getPassword() {

return password;

}

public Date getLogintime() {

return logintime;

} }

第三步是建立一个SQL访问类: import javasql; import javautil; public class UserDAO {

//按条件查找多条记录

public List findAll(String filter) {

Connection conn = DbgetConnection();

List datas = new ArrayList();

if(filter!=null) {

filter = " where " + filter;

} else {

filter = "";

}

try {

PreparedStatement ps = connprepareStatement(

"select from usertb " + filter);

ResultSet rs = psexecuteQuery();

while(rsnext()) {

User user = new User();

usersetUserid(rsgetInt(1));

usersetUsername(rsgetString(2));

usersetPassword(rsgetString(3));

usersetLogintime(rsgetDate(4));

datasadd(user);

}

} catch (SQLException ex) {

exprintStackTrace();

} finally {

DbcloseConn(conn);

}

return datas;

} } 第四步是这在jsp上用 <%@ page contentType="text/html; charset=GBK" import="comaccpUser" import="javautilList" %> 然后用<use:Bean>来访问SQL访问类调用方法获取数据

首先要检查你的表与表之间是不是有约束(主外键约束),如果存在一般连接有左连接、右连接、内连接,下面给你举例:

----做笛卡尔积

select

sid,sname,scid,scsname,scscore

from

infom

s

,score

sc

------内连接

写法一

select

sid,sname,scid,scsname,scscore

from

infom

s

,score

sc

inner

join

score

sc

on

sid=

scid

------内连接的条件

------on

sid

<>scid

--------是全集

-

交集

------where

scscore>80

------内连接

方法二

select

sid,sname,scid,scsname,scscore

from

infom

s

,score

sc

where

sid=

scid

-------------------------------------------------------外连接

左连接

--------------左表数据完全显示,右表中相同的数据显示,不同数据null

select

Studentname,scorescore

from

Student

left

join

score

-----------------先写的为左表

on

Studentid=score

id

-----------------连接条件

-------------------------------------------------------外连接

右连接

--------------右表数据完全显示,左表中相同的数据显示,不同数据显示null

select

Studentname,scorescore

from

Student

right

join

score

on

Studentid=score

id

-----------------------------------全连接

full

join

-----------------------------------左、右表的数据完全显示,相同的数据显示一次

select

Studentname,scorescore

from

Student

full

join

score

on

Studentid=score

id

-------------------------------交叉联接

---------------------------------交叉联接得到的是两表联接所有的数据组合

------------------------------------------(A表的数据记录

B

表的数据记录)

---------------------方式一

select

Student,score

from

Student,score

------------------------方式二

select

score

,Student

from

Student

cross

join

score

-------------------------------多表联接

-----------要求查出张三

C#的考试成绩,涉及student,score,subject三个表

---------方式一:

select

studentname,subjectsname

,score

score

from

Student

inner

join

score

on

studentid=

scoreid

inner

join

subject

on

scoreid=subjectid

where

Studentname='张三'

and

subjectsname='C#'

---------方式二:等值联接

select

studentname,subjectsname

,score

score

from

Student,score

,subject

where

StudentDBid=scoreid

and

score

id=subjectid

and

Studentname='张三'

and

subjectsname='C#'

后面可以追加 Where 条件,形式如下:

SELCET FROM A LEFT JOIN B on Aid = Bid LEFT JOIN C on Bname = Cname Where Aid > 1 AND Bname is not null AND Cage > 20

结果肯定是可以精确查询到的,至于效率,那是后面需要考虑的问题了。

以上就是关于论关系型数据库中 NULL 值对 SQL 查询语句的影响全部的内容,包括:论关系型数据库中 NULL 值对 SQL 查询语句的影响、sql数据库多表怎么查询、SQL server数据库里查询时新建查询怎么进行多表查询等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9799875.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存