SQL基础入门

SQL语句种类

  • DDL——数据定义语言
    • CREATE:创建数据库和表等对象
    • DROP:删除数据库和表等对象
    • ALTER:修改数据库和表的结构
  • DML ——数据操纵语言
    • SELECT:查询
    • INSERTL:插入
    • UPDATE:更新
    • DELETE:删除
  • DCL——数据控制语言
    • COMMIT:确认对数据库中的数据进行的变更
    • ROLLBACK:取消数据库中的数据进行的变更
    • GRANT:赋予用户操作权限
    • REVOKE:取消用户操作权限

表的创建、删除与修改

  • 数据库的创建 CREATE DATABASE

    • CREATE DATABASE <数据库名称>;
      
  • 创建表 CREATE TABLE

    • CREATE TABLE <表名>
      (<列名1> <数据类型> <字段约束>,
      <列名2> <数据类型> <字段约束>,
      <列名3> <数据类型> <字段约束>, ...
      <该表的约束1>, <该表的约束2>, ... );
      
  • 表的删除 DROP TABLE

    • DROP TABLE <表名>;
      

      不可恢复!!!

  • 表定义的更新 ALTER TABLE

    • 添加列的ALTER TABLE语句
      ALTER TABLE <表名> ADD COLUMN <列的定义>;
      -- EXAMPLE FOR DB2, MySQL, PostgreSQL
      ALTER TABLE Product ADD COLUMN product_name_pinyin VARCHAR(100) NOT NULL;
      
    • 删除列的ALTER TABLE语句
      ALTER TABLE <表名> DROP COLUMN <列名>;
      -- EXAMPLE FOR DB2, MySQL, PostgreSQL
      ALTER TABLE Product DROP COLUMN product_name_pinyin
      
    • 向表中插入数据INSERT INTO语句
      INSERT INTO <表名> VALUES (1,2,....);
      

SELECT语句基础

列的查询

  • 基本的SELECT语句
    • 查询表中部分列

      
      -- EXAMPLE
      SELECT product_id, product_name, purchase_price
        FROM	Product;
      
  • 查询表中所有列

      SELECT *
        FROM <列名>;
    
  • 为列设定别名,AS关键字可以为列设置别名

      SELECT product_id AS id,
      		product_name as "商品名称",
      		product_price as "商品价格"
        FROM	 Product;
      -- 执行结果的列名会变为替代的列名
    
  • 常数的查询
    SELECT '商品' AS type, 38 AS number, '2020-02-02' AS date,
    		proudct_id, product_name
      FROM Product;
     
    /* RESULT
    
    string  |  number  |    date    |product_id| product_name|
    -----------------------------------------------------------
    商品    |38        |2020-02-02  |0001      |牙刷
    商品    |38        |2020-02-02  |0002      |剃须刀
    商品    |38        |2020-02-02  |0003      |纸巾
    商品    |38        |2020-02-02  |0004      |洗脸盆
    商品    |38        |2020-02-02  |0005      |拖把
    商品    |38        |2020-02-02  |0006      |洗发水
    */
    
  • 查询去重 SELECT DISTINCT
    SELECT DISTINCT product_type, date   -- 可以对多列数据查询
      FROM Product;
    
    • 在使用DISTINCT关键字时,NULL也被视为一类数据,存在多条NULL时会被合并成一条
  • 根据WHERE语句来选择记录
    • 基本格式

      SELECT <列名>,...
      FROM <表名>
      WHERE <条件表达式>;
      
      -- EXAMPLE
      SELECT product_name, product_type
      FROM Product
      WHERE product_type = '衣物';
      

SQL的运算符

算术运算符

  • SELECT product_name, sale_price,
    	sale_price * 2 AS "sale_price_x2",  -- 将sale_price以2倍的形式展现出来
      FROM Product;
    

    其它运算符与Python大体相同

  • 特别注意 NULL
    • 5 + NULL
      3 * NULL
      NULL / 0
      -- 以上结果均为NULL
      
    • 所有包含NULL的运算,结果必为NULL

比较运算符

  • 常规运算符
运算符含义
=和 / 相等
<>和 / 不相等
>=大于等于
<=小于等于
  • 对字符串使用不等号时,使用的是和数字不同的比较规则,其按照字典顺序比较,如果同一位相同则向后延

  • 不能对NULL使用比较运算符
    -- 查找purchase_price字段为NULL的数据
    
    SELECT product_name, purchase_price
    FROM Product
    WHERE purchase_price = NULL;
    -- 以上是错误❌作法,查询结果为空!!!
    
    SELECT product_name, purchase_price
    FROM Product
    WHERE purchase_price is NULL;
    -- 正确做法✔做法
    
    -- SQL提供了专门判断是否为NULL的is NULL运算符
    
    

逻辑运算符

  • NOT运算符
    -- 查找价格小于等于1000的商品
    SELECT name, type, price
        FROM Product
        	WHERE NOT price > 1000;   -- 等价于 price <= 1000
    
  • AND运算符和OR运算符
    • AND运算符在其两侧的查询条件都成立时整个查询条件才成立
    • OR运算符符合任意一个条件即整个查询条件成立
    -- 查询商品类别为服装且价格大于500的商品
    SELECT name, type, price
    	FROM Product
    		WHERE type = '服装' AND price > 500;
    
    • 注意:AND运算符优先级高于OR运算符
-- 查询商品类别为办公用品且时间为2020-08-28 或 2020-09-25的商品
 
 SELECT name, type, price, dt
 	WHERE type = '办公用品'
 		AND dt = '2020-08-28'
 		OR dt = '2020-09-25';
 -- 错误示例❌,AND优先于OR
 
 SELECT name, type, price, dt
 	WHERE type = '办公用品'
 		AND (dt = '2020-08-28'
             OR dt = '2020-09-25');
 --正确示例✔,合理利用括号
  • 运算符优先级
    优先级
    1算术运算符
    2连接符
    3比较符
    4IS [NOT] NULL, LIKE, [NOT] IN
    5[NOT] BETWEEN
    6NOT
    7AND
    8OR

聚合查询

聚合函数

函数名功能
COUNT()计算表中的行数
SUM()计算表中某一列的合计值
AVG()计算表中某一列的平均值
MAX()计算表中某一列的最大值
MIN()计算表中某一列的最小值
ROUND()保留xx位小数

注:只有在SELECT子句和HAVING子句中才能使用聚合函数

  • 计算表中数据的行数

    SELECT COUNT(*) FROM Product;   -- *为COUNT()聚合函数的参数
    
  • 计算某一列的非空行数

    SELECT COUNT(price) FROM Product;   
    -- COUNT()函数不会把某一列的NULL所在行计算进行数里
    
  • 计算合计值

    SELECT SUM(sale_price), SUM(purchase_price) FROM Product;
    /*
     sum | sum
    -----------
    12345|23456
    */
    
  • 计算平均值

    SELECT AVG(sale_price) FROM Product;
    

    注意:AVG()函数对含NULL值的列计算方式要视具体情况而定

  • 计算最大最小值

    SELECT MAX(regist_data), MIN(regist_data) FROM Product;
    

    SUMAVG函数只能对数值类型列使用,而MAXMIN函数可以对任何类型的列使用

  • 计算某一列的非重复行数

    SELECT COUNT(DISTINCT type) FROM Product;
    

    注意:DISTINCT关键字必须写在括号内,否则会先计算行数,再删除重复列

GROUP BY对表进行分组

基本语法:

使用GROUP BY子句进行汇总

SELECT <列名1>, <列名2>, <列名3>, ...
  FROM <表名>
    GROUP BY <列名1>, <列名2>, <列名3>, ...;

注:GROUP BY语句一定要写在WHERE语句之后

书写顺序:SELECT–>FROM–>WHERE–>GROUP BY

GROUP BY子句中指定的列成为聚合键或者分组列

  • 聚合键中包含NULL的情况
    SELECT purchase_price, COUNT(*)
      FROM Product
        GROUP BY purchase_price;
        
    --  聚合键包含NULL时,会单独列出NULL的数量
    
  • 使用WHERE子句时GROUP BY的执行结果
    SELECT purchase_price, COUNT(*)
      FROM Product
        WHERE product_type = '衣服'
        GROUP BY purchase
        
    -- 执行顺序:FROM-->WHERE-->GROUP BY-->SELECT-->HAVING
    

HAVING子句——为聚合结果指定条件

SELECT <列名1>, <列名2>, <列名3>, ...
 FROM <表名>
GROUP BY <列名1>, <列名2>, <列名3>, ...
HAVING <分组结果对应条件>;   
-- 执行顺序:FROM-->WHERE-->GROUP BY-->SELECT-->HAVING

HAVING子句中能包含的元素只有三种:

  • 常数
  • 聚合函数
  • GROUP BY指定列名
相对于HAVING子句,某些条件更适合写在WHERE子句中
  • HAVING子句是用来指定"组"的条件
  • WHERE子句是用来指定“行”的条件

ORDER BY子句——对查询结果进行排序

SELECT <列名1>, <列名2>, <列名3>, ...
 FROM <表名>
ORDER BY <基准列1>, <基准列2>, ...
书写顺序
SELECT子句
FROM子句
WHERE子句
GROUP BY子句
HAVING子句
ORDER BY子句
  • 指定升序或降序

    默认按升序排列,若要设为降序只需在列名后加上**DESC**

  • NULL的顺序

    排序键包含NULL时,会在开头或末尾进行汇总

  • 可使用的列

    可以使用SELECT子句中未包含的列,聚合函数


INSERT语句——数据的插入

基本格式:

INSERT INTO <表名> (1,2,3...) VALUES (1,2,3...);
  • 插入默认值

    CREATE TABLE语句中设置**DEFAULT约束**来设定默认值

    CREATE TABLE Product(
        product_id CHAR(4) NOT NULL ,
    	sale_price INTEGER DEFAULT 0,
        PRIMARY KEY (product_id));
    

    通过显示方法插入默认值

    INSERT INTO Product ('product_id', 'sale_price') VALUES ('qwer', DEFAULT);
    

    通过隐式方法插入默认值(更推荐显示方法,一目了然)

    -- 省略sale_price列
    INSERT INTO Product ('product_id') VALUES ('qwer');
    
  • INSERTSELECT语句——从其他表中复制数据
    INSERT INTO ProductCopy(
    	product_id,
    	product_name,
    	product_type,
    	sale_price)
    	SELECT (product_id, product_name, product_type, sale_price)
    	FROM Product;
    

DELETE语句——数据的删除

DROP TABLE语句会将表完全删除

DELETE语句会保留表(容器),而删除表中所有数据

持续更新中。。。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值