第二章 查询基础
Part12.1 SELECT语句基础
2.1.1 列的查询
基本语法:
SELECT <列名1>,<列名2>,…… FROM <表名>;
例子:如: 从Product (商品)表中, 查询 product_id (商品编号) 列、 product_name (商品名称)列和 purchase_price (进货单价) 列
SELECT product_id, product_name, purchase_price FROM Product;
查询结果中列的顺序和 SELECT 子句中的顺序相同
2.1.2 查询出表中的所有列
基本语法:
SElECT * FROM <表名>;
例子:如查询Product表中全部列
SElECT * FROM Product;
与全部列的查询语句的结果是一样的:
SELECT product_id, product_name, product_type, sale_price, purchase_price, regist_date FROM Product;
2.1.3 为列设定别名
SQL 语句可以使用AS 关键字为列设定别名
基本语法
SELECT product_id AS id, product_name AS name, purchase_price AS price FROM Product;
例子:别名可以使用中文, 使用中文时需要用双引号(")括起来. 请注意不是单引号(').设定中文别名的SELECT语句
SELECT product_id AS "商品编号", product_name AS "商品名称", purchase_price AS "进货单价" FROM Product;
2.1.4 常数的查询
SELECT子句中不仅可以书写列名, 还可以书写常数.
代码清单中的SELECT子句中的第一列'商品'是字符串常数, 第2列38是数字常数, 第3列'2009-02-24'是日期常数, 它们将与product id列和product name列一起被查询出来.
SELECT '商品' AS string, 38 AS number, '2009-02-24' AS date, product_id, product_name FROM Product;

2.1.5 从结果中删除重复行
可以通过在 SELECT 子句中使用 DISTINCT 来实现
基本语法
SELECT DISTINCT <列名1>,<列名2>,...... FROM <表名>;
例子:一列数据删除重复行如:使用DISTINCT删除product_type列中重复的数据
SELECT DISTINCT product_type FROM Product;
多列数据删除重复行DISTINCT也可以像下面代码清单那样在多列之前使用. 此时, 会将多个列的数据进行组合, 将重复的数据合并为一条. 代码清单中的SELECT语句, 对product_type(商品种类)列和regist_date(登记日期)列的数据进行组合, 将重复的数据合并为一条.
SELECT DISTINCT product_type, regist_date FROM Product;
DISTINCT 关键字只能用在第一个列名之前
2.1.6 根据WHERE语句来选择记录
SELECT语句通过WHERE子句来指定查询数据的条件. 在WHERE子句中可以指定"某一列的值和这个字符串相等"或者"某一列的值大于这个数字"等条件. 执行含有这些条件的SELECT语句, 就可以查询出只符合该条件的记录了.
基本语法
SELECT <列名>, …… FROM <表名> WHERE <条件表达式>;
例子:如: 用来选取product_type列为'衣服'的记录的SELECT语句
SELECT product_name, product_type FROM Product WHERE product_type = '衣服';

也就是首先通过 WHERE 子句查询出符合指定条件的记录, 然后再选取出 SELECT 语句指 定的列
如果只想知道商品名称的话, 可以只选出product_name 列
SELECT product_name FROM Product WHERE product_type = '衣服';
SQL 中子句的书写顺序是固定的, 不能随意更改.WHERE 子句必须紧跟在 FROM 子句之后, 书写顺序发生改变的话会造成执行错误
2.1.7 注释的书写方法
基本语法:
- 1行注释: 书写在"--"之后, 只能写在同一行
- 多行注释: 书写在"/*"和"*/"之间, 可以跨多行
Part22.2 算术运算符和比较运算符
2.2.1 算术运算符
加减乘除(+-*/)
例:把各个商品单价的2倍(sale_price的2倍)以"sale_price_x2"列的形式读取出来.
SELECT product_name, sale_price, sale_price * 2 AS "sale_price_x2" FROM Product;
结果

需要注意NULL 常数与NULL的加减乘除,以及NULL除以常数或者除以0, 结果都是NULL
2.2.2 比较运算符
在WHERE子句中使用比较运算符
| 运算符 | 含义 |
|---|---|
| = | 和~相等 |
| <> | 和~不相等 |
| >= | 大于等于~ |
| > | 大于~ |
| <= | 小于等于~ |
| < | 小于~ |
字符串的比较运算符
专门筛选NULL的运算符IS NULL运算符 以及选取不是NULL的运算IS NOT NULL运算符
Part32.3 逻辑运算符
2.3.1 NOT运算符
表示否定
2.3.2 AND运算符和OR运算符
- AND运算符--在其两侧的查询条件都成立时整个查询条件才成立, 其意思相当于“并且”
- OR运算符--在其两侧的查询条件有一个成立时整个查询条件都成立, 其意思相当于“或者”
2.3.3 通过括号强化处理
如"商品种类为办公用品"并且"登记日期是2009年9月11日或者2009年9月20日"
SELECT product_name, product_type, regist_date FROM Product WHERE product_type = '办公用品' AND ( regist_date = '2009-09-11' OR regist_date = '2009-09-20');
2.3.4 逻辑运算符和真值
和NULL相关的逻辑运算, 是不确定(UNKNOWN)
转:HeatonHsu
浙公网安备 33010602011771号