Posted on 2008-08-12 15:54
Prayer 閱讀(282)
評(píng)論(0) 編輯 收藏 引用 所屬分類(lèi):
數(shù)據(jù)庫(kù),SQL
有關(guān)數(shù)據(jù)庫(kù)的一寫(xiě)操作:
創(chuàng)建表項(xiàng)就不說(shuō)了.
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ù):
原來(lái)的記錄:
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)的記錄就比較快。沒(méi)有建立索引的需要把所有信息都查找一遍,再在其中找Sno字段,再比較其值=1的相關(guān)記錄。
默認(rèn)是ASC。
按表中哪個(gè)字段倒敘排序:
select * from Student order by Sno desc;
注意:要排序的字段必須是int型。
設(shè)置成自增長(zhǎng)的字段在插入數(shù)據(jù)的時(shí)候不需要插入該字段的值:
select * from Student order by Sno desc;
原來(lái)沒(méi)有設(shè)置成自增長(zhǎng)插入數(shù)據(jù)命令:
insert into Student (Sno,Sname,Ssex,Sdept) values('aaa','mary','f','172');
將int型的Sno字段設(shè)置成自增長(zhǎng)后
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ù):(無(wú)字段名字)
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語(yǔ)句查詢的都是在and之間的所有值而IN語(yǔ)句則必須是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類(lèi)型的值
like和where條件查詢
select last_name,salsry,department_id from employees where last_name like 'G%' and salary>3000;
查詢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)鍵字來(lái)過(guò)濾掉多余的重復(fù)記錄只保留一條,
select distinct name from table 表示將返回table表中name字段不重復(fù)的所有字段的集合。
注:distinct必須放在開(kāi)頭,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)鍵字來(lái)過(guò)濾掉多余的重復(fù)記錄只保留一條,但往往只用它來(lái)返回不重復(fù)記錄的集合,而不是用它來(lái)返回不重記錄的所有值。其原因是distinct只能返回它的目標(biāo)字段,而無(wú)法返回其它字段,即上表中只能返回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語(yǔ)句
select * from test_1 ,(select min(id) as id from test_1 group by name1 order by id ) where test_1.id = T.id