AI智能
改变未来

MySQL 06 分页查询、函数、数据的增 删 改、库和表的管理、常见的数据类型

分页查询、函数、数据的增 删 改、库和表的管理、常见的数据类型

  • 一、分页查询
  • 二、函数
  • 字符函数
  • 数字函数
  • 日期函数
  • 流程控制函数
  • 三、插入数据
    • 插入一行数据
    • 插入多行记录
  • 四、数据更新
  • 五、数据删除
  • 六、库和表的管理
  • 七、常见的数据类型概述
  • 八、SQL测试常见的数据类型范围
  • 一、分页查询

    语法:
    SELECT 查询的东西
    FROM 表
    【WHERE 条件】
    【GROUP BY 字段】
    【HAVING 条件】
    【ORDER BY 排序的字段】#
    LIMIT 条目起始索引【,条目数】

    特点:
    1.写法:
    写法一:
    LIMIT 条目数
    意思:从第一条开始,显示指定条目数的数据

    写法二:
    LIMIT 起始条目索引,条目数
    意思:从指定的起始索引的条目开始,显示指定条目数的数据

    2.起始索引从0开始

    案例1:查询员工表的中前五行
    SELECT * FROM employees LIMIT 10;

    案例2:查询 员工表 的第11条到第20条
    SELECT * FROM employees LIMIT 10,10;

    案例3:查询员工表的第15条到30条
    SELECT * FROM employees LIMIT 14,16;

    二、函数

    函数类似于java的方法
    分类:
    分组函数:将一组值进行统计,得出一个值 max min avg。。。
    单行函数:将一个值进行处理,得出一个值 length()
    调用语法:select 函数名(实参列表);
    单行函数:字符函数、数学函数、日期函数、流程控制函数

    字符函数

    length 获取字节长度
    unicode:固定字节,一个字母和一个汉字都占2个字节
    gbk:一个字母占一个字节,一个汉字占2个字节
    utf8:一个字母占一个字节,一个汉字占3个字节

    SELECT LENGTH(‘abc张三’);
    SHOW VARIABLES LIKE ‘%char%’;

    concat 拼接字符
    SELECT CONCAT(‘hello’,’,’,last_name) out_put
    FROM employees

    upper 转换成大写,lower 转换成小写
    SELECT UPPER(‘ABC’);SELECT LOWER(‘ABC’);

    案例:将姓转大写,名转小写,然后拼接
    SELECT CONCAT(UPPER(last_name),’ \’,LOWER(first_name)) 姓名FROM employees;

    instr 获取子串第一次出现的索引,索引从1开始,如果找不到返回0
    SELECT INSTR(‘张三丰爱上了三丰的郭襄’,‘杨过’);

    substr截取
    SELECT SUBSTR(‘郭襄爱上了杨过’,6);
    SELECT SUBSTR(‘郭襄爱上了杨过’,1,2);

    lpad左填充、rpad右填充
    SELECT LPAD(‘尹志平爱上了’,5,’*’);

    trim 去前后空格或特殊字符
    SELECT LENGTH(TRIM(’ 小 龙 女 \’)) 美女;
    SELECT TRIM(‘a’ FROM ‘aaaaaaaqqqqqq小qq龙q女qqqqqqqqqqqqqq’) 美女;

    数字函数

    向上取整,返回>=该参数的最小整数
    SELECT CEIL(-1.0);

    向下取整,返回<=该参数的最大整数
    SELECT FLOOR(-1.0);

    四舍五入,先按绝对值四舍五入,然后加正负号
    SELECT ROUND(-1.56);
    SELECT ROUND(1.537,1);

    随机数,返回0-1之间的小数,不包含1
    SELECT RAND();

    返回 50-100 a——b floor(rand()*(b-a+1)+a)
    SELECT CEIL(RAND() * 50+50);#50-100随机向上取整
    SELECT FLOOR(RAND()*51+50);

    截断
    SELECT TRUNCATE(1.99,1);

    日期函数

    获取当前日期
    SELECT NOW();

    获取日期,没有时间
    SELECT CURDATE();

    获取时间,没有日期
    SELECT CURTIME();

    获取日期的指定部分
    SELECT YEAR(NOW());
    SELECT MONTH(NOW());
    SELECT MONTHNAME(NOW());
    SELECT DAY(NOW());
    SELECT CONCAT(YEAR(NOW()),‘年’,MONTH(NOW()),‘月’,DAY(NOW()),‘日’) 日期;

    判断两个日期的差别天数,前者比后者大,返回正数,小返回负数,相等返回0.
    SELECT DATEDIFF(NOW(),‘2022-8-8’);
    SELECT DATEDIFF(‘2017-9-25’,NOW());

    流程控制函数

    1、if函数
    SELECT IF(100>9,‘不错呦’,‘不够大’) 备注;
    2、case语句
    #语法:
    #CASE
    #WHEN 条件1 THEN 显示的值1
    #WHEN 条件2 THEN 显示的值2
    #…
    #ELSE 显示的值n
    #END

    #类似于:
    #IF(条件1){
    #语句1;
    #}ELSE IF(条件2){
    #}ELSE{

    #}

    #案例:
    SELECT salary,
    CASE
    WHEN salary>20000 THEN ‘购买汽车’ #从大到小
    WHEN salary>10000 THEN ‘购买手机’
    WHEN salary>5000 THEN ‘购买pad’
    ELSE ‘购买棒棒糖’
    END (as)购买资格
    FROM employees;

    3、case语句
    语法:
    #CASE 字段或表达式
    #WHEN 值1 THEN 显示的值1
    #WHEN 值2 THEN 显示的值2
    #…
    #ELSE 显示的值n
    #END

    类似于:
    #switch(变量或表达式){
    #CASE 值1 :语句1;break;
    #…
    #DEFAULT:语句n;break;
    #}

    #案例:查询部门和对应的级别
    SELECT department_id,
    CASE department_id
    WHEN 10 THEN ‘A’
    WHEN 20 THEN ‘B’
    WHEN 30 THEN ‘C’
    WHEN 50 THEN ‘D’
    END 级别
    FROM employees;

    三、插入数据

    插入一行数据

    DML语言
    DML:数据操纵语言 insert、update、delete
    一、数据的插入
    语法:
    #INSERT INTO beauty(字段1,字段2,…)
    #VALUES(值1,值2,…);

    特点:
    1、字段和值列表必须一一对应
    2、字符型和日期型必须用单引号引起来
    3、字段的顺序可以和表中字段的顺序不一致
    4、不可以为NULL的字段,必须插入值,比如说主键id;
    可以为NULL的字段,可以不用插入值,使用NULL来代替,或字段名和值都不写
    5、字段和值的个数必须一致
    6、字段列表可以省略,默认所有列 ,而且顺序和表中的列的顺序一致

    方式一:insert into …values…
    案例1:传统的插入
    INSERT INTO beauty(id,NAME,sex,borndate,phone,photo,boyfriend_id)
    VALUES(100,‘赵丽颖’,‘女’,‘1986-1-1’,‘15811111111’,NULL,10);

    案例2:字段的插入顺序和表中的顺序不一致
    INSERT INTO beauty(sex,borndate,phone,id,NAME,photo,boyfriend_id)
    VALUES(‘女’,‘1986-1-1’,‘15811111111’,101,‘小燕子’,NULL,10);

    案例3:不可以为null的字段如何处理
    INSERT INTO beauty(sex,borndate,phone,id,NAME,photo,boyfriend_id)
    VALUES(‘女’,‘1986-1-1’,‘15811111111’,NULL,‘小鸽子’,NULL,10);

    案例4:可以为null的字段的处理
    INSERT INTO beauty(id,NAME,phone)
    VALUES(103,‘紫薇’,‘119’);

    案例5:字段可以省略【可读性较差】
    INSERT INTO beauty
    VALUES(104,‘赵丽蓉’,‘女’,‘1986-1-1’,‘15811111111’,10);

    方式二:insert into…set
    INSERT INTO beauty SET id=105,NAME=‘关雎尔’,phone=‘999’;

    插入多行记录

    方式一:insert into…values
    INSERT INTO beauty (id,NAME,phone,boyfriend_id)
    VALUES(106,‘古力娜扎’,‘119’,1),(107,‘范冰冰’,‘112’,1),(108,‘吉克隽逸’,‘888’,1);

    方式二:insert into…select
    INSERT INTO beauty(NAME,phone)
    SELECT ‘唐艺昕2’,‘999’ UNION
    SELECT ‘李沁2’,‘888’ UNION
    SELECT ‘董洁2’,‘777’

    四、数据更新

    **更新语句 update **
    语法:
    UPDATE 表名 SET 字段名=新值,字段名=新值
    [WHERE 条件];

    案例1:将赵丽蓉更新为 关晓彤
    UPDATE beauty SET NAME=‘关晓彤’
    WHERE NAME=‘赵丽蓉’;

    案例2:将11号的女神,更改为名字是杨紫,生日1998-1-1
    UPDATE beauty SET NAME = ‘杨紫’,borndate=‘1998-1-1’
    WHERE id=11;

    更新多表的数据
    语法:
    UPDATE 表1 别名1,表2 别名2
    SET 字段1=新值,字段2=新值
    WHERE 连接条件
    AND 筛选条件;

    案例:将张无忌的女朋友的电话都更改为88888
    UPDATE beauty b,boys bo
    SET phone=‘88888’
    WHERE b.

    boyfriend_id

    =bo.

    id

    AND bo.

    boyName

    =‘张无忌’

    SELECT * FROM beauty ;
    SELECT * FROM boys;

    五、数据删除

    删除的方式一:
    语法:
    DELETE FROM 表 [WHERE 条件]

    案例1:删除电话号码的长度小于11位的女神信息
    DELETE FROM beauty
    WHERE LENGTH(phone)<11;

    案例2:删除小燕子
    DELETE FROM beauty
    WHERE NAME=‘小燕子’;

    多表级联删除
    DELETE 别名1,别名2 FROM 表1 别名1,表2 别名2
    WHERE 连接条件
    AND 筛选条件

    案例3:将张无忌的女朋友都删除
    DELETE b FROM beauty b,boys bo
    WHERE b.boyfriend_id=bo.id
    AND bo.boyname=‘张无忌’;

    案例4:将黄晓明的女朋友信息和黄晓明都删除
    DELETE b,bo FROM beauty b,boys bo
    WHERE b.

    boyfriend_id

    =bo.

    id

    AND bo.

    boyName

    =‘黄晓明’;

    案例5:将没有男朋友的女神删除
    DELETE b FROM beauty b
    LEFT JOIN boys bo ON b.

    boyfriend_id

    =bo.

    id

    WHERE bo.

    id

    IS NULL

    删除的方式二:
    语法:
    TRUNCATE TABLE 表名

    案例1:删除beauty表的记录
    TRUNCATE TABLE beauty

    二种删除方式的区别【面试题】
    1、TRUNCATE不能加WHERE条件,而DELETE可以加WHERE
    2、TRUNCATE效率较高
    3、TRUNCATE不能删除多表,而DELETE可以
    4、删除带标识列字段的表时,TRUNCATE 删除后再插入,标识列的值从1开始
    DELETE删除后再插入,标识列的值从断点处开始
    5、TRUNCATE删除后,不能回滚(不能加事物);DELETE删除可以回滚
    SELECT * FROM beauty;
    DELETE FROM beauty;

    INSERT INTO beauty(NAME,phone)
    SELECT ‘唐艺昕2’,‘999’ UNION
    SELECT ‘李沁2’,‘888’ UNION
    SELECT ‘董洁2’,‘777’

    六、库和表的管理

    DDL数据定义语言
    关键词:create、alter、drop
    库的操作:创建库(★)、删除库
    表的操作:创建表(★)、修改表、删除表(★)、复制表

    一、库的操作
    SHOW DATABASES;

    1.创建库
    CREATE DATABASE student;
    CREATE DATABASE IF NOT EXISTS student;

    2.删除库
    DROP DATABASE student;
    DROP DATABASE IF EXISTS student;

    二、表的操作
    1.创建表

    语法:
    CREATE TABLE 表名(
    字段名 字段类型【(长度)】 【约束】,
    字段名 字段类型【(长度)】 【约束】,
    字段名 字段类型【(长度)】 【约束】,
    字段名 字段类型【(长度)】 【约束】
    )

    #案例:创建学员信息表
    #学号、姓名、性别、邮箱、生日
    CREATE TABLE stuinfo( stuNo INT,#学号
    stuName VARCHAR(20),#姓名
    gender CHAR(1),#性别
    email VARCHAR(50),#邮箱
    borndate DATETIME #生日
    )
    SHOW TABLES;
    DESC stuinfo;

    2.修改表
    #①修改表名
    ALTER TABLE stuinfo RENAME TO student;
    ALTER TABLE student RENAME stuinfo;
    尖叫提示:to 是可以省略的

    #②修改列名,不加类型 报错,需要加类型
    ALTER TABLE stuinfo CHANGE COLUMN borndate birthday DATETIME;
    ALTER TABLE stuinfo CHANGE COLUMN birthday borndate ; ×

    change
    #③修改列的类型
    ALTER TABLE stuinfo MODIFY COLUMN gender VARCHAR(2);

    #④添加新列
    ALTER TABLE stuinfo ADD COLUMN phone VARCHAR(11);

    #⑤删除列
    ALTER TABLE stuinfo DROP COLUMN phone;

    3.删除表
    DROP TABLE stuinfo;
    DROP TABLE IF EXISTS stuinfo;
    SHOW TABLES;

    4.表的复制
    INSERT INTO stuinfo VALUES(2,‘少杰’,‘男’,’’,NOW());
    SELECT * FROM stuinfo;

    #①仅仅复制表的结构
    CREATE TABLE newTable2 LIKE stuinfo;

    #②复制表的结构+数据
    CREATE TABLE newTable3
    SELECT * FROM stuinfo;

    CREATE TABLE newTable4
    SELECT stuno,stuname
    FROM stuinfo WHERE stuno=1;

    七、常见的数据类型概述

    1、整型

    整数类型 字节 范围
    Tinyint 1 有符号:-128—127 无符号:0~255
    Smallint 2 有符号:-32768—32767 无符号:0~65535
    Mediumint 3 有符号:-8388608—8388607 无符号:0~1677215(很大,不用记住)
    Int、integer 4 有符号:- 2147483648—2147483647 无符号:0~4294967295(很大,不用记住)
    Bigint 8 有符号:-9223372036854775808—9223372036854775807 无符号:0~9223372036854775807*2+1(很大,不用记住)

    1PB = 1024TB
    1TB = 1024 GB
    1GB = 1024 MB
    1MB = 1024 KB
    1KB = 1024 B
    1B = 8 Bit
    1B = 1个字节
    1个字节 = 8Bit
    utf-8 :英语 1个字节 ;中文是占 3个字节

    2、小数

    浮点数类型 字节 范围
    float 4 ±1.75494351E-38~±3.402823466E+38(很大,不用记住)
    double 8 ±2.2250738585072014E-308~±1.7976931348623157E+308(很大,不用记住)
    定点数类型 字节 范围
    DEC(M,D)、DECIMAL(M,D) M+2 最大取值范围与double相同,给定decimal的有效取值范围由M和D决定

    3、位类型

    位类型 字节 范围
    Bit(M) 1~8 Bit(1)~bit(8)

    4、char和varchar类型

    字符串类型 最多字符数 —–
    char(M) M M为0~255之间的整数
    手机 $12 —–

    5、binary和varbinary类型
    说明:类似于char和varchar,不同的是它们包含二进制字符串而不包含非二进制字符串。
    6、Enum类型
    说明:又称为枚举类型,要求插入的值必须属于列表中指定的值之一。
    如果列表成员为1~255,则需要1个字节存储
    如果列表成员为255~65535,则需要2个字节存储
    最多需要65535个成员!
    7、Set类型

    说明:和Enum类型类似,里面可以保存0~64个成员。
    和Enum类型最大的区别是:SET类型一次可以选取多个成员,而Enum只能选一个。
    根据成员个数不同,存储所占的字节也不同。

    成员数 字节数
    1 ~ 8 1
    9 ~ 16 2
    17~24 3
    25~32 4
    33~64 8

    8、时间类型

    项目 Value
    电脑 $1600
    手机 $12
    导管 $1

    9、datetime和timestamp的区别
    (1)Timestamp支持的时间范围较小,取值范围19700101080001——2038年的某个时间
    Datetime的取值范围:1000-01-01 ——9999—12-31
    (2)timestamp和实际时区有关,更能反映实际的日期,而datetime则只能反映出插入时的当地时区
    (3)timestamp的属性受Mysql版本和SQLMode的影响很大

    八、SQL测试常见的数据类型范围

    1、整型
    特点:
    1.根据所占字节或保存的数值范围分类tinyint、smallint、mediumint、int/integer、bigint
    2.默认为有符号整型
    3.如果超过类型的范围,会报警告,插入临界值(最大值或最小值)
    4.如果想设置为无符号整型,则需要加上关键字unsigned
    5.每个整型可以设置显示的宽度,int默认为11.但只能加上zerofill才能有效果而且加上zerofill,默认为无符号整型

    2、浮点型和定点型
    原则:
    ①选择能存储数值的越小类型越好
    ②类型越简单越好
    ①.分类
    浮点型: float(M,D) double(M,D)
    定点型: decimal(M,D)
    ②. D和M 参数
    D表示小数位数,如果不够用0补齐,如果超过则四舍五入
    M表示整数位数+小数位数,整数部分如果超过,则报错,显示为临界值
    M和D 对于浮点型或定点型都可以省略
    但浮点型默认的精度为插入数值的精度,而定点型默认的精度为M=10,D=0
    ③. 定点型和浮点型区别
    定点型的精度表示更高,比较适合处理货币运算

    3、字符型
    char:固定长度的字符,写法 char(M)
    varchar:可变长度的字符,写法 varchar(M)
    text:文本,比较适合存储较大的文本,比如 日记、协议等
    enum
    set
    ①、char(M)和varchar(M):
    M表示的是最多字符个数
    char(M):字符个数可以省略,默认M=1
    varchar(M):字符个数不可以省略

    ②、比较

    # 所占的空间 效率 使用场景
    char 固定的,有点浪费 一般存储字段的值的个数固定情况
    varchar 可变的,根据值的长度 一般存储字段的值的个数变化较大

    4、日期型

    ①.分类:
    date:只保存日期不保存时间 。‘1998-1-1’
    time:只保存时间不保存日期
    year:只保存年
    datetime:日期+时间
    timestamp:日期+时间

    ②.datetime和timestamp的区别

    # 字节 时间范围 是否受时区和版本等影响
    datetime 8 1000~9999 不受
    timestamp 4 1970~2038
    赞(0) 打赏
    未经允许不得转载:爱站程序员基地 » MySQL 06 分页查询、函数、数据的增 删 改、库和表的管理、常见的数据类型