SQL学习笔记2——基础查询

1. SELECT语句基础

从表中选取数据时需要使用 SELECT 语句,通过 SELECT 语句查询并选取出必要数据的过程称为匹配查询或查询(query)。

1.1 基本的select语句
选择特定字段,按写的先和顺序显示字段

select <列名>,...
from <表名>;

SELECT 子句中列举了希望从表中查询出的列的名称,FROM 子句指定了选取出数据的表的名称。

示例:

SELECT product_id, product_name, product_type, sale_price,
purchase_price, regist_date
FROM Product;

选择所有列,不能进行排序,*代表全部的意思

SELECT *
FROM
Product;

法则 2-1 星号(*)代表全部列的意思。

1.2 为列设置别名
使用as关键字为列设定别名,别名如果是中文,需要用双引号括起来
示例:

SELECT product_id AS id,
product_name AS name,
purchase_price AS price
FROM Product;

法则 2-2 设定汉语别名时需要使用双引号(")括起来。

1.3 删除重复数据
在select子句中使用distinct来实现删除重复行

SELECT DISTINCT product_type
FROM Product;

在使用distinct时,null也会被视为一类数据,null存在于多行中时,也会被合并成一条null数据。
法则 2-3 在SELECT语句中使用DISTINCT可以删除重复行。
distinct只能放在第一个列名之前。

1.4 根据where语句来选择记录
select语句通过where子句来指定查询数据条件。在 WHERE 子句中可以指定“某一列的值和这个字符串相等”或者“某一列的值大于这个数字”等条件。

SELECT <列名>, ……
FROM <表名>
WHERE <条件表达式>;

示例:

SELECT product_name, product_type
FROM Product
WHERE product_type = '衣服';

先通过where子句查询出符合指定条件的记录,然后再选取出select语句指定的列。
SQL子句的书写顺序是固定的,WHERE 必须跟在FROM子句后面,否则会报错。
法则 2-4 WHERE子句要紧跟在FROM子句之后。

1.5 SQL注释
注释的书写方法有如下两种:

  • 单行注释 ”--“
  • 多行注释 ”/“和”/“之间可以跨多行
-- 本SELECT语句会从结果中删除重复行。
SELECT DISTINCT product_id, purchase_price FROM Product;

/* 本SELECT语句, 
会从结果中删除重复行。*/
SELECT DISTINCT product_id, purchase_price 
FROM Product;

注释不仅可以写在 SELECT 语句 中,而且可以写在任何 SQL 语句当中,写多少都可以。
法则 2-5 注释是 SQL 语句中用来标识说明或者注意事项的部分。 分为1行注释和多行注释两种。

2. 算术运算符和比较运算符

  • 运算符就是对其两边的列或者值进行运算(计算或者比较大小 等)的符号。
  • 比较运算符可以用来判断列或者值是否相等,还可以用来比较 大小。

2.1 算术运算符和比较运算符
SQL语句中可以使用计算表达式

SELECT product_name, sale_price, 
sale_price * 2 AS "sale_price_x2" 
FROM Product;

把单价的两倍(sale_price * 2 )以”sale_price_x2“的形式读取出来

SQL语句中可以使用的四则运算的主要运算符

运算符 含义
+ 加法运算
- 减法运算
* 乘法运算
/ 除法运算
() 括弧

注意含有null的运算,计算结果都是null,null/0 结果也是null

法则 2-6 SELECT子句中可以使用常数或者表达式。

2.2 比较运算符
在where子句中通过使用比较运算符可以组合出各种各样的条件表达式
选取出sale_price列的值不是500的记录

SELECT product_name, product_type 
FROM Product 
WHERE sale_price <> 500;
运算符 含义
= 和~相等
<> 和~不等
>= 大于等于~
> 大于~
<= 小于等于~
< 小于

这些运算符可以对字符、数字和日期等所有数据类型的列和值进行比较。

在使用大于等于(>=)或者小于等于(<=)作为查询条件时,一 定要注意不等号(<、>)和等号(=)的位置不能颠倒。
法则 2-7 使用比较运算符时一定要注意不等号和等号的位置。

比较字符串的时候是用类似于字典顺序进行比较,也就是像姓名那样,按照条目在字典中出现的顺序来进行 排序。该规则最重要的一点就是,以相同字符开头的单词比不同字符开 头的单词更相近。
Chars 表 chr 列中的数据按照字典顺序进行排序的结果如下所示。

1
10
11
2
222
3

'10' 和 '11' 同样都是以 '1' 开头的字符串,首先判定为比 '2' 小。 这就像在字典中“提问”“提议”和“问题”按照如下顺序排列一样。
法则 2-8 字符串类型的数据原则上按照字典顺序进行排序,不能与数字的大小顺序混淆。

2.2 不能对 NULL 使用比较运算符
不能对null进行直接比较,通过 IS NULLIS NOT NULL来判断某个值是不是null
法则 2-9 希望选取NULL记录时,需要在条件表达式中使用IS NULL运算符。 希望选取不是NULL的记录时,需要在条件表达式中使用IS NOT NULL运算符。

2.3 逻辑运算符

  • NOT 运算符
    NOT 不能单独使用,必须和其他查询条件组合起来使用
SELECT product_name, product_type, sale_price 
FROM Product 
WHERE NOT sale_price >= 1000;

等同于

SELECT product_name, product_type 
FROM Product 
WHERE sale_price < 1000;

法则 2-10 NOT运算符用来否定某一条件,但是不能滥用。

  • AND运算符和OR运算符
    对多个查询条件进行组合
    AND 运算符在其两侧的查询条件都成立时整个查询条件才成立,其意 思相当于“并且”。
    OR 运算符在其两侧的查询条件有一个成立时整个查询条件都成立,其 意思相当于“或者”。

法则 2-11 多个查询条件进行组合时,需要使用AND运算符或者OR运算符。
法则 2-12 文氏图很方便。
法则 2-13 AND运算符的优先级高于OR运算符。想要优先执行OR运算符时可以 使用括号。

2.4 逻辑运算符和真值
逻辑运算符对比较运算符等返回的真值进行操作。
三值逻辑,在SQL中语言逻辑运算除了真假值之外,还有第三种值-不确定(UNKNOW),也就是null。

SQL中真值表
AND:

P Q P AND Q
不确定 不确定
不确定
不确定 不确定
不确定
不确定 不确定 不确定

OR:

P Q P OR Q
不确定
不确定 不确定
不确定
不确定 不确定
不确定 不确定 不确定

原本只有 4 行的真值表,如果要考虑 NULL 的话就会像上表那样增加为3×3=9 行,看起来也变得更加繁琐,考虑 NULL 时的条件判断也会变得异常复杂,这与我们希望的结果大相径庭。因此,我们要尽量不使用 NULL。
这就是在数据库中设置了NOT NULL约束的原因

法则 2-14 通过创建真值表,无论多复杂的条件,都会更容易理解。

总结

本次学习了SQL 最基本也是最重要的语句——SELECT 语句,同时学习了执行查询操作时指定想要查询数据的条件(查询条件),查询时可以指定一个或多个查询条件,例如“某一列等于这个值”“某一列计算之 后的值大于这个值”等。
在指定查询条件时,我们要注意null这个特殊的值,它的逻辑运算结果和正常值的逻辑运算结果不一样。

你可能感兴趣的:(SQL学习笔记2——基础查询)