学习SQL【3】-查询基础

作者: 爱吃西瓜的番茄酱 | 来源:发表于2017-12-02 11:13 被阅读81次
学习.png

一:SELECT 语句基础

1:列的查询

基本的SELECT语句

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

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

image

从表中输出三列:

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的逻辑运算称为三值逻辑,其他的通常的逻辑运算称为二值逻辑。

今天的学习到此结束。

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

image

(重要的话要加重加粗)

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

相关文章

  • 学习SQL【3】-查询基础

    一:SELECT 语句基础 1:列的查询 基本的SELECT语句 以下举例均是对表Product进行操作,表Pro...

  • sql

    sql-基础sql-基础查询-1sql-基础查询-2sql-更新 概览 数据库(Database,DB):将大量数...

  • SQL 学习笔记

    《SQL 基础教程》学习笔记 01 - 数据库和 SQL 02 - 表的创建、删除和更新 03 - 查询基础 04...

  • 数据库(5) | MySQL SQL 语言查询

    SQL语言基础 本章,我们将会重点探讨SQL语言基础,学习用SQL进行数据库的基本数据查询操作。另外请注意本章的S...

  • SQL基础(二)

    前言 基础SQL入门详情看SQL(一)多表联接的原理详细看SQL(一) 查询 在SQL中, 最难的莫过于查询.因为...

  • mysql手工注入

    SQL基础 1.1 什么是sql? SQL(structured query language),即结构化查询语言...

  • JPA 动态生成sql

    1. 构建格式化时间查询sql: 生成sql: 2. 构建多条件查询sql: 生成sql: 3. 构建子查询: 生...

  • First week

    用于自己复习笔记,初学MARKDOWN(W3SCHOOL学习) SQL SQL 指结构化查询语言SQL 使我们有能...

  • SQL表(增、删、改、查)基础:)

    学习SQL的第一天(7月17日) 跟着W3school学习SQL语法.... 整理笔记 SQL(结构化查询语言)由...

  • 数据库笔记-SQL查询&过滤

    基础查询 查询排序 查询过滤 基础查询 以极客时间专栏《SQL必知必会》的王者荣耀表格为例。 SELECT语句 检...

网友评论

    本文标题:学习SQL【3】-查询基础

    本文链接:https://www.haomeiwen.com/subject/zwqnbxtx.html