SQL語言的用法
有關數據庫的一寫操作:創建表項就不說了.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';注:只需要刪除一個主鍵就可以了。
其他的記錄會相應的刪除掉。刪除表中一個字段:ALTER TABLE Student DROP column Ssex; 列名;修改表中的那一行數據:原來的記錄:Sno Sname Ssex Sdeptaaa mary f 172update Student set Sname='mary1', Ssex='m' where Sno='aaa';修改后:Sno Sname Ssex Sdeptaaa mary1 m 172desc倒敘排列:建立索引:create unique index Sno on Student(Sno);索引的一點好處:在查詢時候比較方便,在存在的所有記錄中查找一個Sno=1的時候!建立索引的表中就直接查找Sno項比較它是否=1找到后查相關的記錄就比較快。
沒有建立索引的需要把所有信息都查找一遍,再在其中找Sno字段,再比較其值=1的相關記錄。默認是ASC。
按表中哪個字段倒敘排序:select * from Student order by Sno desc;注意:要排序的字段必須是int型。設置成自增長的字段在插入數據的時候不需要插入該字段的值:select * from Student order by Sno desc;原來沒有設置成自增長插入數據命令:insert into Student (Sno,Sname,Ssex,Sdept) values('aaa','mary','f','172'); 將int型的Sno字段設置成自增長后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 Sdept1 mary1 f 1722 mar1y f 1723 ma1ry f 1724 m1ary f 172/*********************************************************************************2006.7.20*********************************************************************************/查詢表中記錄總數:(無字段名字)select count() from usertable;或:(userid 為字段名字,結果是字段的總行數)select count(*) userid from Student;查詢字段的平均值:selecet avg(Sno) from Student;select avg(字段名)from 表名;給出查詢的字段的平均值取別名:select avg(字段名) as (別名) from (表名);查找指定的字段的其他字段select Sdept,Ssex,Snamefrom Student where Sno=3;(where Sname='mary1';或則where Sname like 'mary1';)在between語句查詢的都是在and之間的所有值而IN語句則必須是in括號里面的值.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 salary>3000;查詢Student表中的所有的名字中間有mary的所有名字對應的的Sno和Ssex值.select Sno,Ssex from Student where Sdept >= 170 and Sname like '%mary%';注:mary1,1mary,marydsajdh,等.注意:and or not 用的時候,and是用在連接并列條件的2個不同的字段or是用在選擇的2個不同的字段之間,not一般用于not in(180,190)之間.order by 和asc|desc的一點不同:order by是按先進先排,desc是先進后排,asc和desc是排列順序不一樣.disctinct條件查詢distinct 這個關鍵字來過濾掉多余的重復記錄只保留一條,select distinct name from table 表示將返回table表中name字段不重復的所有字段的集合。
注:distinct必須放在開頭,select id distinct name from table 是錯誤的!-------------------------------------------------------------------------------------表TEST_1:id name1 name2 9 aaa 118 bbb 223 ccc 334 ccc 44 5 bbb 556 ddd 667 eee 77-------------------------------------------------------------------------------------select distinct(name1) from test_1 結果:name1aaabbbcccdddeeedistinct這個關鍵字來過濾掉多余的重復記錄只保留一條,但往往只用它來返回不重復記錄的集合,而不是用它來返回不重記錄的所有值。其原因是distinct只能返回它的目標字段,而無法返回其它字段,即上表中只能返回name1字段的所有不重復記錄集合。
-------------------------------------------------------------------------------------如果現在想查詢出表test_1中所有name1不重復的id和name1字段的記錄呢?select distinct name, id from table 結果:name1 idaaa 9 bbb 5bbb 8ccc 3ccc 4ddd 6eee 7并不是我們所想要的結果select distinct name,id from table 作用了兩個字段,也就是必須得id與name都相同的才會被排除,即返回去除table表中id和name兩個字段同時相同情況下所有集合。-------------------------------------------------------------------------------------如果現在想查詢出表test_1中所有name1不重復的所有。
在sql語句中,like所有的用法
Like的運用場合主要在模糊查詢的時候,一般以查詢字符串居多,這里據一些例子來說他的一般用法:
例1,查詢name字段中包含有“明”字的。
select * from table1 where name like '%明%'
這里不要使用*來代替,一般在使用0個或者任意個字符構成的字符串的時候最好使用%
不過在首或尾使用可以相互替換,如果在頭尾同時使用的話,就必須要使用%
例2,查詢name字段中以“李”字開頭。
select * from table1 where name like '李*'
或者
select * from table1 where name like '李%'
例3,查詢name字段中含有數字的。
select * from table1 where name like '%[0-9]%'
例4,查詢name字段中含有小寫字母的。
select * from table1 where name like '%[a-z]%'
例5,查詢name字段中不含有數字的。
select * from table1 where name like '%[!0-9]%'
補充一點,?或者_表示單個字符
SQL語句中CASE有哪些用法
在寫SQL語句時,或者是在PL/SQL中,經常需要在一個SQL語句中,根據不同的條件,有多種處理方法,如簡單例子:出售一種商品時,單價不同,折扣不同,對這種需求的處理,如果分情況處理,將會很麻煩,如果用Case語句,就可以在一條SQL語句中得到想要的結果。
首先看一下,Case的語法: case when 條件A Then 結果A When 條件B 結果B 。
else 結果N end 和Decode 不同的是,Decode 只能針對固定的值,而 Case 可以用不是固定值,需是一個條件。 現在有以下的需求,有一個字符串,最后的兩位可能是 '/R' ,'/T' 另外,有的后兩位沒有前面的'/R' ,'/T' ,現在針對不同的需要,要將 '/R' ,'/T' 取掉,沒有 '/R' ,'/T', 就不做處理。
具體字符串如下: A01JCL-A01JCL/GF117F0001TR/R SQL寫法可以如下: select (case when instr(code, '/R') > 0 then substr(code, 1, instr(code, '/R') - 1) when instr(code, '/T') > 0 then substr(code, 1, instr(code, '/T') - 1) else '0' end) from table_A t ; 使用Case時,要用括號括起來。
sql語句用法
having子句與where有相似之處但也有區別,都是設定條件的語句。
在查詢過程中聚合語句(sum,min,max,avg,count)要比having子句優先執行.而where子句在查詢過程中執行優先級別優先于聚合語句(sum,min,max,avg,count)
簡單說來: where子句:
select sum(num) as rmb from order where id>10 //只有先查詢出id大于10的記錄才能進行聚合語句
having子句:
select reportsto as manager, count(*) as reports from employees group by reportsto having count(*) > 4
通過使用GROUP BY 子句,可以讓SUM 和 COUNT 這些函數對屬于一組的數據起作用。
當你指定 GROUP BY region 時, 屬于同一個region(地區)的一組數據將只能返回一行值. 也就是說,表中所有除region(地區)外的字段,只能通過 SUM, COUNT等聚合函數運算后返回一個值.
HAVING子句可以讓我們篩選成組后的各組數據. HAVING子句在聚合后對組記錄進行篩選
而WHERE子句在聚合前先篩選記錄.也就是說作用在GROUP BY 子句和HAVING子句前
看下面這幾個例子吧:
顯示每個地區的總人口數和總面積.
SELECT region, SUM(population), SUM(area) FROM bbc GROUP BY region
先以region把返回記錄分成多個組,這就是GROUP BY的字面含義。分完組后,然后用聚合函數對每組中的不同字段(一或多條記錄)作運算。
-- 顯示每個地區的總人口數和總面積.僅顯示那些面積超過1000000的地區。
SELECT region, SUM(population), SUM(area) FROM bbc GROUP BY region
HAVING SUM(area)>1000000
SQL語句中各個連接的用法和區別
1、顯示數據庫列表。
show databases;
剛開始時才兩個數據庫:mysql和test。mysql庫很重要它里面有MYSQL的系統信息,我們改密碼和新增用戶,實際上就是用這個庫進行操作。
2、顯示庫中的數據表:
use mysql; //打開庫,學過FOXBASE的一定不會陌生吧
show tables;
3、顯示數據表的結構:
describe 表名;
4、建庫:
create database 庫名;
5、建表:
use 庫名;
create table 表名 (字段設定列表);
6、刪庫和刪表:
drop database 庫名;
drop table 表名;
7、將表中記錄清空:
delete from 表名;
8、顯示表中的記錄:
select * from 表名;
三、一個建庫和建表以及插入數據的實例
drop database if exists school; //如果存在SCHOOL則刪除
create database school; //建立庫SCHOOL
use school; //打開庫SCHOOL
create table teacher //建立表TEACHER
(
id int(3) auto_increment not null primary key,
name char(10) not null,
address varchar(50) default '深圳',
year date
); //建表結束
//以下為插入字段
insert into teacher values('','glchengang','深圳一中','1976-10-10');
insert into teacher values('','jack','深圳一中','1975-12-23');
注:在建表中(1)將ID設為長度為3的數字字段:int(3)并讓它每個記錄自動加一:auto_increment并不能為空:not null而且讓他成為主字段primary key(2)將NAME設為長度為10的字符字段(3)將ADDRESS設為長度50的字符字段,而且缺省值為深圳。varchar和char有什么區別呢,只有等以后的文章再說了。(4)將YEAR設為日期字段。
如果你在mysql提示符鍵入上面的命令也可以,但不方便調試。你可以將以上命令原樣寫入一個文本文件中假設為*,然后復制到c:\\下,并在DOS狀態進入目錄[url=file://\\mysql\\bin]\\mysql\\bin[/url],然后鍵入以下命令:
mysql -uroot -p密碼 *
注釋:將數據庫school備份到*文件,*是一個文本文件,文件名任取,打開看看你會有新發現。
sql 中 like 語句的用法
測試表.
CREATE TABLE test_like (
like_value VARCHAR(20)
);
INSERT INTO test_like
SELECT '1234567890' UNION ALL
SELECT '12345' UNION ALL
SELECT 'abca' UNION ALL
SELECT 'adcb' UNION ALL
SELECT 'abcc' UNION ALL
SELECT 'abcd' UNION ALL
SELECT 'abcde' UNION ALL
SELECT 'xyz 10% OFF' UNION ALL
SELECT 'xyz 20% OFF' UNION ALL
SELECT 'xyz_123_abc'
_ 表示僅僅匹配1個字符
SELECT
*
FROM
test_like
WHERE
like_value LIKE '1234_';
like_value
--------------------
12345
(1 行受影響)
% 表示僅僅匹配0個或多個字符
SELECT
*
FROM
test_like
WHERE
like_value LIKE '12345%';
like_value
--------------------
1234567890
12345
(2 行受影響)
使用模式匹配
SELECT
*
FROM
test_like
WHERE
like_value LIKE 'abc[ad]';
like_value
--------------------
abca
abcd
(2 行受影響)
SELECT
*
FROM
test_like
WHERE
like_value LIKE '[1a]%[5e]';
like_value
--------------------
12345
abcde
(2 行受影響)
使用 ESCAPE 定義轉義符
SELECT
*
FROM
test_like
WHERE
like_value LIKE '%!%%' ESCAPE '!';
like_value
--------------------
xyz 10% OFF
xyz 20% OFF
(2 行受影響)
SELECT
*
FROM
test_like
WHERE
like_value LIKE '%!_%' ESCAPE '!';
like_value
--------------------
xyz_123_abc
(1 行受影響)
SQL語句中Case 的用法
不用CASE WHEN 的做法。源代碼如下:
string sql="select * from CONTACTPERSON ,CUSTOMER where CONTACTPERSONID='"+strContactid+"' and *ERID=*ERID";
DataSet ds=new DataSet();
ds=*ommon(sql);
if(*[0].Rows[0]["CONTACTPERSONSEX"].ToString()=="0")
{
*[0].Rows[0]["CONTACTPERSONSEX"]="男";
}
else
{
*[0].Rows[0]["CONTACTPERSONSEX"]="女";
}
使用CASE WHEN做法。
string sql="select CUSTOMER.*,*TPERSONNAME,*TPERSONBIRTHDAY,*TPERSONPOSITION,*TPERSONDEPTNAME,";
sql+="*ONE,*,*,*CE,*DE,*Y,*,";
sql+="*OR,";
sql+="case when *TPERSONSEX = '0'then '男' when *TPERSONSEX= '1' then '女' end as CONTACTPERSONSEX from CUSTOMER ,CONTACTPERSON where CONTACTPERSONID='"+strContactid+"' and *ERID=*ERID";
可以看出這樣明顯加長了,SQL語句,這樣做有什么好處呢?不太清楚,可能會提高效率吧。大家的看法呢?
求SQL語句中每一個單詞的解釋和用法
基本的SQL語法 SELECT 。 FROM 。 WHERE 。
SELECT解釋就是查找,后邊跟的一定是一個唯一的值,可以是字段,固定值,可以是一個子查詢返回唯一的一個記錄,如果是返回FROM表中所有記錄,可以是用*來代替所有的列。
FROM是指從哪里來,FROM的后邊都是表名稱,就是SELECT的記錄的來源。也就是說,SELECT后邊跟的如果有字段,定值除外,字段一定是FROM后邊表中的字段
WHERE是指表與表之間的關聯條件,關聯條件包含的就比較多了,SQL變化最大的也是這個地方。可以是表與表之間字段的相等等條件,可以是表的字段等于一個定值,也可以是IN或者EXISTS這樣更復雜的子查詢。