SQL学习-基础语法(DDL.DML.DQL速理解)

文章目录

  • 零.基本知识
    • 1.什么是SQL
    • 2.SQL的一些特点:
    • 3.SQL的分类【以下详解】
    • 4. 数据库的数据类型
  • 一.DDL:操控数据库和表
    • 1.数据库操作
      • 创建
      • 查询
      • 修改
      • 删除
      • 使用数据库
    • 2.表操作
      • 创建
      • 复制
      • 查询
      • 修改
      • 删除
  • 二.DML:操作表数据
    • 1.添加数据
    • 2.删除数据
    • 3.修改数据
  • 三.DQL:访问表数据
    • 1.基础查询
    • 2.条件查询
    • 3.排序查询
    • 4.聚合函数
    • 5.分组查询
    • 6.分页查询

零.基本知识

1.什么是SQL

  • SQL:操作数据库的一门语言

2.SQL的一些特点:

书写

  • 可以多行书写,以分号(; )结尾
  • 不区分大小写,虽然语法大小写都可以,但是建议用大写

注释:

  • 单行注释:
    1. _ :_+空格+注释类容 【这里一定要加空格,不然要报错】
    2. #: # +注释类容
  • 多行注释:/* …*/

3.SQL的分类【以下详解】

  • DDL:用来定义数据库对象,操控数据库和表
  • DML:用来增删改表中的数据
  • DQL:用该查询表中的数据
  • DCL:用来访问授权

4. 数据库的数据类型

  • int:整数类型
    例如:age int;

  • double:小数类型
    例如:score double(5,2) #最大长度为5,保留小数点后两位

  • data:日期,只有年月日。yyyy-MM-dd

  • datatime:日期,年月日时分秒。yyyy–MM-dd HH:mm:ss

  • timestamp:时间戳类型,yyyy–MM-dd HH:mm:ss

    • 这个注意:如果不给这个字段赋值,或者赋值为null,默认使用当前系统时间给他赋值
  • varchar:字符串
    例如:name varchar(20) #最大为20字符

一.DDL:操控数据库和表

1.数据库操作

创建

  • 创建数据库:
    create database 数据库名称;

  • 创建数据库,判断不存在,再创建
    create database if not exists 数据库名称

  • 创建数据库,并且制定字符集(默认utf8)
    create database 数据库名称 character set 字符集名

  • 宗和练习,创建mydata2数据库,并且判断是否存在,然后制定字符集为gbk

    create database if not exits bd4 character set gbk

查询

  • 查询所有数据库名称
    show database
  • 查询某个数据库的字符集,查询某个数据库的创建语句
    show create database 数据库名称

修改

  • 修改数据库的字符集
    alter database 数据库名称 character set 字符集名

删除

  • 删除数据库
    drop database 数据库名称【危险:删库跑路】
  • 先判断有没有,再删除
    drop database if exists 数据库名称

使用数据库

  • 查询当前正在使用的数据库
    select database();
  • 使用数据库
    use 数据库名称

2.表操作

创建

  • 语法:
    create table 表名称(
    列名1 数据类型1,
    列名2 数据类型2,

    列名n 数据类型n
    );
    注意最后一行不要逗号(,)

  • 练习:创建学生信息表
    SQL学习-基础语法(DDL.DML.DQL速理解)_第1张图片

复制

  • 例如:create table stu like students;
  • 含义把students的内容复制给stu

查询

  • 查询某个数据库中所有表名称
    show tables
  • 查询表结构
    desc 表名称

修改

  • 修改表名
    alter table 表名 rename to 新表名
  • 修改表的字符集
    alter table 表名 character set 字符集名称
  • 添加一列
    alter table 表名 add 列名 数据类型
  • 修改列名称,类型
    alter table 表名 change 列名 新列名 新数据类型【改名称和类型】
    alter table 表名 modify 列名 新数据类型【只改类型】
  • 删除列
    alter table 表名 drop 列名

删除

  • 直接删除
    drop table 表名
  • 最好先判断再删除
    drop table if exists 表名;

二.DML:操作表数据

1.添加数据

  • 语法:
    insert into 表名(列名1,列名2…) values(值1,值2…)
  • 注意:
    • 1.在添加字符串和日期类型的时候【除了数字类型其他的都要】,要用引号括起来(单双都可以)
    • 2.如果表名后不定义列名,则默认给所有列添加值
      insert into 表名 values(值1,值2…) 【必须都添加,不知道的就写null】
  • 练习:添加2个学生进去
  • SQL学习-基础语法(DDL.DML.DQL速理解)_第2张图片
    ** 特别注意:这里可能会出现中文字符无法写入报错的问题,原因是mysql的默认字符集没有设置为utf8
  • 处理方法文章
    https://blog.csdn.net/u012004128/article/details/79911869

2.删除数据

  • 语法:
    delete from 表名 where 条件; 【表示把满足where条件的列删除】
  • 例如:
    delete table students where age=18;【把满足age=18的列删除】
  • 注意:
    倘若不写where的类容,那么会直接把表中的所有数据删除【但是这样会执行很多次delete语句,不高效】
    使用:truncate table 表名;【删除表,然后创建一个一模一样的空表】

3.修改数据

  • 语法:
    update 表名 set 列名1=值1,列名2=值2,… where 条件;【把瞒住where条件的列,用前面的替代方式替代】
  • 注意:
    如果不添加where条件,就认为修改表中全部数据
  • 例如:
    update students set age=90 where name=‘张三’;

三.DQL:访问表数据

1.基础查询

  • 1.多个字段查询
    select 字段名1,字段名2,字段名3… from 表名;
    注意:
    如果查询所有字段,则可以使用
    来代替字段列表
  • 2.去除重复
    distinct
  • 3.计算列
    • 一般可以使用四则运算计算一些列的值(一般只会进行数值型计算)
    • ifnull(表达式1,表达式2):null参与的运算,计算结果都为null
      • 表达式1:判断这个是否为null
      • 表达式2:如果1是null,则被替换为2
  • 4.起别名:
    as:也可以省略

2.条件查询

  • 1.where字句后跟的条件

  • 2.运算符
    >、<、<=…<>【不等于,和!=相同】
    between…and…【在这个闭区间内】
    in(元素1,元素2…)【在in里面的集合内查找】
    like

    • 模糊查询,占位符
      _:单个任意字符
      %:多个任意字符

    is null
    and 、 &&
    or 、 ||
    not 、 !

3.排序查询

  • 语法:order by 字句
    order by 排序字段1 排序方式1,排序字段2 排序方式2…
  • 排序方式:
    asc:升序,默认的
    desc:降序
  • 注意:
    如果有多个排序条件,则当前边的条件一样时,才会判断第二条件

4.聚合函数

  • 1.count:计算个数
    • 一般选择非空的列:主键
    • count(*):计算有多少列【只要有一项不为null就算】
  • 2.max:计算最大值
  • 3.min:计算最小值
  • 4.sum:计算和
  • 5.avg:计算平均值
  • 注意:
    集合函数的计算,排除了null值
    解决方案
    • 选择不包含非空的列计算
    • IFNULL函数
      例如:
      select count(ifnull(score,0)) from studens;【表示冲students表中获取所有分数的和】

5.分组查询

  • 语法:
    group by 分组字段;

  • 注意:
    1.分组之后查询的字段:分组字段、聚合函数【不要其他的】

    2.where和having的区别?

    • where在分组之前进行限定,如果不满住条件,则不参与分组。having在分组之后进行限定,如果不满住,则不被1查询出来

    • where后不可以跟聚合函数,having可以进行聚合函数的判断

6.分页查询

  • 语法:
    limit 开始的索引位置,每页可查询的条数

  • 公式:
    开始的索引=(当前的页码-1)*每页可显示数

  • 注意:
    分页是一个”方言“【只有mysql能用limit语句,其他数据库有其他语句】

你可能感兴趣的:(MySQL,sql)