SQL语句

SQL语句

1.数据库、数据表、数据的关系介绍

  • 数据库

    • 用于存储和管理数据的仓库

    • 一个库中可以包含多个数据表

  • 数据表

    • 数据库最重要的组成部分之一

    • 它由纵向的列和横向的行组成(类似excel表格)

    • 可以指定列名、数据类型、约束等

    • 一个表中可以存储多条数据

  • 数据

    • 想要永久化存储的数据

    • SQL介绍

    • 什么是SQL

      • Structured Query Language:结构化查询语言

      • 其实就是定义了操作所有关系型数据库的规则。每一种数据库操作的方式可能会存在一些不一样的地方,我们称为“方言”。

    • SQL通用语法

      • SQL 语句可以单行或多行书写,以分号结尾。

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

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

      • 数据库的注释:

        • 单行注释:-- 注释内容 #注释内容(mysql特有)

        • 多行注释:/* 注释内容 */

    • SQL分类

      • DDL(Data Definition Language)数据定义语言

        • 用来定义数据库对象:数据库,表,列等。关键字:create, drop,alter 等

      • DML(Data Manipulation Language)数据操作语言

        • 用来对数据库中表的数据进行增删改。关键字:insert, delete, update 等

      • DQL(Data Query Language)数据查询语言

        • 用来查询数据库中表的记录(数据)。关键字:select, where 等

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

        • 用来定义数据库的访问权限和安全级别,及创建用户。关键字:GRANT, REVOKE 等

DDL-操作数据库

R(Retrieve):查询

  • 查询所有数据库

  • SHOW DATABASES;

    查询某个数据库的创建语句

  • SHOW CREATE DATABASE 数据库名称;

    - 查看mysql数据库的创建格式

  • SHOW CREATE DATABASE mysql;

    C(Create):创建

  • 创建数据库

  • -- 标准语法
    CREATE DATABASE 数据库名称;
    
    -- 创建db1数据库
    CREATE DATABASE db1;
    
    -- 创建一个已存在的数据库会报错
    -- 错误代码:1007  Can't create database 'db1'; database exists
    CREATE DATABASE db1;

    创建数据库(判断,如果不存在则创建)

  • -- 标准语法
    CREATE DATABASE IF NOT EXISTS 数据库名称;
    
    -- 创建数据库db2(判断,如果不存在则创建)
    CREATE DATABASE IF NOT EXISTS db2;

    创建数据库、并指定字符集

  • -- 标准语法
    CREATE DATABASE 数据库名称 CHARACTER SET 字符集名称;
    
    -- 创建数据库db3、并指定字符集utf8
    CREATE DATABASE db3 CHARACTER SET utf8;
    
    -- 查看db3数据库的字符集
    SHOW CREATE DATABASE db3;

    练习:创建db4数据库、如果不存在则创建,指定字符集为gbk

  • -- 创建db4数据库、如果不存在则创建,指定字符集为gbk
    CREATE DATABASE IF NOT EXISTS db4 CHARACTER SET gbk;
    
    -- 查看db4数据库的字符集
    SHOW CREATE DATABASE db4;

    U(Update):修改

  • 修改数据库的字符集

  • -- 标准语法
    ALTER DATABASE 数据库名称 CHARACTER SET 字符集名称;
    
    -- 修改数据库db4的字符集为utf8
    ALTER DATABASE db4 CHARACTER SET utf8;
    
    -- 查看db4数据库的字符集
    SHOW CREATE DATABASE db4;

    D(Delete):删除

  • 删除数据库

  • -- 标准语法
    DROP DATABASE 数据库名称;
    
    -- 删除db1数据库
    DROP DATABASE db1;
    
    -- 删除一个不存在的数据库会报错
    -- 错误代码:1008  Can't drop database 'db1'; database doesn't exist
    DROP DATABASE db1;

    删除数据库(判断,如果存在则删除)

  • -- 标准语法
    DROP DATABASE IF EXISTS 数据库名称;
    
    -- 删除数据库db2,如果存在
    DROP DATABASE IF EXISTS db2;

    使用数据库

  • 查询当前正在使用的数据库名称

  • -- 查询当前正在使用的数据库
    SELECT DATABASE();

    使用数据库

  • -- 标准语法
    USE 数据库名称;
    
    -- 使用db4数据库
    USE db4;

    .DDL-操作数据表

  • R(Retrieve):查询

    • 查询数据库中所有的数据表

    • -- 使用mysql数据库
      USE mysql;
      
      -- 查询库中所有的表
      SHOW TABLES;

      查询表结构

    • -- 标准语法
      DESC 表名;
      
      -- 查询user表结构
      DESC user;

      C(Create):创建

    • 创建数据表

      • 标准语法

    • CREATE TABLE 表名(
          列名1 数据类型1,
          列名2 数据类型2,
          ....
          列名n 数据类型n
      );
      -- 注意:最后一列,不需要加逗号
      

      查询表字符集

    • -- 标准语法
      SHOW TABLE STATUS FROM 库名 LIKE '表名';
      
      -- 查看mysql数据库中user表字符集
      SHOW TABLE STATUS FROM mysql LIKE 'user';

      数据类型

    • 1. int:整数类型
      	* age int
      2. double:小数类型
      	* score double(5,2)
      	* price double
      3. date:日期,只包含年月日     yyyy-MM-dd
      4. datetime:日期,包含年月日时分秒	 yyyy-MM-dd HH:mm:ss
      5. timestamp:时间戳类型	包含年月日时分秒	 yyyy-MM-dd HH:mm:ss	
      	* 如果将来不给这个字段赋值,或赋值为null,则默认使用当前的系统时间,来自动赋值
      6. varchar:字符串
      	* name varchar(20):姓名最大20个字符
      	* zhangsan 8个字符  张三 2个字符

      创建数据表

      -- 使用db3数据库USE db3;​-- 创建一个product商品表CREATE TABLE product(    id INT,             -- 商品编号    NAME VARCHAR(30),   -- 商品名称    price DOUBLE,       -- 商品价格    stock INT,          -- 商品库存    insert_time DATE    -- 上架时间);
    • U(Update):修改

    • 修改表名

    • -- 标准语法
      ALTER TABLE 表名 RENAME TO 新的表名;
      
      -- 修改product2表名为product3
      ALTER TABLE product2 RENAME TO product3;

      添加一列

    • -- 标准语法
      ALTER TABLE 表名 ADD 列名 数据类型;
      
      -- 给product3表添加一列color
      ALTER TABLE product3 ADD color VARCHAR(10);

      删除列

    • -- 标准语法
      ALTER TABLE 表名 DROP 列名;
      
      -- 删除address列
      ALTER TABLE product3 DROP address;

      D(Delete):删除

    • 删除数据表

    • -- 标准语法
      DROP TABLE 表名;
      
      -- 删除product3表
      DROP TABLE product3;
      
      -- 删除不存在的表,会报错
      -- 错误代码:1051  Unknown table 'product3'
      DROP TABLE product3;

      删除数据表(判断,如果存在则删除)

      -- 标准语法
      DROP TABLE IF EXISTS 表名;
      
      -- 删除product3表,如果存在则删除
      DROP TABLE IF EXISTS product3;

      DML-INSERT语句

    • - 标准语法INSERT INTO 表名(列名1,列名2,...) VALUES (值1,值2,...);​-- 向product表添加一条数据INSERT INTO product(id,NAME,price,stock,insert_time) VALUES (1,'手机',1999,22,'2099-09-09');​-- 向product表添加指定列数据INSERT INTO product (id,NAME,price) VALUES (2,'电脑',4999);​-- 查看表中所有数据SELECT * FROM product;

      条件查询语法

    • -- 标准语法
      SELECT 列名 FROM 表名 WHERE 条件;
      
      -- 查询库存大于20的商品信息
      SELECT * FROM product WHERE stock > 20;
      
      -- 查询品牌为华为的商品信息
      SELECT * FROM product WHERE brand='华为';
      
      -- 查询金额在4000 ~ 6000之间的商品信息
      SELECT * FROM product WHERE price >= 4000 AND price <= 6000;
      SELECT * FROM product WHERE price BETWEEN 4000 AND 6000;
      
      -- 查询库存为14、30、23的商品信息
      SELECT * FROM product WHERE stock=14 OR stock=30 OR stock=23;
      SELECT * FROM product WHERE stock IN(14,30,23);
      
      -- 查询库存为null的商品信息
      SELECT * FROM product WHERE stock IS NULL;
      -- 查询库存不为null的商品信息
      SELECT * FROM product WHERE stock IS NOT NULL;
      
      -- 查询名称以小米为开头的商品信息
      SELECT * FROM product WHERE NAME LIKE '小米%';
      
      -- 查询名称第二个字是为的商品信息
      SELECT * FROM product WHERE NAME LIKE '_为%';
      
      -- 查询名称为四个字符的商品信息
      SELECT * FROM product WHERE NAME LIKE '____';
      
      -- 查询名称中包含电脑的商品信息
      SELECT * FROM product WHERE NAME LIKE '%电脑%';

      聚合函数

    • 将一列数据作为一个整体,进行纵向的计算

    • 聚合函数分类

    • -- 标准语法
      SELECT 函数名(列名) FROM 表名 [WHERE 条件];
      
      -- 计算product表中总记录条数
      SELECT COUNT(*) FROM product;
      
      -- 获取最高价格
      SELECT MAX(price) FROM product;
      -- 获取最高价格的商品名称
      SELECT NAME,price FROM product WHERE price = (SELECT MAX(price) FROM product);
      
      -- 获取最低库存
      SELECT MIN(stock) FROM product;
      -- 获取最低库存的商品名称
      SELECT NAME,stock FROM product WHERE stock = (SELECT MIN(stock) FROM product);
      
      -- 获取总库存数量
      SELECT SUM(stock) FROM product;
      -- 获取品牌为苹果的总库存数量
      SELECT SUM(stock) FROM product WHERE brand='苹果';
      
      -- 获取品牌为小米的平均商品价格
      SELECT AVG(price) FROM product WHERE brand='小米';

      排序查询

    • 排序分类

      • 注意:多个排序条件,当前边的条件值一样时,才会判断第二条件

      • -- 标准语法
        SELECT 列名 FROM 表名 [WHERE 条件] ORDER BY 列名1 排序方式1,列名2 排序方式2;
        
        -- 按照库存升序排序
        SELECT * FROM product ORDER BY stock ASC;
        
        -- 查询名称中包含手机的商品信息。按照金额降序排序
        SELECT * FROM product WHERE NAME LIKE '%手机%' ORDER BY price DESC;
        
        -- 按照金额升序排序,如果金额相同,按照库存降序排列
        SELECT * FROM product ORDER BY price ASC,stock DESC;

        约束

        1.约束的概念和分类

      • 约束的概念

        • 对表中的数据进行限定,保证数据的正确性、有效性、完整性!

      • 约束的分类

      • 主键约束

      • 主键约束特点

        • 主键约束包含:非空和唯一两个功能

        • 一张表只能有一个列作为主键

        • 主键一般用于表中数据的唯一标识

      • 建表时添加主键约束

    • -- 标准语法
      CREATE TABLE 表名(
      	列名 数据类型 PRIMARY KEY,
          列名 数据类型,
          ...
      );
      
      -- 创建student表
      CREATE TABLE student(
      	id INT PRIMARY KEY  -- 给id添加主键约束
      );
      
      -- 添加数据
      INSERT INTO student VALUES (1),(2);
      -- 主键默认唯一,添加重复数据,会报错
      INSERT INTO student VALUES (2);
      -- 主键默认非空,不能添加null的数据
      INSERT INTO student VALUES (NULL);
      
      -- 查询student表
      SELECT * FROM student;
      -- 查询student表详细
      DESC student;

      删除主键

    • - 标准语法
      ALTER TABLE 表名 DROP PRIMARY KEY;
      
      -- 删除主键
      ALTER TABLE student DROP PRIMARY KEY;

      建表后单独添加主键

    • -- 标准语法
      ALTER TABLE 表名 MODIFY 列名 数据类型 PRIMARY KEY;
      
      -- 添加主键
      ALTER TABLE student MODIFY id INT PRIMARY KEY;

      添加唯一约束

    • -- 标准语法
      CREATE TABLE 表名(
      	列名 数据类型 UNIQUE,
          列名 数据类型,
          ...
      );
      
      -- 创建student3表
      CREATE TABLE student3(
      	id INT PRIMARY KEY AUTO_INCREMENT,
      	tel VARCHAR(20) UNIQUE    -- 给tel列添加唯一约束
      );
      
      -- 添加数据
      INSERT INTO student3 VALUES (NULL,'18888888888'),(NULL,'18666666666');
      -- 添加重复数据,会报错
      INSERT INTO student3 VALUES (NULL,'18666666666');
      
      -- 查询student3数据表
      SELECT * FROM student3;
      -- student3表详细
      DESC student3;

      删除唯一约束

    • -- 标准语法
      ALTER TABLE 表名 DROP INDEX 列名;
      
      -- 删除唯一约束
      ALTER TABLE student3 DROP INDEX tel;

      非空约束

    • -- 标准语法
      CREATE TABLE 表名(
      	列名 数据类型 NOT NULL,
          列名 数据类型,
          ...
      );
      
      -- 创建student4表
      CREATE TABLE student4(
      	id INT PRIMARY KEY AUTO_INCREMENT,
      	NAME VARCHAR(20) NOT NULL    -- 给name添加非空约束
      );
      
      -- 添加数据
      INSERT INTO student4 VALUES (NULL,'张三'),(NULL,'李四');
      -- 添加null值,会报错
      INSERT INTO student4 VALUES (NULL,NULL);

      删除非空约束

    • -- 标准语法
      ALTER TABLE 表名 MODIFY 列名 数据类型;
      
      -- 删除非空约束
      ALTER TABLE student4 MODIFY NAME VARCHAR(20);

      建表后单独添加非空约束

    • -- 标准语法
      ALTER TABLE 表名 MODIFY 列名 数据类型 NOT NULL;
      
      -- 添加非空约束
      ALTER TABLE student4 MODIFY NAME VARCHAR(20) NOT NULL;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值