• MySQL SQL语法基础


    从系统架构来看,MySql数据库系统从大到小依次是数据库服务器数据库数据表数据表中行与列

    增删改

    创建数据库

    数据库创建方式
    #方式1:创建数据库
    CREATE DATABASE 数据库名;
    #方式2:创建数据库并指定字符集
    CREATE DATABASE 数据库名 CHARACTER SET 字符集;
    #方式3:判断数据库是否已经存在,不存在则创建数据库(推荐)
    CREATE DATABASE IF NOT EXISTS 数据库名;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    使用数据库

    # 查看当前所有的数据库
    SHOW DATABASES# 有一个s,代表多个数据库
    
    # 查看当前正在使用的数据库
    SELECT DATABASE()# 使用的MySql中一个的全局变量
    
    # 查看指定库下所有的表
    SHOW TABLES FROM 数据库名
    
    # 查看数据库的创建信息
    SHOW CREATE DATABASE 数据库名
    SHOW CREATE DATABASE 数据库名\G
    
    # 使用/切换数据库
    USE 数据库名
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    修改数据库

    # 更改数据库字符集
    ALTER DATABASE 数据库名 CHARACTER SET 字符集
    
    • 1
    • 2

    删除数据库

    # 删除指定数据库
    DROP DATABASE 数据库名
    DROP DATABASE IF EXISTS 数据库名(推荐)
    
    • 1
    • 2
    • 3

    创建表

    前提:
    必须有CREATE TABLE权限

    方式一 直接创建

    CREATE TABLE [IF NOT EXISTS] 表名(
    字段1, 数据类型 [约束条件] [默认值],
    字段2, 数据类型 [约束条件] [默认值],
    字段3, 数据类型 [约束条件] [默认值],
    ……
    [表约束条件]
    );
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    注意:
    1.加上了IF NOT EXISTS,则表示:如果当前数据库中不存在该表则创建数据表,如果存在则不创建数据表
    2.创建时,必须指明:表名、列名、数据类型、长度

    方式二 根据现有的表创建

    # 例:复制employees表,包括数据
    CREATE TABLE employees_copy
    AS
    SELECT *
    FROM employees;
    
    • 1
    • 2
    • 3
    • 4
    • 5

    修改表

    在表中 增删改查 字段

    ALTER TABLE myemp2
    ADD salary DOUBLE(10,2);# 默认添加在末尾(小数点前8位,后2位)
    DESC myemp2;
    
    # 修改一个字段:数据类型、长度、默认值
    ALTER TABLE myemp2
    MODIFY last_name VARCHAR(25) DEFAULT 'Aa';# 更改字符串长度和默认值
    
    # 重命名一个字段
    ALTER TABLE myemp2
    CHANGE salary monthly_salary DOUBLE(10,2);
    
    ALTER TABLE myemp2
    CHANGE email e_number VARCHAR(50);
    
    # 删除一个字段
    ALTER TABLE myemp2
    DROP COLUMN e_number;
    
    # 重命名表
    RENAME TABLE myemp2
    TO myemp3;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    删除表

    # 删除表
    DROP TABLE IF EXISTS myemp2
    
    # 清空表
    TRUNCATE TABLE employees_copy;
    
    • 1
    • 2
    • 3
    • 4
    • 5

    TRUNCATE TABLE和DELETE FROM区别

    相同点:
    都可以实现对表中所有数据的删除,同时保留表结构。

    不同点:
    TRUNCATE TABLE:一旦执行此操作,表数据全部清除。同时,数据是不可以回滚的。
    DELETE FROM:一旦执行此操作,表数据可以全部清除(不带WHERE)。同时,数据是可以实现回滚

    查 SELECT

    SELECT 字段1,字段2,... FROM 表名
    
    • 1
    1. Windows系统中的SQL语句不区分大小写
    2. 字符串用单引号’
    • 列的别名 AS

    1.(alias 别名) 可以省略
    2.列(字段)的别名可以使用""引起来

    SELECT employee_id ID,last_name AS,salary "工资"
    FROM employees;
    
    • 1
    • 2
    • 去除重复行 DISTINCT
    SELECT DISTINCT department_id 
    FROM employees;
    
    • 1
    • 2
    • 空值参与运算

    所有运算符或列值遇到null值,运算的结果都为null

    SELECT employee_id,salary 月工资,salary * (1 + commission_pct) * 12 "年工资",commission_pct
    FROM employees;
    
    • 1
    • 2

    解决方案 IFNULL

    SELECT employee_id,salary 月工资,salary * (1 + IFNULL(commission_pct,0)) * 12 "年工资",commission_pct
    FROM employees;
    
    • 1
    • 2

    注意
    1.MySQL中,null不等于空字符串。一个空字符串的长度是0,而一个空值的长度是空
    2.MySQL中,空值是占用空间的

    • 着重号 ``

    出现名字和sql语言中的关键字重名的现象,用``处理

    SELECT * FROM ORDER;# 这里order表名和ORDER关键字冲突
    SELECT * FROM `order`;#正确
    
    • 1
    • 2
    • 查询常数

    在 SELECT 查询结果中增加一列固定的常数列,该常数列的取值可以指定。

    SELECT '西电',employee_id,last_name
    FROM employees;
    
    • 1
    • 2
    • 显示表中字段详细信息 DESCRIBE / DESC
    DESCRIBE employees;
    DESC departments;
    
    • 1
    • 2
    • 过滤数据 WHERE
    SELECT * 
    FROM employees
    WHERE department_id = 90;#过滤条件
    
    • 1
    • 2
    • 3

    排序和分页

    ORDER BY

    关键字 ORDER BY 默认升序

    升序:ASC
    降序:DESC

    # 将员工信息先按照部门号一级排序,再根据工资二级排序
    SELECT employee_id,department_id,salary
    FROM employees
    ORDER BY department_id DESC,salary ASC;
    
    • 1
    • 2
    • 3
    • 4

    LIMIT

    如果查询结果返回的记录太多,采用分页的方式,每次只返回特定页数的数据。

    关键字 LIMIT
    格式:LIMIT 位置偏移量, 条目数

    注意:
    1.位置偏移量 -1 表示真实位置
    2.LIMIT子句必须放在SELECT语句的最后

    # 取工资大于6000的员工按工资升序排列,数据为第三页
    SELECT employee_id, last_name, salary
    FROM employees
    WHERE salary>6000
    ORDER BY salary ASC
    LIMIT 20,10;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    另外*:关键字OFFSET
    LIMIT 3 OFFSET 4表示获得从第五条记录开始的后面三条记录

    运算符

    除法 /或DIV
    取余 %或MOD

    1.在SQL中,字符串存在隐式转换(字符串尝试转化为数字),如果转换不成功,则为0。如0 = 'a'
    2.运算中存在null时,大多数情况下结果为null(除了安全等于)

    # 在SQL中,+表示加法,不区分数据类型,会将字符串转化为数值(隐式转换)
    SELECT 100 + '1' # 101 Java中结果为1001,相当于字符串的连接
    FROM DUAL;
    
    • 1
    • 2
    • 3

    比较运算符

    特殊:
    1.安全等于 <=> 可以判断null
    2.不等于 != 或 <>

    在SQL中,+表示加法,不区分数据类型,会将字符串转化为数值(隐式转换)

    SELECT 100 + '1' # 101 Java中结果为1001,相当于字符串的连接
    FROM DUAL;
    
    • 1
    • 2

    非符号运算符

    • IS NULL\ IS NOT NULL\ ISNULL 判断空值

    • LEAST \ GREATEST 最小值\最大值

    • BETWEEN A AND B

    • IN \ NOT IN 判断离散值

    • LIKE 模糊查询(筛选)

    另外:
    % 代表不确定个数的字符
    _ 代表一个不确定的字符
    \ 转义字符

    查询第四个字符是_且第五个字符是o的员工
    SELECT last_name
    FROM employees
    WHERE last_name LIKE '___\_o%';
    
    • 1
    • 2
    • 3
    • 4

    逻辑运算符

    运算符作用
    NOT 或 !
    AND 或 &&
    OR 或 ||
    XOR异或
  • 相关阅读:
    第15届蓝桥STEMA测评真题剖析-2023年8月20日Scratch编程中级组
    计算机网络-第6章 应用层(2)
    空间曲线方程和空间曲面方程
    60行从零开始自己动手写FutureTask是什么体验?
    李宏毅机器学习笔记:RNN循环神经网络
    常量左值引用作为形参来接收右值引用实参所带来的问题
    低代码开发平台有什么优势?
    latex,不带行号的algorithm
    Day01-网页结构分析
    基于 dynamic-datasource 实现 DB 多数据源及事物控制、读写分离、负载均衡解决方案
  • 原文地址:https://blog.csdn.net/weixin_47869348/article/details/127335895