• 大数据JavaWeb之MySQL基础---DDL&DQL


    继续上一次https://www.cnblogs.com/webor2006/p/11770756.html的DDL的基础知识学习。

    DDL:操作表

    R(Retrieve):查询:

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

    C(Create):创建:

    • 语法:
       
      比如说咱们要创建这样一个表,用图表示一下:

      咱们来试一下:

       

    • 复制表:
      create table 表名 like 被复制的表名;

    D(Delete):删除:

    1、drop table 表名;

    2、drop table  if exists 表名 ;

    咱们将刚才复制的stu这张表给干掉:

    U(Update):修改:

    • 修改表名 
      alter table 表名 rename to 新的表名;
      试一下:
    • 修改表的字符集
      首先查看一下表的字符集:

      alter table 表名 character set 字符集名称;

      咱们还是将其还原成utf-8,因为还有之前的SQL语句的学习。

    • 添加一列
      alter table 表名 add 列名 数据类型;
    • 修改列名称类型

      alter table 表名 change 列名 新列别 新数据类型;

      alter table 表名 modify 列名 新数据类型;

    • 删除列
      alter table 表名 drop 列名;

    客户端图形化工具:SQLYog

    对于平常使用时肯定会用一个图形化的工具,纯用终端来查看太费眼,所以在继续往下学习之前先来安装好它:

    SQLyog 是业界著名的 Webyog 公司出品的一款简洁高效、功能强大的图形化 MySQL 数据库管理工具。使用 SQLyog 可以快速直观地让您从世界的任何角落通过网络来维护远端的 MySQL 数据库,其安装过程就是默认进行就成,这里就不多说了,安装好之后,则需要进行登录:

     

    然后执行sql可以像这样:

     

    DML:增删改表中数据【重要!!】

    添加数据:

    然后查询一下表数据:

     

    接下来继续添加:

     

    删除数据:

    这种清除表数据的效率不太高,下面可以用"TRUNCATE TABLE"的方式来试一下,先给表中添加一些记录:

    然后我想清空数据表中的所有记录,同效做法则可以:

    修改数据:

    先给表中添点数据:

    接下来修改一个张三丰的年龄:

    接下来可以改多列:

    下面再来试一下注意点提到的,UPDATE时不加任何条件:

    DQL:查询表中的记录

    语法:

    准备数据:

    在学查询sql语法之前,先来重新创建一张表,里面的数据比较多,便于学习各种查询语法,其SQL为:

    CREATE TABLE student3 ( id INT, -- 编号
    NAME VARCHAR(20), -- 姓名 
    age INT, -- 年龄
    sex VARCHAR(5), -- 性别 
    address VARCHAR(100), -- 地址 
    math INT, -- 数学
    english INT -- 英语
    );
    INSERT INTO student3(id,NAME,age,sex,address,math,english) VALUES (1,'马云',55,'',' 杭州',66,78),(2,'马化腾',45,'','深圳',98,87),(3,'马景涛',55,'','香港',56,77),(4,'柳岩 ',20,'','湖南',76,65),(5,'柳青',20,'','湖南',86,NULL),(6,'刘德华',57,'','香港 ',99,99),(7,'马德',22,'','香港',99,99),(8,'德玛西亚',18,'','南京',56,65);

    如下:

    基础查询:

    多个字段的查询:

    去除重复:distinct

    比如我们想知道所有的学生都有哪些地方的,所以:

    计算列:

    比如咱们想计算表中的math和english分数的总和,所以可以这样弄:

    但是!!!发现查询记录中有个问题:

    所以这里用ifnull来解决:

    起别名: 

    对于上面查询总分那块可读性不太强:

    可以给它起个别名:

    另外AS关键字可以省略:

     

    条件查询:

    where子句后跟条件,其中可以有如下运算符。

    下面具体来实践下:

    1、查询年龄大于20岁:

     

     

    2、查询年龄等于20岁:

    3、查询年龄不等于20岁:

    还有一个等价的写法:

    4、查询年龄大于等于20 小于等于30:

    但是SQL推荐的并且的写法是这样的:

    另外还有一种写法:

    5、查询年龄22岁,18岁,25岁的信息:

    另一种写法:

    5、查询英语成绩为null:

    那正确的写法应该是:

    6、查询英语成绩不为null:

    7、查询姓马的有哪些?

    8、查询姓名第二个字是化的人。

    9、查询姓名是3个字的人。

    10、查询姓名中包含德的人。

    DQL:查询语句

    排序查询:

    咱们来实践一下:

    也就是完整写法为:

     

    接着降序排一下:

    接下来再来查这样一个需求:“按照数学成绩排名,如果数学成绩一样,则按照英语成绩排名”:

    聚合函数:

    概念:将一列数据作为一个整体,进行纵向的计算。

    1. count:计算个数

      1. 一般选择非空的列:主键
      2. count(*)

    在数据表中english这个列中有为null的:

     

    咱们来试一下如果统计它的个数的话,看输出的是多少条?

     

    很明显是排除了null行的,很明显这是不合理的嘛,应该要包含这个为null的个数的,所以解决一下:

    而实际要统计个数一般都会用count(*),但是一般是用coun(主键)。

    2. max:计算最大值

    3. min:计算最小值

    4. sum:计算和

    5. avg:计算平均值

     

    分组查询:

    1、按照性别分组。分别查询男、女同学的平均分。

    2、按照性别分组。分别查询男、女同学的平均分,人数。

    3、按照性别分组。分别查询男、女同学的平均分,人数 要求:分数低于70分的人,不参与分组。

     

    4、按照性别分组。分别查询男、女同学的平均分,人数 要求:分数低于70分的人,不参与分组,分组之后。人数要大于2个人。

     

    另外还有一种更加简洁的写法:

    分页查询:

    下面来试一下:

    另外特别要注意:limit只能用于mysql。

  • 相关阅读:
    python测试开发django-rest-framework-87.分页查询之偏移分页(LimitOffsetPagination)和游标分页(CursorPagination)
    python测试开发django-rest-framework-86.分页查询功能(PageNumberPagination)
    python测试开发django-rest-framework-85.序列化(ModelSerializer)之设置必填(required)和非必填字段
    python测试开发django-rest-framework-84.序列化(ModelSerializer)之日期时间格式带T问题
    去掉DELPHI开启后弹出安全警告框
    使用path 格式获取java hashmap key 值
    Kubeapps-2.0 发布了
    monio系统性能分析相关命令
    imgproxy 强大高效的图片处理服务
    nodejs java 互调用
  • 原文地址:https://www.cnblogs.com/webor2006/p/12119943.html
Copyright © 2020-2023  润新知