sql:

sql小知识:

1、深入理解SQL中where 1=1的用处:

1、where的条件永远为真

​ select from table1 where 1=1 与select from table1 完全没有区别,甚至还有其他许多写法, 1<>2‘a’=’a’,‘a’<>’b’
其目的就只有一个,where 的条件为永真,得到的结果就是未加约束条件的

在SQL注入时会用到这个,例如
select * from table1 where name=’lala’
给强行加上
select * from table1 where name=’lala’ or 1=1
这就又变成了无约束的查询了。

2、在后台写不定数量的查询就使用到,便于规范语句
在后台写不定数量的查询的字段的时候:

在不使用where 1=1的情况下
if(params.containsKey(“name”)){
String key = params.get(“name”).toString();
sql+=”where a.name=’”+key +”‘“;
}
if(params.containsKey(“age”)){
String key = params.get(“age”).toString();
sql+=”where a.age=’”+key +”‘“;
}
if(params.containsKey(“class “)){
String key = params.get(“class “).toString();
sql+=”where a.class =’”+ke

当时用where 1=1 的时候
String sql = “select * from table a where 1=1”;

if(params.containsKey(“name”)){
String key = params.get(“name”).toString();
sql+=” and a.name=’”+key +”‘“;
}
if(params.containsKey(“age”)){
String key = params.get(“age”).toString();
sql+=” and a.age=’”+key +”‘“;
}
if(params.containsKey(“class “)){
String key = params.get(“class “).toString();
sql+=” and a.class =’”+key +”‘“;
}

2、第二种解决方式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
``` java
List<Object> param = new ArrayList<>();

StringBuffer sql = new StringBuffer("select * from tb_user");
boolean addWhere = false;
if(sex!= null ){
if(addWhere == false){
sql.append(" where ");
addWhere = true;
}else{
sql.append( " AND ");
}
sql.append(" sex = ? ");
if(name != null){
if(addWhere == false){
sql.append(" where ");
addWhere = true;
}else{
sql.append(" AND ");
}
sql.append(" name like ? ");
params.add(name + "%");
}
if(address != null){
if(addwhere == false){
sql.append(" where ");
addWhere = true ;
}
sql.append(" Where ");
params.add(address);
}

}
```

sql去除重复的数据:

(29条消息) 【mysql】mysql删除重复记录并且只保留一条_千千-CSDN博客

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
DELETE
FROM
artcle
WHERE
title IN (
SELECT
t.title
FROM
(
SELECT
title
FROM
artcle
GROUP BY
title
HAVING
count(1) > 1
) t
)
AND id NOT IN (
SELECT
dt.idNo
FROM
(
SELECT
min(id) AS idNo
FROM
artcle
GROUP BY
title
HAVING
count(1) > 1
) dt
)

现确定重复的值,以及确定数据的组件,留下最小的值 。

sql in()中字段串分割:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
    /**
*字符串拼接
* @param strArr
* @return
*/
public static String getInCond(List<String> strArr) {
// String[] strArr = str.split(",");
// String []strArr = null;
// list.toArray(strArr);
StringBuffer sb = new StringBuffer();
for(int i = 0;i < strArr.size(); i++){
if(i == strArr.size()-1){
sb.append("'"+strArr.get(i)+"'");//最后一个字母
}else{
sb.append("'"+strArr.get(i)+"'"+",");
}
}
return sb.toString();
}


sql sever 小知识:

多个字段查寻

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#sql ("plantDoinfoList")
select a.*
from plant_do_info as a
where a.is_del = 0

#if(keywords??)
and concat(IFNULL(a.plant_name,''),IFNULL(a.genus,''),IFNULL(a.familia,'')) like '%#(keywords)%'
#end

#if(familia_name??)
and a.connect_id in (select id from plant_do_familia_genus where familia_id = #(familia_name) )
#end
#if(genus_name??)
and a.connect_id in (select id from plant_do_familia_genus where genus_id = #(genus_name) )
#end

order by a.id desc
#end

1、null isnull

SQL Serve中的isnull()函数:

​ isnull(value1,value2)

1、value1与value2的数据类型必须一致。

​ 2、如果value1的值不为null,结果返回value1。

​ 3、如果value1为null,结果返回vaule2的值。vaule2是你设定的值。

1
例如:select isnull(fs,6) from xuesheng where name='张三'  在表xuesheng中,fs分数如果为空,结果输出8。如果不为空,输出fs

的值。

  同时要注意,在sql server中字段为空的写法,select name,fs from xuesheng where name is null\is not null 而不是name=null、name=' '

*Mysql的ifnull()函数:*

​ ifnull(value1,value2)

1、如果value1不为空,结果返回value1。

2、如果value1为空,结果返回value2。同上

sqlserver 备份还原:

备份:

[怎么备份SQL Server 2008数据库-百度经验 (baidu.com)](https://jingyan.baidu.com/article/cdddd41c62cc3d53ca00e15a.html#:~:text=在使用服务器的时候,我们需要定时的备份数据库来防止数据的丢失,下面为大家介绍怎么备份SQL Server 2008 数据库。 在开始菜单中点击”SQL,Server Management Studio”在弹出的界面点击连接,在数据库选项中选择需要备份的数据库文件,然后右击选择”任务”中的”备份” 在出现的界面中点击文件夹后面的”…”选择按钮。 在出来的界面中就可以看到备份文件的名称以及路径了。)

还原:

(4条消息) sqlserver 2008导入备份数据库_jzhou_0808的博客-CSDN博客_sqlserver导入备份数据库

【问题&解决】还原数据库提示“介质集有2个介质簇,但只提供了1个。必须提供所有成员”的解决办法 - 叶超Luka - 博客园 (cnblogs.com)