sql选取第一个非汉字字符_SQL基础:第2章 查询基础

回到目录

列的查询

用select语句选取列。

SELECT 列名1, 列名2, ...
FROM 表名;
-- 例如
SELECT product_id, product_name, purchase_price
FROM Product;

如上所示,查询多列时要用逗号对列名进行分隔。查询结果中列的顺序和select子句中列的顺序相同。

使用 * 查询选取所有列。

SELECT *
FROM 表名;

使用了星号就无法设定查询结果中列的顺序了,这时会按照CREATE TABLE语句的定义对列进行排序。

为列设定别名

使用AS为列设定别名。

SELECT 列名1 AS 别名1,
       列名2 AS 别名2,
       列名3 AS 别名3
FROM 表名;

别名可以使用中文,但注意中文的别名要用双引号而不是单引号。英文别名既不用双引号也不用单引号。

SELECT product_id AS "编号",
       product_name AS "名称",
       purchase_price AS "进货单价"
FROM Product;

从查询结果中删除重复行(记录)

使用关键字DISTINCT

SELECT DISTINCT product_type
FROM Product;

这样就会删除重复行(记录),例如上述语句得到的查询结果中,product_type这一列的值相同的行(记录)会被合并为一行。

此外,DISTINCT会把null也视为一类数据,null也是一种类别。

还可以对多列使用DISTINCT,这样,多列均相同的重复项才会被删除。

SELECT DISTINCT product_type, regist_date
FROM Product;

注意,多列使用DISTINCT时,DISTINCT只能用在第一个列名之前。

使用WHERE来过滤查询的行(记录)

使用WHERE子句来指定查询的条件,过滤选择满足一定条件的记录。(可联想if条件句)

SELECT 列名
FROM 表名
WHERE 条件表达式;
-- 例如
SELECT product_name, product_type
FROM Product
WHERE product_type = '衣服';

这样,where语句会将表Product中的记录通过条件表达式过滤得只剩下类型为衣服的记录,再从这些记录中选取product_name和product_type这两列。也就是先执行了where语句,再执行select。

至此,要引出一个很重要的概念:select查询先选取行,再选取列。如上述,先选取满足条件类型为衣服的所有行,再从这些行中选取出所需要的列的信息。

还要注意到,SQL中语句的书写顺序是固定的,不能随意改变。例如,WHERE必须在FROM后面。

注释的书写

注释分为单行注释和多行注释。单行注释写在"--"之后,"--"后要加空格再写注释内容。而多行注释写在" / "和" / "之间。如下所示:

-- 单行注释
/* 多行注释
   多行注释
   多行注释 */

运算符

运算符就是使用其两边的值进行运算并返回结果的符号,包括算术运算符、比较运算符、逻辑运算符。

算数运算符

包括加减乘除(+、-、*、/)四则运算的运算符。算术运算符中可以使用括号改变优先级顺序。

需要注意的是,含有null的运算,其结果都是null。

比较运算符

如下表所示:

fb522a6761f489c9c95692b8bca87d00.png

比较运算符可以对字符、数字、日期等几乎所有数据类型进行比较。其中,数字型数据根据数字大小进行比较,日期型数据根据时间先后进行比较,字符型数据根据字典序进行比较。

还需注意,不能对null使用比较运算符,否则一条记录也取不出来。对null比较时要使用专门的is null和is not null运算符。

逻辑运算符

非、与、或,即逻辑运算。

非,表否定含义,对应的逻辑运算符为not。

-- 例如
SELECT product_name 
FROM Product
WHERE NOT sale_price > 1000;
-- 选取的是Product表中售价不大于(小于等于)1000的记录(行)的商品名字

与对应的逻辑运算符为and(注意不能写成&&),表示在其两侧的条件同时为真时结果才为真。作用同&&。

-- 例如
SELECT product_name
FROM Product
WHERE product_type = '厨房用具' AND sale_price > 3000;
-- 选取出表Product中类型是厨房用具并且售价大于3000的记录(行)的商品名字

或对应的逻辑运算符为or(注意不能写成||),表示在其两侧的条件有一个为真时结果就是真。作用同||。

and的优先级优于or,但同样也可以通过括号改变优先级顺序。

null既不为真也不为假

SQL有三种逻辑值,因此SQL的逻辑运算被称为三值逻辑,分别是真(TRUE)、假(FALSE)、不确定(UNKNOWN)。而null的真值就是不确定(UNKNOWN)。

关于unknown的逻辑运算详见以下真值表:

AND运算

23bb788d63eb3e78ed51827de0d9571b.png

OR运算

457b36adbce907e196e58a6eb94f7882.png

如上所示,正是因为有了null,真值表变得复杂和繁琐,因此通常情况下还是尽量不使用null,这就是为什么会有NOT NULL这样的列约束。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值