MySQL之查询基础

前面章节我们介绍表的建立、删除和更新。这一章节我们介绍SELECT语句。

目录

    • 1.SELECT基础语句
        • 选择列名
        • 选择全部列,使用SELECT *语句
        • 为列设置别名
        • 查询常数
        • 从结果中删除重复的行
        • WHERE语句来选择记录
        • 注释书写
    • 2.算数运算符和比较运算符
        • 算数运算符
        • 比较运算法
        • 对字符串使用不等号时的规则
        • 对NULL类型的数据不能使用比较运算符
    • 3.逻辑运算符
        • NOT运算符
        • AND运算符和OR运算符
      • 参考资料

1.SELECT基础语句

  • 选择列名

SELECT <列名>..... FROM<表名>;

这里我们使用SELECT语句对数据库操作一下,选择如下三列,可以看出选择出的三列顺序和SELECT选择结果中一致。

SELECT product_id,product_name,purchase_price
FROM product;

MySQL之查询基础_第1张图片

  • 选择全部列,使用SELECT *语句

SELECT * FROM product;

运行之后就会选择出所有列。
MySQL之查询基础_第2张图片

  • 为列设置别名

使用‘AS’关键字可以为列设置别名。如果需要设置中文别名,则需要用双引号(单引号不行)引起来。

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

MySQL之查询基础_第3张图片
使用中文名称。

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

MySQL之查询基础_第4张图片

  • 查询常数

查询常数:是指可以查询一些常数,比如字符串常数,数字常数,日期常数,可能这些数据数据库中没有。

SELECT '商品' AS string, 38 AS number, '2009-02-24' AS date,
       product_id, product_name
  FROM product;

可以看出,被选择的常数作为了一列数据展示了出来,而这些数据是我们选择的,不是数据库中有的。
MySQL之查询基础_第5张图片

  • 从结果中删除重复的行

从上可知,在product_type这一列中含有重复的值,我们可以使用DISTINCT来去除重复值。
MySQL之查询基础_第6张图片

SELECT DISTINCT product_type FROM product;

这样就去除了重复的行。说明一下,如果某列中含有null空值,则NULL也会看成一类数据,所有的NULL会被合成为一条数据
MySQL之查询基础_第7张图片
合并空值NULL

SELECT DISTINCT purchase_price FROM product;

可看见,两个NULL变成了一个NULL。
MySQL之查询基础_第8张图片
我们也可选择多个列的组合,将重复的数据合并为一条数据。(这里的重复是指多个列的值都重复),且DISTINCT关键字只能用在第一个列名之前。

SELECT DISTINCT product_type,regist_date FROM product;

将product_type和regist_date同时重复的列合并。
MySQL之查询基础_第9张图片

  • WHERE语句来选择记录

SELECT每次选择都是选择一整列的数据,有些时候,我们并不需要每次都选择出所有的数据,大部分情况下都是取出满足“销售量大于500的商品”等某些条件的数据。这时候就需要WHERE语句来指定了,需说明的是,WHERE语句必须写在FROM句子之后,要不然会报错。

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

例如:从product中选择出商品种类为product_type为‘衣服’的记录。

 SELECT * FROM product WHERE product_type="衣服";

MySQL之查询基础_第10张图片

  • 注释书写

说真的,我还真不会写注释,我还是介绍一下吧

一行注释
--书写在“--”之后,并且只能在同一行
多行注释
/*可
以
跨
多
行
*/

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

  • 算数运算符

含义 运算符
加法运算 +
减法运算 -
乘法运算 *
除法运算 /

需要注意的是NULL值和其他值的加减乘除运算的结果都是NULL

  • 比较运算法

运算符 含义
= 和x相等
<> 和x不等
>= 大于等于x
> 大于x
<= 小于等于x
< 小于x

例如:选择出销售单价大于1000日元的记录

SELECT product_name,product_type,sale_price 
FROM product 
WHERE sale_price>=1000;

MySQL之查询基础_第11张图片
例如:选择登记日期在2009年9月27日之前的记录

SELECT product_name,product_type,regist_date FROM product WHERE regist_date <'2009-09-27';

MySQL之查询基础_第12张图片
说明一下,在SQL中,使用(>=)或者(<=)作为查询条件时,一定要注意(<,>)和(=)符号位置不能颠倒,

算数运算法和比较运算法可以一起使用。例如:获取sale_price比purchase_price高出500元的商品信息。

SELECT product_name,sale_price,purchase_price FROM product WHERE sale_price-purchase_price >=500;

MySQL之查询基础_第13张图片

  • 对字符串使用不等号时的规则

我们先来创建一个表

--插入数据
CREATE TABLE Chars
(chr CHAR(3) NOT NULL,
PRIMARY KEY (chr));
--插入数据
START TRANSACTION;
INSERT INTO Chars VALUES ('1');
INSERT INTO Chars VALUES ('2');
INSERT INTO Chars VALUES ('3');
INSERT INTO Chars VALUES ('10');
INSERT INTO Chars VALUES ('11');
INSERT INTO Chars VALUES ('222');
COMMIT;

创建的是字符串类型的。
在这里插入图片描述

--选择出大于‘2’的数据SELECT语句
SELECT chr FROM Chars WHERE chr>'2';

MySQL之查询基础_第14张图片
是不是超级神奇,这里是对字符串进行比较,不是数据类型的数据,那么它们首先会对首字母进行比较,比如‘10’和‘11’它们首字母是‘1’都比2小,根据这些原理我们可以知道‘1-3’<‘1’ ‘3’>‘2-2’

  • 对NULL类型的数据不能使用比较运算符

我们product表中的purchase_price中存在空值,我们用比较运算法试一试

--选择出商品单价为2800的商品
SELECT product_name,purchase_price 
FROM product 
WHERE purchase_price=2800;

MySQL之查询基础_第15张图片

--选择出商品单价为不为2800的商品
SELECT product_name,purchase_price 
FROM product 
WHERE purchase_price <> 2800;

MySQL之查询基础_第16张图片
以上可知NULL类型都未被选中,可知NULL无法用比较运算法进行计算。如果需要选出NULL,需要用IS NULL或者IS NOT NULL

--选择为空的记录
SELECT product_name,purchase_price 
FROM product 
WHERE purchase_price IS NULL;

MySQL之查询基础_第17张图片

--选择不为空的记录
SELECT product_name,purchase_price 
FROM product 
WHERE purchase_price IS NOT NULL;

MySQL之查询基础_第18张图片

3.逻辑运算符

  • NOT运算符

NOT不能单独使用,必须和其他查询条件组合起来使用。

--这里我们使用NOT选择进口价格小于或等于1000元的商品
SELECT product_name,purchase_price 
FROM product 
WHERE NOT purchase_price > 1000;

MySQL之查询基础_第19张图片

  • AND运算符和OR运算符

AND是逻辑与的意思,OR为逻辑或的意思

--获取进口价格大于1000并且商品类型为厨房用具为‘厨房用具’
SELECT product_name,purchase_price 
FROM product 
WHERE  purchase_price > 1000 AND product_type="厨房用具";

MySQL之查询基础_第20张图片

--获取进口价格大于1000或者商品类型为厨房用具为‘厨房用具’
SELECT product_name,purchase_price 
FROM product 
WHERE  purchase_price > 1000 OR product_type="厨房用具";

MySQL之查询基础_第21张图片
其实有很多情况不止有两个条件,还会有三个,四个甚至更多,这时我们就需要用括号来选择哪些条件是一起的,哪些条件是分开的。

--选择‘商品种类为办公用品’,并且‘登记日期为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';

发现结果错了,因为计算机中AND优先计算,然后在计算OR
MySQL之查询基础_第22张图片
所以我们需要加上括号

SELECT product_name,product_type,regist_date 
FROM product
WHERE product_type='办公用品' 
AND  ( regist_date = '2009-09-11' 
OR regist_date = '2009-09-20' ) ;

MySQL之查询基础_第23张图片
其实在逻辑运算中,不止有1和0还有一种UNKOWN的值,NULL值不属于TRUE 也不属于FALSE,一考虑到NULL情况就会多变,所以我们一般尽量不使用NULL

参考资料

图书:《SQL基础教程》

你可能感兴趣的:(SQL,数据库,mysql,sql)