xing-zhe-

SQL

SQL(Structure Query Language):结构化查询语言。其实就是定义了操作所有关系型数据库的规则。每一种数据库操作的方式存在不一样的地方,称为“方言”。

分类:

  1) DDL(Data Definition Language)数据定义语言。  用来定义数据库对象:数据库,表,列、索引等。关键字:create, drop,alter 等。

  2) DML(Data Manipulation Language)数据操作语言。  用来对数据库中表的数据进行增删改查,并检查数据的完整性。关键字:insert, delete, update 和 select 等

  3) DCL(Data Control Language)数据控制语言。  控制不同数据段直接的许可和访问级别的语句,定义数据库、表、字段、用户访问权限和安全级别。 关键字:grant、revoke等

DDL

Ⅰ .操作数据库

 1. C(Create):创建
        * 创建数据库:
            * create database dbname;
        * 创建数据库,判断不存在,再创建:
            * create database if not exists dbname;
        * 创建数据库,并指定字符集
            * create database dbname character set 字符集名;

 2. R(Retrieve):查询
        * 查询所有数据库的名称:
            * show databases;
        * 查询某个数据库的字符集:查询某个数据库的创建语句
            * show create database dbname;
    3. U(Update):修改
        * 修改数据库的字符集
            * alter database dbname character set 字符集名称;
    4. D(Delete):删除
        * 删除数据库
            * drop database dbname;
        * 判断数据库存在,存在再删除
            * drop database if exists dbname;
    5. 使用数据库
        * 查询当前正在使用的数据库名称
            * select database();
        * 使用数据库
            * use dbname;

Ⅱ.操作表

 1. C(Create):创建
        1. 语法:
            create table tbname(
                列名1 数据类型1,
                列名2 数据类型2,
                ....
                列名n 数据类型n
            );
            * 注意:最后一列,不需要加逗号(,)

       * 复制表:
         * create table tbname like 被复制的表名;          
    2. R(Retrieve):查询
        * 查询某个数据库中所有的表名称
            * show tables;
        * 查询表结构
            * desc tbname;
    3. D(Delete):删除
        * drop table ;
        * drop table  if exists tbname;

 4. U(Update):修改

  alter table tbname ...
        1. 修改表名
            alter table tbname rename to 新的表名;
        2. 修改表的字符集
            alter table tbname character set 字符集名称;
        3. 添加一列
            alter table tbname add 列名 数据类型;
        4. 更新列名称 类型
            alter table tbname change 列名 新列别 新数据类型;
            alter table tbname modify 列名 新数据类型;
        5. 删除列
            alter table 表名 drop 列名;

        6. 修改字段排列顺序
            在3、4、5操作中,都有个可选项 first | after column_name,可以修改字段在表中位置。但是该方法是MySQL在SQL上拓展,不一定适用其他数据库。

            e.g. alter table emp add birth date after name;  --在name列后加birth

     alter table emp add birth date first;  --在第一列加birth

DML:

1. 添加数据:
    * 语法:
        * insert into tbname(列名1,列名2,...列名n) values(值1,值2,...值n);
    * 注意:
        1. 列名和值要一一对应。
        2. 如果表名后,不定义列名,则默认给所有列添加值
            insert into tbname values(值1,值2,...值n);
        3. 除了数字类型,其他类型需要使用引号(单双都可以)引起来
2. 删除数据:
    * 语法:
        * delete from tbname [where 条件]
    * 注意:
        1. 如果不加条件,则删除表中所有记录。
        2. 如果要删除所有记录
            1. delete from tbname; -- 不推荐使用。有多少条记录就会执行多少次删除操作
            2. TRUNCATE TABLE tbname; -- 推荐使用,效率更高 先删除表,然后再创建一张一样的表。
3. 更新数据:
    * 语法:
        * update tbname set 列名1 = 值1, 列名2 = 值2,... [where 条件];
    * 注意:
        1. 如果不加任何条件,则会将表中所有记录全部修改。

4. 查询数据:
    * 语法:
        * select
          字段列表
      from
          表名列表
      where
          条件列表
      group by
          分组字段
      having
          分组之后的条件
      order by
          排序
      limit
          分页限定;
    1. 条件查询
      1. where子句后跟条件
       · 运算符:
          * > 、< 、<= 、>= 、= 、<>
          * BETWEEN...AND  
          * IN( 集合)
          * LIKE:模糊查询
              * 占位符:
                  * _:单个任意字符
                  * %:多个任意字符
          * IS NULL  
          * and  或 &&
          * or  或 ||
          * not  或 !

   2. having条件语句,对分类后的结果再进行条件的过滤

   区别:

    在查询过程中:

      聚合语句(sum,min,max,avg,count),要比having子句优先执行;优先执行where ,再执行聚合语句(sum,min,max,avg,count)。

    分组:

      Having是先分组在进行筛选,而where是先筛选再进行分组。


    2. 排序和限制
      1. order by , limit
      2. 关键字:
         DESC 和 ASC: 降序和升序。默认升序。

    ,:可以多个条件排序。 e.g: select * from emp order by age,by height;

    order 和 limit放一起,常常用来记录分页显示: e.g: select * from emp order by age limit 1,3;

    3. 聚合
      1. 语法:

      select [field1, field2.....] fun_ame from tbname [where 条件]  [group by field1, ....]  [with POLLUP]  [having 条件];
      2. 关键字:
         fun_name: 表示要做的聚和操作,即聚合函数,如sum(求和)、count(*)(记录数)、max(最大)、min(最小)。

    group by:表示要进行分类的聚合的字段。

    with POLLUP:可选语法,表明是否对分类聚合后的结果进行再汇总。

    having 表示对分类后的结果再进行条件的过滤。

    e.g: select student from class group by sex having score > 60;

    4. 表连接
      1. 解释:

      当需要同时显示多个表中给的字段时,使用表连接来实现。

      分内连接和外连接:内连接仅选出两张表中互相匹配的记录,而外连接会选出其他不匹配的记录。常使用内连接,但是有时候也必须使用外连接。

    2. 内连接:

    使用比较运算符根据每个表共有的列的值匹配两个表中的行。有两种,显式的和隐式的,返回连接表中符合连接条件和查询条件的数据行。(所谓的链接表就是数据库在做查询形成的中间表)。

    隐式的:

      select

        a.name , b.price

      from

        Product a, Price b

       where

        a.ib = b.pid;

    显示的:

      select

        a.name , b.price

      from

        Product a

      inner jion  

        Price b

      on

        a.ib = b.pid;

    3. 外连接:

    左连接:包含所有左边表中记录,甚至是右边表没有与它匹配的记录。

           关键字: LEFT  JOIN或LEFT OUTER JOIN    

      eg:  select  a.name , b.price from Product a left join Price b on a.ib = b.pid;

    右连接:包含所有右边表中记录,甚至是左边表没有与它匹配的记录。与左连接相反

      关键字:RIGHT  JOIN 或 RIGHT  OUTER  JOIN

    完整外部连接:接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。  

      关键字:FULL  JOIN 或 FULL OUTER JOIN

    5. 子查询
      1. 解释:

      某些情况,当进行查询的时候,最需要的条件是另外一个select语句的结果的时候,这时候就要用到子查询。

      2. 关键字:in、not in、=、!=、exits、not exits等。有时候子查询记录数唯一,还可以用=代替in;同时,子查询在某些情况可以转换为表连接,因为表连接要优于子查询。

    e.g:select * from table1 where name1 = (select name2 from table1 );

    5. 记录联合
      1. 解释:

      某些情况,讲两个表的数据按照一定的查询条件查询出来后,将结果并到一起显示,就需要union和union all实现这种功能。

      union 与 union all:前者比后者多做了一次distinct去重。

      2. 语法:

    select * from table1 

    union | union all 

    select * from table2

    ...

    union | union all 

    select * from tablen;

DML:

  主要是DBA管理系统中对象权限时使用。

  例:登录root账户,创建用户user1,对table1数据库所有表具有select和Insert权限;

  >grant select, insert on table1.* to \'user1\'@\'localhost\' identified by \'123\';

  登录root账户,收回user1的Insert权限;

  >revoke insert on table1.* from \'user1\'@\'localhost\';

  后面看了管理篇补该部分。

  



 

分类:

技术点:

相关文章:

  • 2021-12-18
  • 2020-01-10
  • 2021-12-20
  • 2021-07-17
  • 2021-12-18
  • 2022-02-08
  • 2021-08-17
  • 2021-11-04
猜你喜欢
  • 2021-11-03
  • 2021-12-18
  • 2021-05-23
  • 2021-06-26
  • 2021-10-16
  • 2021-09-02
  • 2021-08-29
相关资源
相似解决方案