zoukankan      html  css  js  c++  java
  • SQL(一)

     

    一、SQL简介

      SQL(Structured Query Language 结构化查询语句)是一种特定目的程序语言,用于管理关系数据库管理系统(RDBMS),或在关系流数据管理系统(RDSMS)中进行流处理。

           SQL基于关系代数和元组关系演算,包括一个数据定义语言和数据操纵语言。SQL的范围包括数据插入、查询、更新和删除,数据库模式创建和修改,以及数据访问控制。

       同时也是数据库脚本文件的扩展名,SQL对大小写不敏感,他不是数据库。

    二、SQL分类

    可以把 SQL 分为两个部分:

    DML:Data Manipulation Language  数据操作语言

    DDL:Data Definition Language 数据定义语言 

     

    但是 SQL 语言也包含用于更新、插入和删除记录的语法。

    查询和更新指令构成了 SQL 的 DML 部分:

    • SELECT - 从数据库表中获取数据
    • UPDATE - 更新数据库表中的数据
    • DELETE - 从数据库表中删除数据
    • INSERT INTO - 向数据库表中插入数据

    SQL 的数据定义语言 (DDL) 部分使我们有能力创建或删除表格。我们也可以定义索引(键),规定表之间的链接,以及施加表间的约束。

    SQL 中最重要的 DDL 语句:

    • CREATE DATABASE - 创建新数据库
    • ALTER DATABASE - 修改数据库
    • CREATE TABLE - 创建新表
    • ALTER TABLE - 变更(改变)数据库表
    • DROP TABLE - 删除表
    • CREATE INDEX - 创建索引(搜索键)

    三、My Sql  学习

      常见数据排行榜 DB-Engines 2021年统计

    MySQL:开源免费的数据库,小型的数据库,已经被 Oracle 收购了。后来 Sun公司收购了 MySQL,而 Sun 公司又被 Oracle 收购

    Oracle:收费的大型数据库,Oracle 公司的产品。 
    SQL Server:MicroSoft 公司收费的中型的数据库。C#、.net 等语言常使用。
    SQLite: 嵌入式的小型数据库,应用在手机端,如:Android。 

    为什么选择mysql?:免费 功能强大

    3.1 环境搭建:点击此处

    开始学习了~~~

    一、DDL操作数据库 

    1.1 创建数据库

    1. 【强制】库的名称必须控制在 32 个字符以内,相关模块的表名与表名之间尽量提现 join的关系,如 user 表和 user_login 表。

    2. 【强制】库的名称格式:业务系统名称_子系统名,同一模块使用的表名尽量使用统一前缀。

    3. 【强制】一般分库名称命名格式是“库通配名_编号”,编号从“0”开始递增,比如“wenda_001”以时间进行分库的名称格式是“库通配名_时间”

    4. 【强制】创建数据库时必须显式指定字符集,并且字符集只能是 utf8 或者 utf8mb4创建数据库 SQL 举例:Create database db1 default character set utf8;

    -- 创建数据库
    CREATE DATABASE 数据库名;
    -- 判断数据库是否已经存在,不存在则创建数据库 CREATE DATABASE IF NOT EXISTS 数据库名;
    -- 创建数据库并指定字符集 CREATE DATABASE 数据库名 DEFAULT CHARACTER SET 字符集;

     练习:1.判断数据库是否存在 ,不存在创建一个数据库Test_(你的名字字母)  指定字符集为utf-8 

    1.2 注释 

    SQL 中不区分大小写,关键字中认为大写和小写是一样的
    mysql 3种注释 如下图

     1.3 查看数据库

    -- 查看所有的数据库
    show databases;
    
    -- 查看某个数据库的定义信息
    show create database db3;
    show create database db1;
    注:按 tab 键可以自动补全关键字 

    1.4 修改数据库

    -- 修改数据库默认的字符集
    ALTER DATABASE 数据库名 DEFAULT CHARACTER SET 字符集;

    练习:将TestDB_001 数据库字符集修改成utf8mb4

    1.5 删除数据库

    DROP DATABASE 数据库名;

    1.6 使用数据库

    -- 查看正在使用的数据库
    SELECT DATABASE(); -- 使用的一个 mysql 中的全局函数
    
    -- 使用/切换数据库
    USE 数据库名;

    二、DDL操作表结构

    注:前提先使用某个数据库 ,use 数据库名;
     
    2.1 创建表
    CREATE TABLE 表名 (
    字段名 1 字段类型 1,
    字段名 2 字段类型 2
    );

    2.2 MySql常见数据类型

     详细数据类型:参考此处

    如:创建一个student学生表 包含id,name,birthday字段

    create table(
    id
    int, -- 整数 name varchar(20), --字符串 给20个 birthday date -- 日期 最后一个字段可以省略逗号不写 );

    2.3 查看表

    -- 查看某个数据库中的所有表
    SHOW TABLES;
    
    -- 查看表结构
    DESC 表名;
    
    -- 查看创建表的 SQL 语句
    SHOW CREATE TABLE 表名;

    2.4 快速创建一个相同得表结构

    -- 创建一个 s1 的表与 student 结构相同
    create table s1 like student;

    2.5 删除表

    -- 直接删除表
    DROP TABLE 表名;
    -- 判断表是否存在,如果存在则删除表 不存在不删除 DROP TABLE IF EXISTS 表名;

    2.6 修改表结构

    -- 添加表列ADD
    ALTER TABLE 表名 ADD 列名 类型; 

    练习:为学生表添加一个新字段remark,类型为varchar(20)

    -- 修改列类型 MODIFY
    ALTER TABLE 表名 MODIFY 列名 新的类型;

    练习:将学生表得remark字段类型 修改为varchar(100)

    -- 修改列名 CHANGE
    ALTER TABLE 表名 CHANGE 旧列名 新列名 类型;

    练习:将学生表得remark字段 修改为intro varchar(30)

    -- 删除列 DROP
    ALTER TABLE 表名 DROP 列名;

    练习:将学生表得intro字段 删除

    -- 修改表名
    RENAME TABLE 表名 TO 新表名;

    练习:将学生表表名修改为stu

    -- 修改字符集 character set
    ALTER TABLE 表名 character set 字符集;

    练习:将学生表字符集 修改为gbk

    三、DML 表数据

    3.1 添加数据 插入记录

    INSERT INTO 表名 (字段名) VALUES (字段值)
    
    INSERT INTO 表名:表示往哪张表中添加数据
    (字段名 1, 字段名 2, …):要给哪些字段设置值
    VALUES (值 1, 值 2, …):设置具体的值
    -- 插入全部字段
    -- 第一种写法 所有的字段名都写出来
    INSERT INTO 表名 (字段名 1, 字段名 2, 字段名 3…) VALUES (值 1, 值 2, 值 3);
    
    -- 第二种写法 不写字段名 默认全部字段 按顺序一一对应
    INSERT INTO 表名 VALUES (值 1, 值 2, 值 3…); 

      

    -- 插入部分数据 字段名和值 一一对应
    INSERT INTO 表名 (字段名 1, 字段名 2, ...) VALUES (值 1, 值 2, ...);
    注:没有添加数据的字段会使用 NULL 
    练习:向学生表中插入两个学生
     
    3.2 更新数据
    UPDATE 表名 SET 列名=WHERE 条件表达式
    
    UPDATE: 需要更新的表名
    SET: 修改的列值
    WHERE: 符合条件的记录才更新
    你可以同时更新一个或多个字段。
    你可以在 WHERE 子句中指定任何条件。
    -- 不带条件修改数据
    UPDATE 表名 SET 字段名=值; -- 修改所有的行
    -- 带条件修改数据
    UPDATE 表名 SET 字段名=WHERE 字段名=值;

    练习:将所有学生表性别sex修改为女

    练习:将id为2得学生性别修改为男

    练习:将id为3得学生年龄修改为18,address 修改为北京

    3.3 删除表数据

    DELETE FROM 表名  WHERE 条件表达式
    
    -- 如果没有指定 WHERE 子句,MySQL 表中的所有记录将被删除。你可以在 WHERE 子句中指定任何条件
    -- 不带条件删除数据
    DELETE FROM 表名;
    
    -- 带条件删除数据
    DELETE FROM 表名 WHERE 字段名=值;
    
    -- 使用 truncate 删除表中所有记录
    TRUNCATE TABLE 表名;

    注:truncate 和 delete 的区别:truncate 相当于删除表的结构,再创建一张表。

    3.4 查询数据 *

    查询不会对数据库中的数据进行修改.只是一种显示数据的方式
     
    SELECT 列名 FROM 表名 WHERE 条件表达式
    
    1) SELECT 命令可以读取一行或者多行记录。
    2) 你可以使用星号(*)来代替其他字段,SELECT 语句会返回表的所有字段数据
    3) 你可以使用 WHERE 语句来包含任何条件。

    3.4.1 普通查询

    -- 查询表所有行和列的数据,使用*表示所有列
    SELECT * FROM 表名;
    
    -- 查询指定列,查询指定列的数据,多个列之间以逗号分隔
    SELECT 字段名 1, 字段名 2, 字段名 3, ... FROM 表名;

    3.4.2  指定列的别名进行查询

    
    -- 使用关键字,使用别名的好处: 显示的时候使用新的名字,并不修改表的结构。
    
    -- 对列指定别名
    SELECT 字段名 1 AS 别名, 字段名 2 AS 别名... FROM 表名; 
    -- 对列和表同时指定别名
    SELECT 字段名 1 AS 别名, 字段名 2 AS 别名... FROM 表名 AS 表别名;

    注:表使用别名的原因:用于多表查询操作

    3.4.3  清除重复值

    -- 查询指定列并且结果不出现重复数据
    SELECT DISTINCT 字段名 FROM 表名;

    3.4.5 查询结果 参与运算

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

    -- 某列数据和固定值运算
    SELECT 列名 1 + 固定值 FROM 表名;
    
    -- 某列数据和其他列数据参与运算
    SELECT 列名 1 + 列名 2 FROM 表名;

    练习:准备数据:添加数学,英语成绩列,给每条记录添加对应的数学和英语成绩,查询的时候将数学和英语的成绩相加 求出总成绩

    3.4.6 条件查询

    如果没有查询条件,则每次查询所有的行。实际应用中,一般要指定查询的条件。对记录进行过滤。
    -- 条件查询的语法
    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);

    运算符

    select 字段名 from 表名 where 字段名 BETWEEN 最小值 and 最大值 ;
    select 字段名 from 表名 where 字段名 like '%值'

     练习:

    1. 查询 math 分数大于 80 分的学生
    2.查询 english 分数小于或等于 80 分的学生
    3. 查询 age 等于 20 岁的学生
    4.查询 age 不等于 20 岁的学生,注:不等于有两种写法
     
    逻辑运算

     练习:

    1. 查询 age 大于 35 且性别为男的学生(两个条件同时满足)
    2. 查询 age 大于 35 或性别为男的学生(两个条件其中一个满足)
    3. 查询 id 是 1 或 3 或 5 的学生
     
    -- in 关键字,in 里面的每个数据都会作为一次条件,只要满足条件的就会显示
    SELECT 字段名 FROM 表名 WHERE 字段 in (数据 1, 数据 2...);

    练习:

    1.查询 id 是 1 或 3 或 5 的学生 

    2.查询 id 不是 1 或 3 或 5 的学生 

    -- 范围查询
    BETWEEN1 AND2
    -- 表示从值 1 到值 2 范围,包头又包尾
    -- 比如:age BETWEEN 80 AND 100 相当于: age>=80 && age<=100

    练习:

    1.查询 english 成绩大于等于 75,且小于等于 90 的学生
    -- like 关键字
    LIKE 表示模糊查询
    SELECT * FROM 表名 WHERE 字段名 LIKE '通配符字符串';

     练习:

    1.查询姓马的学生

    2.查询姓名中包含'德'字的学生 

    3.查询姓马,且姓名有两个字的学生 

      

  • 相关阅读:
    造轮子杂记2
    Net分布式系统之五:微服务架构
    C#设计模式:责任链模式
    NET Core1.0之CentOS平台开发控制台程序DEMO
    WCF Routing 服务
    设计模式之外观模式
    设计模式之简单工厂模式
    Eclipse快捷键总结
    Spring容器的初始化流程
    IOC容器的创建
  • 原文地址:https://www.cnblogs.com/niunai/p/14524724.html
Copyright © 2011-2022 走看看