一:SELECT 语句基础
1:列的查询
基本的SELECT语句
SELECT <列名>,.....
FROM <表名>;
以下举例均是对表Product进行操作,表Product的结构内容如下图:
从表中输出三列:
SELECT product_id, product_name, purchase_price
FROM Product;
执行结果
product_id | product_name | purchase_price------------+--------------+----------------
0001 | T衫 | 500
0002 | 打孔器 | 320
0003 | 运动T衫 | 2800
0004 | 菜刀 | 2800
0005 | 高压锅 | 5000
0006 | 叉子 |
0007 | 擦菜板 | 790
0008 | 圆珠笔 |
(8 行记录)
查询结果中列的顺序与SELECT字句中的顺序相同。
2:查询出表中的所有列
想要查询全部列,可使用代表所有列的星号(*)
SELECT *
FROM Product;
查询结果如下:
product_id | product_name | product_type | sale_price | purchase_price | regist_date------------+--------------+--------------+------------+----------------+-------------
0001 | T衫 | 衣服 | 1000 | 500 | 2017-09-20
0002 | 打孔器 | 办公用品 | 500 | 320 | 2017-09-11
0003 | 运动T衫 | 衣服 | 4000 | 2800 |
0004 | 菜刀 | 厨房用具 | 3000 | 2800 | 2017-09-20
0005 | 高压锅 | 厨房用具 | 6800 | 5000 | 2017-01-15
0006 | 叉子 | 厨房用具 | 500 | | 2017-09-20
0007 | 擦菜板 | 厨房用具 | 880 | 790 | 2016-04-28
0008 | 圆珠笔 | 办公用品 | 100 | | 2017-11-11
(8 行记录)
3:为列设定别名
SQL语句可以使用AS关键字为列指定别名,
SELECT product_id AS id,
product_name AS name,
purchase_price AS price
FROM Product;
执行结果
id | name | price------+---------+-------
0001 | T衫 | 500
0002 | 打孔器 | 320
0003 | 运动T衫 | 2800
0004 | 菜刀 | 2800
0005 | 高压锅 | 5000
0006 | 叉子 |
0007 | 擦菜板 | 790
0008 | 圆珠笔 |
(8 行记录)
别名可以使用中文,使用中文时需要用双引号(”)括起来:
SELECT product_id AS "商品编号",
product_name AS "商品名称",
purchase_price AS "进货单价"
FROM Product;
执行结果如下:
商品编号 | 商品名称 | 进货单价----------+----------+----------
0001 | T衫 | 500
0002 | 打孔器 | 320
0003 | 运动T衫 | 2800
0004 | 菜刀 | 2800
0005 | 高压锅 | 5000
0006 | 叉子 |
0007 | 擦菜板 | 790
0008 | 圆珠笔 |
(8 行记录)
4:常数的查询
SELECT 子句中不仅可以书写列名,还可以书写常数
在SQL语句中使用字符串或者日期常数时,必须使用单引号(’)将其括起来:
SELECT '商品' AS string, 38 AS number, '2017-12-01' AS date,
product_id, product_name
FROM Product;
执行结果如下:
string | number | date | product_id | product_name--------+--------+------------+------------+--------------
商品 | 38 | 2017-12-01 | 0001 | T衫
商品 | 38 | 2017-12-01 | 0002 | 打孔器
商品 | 38 | 2017-12-01 | 0003 | 运动T衫
商品 | 38 | 2017-12-01 | 0004 | 菜刀
商品 | 38 | 2017-12-01 | 0005 | 高压锅
商品 | 38 | 2017-12-01 | 0006 | 叉子
商品 | 38 | 2017-12-01 | 0007 | 擦菜板
商品 | 38 | 2017-12-01 | 0008 | 圆珠笔
(8 行记录)
5:从结果中删除重复行
若想要删除重复行,可以通过在SELECT 子句中使用DISTINCT关键字来实现:
SELECT DISTINCT product_type
FROM Product;
执行结果如下:
product_type--------------
衣服
办公用品
厨房用具
(3 行记录)
在使用DISTINCT关键字时,NULL也被视为一类数据,如对含有NULL数据的purchase_price(进货单价)列使用DISTINCT关键字:
SELECT DISTINCT purchase_price
FROM Product;
执行结果如下:
purchase_price----------------
320
500
5000
2800
790
(6 行记录)
注释:
DISTINCT关键字只能用于第一个列名之前。
6:根据WHERE语句来选择记录
SELECT语句通过WHERE子句来指定查询数据的条件
WHERE子句的语法:
SELECT <列名>,...
FROM <表名>
WHERE <条件表达式>;
例如,选取商品种类为“衣服”的记录
SELECT product_name, product_type
FROM Product
WHERE product_type = '衣服';
执行结果如下:
product_name | product_type--------------+--------------
T衫 | 衣服
运动T衫 | 衣服
(2 行记录)
注释:
● WHERE子句要紧跟在FROM子句后面。
● SQL中子句的书写顺序是固定的,不能随意更改。
7:注释的书写方法
注释是SQL语句中用来标志说明或注意事项的部分,分为1行注释和多行注释。
● 1行注释:
书写在”—“之后,只能写在同一行,在MySQL中,需要在”—“后加一个空格。
● 多行注释:
书写在”/“和”/“之间,可以跨多行
。
二:算术运算符和比较运算符
1:算术运算符
SQL语句中使用算术运算符
SELECT product_name, sale_price, sale_price * 2 AS "sale_price_*2"
FROM Product;
执行结果如下:
product_name | sale_price | sale_price_*2--------------+------------+---------------
T衫 | 1000 | 2000
打孔器 | 500 | 1000
运动T衫 | 4000 | 8000
菜刀 | 3000 | 6000
高压锅 | 6800 | 13600
叉子 | 500 | 1000
擦菜板 | 880 | 1760
圆珠笔 | 100 | 200
(8 行记录)
四则运算所使用的运算符(+、-、*、/)称为算术运算符。
SELECT 子句中可以使用常数或者算术表达式。
2:需要注意NULL
所有包含NULL的算术计算,结果都是NULL
如:
● 5 + NULL
● 1 * NULL
● NULL / 0
注释:
只有NULL除以0 时不会发生错误,并且结果仍然为NULL。
3:比较运算符
SQL中主要有六种比较运算符:
● = :相等
● <>:不相等
● >=:大于等于
● <= :小于等于
● > :大于
● < : 小于
例如,选取sale_price列为500的记录:
SELECT product_name, product_type
FROM Product
WHERE sale_price = 500;
执行结果:
product_name | product_type--------------+--------------
打孔器 | 办公用品
叉子 | 厨房用具
(2 行记录)
选取sale_price列的值不为500的记录:
SELECT product_name, product_type
FROM Product
WHERE sale_price <> 500;
执行结果:
product_name | product_type--------------+--------------
T衫 | 衣服
运动T衫 | 衣服
菜刀 | 厨房用具
高压锅 | 厨房用具
擦菜板 | 厨房用具
圆珠笔 | 办公用品
(6 行记录)
日期也可以用来比较
SELECT product_name, product_type, regist_date
FROM Product
WHERE regist_date < '2017-09-27';
执行结果:
product_name | product_type | regist_date--------------+--------------+-------------
T衫 | 衣服 | 2017-09-20
打孔器 | 办公用品 | 2017-09-11
菜刀 | 厨房用具 | 2017-09-20
高压锅 | 厨房用具 | 2017-01-15
叉子 | 厨房用具 | 2017-09-20
擦菜板 | 厨房用具 | 2016-04-28
(6 行记录)
WHERE字句中的条件表达式也可以使用计算表达式
SELECT product_name, sale_price, purchase_price
FROM Product
WHERE sale_price - purchase_price >= 500;
执行结果:
product_name | sale_price | purchase_price--------------+------------+----------------
T衫 | 1000 | 500
运动T衫 | 4000 | 2800
高压锅 | 6800 | 5000
(3 行记录)
4:不能对NULL使用比较运算符
错误的SELECT语句
SELECT product_name, purchase_price
FROM Product
WHERE purchase_price = NULL;
执行结果:
product_name | purchase_price--------------+----------------(0 行记录)
SQL提供了专门用来判断是否为NULL的IS NULL运算符。
例如,选取NULL的语句:
SELECT product_name, purchase_price
FROM Product
WHERE purchase_price IS NULL;
执行结果:
product_name | purchase_price--------------+----------------
叉子 |
圆珠笔 |
(2 行记录)
反之,如果选取不是NULL的记录,需要使用IS NOT NULL运算符:
SELECT product_name, purchase_price
FROM Product
WHERE purchase_price IS NOT NULL;
执行结果:
product_name | purchase_price--------------+----------------
T衫 | 500
打孔器 | 320
运动T衫 | 2800
菜刀 | 2800
高压锅 | 5000
擦菜板 | 790
(6 行记录)
三:逻辑运算符
1:NOT运算符
NOT运算符表示否定,其不能单独使用,必须结合其他查询条件组合起来使用:
SELECT product_name, product_type, sale_price
FROM Product
WHERE NOT sale_price >= 1000;
执行结果:
product_name | product_type | sale_price--------------+--------------+------------
打孔器 | 办公用品 | 500
叉子 | 厨房用具 | 500
擦菜板 | 厨房用具 | 880
圆珠笔 | 办公用品 | 100
(4 行记录)
注释:
NOT运算符用来否定某一个条件,但是不能滥用。
2:AND运算符
AND运算符在其两侧的查询条件都成立时整个查询条件才成立。
例如,在WHERE子句中使用AND 运算符
SELECT product_name, purchase_price
FROM Product
WHERE product_type = '厨房用具' AND sale_price >= 3000;
执行结果:
product_name | purchase_price--------------+----------------
菜刀 | 2800
高压锅 | 5000
(2 行记录)
3:OR 运算符
AND运算符在其两侧的查询条件有一个成立时整个查询条件都成立。
例如,在WHERE子句中使用OR 运算符:
SELECT product_name, purchase_price
FROM Product
WHERE product_type = '厨房用具' OR sale_price >= 3000;
执行结果:
product_name | purchase_price--------------+----------------
运动T衫 | 2800
菜刀 | 2800
高压锅 | 5000
叉子 |
擦菜板 | 790
(5 行记录)
4:通过括号强化处理
AND运算符的优先级高于OR运算符,想要先执行OR 运算符是可以使用括号。
SELECT product_name, product_type, regist_date
FROM Product
WHERE product_type = '办公用品'
AND ( regist_date = '2017-09-11'
OR regist_date = '2017-09-20');
执行结果:
product_name | product_type | regist_date--------------+--------------+-------------
打孔器 | 办公用品 | 2017-09-11
(1 行记录)
5:逻辑运算符和真值
● NOT、AND和OR称为逻辑运算符。
● 使用AND 进行的逻辑运算称为逻辑积, 使用OR运算符进行的逻辑运算称为逻辑和。
●
SQL除了真假值外,还有第三种值—不确定(UNKNOW)。因此,只有SQL的逻辑运算称为三值逻辑,其他的通常的逻辑运算称为二值逻辑。
今天的学习到此结束。
满页的代码,一般人是看不下去的,如果你能看到末尾,说明你是一个爱学习的孩子,那就留个赞再走吧
![](https://img.haomeiwen.com/i3428666/f4bc1a719faf9ca1.png)
(重要的话要加重加粗)
每天学习一点点,每天进步一点点。
网友评论