當前位置:首頁 » 編程語言 » sql常用語句

sql常用語句

發布時間: 2022-12-16 06:37:11

① 簡單介紹幾個常用的sql查詢語句

我們使用資料庫的時候,最常用的就是SQL語句了,那麼在SQL語句中比較常用的有哪些呢?下面我給大家分享一下。

首先是select語句,它經常被用於數據查詢,通過select我們可以快速的檢索自己想要的數據,如下圖所示

然後是update語句,update是進行數據更新的語句,更新的時候一定要指定where條件,如下圖所示

接下來是insert語句,insert被用來進行數據插入,運用它的時候一定注意插入的欄位順序,如下圖所示

最後是delete語句,delete被用來刪除表中的數據,進行刪除操作的時候也要注意指定刪除條件,如下圖所示

② 資料庫中常用的sql語句有哪些

1.檢索數據
SELECT prod_nameFROM Procts;
#檢索單列

SELECT prod_id, prod_name, prod_priceFROMProcts;
#檢索多列

SELECT * FROM Procts;
#檢索所有列

SELECT DISTINCTvend_id FROMProcts;
#檢索不同的值

SELECTprod_name FROM Procts LIMIT 5;
#返回不超過5行數據

SELECTprod_name FROM Procts LIMIT 5 OFFSET 5;
#返回從第5行起的5行數據。LIMIT指定返回的行數,LIMIT帶的OFFSET指定從哪兒開始。
2.排序檢索數據
SELECTprod_name
FROMProcts
ORDER BYprod_name;
#排序數據

SELECT prod_id, prod_price, prod_name
FROMProcts
ORDER BY prod_price, prod_name;
#按多個列排序

SELECT prod_id, prod_price, prod_name
FROMProcts
ORDER BY 2, 3;
#按列位置排序,第三行表示先按prod_price, 再按prod_name進行排序

SELECT prod_id, prod_price, prod_name
FROMProcts
ORDER BY prod_priceDESC, prod_name;
#prod_price列以降序排序,而prod_name列(在每個價格內)仍然按標準的升序排序

3.過濾數據
SELECT prod_name, prod_price
FROMProcts
WHERE prod_price< 10;
#檢查單個值

SELECT prod_name, prod_price
FROMProcts
WHERE vend_id <> 『DLL01』;
#不匹配檢查

SELECT prod_name, prod_price
FROMProcts
WHERE prod_priceBETWEEN 5 AND 10;
#范圍值檢查

SELECT cust_name
FROMCUSTOMERS
WHERE cust_emailIS NULL;
#空值檢查

4.高級數據過濾
SELECTprod_id, prod_price, prod_name
FROMProcts
WHERE vend_id = 『DLL01』ANDprod_price <= 4;
#AND操作符

SELECTprod_name, prod_price
FROMProcts
WHEREvend_id=』DLL01』 OR vend_id=』BRS01』;
#OR操作符

SELECTprod_name, prod_price
FROMProcts
WHERE (vend_id = 』DLL01』ORvend_id=』BRS01』)
ANDprod_price >= 10;
#求值順序 AND的優先順序高於OR

SELECTprod_name, prod_price
FROMProcts
WHERE vend_idIN (『DLL01』,』BRS01』)
ORDER BY prod_name;
#IN操作符

SELECT prod_name
FROMProcts
WHERE NOTvend_id = 『DLL01』
ORDER BY prod_name;
#NOT 操作符

SELECT prod_name
FROMProcts
WHEREvend_id <> 『DLL01』
ORDER BY prod_name;
#NOT 操作符

③ 15個MySQL常用基本SQL語句

在學習SQL語句之前,首先需要區分幾個概念,我們常說的資料庫是指資料庫軟體,例如MySQL、Oracle、SQL Server等,而本文提到的資料庫是指資料庫軟體中的一個個用於存儲數據的容器。

在MySQL中,資料庫稱為database,數據表稱為table,一個資料庫軟體中有多個資料庫(databases),每個資料庫中又可以有多個數據表(tables),最終,數據是存儲在數據表中。

資料庫和數據表之間的關系可以用下面這個圖來表示,對於一個資料庫來說,有多個數據表。

在正式開始寫SQL語句之前,需要說明兩點。

這里通過MySQL Workbench來寫SQL代碼,在Workbench中,執行一條SQL語句的方式有兩種。

了解了這之後,接下來介紹一些常見的命令,分兩部分:資料庫常用命令和數據表常用命令。

1、查看有哪些資料庫

2、創建資料庫

創建一個名為Testdb的資料庫。

3、創建資料庫並指定編碼格式

有些時候,為了防止中文亂碼,創建資料庫的時候需要指定編碼格式。

4、使用某個資料庫

使用mydb這個資料庫,或者進入mydb這個資料庫。

5、刪除資料庫

刪除Testdb這個資料庫。

1、查看有哪些數據表

進入某個資料庫之後,想查看有哪些數據表,SQL語句為:

mydb是一個新建的資料庫,所以自然是沒有數據表。

2、創建數據表

建表SQL語句格式為:

說明: 每個欄位以逗號分隔,最後一個欄位不加逗號。

例如,給定一個學員信息表,如下表所示。

根據以上表格,建表SQL語句如下。

以上語句中,primary key表示主鍵,意思是這個欄位作為記錄的唯一標識,就像每個人的身份證號,都是唯一確定的。

3、查看錶結構

查看錶結構的SQL命令為:

執行該命令會顯示表stuinfo的基本結構,例如有哪些欄位,每個欄位是什麼類型,誰是主鍵等。

4、修改數據表

修改數據表通過drop子句進行,比如,建完表後,想增加一個欄位,SQL語句的格式為:

想在指定位置增加一個欄位,例如,在某個欄位後增加一個欄位,SQL語句的格式為:

如果在某個欄位之前增加欄位,用before即可。

例如,在欄位age後增加一個欄位major(專業),SQL語句為:

執行這個命令,再通過describe查看錶結構,會發現表中多了一個欄位major。

如果要刪除major這個欄位,通過drop子句,SQL語句為:

5、重命名表

重命名表通過alter+rename來實現,SQL語句格式為:

這里為了不影響之前創建的表,我們創建一個新表,SQL語句如下。

以上創建一個名為stuInfoTest的表,現在想將它的名稱改成stuinfotest1,SQL語句為:

6、刪除數據表

刪除數據表通過drop進行,SQL語句格式為:

例如,刪除數據表stuinfotest1,SQL語句為:

7、插入記錄

此時的表stuinfo是空的,沒有數據,我們要向表中插入記錄。

插入記錄通過insert into進行,SQL語句格式為:

例如,向表stuinfo插入一條記錄,SQL語句為:

注意:上方是一條SQL語句,為了可讀性換行,記住一條SQL語句默認以分號結尾。

如果需要一次性插入多條記錄,SQL語句格式為:

例如,向表stuinfo再插入兩條記錄,SQL語句為:

注意:如果設置了主鍵,插入記錄的主鍵欄位是不能重復的,也就是不能插入重復的記錄。

作業:大家可以按照上述方法將上面的學員信息表中的所有記錄都插入表stuinfo中。

8、查詢記錄

有了數據之後,就可以查詢記錄了,查詢記錄通過select子句進行。

例如,想查詢表stuinfo中的所有記錄,SQL語句為:

執行之後,就可以看到表stuinfo中的所有記錄了。

如果想查詢符合某個條件的記錄,就要用到where子句了,SQL格式為:

例如,想查詢stuid為20161001的記錄,SQL語句為:

9、刪除記錄

刪除記錄通過delete子句進行,SQL語句格式為:

例如,想刪除stuid為20161002的記錄,SQL語句為:

10、修改記錄

修改記錄通過update子句進行,update就是更新的意思,SQL語句格式為:

例如,想將學號(stuid)為20161001的記錄的姓名(stuname)更新為Jack,SQL語句為:

以上,就是MySQL中的基本SQL語句。

零基礎如何學習數據分析?查看下方專欄。

④ 搜集SQL常用的操作語句

常用的也不只這些:
1、說明:創建資料庫
CREATE
DATABASE
database-name
2、說明:刪除資料庫
drop
database
dbname
3、說明:備份sql
server
---
創建
備份數據的
device
USE
master
EXEC
sp_admpdevice
'disk',
'testBack',
'c:\mssql7backup\MyNwind_1.dat'
---
開始
備份
BACKUP
DATABASE
pubs
TO
testBack
4、說明:創建新表
create
table
tabname(col1
type1
[not
null]
[primary
key],col2
type2
[not
null],..)
根據已有的表創建新表:
A:create
table
tab_new
like
tab_old
(使用舊表創建新表)
B:create
table
tab_new
as
select
col1,col2...
from
tab_old
definition
only
5、說明:刪除新表
drop
table
tabname
6、說明:增加一個列
Alter
table
tabname
add
column
col
type
註:列增加後將不能刪除。DB2中列加上後數據類型也不能改變,唯一能改變的是增加varchar類型的長度。
7、說明:添加主鍵:
Alter
table
tabname
add
primary
key(col)
說明:刪除主鍵:
Alter
table
tabname
drop
primary
key(col)
8、說明:創建索引:create
[unique]
index
idxname
on
tabname(col....)
刪除索引:drop
index
idxname
註:索引是不可更改的,想更改必須刪除重新建。
9、說明:創建視圖:create
view
viewname
as
select
statement
刪除視圖:drop
view
viewname

⑤ 經典SQL語句

經典SQL語句大全

1、創建資料庫: create database 資料庫名

如:create database student;

2、連接到一個已經存在的資料庫: use 資料庫名

如:use student;

3、刪除資料庫:drop database 資料庫名

如: drop database student;

4、創建表:create table 表名列名列的數據類型列的約束])

如:create table stuInfo(stuId int primary key,stuName var20) not null)

5、刪除表: 表名

如: stuInfo;

6、修改表:alter table

給表添加新列: alter table 表名 add 列名列的數據類型

添加多列,中間用逗號隔開

如:alter table stuInfo add stuGender var10)

修改某列的數據類型:alter table 表名 modify 列名新數據類型

如:alter table stuInfo modify stuGender int

修改列名:alter table 表名 change 老列名新列名數據類型

如:alter table stuInfo change stuName stuAddress var30)

刪除列:alter table 表名 drop 列名

如: alter table stuInfo drop stuGender

7、將創建的表的語句反向導出: show create table 表名

8、查詢表的所有內容:select * from 表名

查詢表的部分內容: select 列名列表 from 表名

9、查詢表結構:show columns from 表名

10、插入單行數據: into 表名列名列表) values(值列表)

11、插入多行數據:作用相當於將數據從一個表復制到另一個表

into 表名 (列名列表) select

如將stuInfo表中的所有的'學生姓名復制到students表中的stuName列中: into students(stuName) select stuName from stuInfo

12、刪除數據: from 表名 where過濾條件

如刪除stuID為4的人的數據: from stuInfo where stuId=4 ;

⑥ 資料庫常用sql語句有哪些

資料庫常用sql語句有哪些

SQL語句有哪些?SQL語句無論是種類還是數量都是繁多的,很多語句也是經常要用到的,下文我為大家分享的就是SQL的常用語句,僅供參考!

50個常用的sql語句

Student(S#,Sname,Sage,Ssex) 學生表

Course(C#,Cname,T#) 課程表

SC(S#,C#,score) 成績表

Teacher(T#,Tname) 教師表

問題:

1、查詢“001”課程比“002”課程成績高的所有學生的學號;

select a.S# from (select s#,score from SC where C#='001') a,(select s#,score

from SC where C#='002') b

where a.score>b.score and a.s#=b.s#;

2、查詢平均成績大於60分的同學的學號和平均成績;

select S#,avg(score)

from sc

group by S# having avg(score) >60;

3、查詢所有同學的學號、姓名、選課數、總成績;

select Student.S#,Student.Sname,count(SC.C#),sum(score)

from Student left Outer join SC on Student.S#=SC.S#

group by Student.S#,Sname

4、查詢姓“李”的老師的個數;

select count(distinct(Tname))

from Teacher

where Tname like '李%';

5、查詢沒學過“葉平”老師課的同學的學號、姓名;

select Student.S#,Student.Sname

from Student

where S# not in (select distinct( SC.S#) from SC,Course,Teacher where SC.C#=Course.C# and Teacher.T#=Course.T# and Teacher.Tname='葉平');

6、查詢學過“001”並且也學過編號“002”課程的同學的學號、姓名;

select Student.S#,Student.Sname from Student,SC where Student.S#=SC.S# and SC.C#='001'and exists( Select * from SC as SC_2 where SC_2.S#=SC.S# and SC_2.C#='002');

7、查詢學過“葉平”老師所教的所有課的同學的學號、姓名;

select S#,Sname

from Student

where S# in (select S# from SC ,Course ,Teacher where SC.C#=Course.C# and Teacher.T#=Course.T# and Teacher.Tname='葉平' group by S# having count(SC.C#)=(select count(C#) from Course,Teacher where Teacher.T#=Course.T# and Tname='葉平'));

8、查詢課程編號“002”的成績比課程編號“001”課程低的所有同學的學號、姓名;

Select S#,Sname from (select Student.S#,Student.Sname,score ,(select score from SC SC_2 where SC_2.S#=Student.S# and SC_2.C#='002') score2

from Student,SC where Student.S#=SC.S# and C#='001') S_2 where score2 <score;

9、查詢所有課程成績小於60分的同學的學號、姓名;

select S#,Sname

from Student

where S# not in (select Student.S# from Student,SC where S.S#=SC.S# and score>60);

10、查詢沒有學全所有課的同學的學號、姓名;

select Student.S#,Student.Sname

from Student,SC

where Student.S#=SC.S# group by Student.S#,Student.Sname having count(C#) <(select count(C#) from Course);

11、查詢至少有一門課與學號為“1001”的同學所學相同的同學的學號和姓名;

select S#,Sname from Student,SC where Student.S#=SC.S# and C# in select C# from SC where S#='1001';

12、查詢至少學過學號為“001”同學所有一門課的其他同學學號和姓名;

select distinct SC.S#,Sname

from Student,SC

where Student.S#=SC.S# and C# in (select C# from SC where S#='001');

13、把“SC”表中“葉平”老師教的課的成績都更改為此課程的平均成績;

update SC set score=(select avg(SC_2.score)

from SC SC_2

where SC_2.C#=SC.C# ) from Course,Teacher where Course.C#=SC.C# and Course.T#=Teacher.T# and Teacher.Tname='葉平');

14、查詢和“1002”號的同學學習的課程完全相同的其他同學學號和姓名;

select S# from SC where C# in (select C# from SC where S#='1002')

group by S# having count(*)=(select count(*) from SC where S#='1002');

15、刪除學習“葉平”老師課的SC表記錄;

Delect SC

from course ,Teacher

where Course.C#=SC.C# and Course.T#= Teacher.T# and Tname='葉平';

16、向SC表中插入一些記錄,這些記錄要求符合以下條件:沒有上過編號“003”課程的同學學號、2、

號課的平均成績;

Insert SC select S#,'002',(Select avg(score)

from SC where C#='002') from Student where S# not in (Select S# from SC where C#='002');

17、按平均成績從高到低顯示所有學生的“資料庫”、“企業管理”、“英語”三門的課程成績,按如下形式顯示: 學生ID,,資料庫,企業管理,英語,有效課程數,有效平均分

SELECT S# as 學生ID

,(SELECT score FROM SC WHERE SC.S#=t.S# AND C#='004') AS 資料庫

,(SELECT score FROM SC WHERE SC.S#=t.S# AND C#='001') AS 企業管理

,(SELECT score FROM SC WHERE SC.S#=t.S# AND C#='006') AS 英語

,COUNT(*) AS 有效課程數, AVG(t.score) AS 平均成績

FROM SC AS t

GROUP BY S#

ORDER BY avg(t.score)

18、查詢各科成績最高和最低的分:以如下形式顯示:課程ID,最高分,最低分

SELECT L.C# As 課程ID,L.score AS 最高分,R.score AS 最低分

FROM SC L ,SC AS R

WHERE L.C# = R.C# and

L.score = (SELECT MAX(IL.score)

FROM SC AS IL,Student AS IM

WHERE L.C# = IL.C# and IM.S#=IL.S#

GROUP BY IL.C#)

AND

R.Score = (SELECT MIN(IR.score)

FROM SC AS IR

WHERE R.C# = IR.C#

GROUP BY IR.C#

);

19、按各科平均成績從低到高和及格率的百分數從高到低順序

SELECT t.C# AS 課程號,max(course.Cname)AS 課程名,isnull(AVG(score),0) AS 平均成績

,100 * SUM(CASE WHEN isnull(score,0)>=60 THEN 1 ELSE 0 END)/COUNT(*) AS 及格百分數

FROM SC T,Course

where t.C#=course.C#

GROUP BY t.C#

ORDER BY 100 * SUM(CASE WHEN isnull(score,0)>=60 THEN 1 ELSE 0 END)/COUNT(*) DESC

20、查詢如下課程平均成績和及格率的百分數(用"1行"顯示): 企業管理(001),馬克思(002),OO&UML (003),資料庫(004)

SELECT SUM(CASE WHEN C# ='001' THEN score ELSE 0 END)/SUM(CASE C# WHEN '001' THEN 1 ELSE 0 END) AS 企業管理平均分

,100 * SUM(CASE WHEN C# = '001' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '001' THEN 1 ELSE 0 END) AS 企業管理及格百分數

,SUM(CASE WHEN C# = '002' THEN score ELSE 0 END)/SUM(CASE C# WHEN '002' THEN 1 ELSE 0 END) AS 馬克思平均分

,100 * SUM(CASE WHEN C# = '002' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '002' THEN 1 ELSE 0 END) AS 馬克思及格百分數

,SUM(CASE WHEN C# = '003' THEN score ELSE 0 END)/SUM(CASE C# WHEN '003' THEN 1 ELSE 0 END) AS UML平均分

,100 * SUM(CASE WHEN C# = '003' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '003' THEN 1 ELSE 0 END) AS UML及格百分數

,SUM(CASE WHEN C# = '004' THEN score ELSE 0 END)/SUM(CASE C# WHEN '004' THEN 1 ELSE 0 END) AS 資料庫平均分

,100 * SUM(CASE WHEN C# = '004' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '004' THEN 1 ELSE 0 END) AS 資料庫及格百分數

FROM SC

21、查詢不同老師所教不同課程平均分從高到低顯示

SELECT max(Z.T#) AS 教師ID,MAX(Z.Tname) AS 教師姓名,C.C# AS 課程ID,MAX(C.Cname) AS 課程名稱,AVG(Score) AS 平均成績

FROM SC AS T,Course AS C ,Teacher AS Z

where T.C#=C.C# and C.T#=Z.T#

GROUP BY C.C#

ORDER BY AVG(Score) DESC

22、查詢如下課程成績第 3 名到第 6 名的學生成績單:企業管理(001),馬克思(002),UML (003),資料庫(004)

[學生ID],[學生姓名],企業管理,馬克思,UML,資料庫,平均成績

SELECT DISTINCT top 3

SC.S# As 學生學號,

Student.Sname AS 學生姓名 ,

T1.score AS 企業管理,

T2.score AS 馬克思,

T3.score AS UML,

T4.score AS 資料庫,

ISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) + ISNULL(T4.score,0) as 總分

FROM Student,SC LEFT JOIN SC AS T1

ON SC.S# = T1.S# AND T1.C# = '001'

LEFT JOIN SC AS T2

ON SC.S# = T2.S# AND T2.C# = '002'

LEFT JOIN SC AS T3

ON SC.S# = T3.S# AND T3.C# = '003'

LEFT JOIN SC AS T4

ON SC.S# = T4.S# AND T4.C# = '004'

WHERE student.S#=SC.S# and

ISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) + ISNULL(T4.score,0)

NOT IN

(SELECT

DISTINCT

TOP 15 WITH TIES

ISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) + ISNULL(T4.score,0)

FROM sc

LEFT JOIN sc AS T1

ON sc.S# = T1.S# AND T1.C# = 'k1'

LEFT JOIN sc AS T2

ON sc.S# = T2.S# AND T2.C# = 'k2'

LEFT JOIN sc AS T3

ON sc.S# = T3.S# AND T3.C# = 'k3'

LEFT JOIN sc AS T4

ON sc.S# = T4.S# AND T4.C# = 'k4'

ORDER BY ISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) + ISNULL(T4.score,0) DESC);

23、統計列印各科成績,各分數段人數:課程ID,課程名稱,[100-85],[85-70],[70-60],[ <60]

SELECT SC.C# as 課程ID, Cname as 課程名稱

,SUM(CASE WHEN score BETWEEN 85 AND 100 THEN 1 ELSE 0 END) AS [100 - 85]

,SUM(CASE WHEN score BETWEEN 70 AND 85 THEN 1 ELSE 0 END) AS [85 - 70]

,SUM(CASE WHEN score BETWEEN 60 AND 70 THEN 1 ELSE 0 END) AS [70 - 60]

,SUM(CASE WHEN score < 60 THEN 1 ELSE 0 END) AS [60 -]

FROM SC,Course

where SC.C#=Course.C#

GROUP BY SC.C#,Cname;

24、查詢學生平均成績及其名次

SELECT 1+(SELECT COUNT( distinct 平均成績)

FROM (SELECT S#,AVG(score) AS 平均成績

FROM SC

GROUP BY S#

) AS T1

WHERE 平均成績 > T2.平均成績) as 名次,

S# as 學生學號,平均成績

FROM (SELECT S#,AVG(score) 平均成績

FROM SC

GROUP BY S#

) AS T2

ORDER BY 平均成績 desc;

25、查詢各科成績前三名的記錄:(不考慮成績並列情況)

SELECT t1.S# as 學生ID,t1.C# as 課程ID,Score as 分數

FROM SC t1

WHERE score IN (SELECT TOP 3 score

FROM SC

WHERE t1.C#= C#

ORDER BY score DESC

)

ORDER BY t1.C#;

26、查詢每門課程被選修的學生數

select c#,count(S#) from sc group by C#;

27、查詢出只選修了一門課程的全部學生的學號和姓名

select SC.S#,Student.Sname,count(C#) AS 選課數

from SC ,Student

where SC.S#=Student.S# group by SC.S# ,Student.Sname having count(C#)=1;

28、查詢男生、女生人數

Select count(Ssex) as 男生人數 from Student group by Ssex having Ssex='男';

Select count(Ssex) as 女生人數 from Student group by Ssex having Ssex='女';

29、查詢姓“張”的.學生名單

SELECT Sname FROM Student WHERE Sname like '張%';

30、查詢同名同性學生名單,並統計同名人數

select Sname,count(*) from Student group by Sname having count(*)>1;;

31、1981年出生的學生名單(註:Student表中Sage列的類型是datetime)

select Sname, CONVERT(char (11),DATEPART(year,Sage)) as age

from student

where CONVERT(char(11),DATEPART(year,Sage))='1981';

32、查詢每門課程的平均成績,結果按平均成績升序排列,平均成績相同時,按課程號降序排列

Select C#,Avg(score) from SC group by C# order by Avg(score),C# DESC ;

33、查詢平均成績大於85的所有學生的學號、姓名和平均成績

select Sname,SC.S# ,avg(score)

from Student,SC

where Student.S#=SC.S# group by SC.S#,Sname having avg(score)>85;

34、查詢課程名稱為“資料庫”,且分數低於60的學生姓名和分數

Select Sname,isnull(score,0)

from Student,SC,Course

where SC.S#=Student.S# and SC.C#=Course.C# and Course.Cname='資料庫'and score <60;

35、查詢所有學生的選課情況;

SELECT SC.S#,SC.C#,Sname,Cname

FROM SC,Student,Course

where SC.S#=Student.S# and SC.C#=Course.C# ;

36、查詢任何一門課程成績在70分以上的姓名、課程名稱和分數;

SELECT distinct student.S#,student.Sname,SC.C#,SC.score

FROM student,Sc

WHERE SC.score>=70 AND SC.S#=student.S#;

37、查詢不及格的課程,並按課程號從大到小排列

select c# from sc where scor e <60 order by C# ;

38、查詢課程編號為003且課程成績在80分以上的學生的學號和姓名;

select SC.S#,Student.Sname from SC,Student where SC.S#=Student.S# and Score>80 and C#='003';

39、求選了課程的學生人數

select count(*) from sc;

40、查詢選修“葉平”老師所授課程的學生中,成績最高的學生姓名及其成績

select Student.Sname,score

from Student,SC,Course C,Teacher

where Student.S#=SC.S# and SC.C#=C.C# and C.T#=Teacher.T# and Teacher.Tname='葉平' and SC.score=(select max(score)from SC where C#=C.C# );

41、查詢各個課程及相應的選修人數

select count(*) from sc group by C#;

42、查詢不同課程成績相同的學生的學號、課程號、學生成績

select distinct A.S#,B.score from SC A ,SC B where A.Score=B.Score and A.C# <>B.C# ;

43、查詢每門功成績最好的前兩名

SELECT t1.S# as 學生ID,t1.C# as 課程ID,Score as 分數

FROM SC t1

WHERE score IN (SELECT TOP 2 score

FROM SC

WHERE t1.C#= C#

ORDER BY score DESC

)

ORDER BY t1.C#;

44、統計每門課程的學生選修人數(超過10人的課程才統計)。要求輸出課程號和選修人數,查詢結果按人數降序排列,查詢結果按人數降序排列,若人數相同,按課程號升序排列

select C# as 課程號,count(*) as 人數

from sc

group by C#

order by count(*) desc,c#

45、檢索至少選修兩門課程的學生學號

select S#

from sc

group by s#

having count(*) > = 2

46、查詢全部學生都選修的課程的課程號和課程名

select C#,Cname

from Course

where C# in (select c# from sc group by c#)

47、查詢沒學過“葉平”老師講授的任一門課程的學生姓名

select Sname from Student where S# not in (select S# from Course,Teacher,SC where Course.T#=Teacher.T# and SC.C#=course.C# and Tname='葉平');

48、查詢兩門以上不及格課程的同學的學號及其平均成績

select S#,avg(isnull(score,0)) from SC where S# in (select S# from SC where score <60 group by S# having count(*)>2)group by S#;

49、檢索“004”課程分數小於60,按分數降序排列的同學學號

select S# from SC where C#='004'and score <60 order by score desc;

50、刪除“002”同學的“001”課程的成績

delete from Sc where S#='001'and C#='001';

;

⑦ 資料庫常用sql語句有哪些

資料庫常用sql語句

Student(S#,Sname,Sage,Ssex) 學生表

Course(C#,Cname,T#) 課程表

SC(S#,C#,score) 成績表

Teacher(T#,Tname) 教師表

問題:

1、查詢「001」課程比「002」課程成績高的所有學生的學號;

select a.S# from (select s#,score from SC where C#='001') a,(select s#,score

from SC where C#='002') b

where a.score>b.score and a.s#=b.s#;

2、查詢平均成績大於60分的同學的學號和平均成績;

select S#,avg(score)

from sc

group by S# having avg(score) >60;

3、查詢所有同學的學號、姓名、選課數、總成績;

select Student.S#,Student.Sname,count(SC.C#),sum(score)

from Student left Outer join SC on Student.S#=SC.S#

group by Student.S#,Sname

4、查詢姓「李」的老師的個數;

select count(distinct(Tname))

from Teacher

where Tname like '李%';

5、查詢沒學過「葉平」老師課的同學的學號、姓名;

select Student.S#,Student.Sname

from Student

where S# not in (select distinct( SC.S#) from SC,Course,Teacher where SC.C#=Course.C# and Teacher.T#=Course.T# and Teacher.Tname='葉平');

6、查詢學過「001」並且也學過編號「002」課程的同學的學號、姓名;

select Student.S#,Student.Sname from Student,SC where Student.S#=SC.S# and SC.C#='001'and exists( Select * from SC as SC_2 where SC_2.S#=SC.S# and SC_2.C#='002');

7、查詢學過「葉平」老師所教的所有課的同學的學號、姓名;

select S#,Sname

from Student

where S# in (select S# from SC ,Course ,Teacher where SC.C#=Course.C# and Teacher.T#=Course.T# and Teacher.Tname='葉平' group by S# having count(SC.C#)=(select count(C#) from Course,Teacher where Teacher.T#=Course.T# and Tname='葉平'));

8、查詢課程編號「002」的成績比課程編號「001」課程低的所有同學的學號、姓名;

Select S#,Sname from (select Student.S#,Student.Sname,score ,(select score from SC SC_2 where SC_2.S#=Student.S# and SC_2.C#='002') score2

from Student,SC where Student.S#=SC.S# and C#='001') S_2 where score2<score;

9、查詢所有課程成績小於60分的同學的學號、姓名;

select S#,Sname

from Student

where S# not in (select Student.S# from Student,SC where S.S#=SC.S# and score>60);

10、查詢沒有學全所有課的同學的學號、姓名;

select Student.S#,Student.Sname

from Student,SC

where Student.S#=SC.S# group by Student.S#,Student.Sname having count(C#) <(select count(C#) from Course);

11、查詢至少有一門課與學號為「1001」的同學所學相同的同學的學號和姓名;

select S#,Sname from Student,SC where Student.S#=SC.S# and C# in select C# from SC where S#='1001';

12、查詢至少學過學號為「001」同學所有一門課的其他同學學號和姓名;

select distinct SC.S#,Sname

from Student,SC

where Student.S#=SC.S# and C# in (select C# from SC where S#='001');

13、把「SC」表中「葉平」老師教的課的成績都更改為此課程的平均成績;

SC set score=(select avg(SC_2.score)

from SC SC_2

where SC_2.C#=SC.C# ) from Course,Teacher where Course.C#=SC.C# and Course.T#=Teacher.T# and Teacher.Tname='葉平');

14、查詢和「1002」號的同學學習的課程完全相同的其他同學學號和姓名;

select S# from SC where C# in (select C# from SC where S#='1002')

group by S# having count(*)=(select count(*) from SC where S#='1002');

15、刪除學習「葉平」老師課的SC表記錄;

Delect SC

from course ,Teacher

where Course.C#=SC.C# and Course.T#= Teacher.T# and Tname='葉平';

16、向SC表中插入一些記錄,這些記錄要求符合以下條件:沒有上過編號「003」課程的同學學號、2、

號課的平均成績;

Insert SC select S#,'002',(Select avg(score)

from SC where C#='002') from Student where S# not in (Select S# from SC where C#='002');

17、按平均成績從高到低顯示所有學生的「資料庫」、「企業管理」、「英語」三門的課程成績,按如下形式顯示: 學生ID,,資料庫,企業管理,英語,有效課程數,有效平均分

SELECT S# as 學生ID

,(SELECT score FROM SC WHERE SC.S#=t.S# AND C#='004') AS 資料庫

,(SELECT score FROM SC WHERE SC.S#=t.S# AND C#='001') AS 企業管理

,(SELECT score FROM SC WHERE SC.S#=t.S# AND C#='006') AS 英語

,COUNT(*) AS 有效課程數, AVG(t.score) AS 平均成績

FROM SC AS t

GROUP BY S#

ORDER BY avg(t.score)

18、查詢各科成績最高和最低的分:以如下形式顯示:課程ID,最高分,最低分

SELECT L.C# As 課程ID,L.score AS 最高分,R.score AS 最低分

FROM SC L ,SC AS R

WHERE L.C# = R.C# and

L.score = (SELECT MAX(IL.score)

FROM SC AS IL,Student AS IM

WHERE L.C# = IL.C# and IM.S#=IL.S#

GROUP BY IL.C#)

AND

R.Score = (SELECT MIN(IR.score)

FROM SC AS IR

WHERE R.C# = IR.C#

GROUP BY IR.C#

);

19、按各科平均成績從低到高和及格率的百分數從高到低順序

SELECT t.C# AS 課程號,max(course.Cname)AS 課程名,isnull(AVG(score),0) AS 平均成績

,100 * SUM(CASE WHEN isnull(score,0)>=60 THEN 1 ELSE 0 END)/COUNT(*) AS 及格百分數

FROM SC T,Course

where t.C#=course.C#

GROUP BY t.C#

ORDER BY 100 * SUM(CASE WHEN isnull(score,0)>=60 THEN 1 ELSE 0 END)/COUNT(*) DESC

20、查詢如下課程平均成績和及格率的百分數(用"1行"顯示): 企業管理(001),馬克思(002),OO&UML (003),資料庫(004)

SELECT SUM(CASE WHEN C# ='001' THEN score ELSE 0 END)/SUM(CASE C# WHEN '001' THEN 1 ELSE 0 END) AS 企業管理平均分

,100 * SUM(CASE WHEN C# = '001' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '001' THEN 1 ELSE 0 END) AS 企業管理及格百分數

,SUM(CASE WHEN C# = '002' THEN score ELSE 0 END)/SUM(CASE C# WHEN '002' THEN 1 ELSE 0 END) AS 馬克思平均分

,100 * SUM(CASE WHEN C# = '002' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '002' THEN 1 ELSE 0 END) AS 馬克思及格百分數

,SUM(CASE WHEN C# = '003' THEN score ELSE 0 END)/SUM(CASE C# WHEN '003' THEN 1 ELSE 0 END) AS UML平均分

,100 * SUM(CASE WHEN C# = '003' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '003' THEN 1 ELSE 0 END) AS UML及格百分數

,SUM(CASE WHEN C# = '004' THEN score ELSE 0 END)/SUM(CASE C# WHEN '004' THEN 1 ELSE 0 END) AS 資料庫平均分

,100 * SUM(CASE WHEN C# = '004' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '004' THEN 1 ELSE 0 END) AS 資料庫及格百分數

FROM SC

21、查詢不同老師所教不同課程平均分從高到低顯示

SELECT max(Z.T#) AS 教師ID,MAX(Z.Tname) AS 教師姓名,C.C# AS 課程ID,MAX(C.Cname) AS 課程名稱,AVG(Score) AS 平均成績

FROM SC AS T,Course AS C ,Teacher AS Z

where T.C#=C.C# and C.T#=Z.T#

GROUP BY C.C#

ORDER BY AVG(Score) DESC

22、查詢如下課程成績第 3 名到第 6 名的學生成績單:企業管理(001),馬克思(002),UML (003),資料庫(004)

[學生ID],[學生姓名],企業管理,馬克思,UML,資料庫,平均成績

SELECT DISTINCT top 3

SC.S# As 學生學號,

Student.Sname AS 學生姓名 ,

T1.score AS 企業管理,

T2.score AS 馬克思,

T3.score AS UML,

T4.score AS 資料庫,

ISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) + ISNULL(T4.score,0) as 總分

FROM Student,SC LEFT JOIN SC AS T1

ON SC.S# = T1.S# AND T1.C# = '001'

LEFT JOIN SC AS T2

ON SC.S# = T2.S# AND T2.C# = '002'

LEFT JOIN SC AS T3

ON SC.S# = T3.S# AND T3.C# = '003'

LEFT JOIN SC AS T4

ON SC.S# = T4.S# AND T4.C# = '004'

WHERE student.S#=SC.S# and

ISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) + ISNULL(T4.score,0)

NOT IN

(SELECT

DISTINCT

TOP 15 WITH TIES

ISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) + ISNULL(T4.score,0)

FROM sc

LEFT JOIN sc AS T1

ON sc.S# = T1.S# AND T1.C# = 'k1'

LEFT JOIN sc AS T2

ON sc.S# = T2.S# AND T2.C# = 'k2'

LEFT JOIN sc AS T3

ON sc.S# = T3.S# AND T3.C# = 'k3'

LEFT JOIN sc AS T4

ON sc.S# = T4.S# AND T4.C# = 'k4'

ORDER BY ISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) + ISNULL(T4.score,0) DESC);

23、統計列印各科成績,各分數段人數:課程ID,課程名稱,[100-85],[85-70],[70-60],[<60]

SELECT SC.C# as 課程ID, Cname as 課程名稱

,SUM(CASE WHEN score BETWEEN 85 AND 100 THEN 1 ELSE 0 END) AS [100 - 85]

,SUM(CASE WHEN score BETWEEN 70 AND 85 THEN 1 ELSE 0 END) AS [85 - 70]

,SUM(CASE WHEN score BETWEEN 60 AND 70 THEN 1 ELSE 0 END) AS [70 - 60]

,SUM(CASE WHEN score < 60 THEN 1 ELSE 0 END) AS [60 -]

FROM SC,Course

where SC.C#=Course.C#

GROUP BY SC.C#,Cname;

24、查詢學生平均成績及其名次

SELECT 1+(SELECT COUNT( distinct 平均成績)

FROM (SELECT S#,AVG(score) AS 平均成績

FROM SC

GROUP BY S#

) AS T1

WHERE 平均成績 > T2.平均成績) as 名次,

S# as 學生學號,平均成績

FROM (SELECT S#,AVG(score) 平均成績

FROM SC

GROUP BY S#

) AS T2

ORDER BY 平均成績 desc;

25、查詢各科成績前三名的記錄:(不考慮成績並列情況)

SELECT t1.S# as 學生ID,t1.C# as 課程ID,Score as 分數

FROM SC t1

WHERE score IN (SELECT TOP 3 score

FROM SC

WHERE t1.C#= C#

ORDER BY score DESC

)

ORDER BY t1.C#;

26、查詢每門課程被選修的學生數

select c#,count(S#) from sc group by C#;

27、查詢出只選修了一門課程的全部學生的學號和姓名

select SC.S#,Student.Sname,count(C#) AS 選課數

from SC ,Student

where SC.S#=Student.S# group by SC.S# ,Student.Sname having count(C#)=1;

28、查詢男生、女生人數

Select count(Ssex) as 男生人數 from Student group by Ssex having Ssex='男';

Select count(Ssex) as 女生人數 from Student group by Ssex having Ssex='女';

29、查詢姓「張」的學生名單

SELECT Sname FROM Student WHERE Sname like '張%';

30、查詢同名同性學生名單,並統計同名人數

select Sname,count(*) from Student group by Sname having count(*)>1;;

31、1981年出生的學生名單(註:Student表中Sage列的類型是datetime)

select Sname, CONVERT(char (11),DATEPART(year,Sage)) as age

from student

where CONVERT(11),DATEPART(year,Sage))='1981';

32、查詢每門課程的平均成績,結果按平均成績升序排列,平均成績相同時,按課程號降序排列

Select C#,Avg(score) from SC group by C# order by Avg(score),C# DESC ;

33、查詢平均成績大於85的所有學生的學號、姓名和平均成績

select Sname,SC.S# ,avg(score)

from Student,SC

where Student.S#=SC.S# group by SC.S#,Sname having avg(score)>85;

34、查詢課程名稱為「資料庫」,且分數低於60的學生姓名和分數

Select Sname,isnull(score,0)

from Student,SC,Course

where SC.S#=Student.S# and SC.C#=Course.C# and Course.Cname='資料庫'and score<60;

35、查詢所有學生的選課情況;

SELECT SC.S#,SC.C#,Sname,Cname

FROM SC,Student,Course

where SC.S#=Student.S# and SC.C#=Course.C# ;

36、查詢任何一門課程成績在70分以上的姓名、課程名稱和分數;

SELECT distinct student.S#,student.Sname,SC.C#,SC.score

FROM student,Sc

WHERE SC.score>=70 AND SC.S#=student.S#;

37、查詢不及格的課程,並按課程號從大到小排列

select c# from sc where scor e<60 order by C# ;

38、查詢課程編號為003且課程成績在80分以上的學生的學號和姓名;

select SC.S#,Student.Sname from SC,Student where SC.S#=Student.S# and Score>80 and C#='003';

39、求選了課程的學生人數

select count(*) from sc;

40、查詢選修「葉平」老師所授課程的學生中,成績最高的學生姓名及其成績

select Student.Sname,score

from Student,SC,Course C,Teacher

where Student.S#=SC.S# and SC.C#=C.C# and C.T#=Teacher.T# and Teacher.Tname='葉平' and SC.score=(select max(score)from SC where C#=C.C# );

41、查詢各個課程及相應的選修人數

select count(*) from sc group by C#;

42、查詢不同課程成績相同的學生的學號、課程號、學生成績

select distinct A.S#,B.score from SC A ,SC B where A.Score=B.Score and A.C# <>B.C# ;

43、查詢每門功成績最好的前兩名

SELECT t1.S# as 學生ID,t1.C# as 課程ID,Score as 分數

FROM SC t1

WHERE score IN (SELECT TOP 2 score

FROM SC

WHERE t1.C#= C#

ORDER BY score DESC

)

ORDER BY t1.C#;

44、統計每門課程的學生選修人數(超過10人的課程才統計)。要求輸出課程號和選修人數,查詢結果按人數降序排列,查詢結果按人數降序排列,若人數相同,按課程號升序排列

select C# as 課程號,count(*) as 人數

from sc

group by C#

order by count(*) desc,c#

45、檢索至少選修兩門課程的學生學號

select S#

from sc

group by s#

having count(*) > = 2

46、查詢全部學生都選修的課程的'課程號和課程名

select C#,Cname

from Course

where C# in (select c# from sc group by c#)

47、查詢沒學過「葉平」老師講授的任一門課程的學生姓名

select Sname from Student where S# not in (select S# from Course,Teacher,SC where Course.T#=Teacher.T# and SC.C#=course.C# and Tname='葉平');

48、查詢兩門以上不及格課程的同學的學號及其平均成績

select S#,avg(isnull(score,0)) from SC where S# in (select S# from SC where score<60 group="" by="" having="">2)group by S#;

49、檢索「004」課程分數小於60,按分數降序排列的同學學號

select S# from SC where C#='004'and score<60 order by score desc;

50、刪除「002」同學的「001」課程的成績

from Sc where S#='001'and C#='001';

一、SQL語言簡介

1、SQL語言簡介

SQL是結構化查詢語言(Structured Query Language),是用於訪問和處理資料庫的標準的計算機語言。

SQL語言的功能如下:

A、SQL面向資料庫執行查詢

B、SQL可從資料庫取回數據

C、SQL可在資料庫中插入新的記錄

D、SQL可更新資料庫中的數據

E、SQL可從資料庫刪除記錄

F、SQL可創建新資料庫

G、SQL可在資料庫中創建新表

H、SQL可在資料庫中創建存儲過程

I、SQL可在資料庫中創建視圖

J、SQL可以設置表、存儲過程和視圖的許可權

SQL是一門ANSI的標准計算機語言,用來訪問和操作資料庫系統。SQL語句用於取回和更新資料庫中的數據。SQL可與資料庫程序協同工作,比如MS Access、DB2、Informix、MS SQL Server、Oracle、MySQL、Sybase以及其他資料庫系統。

每一種資料庫有自己版本的SQL語言,但是為了與ANSI標准相兼容,SQL必須以相似的方式共同地來支持一些主要的關鍵詞(比如 SELECT、UPDATE、DELETE、INSERT、WHERE等等)。

除了SQL標准之外,大部分SQL資料庫程序都擁有自己的私有擴展。

2、SQL語言分類

SQL語言分為數據定義語言、數據控制語言、數據操作語言、數據查詢語言,分別實現對資料庫數據操作。

二、SQL語言基礎

1、數據定義語言(DDL)

DDL:Data Definition Language

用於定義和管理數據對象,包括資料庫、數據表、函數、視圖、索引、觸發器等。例如:CREATE、DROP、ALTER等語句。

create table student

(

sid INT,

sname var20)

);

alter table student add age int default 20;

student;

drop database student;

2、數據控制語言(DCL)

DCL:Data Control Language

用來管理資料庫的語言,包含授權用戶訪問、拒絕用戶訪問、撤銷授予的許可權。例如:GRANT、DENY、REVOKE、COMMIT、ROLLBACK等語句。

創建用戶

create user 『wang』@『localhost』 identified by 『a1!』;

許可權設置

grant select on db.student to 『wang』@『localhost』;

撤銷許可權

revoke select on db.student from 『wang』@『localhost』;

3、數據操作語言(DML)

DML:Data Manipulation Language

用於操作資料庫對象中所包含的數據,增、刪、改。例如:INSERT、DELETE、UPDATE語句。

4、數據查詢語言(DQL)

DQL:Data Query Language

用於查詢資料庫對象中所包含的數據,能夠進行單表查詢、連接查詢、嵌套查詢,以及集合查詢等各種復雜程度不同的資料庫查詢,並將數據返回到客戶機中顯示。例如:SELECT語句。

三、常量和變數

1、常量

A、字元常量

字元串常量使用單引號或雙引號,數值常量不用加引號。

如果字元串常量中需要換行、有單引號、雙引號 % _

前面需要加轉義字元

換行

』 一個單引號

」 一個雙引號

一個 如果沒有轉義字元 就認為是一個轉義字元

% 一個% 如果沒有轉義字元就認為這是一個通配符

_ 一個_ 如果沒有轉移字元 就認為是一個通配符

select 『hanli』gang001』

select 『han ligang001』

select 『han ligang001』

select 「han"ligang001」

select 「韓立剛001」

B、數值常量

數值常量不用添加引號,

select 100+100+200

C、布爾常量

布爾型常量取值 true 和 false

在SQL中使用1和0表示

select true,false

在表達式中

select 100>200

select 100<200

2、變數

用戶自定義變數使用@開始,使用set給變數賦值。

set @name=『孫悟空』;

select @name;

select * from student;

into student values (6,『孫悟空』,20);

into student values (8,@name,20);

set @sid=9,@nid=10

into student values (@sid,@name,20);

select @sid+@nid;

set @sid=@sid+1;

select @sid;

set @sname3=(select sname from student where sid=9);

select @sname3;

3、系統變數

系統變數分為全局系統變數和會話系統變數。

全局系統變數:針對所有默認設置

會話系統變數:針對當前用戶生效,用戶登錄MySQL會使用全局系統變數,如果會話中更改了變數值,使用更改後的值,不過只針對當前用戶生效。

show variables 顯示會話系統變數

show global variables 顯示全局系統變數

show session variables 顯示會話系統變數

show global variables like 『sql_select_limit』;使用通配符顯示匹配的變數設置

show session variables like 『sql_select_limit』;系統變數使用@@標識

select @@global.sql_select_limit 查看某個全局系統變數設置

select @@session.sql_select_limit 查看某個會話系統變數設置

set @@session.sql_select_limit=2 設置會話系統變數

全局系統變數需要在/etc/my.cnf配置文件中修改。

⑧ 常見的99中sql語句

1. select * from emp;

2. select empno, ename, job from emp;

3. select empno編號, ename姓名, job工作from emp;

4. select job from emp;

5. select distinct job from emp;

6. select distinct empno, job from emp;

說明:因為雇員編號不重復,所以此時證明所有的列沒有重復,所以不能消除掉重復的列.

7.查詢出雇員的編號,姓名,工作,但是顯示的格式:編號是: 7369的雇員,姓名是: smith,工作是: clear

select '編號是: ' || empno || '的雇員,姓名是: ' || ename || ',工作是: ' || job from emp;

8.求出每個雇員的姓名及年薪

select ename, sal * 12 income from emp;

9.求出工資大於1500的所有雇員信息

select * from emp where sal > 1500;

10.查詢每月可以得到獎金的雇員信息

select * from emp where comm is not null;

11.查詢沒有獎金的雇員信息

select * from emp where comm is null;

12.查詢出基本工資大於1500同時可以領取獎金的雇員信息

select * from emp where sal > 1500 and comm is not null;

13.查詢出基本工資大於1500或者可以領取獎金的雇員信息

select * from emp where sal > 1500 or comm is not null;

14.查詢出基本工資不大於1500或者不可以領取獎金的雇員信息

select * from emp where not(sal > 1500 and comm is not null);

15.查詢基本工資大於1500,但是小於3000的全部雇員信息

select * from emp where sal > 1500 and sal < 3000;

16.查詢基本工資大於等於1500,但是小於等於3000的全部雇員信息

select * from emp where sal >= 1500 and sal <= 3000;

select * from emp where sal between 1500 and 3000;

17.查詢出在1981年僱傭的全部雇員信息(1981年1月1日 到1981年12月31日之間的僱傭的雇員)

select * from emp where hiredate between '1-1月-81' and '31-12月-81';

18.要求查詢出姓名是smith的雇員信息

select * from emp where ename = 'SMITH';

19.要求查詢出雇員是7369, 7499, 7521的雇員的具體信息

select * from emp where empno = 7369 or empno = 7499 or empno = 7521;

select * from emp where empno in(7369, 7499, 7521);

20.要求查詢出雇員不是7369, 7499, 7521的雇員的具體信息

select * from emp where empno not in(7369, 7499, 7521);

21.要求查詢出姓名是smith, allen, king的雇員信息

select * from emp where ename in('SMITH', 'ALLEN', 'KING');

22.查詢出所有雇員姓名中第二個字母包含"M"的雇員信息

select * from emp where ename like '_M%';

23.查詢出雇員姓名中包含字母M的雇員信息

select * from emp where ename like '%M%';

24.要求查詢出在1981年僱傭的雇員信息

select * from emp where hiredate like '%81%';

25.查詢工資中包含5的雇員信息

select * from emp where sal like '%5%';

26.查詢雇員編號不是7369的雇員信息

select * from emp where empno != 7369;

select * from emp where empno <> 7369;

27.要求按照工資由低到高排序

select * frm emp order by sal;

select * from emp order by sal asc;

28.要求按照工資由高到低排序

select * from emp order by sal desc;

29.要求查詢出20部門的所有雇員信息,查詢的信息按照工資由高到低排序,如果工資相等,則按照僱傭日期由早到晚排序.

select * from emp where deptno = 20 order by sal desc, hiredate asc;

30.將小寫字母變為大寫字母

select upper('hello') from al;

31.將大寫字母變為小寫字母

select lower('HELLO WORLD') from al;

32.要求查詢出姓名是smith的雇員信息

select * from emp where ename = upper('smith');

33.使用initcap()函數將單詞的第一個字母大寫

select initcap('hello world') from al;

34.將雇員表中的雇員姓名變為開頭字母大寫

select initcap(ename) from emp;

35.將字元串"hello"和"world"進行串聯

select concat('hello ', 'world') from al;

36.對字元串進行操作的常用字元處理函數

select substr('hello', 1, 3)截取字元串, length('hello')字元串的長度, replace('hello', 'l', 'x')字元串替換from al;

select substr('hello', 0, 3)截取字元串, length('hello')字元串的長度, replace('hello', 'l', 'x')字元串替換from al;

37.顯示所有雇員的姓名及姓名的後三個字元

select ename, substr(ename, length(ename) -2) from emp;

select ename, substr(ename, -3, 3) from emp;

38.使用數值函數執行四捨五入操作

select round(789.536) from al;

39.要求將789.536數值保留兩位小數

select round(789.536, 2) from al;

40.要求將789.536數值中的整數的十位進行四捨五入進位

select round(789.536, -2) from al;

41.採用trunc()函數不會保留任何小數,而且小數點也不會執行四捨五入的操作

select trunc(789.536) from al;

42.通過trunc()也可以指定小數點的保留位數

select trunc(789.536, 2) from al;

43.作用負數表示位數

select trunc(789.536, -2) from al;

44.使用mod()函數可以進行取余的操作

select mod(10, 3) from al;

45.顯示10部門雇員進入公司的星期數(當前日期-僱傭日期=天數/ 7 =星期數)

select empno, ename, round((sysdate - hiredate) / 7) from emp where deptno = 10;

46.日期函數

months_between():求出給定日期范圍的月數

add_months():在指定的日期上加上指定的月數,求出之後的日期

next_day():指定日期的下一個日期

last_day():求出給定日期當月的最後一天日期

47.

select empno, ename, months_between(sysdate, hiredate) from emp;

select empno, ename, round(months_between(sysdate, hiredate)) from emp;

48. select sysdate, add_months(sysdate, 4) from al;

49. select next_day(sysdate, '星期一') from al;

50. select last_day(sysdate) from al;

51.轉換函數

to_char():轉換成字元串

to_number():轉換成數字

to_date():轉換成日期

52.查詢所有雇員的雇員編號,姓名,僱傭日期

select empno,

ename,

to_char(hiredate, 'yyyy') year,

to_char(hiredate, 'mm') months,

to_char(hiredate, 'dd') day

from emp;

select empno, ename, to_char(hiredate, 'yyyy-mm-dd') from emp;

select empno, ename, to_char(hiredate, 'fmyyyy-mm-dd') from emp;

53.查詢所有雇員的編號,姓名和工資

select empno, ename, sal from emp;

select empno, ename, to_char(sal, '99,999') from emp;

select empno, ename, to_char(sal, 'L99,999') from emp;

select empno, ename, to_char(sal, '$99,999') from emp;

54. select to_number('123') + to_number('123') from al;

55.將一個字元串轉換成日期類型

select to_date('2009-01-01', 'yyyy-mm-dd') from al;

56.求出每個雇員的年薪(要求加上獎金)

select empno, ename, sal, comm, (sal + comm) * 12 from emp;

select empno, ename, sal, comm, nvl(comm, 0), (sal + nvl(comm, 0)) * 12 income from emp;

57. decode()函數類似於if....elsif...else語句

select decode(1, 1, '內容是1', 2, '內容是2', 3, '內容是3') from al;

58.查詢出雇員的編號,姓名,僱傭日期及工作,要求將雇員的工作替換成以下信息:

select empno雇員編號,

ename雇員姓名,

hiredate僱傭日期,

decode(job,

'CLERK', '業務員',

'SALESMAN', '銷售人員',

'MANAGER', '經理',

'ANALYST', '分析員',

'PRESIDENT', '總裁'

)職位

from emp;

59.笛卡爾積(交差連接)

select * from emp, dept;

select * from emp cross join dept;

60.內連接

select * from emp e, dept d where e.deptno = d.deptno;

select * from emp e inner join dept d on e.deptno = d.deptno;

select * from emp e join dept d on e.deptno = d.deptno;

61.自然連接

select * from emp natural join dept;

select * from emp e join dept d using(deptno);

62.要求查詢出雇員的編號,姓名,部門的編號,名稱,地址

select e.empno, e.ename, d.deptno, d.dname, d.loc from emp e, dept d where e.deptno = d.deptno;

63.要求查詢出雇員的姓名,工作,雇員的直接上級領導姓名

select e.ename, e.job, m.ename from emp e, emp m where e.mgr = m.empno;

64.要求查詢出雇員的姓名,工作,雇員的直接上級領導姓名以及部門名稱

select e.ename, e.job, m.ename, d.dname from emp e, emp m, dept d where e.mgr = m.empno and e.deptno = d.deptno;

65.要求查詢出每個雇員的姓名,工資,部門名稱,工資在公司的等級(salgrade),及其領導的姓名及工資所在公司的等級

select e.ename, e.sal, d.dname, s.grade, m.ename, m.sal, ms.grade

from emp e, dept d, salgrade s, emp m, salgrade ms

where e.deptno = d.deptno

and e.sal between s.losal and s.hisal

and e.mgr = m.empno

and m.sal between ms.losal and ms.hisal;

select e.ename,

e.sal,

d.dname,

decode(s.grade, 1, '第五等級', 2, '第四等級', 3, '第三等級', 4, '第二等級', 5, '第一等級'),

m.ename,

m.sal,

decode(ms.grade, 1, '第五等級', 2, '第四等級', 3, '第三等級', 4, '第二等級', 5, '第一等級')

from emp e, dept d, salgrade s, emp m, salgrade ms

where e.deptno = d.deptno and e.sal between s.losal and s.hisal and e.mgr = m.empno

and m.sal between ms.losal and ms.hisal;

66. select empno, ename, d.deptno, dname, loc from emp e, dept d where e.deptno = d.deptno;

select empno, ename, d.deptno, dname, loc from emp e inner join dept d on e.deptno = d.deptno;

67.左外連接

select empno, ename, d.deptno, dname, loc from emp e, dept d where e.deptno = d.deptno(+);

select empno, ename, d.deptno, dname, loc from emp e left outer join dept d on e.deptno = d.deptno;

select empno, ename, d.deptno, dname, loc from emp e left join dept d on e.deptno = d.deptno(+);

68.右外連接

select empno, ename, d.deptno, dname, loc from emp e, dept d where e.deptno(+) = d.deptno;

select empno, ename, d.deptno, dname, loc from emp e right outer join dept d on e.deptno = d.deptno;

select empno, ename, d.deptno, dname, loc from emp e right join dept d on e.deptno = d.deptno;

69. select e.empno, e.ename, m.empno, m.ename from emp e, emp m where e.mgr = m.empno;

70. select e.empno, e.ename, m.empno, m.ename from emp e, emp m where e.mgr = m.empno(+);

71.

select * from emp e, dept d where e.deptno = d.deptno and d.deptno = 30;

select * from emp e inner join dept d on e.deptno = d.deptno where d.deptno = 30;

select * from emp e join dept d on e.deptno = d.deptno where d.deptno = 30;

select * from emp e natural join dept d where deptno = 30;

select * from emp e join dept d using(deptno) where deptno = 30;

72.

select e.ename, d.deptno, d.dname, d.loc from emp e right outer join dept d on e.deptno = d.deptno;

select e.ename, d.deptno, d.dname, d.loc from emp e right join dept d on e.deptno = d.deptno;

select e.ename, d.deptno, d.dname, d.loc from emp e, dept d where e.deptno(+) = d.deptno;

73. select count(ename) from emp;

74. select min(sal) from emp;

75. select max(sal) from emp;

76. select sum(sal) from emp;

77. select avg(sal) from emp;

78. select sum(sal) from emp where deptno = 20;

79. select avg(sal) from emp where deptno = 20;

80.求出每個部門的雇員數量

select deptno, count(deptno) from emp group by deptno;

select deptno, count(empno) from emp group by deptno;

81.求出每個部門的平均工資

select deptno, avg(sal) from emp group by deptno;

82.按部門分組,並顯示部門的名稱,及每個部門的員工數

select d.dname, count(e.empno) from emp e, dept d

where e.deptno = d.deptno

group by d.dname;

select d.deptno, d.dname, temp.c

from (select deptno, count(e.empno) c from emp e group by e.deptno) temp, dept d

where temp.deptno = d.deptno;

83.要求顯示出平均工資大於2000的部門編號和平均工資

select deptno, avg(sal) from emp group by deptno having avg(sal) > 2000;

84.顯示非銷售人員工作名稱以及從事同一工作雇員的月工資的總和,並且要滿足從事同一工作的雇員的月工資合計大於5000,輸出結果按月工資的合計升序排序.

select job, sum(sal) su from emp where job <> 'SALESMAN' group by job having sum(sal) > 5000 order by su;

select temp.job, sum(temp.sal) s

from (select job, sal from emp e where job <> 'SALESMAN') temp

group by temp.job

having sum(temp.sal) > 5000

order by s;

85.求出平均工資最高的部門工資

select max(avg(sal)) from emp group by deptno;

86.要求查詢出比雇員編號為7654工資高的所有雇員信息

select * from emp where sal >(select sal from emp where empno = 7654);

87.要求查詢出工資比7654高,同時與7788從事相同工作的全部雇員信息

select * from emp

where sal >(select sal from emp where empno = 7654)

and job = (select job from emp where empno = 7788);

88.要求查詢出工資最低的雇員姓名,工作,工資

select ename, job, sal from emp where sal = (select min(sal) from emp);

89.要求查詢出:部門名稱,部門的員工數,部門的平均工資,部門的最低收入雇員的姓名

select d.dname, temp.c, temp.a, e.ename

from dept d,

(select deptno, count(empno) c, avg(sal) a, min(sal) m from emp group by deptno) temp,

emp e

where d.deptno = temp.deptno and e.sal = temp.m;

select d.deptno, temp.dname, temp.c, temp.a, e.ename, e.sal

from

(select d.dname , count(e.empno) c, avg(e.sal) a, min(e.sal) m

from emp e, dept d

where e.deptno = d.deptno

group by d.dname) temp,

emp e,

dept d

where temp.m = e.sal

and temp.dname = d.dname;

90.求出每個部門的最低工資的雇員的信息

select * from emp where sal in(select min(sal) from emp group by deptno);

select * from emp where sal =any(select min(sal) from emp group by deptno);

select * from

(select min(sal) m from emp group by deptno) temp,

emp e

where e.sal = temp.m;

91.範例90中,比子查詢條件中最低(小)的工資要大的雇員信息

select * from emp where sal >any(select min(sal) from emp group by deptno);

select * from emp where sal > (select min(min(sal)) from emp group by deptno);

92.範例90中,比子查詢條件中最高(大)的工資要小的雇員信息

select * from emp where sal

select * from emp where sal < (select max(min(sal)) from emp group by deptno);

93.範例90中,比子查詢條件中最高(大)的工資要大的雇員信息

select * from emp where sal >all(select min(sal) from emp group by deptno);

select * from emp where sal > (select max(min(sal)) from emp group by deptno);

94.範例90中,比子查詢條件中最低(小)的工資要小的雇員信息

select * from emp where sal

select * from emp where sal < (select min(min(sal)) from emp group by deptno);

95.查找出20部門中沒有獎金的雇員信息

select * from emp where (sal, nvl(comm, -1)) in (select sal, nvl(comm, -1) from emp where deptno = 20);

select * from emp where deptno = 20 and comm is null;

96. union操作符返回兩個查詢選定的所有不重復的行

select deptno from emp union select deptno from dept;

97. union all操作符合並兩個查詢選定的所有行,包括重復的行

select deptno from emp union all select deptno from dept;

98. intersect操作符只返回兩個查詢都有的行

select deptno from emp intersect select deptno from dept;

99. minus操作符只返回由第一個查詢選定但是沒有被第二個查詢選定的行,也就是在第一個查詢結果中排除在第二個查詢結果中出現的行

select deptno from dept minus select deptno from emp;

��O������dL

⑨ 搜集SQL常用的操作語句

結構化查詢語言(Structured Query Language)簡稱SQL(發音:/ˈes kjuː ˈel/ "S-Q-L"),是一種特殊目的的編程語言,是一種資料庫查詢和程序設計語言,用於存取數據以及查詢、更新和管理關系資料庫系統;同時也是資料庫腳本文件的擴展名。

一、插入(復制)表數據

1、INSERT INTO 語句:

(1)插入新的一行數

[sql] view plain ;

INSERT INTO Persons VALUES ('Gates', 'Bill', 'Xuanwumen 10', 'Beijing');

(2)在指定的列中插入數據

[sql] view plain ;

INSERT INTO Persons (LastName, Address) VALUES ('Wilson', 'Champs-Elysees');

2、SQL SELECT INTO 語句可用於創建表的備份復件

(1)在建表時復制所有數據

[sql] view plain ;

create table userinfo_new as select * from userinfo;

(2)在建表時復制部分數據

[sql] view plain ;

create table userinfo_new1 as select id,username from userinfo;

(3)在添加時復制所有數據

[sql] view plain ;

insert into userinfo_new select * from userinfo;

(4)在添加時復制部分數據

[sql] view plain ;

insert into userinfo_new(id,username) select id,username from userinfo;

二、修改表數據

Update 語句

(1)無條件更新

[sql] view plain ;

update userinfo set userpwd='111',email='[email protected]';

(2)有條件更新

[sql] view plain ;

update userinfo set userpwd='123456' where username='xxx';

三、刪除表數據

1、DELETE 語句

(1)無條件刪除

[sql]view plain;

daletefromuserinfo;

(2)有條件刪除

[sql]view plain;

='yyy';

四、查詢表數據

1、SELECT 語句:

(1)查詢所有欄位

[sql] view plain ;

select * from users;

(2)查詢指定欄位

[sql] view plain ;

select username,salary from users;

2、SELECT DISTINCT 語句

從 Company" 列中僅選取唯一不同的值,需要使用 SELECT DISTINCT 語句:

[sql] view plain ;

SELECT DISTINCT Company FROM Orders;

⑩ sql常用語句,幫我歸納出來,謝謝

SQL語句先前寫的時候,很容易把一些特殊的用法忘記,我特此整理了一下SQL語句操作。
一、基礎
1、說明:創建資料庫
CREATE DATABASE database-name
2、說明:刪除資料庫
drop database dbname
3、說明:備份sql server
--- 創建 備份數據的 device
USE master
EXEC sp_admpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat'
--- 開始 備份
BACKUP DATABASE pubs TO testBack
4、說明:創建新表
create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)
根據已有的表創建新表:
A:create table tab_new like tab_old (使用舊表創建新表)
B:create table tab_new as select col1,col2... from tab_old definition only
5、說明:刪除新表
drop table tabname
6、說明:增加一個列
Alter table tabname add column col type
註:列增加後將不能刪除。DB2中列加上後數據類型也不能改變,唯一能改變的是增加varchar類型的長度。
7、說明:添加主鍵: Alter table tabname add primary key(col)
說明:刪除主鍵: Alter table tabname drop primary key(col)
8、說明:創建索引:create [unique] index idxname on tabname(col....)
刪除索引:drop index idxname
註:索引是不可更改的,想更改必須刪除重新建。
9、說明:創建視圖:create view viewname as select statement
刪除視圖:drop view viewname
10、說明:幾個簡單的基本的sql語句
選擇:select * from table1 where 范圍
插入:insert into table1(field1,field2) values(value1,value2)
刪除:delete from table1 where 范圍
更新:update table1 set field1=value1 where 范圍
查找:select * from table1 where field1 like '%value1%' ---like的語法很精妙,查資料!
排序:select * from table1 order by field1,field2 [desc]
總數:select count as totalcount from table1
求和:select sum(field1) as sumvalue from table1
平均:select avg(field1) as avgvalue from table1
最大:select max(field1) as maxvalue from table1
最小:select min(field1) as minvalue from table1
11、說明:幾個高級查詢運算詞
A: UNION 運算符
UNION 運算符通過組合其他兩個結果表(例如 TABLE1 和 TABLE2)並消去表中任何重復行而派生出一個結果表。當 ALL 隨 UNION 一起使用時(即 UNION ALL),不消除重復行。兩種情況下,派生表的每一行不是來自 TABLE1 就是來自 TABLE2。
B: EXCEPT 運算符
EXCEPT 運算符通過包括所有在 TABLE1 中但不在 TABLE2 中的行並消除所有重復行而派生出一個結果表。當 ALL 隨 EXCEPT 一起使用時 (EXCEPT ALL),不消除重復行。
C: INTERSECT 運算符
INTERSECT 運算符通過只包括 TABLE1 和 TABLE2 中都有的行並消除所有重復行而派生出一個結果表。當 ALL 隨 INTERSECT 一起使用時 (INTERSECT ALL),不消除重復行。
註:使用運算詞的幾個查詢結果行必須是一致的。
12、說明:使用外連接
A、left outer join:
左外連接(左連接):結果集幾包括連接表的匹配行,也包括左連接表的所有行。
SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c
B:right outer join:
右外連接(右連接):結果集既包括連接表的匹配連接行,也包括右連接表的所有行。
C:full outer join:
全外連接:不僅包括符號連接表的匹配行,還包括兩個連接表中的所有記錄。
二、提升
1、說明:復製表(只復制結構,源表名:a 新表名:b) (Access可用)
法一:select * into b from a where 1<>1
法二:select top 0 * into b from a
2、說明:拷貝表(拷貝數據,源表名:a 目標表名:b) (Access可用)
insert into b(a, b, c) select d,e,f from b;
3、說明:跨資料庫之間表的拷貝(具體數據使用絕對路徑) (Access可用)
insert into b(a, b, c) select d,e,f from b in '具體資料庫' where 條件
例子:..from b in '"&Server.MapPath(".")&"\data.mdb" &"' where..
4、說明:子查詢(表名1:a 表名2:b)
select a,b,c from a where a IN (select d from b ) 或者: select a,b,c from a where a IN (1,2,3)
5、說明:顯示文章、提交人和最後回復時間
select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b
6、說明:外連接查詢(表名1:a 表名2:b)
select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c
7、說明:在線視圖查詢(表名1:a )
select * from (SELECT a,b,c FROM a) T where t.a > 1;
8、說明:between的用法,between限制查詢數據范圍時包括了邊界值,not between不包括
select * from table1 where time between time1 and time2
select a,b,c, from table1 where a not between 數值1 and 數值2
9、說明:in 的使用方法
select * from table1 where a [not] in ('值1','值2','值4','值6')
10、說明:兩張關聯表,刪除主表中已經在副表中沒有的信息
delete from table1 where not exists ( select * from table2 where table1.field1=table2.field1 )
11、說明:四表聯查問題:
select * from a left inner join b on a.a=b.b right inner join c on a.a=c.c inner join d on a.a=d.d where .....
12、說明:日程安排提前五分鍾提醒
SQL: select * from 日程安排 where datediff('minute',f開始時間,getdate())>5
13、說明:一條sql 語句搞定資料庫分頁
select top 10 b.* from (select top 20 主鍵欄位,排序欄位 from 表名 order by 排序欄位 desc) a,表名 b where b.主鍵欄位 = a.主鍵欄位 order by a.排序欄位
14、說明:前10條記錄
select top 10 * form table1 where 范圍
15、說明:選擇在每一組b值相同的數據中對應的a最大的記錄的所有信息(類似這樣的用法可以用於論壇每月排行榜,每月熱銷產品分析,按科目成績排名,等等.)
select a,b,c from tablename ta where a=(select max(a) from tablename tb where tb.b=ta.b)
16、說明:包括所有在 TableA 中但不在 TableB和TableC 中的行並消除所有重復行而派生出一個結果表
(select a from tableA ) except (select a from tableB) except (select a from tableC)
17、說明:隨機取出10條數據
select top 10 * from tablename order by newid()
18、說明:隨機選擇記錄
select newid()
19、說明:刪除重復記錄
Delete from tablename where id not in (select max(id) from tablename group by col1,col2,...)
20、說明:列出資料庫里所有的表名
select name from sysobjects where type='U'
21、說明:列出表裡的所有的
select name from syscolumns where id=object_id('TableName')
22、說明:列示type、vender、pcs欄位,以type欄位排列,case可以方便地實現多重選擇,類似select 中的case。
select type,sum(case vender when 'A' then pcs else 0 end),sum(case vender when 'C' then pcs else 0 end),sum(case vender when 'B' then pcs else 0 end) FROM tablename group by type
顯示結果:
type vender pcs
電腦 A 1
電腦 A 1
光碟 B 2
光碟 A 2
手機 B 3
手機 C 3
23、說明:初始化表table1
TRUNCATE TABLE table1
24、說明:選擇從10到15的記錄
select top 5 * from (select top 15 * from table order by id asc) table_別名 order by id desc
三、技巧
1、1=1,1=2的使用,在SQL語句組合時用的較多
"where 1=1" 是表示選擇全部 "where 1=2"全部不選,
如:
if @strWhere !=''
begin
set @strSQL = 'select count(*) as Total from [' + @tblName + '] where ' + @strWhere
end
else
begin
set @strSQL = 'select count(*) as Total from [' + @tblName + ']'
end
我們可以直接寫成
set @strSQL = 'select count(*) as Total from [' + @tblName + '] where 1=1 安定 '+ @strWhere
2、收縮資料庫
--重建索引
DBCC REINDEX
DBCC INDEXDEFRAG
--收縮數據和日誌
DBCC SHRINKDB
DBCC SHRINKFILE
3、壓縮資料庫
dbcc shrinkdatabase(dbname)
4、轉移資料庫給新用戶以已存在用戶許可權
exec sp_change_users_login 'update_one','newname','oldname'
go
5、檢查備份集
RESTORE VERIFYONLY from disk='E:\dvbbs.bak'
6、修復資料庫
ALTER DATABASE [dvbbs] SET SINGLE_USER
GO
DBCC CHECKDB('dvbbs',repair_allow_data_loss) WITH TABLOCK
GO
ALTER DATABASE [dvbbs] SET MULTI_USER
GO
7、日誌清除
SET NOCOUNT ON
DECLARE @LogicalFileName sysname,
@MaxMinutes INT,
@NewSize INT
USE tablename -- 要操作的資料庫名
SELECT @LogicalFileName = 'tablename_log', -- 日誌文件名
@MaxMinutes = 10, -- Limit on time allowed to wrap log.
@NewSize = 1 -- 你想設定的日誌文件的大小(M)
-- Setup / initialize
DECLARE @OriginalSize int
SELECT @OriginalSize = size
FROM sysfiles
WHERE name = @LogicalFileName
SELECT 'Original Size of ' + db_name() + ' LOG is ' +
CONVERT(VARCHAR(30),@OriginalSize) + ' 8K pages or ' +
CONVERT(VARCHAR(30),(@OriginalSize*8/1024)) + 'MB'
FROM sysfiles
WHERE name = @LogicalFileName
CREATE TABLE DummyTrans
(DummyColumn char (8000) not null)
DECLARE @Counter INT,
@StartTime DATETIME,
@TruncLog VARCHAR(255)
SELECT @StartTime = GETDATE(),
@TruncLog = 'BACKUP LOG ' + db_name() + ' WITH TRUNCATE_ONLY'
DBCC SHRINKFILE (@LogicalFileName, @NewSize)
EXEC (@TruncLog)
-- Wrap the log if necessary.
WHILE @MaxMinutes > DATEDIFF (mi, @StartTime, GETDATE()) -- time has not expired
AND @OriginalSize = (SELECT size FROM sysfiles WHERE name = @LogicalFileName)
AND (@OriginalSize * 8 /1024) > @NewSize
BEGIN -- Outer loop.
SELECT @Counter = 0
WHILE ((@Counter < @OriginalSize / 16) AND (@Counter < 50000))
BEGIN -- update
INSERT DummyTrans VALUES ('Fill Log')
DELETE DummyTrans
SELECT @Counter = @Counter + 1
END
EXEC (@TruncLog)
END
SELECT 'Final Size of ' + db_name() + ' LOG is ' +
CONVERT(VARCHAR(30),size) + ' 8K pages or ' +
CONVERT(VARCHAR(30),(size*8/1024)) + 'MB'
FROM sysfiles
WHERE name = @LogicalFileName
DROP TABLE DummyTrans
SET NOCOUNT OFF
8、說明:更改某個表
exec sp_changeobjectowner 'tablename','dbo'
9、存儲更改全部表
CREATE PROCEDURE dbo.User_ChangeObjectOwnerBatch
@OldOwner as NVARCHAR(128),
@NewOwner as NVARCHAR(128)
AS
DECLARE @Name as NVARCHAR(128)
DECLARE @Owner as NVARCHAR(128)
DECLARE @OwnerName as NVARCHAR(128)
DECLARE curObject CURSOR FOR
select 'Name' = name,
'Owner' = user_name(uid)
from sysobjects
where user_name(uid)=@OldOwner
order by name
OPEN curObject
FETCH NEXT FROM curObject INTO @Name, @Owner
WHILE(@@FETCH_STATUS=0)
BEGIN
if @Owner=@OldOwner
begin
set @OwnerName = @OldOwner + '.' + rtrim(@Name)
exec sp_changeobjectowner @OwnerName, @NewOwner
end
-- select @name,@NewOwner,@OldOwner
FETCH NEXT FROM curObject INTO @Name, @Owner
END
close curObject
deallocate curObject
GO
10、SQL SERVER中直接循環寫入數據
declare @i int
set @i=1
while @i<30
begin
insert into test (userid) values(@i)
set @i=@i+1
end
小記存儲過程中經常用到的本周,本月,本年函數
Dateadd(wk,datediff(wk,0,getdate()),-1)
Dateadd(wk,datediff(wk,0,getdate()),6)
Dateadd(mm,datediff(mm,0,getdate()),0)
Dateadd(ms,-3,dateadd(mm,datediff(m,0,getdate())+1,0))
Dateadd(yy,datediff(yy,0,getdate()),0)
Dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate())+1, 0))
上面的SQL代碼只是一個時間段
Dateadd(wk,datediff(wk,0,getdate()),-1)
Dateadd(wk,datediff(wk,0,getdate()),6)
就是表示本周時間段.
下面的SQL的條件部分,就是查詢時間段在本周范圍內的:
Where Time BETWEEN Dateadd(wk,datediff(wk,0,getdate()),-1) AND Dateadd(wk,datediff(wk,0,getdate()),6)
而在存儲過程中
select @begintime = Dateadd(wk,datediff(wk,0,getdate()),-1)
select @endtime = Dateadd(wk,datediff(wk,0,getdate()),6)

熱點內容
伺服器e3與e5有什麼區別 發布:2025-01-24 06:19:35 瀏覽:122
linuxdb2建資料庫 發布:2025-01-24 06:19:09 瀏覽:665
武漢長江存儲公司有多少人 發布:2025-01-24 06:09:03 瀏覽:413
ftp伺服器輸入密碼 發布:2025-01-24 05:27:41 瀏覽:210
電信帳號怎麼改密碼 發布:2025-01-24 05:11:22 瀏覽:847
筆記本x17配置怎麼選 發布:2025-01-24 05:05:53 瀏覽:8
python如何封裝 發布:2025-01-24 05:05:46 瀏覽:844
csgo怎麼連接伺服器 發布:2025-01-24 05:05:45 瀏覽:323
408哪個配置合適 發布:2025-01-24 05:01:54 瀏覽:883
oraclesql刪除重復 發布:2025-01-24 05:01:12 瀏覽:409