数据库

首页 » 常识 » 问答 » 马上就要面试了,SQL基础复习起来
TUhjnbcbe - 2025/1/2 19:05:00
北京哪家医院治疗白癜风最权威 https://wapjbk.39.net/yiyuanfengcai/video_bjzkbdfyy/

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函数:

1
查看完整版本: 马上就要面试了,SQL基础复习起来