sql語句方法

2021-10-11 07:24:15 字數 4640 閱讀 7293

delete ----逐行清楚,不適合大量資料

delete from tablename where 1

=1

truncate ----刪除所有資料,保留表結構,不能撤銷還原

truncate table tablename
drop ----刪除表,資料和表結構一起刪除,最快速

## 重新建立

drop table if exists `docker2`;

create table `docker2` (

`name` varchar

(255

) not null

, `path` varchar

(500

) default null

, `docker1_name` varchar

(255

) not null

, `tag1` varchar

(255

) default null

, `tag2` varchar

(255

) default null

, `tag3` varchar

(255

) default null

, `tag4` varchar

(255

) default null

, `tag5` varchar

(255

) default null

, `tag6` varchar

(255

) default null

, `tag7` varchar

(255

) default null

, `tag8` varchar

(255

) default null

, `tag9` varchar

(255

) default null

, primary key (`docker1_name`,`name`)

) engine=innodb default charset=utf8;

max

(case when .

.. then ...

else..

. end)

需要與 *

*group by*

*一起使用。

case when :實現行列轉換時會出現多條記錄,若不聚合直接進行group by分組,則會檢索第一條資料,若使用聚合max

()函式再盡心group by 分組,就會檢索最大值然後進行分組

eg:多表關聯實現行列轉換

"listunitrecentreportsql"

>

select

nu.uuid,

nu.code,

nu.name,

nu.unit_nature,

dict.dict_label as unit_nature_name,

nu.sys_code,

aa.liaisons,

aa.telephone,

aa.mobilephone,

nuf.year,

nuf.m1,

nuf.m2,

nuf.m3,

nuf.m4,

nuf.m5,

nuf.m6,

nuf.m7,

nuf.m8,

nuf.m9,

nuf.m10,

nuf.m11,

nuf.m12

from

left join

view_net_unit_contact_person aa

onnu.uuid = aa.uuid

left join

(select net_unit_uuid,

year,

max(case when month =

1 then create_date end) as m1,

max(case when month =

2 then create_date end) as m2,

max(case when month =

3 then create_date end) as m3,

max(case when month =

4 then create_date end) as m4,

max(case when month =

5 then create_date end) as m5,

max(case when month =

6 then create_date end) as m6,

max(case when month =

7 then create_date end) as m7,

max(case when month =

8 then create_date end) as m8,

max(case when month =

9 then create_date end) as m9,

max(case when month =

10 then create_date end) as m10,

max(case when month =

11 then create_date end) as m11,

max(case when month =

12 then create_date end) as m12

from

( select

net_unit_uuid,

year

(create_date) as year,

month

(create_date) as month,

max(create_date) create_date

from

where 1=1

<

if test=

"unitrecentreport.year != null"

>

and year

(create_date)

= #>

group by net_unit_uuid,

year

(create_date)

,month

(create_date)

) as t

group by net_unit_uuid,year

) nuf

onnuf.net_unit_uuid=nu.uuid

left join

(select dict_value, dict_label from sys_dict_data where dict_type=

'unit_nature'

) dict

onnu.unit_nature = dict.dict_value

<

if test=

"useruuid != null"

>

left join

onnum.net_unit_uuid = nu.uuid

>

where 1=1

<

if test=

"unitrecentreport.name != null"

>

and nu.name like concat

('%'

, #,

'%')

>

<

if test=

"unitrecentreport.syscode != null"

>

and nu.sys_code like concat(#,

'%')

>

<

if test=

"useruuid != null"

>

and num.user_uuid = #

>

order by nuf.year, nu.sys_code

<

/sql>

做大量刪除資料

1.

//把要刪除大量資料的表中不需要刪除的資料轉存到另外一張表中

insert into 新建的表 select * from 表 where ...

2.//同時重明明兩張表,間接實現資料刪除操作

rename table t to t_old, 新建的表 to t;

3.將那個沒用的表刪除掉 drop table t_old

eg:

insert into 新建的表 select * from 表 where 部門標號 !=

20//將不刪除的表轉存

rename table 表 to t_old, 新建的表 to 表;

//重新定義表名

刪除不要的表 drop table t_old

SQL語句優化方法

1.把資料 日誌 索引放到不同的i o裝置上,增加讀取速度,以前可以將tempdb應放在raid0上,sql2000不在支援。資料量 尺寸 越大,提高i o越重要 2.縱向 橫向分割表,減少表的尺寸 3.根據查詢條件,建立索引,優化索引 優化訪問方式,限制結果集的資料量。注意填充因子要適當 最好是使...

SQL 語句中優化方法

整理一下以前的一些用sql語句的習慣。先提乙個概念掃瞄引數 sarg 用於限制搜尋的乙個操作,因為它通常是指乙個特定的匹配,乙個值得範圍內得匹配或者兩個以上條件的 and 連線。1.or 會引起全表掃瞄.如 name 張三 and 5000 符合sarg 而 name zhangsan or 500...

SQL語句常見優化方法

在查詢語句前使用explain關鍵字 變體 explain extended select show warnings 檢視優化後的語句 方式一 select from a join b using 兩張表有相同的字段 方式二 select from a join b on 同 select fro...