从表中选取数据时可以使用select语句,通过select语句查询并选取出必要数据的过程称为匹配查询或查询(query),基本语法如下:
SELECT <列名1>,<列名2>,<列名3>......
FROM <表名>;
该select语句包含了select 和 from 两个子句。子句是SQL语句的组成要素,是以select或者from等作为起始的短语
要想查询出全部列时,可以使用代表所有列的星号(*)
SELECT *
FROM <表名>;
但是,如果使用星号的话,就无法设定列的显示顺序了,这时就会按照CREATE TABLE语句定义时的列的顺序显示
SQL语句可以使用AS关键字为列设定别名,别名限制会小很多,甚至可以使用中文,使用中文的时候要用**双引号(“呆”)**这样括起来,注意不是单引号
eg:
SELECT product_id AS id,
product_name AS "名字"
FROM Product;
SELECT子句中不仅可以书写列名,还可以书写常数。
SELECT '商品' AS string,38 AS number,'2020-5-29' AS date
product_id,product_name
FROM Product;
其中,商品是字符串常数,38是数字常数,‘2020-5-29’是日期常数,它们将与product_id列与product_name列一起被查询出来
在一张列表中,如果我们只关心这堆数据中有多少个不同的类型,而不关心具体每个类型有多少个数据,我们可以对类型那列的数据通过删除重复数据的方式,得到这堆数据中的全部类型。
想要删除一列中的重复行我们可以使用select子句中的DISTINCT实现。例如:
SELECT DISTINCT product_type
FROM Product;
注意:在使用SELECT子句中的DISTINCT删除重复行时,NULL也会被视为一类数据,如果NULL类型存在于多行中,那么它也会被合并为一项。
举例,对于Product表输入SQL语句:
当然,也可以多两条列同时使用DISTINCT去除重复行,但是,DISTINCT子句只能加在第一个要去除重复行的列名前
SELECT DISTINCT product_type,regist_date
FROM Product;
SELECT语句通过WHERE子句来指定查询数据的条件,在WHERE子句中可以指定类似“商品种类为衣服”,“销售单价要在1000美元以上”等各种条件,通过执行包含有这些条件的SELECT语句,就可以查询出只符合该条件的记录了。SELECT语句中使用WHERE语句的语法如下:
SELECT <列名>,...
FROM <表名>
WHERE <条件表达式>;
eg:还是上面的product表,我们要从里面选出所有product_type为衣服类型的product_name
SELECT product_name,product_type FROM Product WHERE product_type='衣服';
注意,SQL中子句的书写顺序是固定的,不能随意更改,WHERE子句就必须跟在FROM子句中,随意调整书写顺序可能会造成执行错误
注释的书写方法有两种,一种是1行注释,另一种是多行注释
在SQL语句中使用“–(注释)”来注释,但只能注释一行
在SQL语句中使用“/*"和”*/"来进行多行注释
SQL四则运算的主要运算符
含义 | 运算符 |
---|---|
加法运算 | + |
减法运算 | - |
乘法运算 | * |
除法运算 | / |
SQL运算中可以使用括号()来表示运算的优先级
举例:把上面的product表中的sale_price各个商品单价乘2倍,然后以“sale_price_x2”列的形式读取出来
SELECT product_name,sale_price, sale_price*2 AS "sale_price_x2" FROM Product;
所有包含NULL的运算,结果肯定是NULL,即使是NULL/0这样(5/0会报错),结果也是NULL,但是注意NULL和0不同,5+NULL=NULL而不是5
运算符 | 含义 |
---|---|
= | 和…相等 |
<> | 和…不相等 |
>= | 大于等于 |
> | 大于 |
<= | 小于等于 |
< | 小于 |
关于比较运算符有以下几点需要注意:
比较运算符中,不等号一定要写到等号的前面
当使用比较运算符比较字符串时,SQL是使用ASCII码对字符串每个字节逐一比较,SQL比较日期也是如此,在字符串比较中,只要两个字符串有一位不同比较出了大小,那么这两个字符串之后的字节都将不会比较,要注意“2”和2不一样,一个是数字常数,一个是字符串常数
不能对NULL使用比较运算符,在对所有数据类型进行比较的过程中,NULL数据类型不会参与比较,最终也不会输出NULL类型的数据,但是可以通过IS NULL和IS NOT NULL来选出NULL类型的数据
举例:如图,第一张图中product_name为空,第二张图中product_name有了含有NULL类型的数据
三种基本的逻辑运算符
运算符 | 含义 |
---|---|
NOT | 对条件取“非”操作,用来否定某一个条件 |
AND | 在两侧查询条件都成立时整个查询条件才成立(AND运算符又被称为逻辑积) |
OR | 在两侧查询条件有一个成立时整个查询条件就成立(OR运算符又被称为逻辑和) |
需要注意的是:
NOT用来否定某一个条件,但最好不要滥用,会降低代码易读性
AND的优先级要高于OR,当两个逻辑运算符同时存在时,会先优先执行AND两侧条件,再执行满足AND两侧条件的结果和OR另一侧条件进行逻辑运算,如果想优先执行OR两侧运算,可以使用括号()把OR两侧条件括起来
SQL除了逻辑真和逻辑假以外还有另一种针对NULL类型的逻辑值—不确定(UNKNOWN),这种类型的逻辑运算被称为三值逻辑,NULL不能使用逻辑运算或者算术运算符和比较运算符得出,只能通过IS NULL和 IS NOT NULL得出
语法举例:提取出product表中,regist_date是2009-09-11或者2009–09-20并且是办公用品类型的product_name
SELECT product_name,product_type,regist_date FROM Product WHERE product_type='办公用品' AND (regist_date='2009-09-11' OR regist_date='2009-09-20');