SQL基础

目录

一、概述

概念

数据库的分类

基本概念

二、常用关键字及一些语法

执行顺序

通配符

常用关键字

DISTINCT

USING

JOIN

UNION

GROUP BY

HAVING

运算符

算术运算符

比较运算符

非符号运算符

逻辑运算符

位运算符(略)

运算符的优先级(略)

函数

聚合函数

安全

其他


一、概述

  1. 概念

    SQL (Structured Query Language:结构化查询语言) 用于管理关系数据库管理系统(RDBMS Relational Database Management System)。 SQL 的范围包括数据插入、查询、更新和删除,数据库模式创建和修改,以及数据访问控制。

  2. 数据库的分类

    1. 关系型数据库
      1. Oracle;
      2. SQLServer;
      3. MySQL;
    2. 非关系型数据库(NoSQL)
      1. MongoDB:文档型nosql数据库;
      2. Redis:k-v键值型数据库nosql数据库;
      3. HBase:列存储型nosql数据库;
  3. 基本概念

    1. 元组:一行;
    2. 属性:一列;
    3. 单元格;
    4. 关系:通常一个关系对应一张表;
    5. 码:键;
    6. 超码:能唯一标识一个元组的一个属性或属性组;
    7. 候选码:能唯一标识一个元组的一个属性或属性组,而它的真子集不能,候选码是最小的超码;
    8. 主码:主键primary,主码是候选码里人为地选一个;
    9. 主属性:包含在任意一个候选码中的属性;
    10. 非主属性:不包含在任何码中的属性;
    11. 域:属性的取值范围;
    12. 外键:关系(表)A中的公共属性包含的关键字是另一个关系B的主键,则这个关键字被称为A的外键,A是主表,B是从表。
    13. SQL的分类:
      1. DDL(Data Defination Language):create、drop、alter
      2. DML(Data Manipulation Language):select、insert、delete、update
      3. DCL(Data Control Language):commit、rollback、grant、revoke
    14. 常用初级语法
      1、SELECT -- 从数据库中提取数据
          SELECT column... from table_name;
      2、UPDATE -- 更新数据库中的数据
          UPDATE table_name
          SET column1=value1,column2=value2,...
          WHERE some_column=some_value;
      3、DELETE -- 从数据库中删除数据
          DELETE FROM table_name
          WHERE condition;
      4、INSERT INTO -- 向数据库中插入新数据
          INSERT INTO table_name (column1,column2,column3,...)
          VALUES (value1,value2,value3,...);   ---可以不指定列名,后面的values就得写全
      5、CREATE
          CREATE DATABASE dbname;  -- 创建新数据库
          CREATE TABLE table_name -- 创建新表
          (
          column_name1 data_type(size),
          column_name2 data_type(size),
          column_name3 data_type(size),
          ....
          );
          CREATE (UNIQUE) INDEX index_name   -- UNIQUE表示不允许此索引唯一
          ON table_name (column_name);
      6、ALTER DATABASE -- 修改数据库
          ALTERDATABASE name [ WITH CONNECTION LIMIT connlimit ]; --- 更改了数据库允许的连接限制,只有数据库的属主或者超级用户才可以更改此设置;
      ----ALTERDATABASE name SET parameter { TO | = } { value | DEFAULT };
          ALTERDATABASE name RESET parameter;
          ALTERDATABASE name RENAME TO newname;
          ALTERDATABASE name OWNER TO new_owner;
      7、ALTER TABLE  -- 变更(改变)数据库表
          ALTER TABLE table_name
          + DROP/ADD/ALTER/MODIFY 语句...;
      8、DROP  -- 删除表
          DROP TABLE table_name;     -- 删除表
          DROP DATABASE database_name ;  -- 删除数据库
          DROP INDEX index_name ON table_name ;  --不同数据库的index删除语法可能不同
          DROP INDEX table_name.index_name ; 

二、常用关键字及一些语法

  1. 执行顺序

    1. 顺序:

      FROM → ON → JOIN/USING → WHERE → GROUP BY → HAVING → SELECT → DISTINCT → UNION → ORDER BY → LIMIT

    2. 过程:

      1. 先FROM选择表,然后使用ON对表进行筛选,之后对筛选出的结果进行JOIN或USING,形成一个临时表。

      2. 再执行WHERE进行筛选;

      3. 然后筛选出的结果还可以使用GROUP BY进行分组,查询语句和聚合函数之间必须用HAVING进行连接,有必要的话可以使用HAVING对结果再进行一次筛选;

      4. 之后SELECT目标列,紧接着DISTINCT可以在这里进行去重;

      5. 多个表之间使用UNION进行连接;

      6. 最终的结果使用ORDER BY排序,然后利用LIMIT取部分(分页)。

  2. 通配符

    1. * :可检测名字未知的列;
    2. % :代替0或多个任意字符;
    3. _ :单个字符;
    4. [字符列]:字符列内的任意一个字符;
    5. [^字符列]或[!字符列]:不在字符列中的任意一个字符。
    6. ---1、前面有一个字符,中间包含oo
      SELECT * FROM TABLE
      WHERE column_name LIKE '_oo%'; 
      ---2、以A到Z的字母开头的列(^表示必须以A-Z开头)  --- regexp是正则表达式(regular expression)的缩写
      SELECT * FROM TABLE
      WHERE column_name REGEXP '^[A-Z]'; 
      ---4、^表示必须以什么开头;
      ---5、$表示必须以什么结尾;
      ---6、| 表示什么或什么(可以多个一起用,而且它的优先级比较高),效果等同于or;
      ---7、[] 表示包含方括号其中的任意一个字符;
      ---8、* 表示匹配前面的子表达式0次或多次;例如,zo* 能匹配 "z" 以及 "zoo"。* 等价于{0,}。
      ---9、+ 表示匹配前面的子表示式1次或多次;例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {1,}。
      ---10、{n} 表示匹配前面的子表达式n次;
      ---11、{n,m}表示匹配前面的子表达式最少n次,最多m次。---
      
      
  3. 常用关键字

    1. DISTINCT

      SELECT '给得到的结果中去重(它只能写在最前面,对写在它后面所有的字段都起作用)';
      
      ---全字段
      select *
      from practice 
      where id =10000
      
      ---对id和name两个字段都剔重 
      select distinct id,name 
      from practice 
      where id =10000
      
      ---加上group by,则意味着按id分组后进行剔重,这时候distinct只取第一条(也就是说会损失记录)
      select distinct id,name 
      from practice 
      where id =10000
      group by id;
      
      ---正确的剔重一般是distinct +字段列表,或者在结尾使用group by + 字段:
      select distinct id,name 
      from practice 
      where id =10000;
      或
      select id,name 
      from practice 
      where id =10000
      group by id,name;
      
      select '要结合关键字的执行顺序及原理机型理解记忆,不要死记硬背,也不要教条。';
    2. USING

      SELECT '其实就是 on (在等值连接并且连接的列名相同的情况下使用)'
      
      select ...
      from ...
      join  t2 ON t1.NAME = t2.NAME;
      
      相当于
      
      select ...
      from ...
      join  t2 USING( NAME );
      
    3. JOIN

      1. SQL基础_第1张图片
      2. 数据库——SQL连接_数据库sql连接_Jinandawang的博客-CSDN博客
    4. UNION

      UNION会取多个结果集的并集(会剔除重复数据)

      如果允许数据重复,则可以使用UNION ALL

    5. GROUP BY

      对查询结果进行分组。

    6. HAVING

      为聚合操作指定条件。WHERE只能指定行的条件,而不能指定组的条件,因此就有了HAVING。

  4. 运算符

    1. 算术运算符

      +、-、*、/或DIV、%或MOD

    2. 比较运算符

      1. 等于运算符:=
      2. 安全等于运算符:<=>
      3. 不等于运算符:<> 或 !=
      4. >、<、>=、<=。
    3. 非符号运算符

      1. 空运算符:IS NULL,要注意区别 “” 与 “ ” 与 NULL 与 “NULL”,比较容易出错;
      2. 非空运算符:IS NOT NULL;
      3. LEAST(值1, 值2, ...值n):返回其中的最小值;
      4. GREAST(值1, 值2, ...值n):返回其中的最大值;
      5. (NOT) BETWEEN 值1 AND 值2:满足 值1<=x<=2值 的所有x;
      6. IN 或 NOT IN (值1, 值2, ...值n)
      7. LIKE:通常用于模糊匹配,需要结合通配符使用(参见二、2.通配符);
      8. ESCAPE:使模式串中的某个符号发挥与转义字符“\”一样的效果。如 LIKE "%&%" ESCAPE “&”,就是使得&充当了一个转义字符,用来查找以百分号结尾的字符串。
      9. REGEXP:正则匹配。select * from where 列名 regexp 模型串。也可以使用NOT REGEXP。
      10. RLIKE:相当于REGEXP,也使用正则匹配。也可以使用NOT REGEXP。
    4. 逻辑运算符

      1. 逻辑非:NOT 或 !
      2. 逻辑与:AND 或 &&
      3. 逻辑或:OR 或 ||
      4. 逻辑异或:XOR(相同为0,不同为1,可以理解为:先满足“异”的条件,然后再“或”)
    5. 位运算符(略)

    6. 运算符的优先级(略)

  5. 函数

    1. 聚合函数

      1. AVG()

      2. SUM()

      3. MAX()

      4. MIN()

  6. 安全

    1. MySql运行在safe-updates模式下,该模式会导致非主键条件下无法执行update或者delete命令。执行 SET SQL_SAFE_UPDATES = 0 (或 = OFF)解除安全模式。
    2. 权限
      1. 赋予权限:GRANT 权限 ON 数据库对象 TO 用户@主机
      2. 查看权限:SHOW GRANT FOR 用户@主机
      3. 撤销权限:REVOKE 权限 ON 数据表 FROM 用户@主机
  7. 其他

    1. 别名:AS。有些数据库不起别名就会报错。

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