SQL必知必会笔记.docx
了解SQL
数据库是一个以某种有组织的方式存储的数据集合
保存有组织的数据的容器〔通常是一个文件或是一组文件〕
数据库软件应成为数据库管理系统DBMS
表某种特定类型数据的结构化清单
模式〔schema〕关于数据库和表的布局及特性的信息
列〔Colomn〕表中的一个字段。所有表都是由一个或是多个列组成的。
数据类型〔datatype〕所容许的数据的类型。每个表列都有相应的数据类型,他限制〔或容许〕该列中存储的数据。
行
表中的一个记录
主键〔primarykey〕一列或者一组列,其值能够唯一标识表中的每个行
唯一标识表中每行的这个列〔或这组列〕称为主键。主键用来表示一个特定的行。没有主键,更新或删除表中特定行很困难,因为没有平安的方法保证只涉及相关的行。
表中任何列都可以作为主键,只要满足〔1〕任意两行都不具有相同的主键值〔2〕每个行都必须具有一个主键值〔主键列不允许NULL值〕〔3〕主键列中的值不允许修改或更新〔4〕主键值不能重用,即某列从表中删除,它的主键不能赋给以后的新行。
第三章按多个列排序
子句〔clause〕sql语句由子句构成,有些子句是必须的,而有的是可选的。一个子句通常由一个加上所提供的数据组成。
子句的例子有SELECT语句的FROM子句
ORDERBY子句的位置
在指定一条ORDERBY子句时,应保证它是SELECT语句中最后一条子句。该子句的次序不对将会出现错误消息。
按多个列排序
执行多个列排序命令前可以发现同样的工资的人名不是按字典序排列的执行以后~~~
执行多个列排序命令前可以发现同样的工资的人名不是按字典序排列的
执行以后~~~撒花~~
按列位置排序
selectFIRST_NAME,salary
fromemployees
orderbysalary,FIRST_NAME;
等价于
selectFIRST_NAME,salary
fromemployees
orderby2,1;
Orderby默认为升序排序
而orderbysalaryDESC为降序排序
DESC关键字只直接应用到位于其前面的列名
ORDERBYsalaryDESC,FIRST_NAME;
在SELECT语句中,数据根据WHERE子句中指定的搜索条件进行过滤。
WHERE子句在表名〔FROM子句〕之后给出,如下所示:
WHERE子句操作符
=!=!!==
BETWEEN在指定两个值之间
ISNULL为NULL值
单引号用来限定字符串,如果将值与串类型的列进行比拟,那么需要限定引号
范围检查
BETWEEN操作符
Wheresalarybetween12000and15000;
在创立表时,表设计人员可以指定其中的列是否可以不包含值。在一个列不包含值时,称其为包含空值NULL。
第五章高级过滤数据
只检索所需数据需要指定检索条件〔searchcriteria〕,搜索条件也成为过滤条件〔filtercondition〕
操作符〔operator〕
ANDOR
INoperator
用来指定条件范围,范围中的每个条件都可以进行匹配
IN取合法值的由逗号分隔的清单,全都括在圆括号里。
WHEREsalaryIN(12000,13000,14000)
IN最大的优点就是可以包含其他SELECT语句,使得能够更动态地建立WHERE子句。
作为子查询的SELECT语句只能查询单个列。企图检索多个列将返回错误。
具体见11章
E.g.
SELECTcust_id
FROMOrders
WHEREorder_numIN(SELECTorde_num
FROMOrderItems
WHEREprod_id=‘RGAN01’;)
NOT
WHERE子句的NOT操作符有且只有一个功能,就是否认它之后的所有的条件
WHERENOTsalary=12000;
第六章用通配符进行过滤
LIKE操作符
前面介绍的所有操作符都是针对值进行过滤的
但是怎样搜索产品名种包含文本beanbag的所有产品?
使用通配符〔wildcard〕
搜索模式〔searchpattern〕由字面值,通配符或两者组合够曾的搜索条件
通配符本领是SQL的WHERE子句中有特殊含义的字符,SQL支持几乎几种通配符
LIKE指示DBMS,后跟的搜索模式利用通配符匹配而不是直接相等匹配进行比拟
LIKE是谓词〔predicate〕?????
?????
百分号通配符%
%表示任何字符出现的任意次数。
%还能匹配0个字符~~~
例如为了找出所有以词Fish起头的产品:
WHEREprod_name