一、基礎Sql陳述句
1、創建資料庫:Create DataBase dbName;
2、洗掉資料庫:Drop DataBase dbName;
3、創建新表: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;
4、洗掉新表:Drop Table tabName;
5、為表增加一列:Alter Table tabName add column col type;
6、為表添加主鍵與洗掉主鍵:添加主鍵:Alter Table tabName add primary key(col);
洗掉主鍵:Alter Table tabName drop primary key(col);
7、為表創建和洗掉索引:創建索引:Create [unique] index indexName on tabName(col ....)
洗掉索引:Drop index indexName;
8、創建和洗掉視圖:創建視圖:Create view viewName as Select statement;
洗掉視圖:Drop view viewName;
9、基本的sql陳述句: 查詢:Select * from Table where 范圍;Select * from Table where field1 like ‘%value1%'(模糊查詢)
插入:Insert into Table(field1,field2,...) values(value1,value2,.....);
洗掉:Delete from Table where 范圍;
· 更新:Update Table set field1=value1 where 范圍;
排序:Select * from Table order by field1 Desc【降序】| Asc【升序】;
總數:Select count as TotalCount from Table ;
求和:Select sum(field1) as sumVaule from Table;
平均:Select avg(field1) as avgValue from Table;
最大:Select max(field1) as maxValue from Table;
最小:Select min(field1) as minVaule from Table;
10、Sql中的幾個高級查詢運算詞:
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),不消除重復行,
注:使用運算詞的幾個查詢結果行必須是一致的,
11、使用表連接:
(1)內連接(Inner Join):Inner Join TableName ON condition;
(2)不等值連接:不等值連接即為在連接的條件中可以使用小于(<)、大于(>)、不等于(<>)等運算子,而且還可以使用LIKE、BETWEEN AND等運算子,甚至還可以使用函式,示例:Select field1,field2 from table1 Inner Jion table2 on table1.field1=table2.field1 where table1.field3<table2.field4
(3)交叉連接:隱式:Select t1.field1,t2.field3 from table1 as t1,table2 as t2;
顯式:Select t1.field1,t2.field3 from table1 as t1 cross Jion table2 as t2;
(4)外連接:A:Left outer Join (左外連接(左連接):結果集既包括連接表的匹配行,也包括左連接表的所有行);
B:Right outer Join (右外連接(右連接):結果集既包括連接表的匹配連接行,也包括右連接表的所有行);
C:Full outer Join(全外連接:不僅包括符號連接表的匹配行,還包括兩個連接表中的所有記錄);
12、使用分組Group by:
示例:Select 類別,摘要,sum(field2) as sumValue from tableName Group by 類別;
注:一張表,一旦分組完成后,查詢后只能得到組相關的資訊,組相關的資訊:(統計資訊) count,sum,max,min,avg 分組的標準);在SQLServer中分組時:不能以text,ntext,image型別的欄位作為分組依據;在select統計函式中的欄位,不能和普通的欄位放在一起,在使用Group by實作分組時,如果有where過濾條件,必須寫在Group by之前,
13、Having的使用:
如對部分分組進行過濾,就需要用到Having,因為聚合函式不能再Where陳述句中使用,所以得使用Having來代替,
注:使用Having子句時,其應位于Group by之后,并且Having陳述句中不能包含未分組的列名,
二、復雜Sql陳述句
1、復制表(僅復制表結構):Select * into b from a where 1<>1;Select top 0 * into b from a;
2、拷貝表(拷貝資料):Insert into b(a,b,c) Select d,e,f from a;
3、子查詢:
SELECT 陳述句可以嵌套在其他陳述句中,比如 SELECT,INSERT,UPDATE 以及 DELETE 等,這些被嵌套的 SELECT 陳述句就稱為子查詢,可以這么說當一個查詢依賴于另外一個查詢結果時就可以使用子查詢,子查詢有兩種型別,一種是只回傳一個單值的子查詢,這時它可以用在一個單值可以使用的地方,這時子查詢可以看作是一個擁有回傳值的函式;另外一種是回傳一列值的子查詢,這時子查詢可以看作是一個在記憶體中臨時存在的資料表,
(1)單值子查詢:
單值子查詢的語法和普通的 SELECT 陳述句沒有什么不同,唯一的限制就是子查詢的回傳值必須只有一行記錄,而且只能有一個列,這樣的子查詢又被稱為標量子查詢,標量子查詢可以用在 SELECT 陳述句的串列中、運算式中、WHERE 陳述句中等很多場合, (2)列值子查詢: 與標量子查詢不同,列值子查詢可以回傳一個多行多列的結果集,這樣的子查詢又被稱為表子查詢,表子查詢可以看作一個臨時的表,表子查詢可以用在 SELECT 陳述句的 FROM子句中、INSERT 陳述句、連接、IN 子句等很多場合, (3)SELECT 串列中的標量子查詢: 示例: SELECT field1,fileld2, ( SELECT MAX(field3) FROM Table2 WHERE Table2. field1= Table1.field1 ) FROM Table1 (4)WHERE 子句中的標量子查詢: 示例: SELECT field2 FROM Table1 WHERE field1= ( SELECT field1 FROM Table2 WHERE field2='Story' ) (5)集合運算子與子查詢: 如果子查詢是多行多列的表子查詢,那么可以將其看成一個臨時的資料表使用,而如果子查詢是多行單列的表子查詢,這樣的子查詢的結果集其實是一個集合,SQL 提供了對這樣的集合進行操作的運算子,包括 IN、ANY、ALL 以及 EXISTS 等,
IN運算子示例:
SELECT * FROM T_Reader
WHERE FYearOfJoin IN
(
select FYearPublished FROM T_Book
)
ANY運算子示例: SELECT * FROM T_Reader
WHERE FYearOfJoin =ANY
(
select FYearPublished FROM T_Book
) All運算子示例: SELECT * FROM T_Book WHERE FYearPublished<ALL ( SELECT FYearOfJoin FROM T_Reader ) EXISTS運算子示例: SELECT * FROM T_Book WHERE EXISTS ( SELECT * FROM T_Reader WHERE FProvince='ShanDong' ) (6)在其他型別 SQL 陳述句中的子查詢應用: A、子查詢在 INSERT 陳述句中的應用示例: INSERT INTO T_ReaderFavorite2(FCategoryId,FReaderId) SELECT FCategoryId, (CASE WHEN FReaderId<=10 THEN FReaderId ELSE FReaderId- FCategoryId END ) FROM T_ReaderFavorite B、子查詢在 UPDATE 陳述句中的應用示例: UPDATE T_Book SET FYearPublished= (SELECT MAX(FYearPublished) FROM T_Book) C、子查詢在 DELETE 陳述句中的應用示例: DELETE FROM T_Book b1 WHERE ( SELECT COUNT(*) FROM T_Book b2 WHERE b1. FCategoryId=b2. FCategoryId )>3
4、between的用法:Select * from tableName where time between time1 and time2;
Select a,b,c from tableName where a not between 數值1 and 資料2;
注:between限制查詢資料范圍時包括了邊界值,not between不包括;
5、兩張關聯表,洗掉主表中已經在副表中沒有的資訊:Delete from table1 where not exists (Select * from table2 where table1.field1=table2.field2);
6、四張表聯合查詢: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 ....
7、查詢前十條資料:Select top 10 * from TableName where 范圍;
8、隨機取出十條資料:Select top 10 * from TableName order by newid();
9、選擇在每一組b值相同的資料中對應的a最大的記錄的所有資訊:Select a,b,c from table1 as t1 where a=(Select max(a) from table2 as t2 where t1.b=t2.b);
10、包括所有在 TableA 中但不在 TableB和TableC 中的行并消除所有重復行而派生出一個結果表:(select a from tableA ) except (select a from tableB) except (select a from tableC)
11、列出資料庫里所有的表名:select name from sysobjects where type='U' // U代表用
12、列出表里的所有的列名:select name from syscolumns where id=object_id('TableName')
13、洗掉表中的重復記錄:(1)Delete from TableName where id not in (Select max(id) from TableName group by col1,col2 ......);
(2)Select distinct * into temp from TableName
delete from TableName
insert into Tablename seletct * from temp
(3)alter table tablename
--添加一個自增列
add column_b int identity(1,1)
delete from tablename where column_b not in(
select max(column_b) from tablename group by column1,column2,...)
alter table tablename drop column column_b
14、一條sql陳述句實作資料庫分頁:(1)Select top num * from TableName
where field1>(Select max(field1) from (Select totalNum field1 from TableName order by fireld1) A)
order by field1
(2)Select * from (Select row_number() over (order by field1) rownumber,* from TableName) A
Where rownumber between startNum And [start+count-1];
注:有關sql查詢分頁的內容可以參考博客(https://www.cnblogs.com/zcttxs/archive/2012/04/01/2429151.html),這里不再贅述,
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/3178.html
標籤:SQL Server
