SQL浅谈


SQL浅谈

一、SQL简介

1.What’s this?

SQL(Structured Query Language)是“结构化查询语言”,它是对关系型数据库的操作语言。它可以应用到所有关系型数据库中,例如:MySQL、Oracle、SQL Server 等。

2.Classification

  • DDL(Data Definition Language) : 数据定义语言,用来定义数据库对象:库、表、列等;
  • DML(Data Manipulation Language):数据操作语言,用来定义数据库记录(数据);
  • DCL(Data Control Language):数据控制语言,用来定义访问权限和安全级别;
  • DQL(Data Query Language):数据查询语言,用来查询记录(数据);

    3.Warning!!!

  • SQL 语句可以单行或多行书写,以分号结尾;
  • 可以用空格和缩进来来增强语句的可读性;
  • 关键字不区别大小写,建议使用大写

二、DDL

1.数据库操作

  1. 查询:
    查询所有数据库:show databases;
    查询当前数据库:select database();
  2. 创建:create database if not exists xxx;
    Attentionif not exists可以省略,其用于当所创建的数据库已存在时可减少报错。
  3. 删除:drop database if exists xxx;
    Attentionif exists作用同上。
  4. 使用:use xxx;

2.表操作

  1. 查询:
    查询当下数据库的所有表:show tables;
    查询指定表结构:desc xxx;
    查询指定表的建表语句:show create table xxx;
  2. 创建:

    `create table xxx(
    字段1 字段1类型 [Comment 字段1注释],
    ……
    字段n 字段n类型 [Comment 字段n注释]
    ) [Comment 表注释];
    Attention:[……]为可选参数,且最后一个字段不跟逗号.

  3. 修改:
    添加字段:alter table xxx add 字段名 字段类型(长度)[comment 注释] [约束];
    修改数据类型:alter table xxx modify 字段名 新字段类型(长度);
    修改字段名和字段类型:alter table xxx change 旧字段名 新字段名 新字段类型(长度)[comment 注释];
    删除字段:alter table xxx drop 字段名;
    修改表名:alter table xxx rename to 新表名;
    删除指定表:drop table if exists xxx;
    删除指定表并重新创建该表:truncate table xxx;

    Attention:最后一条表明删除该表的数据而不改变该表的结构.

三、DML

1.添加数据

  1. 给指定字段添加数据:insert into xxx (字段1,……,字段n) values (值1,……,值n);
  2. 给全部字段添加数据:insert into xxx values (值1,……值n);
  3. 指定字段批量添加数据:insert into xxx (字段1,……字段n) values (值1,……,值n),……,(值1,……,值n);
  4. 全部字段批量添加数据:insert into xxx values (值1,……,值n),……,(值1,……,值n);

    Attention
    ①插入字段的名称与其数据的顺序需要对应;
    ②字符串和日期型数据需要写在引号中;

2.修改数据

  1. update xxx set 字段名1=值1,……,字段名n=值n [where 条件];

    Attention条件语句为可选项,如不加条件语句则会更新表中所有数据的相应字段;

3.删除数据

  1. delete from xxx [where 条件];

    Attention
    ①这里的条件语句也为可选项,若不选则会删除整张表的所有数据;
    ②不能单纯删改某个数据的某个字段(可以使用update实现);

四、DQL

1.基本查询

  1. select 字段1,……,字段n from xxx;

    Attention
    ①`select from xxx;可查询表中***所有字段***的数据;* *②select 字段1 [as] ‘别名1’,……,字段n [as] ‘别名n’ from xxx;可以为查询的字段设置别名,阅读起来更加直观;* *③select distinct 字段1,……,字段n from xxx;`可以去除重复记录;*

2.条件查询

select 字段列表 from xxx where 条件列表;

3.聚合函数

  1. select 聚合函数(字段列表)from xxx;

    Attention
    ①常见聚合函数共有五类:count(求数量),max(求最大值),min(求最小值),avg(求平均值),sum(求和);
    ②Null值不参与聚合函数的计算

4.分组查询

  1. select 字段列表 from xxx [where 条件] group by 分组字段名 [having 条件];

    Attention
    ①where是分组之前进行过滤,having是分组之后进行过滤
    ②where不能对聚合函数进行判断,而having可以
    ③分组后,查询的字段为聚合函数或分组字段,查询其他字段没有意义

5.排序查询

  1. select 字段列表 from xxx order by 字段1 排序方式1,……,字段n 排序方式n;

    Attention
    排序方式有两种:ASC->升序(默认值),DESC->降序;
    ②排序方式的优先级从1到n

6.分页查询

  1. select 字段列表 from xxx limit 起始索引,查询记录数;

    Attention
    ①起始索引从0开始,其表达式为:(查询页码-1)✖每页记录数;
    ②若查询的是第一页数据,起始索引可以省略;

7.执行顺序

  1. from -> where -> group by [having]-> select -> order by -> limit

    Attention:编写顺序为:select -> from -> where -> group by[having] -> order by -> limit

五、DCL

1.用户管理

  1. 查询用户:select * from user;
  2. 创建用户:create user '用户名'@'主机名' identified by 'password';

    Attention:主机地址为localhost时,用户权限很低,许多数据库访问不了;为%时,表明可以访问所有数据库.

  3. 修改用户密码:alter user '用户名'@'主机名' identified with mysql_native_password by 'new_password';
  4. 删除用户:drop user '用户名'@'主机名';

2.权限管理

  1. 查询权限:show grants for '用户名'@'主机名';
  2. 授予权限:grant 权限列表 on 数据库名.表名 to '用户名'@'主机名';
  3. 撤销权限:revoke 权限列表 on 数据库名.表名 from '用户名'@'主机名';

文章作者: yangyang
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 yangyang !
  目录