大数据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。

posted on 2019-12-30 15:23  cexo  阅读(286)  评论(0编辑  收藏  举报

导航