記錄日常用到的SQL語句寫法及用法數據庫
SQL server數據庫設計
基礎用法部分:ide
1.添加字段函數
ALTER table [TableName] add [字段名稱] 字段類型 ; ALTER table [sale_plan] add addr_no nvarchar(50) null ;
2. 刪除字段工具
--刪除 "Person" 表中的 "Birthday" 列 ALTER TABLE Person DROP COLUMN Birthday ;
3. 更改字段類型spa
ALTER TABLE Persons ALTER COLUMN Name nvarchar(50)
4. 建立表設計
CREATE TABLE Persons ( Id_P int IDENTITY(1,1) NOT NULL, --主鍵自增 LastName varchar(255) NOT NULL, --不爲空 FirstName varchar(255), Address varchar(255), City varchar(255) )
5. 插入數據3d
--語法 --INSERT INTO 表名稱 VALUES (值1, 值2,....) --INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....) INSERT INTO Persons VALUES ('Gates', 'Bill', 'Xuanwumen 10', 'Beijing')
6. 更新字段的值帶有單引號時 ' 的處理方式 code
update tableA columns1 = 'M''s ABC' where id = 1 ; -- columns1的值在數據庫中顯示爲: M's ABC
7. 查詢出一個表的數據插入到另一張表server
select * into destTbl from srcTbl ; insert into destTbl(fld1, fld2) select fld1, 5 from srcTbl ; --以上兩句都是將 srcTbl 的數據插入到 destTbl,但兩句又有區別的: --第一句(select into from)要求目標表(destTbl)不存在,由於在插入時會自動建立。 --第二句(insert into select from)要求目標表(destTbl)存在,因爲目標表已經存在,因此咱們除了插入源表(srcTbl)的字段外,還能夠插入常量,如例中的:5。
8. 不肯定字段查詢和更新
1 select * from where 1=1 ; 2 3 update Table set columu1=column1 ... where ... ;
9.SQL Server 分頁;
//若搜索則重新生成rownum (當前生成的rownum不能做爲where後面的條件)
SELECT T.* FORM( select ROW_NUMBER() OVER(ORDER BY A.createDate asc ) AS sortNum,A.* from TableA where 1=1) T where T.sortNum> 10 and T.sortNum <=11;
10. SQL Server 插入長文本;
注意:SQL自己是沒有限制長度的,插入數據後,使用select 查詢出來,直接複製vnarchar(max)字段,是複製不全的,須要導出到*.csv文件中才能查看到完整的值;
ALTER TABLE WriteBackDataLog ALTER COLUMN Payload varchar(MAX);
以下圖,copy不出完整payload字段的值,save results as 可將完整的數據導出來!
11. 添加主鍵:
alter table Scrap_Info add id numeric(18,0) identity(1,1)
12. SQL Server Management Studio 修改表字段順序
在 Microsoft SQL Server Management Studio 中:
a). 工具->選項->Designers->表設計器和數據庫設計器->將「阻止保存要求從新建立表的更改」的選項的勾去掉。
b). 右鍵單擊你要更改的數據表,點選「設計」,而後在表設計器中用鼠標拖動各列的位置,最後保存便可。
經常使用部分:
1.查詢當前時間: select GETDATE() ;
2.查詢非表字段寫法:
select columns1, columns2, '' as otherColumns , 123 as tempColumns from Table ;
3. distinct 用法,distinct 必須用在select 後面的第一個位置, distinct後面出現的字段也會去重(columnsA的值相同,columnsB不一樣會做爲結果分別查出來 );
select distinct columnsA , columnsB from Table ;
4.字段爲空 ISNULL()函數的使用
--查詢出姓名爲空的記錄 select * from Person where ISNULL(name,'') ='' ;
5. case when
6.having 在 SQL 中增長 HAVING 子句緣由是,WHERE 關鍵字沒法與合計函數一塊兒使用。
--查找訂單總金額少於 2000 的客戶 SELECT Customer,SUM(OrderPrice) FROM Orders GROUP BY Customer HAVING SUM(OrderPrice)<2000
7.left join
左連接,作表所有顯示,無論右表有沒有匹配項; 左表的一條記錄,好比右表有2條知足on的匹配條件,就會出現2條記錄。
select tableA.*,tableB.addr tableA left join tableB on tableA.addrID=tableB.addrID where tableA.id=1;
(tableA爲學生表,tableB爲地址表,tableA中的addrID在tableB裏有兩個相同的addrID,則查詢結果就會出現一個學生對應兩個地址,出現兩條查詢結果)
8. inner join
若是表結果以下: inner join 第二表中on的條件中有兩條匹配項,查詢結果就會出現兩條記錄;注意不能join後使用group by 來統計數量,這個統計出來的數據是錯誤的。
以下:若是先join 再統計,顯然統計錯誤;應該先統計出來後,再匹配過濾 select name,sum(quality) from Lw_T1 group by name ;
9. SQL拼接字段的值