前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >学习SQL【3】-查询基础

学习SQL【3】-查询基础

作者头像
爱吃西瓜的番茄酱
发布2018-04-04 11:27:10
7840
发布2018-04-04 11:27:10
举报

一:SELECT 语句基础

1:列的查询 基本的SELECT语句

代码语言:javascript
复制
SELECT <列名>,.....    FROM <表名>;

以下举例均是对表Product进行操作,表Product的结构内容如下图:

从表中输出三列:

代码语言:javascript
复制
SELECT product_id, product_name, purchase_price 
     FROM Product;

执行结果

代码语言:javascript
复制
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:查询出表中的所有列 想要查询全部列,可使用代表所有列的星号(*)

代码语言:javascript
复制
SELECT * 
     FROM Product;

查询结果如下:

代码语言:javascript
复制
 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关键字为列指定别名,

代码语言:javascript
复制
SELECT product_id          AS id,
               product_name    AS name,
               purchase_price   AS price    FROM Product;

执行结果

代码语言:javascript
复制
  id  |  name   | price------+---------+-------
 0001 | T衫     |   500
 0002 | 打孔器  |   320
 0003 | 运动T衫 |  2800
 0004 | 菜刀    |  2800
 0005 | 高压锅  |  5000
 0006 | 叉子    |
 0007 | 擦菜板  |   790
 0008 | 圆珠笔  |
(8 行记录)

别名可以使用中文,使用中文时需要用双引号(”)括起来:

代码语言:javascript
复制
SELECT product_id AS "商品编号",
               product_name AS "商品名称",
               purchase_price AS "进货单价"
     FROM Product;

执行结果如下:

代码语言:javascript
复制
 商品编号 | 商品名称 | 进货单价----------+----------+----------
 0001     | T衫      |      500
 0002     | 打孔器   |      320
 0003     | 运动T衫  |     2800
 0004     | 菜刀     |     2800
 0005     | 高压锅   |     5000
 0006     | 叉子     |
 0007     | 擦菜板   |      790
 0008     | 圆珠笔   |
(8 行记录)

4:常数的查询 SELECT 子句中不仅可以书写列名,还可以书写常数 在SQL语句中使用字符串或者日期常数时,必须使用单引号(’)将其括起来:

代码语言:javascript
复制
SELECT '商品' AS string, 38 AS number, '2017-12-01' AS date,
               product_id, product_name    FROM Product;

执行结果如下:

代码语言:javascript
复制
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关键字来实现:

代码语言:javascript
复制
SELECT DISTINCT product_type    FROM Product;

执行结果如下:

代码语言:javascript
复制
 product_type--------------
 衣服
 办公用品
 厨房用具
(3 行记录)

在使用DISTINCT关键字时,NULL也被视为一类数据,如对含有NULL数据的purchase_price(进货单价)列使用DISTINCT关键字:

代码语言:javascript
复制
SELECT DISTINCT purchase_price     FROM Product;

执行结果如下:

代码语言:javascript
复制
 purchase_price----------------

            320
            500
           5000
           2800
            790
(6 行记录)

注释:DISTINCT关键字只能用于第一个列名之前。

6:根据WHERE语句来选择记录 SELECT语句通过WHERE子句来指定查询数据的条件 WHERE子句的语法:

代码语言:javascript
复制
SELECT <列名>,...     FROM <表名>  WHERE <条件表达式>;

例如,选取商品种类为“衣服”的记录

代码语言:javascript
复制
 SELECT product_name, product_type      FROM Product   WHERE product_type = '衣服';

执行结果如下:

代码语言:javascript
复制
 product_name | product_type--------------+--------------
 T衫          | 衣服
 运动T衫      | 衣服
(2 行记录)

注释: ● WHERE子句要紧跟在FROM子句后面。 ● SQL中子句的书写顺序是固定的,不能随意更改。

7:注释的书写方法 注释是SQL语句中用来标志说明或注意事项的部分,分为1行注释和多行注释。 ● 1行注释: 书写在”—“之后,只能写在同一行,在MySQL中,需要在”—“后加一个空格。

● 多行注释: 书写在”/“和”/“之间,可以跨多行。

二:算术运算符和比较运算符

1:算术运算符 SQL语句中使用算术运算符

代码语言:javascript
复制
SELECT product_name, sale_price, sale_price * 2 AS "sale_price_*2"
    FROM Product;

执行结果如下:

代码语言:javascript
复制
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 如:

代码语言:javascript
复制
● 5 + NULL
● 1 * NULL
● NULL / 0

注释:只有NULL除以0 时不会发生错误,并且结果仍然为NULL。

3:比较运算符 SQL中主要有六种比较运算符:

代码语言:javascript
复制
● = :相等
● <>:不相等
● >=:大于等于
● <= :小于等于
● > :大于
● < : 小于

例如,选取sale_price列为500的记录:

代码语言:javascript
复制
SELECT product_name, product_type     FROM Product  WHERE sale_price = 500;

执行结果:

代码语言:javascript
复制
 product_name | product_type--------------+--------------
 打孔器       | 办公用品
 叉子         | 厨房用具
(2 行记录)

选取sale_price列的值不为500的记录:

代码语言:javascript
复制
SELECT product_name, product_type     FROM Product  WHERE sale_price <> 500;

执行结果:

代码语言:javascript
复制
 product_name | product_type--------------+--------------
 T衫          | 衣服
 运动T衫      | 衣服
 菜刀         | 厨房用具
 高压锅       | 厨房用具
 擦菜板       | 厨房用具
 圆珠笔       | 办公用品
(6 行记录)

日期也可以用来比较

代码语言:javascript
复制
SELECT product_name, product_type, regist_date    FROM Product  WHERE regist_date < '2017-09-27';

执行结果:

代码语言:javascript
复制
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字句中的条件表达式也可以使用计算表达式

代码语言:javascript
复制
SELECT product_name, sale_price, purchase_price     FROM Product  WHERE sale_price - purchase_price >= 500;

执行结果:

代码语言:javascript
复制
product_name | sale_price | purchase_price--------------+------------+----------------
 T衫          |       1000 |            500
 运动T衫      |       4000 |           2800
 高压锅       |       6800 |           5000
(3 行记录)

4:不能对NULL使用比较运算符 错误的SELECT语句

代码语言:javascript
复制
SELECT product_name, purchase_price     FROM Product  WHERE purchase_price = NULL;

执行结果:

代码语言:javascript
复制
 product_name | purchase_price--------------+----------------(0 行记录)

SQL提供了专门用来判断是否为NULL的IS NULL运算符。 例如,选取NULL的语句:

代码语言:javascript
复制
SELECT product_name, purchase_price     FROM Product  WHERE purchase_price IS NULL;

执行结果:

代码语言:javascript
复制
 product_name | purchase_price--------------+----------------
 叉子         |
 圆珠笔       |
(2 行记录)

反之,如果选取不是NULL的记录,需要使用IS NOT NULL运算符:

代码语言:javascript
复制
SELECT product_name, purchase_price     FROM Product  WHERE purchase_price IS NOT NULL;

执行结果:

代码语言:javascript
复制
 product_name | purchase_price--------------+----------------
 T衫          |            500
 打孔器       |            320
 运动T衫      |           2800
 菜刀         |           2800
 高压锅       |           5000
 擦菜板       |            790
(6 行记录)

三:逻辑运算符

1:NOT运算符 NOT运算符表示否定,其不能单独使用,必须结合其他查询条件组合起来使用:

代码语言:javascript
复制
SELECT product_name, product_type, sale_price     FROM Product WHERE NOT sale_price >= 1000;

执行结果:

代码语言:javascript
复制
product_name | product_type | sale_price--------------+--------------+------------
 打孔器       | 办公用品     |        500
 叉子         | 厨房用具     |        500
 擦菜板       | 厨房用具     |        880
 圆珠笔       | 办公用品     |        100
(4 行记录)

注释:NOT运算符用来否定某一个条件,但是不能滥用。

2:AND运算符 AND运算符在其两侧的查询条件都成立时整个查询条件才成立。 例如,在WHERE子句中使用AND 运算符

代码语言:javascript
复制
SELECT product_name, purchase_price     FROM Product  WHERE product_type = '厨房用具' AND sale_price >= 3000;

执行结果:

代码语言:javascript
复制
 product_name | purchase_price--------------+----------------
 菜刀         |           2800
 高压锅       |           5000
(2 行记录)

3:OR 运算符 AND运算符在其两侧的查询条件有一个成立时整个查询条件都成立。 例如,在WHERE子句中使用OR 运算符:

代码语言:javascript
复制
SELECT product_name, purchase_price     FROM Product  WHERE product_type = '厨房用具' OR sale_price >= 3000;

执行结果:

代码语言:javascript
复制
product_name | purchase_price--------------+----------------
 运动T衫      |           2800
 菜刀         |           2800
 高压锅       |           5000
 叉子         |
 擦菜板       |            790
(5 行记录)

4:通过括号强化处理 AND运算符的优先级高于OR运算符,想要先执行OR 运算符是可以使用括号。

代码语言:javascript
复制
SELECT product_name, product_type, regist_date    FROM Product  WHERE product_type = '办公用品'
    AND (      regist_date = '2017-09-11'
              OR regist_date = '2017-09-20');

执行结果:

代码语言:javascript
复制
 product_name | product_type | regist_date--------------+--------------+-------------
 打孔器       | 办公用品     | 2017-09-11
(1 行记录)

5:逻辑运算符和真值 ● NOT、AND和OR称为逻辑运算符。 ● 使用AND 进行的逻辑运算称为逻辑积, 使用OR运算符进行的逻辑运算称为逻辑和。 ● SQL除了真假值外,还有第三种值—不确定(UNKNOW)。因此,只有SQL的逻辑运算称为三值逻辑,其他的通常的逻辑运算称为二值逻辑。

今天的学习到此结束。

满页的代码,一般人是看不下去的,如果你能看到末尾,说明你是一个爱学习的孩子,那就留个赞再走吧

(重要的话要加重加粗)

每天学习一点点,每天进步一点点。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-12-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小白客 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档