2022年2022年基础SQL面试题 .pdf
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《2022年2022年基础SQL面试题 .pdf》由会员分享,可在线阅读,更多相关《2022年2022年基础SQL面试题 .pdf(14页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、基础 SQL面试题规律:数字不用单引号,字符用单引号选择1. 假设有一个名为 email_table 的表,包含名字和地址两个字段, 要得到 Bill Gates 的 e_mail 地址, 你可以使用下面的查询:SELECT email from email_table WHERE name= Bill Gates2. 前面说过,查询可以在查询条件中包含逻辑运算符。假如你想读取 Bill Gates 或 Clinton总统的所有 email 地址,你可以使用下面的查询语句:SELECT email FROM email_table WHERE name= Bill Gates OR name=
2、 president Clinton(select name,email,add from name where name=zhd) 单词不完整时,默认加 3. 你可以在一个 SELECT 语句中一次取出多个字段,比如:SELECT au_fname ,au_lname, phone FROM authors 在 SELECT 语句中,你需要列出多少个字段,你就可以列出多少。不要忘了把字段名用逗号隔开。你也可以用星号(*)从一个表中取出所有的字段。这里有一个使用星号的例子:SELECT * FROM authors (SELECT * FROM NAME,NAME1) 4. 你也可以用一个 S
3、ELECT 语句同时从多个表中取出数据,只需在SELECT 语句的 FROM 从句中列出要从中取出数据的表名称即可:SELECT au_name,title FROM authors,titles,titleauthor WHERE authors.au_id=titleauthor.au_id AND titles.title_id=titleauthor.title_id 5. 要指明表 titles和表 publishers之间的关系,你只要让这两个表有一个公共的字段就可以了。在数据库pubs 中,表 titles和表 publishers都有一个名为 pub_id 的字段。如果你想得到
4、书名及其出版商的一个列表,你可以使用如下的语句:SELECT title,pub_name FROM titles,publishers WHERE titles.pub_id=publishers.pub_id 6. 在 SELECT 语句中, 你可以在缺省字段名后面仅跟一个新名字来取代它。例如,可以用一个更直观易读的名字Author Last Name来代替字段名 au_lname:SELECT au_lname Author Last Name FROM authors当这个 SELECT 语句执行时,来自字段au_lname 的值会与“ Author Last Name ”相联系。查询
5、结果可能是这样:Author Last Name White 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 14 页 - - - - - - - - - Green Carson O LearyStraight 注意字段标题不再是au_lname,而是被 Author Last Name 所取代。7. 如果你想把表 titles中的所有书的价格加倍,你可以使用下面的SELECT 语句:SELECT price*2 FROM titles 当这个查询执行时, 每本书的价格
6、从表中取出时都会加倍。但是,通过这种途径操作字段不会改变存储在表中的书价。对字段的运算只会影响SELECT 语句的输出,而不会影响表中的数据。 为了同时显示书的原始价格和涨价后的新价格,你可以使用下面的查询:SELECT price “Original price”, price*2 “New price ” FROM titles当数据从表 titles中取出时,原始价格显示在标题Original price 下面,加倍后的价格显示在标题New price 下面。结果可能是这样:original price new price 19.99 39.98 11.95 23.90 2.99 5.9
7、8 19.99 39.98 19.100 8. 你可以使用大多数标准的数学运算符来操作字段值,如加(+),减( - ),乘(*)和除( / )。你也可以一次对多个字段进行运算,例如:SELECT price*ytd_sales total revenue FROM titles在这个例子中,通过把价格与销售量相乘,计算出了每种书的总销售额。这个SELECT 语句的结果将是这样的:total revenue 81,859,05 46,318,20 55,978,78 81,859,05 40,619,68 最后,你还可以使用连接运算符(它看起来像个加号)来连接两个字符型字段:SELECT au_
8、fname+ +au_lnameauthor name FROM authors(Select au_fname+au_lname author name from authors)这个语句的执行结果将是这样的:author names Johnson White Marjorie Green Cheryl Carson Michael O LearyDean Straight 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 14 页 - - - - - - - - -
9、,(23 row(s) affected) 排序通过使用 ORDER BY 子句,你可以强制一个查询结果按升序排列,就像这样:SELECT au_lname FROM authors ORDER BY au_lname 当这个 SELECT 语句执行时,作者名字的显示将按字母顺序排列。ORDER BY子句将作者名字按升序排列。你也可以同时对多个列使用ORDER BY 子句。例如,如果你想同时按升序显示字段 au_lname 和字段 au_fname,你需要对两个字段都进行排序:SELECT au_lname,au_fname FROM authors ORDER BY au_lname ,au
10、_fname 这个查询首先把结果按au_lname字段进行排序, 然后按字段 au_fname排序。记录将按如下的顺序取出:au_lname au_fname ,.Bennet Abraham Ringer Albert Ringer Anne Smith Meander 如果你想把查询结果按降序排列,你可以使用关键字DESC 。SELECT au_lname,au_fname FROM authors WHERE au_lname=Ringer ORDER BY au_lname ,au_fname DESC 这个查询从表 authors 中取出所有名字为Ringer 的作者记录。 ORDE
11、R BY子句根据作者的名字和姓,将查询结果按降序排列。结果是这样的:au_lname au_fname ,.Ringer Anne Ringer Albert (2 row(s) affectec) 取出互不相同的值一个表有可能在同一列中有重复的值。例如,数据库pubs 的表 authors 中有两个作者的名字是 Ringer 。如果你从这个表中取出所有的名字,名字Ringer 将会显示两次。在特定情况下, 你可能只有兴趣从一个表中取出互不相同的值。如果一个字段有重复的值,你也许希望每个值只被选取一次,你可以使用关键字DISTINCT来做到这一点:SELCET DISTINCT au_lnam
12、e FROM authors WHERE au_lname=Ringer 警告:如同 ORDER BY 子句一样,强制服务器返回互不相同的值也会增加运行开销。不得不花费一些时间来完成这项工作。因此,不是必须的时候不要使用关键字 DISTINCT 。创建表在查询窗口中键入下面的SQL语句,单击执行查询按钮,执行这个语句:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 14 页 - - - - - - - - - CREATE TABLE guestbook (visitor
13、 VARCHAR(40),comments TEXT,entrydate DATETIME) 删除表和修改表1 要删除一个表,你可以使用SQL语句 DROP TABLE。DROP TABLE mytable 警告:使用 DROP TABLE 命令时一定要小心。一旦一个表被删除之后,你将无法恢复它。2如果你想清除表中的所有数据但不删除这个表,你可以使用TRUNCATE TABLE语句。TRUNCATE TABLE mytable 3虽然你不能删除和修改已经存在的字段,但你可以增加新字段。ALTER TABLE mytable ADD mynewcolumn INT NULL 注意: ALTER
14、TABLE 只允许添加可包含空值或指定了 DEFAULT 定义的列。索引(有待深入理解)对于包含索引的数据库,SQL Sever 需要一个可观的额外空间。例如,要建立一个聚簇索引,需要大约. 倍于数据大小的空间。索引有两种类型: 聚簇索引和非聚簇索引。 在聚簇索引中, 索引树的叶级页包含实际的数据: 记录的索引顺序与物理顺序相同。在非聚簇索引中, 叶级页指向表中的记录:记录的物理顺序与逻辑顺序没有必然的联系。聚簇索引非常象目录表, 目录表的顺序与实际的页码顺序是一致的。非聚簇索引则更象书的标准索引表, 索引表中的顺序通常与实际的页码顺序是不一致的。一本书也许有多个索引。例如,它也许同时有主题索
15、引和作者索引。同样,一个表可以有多个非聚簇索引。通常情况下, 你使用的是聚簇索引, 但是你应该对两种类型索引的优缺点都有所理解。每个表只能有一个聚簇索引, 因为一个表中的记录只能以一种物理顺序存放。通常你要对一个表按照标识字段建立聚簇索引。但是,你也可以对其它类型的字段建立聚簇索引,如字符型,数值型和日期时间型字段。从建立了聚簇索引的表中取出数据要比建立了非聚簇索引的表快。当你需要取出一定范围内的数据时, 用聚簇索引也比用非聚簇索引好。例如,假设你用一个表来记录访问者在你网点上的活动。如果你想取出在一定时间段内的登录信息,你应该对这个表的 DATETIME 型字段建立聚簇索引。对聚簇索引的主要
16、限制是每个表只能建立一个聚簇索引。但是,一个表可以有不止一个非聚簇索引。 实际上,对每个表你最多可以建立249 个非聚簇索引。 你也可以对一个表同时建立聚簇索引和非聚簇索引。假如你不仅想根据日期, 而且想根据用户名从你的网点活动日志中取数据。在这种情况下,同时建立一个聚簇索引和非聚簇索引是有效的。你可以对日期时间字段建立聚簇索引, 对用户名字段建立非聚簇索引。 如果你发现你需要更多的索引方式,你可以增加更多的非聚簇索引。非聚簇索引需要大量的硬盘空间和内存。另外,虽然非聚簇索引可以提高从表中取数据的速度, 它也会降低向表中插入和更新数据的速度。每当你改变了一个建立了非聚簇索引的表中的数据时,必须
17、同时更新索引。 因此你对一个表建立非聚名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 14 页 - - - - - - - - - 簇索引时要慎重考虑。 如果你预计一个表需要频繁地更新数据,那么不要对它建立太多非聚簇索引。 另外,如果硬盘和内存空间有限, 也应该限制使用非聚簇索引的数量。这两种类型的索引都有两个重要属性:你可以用两者中任一种类型同时对多个字段建立索引(复合索引);两种类型的索引都可以指定为唯一索引。1非聚簇索引: CREATE INDEX mycolumn
18、_index ON mytable (myclumn) 注意:蓝色必填,索引名字2如果你需要改变一个索引的类型,你必须删除原来的索引并重建一个。建立了一个索引后,你可以用下面的SQL语句删除它:DROP INDEX mytable.mycolumn_index 聚簇索引:可以使用关键字CLUSTERED。CREATE CLUSTERED INDEX mycolumn_clust_index ON mytable(mycolumn) (旧版本: 如果表中有重复的记录, 当你试图用这个语句建立索引时,会出现错误。但是有重复记录的表也可以建立索引;你只要使用关键字ALLOW_DUP_ROW把这一点告
19、诉 SQL Sever 即可: CREATE CLUSTERED INDEX mycolumn_cindex ON mytable(mycolumn) WITH ALLOW_DUP_ROW)3要对一个表建立唯一索引,可以使用关键字UNIQUE 。对聚簇索引和非聚簇索引都可以使用这个关键字。这里有一个例子:CREATE UNIQUE COUSTERED INDEX myclumn_cindex ON mytable(mycolumn) 4要建立一个对多个字段的索引复合索引在索引建立语句中同时包含多个字段名。下面的例子对firstname和 lastname 两个字段建立索引:CREATE IND
20、EX name_index ON username(firstname,lastname) 添加 修改 删除数据添加:向表中添加新记录INSERT mytable (first_column,second_column,third_column) VALUES ( some data, some more data , yet more data)你可以使用 INSERT语句向文本型字段中插入数据。但是,如果你需要输入很长的字符串,你应该使用WRITETEXT 语句(旧版本)。如果你在 INSERT 语句中只指定两个字段和数据会怎么样呢?换句话说,你向一个表中插入一条新记录, 但有一个字段没有
21、提供数据。 在这种情况下, 有下面的四种可能:1如果该字段有一个缺省值,该值会被使用。2如果该字段可以接受空值,而且没有缺省值,则会被插入空值。3如果该字段不能接受空值,而且没有缺省值,就会出现错误。4最后,如果该字段是一个标识字段,那么它会自动产生一个新值。当你向一个有标识字段的表中插入新记录时,只要忽略该字段, 标识字段会给自己赋一个新值。向一个有标识字段的表中插入新记录后,你可以用SQL变量identity 来访问新记录的标识字段的值。考虑如下的SQL语句:INSERT mytable (first_column) VALUES(some value )INSERT anothertab
22、le(another_first,another_second) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 14 页 - - - - - - - - - VALUES(identity,some value )如果表 mytable 有一个标识字段,该字段的值会被插入表anothertable的another_first字段。这是因为变量 identity 总是保存最后一次插入标识字段的值。 ( 查询最后一个 ) 注意:SET IDENTITY_INSERT 表名
23、Off ,当 IDENTITY_INSERT 设置为 OFF 时,不能向表book 中的标识列插入显式值。SET IDENTITY_INSERT 表名 on, 当 IDENTITY_INSERT 设置为 ON 时,必须指定表 book 中标识列的显式值。删除:要从表中删除一个或多个记录,需要使用SQL DELETE 语句。你可以给DELETE 语句提供 WHERE 子句。 WHERE 子句用来选择要删除的记录。DELETE mytable WHERE first_column= goodby OR second_column=so long 如果你不给 DELETE 语句提供 WHERE 子句
24、,表中的所有记录都将被删除。 如果你想删除应该表中的所有记录,应使TRUNCATE TABLE语句。当你使用 TRUNCATE TABLE 语句时,记录的删除是不作记录的。也就是说,这意味着TRUNCATE TABLE 要比 DELETE 快得多。修改:要修改表中已经存在的一条或多条记录,应使用SQL UPDATE 语句。同DELETE 语句一样, UPDATE 语句可以使用 WHERE 子句来选择更新特定的记录。UPDATE mytable SET first_column=Updated! Second_column= Updated! Third_column= Updated! WHE
25、RE first_column=Update Me1如果你不提供 WHERE 子句,表中的所有记录都将被更新。注意:你可以对文本型字段使用UPDATE 语句。但是,如果你需要更新很长的字符串,应使用 UPDATETEXT语句。Insert和 select 、update 有一个方法可以使INSERT 语句一次添加多个记录。INSERT mytable (first_column,second_column) SELECT another_first,another_second FROM anothertable WHERE another_first= Copy Me!这个语句从 anoth
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年2022年基础SQL面试题 2022 基础 SQL 试题
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内