zoukankan      html  css  js  c++  java
  • MySQL基础、SQL入门

    一、数据库的基本概念

    1、什么是数据库

    • 数据库(DataBase) 就是存储和管理数据的仓库
    • 其本质是一个文件系统, 还是以文件的方式,将数据保存在电脑上

    2、为什么使用数据库

    • 数据存储方式的比较

    image-20210723092250959

    通过上面的比较,我们可以看出,使用数据库存储数据, 用户可以非常方便对数据库中的数据进行增加, 删除, 修改及查询操作。

    3、常见的数据库

    image-20210723092428106

    为什么选择MySQL?

    1. 功能强大,足以应付web应用开发
    2. 开源, 免费

    二、SQL

    1、SQL的概念

    (1)什么是SQL

    • 结构化查询语言(Structured Query Language)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。

    (2)SQL的作用

    • 是所有关系型数据库的统一查询规范,不同的关系型数据库都支持SQL
    • 所有的关系型数据库都可以使用SQL
    • 不同数据库之间的SQL 有一些区别 方言

    2、SQL通用语法

    • SQL语句可以单行 或者 多行书写,以分号 结尾 ; (Sqlyog中可以不用写分号)

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

    • MySql中使用SQL不区分大小写一般关键字大写,数据库名 表名列名 小写。

    • 注释方式

    image-20210723145416019

    3、SQL的分类

       分类                                      说明
    数据定义语言        简称DDL(Data Definition Language),用来定义数据库对象:数据库,表,列等。
    数据操作语言        简称DML(Data Manipulation Language),用来对数据库中表的记录进行更新。
    数据查询语言        简称DQL(Data Query Language),用来查询数据库中表的记录。
    数据控制语言        简称DCL(Date Control Language),用来定义数据库的访问权限和安全级别,及创建用户。(了解)
    
    • 注: 我们重点学习 DML 与 DQL!

    4、DDL操作 数据库

    1、创建数据库

    image-20210723145954910

    /*
      创建数据库  方式1:指定名称的数据库
      latin1 编码
    */
    CREATE DATABASE db1;
    
    /*
      方式2:指定字符集的方式创建数据库
      utf8
    */
    CREATE DATABASE db1_1 CHARACTER SET utf8;
    /*
    

    2、查看/选择数据库

    image-20210723145938560

    /*
      查看数据库
    */
    # 切换数据库
    USE db1_1;
    
    USE db1;
    
    # 查询当前正在使用的数据库
    SELECT DATABASE();
    
    # 查询当前数据库的基本信息
    SHOW CREATE DATABASE db1;
    
    # 查询Mysql中有哪些数据库
    SHOW DATABASES;
    

    3、需要改数据库

    修改数据库字符集

    image-20210723150047854

    -- 修改数据库的字符集
    # 语法格式:alter database 数据库名 Character set utf8;
    ALTER DATABASE db1 CHARACTER SET utf8;
    

    4、删除数据库

    image-20210723150141560

    # 删除数据库的操作
    # 语法格式:drop database 数据库名称 将数据库从Mysql中永久的删除
    DROP DATABASE db1_1;
    

    5、DDL操作 数据表

    1、MySQL常见的数据类型

    (1)常用的数据类型

    image-20210723150330087

    (2)详细的数据类型(了解即可)

    image-20210723150411254

    注意:MySQL中的 char类型与 varchar类型,都对应了 Java中的字符串类型,区别在于:

    • char类型是固定长度的: 根据定义的字符串长度分配足够的空间。

    • varchar类型是可变长度的: 只使用字符串长度所需的空间

    比如:保存字符串 "abc"

    x char(10) 占用10个字节
    y varchar(10) 占用3个字节
    

    适用场景:

    • char类型适合存储 固定长度的字符串,比如 密码 ,性别一类
    • varchar类型适合存储 在一定范围内,有长度变化的字符串

    2、创建表

    语法格式:

    CREATE TABLE 表名(
        字段名称1 字段类型(长度),
        字段名称2 字段类型  注意 最后一列不要加逗号
    );
    
    • 需求1:创建商品分类表
    表名:category
    表中字段: 
        分类ID :cid ,为整型
        分类名称:cname,为字符串类型,指定长度20
    
    -- 创建分类表
    CREATE TABLE category(
    	cid INT,
    	cname VARCHAR(20)
    );
    
    
    • 需求2:创建测试表
    表名: test1
    表中字段:
        测试ID : tid ,为整型
        测试时间: tdate , 为年月日的日期类型
    
    CREATE TABLE test1(
    	tid INT,
    	tdate DATE
    );
    
    • 需求3:快速创建一个表结构相同的表(复制表结构)
    create table 新表明 like 旧表名
    
    /*
       create table 新表名 like 旧表名
    */
    -- 创建一个与test1表结构相同的test2表
    CREATE TABLE test2 LIKE test1;
    
    

    3、查看表

    命令                  说明
    show tables;     查看当前数据库中的所有表名
    desc 表名;       查看数据表的结构
    

    image-20210723173223223

    4、删除表

    命令                                           说明
    drop table 表名;                   删除表(从数据库中永久删除某一张表)
    drop table if exists 表名;         判断表是否存在,存在的话就删除,不存在就不执行删除
    

    image-20210723173851804

    5、修改表

    (1)修改表名

    语法格式

    rename table 旧表名 to 新表名
    
    • 需求: 将category表 改为 category1

      image-20210723174510097

    (2)修改表的字符集

    语法格式:

    alter table 表名 character set 字符集
    
    • 需求: 将category表的字符集 修改为gbk

    image-20210723174619435

    (3)向表中添加列,关键字ADD

    语法格式:

    alert table 表名 add 字段名称 字段类型
    

    image-20210723175239771

    (4)修改表中列的数据类型或长度,关键字MODIFY

    语法格式:

    alter table 表名 modify 字段名称 字段类型
    

    image-20210723180648594

    (5)修改列名称,关键字CHANGE

    语法格式:

    alter table 表名 change 旧列名 新列名 类型(长度);
    

    image-20210723181037405

    (6)删除列,关键字DROP

    语法格式:

    alter table 表名 drop 列名; 
    

    image-20210723181426199

    6、DML操作表中的数据

    SQL中的DML 用于对表中的数据进行增删改操作

    1、插入数据

    语法格式:

    insert into 表名 (字段名1,字段名2...) values(字段值1,字段值2...);
    

    1)代码准备,创建一个学生表:

    表名:student
    表中字段:
        学员ID, sid int 
        姓名, sname varchar(20)
        年龄, age int
        性别, sex char(1)
        地址, address varchar(40)
    # 创建学生表
    CREATE TABLE student(
        sid INT,
        sname VARCHAR(20),
        age INT,
        sex CHAR(1),
        address VARCHAR(40)
    );
    

    2)向 学生表中添加数据,3种方式

    • 方式1: 插入全部字段, 将所有字段名都写出来
    INSERT INTO student (sid,sname,age,sex,address) VALUES(1,'孙悟空',20,'男','花果山');
    
    • 方式2: 插入全部字段,不写字段名
    INSERT INTO student VALUES(2,'孙悟饭',10,'男','地球');
    
    • 方式3:插入指定字段的值
    INSERT INTO category (cname) VALUES('白骨精');
    

    image-20210723182951910

    注意:

    • 值与字段必须要对应,个数相同&数据类型相同
    • 值的数据大小,必须在字段指定的长度范围内
    • varchar char date类型的值必须使用单引号,或者双引号 包裹。
    • 如果要插入空值,可以忽略不写,或者插入null
    • 如果插入指定字段的值,必须要上写列名

    image-20210723163012853

    2、 更改数据

    语法格式1:不带条件的修改

    update 表名 set 列名 = 值
    

    语法格式2:带条件的修改

    update 表名 set 列名 = 值 [where 条件表达式:字段名 = 值 ]
    

    1)不带条件修改,将所有的性别改为女(慎用!!)

    UPDATE student SET sex = '女';
    

    2)带条件的修改,将sid 为3的学生,性别改为男

    UPDATE student SET sex = '男' WHERE sid = 3;
    

    3)一次修改多个列, 将sid为 2 的学员,年龄改为 20,地址改为 北京

    UPDATE student SET age = 20,address = '北京' WHERE sid = 2;
    

    image-20210723183715058

    3、 删除数据

    语法格式1:删除所有数据

    delete from 表名 
    

    语法格式2: 指定条件 删除数据

    delete from 表名 [where 字段名 = 值]
    

    (1)删除 sid 为 1 的数据

    DELETE FROM student WHERE sid = 1;
    

    (2)删除所有数据

    DELETE FROM student;
    

    (3)如果要删除表中的所有数据,有两种做法

    1. delete from 表名; 不推荐. 有多少条记录 就执行多少次删除操作. 效率低

    2. truncate table 表名: 推荐. 先删除整张表, 然后再重新创建一张一模一样的表. 效率高

      truncate table student;
      

    image-20210723184333305

    7 、DQL 查询表中数据

    1 、准备数据

    #创建员工表
    表名 emp
    表中字段:
        eid 员工id,int
        ename 姓名,varchar
        sex 性别,char
        salary 薪资,double
        hire_date 入职时间,date
        dept_name 部门名称,varchar
        
    #创建员工表
    CREATE TABLE emp(
        eid INT,
        ename VARCHAR(20),
        sex CHAR(1),
        salary DOUBLE,
        hire_date DATE,
        dept_name VARCHAR(20)
    );
    
    #添加数据
    INSERT INTO emp VALUES(1,'孙悟空','男',7200,'2013-02-04','教学部');
    INSERT INTO emp VALUES(2,'猪八戒','男',3600,'2010-12-02','教学部');
    INSERT INTO emp VALUES(3,'唐僧','男',9000,'2008-08-08','教学部');
    INSERT INTO emp VALUES(4,'白骨精','女',5000,'2015-10-07','市场部');
    INSERT INTO emp VALUES(5,'蜘蛛精','女',5000,'2011-03-14','市场部');
    INSERT INTO emp VALUES(6,'玉兔精','女',200,'2000-03-14','市场部');
    INSERT INTO emp VALUES(7,'林黛玉','女',10000,'2019-10-07','财务部');
    INSERT INTO emp VALUES(8,'黄蓉','女',3500,'2011-09-14','财务部');
    INSERT INTO emp VALUES(9,'吴承恩','男',20000,'2000-03-14',NULL);
    INSERT INTO emp VALUES(10,'孙悟饭','男', 10,'2020-03-14',财务部);
    INSERT INTO emp VALUES(11,'兔八哥','女', 300,'2010-03-14',财务部);
    

    2、简单查询

    • 查询不会对数据库中的数据进行修改.只是一种显示数据的方式 SELECT

    语法格式

    select 列名 from 表名 
    
    • 需求1: 查询emp中的 所有数据

      SELECT * FROM emp; -- 使用 * 表示所有列
      
    • 需求2: 查询emp表中的所有记录,仅显示id和name字段

      SELECT eid,ename FROM emp;
      

      image-20210723190315438

    • 需求3: 将所有的员工信息查询出来,并将列名改为中文

      • 别名查询,使用关键字 as
    # 使用 AS关键字,为列起别名
    SELECT 
        eid AS '编号',
        ename AS '姓名' ,
        sex AS '性别',
        salary AS '薪资',
        hire_date '入职时间', -- AS 可以省略
        dept_name '部门名称'
    FROM emp;
    

    image-20210723190416597

    • 需求4:查询一共有几个部门
      • 使用去重关键字 distinct
    -- 使用distinct 关键字,去掉重复部门信息
    SELECT DISTINCT dept_name FROM emp;
    
    • 需求5: 将所有员工的工资 +1000 元进行显示
      • 运算查询 (查询结果参与运算)
    SELECT ename , salary + 1000 FROM emp;
    

    image-20210723190905271

    3、条件查询

    条件查询:先取出表中的每条数据,满足条件的返回,不满足的过滤掉。

    如果查询语句中没有设置条件,就会查询所有的行信息,在实际应用中,一定要指定查询条件,对记录进行过滤

    语法格式

    select 列名 from 表名 where 条件表达式
    * 先取出表中的每条数据,满足条件的数据就返回,不满足的就过滤掉
    

    运算符

    (1)比较运算符

    image-20210723171042036

    (2)逻辑运算符

    image-20210723171111586

    需求1:

    # 查询员工姓名为黄蓉的员工信息
    # 查询薪水价格为5000的员工信息
    # 查询薪水价格不是5000的所有员工信息
    # 查询薪水价格大于6000元的所有员工信息
    # 查询薪水价格在5000到10000之间所有员工信息
    # 查询薪水价格是3600或7200或者20000的所有员工信息
    

    image-20210723201640991

    需求2:

    # 查询含有'精'字的所有员工信息
    # 查询以'孙'开头的所有员工信息
    # 查询第二个字为'兔'的所有员工信息
    # 查询没有部门的员工信息
    # 查询有部门的员工信息
    

    模糊查询 通配符

    image-20210723171356108

    image-20210723201302624

    本文来自博客园,作者:寒露凝珠,转载请注明原文链接:https://www.cnblogs.com/china-soldier/p/15050698.html

  • 相关阅读:
    golang 识别redis key在哪个codis的slot上
    QAT SSL加速卡安装及使用
    dereferencing pointer to incomplete type错误的解决办法
    golang topN算法
    golang日志框架zap简洁配置
    golang 读取文件
    Django学习目录
    go练习:循环与函数
    全站搜索实战应用(Lucene.Net+盘古分词)
    (原创)将Datatable数据按照Excel模板格式导出
  • 原文地址:https://www.cnblogs.com/china-soldier/p/15050698.html
Copyright © 2011-2022 走看看