14---mysql入门基础及其语法


typora-root-url: img
typora-copy-images-to: img

MYSQL基础语法

学习目标

  1. 能够理解数据库的概念
  2. 能够安装MySQL数据库
  3. 能够启动,关闭及登录MySQL
  4. 能够使用SQL语句操作数据库
  5. 能够使用SQL语句操作表结构
  6. 能够使用SQL语句进行数据的添加修改和删除的操作
  7. 能够使用SQL语句简单查询数据

学习内容

数据库的基本知识

目标

  1. 学习数据库的概念
  2. 学习常用的数据库
什么是数据库

存储数据的仓库,数据库本质也是文件。

数据的存储方式
  1. 数据保存在内存

    int[] arr = new int[]{1, 2, 3, 4};
    ArrayList<Integer>list = new ArrayList<Integer>();
    list.add(1);
    list.add(2);
    

    new出来的对象存储在堆中.堆是内存中的一小块空间

    优点:内存速度快
    缺点:断电/程序退出,数据就清除了.内存价格贵

  2. 数据保存在普通文件
    优点:永久保存
    缺点:查找,增加,修改,删除数据比较麻烦,效率低

  3. 数据保存在数据库
    优点:永久保存,通过SQL语句比较方便的操作数据库,数据库是对大量的信息进行管理的高效的解决方案

常见数据库

[外链图片转存失败(img-M6Vt29rr-1564737527550)(/常见数据库.PNG)]
Oracle:收费的大型数据库,Oracle公司的产品。Oracle收购SUN公司,收购MYSQL。
MYSQL:开源免费的数据库,小型的数据库.已经被Oracle收购了.MySQL6.x版本也开始收费。
DB2 :IBM公司的数据库产品,收费的。常应用在银行系统中.
SQLServer:MicroSoft 公司收费的中型的数据库。C#、.net等语言常使用。
SyBase:已经淡出历史舞台。提供了一个非常专业数据建模的工具PowerDesigner。
SQLite: 嵌入式的小型数据库,应用在手机端。

常用数据库MYSQLOracle
在web应用中,使用的最多的就是MySQL数据库,原因如下:

  1. 开源、免费
  2. 功能足够强大,足以应付web应用开发(最高支持千万级别的并发访问)

小结

  1. 说出数据库的概念:存储数据的仓库
  2. 说出常用的数据库:MYSQL, Oracle

数据库的安装

目标

学习mysql数据库软件的安装

讲解

安装过程:

  1. 文件复制的过程,解压文件到指定的目录下

    [外链图片转存失败(img-zhrLeT92-1564737527553)(/1550408706301.png)]

  2. 服务器的配置

    [外链图片转存失败(img-rjNwAutO-1564737527555)(/1550408729170.png)]

    1. 端口号是:3306

    2. 管理员名字叫:root

    3. 可以远程访问:[外链图片转存失败(img-oKeROZut-1564737527556)(/1550408779650.png)]

小结

  1. MySQL安装过程的两个步骤:1.解压复制文件的过程 2.配置MYSQL

  2. MySQL端口号是:3306

  3. 管理员名字:root

MySQL目录结构

目标

了解MySQL目录结构

-- bin:mysql相关的可执行文件*.exe-- MySQLInstanceConfig.exe mysql的配置程序-- data: mysql自带的数据库文件(不用关注)-- include: c语言的头文件(不用关注)-- lib: 存放mysql使用到的dll动态库(相当于jar包,不用关注)-- my.ini mysql的配置文件,配置了mysql的相关信息

命令行客户端连接服务器

目标

  1. 学习打开和关闭mysql服务
  2. 学习登录mysql
打开和关闭mysql服务

[外链图片转存失败(img-eywVkKwk-1564737527557)(/1550408825267.png)]
[外链图片转存失败(img-PAzzLc4c-1564737527559)(/mysql启动02.png)]

DOS命令⽅方式启动

[外链图片转存失败(img-RdA5GsQz-1564737527560)(/1564531056368.png)]

[外链图片转存失败(img-xmQ7No1v-1564737527561)(/1564531076469.png)]

启动MYSQL: net start mysql

停⽌止MYSQL: net stop mysql

登录mysql服务器

[外链图片转存失败(img-qTjrN1Ni-1564737527563)(/1550289380140.png)]

​ MySQL是一个需要账户名密码登录的数据库,登陆后使用,它提供了一个默认的root账号,使用安装时设置的密码即可登录

  1. 登录格式1:在DOS命令行:mysql -u用户名 -p密码
    例如:

    mysql -uroot -proot
    

    [外链图片转存失败(img-N8gdASED-1564737527565)(/MYSQL登录01.png)]

    后输入密码方式:

    mysql -uroot -p回车
    下一行输入密码
    
  2. 登录格式2:mysql -hip地址 -u用户名 -p密码
    例如:

    mysql -h127.0.0.1 -uroot -proot
    
  3. 退出MySQL:exit

小结

  1. 连接到本机的mysql

    mysql -uroot -proot
    
  2. 连接到指定主机的mysql

    mysql -hip地址 -u账号 -p密码
    

图形界面SQLyog客户端

目标

  1. 学习SQLyog的安装
  2. 学习使用SQLyog连接mysql
讲解

[外链图片转存失败(img-s17HvAcz-1564737527566)(/1550289366973.png)]

​ SQLyog是业界著名的Webyog公司出品的一款简洁高效、功能强大的图形化MySQL数据库管理工具。使用SQLyog可以快速直观地让您从世界的任何角落通过网络来维护远端的MySQL数据库

[外链图片转存失败(img-6SxzE0lI-1564737527567)(/SQLYog介绍.png)]

  1. 双击[外链图片转存失败(img-dBWAozge-1564737527569)(/SQLYog程序.png)]
  2. 一直下一步,直到出现下面对话框
    [外链图片转存失败(img-TY4mPhP9-1564737527570)(/SQLYog注册.png)]
  3. 输入名称和秘钥
  4. 重启SQLyog即可
  5. 使用SQLyog登录数据库
    [外链图片转存失败(img-kVwKUUIl-1564737527571)(/SQLyog使用01.png)]

小结

  1. SQLyog的安装? 一直下一步

  2. 使用SQLyog连接mysql?

    点击新建 -> 输入密码 -> 测试连接 -> 连接

服务器与数据库、表、记录的关系

目标

学习mysql服务器与数据库、表、记录的关系

讲解

[外链图片转存失败(img-ZB3QfaU0-1564737527573)(/1550409365086.png)]

实体类与表的对应关系

[外链图片转存失败(img-BTGl2BBt-1564737527574)(/实体类与表的对应关系.png)]

关系型数据库的核心单元是表

小结

mysql服务器与数据库、表、记录的关系?

mysql服务器可以管理多个数据库

一个数据库可以有多张表

一张表中可以存储多条记录

SQL语句的分类和语法

目标

学习SQL的概念和作用

什么是SQL

结构化查询语言(Structured Query Language)简称SQL。

SQL语句就是对数据库进行操作的一种语言。

SQL作用

通过SQL语句我们可以方便的操作数据库、表、数据。
SQL是数据库管理系统都需要遵循的规范。不同的数据库生产厂商都支持SQL语句,但都有特有内容。
[外链图片转存失败(img-Nj83nw7o-1564737527576)(/SQL规范.png)]

SQL语句分类
  1. DDL(Data Definition Language) 数据定义语言
    用来定义数据库对象:数据库,表,列等。关键字:create, drop,alter等

  2. DML(Data Manipulation Language) 数据操作语言
    用来对数据库中表的数据进行增删改。关键字:insert, delete, update等

  3. DQL(Data Query Language) 数据查询语言
    对数据库进行数据查询,关键字select

  4. DCL(Data Control Language)数据控制语言(了解)

    是用来设置或更改数据库用户或角色权限的语句,这个比较少用到

SQL通用语法
  1. SQL语句可以单行或多行书写,以分号结尾。

  2. 可使用空格和缩进来增强语句的可读性。

  3. MySQL数据库的SQL语句不区分大小写,关键字建议使用大写。

    SELECT 
            * 
    	FROM 
    	user;
    
  4. 3种注释
    单行注释: – 注释
    多行注释: /*注释*/
    MYSQL特有的单行注释:# 注释

小结

  1. SQL的作用?

    操作数据库的语言
    
  2. SQL的分类?

    DDL: 数据定义语言,主要是操作数据库,表,字段
    DML:数据操作语言,对数据进行增删改
    DQL:数据查询语言,对数据进行查询
    DCL: 数据控制语言,创建用户(了解)
    
  3. SQL的语法特点?

    1. SQL语句可以单行或多行书写,以分号结尾。
    2. 可使用空格和缩进来增强语句的可读性。
    3. MySQL数据库的SQL语句不区分大小写,关键字建议使用大写。
    

DDL创建数据库(重要)

目标

学习创建数据库的三种语法

讲解

创建数据库
  1. 直接创建数据库

    CREATE DATABASE 数据库名;
    
    CREATE:表示创建
    DATABASE:表示数据库
    
  2. 判断是否存在并创建数据库

    CREATE DATABASE IF NOT EXISTS 数据库名;
    
  3. 创建数据库并指定字符集(编码表)

    CREATE DATABASE 数据库名 DEFAULT CHARACTER SET 字符集;
    

注意: 创建表时必须设置列的类型

  1. 具体操作:
  • 直接创建数据库db1

    CREATE DATABASE db1;
    

    [外链图片转存失败(img-rOHs62b0-1564737527578)(/直接创建数据库.png)]

  • 判断是否存在并创建数据库db2

    CREATE DATABASE IF NOT EXISTS db2;
    

    [外链图片转存失败(img-9cvViW5T-1564737527579)(/判断是否存在并创建数据库.png)]

  • 创建数据库db3并指定字符集为gbk

    CREATE DATABASE db2 CHARACTER SET gbk;
    

    [外链图片转存失败(img-DFpZk7oD-1564737527580)(/创建数据库并指定字符集.png)]

查看数据库
  1. 查看所有的数据库
SHOW DATABASES;

[外链图片转存失败(img-lsT6p4OI-1564737527582)(/查看所有数据库.png)]
2. 查看某个数据库的定义信息

SHOW CREATE DATABASE 数据库名;

[外链图片转存失败(img-kU4vE8t4-1564737527583)(/查看某个数据库的定义信息.png)]

小结

  1. 创建数据库语法

    CREATE DATABASE 数据库名;
    
  2. 查看有哪些数据库

    SHOW DATABASES;
    

DDL修改和删除数据库(重要)

目标

  1. 学习修改数据库的字符集
  2. 学习删除数据库
修改数据库字符集
ALTER:表示修改

ALTER DATABASE 数据库名 DEFAULT CHARACTER SET 新字符集;

具体操作:

  • 将db3数据库的字符集改成utf8
    ALTER DATABASE db3 DEFAULT CHARACTER SET utf8;
    
    [外链图片转存失败(img-cmGDnf2g-1564737527585)(/修改数据库字符集.png)]
删除数据库
DROP:表示删除

DROP DATABASE 数据名;

具体操作:

  • 删除db2数据库
    DROP DATABASE db2;
    
    [外链图片转存失败(img-j4CZoCd8-1564737527586)(/删除数据库.png)]

小结

  1. 修改数据库的字符集格式?

    ALTER DATABASE 数据库名 DEFAULT CHARACTER SET 新字符集;
    
  2. 删除数据库格式?

    DROP DATABASE 数据库名
    

DDL使用数据库

目标

  1. 学习切换数据库语法
  2. 查看正在使用的数据库

讲解

  1. 查看正在使用的数据库

    SELECT DATABASE()
  2. 使用/切换数据库

    use 数据库名;
    

具体操作:

  • 查看正在使用的数据库
    SELECT DATABASE();
    
    [外链图片转存失败(img-KrinvCPZ-1564737527587)(/查看正在使用的数据库.png)]
  • 使用db1数据库
    USE db1;
    
    [外链图片转存失败(img-rC25Vl3l-1564737527589)(/使用db1数据库.png)]

小结

DDL语句操作数据库关键字
创建CREATE DATABASE 数据库名;
修改ALTER DATABASE 数据名 DEFUALT CHARACTER SET 新字符集;
查看SHOW DATABASES;
删除DROP DATABASE 数据库名;

DDL创建表(重要)

目标

学习DDL创建表

前提先使用某个数据库(db1)

创建表
CREATE TABLE 表名(字段名 数据类型, 字段名 数据类型);

建议写成如下格式:

CREATE TABLE 表名(
    字段名 数据类型,
    字段名 数据类型
);

关键字说明:

CREATE:表示创建
TABLE: 表示数据表
MySQL数据类型

MySQL中的我们常使用的数据类型如下:
[外链图片转存失败(img-87OQk51E-1564737527590)(/MYSQL常用数据类型.png)]

详细的数据类型如下(不建议详细阅读!)

[外链图片转存失败(img-hZjDQdNz-1564737527591)(/1550410505421.png)]

具体操作:

创建student表包含id,name,birthday字段

CREATE TABLE student (
      id INT,
      name VARCHAR(20),
      birthday DATE
);

小结

  1. 创建表语句

    CREATE TABLE 表名(字段名 字段类型, 字段名 字段类型);
    
  2. 常用数据类型:

    int
    double
    

varchar
date




## DDL查看表(重要)

### 目标

1. 学习查看某个数据库中的所有表
2. 学习查看表结构

### 讲解

1. 查看某个数据库中的所有表

```sql
SHOW TABLES;
  1. 查看表结构

    DESC 表名;
    
  2. 查看创建表的SQL语句

    SHOW CRETE TABLE 表名;
    

具体操作:

  • 查看mysql数据库中的所有表

    SHOW TABLES;
    

    [外链图片转存失败(img-Dzy6Bk3R-1564737527592)(/查看某个数据库中的所有表.png)]

  • 查看student表的结构

    DESC student;
    

    [外链图片转存失败(img-R3Ep4Ipy-1564737527594)(/查看student表的结构.png)]

  • 查看student的创建表SQL语句

    SHOW CREATE TABLE student;
    

    [外链图片转存失败(img-HTEJzd7j-1564737527595)(/查看student的创建表SQL语句.png)]

小结

  1. 查看某个数据库中的所有表

    SHOW TABLES;
    
  2. 查看表结构

    DESC 表名;
    
  3. 查看创建表的SQL语句

    SHOW CREATE TABLE 表名;
    

DDL删除表(重要)

目标

  1. 学习删除表语法
  2. 学习快速创建一个表结构相同的表

讲解

快速创建一个表结构相同的表
CREATE TABLE 表名 LIKE 其他表;

具体操作:

  • 创建s1表,s1表结构和student表结构相同

    CREATE TABLE s1 LIKE student;
    
删除表
  1. 直接删除表

    DROP TABLE 表名;
    
  2. 判断表是否存在并删除表

    DROP TABLE IF EXISTS 表名;
    

具体操作:

  • 直接删除表s1表
    DROP TABLE s1;
    
    [外链图片转存失败(img-VzVsjKrl-1564737527597)(/直接删除表.png)]
  • 判断表是否存在并删除s1表
    DROP TABLE IF EXISTS s1;
    
    [外链图片转存失败(img-U9IyqcMP-1564737527598)(/判断表存在并删除.png)]

小结

  1. 快速创建一个表结构相同的表

    CREATE TABLE 表名 LIKE 其他表;
    
  2. 删除表语法

    DROP TABLE 表名;
    

DDL修改表结构

目标

学习修改表结构的语法

讲解

所有的修改表结构的语句都是: ALTER TABLE 表名 XXX;

修改表结构使用不是很频繁,只需要了解,等需要使用的时候再回来查即可

  1. 添加表一列

    ALTER TABLE 表名 ADD 字段名 字段类型;
    

    具体操作:

    • 为学生表添加一个新的字段remark,类型为varchar(20)
      ALTER TABLE student ADD remark VARCHAR(20);
      
      [外链图片转存失败(img-pVQpoUHg-1564737527600)(/添加字段.png)]
  2. 修改列类型

    ATLER TABLE 表名 MODIFY 字段名 新的类型;
    

    具体操作:

    • 将student表中的remark字段的改成varchar(100)
      ALTER TABLE student MODIFY remark VARCHAR(100);
      
      [外链图片转存失败(img-hZSdfp6A-1564737527601)(/修改字段类型.png)]
  3. 修改列名

    ALTER TABLE 表名 CHANGE 老字段名 新字段名 类型;
    

    具体操作:

    • 将student表中的remark字段名改成intro,类型varchar(30)
      ALTER TABLE student CHANGE remark intro varchar(30);
      
      [外链图片转存失败(img-7ztp0uCC-1564737527602)(/修改表字段名称.png)]
  4. 删除列

    ALTER TABLE 表名 DROP 字段名;
    

    具体操作:

    • 删除student表中的字段intro
      ALTER TABLE student DROP intro;
      
      [外链图片转存失败(img-FqCcoE7N-1564737527603)(/删除字段.png)]
  5. 修改表名

    RENAME TALBE 旧表名 TO 新表名;
    

    具体操作:

    • 将学生表student改名成student2,再删除student2表
       RENAME TABLE student TO student2;
       DROP TABLE student2;
      
      [外链图片转存失败(img-FwLZMUgS-1564737527605)(/修改表名.png)]
  6. 修改表的字符集

    ALTER TABLE 表名 DEFAULT CHARACTER SET 新字符集;
    

    具体操作:

    • 将sutden2表的编码修改成gbk
      ALTER TABLE student2 character set gbk;
      
      [外链图片转存失败(img-pnL0aRhQ-1564737527606)(/修改字符集.png)]

小结

  1. 所有修改表前面的语法都是相同的?

    ALTER TABLE 表名 XXXX;
    
  2. 添加一列:

    ALTER TABLE 表名 ADD 字段名 字段类型;
    
  3. 修改类型:

    ALTER TABLE 表名 MODIFY 字段名 新的类型;
    
  4. 修改字段名和类型:

    ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型;
    
  5. 删除一列:

    ALTER TABLE 表名 DROP 字段名;
    

DML插入记录(重点)

目标

学习DML往表中添加记录

讲解

DML是对表中的数据进行增删改

创建student表包含id,name,birthday,sex,address字段。

CREATE TABLE student (
      id INT,
      name VARCHAR(20),
      birthday DATE,
      sex char(2),
      address varchar(50)
);
插入全部字段
  • 所有的字段名都写出来

    INSERT INTO:表示添加数据
    
    INSERT INTO 表名 (字段名1, 字段名2...) VALUES (字段值1, 字段值2);
    
  • 不写字段名

    INSERT INTO 表名 VALUES (字段值1, 字段值2);
    
插入部分数据
只需要指定要插入数据的字段
INSERT INTO 表名 (字段名1, 字段名2...) VALUES (字段值1, 字段值2);

没有添加数据的字段会使用NULL

  1. 具体操作:

    • 插入部分数据,往学生表中添加 id, name, age, sex数据
    INSERT INTO student (id, NAME, age, sex) VALUES (1, '张三', 20, '男');
    

    [外链图片转存失败(img-8wvLHRez-1564737527608)(/添加部分数据.png)]

    • 向表中插入所有字段

      • 所有的字段名都写出来
      INSERT INTO student (NAME, id, age, sex, address) VALUES ('李四', 2, 23, '女', '广州');
      

      [外链图片转存失败(img-EePJsmgF-1564737527609)(/所有字段都添加数据.png)]

      • 不写字段名
      INSERT INTO student VALUES (3, '王五', 18, '男', '北京');
      

      [外链图片转存失败(img-kenNnEBT-1564737527611)(/添加所有字段数据.png)]

注意
  • 值与字段必须对应,个数相同,类型相同
  • 值的数据大小必须在字段的长度范围内
  • 除了数值类型外,其它的字段类型的值必须使用引号引起。(建议单引号)
  • 如果要插入空值,可以不写字段,或者插入null

小结

  1. 向表中添加一条完整记录:

    所有的字段都写出来
    INSERT INTO 表名 (字段名1, 字段名2...) VALUES (值1, 值2...);
    
    不写字段名
    INSERT INTO 表名 VALUES (值1, 值2...);
    
  2. 向表中添加一条记录部分列

    写要添加数据的字段即可
    INSERT INTO 表名 (字段名1, 字段名2...) VALUES (值1, 值2...);
    

DOS命令窗口操作数据乱码问题

目标

学习解决DOS命令行乱码

讲解

当我们使用DOS命令行进行SQL语句操作如有有中文会出现乱码,导致SQL执行失败
[外链图片转存失败(img-inciDxjs-1564737527612)(/DOS中文乱码01.png)]
错误原因:因为MySQL的客户端设置编码是utf8,而系统的DOS命令行编码是gbk,编码不一致导致的乱码
[外链图片转存失败(img-gzklrgrq-1564737527614)(/1551157215427.png)]

解决方案:

  1. 快捷设置

    在DOS命令行输入:
    set names gbk;
    

注意:以上方式为临时方案,退出DOS命令行就失效了,需要每次都配置

  1. 修改MySQL安装目录下的my.ini文件,重启服务所有地方生效。此方案将所有编码都修改了[不建议]
    [外链图片转存失败(img-MGQn0ETo-1564737527616)(/DOS中文乱码04.png)]

小结

如何解决DOS命令行乱码

在DOS命令行输入:
set names gbk;

(先切换(use)到库在进行修改表象操作)

DML更新表记录

目标

学习DML更新表记录

讲解

  1. 不带条件修改数据

    UPDATE 表名 SET 字段名=新的值;
    
  2. 带条件修改数据

    UPDATE 表名 SET 字段名=新的值 WHERE 字段名=;
    
  3. 关键字说明

    UPDATE:表示修改
    
  4. 具体操作:

    • 不带条件修改数据,将所有的性别改成女

      UPDATE student SET sex='女';
      

      [外链图片转存失败(img-79lFGHEp-1564737527617)(/修改所有数据.png)]

    • 带条件修改数据,将id号为2的学生性别改成男

      UPDATE student SET sex='男' WHERE id=2;
      

      [外链图片转存失败(img-yGyG2F2a-1564737527621)(/带条件修改.png)]

    • 一次修改多个列,把id为3的学生,年龄改成26岁,address改成北京

      UPDATE student SET age=26, address='北京' WHERE id=3;
      

      [外链图片转存失败(img-a5ZB3zuZ-1564737527622)(/一次性修改2个字段.png)]

小结

  1. 不带条件的更新数据库记录

    UPDATE 表名 SET 字段名=新的值;
    
  2. 带条件更新数据库记录

    UPDATE 表名 SET 字段名=新的值 WHERE 条件;
    

DML删除表记录

目标

学习DML删除表记录

讲解

  1. 带条件删除数据

    DELETE FROM 表名 WHERE 字段名=;
    
  2. 不带条件删除数据

    DELETE FROM 表名;
    
  3. 具体操作:

    • 带条件删除数据,删除id为3的记录

      DELETE FROM student WHERE id=3;
      

      [外链图片转存失败(img-LvjAtDJq-1564737527623)(/删除满足条件的记录.png)]

    • 不带条件删除数据,删除表中的所有数据

      DELETE FROM student;
      

      [外链图片转存失败(img-55kr37PJ-1564737527624)(/删除所有记录.png)]

小结

  1. 指定条件删除

    DELTE FROM 表名 WHERE 字段名=值;
    
  2. 没有条件删除所有的记录

    DELTE FROM 表名;
    

数据库约束的概述

目前根据字段的类型可以对数据进行限制,但是这个限制不够全面。

目标

学习数据库约束的作用

讲解

数据库约束的作用

​ 对表中的数据进行进一步的限制,保证数据的正确性有效性完整性

约束种类
  • PRIMARY KEY: 主键约束
  • UNIQUE: 唯一约束
  • NOT NULL: 不为空
  • DEFAULT: 默认约束
  • FOREIGN KEY: 外键约束 (明天学习)

小结

  1. 数据库约束的作用?

    对表中的数据进一步的限制,保证数据正确性,完整性,有效性

主键约束

目标

  1. 学习主键约束的作用
  2. 学习加和删除主键约束
为什么需要主键约束

有些记录的 name,age,score 字段的值都一样时,那么就没法区分这些数据,造成数据库的记录不唯一,这样就不方便管理数据。
[外链图片转存失败(img-Xkn9vGGm-1564737527626)(/主键01.png)]
[外链图片转存失败(img-9SQvBBmJ-1564737527627)(/主键02.png)]

每张表都应该有一个主键,并且每张表只能有一个主键。

主键的作用

区分表中的记录

哪个字段作为表的主键

通常不用业务字段作为主键,单独给每张表设计一个id的字段,把id作为主键。主键是给数据库和程序使用的,不是给最终的客户使用的。所以主键有没有含义没有关系,只要不重复,非空就行。

[外链图片转存失败(img-r7Yy2O9t-1564737527630)(/1564533291054.png)]

创建主键

主键:PRIMARY KEY
主键的特点

  • 主键必须包含唯一的值
  • 主键不能包含NULL值

创建主键方式

  1. 在创建表的时候给字段添加主键

    CREATE TABLE 表名 (
    	字段名 字段类型 PRIMARY KEY,
    	字段名 字段类型
    );
    
  2. 在已有表中添加主键

    ALTER TABLE 表名 ADD PRIMARY KEY(字段名);
    

具体操作:

  • 创建表学生表st5, 包含字段(id, name, age)将id做为主键
CREATE TABLE st5 (
	id INT PRIMARY KEY, -- id是主键
	NAME VARCHAR(20),
	age INT
);

[外链图片转存失败(img-zZHenLwk-1564737527632)(/主键03.png)]

  • 添加数据
INSERT INTO st5 (id, NAME) VALUES (1, '唐伯虎');
INSERT INTO st5 (id, NAME) VALUES (2, '周文宾');
INSERT INTO st5 (id, NAME) VALUES (3, '祝枝山');
INSERT INTO st5 (id, NAME) VALUES (4, '文征明');
  • 插入重复的主键值,报错
-- 主键是唯一的不能重复:Duplicate entry '1' for key 'PRIMARY'
INSERT INTO st5 (id, NAME) VALUES (1, '文征明2');
  • 插入NULL的主键值,报错
-- 主键是不能为空的:Column 'id' cannot be null
INSERT INTO st5 (id, NAME) VALUES (NULL, '文征明3');
删除主键
ALTER TABLE 表名 DROP PRIMARY KEY;

具体操作:

  • 删除st5表的主键
ALTER TABLE st5 DROP PRIMARY KEY;

[外链图片转存失败(img-aglSf9eL-1564737527633)(/主键04.png)]

小结

  1. 说出主键约束的作用?区分表中的记录

  2. 主键的特点?不能重复,不能为空

  3. 添加和删除主键?删对主键的操作相当于修改表结构,故用Alter

创建表时添加主键
CREATE TABLE 表名 (
	字段名 字段类型 PRIMAYR KEY,
	字段名 字段类型
);
在已有表上添加主键
ALTER TABLE 表名 ADD PRIMARY KEY(字段名);
删除主键
ALTER TABLE 表名 DROP PRIMARY KEY;

主键自增

目标

学习主键为自动增长

讲解

​ 主键让我们自己添加很有可能重复,我们通常希望在每次插入新记录时,数据库自动生成主键字段的值

字段名 字段类型 PRIMARY KEY AUTO_INCREMENT

AUTO_INCREMENT 表示自动增长(字段类型必须是整数类型)

具体操作:

  • 创建学生表st6, 包含字段(id, name, age)将id做为主键并自动增长
CREATE TABLE st6 (
	id INT PRIMARY KEY AUTO_INCREMENT,
	NAME VARCHAR(20),
	age INT
);
  • 插入数据
-- 主键默认从1开始自动增长
INSERT INTO st6 (NAME, age) VALUES ('唐僧', 22);
INSERT INTO st6 (NAME, age) VALUES ('孙悟空', 26);
INSERT INTO st6 (NAME, age) VALUES ('猪八戒', 25);
INSERT INTO st6 (NAME, age) VALUES ('沙僧', 20);

[外链图片转存失败(img-dJXnhhKe-1564737527635)(/主键05.png)]

扩展
默认地AUTO_INCREMENT 的开始值是1,如果希望修改起始值,请使用下列SQL语法

ALTER TABLE 表名 AUTO_INCREMENT=起始值;

DELETETRUNCATE的区别

  • DELETE 删除表中的数据,但不重置AUTO_INCREMENT的值。
    [外链图片转存失败(img-HyvEJxzC-1564737527636)(/主键06.png)]

  • TRUNCATE 摧毁表,重建表,AUTO_INCREMENT重置为1
    [外链图片转存失败(img-Vj8ouBcZ-1564737527638)(/主键07.png)]

小结

  1. 设置主键为自动增长格式?

    字段名 字段类型 PRIMARY KEY AUTO_INCREMENT
    

唯一约束

目标

  1. 学习唯一约束的作用
  2. 学习添加唯一约束
唯一约束的作用

这个字段的值不能够重复

唯一约束的格式
CREATE TABLE 表名 (
	字段名 字段类型 UNIQUE,
	字段名 字段类型
);

具体步骤:

  • 创建学生表st7, 包含字段(id, name),name这一列设置唯一约束,不能出现同名的学生
CREATE TABLE st7 (
	id INT,
	NAME VARCHAR(20) UNIQUE
);
  • 添加一些学生

    多个null值

INSERT INTO st7 VALUES (1, '貂蝉');
INSERT INTO st7 VALUES (2, '西施');
INSERT INTO st7 VALUES (3, '王昭君');
INSERT INTO st7 VALUES (4, '杨玉环');

-- 插入相同的名字出现name重复: Duplicate entry '貂蝉' for key 'name'
INSERT INTO st7 VALUES (5, '貂蝉');

-- 出现多个null的时候会怎样?因为null是没有值,所以不存在重复的问题
INSERT INTO st3 VALUES (5, NULL);
INSERT INTO st3 VALUES (6, NULL);

小结

  1. 说出唯一约束的作用?

    这个字段的值不能够重复
    
  2. 添加唯一约束格式?

    字段名 字段类型 UNIQUE
    

非空约束

目标

  1. 学习非空约束的作用
  2. 学习添加非空约束
非空约束的作用

限制表中数据不能为空

非空约束的语法格式
CREATE TABLE 表名 (
	字段名 字段类型 NOT NULL,
	字段名 字段类型
);

具体操作:

  • 创建表学生表st8, 包含字段(id,name,gender)其中name不能为NULL
CREATE TABLE st8 (
	id INT,
	NAME VARCHAR(20) NOT NULL,
	gender CHAR(2)
);
  • 添加一些完整的记录
INSERT INTO st8 VALUES (1, '郭富城', '男');
INSERT INTO st8 VALUES (2, '黎明', '男');
INSERT INTO st8 VALUES (3, '张学友', '男');
INSERT INTO st8 VALUES (4, '刘德华', '男');

-- 姓名不赋值出现姓名不能为null: Column 'name' cannot be null
INSERT INTO st8 VALUES (5, NULL, '男');

小结

非空约束的格式:

CREATE TABLE 表名 (
	字段名 字段类型 NOT NULL,
	字段名 字段类型
);

一个字段可以同时添加多个约束

CREATE TABLE stt(
	id INT,
	NAME VARCHAR(20) UNIQUE NOT NULL 
);

扩展: 主键唯一,非空,普通的字段我们也可以添加唯一和非空.有区别吗?

1.一张表只能有一个主键,可以有多个唯一非空的字段
2.主键可以自动增长,普通字段不行

默认值

目标

  1. 学习默认值的作用
  2. 学习给字段添加默认值

讲解

默认值的作用

如果这个字段不设置值,就使用默认值。

默认值格式
CREATE TABLE 表名 (
	字段名 字段类型,
	字段名 字段类型 DEFAULT 默认值
);

具体步骤:

  • 创建一个学生表 st9,包含字段(id,name,address), 地址默认值是广州
CREATE TABLE st9 (
	id INT,
	NAME VARCHAR(20),
	address VARCHAR(50) DEFAULT '广州'
);
  • 添加一条记录,使用默认地址
INSERT INTO st9 (id, NAME) VALUES (1, '刘德华');

[外链图片转存失败(img-iVmYIaIe-1564737527640)(/默认值.png)]

  • 添加一条记录,不使用默认地址
INSERT INTO st9 VALUES (2, '张学友', '香港');

小结

  1. 说出默认值的作用?

    这个字段不设置值,使用默认值
    
  2. 给字段添加默认值格式?

    字段名 字段类型 DEFAULT 默认值
    

DQL没有条件的简单查询

目标

学习DQL简单查询

讲解

注意:查询不会对数据库中的数据进行修改,只是一种显示数据的方式。

查询表中所有列数据
  1. 写出查询每列的名称
SELECT 字段名1, 字段名2,... FROM 表名;

具体操作:

SELECT id, NAME ,age, sex, address FROM student;

[外链图片转存失败(img-XoXZwk3Q-1564737527642)(/查询所有列.png)]

  1. 使用*表示所有列

    SELECT * FROM 表名;
    

    具体操作:

    SELECT * FROM student;
    

    [外链图片转存失败(img-SEkFaZwI-1564737527643)(/查询所有列.png)]

查询表中指定列数据

查询指定列的数据,多个列之间以逗号分隔

SELECT 字段名1, 字段名2 FROM 表名;

具体操作:
查询student表中的name 和 age 列

SELECT NAME, age FROM student;

[外链图片转存失败(img-8JDXAnTl-1564737527646)(/查询指定字段.png)]

别名查询
  1. 查询时给列、表指定别名需要使用AS关键字

  2. 使用别名的好处是方便观看和处理查询到的数据

    SELECT 字段名1 AS 别名, 字段名2 AS 别名... FROM 表名 AS 表别名;
    

注意

查询给表取别名目前还看不到效果,需要到多表查询的时候才能体现出好处
AS关键字可以省略

  1. 具体操作:
    • 查询sudent表中name 和 age 列,name列的别名为”姓名”,age列的别名为”年龄”
    SELECT NAME AS 姓名, age AS 年龄 FROM student;
    
    [外链图片转存失败(img-0I8eNCQV-1564737527648)(/查询字段别名.png)]
清除重复值
  1. 查询指定列并且结果不出现重复数据

    SELECT DISTINCT 字段名 FROM 表名;
    
  2. 具体操作:

    • 查询address列并且结果不出现重复的address
    SELECT DISTINCT address 城市 FROM student;
    

    [外链图片转存失败(img-Oez7ooSR-1564737527649)(/1550289641391.png)]

查询结果参与运算
  1. 某列数据和固定值运算

    SELECT 字段名 + 数值 FROM 表名;
    
  2. 某列数据和其他列数据参与运算

    SELECT 字段1 + 字段2 FROM 表名;
    

    注意: 参与运算的必须是数值类型

  3. 需求:

    • 添加数学,英语成绩列,给每条记录添加对应的数学和英语成绩
    • 查询的时候将数学和英语的成绩相加
  4. 实现:

  • 修改student表结构,添加数学和英语成绩列

    ALTER TABLE student ADD math INT;
    ALTER TABLE student ADD english INT;
    
  • 给每条记录添加对应的数学和英语成绩
    [外链图片转存失败(img-Xbe0oH2y-1564737527651)(/添加数学和英语成绩.png)]

  • 查询math + english的和

    SELECT math + english FROM student;
    

    [外链图片转存失败(img-fdnYXH5B-1564737527652)(/查询math和english的和.png)]

    结果确实将每条记录的math和english相加,但是效果不好看

  • 查询math + english的和使用别名”总成绩”

    SELECT math + english 总成绩 FROM student;
    

    [外链图片转存失败(img-fDlM1Gmv-1564737527654)(/组合查询结果取别名.png)]

  • 查询所有列与math + english的和并使用别名”总成绩”

    SELECT *, math + english 总成绩 FROM student;
    

    [外链图片转存失败(img-MkET2FxV-1564737527655)(/查询所有列数据和参与运算.png)]

  • 查询姓名、年龄,将每个人的数学增加10分

    SELECT name, math + 10 FROM student;
    

小结

  1. 简单查询格式

    SELECT 字段名 FROM 表名;
    
  2. 定义别名

    SELECT 字段名 AS 别名 FROM 表名;
    SELECT 字段名 别名 FROM 表名;
    
  3. 去除重复行

    SELECT DISTINCT 字段名 FROM 表名;
    
DML语句操作关键字
添加INSERT INTO 表名 (字段名) VALUES (值);
修改UPDATE 表名 SET 字段名=新的值;
删除DELETE FROM 表名;
查询SELECT * FROM 表名;

蠕虫复制

目标

了解蠕虫复制

讲解

什么是蠕虫复制:将一张表的数据复制,插入到另一张表中
语法格式:

INSERT INTO 表名1 SELECT * FROM 表名2;

作用:将表名2中的数据复制到表名1

具体操作:

  • 创建student2表,student2结构和student表结构一样
CREATE TABLE student2 LIKE student;
  • 将student表中的数据添加到student2表中
INSERT INTO student2 SELECT * FROM student;

注意:如果只想复制student表中name,age字段数据到student2表中使用如下格式
INSERT INTO student2(NAME, age) SELECT NAME, age FROM student;
[外链图片转存失败(img-79Wdp4mz-1564737527657)(/蠕虫复制.png)]

小结

蠕虫复制语法格式:

INSERT INTO 表名1 SELECT * FROM 表名2; 从表名2中查询出数据添加到表名1里面

DQL查询语句-条件查询

前面我们的查询都是将所有数据都查询出来,但是有时候我们只想获取到满足条件的数据

目标

学习条件查询语法格式

讲解

语法格式:

SELECT 字段 FROM 表名 WHERE 条件;

流程:取出表中满足条件的记录

准备数据
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);
比较运算符

>大于
<小于
<=小于等于
>=大于等于
=等于
<>!=不等于

具体操作:

  • 查询math分数大于80分的学生
SELECT * FROM student3 WHERE math>80;

[外链图片转存失败(img-3VISMRIg-1564737527658)(/where查询01.png)]

  • 查询english分数小于或等于80分的学生
SELECT * FROM student3 WHERE english<=80;

[外链图片转存失败(img-yhWQQF4e-1564737527660)(/where查询02.png)]

  • 查询age等于20岁的学生
SELECT * FROM student3 WHERE age=20;

[外链图片转存失败(img-KmrLwbv1-1564737527663)(/where查询03.png)]

  • 查询age不等于20岁的学生
SELECT * FROM student3 WHERE age!=20;
SELECT * FROM student3 WHERE age<>20;

[外链图片转存失败(img-PaeQh9zx-1564737527665)(/where查询04.png)]

逻辑运算符

and(&&) 多个条件同时满足
or(||) 多个条件其中一个满足
not(!) 不满足

具体操作:

  • 查询age大于35且性别为男的学生(两个条件同时满足)
SELECT * FROM student3 WHERE  age>35 AND sex='男';

[外链图片转存失败(img-zzF62VWh-1564737527666)(/where查询05.png)]

  • 查询age大于35或性别为男的学生(两个条件其中一个满足)
SELECT * FROM student333 WHERE age>35 OR sex='男';

[外链图片转存失败(img-QZJdCGjf-1564737527667)(/where查询06.png)]

  • 查询id是1或3或5的学生
SELECT * FROM student3 WHERE id=1 OR id=3 OR id=5;

[外链图片转存失败(img-g5Vm1wwf-1564737527669)(/where查询08.png)]

in关键字
语法格式:

SELECT * FROM 表名 WHERE 字段名 in (1,2,3);

in里面的每个数据都会作为一次条件,只要满足条件的就会显示

具体操作:

  • 查询id是1或3或5的学生
SELECT * FROM student3 WHERE id IN (1,3,5);

[外链图片转存失败(img-jh6EAsdx-1564737527671)(/where查询08.png)]

  • 查询id不是1或3或5的学生
SELECT * FROM student3 WHERE id NOT IN (1,3,5);

[外链图片转存失败(img-C3VFQvfo-1564737527672)(/where查询07.png)]

范围
SELECT * FROM 表名 WHERE 字段名 BETWEEN1 AND2;

比如:age BETWEEN 80 AND 100
相当于: age>=80 && age<=100

具体操作:

  • 查询english成绩大于等于75,且小于等于90的学生
SELECT * FROM student3 WHERE english>=75 AND english<=90;
SELECT * FROM student3 WHERE english BETWEEN 75 AND 90;

[外链图片转存失败(img-Nnz0hojk-1564737527673)(/where查询09.png)]

小结

比较运算符

>
<
>=
<=
!= <>
=

逻辑运算符

&& and
|| or
! not

IN

in (值1, 值2, 值3)

BETWEEN 小值 AND 大值

模糊查询like

目标

学习模糊查询语法格式

[外链图片转存失败(img-yI29tVl4-1564737527675)(/where查询11.png)]

讲解

LIKE 像 像什么什么一样

SELECT * FROM 表名 WHERE 字段名 LIKE '通配符字符串';

满足通配符字符串规则的数据就会显示出来

MySQL通配符有两个:
%: 表示任意多个字符
_: 表示一个字符

具体操作:

  • 查询姓马的学生
SELECT * FROM student3 WHERE NAME LIKE '马%';

[外链图片转存失败(img-EdSrvNeN-1564737527676)(/where查询10.png)]

  • 查询姓名中包含’德’字的学生
SELECT * FROM student3 WHERE NAME LIKE '%德%';

[外链图片转存失败(img-WoS6NKCT-1564737527679)(/where查询11.png)]

  • 查询姓马,且姓名有三个字的学生
SELECT * FROM student3 WHERE NAME LIKE '马__';

[外链图片转存失败(img-MboGA22l-1564737527680)(/where查询12.png)]

小结

模糊查询格式

SELECT * FROM 表名 WHERE 字段名 LIKE '通配符';

%: 表示任意多个字符
_: 表示一个字符

DQL查询语句-排序

目标

学习对查询的数据进行排序

[外链图片转存失败(img-ql4qcwbO-1564737527682)(/orderby01.png)]

讲解

通过ORDER BY子句,可以将查询出的结果进行排序(排序只是显示方式,不会影响数据库中数据的顺序)

SELECT * FROM 表名 WHERE 条件 ORDER BY 字段名 [ASC|DESC];

[]表示可以不要
|表示二选一

ASC: 升序(默认的)
DESC: 降序

1.2.1 单列排序

单列排序就是使用一个字段排序

具体操作:

  • 查询所有数据,使用年龄降序排序
select * FROM student3 order by age DESC;

[外链图片转存失败(img-MQgMZnbC-1564737527683)(/orderby01.png)]

1.2.2 组合排序

组合排序就是先按第一个字段进行排序,如果第一个字段相同,才按第二个字段进行排序,依次类推。
上面的例子中,年龄是有相同的。当年龄相同再使用math进行排序

SELECT * FROM 表名 WHERE 条件 ORDER BY 字段名 [ASC|DESC], 字段名 [ASC|DESC];

具体操作:

  • 查询所有数据,在年龄降序排序的基础上,如果年龄相同再以数学成绩降序排序
SELECT * FROM student3 ORDER BY age DESC, math DESC;

[外链图片转存失败(img-2XqmRo7W-1564737527684)(/orderby02.png)]

小结

  1. 排序的关键字

    ORDER BY 字段名 [ASC|DESC]
    
  2. 升序:ASC 默认的

  3. 降序:DESC

DQL查询语句-聚合函数

目标

学习五个聚合函数的使用

讲解

之前我们做的查询都是横向查询,它们都是根据条件一行一行的进行判断,而使用聚合函数查询是纵向查询,它是对一列的值进行计算,然后返回一个结果值。另外聚合函数会忽略空值NULL

五个聚合函数:
count: 统计指定列记录数,记录为NULL的不统计=
sum: 计算指定列的数值和,如果不是数值类型,那么计算结果为0
max: 计算指定列的最大值
min: 计算指定列的最小值
avg: 计算指定列的平均值

聚合函数的使用位置:写在 SQL语句SELECT字段名的地方

SELECT 字段名, 字段名 FROM 表名;
SELECT 聚合函数 FROM 表名;

具体操作:

  • 查询学生总数
SELECT COUNT(english) FROM student3;

[外链图片转存失败(img-pjyuFiyX-1564737527686)(/聚合函数01.png)]
我们发现对于NULL的记录不会统计

统计数量常用:

SELECT COUNT(*) FROM student3;

[外链图片转存失败(img-9qsDH2Ko-1564737527687)(/聚合函数02.png)]

  • 查询年龄大于40的总数
SELECT COUNT(*) FROM student3 WHERE age>40;

[外链图片转存失败(img-Xqzw1ipR-1564737527688)(/聚合函数03.png)]

  • 查询数学成绩总分
SELECT SUM(math) FROM student3;

[外链图片转存失败(img-M3QtAWYt-1564737527690)(/聚合函数04.png)]

  • 查询数学成绩最高分
SELECT MAX(math) FROM student3;

[外链图片转存失败(img-OxB9SmI0-1564737527691)(/聚合函数06.png)]

  • 查询数学成绩最低分
SELECT MIN(math) FROM student3;

[外链图片转存失败(img-ImzHwozL-1564737527692)(/聚合函数07.png)]

  • 查询数学成绩平均分
SELECT AVG(math) FROM student3;

[外链图片转存失败(img-S1JXpRfl-1564737527694)(/聚合函数05.png)]

小结

函数作用
sum(列名)求和
count(列名)统计个数
max(列名)获取最大值
min(列名)获取最小值
avg(列名)获取平均值

DQL查询语句-分组

目标

学习对查询后的结果进行分组

[外链图片转存失败(img-Ywv4TQV8-1564737527696)(/分组10.png)]

讲解

分组查询是指使用 GROUP BY语句对查询信息进行分组

SELECT * FROM 表名 WHERE 条件 GROUP BY 字段名;

GROUP BY怎么分组的?
将分组字段结果中相同内容作为一组

SELECT * FROM student3 GROUP BY sex;

这句话会将sex相同的数据作为一组
[外链图片转存失败(img-P8NyOjSv-1564737527697)(/分组01.png)]

GROUP BY将分组字段的相同值作为一组,并且返回每组的第一条数据*,所以单独分组没什么用处。分组的目的就是为了统计,一般分组会跟聚合函数一起使用

分组后聚合函数的作用?不是操作所有数据,而是分别操作每组数据

SELECT SUM(math), sex FROM student3 GROUP BY sex;

效果如下:
[外链图片转存失败(img-TqJGQKF4-1564737527698)(/分组02.png)]

实际上是将每组的math进行求和,返回每组统计的结果
[外链图片转存失败(img-9gcluIc0-1564737527699)(/分组03.png)]

注意事项:当我们使用某个字段分组,在查询的时候也需要将这个字段查询出来,否则看不到数据属于哪组的

  • 查询的时候没有查询出分组字段
    [外链图片转存失败(img-HNzobvxU-1564737527701)(/分组04.png)]
  • 查询的时候查询出分组字段
    [外链图片转存失败(img-MnmfB2Wo-1564737527702)(/分组05.png)]

具体步骤:

  • 按性别分组(其实就是:按什么字段分组,select关键字后面就接什么字段)
SELECT sex FROM student3 GROUP BY sex;

[外链图片转存失败(img-1BJvRUIj-1564737527703)(/分组06.png)]

  • 查询男女各多少人
1.查询所有数据,按性别分组
2.统计每组人数
SELECT sex, COUNT(*) FROM student3 GROUP BY sex;

[外链图片转存失败(img-0e3EdLSt-1564737527704)(/分组06.png)]

  • 查询年龄大于25岁的人,按性别分组,统计每组的人数
1.先过滤掉年龄小于25岁的人
2.再分组
3.最后统计每组的人数
SELECT sex, COUNT(*) FROM student3 WHERE age > 25 GROUP BY sex;

[外链图片转存失败(img-3yLwj3Pc-1564737527705)(/分组08.png)]

  • 查询年龄大于25岁的人,按性别分组,统计每组的人数,并只显示性别人数大于2的数据
    有很多同学可能会将SQL语句写出这样:

    SELECT sex, COUNT(*) FROM student3 WHERE age > 25 GROUP BY sex WHERE COUNT(*) >2;
    

注意: 并只显示性别人数>25的数据属于分组后的条件,对于分组后的条件需要使用having子句(分组前的条件仍然用where子句)

SELECT sex, COUNT(*) FROM student3 WHERE age > 25 GROUP BY sex HAVING COUNT(*) >2;
只有分组后人数大于2``这组数据显示出来

[外链图片转存失败(img-ZU5hjjdU-1564737527706)(/分组09.png)]

having与where的区别

  • having是在分组后对数据进行过滤
  • where是在分组前对数据进行过滤
  • having后面可以使用聚合函数
  • where后面不可以使用聚合函数

小结

  1. 分组的语法格式?

    SELECT * FROM 表名 WHERE 条件 GROUP BY 字段;
    
  2. 分组的原理?

    将某个字段中相同的数据作为一组,返回每组的第一条数据,意义不大(通常分组和聚合函数一起使用)
    
  3. where和having的区别?

  • having是在分组后对数据进行过滤
  • where是在分组前对数据进行过滤
  • having后面可以使用聚合函数
  • where后面不可以使用聚合函数

DQL查询语句-limit语句

目标

能够掌握limit语句的使用

[外链图片转存失败(img-Ug6w7SOP-1564737527708)(/limit02.png)]

讲解

准备数据:

INSERT INTO student3(id,NAME,age,sex,address,math,english) VALUES 
(9,'唐僧',25,'男','长安',87,78),
(10,'孙悟空',18,'男','花果山',100,66),
(11,'猪八戒',22,'男','高老庄',58,78),
(12,'沙僧',50,'男','流沙河',77,88),
(13,'白骨精',22,'女','白虎岭',66,66),
(14,'蜘蛛精',23,'女','盘丝洞',88,88);

LIMIT限制的意思,所以LIMIT的作用就是限制查询记录的条数

LIMIT语句格式:

SELECT * FROM 表名 WHERE 条件 LIMIT offset, length;

offset是指偏移量,可以认为是跳过的记录数量,不写则默认为0。
length是指需要显示的总记录数

具体步骤:

  • 查询学生表中数据,跳过前面2条,显示6条
我们可以认为跳过前面2条,取6条数据
SELECT * FROM student3 LIMIT 2,6;

[外链图片转存失败(img-3CQcpb7X-1564737527710)(/limit02.png)]LIMIT的使用场景:分页

比如我们登录京东,淘宝,返回的商品信息可能有几万条,不是一次全部显示出来。是一页显示固定的条数。假设我们一每页显示5条记录的方式来分页。

[外链图片转存失败(img-bLBddqKp-1564737527712)(/limit04.png)]

假设我们一每页显示5条记录的方式来分页,SQL语句如下:

-- 每页显示5条
-- 第一页: LIMIT 0,5;	跳过0条,显示5条
-- 第二页: LIMIT 5,5;  跳过5条,显示5条
-- 第三页: LIMIT 10,5; 跳过10条,显示5条
SELECT * FROM student3 LIMIT 0,5;
SELECT * FROM student3 LIMIT 5,5;
SELECT * FROM student3 LIMIT 10,5;

[外链图片转存失败(img-dV5o3WgI-1564737527713)(/limit03.png)]

注意

  • 如果第一个参数是0可以简写:
    SELECT * FROM student3 LIMIT 0,5;
    SELECT * FROM student3 LIMIT 5;
  • LIMIT 10,5; – 不够5条,有多少显示多少

小结

  1. LIMIT语句的使用格式?

    SELECT 字段名 FROM 表名 LIMIT 跳过条数, 显示条数;
    
  2. SELECT 字段名 FROM 表名 WHERE 条件 GROUP BY 分组列名 HAVING 条件 ORDER BY 排序列名 LIMIT 跳过行数, 返回行数;
    

顺序:

​ 先看语句中的条件,若是where子句,那么先执行where,如果是having,则先执行分组,执行完再执行having子句,完成后再执行聚合子句,最后执行limit子句。

where(条件子句)—>分组子句—>having(条件子句)—>聚合子句—>limit子句

[外链图片转存失败(img-6p99VY5O-1564737527715)(/1564565745736.png)]

总结

  1. 能够理解数据库的概念
    存储数据的仓库

  2. 能够安装MySQL数据库
    解压复制,配置信息
    下一步, 端口号, 密码, utf8编码,加入环境变量

  3. 能够启动,关闭及登录MySQL
    启动,关闭MySQL: 找到服务,右键-> 启动和停止
    登录MySQL: mysql -uroot -proot

  4. 能够使用SQL语句操作数据库(DDL)
    创建数据库: CREATE DATABASE 数据库名;
    查看所有数据库: SHOW DATABASES;
    删除数据库: DROP DATABASE 数据库名;
    切换数据库: USE 数据库名;

    1. 能够使用SQL语句操作表结构(DDL) ALTER, DROP
      创建表: CREATE TABLE 表名 (字段名 字段类型, 字段名 字段类型…);
      查看所有表: SHOW TABLES;
      修改表: ALTER TABLE 表名 xxx;
      添加一列: ADD 字段名 字段类型;
      修改字段类型: MODIFY 字段名 新的类型;
      修改字段名: CHANGE 旧字段名 新字段名 类型;
      删除一列: DROP 字段名;
      修改表名: RENAME TABLE 旧表名 TO 新表名;
      删除表: DROP TABLE 表名;
      1. 能够使用SQL语句进行数据的添加修改和删除的操作(DML) UPDATE…SET,DELETE
        添加数据: INSERT INTO 表名 (字段名1, 字段名2) VALUES (值1, 值2);
        修改数据: UPDATE 表名 SET 字段名=值;
        删除数据: DELETE FROM 表名;
  5. 能够使用SQL语句简单查询数据
    SELECT 字段名 FROM 表名;

[外链图片转存失败(img-WXumKPus-1564737527716)(/1564566040553.png)]

能够使⽤用SQL语句句进⾏行行排序

SELECT 字段名 FROM 表名 WHERE 条件 ORDER BY 字段 [ASC|DESC];

能够使⽤用聚合函数

count: 统计数量
sum: 求和
max: 最大值
min: 最小值
avg: 平均值

能够使⽤用SQL语句句进⾏行行分组查

SELECT 字段名 FROM 表名 WHERE 条件 GROUP BY 字段名;
根据字段的值相同的作为一组,返回每组的第一条数据,分组通常和聚合函数一起使用

能够使⽤用SQL语句句添加主键、外键、唯⼀一、⾮非空约束

主键: PRIMARY KEY
唯⼀: UNIQUE
非空约束: NOT NULL
默认约束:DEFAULT 默认值

DDL操作

​ 有database或者tablie

​ ALTER DROP

DML

​ UPDATE…SET DELETE

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值