SQL SERVER 基本操作語句



Sql 是一種結構化的查詢語言;
Sql是一種數據庫查詢和程序設計語言,用於存取數據以及查詢、更新和管理‘關系型數據庫’系統;
Sql對大小寫不敏感;
Sql不是數據庫,是行業標准,是結構化的查詢語言



Int
Char(30)—字段中只能接受30個英文字母或15個中文
Varchar(30)

1)經常變化的字段用varchar;
2)知道固定長度的用char;
3)盡量用varchar;
4)超過255字節的只能用varchar;

 

數值:int類型(整數類型);
所有字符串都要用單引號;


Sql語句:
1、 create database database_name; --創建數據庫
2、 use database_name; --引用數據庫
3、 create table table_name(列名1 數據類型,,
  列名2 數據類型,…..
  列名n 數據類型); --創建表
4、 select * from 表名; --查看表內所有列的信息
  select 列名1,列名2 from 表名;
  select語句用於從表中選取數據。
5、 約束:not null
  Unique 唯一約束 --沒有冗余數據
  Primary key –必須包含唯一的值,主鍵列不能包含null值
6、 drop table table_name; --刪除表
7、 insert into 表名 values(值1,值2…); --值與列必須要一一對應
  insert into 表名 (列1,列2…)values (值1,值2…);
8、AS --為列名和表名別名
  Select 列名 as 新列名 from 表名;--列名別名
9、 where --條件語句
  select 列名 from表名 where列 (運算符)=‘值’;
10、單行注釋 --
  多行注釋 /*….*/
11、修改數據結構
  1)alter table 表名 alter column 列名 數據類型; --修改數據結構(修改列的屬性)
  例:alter table 表名 alter column country varchar(250);
  alter table 表名 alter column country varchar(250) null;
  2)alter table 表名 add constraint 約束名 unique(列的約束);
  Alter table 表名 drop constraint 約束名;
  3)alter table 表名 add column 列名 數據類型;
  4)alter table 表名 drop column 列名;
12、數據的修改、更新
  Update 表名 set 列名=新值where 列名=某值;
13、 1)between…and…
  Select 列名from表名 where 列名 between 值1 and 值2;
  Select 列名from表名 where 列名 between ‘字符串1’ and ‘字符串2’;
  2)Not between…and…
14、 1)like --模糊查詢
  僅和where搭配使用,通配符“%”僅和like連接使用
  Select 列名 from 表名 where 列名 like ‘n%’/ ’%n%’ / ’%n’
  2)Not like
15、 and or
  1)and和or運算符用於基於一個以上條件對記錄進行過濾;
  2)and 和or 可在where子語句中把兩個或多個條件結合在一起;
  3)若兩個條件都成立,則and運算符顯示一條記錄;
  4)如果兩個條件只要有一個成立,則or運算符顯示一條記錄;
  5)and 和or在sql語句中的位置不分先后順序,查詢結果皆一致;
  6)執行規則:先計算and運算符在計算or運算符;
16、in

  1)在一個集合里面,用()包含,查詢的列放在括號里,用逗號隔開
  2)字符串類型加單引號;-- 允許在where子句中規定多個值
  3)不能跟匹配符連用;
  Select 列名 from表名where列名 in(值1,值2,….);
17、distinct --只支持單列
  Select distinct(列名)from 表名;
18、order by --排序 多個條件時,先滿足第一列的條件
  1)用於根據指定的列對結果集進行排序
  2)默認升序對記錄進行排序—asc
  3)降序—desc
  4)字母,數字都可以隨意進行升降排序
  5)允許多個列的排序,但是排序優先級由左到右
19、top --規定要返回的記錄的數目
  1)top 6 –前6
  2)top 6 desc –倒數6位
  3)top 50 percent --前半部分
  4)top50 percent desc—后半部分
20、delete --刪除數據(刪除表中的某行或所有行)
  --只能刪除整行的數據,無法刪除指定單元格數據。
  Delete from 表名 where 列名=值;
21、identity --自增長
  例:id int identity
  Id int identity(1000,1)
22、check約束
  --用於限制列中的值的范圍
  Create table 表名 (姓名 VARCHAR (100) ,
  年齡 INT CHECK ( 年齡 >= 18 AND 年齡 <= 30 ), -- 這里不能用OR
  性別 CHAR(4) CHECK (性別 = '男' OR 性別 = '女') -- 這里不能用AND
  );
23、default 約束 --用於向列中插入默認值
  如果不再為具有default約束的列額外進行值輸入的話,則自動填入默認值;反之,則填入所輸入的值;
  例:CREATE TABLE INSERT_DEFAULT_EXAM_DATE
  (
  Id INT PRIMARY KEY IDENTITY ,
  姓名 VARCHAR(100) NOT NULL ,
  考試時間 DATE DEFAULT '2018-05-20'
  );
24、check和default約束的區別
  1)check約束強制只能對含此約束的列輸入約束的值;
  2)default 約束比較自由,如果輸入了值,則生效;如果(允許)不輸入值,則使用設定的默認值並將其插入表中的列。
25、null --必須使用is null和 is not null
  1)select * from 表名 where 列名 is null;(列名為空時,查看信息)
  2) select * from 表名 where 列名 is not null;(列名不為空時,查看信息)
26、用於計算和計算的內建函數
  1)sum
  2)Avg --返回數值列的平均值/null值不包括在計算中
  Select avg(列名)from 表名;
  例:SELECT 姓名 FROM 軟件測試考試分數表_重制版
  WHERE QTP得分 > (SELECT AVG(QTP得分) FROM 軟件測試考試分數表_重制版);

27、isnull --用於規定如何處理NULL值
  例:select 姓名,(測試理論得分+isnull(sql得分,0)+QTP得分+Selenium得分)as 各科考試總分 from 表名 where 列名=值;
28、1)max()--返回一列中的最大值
  Select max(列名)from 表名;
  例:select max(QTP得分)as QTP最高得分 from 表 where 班級=‘一班’;
  2)Min()--返回一列中的最小值
  Select min(列名)from 表名;
  例:select name from 表 where SQL得分= (select min(SQL得分)from 表);
  3)Sum() --返回數值列的總數 只針對於數字類型進行求和
  Select sum(列名) from 表名;
  4)Avg()
  注:max和min也可用於文本列,以獲得按字母順序排列的最高或最低值。
29、count --計數 返回匹配指定條件的行數
  1)Select count(*)from 表名;--返回表中的記錄數
  例1:select count(*) from 表; --查詢表中所有記錄
  2)Select count(列名)from 表名; --返回指定列的值的數目
  例2:select count(name) as 一班的學生數from 表 where 班級=‘一班’;
  -- 對指定列進行計數
  3)select count (distinct 列名)from 表名; --返回指定列的不同值的數目
  例3: select count(distinct 班級)from 表;--顯示不重復的記錄
  唯一鍵—distinct
30、len –長度 --返回文本字段中值的長度 length
  Select len(列名) from 表名;
  例1:select len(考點)as 考點的長度 from 表 where name =‘張三’;
31、無關聯性多表查詢
  1)select * from (SELECT 姓名, QTP得分 FROM 軟件測試考試分數表_重制版
  WHERE QTP得分 > (SELECT AVG(QTP得分) FROM 軟件測試考試分數表_重制版)) AS 臨時表1,
  (SELECT AVG(QTP得分) AS QTP考試平均分 FROM 軟件測試考試分數表_重制版) AS 臨時表2;
  2)SELECT 臨時表1.姓名, 臨時表1.QTP得分, 臨時表2.QTP考試平均分 FROM
  (SELECT 姓名, QTP得分 FROM 軟件測試考試分數表_重制版
  WHERE QTP得分 > (SELECT AVG(QTP得分) FROM 軟件測試考試分數表_重制版)) AS 臨時表1,
  (SELECT AVG(QTP得分) AS QTP考試平均分 FROM 軟件測試考試分數表_重制版) AS 臨時表2;
  例1:--查詢學生姓名和qtp得分,並將qtp平均分顯示出來
  Select * from (select name,QTP得分 from 表名 where QTP得分 >(select avg(QTP得分) as 平均分 from表)) as table1,(select avg(QTP得分)as 平均分 from表) as   table2;
32、1)foreign Key (約束)references --可添加多個外鍵約束
  --一個表中的foreign key指向另一個表中的primary key。
  --外鍵只能連接你想連的那張表的主鍵(一般id為主鍵)
  例:CREATE TABLE 班級表
  (Class_Id INT PRIMARY KEY,
  班級 VARCHAR(10) NOT NULL
  );
  CREATE TABLE 學生表
  (Student_Id INT PRIMARY KEY,
  姓名 VARCHAR(10),
  Student_Class_Id INT FOREIGN KEY REFERENCES 班級表(Class_Id)
  );
  2)增加單個外鍵約束
  例1:alter table 學生表 add foreign key (student_class_id)references 班級表(class_id);
  3)增加多個約束
  例2:alter table 學生表 add constraint 約束名 foreign key(student-class_id) references 班級表(class_id);
  4)撤銷約束
  例3:alter table 學生表 drop constraint 約束名;
  例4:select * from 班級表,學生表 where 班級表.class_id=學生表.student_class_id;
33、group by
  --合計函數(例sum,max,min,len)常常需要添加group by語句
  1)單個列進行分組
  Select 列名,合計函數(列名)from 表名 where…group by 列名;
  例:select 商場專櫃,sum(銷售價格) as 情人節當天的香水總銷售額
  From 表名 where 銷售時間=‘2018-02-14’group by 商場專櫃 order by 情人節當天的香水總銷售額 desc;
  2)多個列進行分組
  例: select 銷售時間,商場專櫃,sum(銷售價格)as 專櫃當天的香水總銷售額 from 表
  Group by 銷售時間,商場專櫃
  Order by 銷售時間 desc,商場專櫃 asc;

34、1)group by ….having…
  例1:select 商場專櫃,sum(銷售價格) as 總銷售額 from 表
  Group by 商場專櫃 having sum(銷售價格)>600 order by 總銷售額 desc;
  例2:select 商場專櫃,銷售時間,sum(銷售價格) as 銷售總額 from 表
  Group by 商場專櫃,銷售時間 having sum(銷售價格)>500 order by 銷售總額 desc;
  2)where也可以在group by 中使用
  例1:Select 商場專櫃,sum(銷售價格) from 表 where 銷售時間=‘ 2018-02-14’ group by 商場專櫃 having 銷售價格>500
  Order by sum(銷售價格)desc;
  例2:select top 1 香水編號_外鍵,count(香水編號_外鍵)from 表 where 銷售時間=‘2018-02-14’ group by香水編號_外鍵 order by count(香水編號_外鍵)desc;
  例3:select 商場專櫃,銷售時間,count(香水編號_外鍵) as 香水銷量 where 銷售時間 in(‘2018-02-14’,‘2018-03-14’) and len(香水編號_外鍵)<=4 from 表 Group by   銷售時間 order by count(香水編號_外鍵) desc;
35、連接
  1)內連接—(inner )join --通過主鍵和外鍵進行連接
  --表之間有匹配數據(主鍵和外鍵的匹配)就查詢到,沒有匹配數據就查詢不到,找出兩表中關聯相等的行。
  select * from 表1 inner join 表2 on 表1.A=表2.A;
  例1:select 商場專櫃,銷售時間,所屬品牌,香水名稱,銷售價格 from 香水信息表 inner join 商場專櫃銷售情況表 on 香水信息表.香水編號_外鍵=商場專櫃銷售情況表.香水  編  號_外鍵 order by 商場專櫃 asc,銷售時間 desc;
  2)左連接 --left join
  --從左表那里返回所有的行,即使在右表中沒有匹配的行
  Select 列名 from 表1 left join 表2 on 表1.A =表2.A and 其他條件;
  例:select * from香水信息表 left join商場專櫃銷售情況表 on 香水信息表.香水編號_外鍵=商場專櫃銷售情況表.香水編號_外鍵 (顯示香水信息表所有記錄)
  3)右連接 --right join
  --右表返回所有行,即使在左表中沒有匹配的行
  Select 列名 from表1 right join 表2 on 表1.A=表2.A.
  例:select * from香水信息表 right join商場專櫃銷售情況表 on 香水信息表.香水編號_外鍵=商場專櫃銷售情況表.香水編號_外鍵 (顯示商場專櫃銷售情況表所有記錄)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM