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 香水信息表.香水編號_外鍵=商場專櫃銷售情況表.香水編號_外鍵 (顯示商場專櫃銷售情況表所有記錄)