第五章 SQL结构化查询语言
是本课程的重点,要在熟悉语句的语法框架的前提下,灵活地写出实现实际需求的SQL语句。本章的每个例子,都要在附录Student数据库上加以上机练习与变换。
~2 Select语句
SQL语句不区分大小写
本章的SQL语句可在查询分析器(推荐)、企业管理器SQL窗口里编辑、执行。
从数据库中检索行,并允许从一个或多个表中选择一个或多个行或列。语句格式
SELECT [all| distinct ]select_list [INTO new_table ] FROM table_source [ WHERE search_condition ] [ GROUP BY group_by_expression [ HAVING search_condition ] ] [ ORDER BY order_expression [ ASC | DESC ] ]
整个SELECT语句的含义是:根据WHERE子句的筛选条件表达式,从FROM子句指定的表中找出满足条件记录,再按SELECT语句中指定的字段次序,筛选出记录中的字段值构造一个显示结果表。
若有GROUP子句,则将结果按<分组表达式>的值进行分组,该值相等的记录为一个组。若GROUP子句带HAVING短语,则只有满足指定条件的组才会显示输出。
若有ORDER BY子句,则最终的结果按照子句中指定的列(asc升序、desc降序)排好序后显示出来。
提示:SELECT语句操作的是记录(数据)集合(一个表或多个表),而不是单独的一条记录。语句返回的也是记录集合(满足Where条件的),即结果表或结果集(ResultSet)。
只有order by子句可以使用列序,别的(where、group by、pute by 子句)都不可以。
2
基于单表的查询
查询表中指定的字段
在结果表中,字段是按照SELECT子句后的各个字段的顺序显示。
SELECT子句后的各个字段的先后顺序可与原表中的顺序不一致。如无特别需要,最好“照搬”表定义时的字段顺序,以减少运算代价。另,详细列出要查的个别字段,而不是“所有”字段,本质上也是为了提高结果的针对性、减少运算代价。
例5-1:查看学生姓名、性别、住址:select student_name,student_sex,address from student_info
通配符*
表示要显示表的所有字段。
例5-2:查看student_info表的所有信息: select * FROM student_info
使用单引号在结果集中加入字符串
在选择列表中,在一字段的前面加一个单引号串,在结果集中每行都会出现该串,可起一个说明作用。(这与起别名不同,显然会人为地让结果集增大,在应用系统中极少这样做,只是在利用DBMS界面里写SQL时偶尔用用。)
例5-3:select student_name, '家庭住址',address from student_info
使用别名
在结果表的标题行所在列上显示更易读的文字。方法:
写Select子句的选择列表时,字段名称[as] 别名或别名=字段名称
别名也可用引号括起来。但别名以数字开头时,必须加单引号。
例5-3:select student_name, address 家庭住址 from student_info
3
显示表达式的值
select语句的选择列表也可是算术表达式、函数等。
select getdate() 返回当前服务器时间(返回类型是:datetime类型)。
select cast(year(getdate()) as char(4))+'年'+cast(month(getdate()) as char(2))+'月'+cast(day(getdate()) as char(2))+'日'
例5-5: select student_name,year(getdate())-year(born_date) 年龄 from student_info
使用distinct 消除重复的记录
例5-6查询所有学生所属班级的班号:select distinct class_no from student_info
使用where子句查询特定条件的记录
条件表达式可是关系(大、小、等)、逻辑(not、and、or)、特殊表达式及其混合。
条件表达式:<、<=、=、>=、>、!=(不等于也可写成<> )
数值、字符串(日期)都可以比较。例5-7、5-8:1980年以后:born_date>’1980-12-31’
逻辑表达式:not 非、and 且、or 或。例5-9~11。
特殊表达式:
通配符:%:任意多个字符;-:任意单个字符(有的DBS规定
SQL结构化查询语言 来自淘豆网m.daumloan.com转载请标明出处.