真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

sqlserver503,server503錯(cuò)誤

SQL語言的用法

有關(guān)數(shù)據(jù)庫的一寫操作:

我們提供的服務(wù)有:做網(wǎng)站、網(wǎng)站設(shè)計(jì)、微信公眾號(hào)開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、班戈ssl等。為成百上千企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的班戈網(wǎng)站制作公司

創(chuàng)建表項(xiàng)就不說了.

CREATE TABLE Student

(Sno CHAR(5) NOT NULL UNIQUE,

Sname CHAR(20),

Ssex CHAR(1),

Sage INT,

Sdept CHAR(15));

插入記錄:

insert into Student (Sno,Sname,Ssex,Sdept) values('aaa','mary','f','172');

刪除記錄:

delete from Student where Sno = 'aaa';

注:只需要?jiǎng)h除一個(gè)主鍵就可以了。其他的記錄會(huì)相應(yīng)的刪除掉。

刪除表中一個(gè)字段:

ALTER TABLE Student DROP column Ssex; 列名;

修改表中的那一行數(shù)據(jù):

原來的記錄:

Sno Sname Ssex Sdept

aaa mary f 172

update Student set Sname='mary1', Ssex='m' where Sno='aaa';

修改后:

Sno Sname Ssex Sdept

aaa mary1 m 172

desc倒敘排列:

建立索引:

create unique index Sno on Student(Sno);

索引的一點(diǎn)好處:在查詢時(shí)候比較方便,在存在的所有記錄中查找一個(gè)Sno=1的時(shí)候!建立索引的表中就直接查找Sno項(xiàng)比較它是否=1找到后查相關(guān)的記錄就比較快。沒有建立索引的需要把所有信息都查找一遍,再在其中找Sno字段,再比較其值=1的相關(guān)記錄。

默認(rèn)是ASC。

按表中哪個(gè)字段倒敘排序:

select * from Student order by Sno desc;

注意:要排序的字段必須是int型。

設(shè)置成自增長的字段在插入數(shù)據(jù)的時(shí)候不需要插入該字段的值:

select * from Student order by Sno desc;

原來沒有設(shè)置成自增長插入數(shù)據(jù)命令:

insert into Student (Sno,Sname,Ssex,Sdept) values('aaa','mary','f','172');

將int型的Sno字段設(shè)置成自增長后

insert into Student (Sname,Ssex,Sdept) values('mary1','f','172');

insert into Student (Sname,Ssex,Sdept) values('mar1y','f','172');

insert into Student (Sname,Ssex,Sdept) values('ma1ry','f','172');

insert into Student (Sname,Ssex,Sdept) values('m1ary','f','172');

在表中的排序如下:

Sno Sname Ssex Sdept

1 mary1 f 172

2 mar1y f 172

3 ma1ry f 172

4 m1ary f 172

/*********************************************************************************

2006.7.20

*********************************************************************************/

查詢表中記錄總數(shù):(無字段名字)

select count() from usertable;

或:(userid 為字段名字,結(jié)果是字段的總行數(shù))

select count(*) userid from Student;

查詢字段的平均值:

selecet avg(Sno) from Student;

select avg(字段名)from 表名;

給出查詢的字段的平均值取別名:

select avg(字段名) as (別名) from (表名);

查找指定的字段的其他字段

select Sdept,Ssex,Sname

from Student

where Sno=3;

(where Sname='mary1';或則where Sname like 'mary1';)

在between語句查詢的都是在and之間的所有值而IN語句則必須是in括號(hào)里面的值.

select Sno,Ssex,Sname from Student where Sdept between 180 and 190;

select Sno,Ssex,Sname from Student where Sdept in (172,190);

查詢Student表中的所有的名字中的Sno和Ssex值.

select Sno,Ssex from Student where Sdept = 170 and Sname like '%%';

注:%%之間是把所有的String類型的值

like和where條件查詢

select last_name,salsry,department_id from employees where last_name like 'G%' and salary3000;

查詢Student表中的所有的名字中間有mary的所有名字對(duì)應(yīng)的的Sno和Ssex值.

select Sno,Ssex from Student where Sdept = 170 and Sname like '%mary%';

注:mary1,1mary,marydsajdh,等.

注意:and or not 用的時(shí)候,and是用在連接并列條件的2個(gè)不同的字段

or是用在選擇的2個(gè)不同的字段之間,not一般用于not in(180,190)之間.

order by 和asc|desc的一點(diǎn)不同:

order by是按先進(jìn)先排,desc是先進(jìn)后排,asc和desc是排列順序不一樣.

disctinct條件查詢

distinct 這個(gè)關(guān)鍵字來過濾掉多余的重復(fù)記錄只保留一條,

select distinct name from table 表示將返回table表中name字段不重復(fù)的所有字段的集合。

注:distinct必須放在開頭,select id distinct name from table 是錯(cuò)誤的!

-------------------------------------------------------------------------------------

表TEST_1:

id name1 name2

9 aaa 11

8 bbb 22

3 ccc 33

4 ccc 44

5 bbb 55

6 ddd 66

7 eee 77

-------------------------------------------------------------------------------------

select distinct(name1) from test_1

結(jié)果:

name1

aaa

bbb

ccc

ddd

eee

distinct這個(gè)關(guān)鍵字來過濾掉多余的重復(fù)記錄只保留一條,但往往只用它來返回不重復(fù)記錄的集合,而不是用它來返回不重記錄的所有值。其原因是distinct只能返回它的目標(biāo)字段,而無法返回其它字段,即上表中只能返回name1字段的所有不重復(fù)記錄集合。

-------------------------------------------------------------------------------------

如果現(xiàn)在想查詢出表test_1中所有name1不重復(fù)的id和name1字段的記錄呢?

select distinct name, id from table

結(jié)果:

name1 id

aaa 9

bbb 5

bbb 8

ccc 3

ccc 4

ddd 6

eee 7

并不是我們所想要的結(jié)果

select distinct name,id from table 作用了兩個(gè)字段,也就是必須得id與name都相同的才會(huì)被排除,即返回去除table表中id和name兩個(gè)字段同時(shí)相同情況下所有集合。

-------------------------------------------------------------------------------------

如果現(xiàn)在想查詢出表test_1中所有name1不重復(fù)的所有字段的記錄呢?

對(duì)于

select * from test_1 where name1 in (select distinct name1 from tablename)

等價(jià)于

select * from test_1 where name1 in ('aaa','bbb','ccc','ddd','eee')

我們很可能認(rèn)為它是可行的,但實(shí)際上結(jié)果卻是:

id name1 name2

9 aaa 11

8 bbb 22

3 ccc 33

4 ccc 44

5 bbb 55

6 ddd 66

7 eee 77

正確sql應(yīng)該是:

select * from test_1 inner join (select min(id) as id from test_1 group by name1 order by id ) T on test_1.id = T.id

min(id)或max(id)都行,order by id 可要可不要.這里用內(nèi)連接實(shí)現(xiàn)聯(lián)合查詢,也可以用where語句

select * from test_1 ,(select min(id) as id from test_1 group by name1 order by id ) where test_1.id = T.id

-------------------------------------------------------------------------------------

**********************************************************************************

聯(lián)合查詢

**********************************************************************************

查詢表中的各個(gè)字段的值

select Sno,Sname,Ssex,Sdept from Student;

多表查詢(2個(gè)表,publishtable和publishtable,給表起了別名)

select u.userid,u.age,u.username,p.publishname from usertable u,publishtable p where u.userid = p.publishid;

多表查詢(3個(gè)表employees,departments和locations表,給表起別名)

(從多表中查詢出所有姓smith的雇員的名字,所在部門以及部門所在的城市)

select e.first_name,e.last_name,d.department_name,l.city from employees e,departments d,locations l where e.department_id = d.department_id and d.location_id = l.location_id and e.last_name = 'smith';

***********************************************************************************

聯(lián)合查詢

***********************************************************************************

等值連接

/*將books表和表bookstype中的信息聯(lián)合查詢,條件是聯(lián)系鍵相等*/

select * from books,bookstype where bookstype.typeid = books.typeid

內(nèi)連接

/*將books表和表bookstype中的信息聯(lián)合查詢,條件是聯(lián)系鍵相等,和等值連接等價(jià)*/

select * from books inner join bookstype on books.typeid = bookstype.typeid

左外連接

/*將books表和表bookstype中的信息聯(lián)合查詢,包括在books表中沒有和bookstype表關(guān)聯(lián)的信息*/

select * from books left outer join bookstype on bookstype.typeid = books.typeid

右外連接

/*將bookstype表和books表中的信息聯(lián)合查詢,包括在bookstype表中沒有和books表關(guān)聯(lián)的信息*/

select * from books right outer join bookstype on bookstype.typeid = books.typeid

全連接

/*將bookstype表和books表中的信息聯(lián)合查詢,包括在books表中沒有和bookstype表關(guān)聯(lián)的信息以及在bookstype表中沒有和books表關(guān)聯(lián)的信息*/

select * from books full outer join bookstype on bookstype.typeid = books.typeid

***********************************************************************************

聯(lián)合查詢

***********************************************************************************

多表查詢應(yīng)該注意的幾點(diǎn):

多表查詢和單表查詢的不同在于多表查詢在查詢某個(gè)字段的時(shí)候應(yīng)該帶上表名

格式是:表名.字段名,表名.字段名

select bbs.id,bbs.name,bbs.dep,bbsr.id,bbsr.name

from bbs,bbsr

where bbs.id=bbsr.id;

一般的在多表查詢中的表名取的麻煩用別名來代替

如下:

select b.id,b.name,b.dep,c.id,c.name

from bbs as b ,bbsr as c // from bbs b,bbsr c***注意取別名也可以用空格或則用as.

where b.id=c.id;

*************************************************************************************

分組查詢

*************************************************************************************

在select 語句中可以使用group by 子句將行劃分成較小的組,然后,使用聚組函數(shù)返回每一個(gè)組的匯總信息,另外,可以使用having子句限制返回的結(jié)果集。group by 子句可以將查詢結(jié)果分組,并返回行的匯總信息SQLServer 按照group by 子句中指定的表達(dá)式的值分組查詢結(jié)果。

-------------------------------------------------------------------------------------

分組查詢一般是用來進(jìn)行統(tǒng)計(jì)需求的,要進(jìn)行分組查詢必須使用group by子句或having子句,在分組統(tǒng)計(jì)時(shí)要用到SQL的多行存儲(chǔ)函數(shù)。在where條件中不能使用多行存儲(chǔ)函數(shù).

查詢語句的select 和group by ,having 子句是聚組函數(shù)唯一出現(xiàn)的地方,在where 子句中不能使用聚組函數(shù)。

在帶有g(shù)roup by 子句的查詢語句中,在select 列表中指定的列要么是group by 子句中指定的列,要么包含聚組函數(shù).

------------------------------------------------------------------------------------

部門表department:

department_id department_name

10 開發(fā)部

20 測試部

30 用服部

40 財(cái)務(wù)部

50 培訓(xùn)部

雇員表employees:(department_id為外鍵)

id employees_name department_id

1 cheng 10

2 zhou 50

3 liguo 10

4 wang 20

5 feng 30

6 ling 30

7 wu 20

8 tang 20

9 yang 40

10 tan 50

------------------------------------------------------------------------------------

按部門編號(hào)統(tǒng)計(jì)出表employees中的每個(gè)部門的人數(shù)(group by分組查詢)

select department_id, count(*) from employees

group by department_id;

顯示出部門人數(shù)少于5人的部門編號(hào)以及人數(shù)( 按照department_id來分組,having count(*)5做為限制條件 )

select department_id 部門號(hào), count(*) 部門人數(shù) from employees

group by department_id

having count(*)5;

--------------------------------------

(注意:having必須在group by子句的后面)

--------------------------------------

圖:

部門號(hào) 部門人數(shù)

------------------------------

10 2

20 3

30 2

40 1

50 2

-------------------------------------------------------------------------------------

where子句和having子句可以同時(shí)使用,where子句是對(duì)要分組的行進(jìn)行過濾,即選擇要分組的行;

而having子句是對(duì)分組后的數(shù)據(jù)進(jìn)行過濾。此時(shí)where子句必須在group by...having子句之前

-------------------------------------------------------------------------------------

顯示出所有工資大于5000,且部門人數(shù)大于5個(gè)的部門號(hào),部門最低工資和部門人數(shù)

select department_id 部門號(hào)(記住department_id 和部門號(hào)之間要空格), min(salary) 最低工資,count(*) 部門人數(shù) from employees

where salary 5000

group by department_id

having count(*)5;

圖:

--------------------------------------

部門號(hào) 最低工資 部門人數(shù)

80 6100 34

100 6800 6

group by 按照哪個(gè)字段來排序查詢,一般的group by和having一起使用,注意在查詢中只能查詢與group by和having有關(guān)的字段。

--------------------------------------

where 子句的作用是在對(duì)查詢結(jié)果進(jìn)行分組前,將不符合where條件的行去掉,即在分組之前過濾數(shù)據(jù),條件中不能包含聚組函數(shù),使用where條件顯示特定的行。

having 子句的作用是篩選滿足條件的組,即在分組之后過濾數(shù)據(jù),條件中經(jīng)常包含聚組函數(shù),使用having 條件顯示特定的組,也可以使用多個(gè)分組標(biāo)準(zhǔn)進(jìn)行分組。

查詢每個(gè)部門的每種職位的雇員數(shù)(待測試...)

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

*********************************************************************************

數(shù)據(jù)排序

*********************************************************************************

order by子句中可以用asc(升序)和desc(降序)來完成相應(yīng)的排序,默認(rèn)時(shí)是按找asc(升序)。

---------------------------------------------------------------------------------

顯示出所有工資大于5000,且部門人數(shù)大于5個(gè)的部門號(hào),部門最低工資和部門人數(shù),并要求按照部門人數(shù)降序排序.

select department_id 部門號(hào)(記住department_id 和部門號(hào)之間要空格), min(salary) 最低工資,count(*) 部門人數(shù) from employees

where salary 5000

group by department_id

having count(*)5

order by count(*)desc

-------------------------------------------------------------------

(注意:當(dāng)對(duì)分組查詢后的結(jié)果進(jìn)行排序時(shí),order by 必須在group by之后)

-------------------------------------------------------------------

圖:

--------------------------------------

部門號(hào) 最低工資 部門人數(shù)

80 6100 34

100 6800 30

90 6500 28

70 6300 25

*******************************************************************************

子查詢

*******************************************************************************

-----------------------------------------------------------------------------------------------------

子查詢是一個(gè)在select查詢中含有其他的select語句,子查詢通常用在where子句中,即將一個(gè)查詢結(jié)果做為查詢的條件.

-----------------------------------------------------------------------------------------------------

統(tǒng)計(jì)表employees中所有工資小于平均工資的人數(shù)

select count(*)工資 from employees

where salary

(select avg(salary) from employees)

圖:

----------------

工資

56

49

36

Select MIN(Salary),Manager_id

from Employee

group by Manager_id

having MIN(Salary)

(Select MIN(Salary)

From Employee

where Manager_id=004);

注意在多表查詢中返回的值應(yīng)該是一個(gè)唯一確定的值,而不應(yīng)該是多中值。

select Employee_id,Last_name,Salary,Manager_id

from Employee

WHERE Salary

(select Salary

from Employee

where Manager_id=003)

and

Last_name= (select Last_name

from Employee

where Last_name like 'mary');

注意在any,or,all的區(qū)別:

Select Salary,Manager_id,Last_name,Employee_id

from Employee

where Salary any

(Select Salary

From Employee

where Manager_id=005);

Select Salary

From Employee

where Manager_id=005;返回的是2000,2500

就是在工資中小于2000.2500其中一個(gè)就可以了,而ALL則必須是小于2000和2500其中任何一個(gè)

。而or則是和and用在一起的.

******************************************************************************************

集合運(yùn)算

******************************************************************************************

---------------------------------------------------------------------------------

集合運(yùn)算是將2個(gè)或多個(gè)子查詢結(jié)果進(jìn)行(并union),交(intersect)和減(minus)

---------------------------------------------------------------------------------

(并union):

select employee_id,empname from emp1

union

select employee_id,name from emp2

圖:

-----------------

employee_id empname

100 king1

1000 king2

1000 king3

10000 king4

100000 king5

1000000 king6

注:使用union,重復(fù)行只包括一個(gè),當(dāng)使用union all時(shí)將包括重復(fù)行

交(intersect):2個(gè)或多個(gè)子查詢的公共行

select employee_id,empname from emp1

intersect

select employee_id,name from emp2

減(minus):從第一個(gè)查詢結(jié)果中去掉出現(xiàn)在第二個(gè)查詢結(jié)果中的行:

select employee_id,empname from emp1

minus

select employee_id,name from emp2

*****************************************************************************************

視圖,存儲(chǔ)過程和觸發(fā)器

*****************************************************************************************

創(chuàng)建視圖:(查詢數(shù)據(jù),用于系統(tǒng)統(tǒng)計(jì)報(bào)表)

create view dept_sum_vu

(name,minsal,maxsal,avgsal)

as select d.department_name,min(e.salary),max(e.salary),avg(e.salary)

from employees e,departments d

where e.department_id = d.department_id

group by d.department_name;

存貯過程,觸發(fā)器和刪除外鍵

1).存貯過程:

存貯過程的路徑:打開Stored Procedures中new一個(gè)新的Stored Procedures,中間填寫代碼,代碼如下:

CREATE PROCEDURE sa.bbsTest AS

select Bbsid ,content , area_id , name FROM BBs a JOIN bbs_area b

on a.area_id = b.id

CREATE PROCEDURE bbsTest AS

select Bbsid ,content , area_id , name FROM BBs a JOIN bbs_area b

on a.area_id = b.id

2).觸發(fā)器

打開用戶表項(xiàng),點(diǎn)設(shè)計(jì)表,選中其中一個(gè)字段,右鍵task點(diǎn)manager triggers,在彈出的表單中寫代碼:

CREATE TRIGGER [tD_bbs_area] ON [dbo].[bbs_area]

FOR DELETE

AS

BEGIN

DELETE rebbs

FROM bbs, deleted

WHERE rebbs.bbs_id = bbs.bbsid

AND bbs.area_id = deleted.id

DELETE bbs

FROM deleted

WHERE bbs.area_id = deleted.id

END

3).刪除外鍵

打開用戶表項(xiàng),點(diǎn)設(shè)計(jì)表,選中其中一個(gè)字段,右鍵relationships,在彈出的主鍵和外鍵中選擇就可以了.

刪除外鍵,需要先刪除主鍵表里面的有關(guān)外鍵的字段,再來刪除外鍵的有關(guān)字段.

SQLServer兩張表聯(lián)合查詢(一對(duì)多)...

select t1.U_Id,t1.U_Name,sum(isnull(t2.G_Price,0)) as G_Price

from Users t1 left join Goods t2

on t1.U_Id=t2.G_UId

group by t1.U_Id,t1.U_Name

order by t1.U_Id

HTTP Status 500 -

你在執(zhí)行插入的時(shí)候,ID是自己手動(dòng)設(shè)置的?

看錯(cuò)誤應(yīng)該是在數(shù)據(jù)庫里已經(jīng)有ID和你插入的相同的記錄存在了


當(dāng)前標(biāo)題:sqlserver503,server503錯(cuò)誤
網(wǎng)站網(wǎng)址:http://weahome.cn/article/hdspee.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部