1、SQL:
SQL是一门ANSI的标准计算机语言,用来访问和操作数据库系统。SQL语句用于取回和更新数据库中的数据。SQL可与数据库程序协同工作,比如MSAccess、DB2、Informix、MSSQLServer、Oracle、Sybase以及其他数据库系统。
RDBMS指的是关系型数据库管理系统。RDBMS是SQL的基础,同样也是所有现代数据库系统的基础。RDBMS中的数据存储在表(tables)中,表是相关的数据项的集合,由行和列组成。
SQL使我们有能力访问数据库,SQL是一种ANSI(美国国家标准化组织)的标准计算机语言。SQL对大小写不敏感,语句末可加分号。
2、SQL能做什么?------增删改查
面向数据库执行查询;可从数据库取回数据;可在数据库中插入新的记录;可更新数据库中的数据;可从数据库删除记录;可创建新数据库;可在数据库中创建新表;可在数据库中创建存储过程;可在数据库中创建视图;可以设置表、存储过程和视图的权限3、SQL可分为两个部分:
数据操作语言(DML):SELECT、DELETE、INSERTINTO、UPDATE数据定义语言(DDL):CREATE、DROP、ALTER4、SQLSELECT语句:
SELECT*FROMtable;SELECTLastName,FirstNameFROMPersons;5、SQLSELECTDISTINCT语句:
SELECTDISTINCTLastNameFROMPersons;
6、SQLWHERE子句:
操作符有(=、、、、=、=、BETWEEN、LIKE、IN、NULL)
SELECT*FROMPersonsWHERECity=’Beijing’;SELECT*FROMPersonsWHEREYear;7、SQLANDOR运算符:
SELECT*FROMPersonsWHERE(FirstName=’Thomas’ORFirstName=’William’)ANDLastName=’Carter’
8、SQLORDERBY子句:(顺序ASC、倒序DESC)
SELECTCompany,OrderNumberFROMOrdersORDERBYCompanyDESC,OrderNumberASC
9、SQL函数:
AVG():返回数值列的平均值,不包括null值;COUNT():返回匹配指定条件的行数;SELECTCOUNT(Store_Name)FROMStore_InformationWHEREStore_NameISNOTNULL;SELECTCOUNT(DISTINCTStore_Name)FROMStore_Information;3.MAX():返回一列中的最大值,null值不包括在计算中;
SELECTMAX(Salary)FROMStore_Information;4.MIN():返回一列中的最小值,null值不包括在计算中;
SELECTMIN(Salary)FROMStore_Information;5.SUM():返回数值列的总数(总额);
SELECTSUM(Sales)FROMStore_Information;6.FIRST():返回指定的字段中第一个记录的值;
SELECTFIRST(OrderPrice)ASFirstOrderPriceFROMOrders;7.LAST():返回指定的字段中最后一个记录的值;
SELECTLAST(OrderPrice)ASLastOrderPriceFROMOrders;8.UCASE():把字段的值转换为大写;
SELECTUCASE(LastName)ASLN,FirstNameFROMPersons;9.LCASE():把字段的值转换为小写;
SELECTLCASE(LastName)ASLN,FirstNameFROMPersons;10.MID():从文本字段中提取字符;
SELECTMID(City,1,3)ASSCFROMPersons;11.LEN():返回文本字段中值的长度;
SELECTLEN(City)ASLengthOfCityFROMPersons;12.ROUND():把数值字段舍入为指定的小数位数;
SELECTProductName,ROUND(UnitPrice,1)ASUPFROMProducts;13.NOW():返回当前的日期和时间;
SELECTProductName,UnitPrice,Now()asPerDateFROMProducts;14.FORMAT():对字段的显示进行格式化;
SELECTProductName,UnitPrice,FORMAT(Now(),YYYY-MM-DD)asPerDateFROMProducts10、SQLCONVERT()函数:
CONVERT()函数是把日期转换为新数据类型的通用函数,可以用不同的格式显示日期/时间数据。
CONVERT(data_type(length),data_to_be_converted,style)
例:CONVERT(CHAR(10),birthday,)
isnull(convert(char(10),birthday,),‘日期不详’)
如果birthday为空,则显示‘日期不详’;否则显示yyyy-mm-dd
data_type(length)规定目标数据类型(带有可选的长度);data_to_be_converted含有需要转换的值;style规定日期/时间的输出格式
11、SQLFORMAT函数:
用于对字段的显示进行格式化。SELECTFORMAT(column_name,format)FROMtable_name
例:SELECTFORMAT(Now(),’YYYY-MM-DD’)asPerDate;
12、SQLGROUPBY子句:
SELECTStore_Name,SUM(Salary)FROMStore_InformationGROUPBYStore_Name;
13、SQLHAVING子句:
SELECTStore_Name,SUM(Salary)FROMStore_InformationGROUPBYStore_NameHAVINGSUM(Salary);
14、SQLalias别名(空格):
SELECTA1.Store_NameStore,SUM(A1.Salary)‘TotalSalary’FROMStore_InformationA1GroupbyA1.Store_Name;
15、SQL表格连接(join):innerjoin
crossjoin
,
SELECTG.Region_Name,SUM(S.Sales)SALESFROMStore_InformationS,GeographyGWHERES.Store_Name=G.Store_NameGROUPBYG.Region_Name;16、SQL外部连接(outerjoin):leftjoin
rightjoin
fulljoin
SELECTG.Store_Name,SUM(S.Sales)SALESFROMStore_NameS,GeographyGWHEREG.Store_Name=S.Store_Name(+)17、SQLSUBSTRING函数:用来抓出一个栏位资料中的其中一部分。
MySQL:SUBSTR(),SUBSTRING()
Oracle:SUBSTR()
SQLServer:SUBSTRING()
例:SUBSTR(str,pos)SELECTSUBSTR(store_name,3)...不适用sqlserver,
SUBSTR(str,pos,len)SELECTSUBSTR(store_name,2,4)...
18、SQLTRIM函数:用来移除掉一个字符串中的字头或字尾,如空白格
MySQL:TRIM(),RTRIM(),LTRIM()
Oracle:RTRIM(),LTRIM()
SQLServer:RTRIM(),LTRIM()
TRIM([[位置][要移除的字符串]FROM]字符串):[位置]的可能值有LEADING、TAILING、BOTH,可将[要移除的字符串]从字符串的起头、结尾或是起头及结尾移除,如果我们没有列出[要移除的字符串]是什么的话,那空白就会被移除;
LTRIM(字符串):将所有字符串起头的空白移除;
RTRIM(字符串):将所有字符串结尾的空白移除。
例:SELECTTRIM(‘Sample‘);结果:’Sample’;
SELECTLTRIM(‘Sample’);结果:’Sample’;
SELECTRTRIM(‘Sample’);结果:’Sample’;
19、SQLUNION指令:联集,两个SQL语句所产生的栏位需要是同样的资料种类。
UNION结果去除重复记录:[SQL语句1]union[SQL语句2];UNIONALL结果保留全部记录:[SQL语句1]unionall[SQL语句2];20、SQLINTERSECT指令:交集,不同的值只会被列出一次。
[SQL语句1]intersect[SQL语句2];
21、SQLMINUS指令:
先找出第一个SQL语句所产生的结果,然后看这些结果有没有在第二个SQL语句的结果中。如果有的话,那这一笔资料就被去除,而不会在最后的结果中出现。不同的值只会被列出一次。[SQL语句1]minus[SQL语句2];
22、SQLSELECTINTO语句:可用于创建表的备份复件
SELECT*INTOnew_table_name[inexternaldatabase]FROMold_tablename;
SELECT*INTOPersons_backupFROMPersons;SELECT*INTOPersonsIN‘Backup.mdb’FROMPersons;SELECTLastName,FirstNameINTOPersons_backupFROMPersonsWHERECity=’Bj’;SELECTPersons.LastName,Orders.OrderNoINTOPersons_Order_BackupINNERJOINOrdersONPersons.ID_P=Orders.ID_P;23、SQLSubquery:在一个SQL语句中放入另一个SQL语句
SELECT“栏位1”
FROM“表格”
WHERE“栏位2”[比较运算符]
(SELECT“栏位1”
FROM“表格”
WHERE[条件]);
使用IN运算符的子查询;使用比较运算符的子查询、、=、=、=、等;使用ANY或ALL运算符的嵌套查询;ANY运算符表示至少一或某一。若s比R中至少一个值大,则sANYR为真,否则为假;若s比R中至少一个值小,则sANYR为真,否则为假。ALL运算符表示所有或每个。若s比R中每个值大,则sALLR为真,否则为假;若s比R中每个值小,则sALLR为真,否则为假。
4.使用EXISTS运算符的嵌套查询;
用来测试内查询有没有产生任何结果,如果有的话,系统就会执行外查询中的SQL,否则整个SQL语句就不会产生任何结果。
SELECT“栏位1”
FROM“表格”
WHEREEXISTS
(SELECT*
FROM“表格”
WHERE[条件])
EXISTS表示是否存在。当且仅当R为非空时,EXISTSR为真;当且仅当R为空时,NOTEXISTS为真。带有EXISTS的子查询不返回任何数据,只生成逻辑值真或假。例:查询选修了所有课程的学生学号和姓名:(不存在他没有选修的课程)
selectsnum,snamefromswherenotexists(select*fromcwherenotexists(select*fromscwheresc.snum=s.snumandsc.cnum=c.cnum));24、SQLCASE语句:作为if-then-else之类逻辑的关键字
SELECTCASE(栏位名”)
WHEN“条件1”THEN“结果1”
WHEN“条件2”THEN“结果2”
...
[ELSE“结果N”]
END
FROM“表格名”
例:selectstore_name,(casestore_name
when’LosAngeles’thensales*2
when‘SanDiego’thensales*1.5
elsesalesend)as“newsales”,date
fromstore_information;
25、SQLINSERTINTO语句:
INSERTINTOPersonsVALUES(‘Gates’,‘Bill’,‘Xuanwumen’,‘Beijing’);INSERTINTOPersons(LastName,Address)VALUES(‘Wilson’,‘Champs-Elysees’);26、SQLUPDATE语句:
UPDATEPersonsSETFirstName=‘Fred’WHERELastName=‘Wilson’;UPDATEPersonsSETAddress=‘Zhongshan23’,City=‘Nanjing’WHERELastName=’Wilson’27、SQLDELETE语句:
DELETEFROMPersonsWHERELastName=‘Wilson’;DELETE*FROMPersons;(在不删除表的情况下删除所有的行)28、SQLTOP语句:
SELECTTOPnumber
percentcolumn_name(s)FROMtable_name;
SELECTTOP5*FROMPersons;SELECTTOP50PERCENT*FROMPersons;29、MySQL中的数据类型:
数字:整数(tinyint、smallint、mediumint、int、bigint),浮点数(float、double、real、decimal)日期时间:date、time、datetime、timestamp、year字符串:字符串(char、varchar),文本(tinytext、text、mediumtext、longtext),二进制(tinyblob、blob、mediumblob、longblob)30、MySQL创建一个数据库:
createdatabasesamp_dbcharactersetgbk;(为了便于在命令提示符下显示中文,在创建时通过charactersetgbk将数据库字符编码指定为gbk。)
31、MySQL选择所要操作的数据库:
usesamp_db;
32、MySQL创建数据库表:
createtablestudents
(
idintunsignednotnullauto_incrementprimarykey,
namechar(8)notnull,
sexchar(4)notnull,
agetinyintunsignednotnull,
telchar(13)nulldefault“-“
);
33、SQL约束:约束用于限制加入表的数据的类型。
NOTNULL约束强制列不接受NULL值;UNIQUE约束唯一标识数据库表中的每条记录;例:命名unique约束,并为多个列定义unique约束:
CONSTRAINTuc_PersonIDUNIQUE(Id_P,LASTNAME);
3.PRIMARYKEY约束唯一标识数据库表中的每条记录;
例:命名primarykey约束,并为多个列定义primarykey约束:
CONSTRAINTpk_PersonIDPRIMARYKEY(ID_P,LastName);
4.FOREIGNKEY约束用于预防破坏表之间连接的动作,也能防止非法数据插入外键列,因为它必须是它指向的那个表中的值之一;
例:FOREIGNKEY(Id_P)REFERENCESPersons(Id_P);
5.CHECK约束用于限制列中的值的范围;
例:CHECK(Id_P0);
6.DEFAULT约束用于向列中插入默认值;
例:Cityvarchar()DEFAULT‘Sandnes’;OrderDatedateDEFAULTGETDATE();
34、SQLCREATEINDEX语句:在不读取整个表的情况下,更快地查找数据。
简单索引,允许使用重复的值:CREATEINDEXindex_nameONtable_name(colunm_name);
例:CREATEINDEXPersonIndexONPerson(LastNameDESC,FirstName);
2.唯一索引,两个行不能拥有相同的索引值:
CREATEUNIQUEINDEXindex_nameONtable_name(colunm_name);
35、SQLCREATEVIEW语句:
1.创建视图
CREATEVIEWview_nameAS
SELECTcolumn_name(s)
FROMtable_name
WHEREcondition;例:
CREATEVIEW[ProductsAboveAveragePrice]ASSELECTProductName,UnitPriceFROMProductsWHRERUnitPrice(SELECTAVG(UnitPrice)FROMProducts);2.更新视图:先删除,再重新创建
3.删除视图:DROPVIEWview_name;
4.查询视图:SELECT*FROMview_name;
36、SQLDROPINDEX语句:删除索引。
DROPINDEXindex_nameONtable_name;
37、操作MySQL数据库:
1.向表中插入数据:insertintostudentsvalues(NULL,“王刚”,“男”,20,“”);
insertintostudents(name,sex,age)values(“孙丽华”,“女”,21);
2.查询表中的数据:selectname,agefromstudents;
3.按特定条件查询:
select*fromstudentswheresex=女;select*fromstudentswherenamelike%王%;select*fromstudentswhereid5andage20;4.更新表中的数据:
updatestudentssettel=defaultwhereid=5;updatestudentssetage=age+1;updatestudentssetname=张伟鹏,age=19wheretel=;5.删除表中的数据:deletefromstudentswhereage20;
38、MySQL创建后表的修改:
1.添加列:altertablestudentsaddaddresschar(60);
altertablestudentsaddbirthdaydateafterage;
2.修改列名,使用change需加上数据类型:
altertablestudentschangeteltelphonechar(13)default“-”;
altertablestudentschangenamenmchar(16)notnull;
3.修改数据类型,使用alter:altertablestudentsalternamechar(10);
4.删除列:altertablestudentsdropbirthday;
5.重命名表:altertablestudentsrenameworkmates;
6.清除表格数据:truncatetablestudents;
7.删除整张表:droptableworkmates;
8.删除整个数据库:dropdatabasesamp_db;
39、SQLAUTOINCREMENT字段:
在插入新纪录时,自动地创建主键字段的值,因此在插入新纪录时,不需要为有AUTOINCREMENT字段的列规定值。
例:P_IdintNOTNULLAUTO_INCREMENT;
40、SQLDATE函数: