zoukankan      html  css  js  c++  java
  • MySQL(三:sql语法、类型、约束)

    一、DQL

    -- 1. +号在sql server中既可以作为运算符,也可以作为字符拼接,而在mysql中只有运算符功能
    
    -- sql server
    select '1'+'2'; -- '12'
    select 1+2; -- 3
    
    --mysql
    SELECT '1'+'2'; -- 3
    SELECT NULL+1; -- NULL
    SELECT 'a'+2;   -- 2
    SELECT CONCAT(1,2);      --12
    SELECT CONCAT('1','2');   --12

    -- 2. 安全等于<=>可读性差,感觉没什么用
    SELECT 1 <=> 2 -- 0

    SELECT NULL <=> NULL -- 1

    SELECT NULL IS NULL -- 1
     
    -- 显示当前字符集
    SHOW VARIABLES LIKE '%char%';
    
    SELECT LENGTH('窃格瓦拉ha') -- 14,因为当前是utf8,中文3字节,英文1字节。gbk中文2字节,英文1字节
    USE myemployees;
    -- 字符函数
    
    -- LENGTH
    SHOW VARIABLES LIKE '%char%';-- 显示当前字符集
    SELECT LENGTH('窃格瓦拉ha') -- 14,因为当前是utf8,中文3字节,英文1字节。gbk中文2字节,英文1字节
    
    -- SUBSTR 截取都是指字符长度,除了LENGTH是字节长度
    SELECT SUBSTR('ABC',2) -- 'BC',因为SQL语言索引从1开始
    SELECT SUBSTR('ABC',2,1) -- 'B'
    
    -- INSTR 返回字符首次索引,找不到返回0
    SELECT INSTR('ABCBCA','B') -- 2
    
    -- TRIM 去前后,不去中间
    SELECT TRIM(' 窃格瓦拉 ') -- '窃格瓦拉'
    
    -- LPAD 左填充,字符长度不够10,左侧填充A,右填充RPAD
    SELECT LPAD('ABC',10,'A')
    
    -- REPLACE
    SELECT REPLACE('ABC','A','E') -- 'EBC'
    
    -- 数学函数
    
    -- ROUND 四舍五入
    SELECT ROUND(1.97); -- 2
    SELECT ROUND(-1.97); -- 2
    SELECT ROUND(1.97,1); -- 2.0 第二个参数保留几位小数
    
    
    #CEIL 向上取整,返回>=该参数的最小整数
    SELECT CEIL(1.97); -- 2
    
    #FLOOR 向下取整,返回<=该参数的最小整数
    SELECT FLOOR(1.97) -- 1
    
    -- 截取 第二个参数:截取到小数点后第几位
    SELECT TRUNCATE(1.2334,3); -- 1.233
    SELECT TRUNCATE('2313.12345',2); -- 2313.12
    
    -- 取余 a-a/b*b
    SELECT MOD(10,-3); -- 1
    
    -- 日期函数
    SELECT NOW(); -- 当前服务器日期
    SELECT CURDATE(); -- 当前服务器日期,不包含时间
    SELECT CURTIME(); -- 当前服务器日期,不包含日期
    SELECT YEAR(NOW()); -- 当前年
    SELECT MONTH(NOW()) -- 当前月
    SELECT MONTHNAME(NOW()) -- 当前月(英文)
    SELECT STR_TO_DATE('26-4-2020','%d-%m-%Y') -- 2020-04-26
    SELECT DATE_FORMAT(NOW(),'%Y年%m月%d日') -- 2020年04月26日
    
    -- if函数
    SELECT IF(10<5,'true','false'); -- false
    
    -- case函数 相当于switch case
    -- case -- switch
    -- when -- case
    -- then -- :
    -- else -- default
    -- end
    SELECT salary AS 原始工资,department_id,
    CASE department_id
    WHEN 90 THEN salary*2
    WHEN 110 THEN salary*3
    ELSE salary
    END AS 新工资
    FROM employees
    -- 上面这种类似swith case 多用于等值判断
    
    -- 跟上面结果一样,但是这样写不规范,等值判断用上面的写法
    SELECT salary AS 原始工资,department_id,
    CASE
    WHEN department_id=90 THEN salary*2
    WHEN department_id=110 THEN salary*3
    ELSE salary
    END AS 新工资
    FROM employees
    
    -- 下面这种类似if else 多用于区间或条件表达式判断
    SELECT salary AS 原始工资,department_id,
    CASE
    WHEN salary>13000 THEN salary*2
    WHEN salary>10000 THEN salary*3
    ELSE salary
    END AS 新工资
    FROM employees
    
    -- 分组函数 常用语统计,又称为聚合函数或统计函数或组函数
    -- sum这些
    
    -- 
    SELECT first_name
    FROM employees
    GROUP BY LENGTH(first_name)>3
    
    -- any/some
    SELECT *
    FROM employees
    WHERE salary>SOME(SELECT salary FROM employees WHERE first_name='Steven')
    
    -- 创建数据库
    CREATE DATABASE IF NOT EXISTS test2;
    
    -- 删除数据库
    DROP DATABASE IF EXISTS test2;
    
    -- 创建表
    USE test2;
    CREATE TABLE IF NOT EXISTS book
    (
     id INT,#编号
     bName VARCHAR(20),#图书名
     price DOUBLE,#价格
     authorId INT,#作者
     publishData DATETIME#出版日期
    );
    DESC book;
    
    -- 修改表
    ALTER TABLE book CHANGE COLUMN publishData pubDta DATETIME;-- 修改列名
    
    ALTER TABLE book MODIFY COLUMN pubDta TIMESTAMP;-- 修改列类型
    
    ALTER TABLE book ADD COLUMN product VARCHAR(20);-- 添加列
    
    ALTER TABLE book DROP COLUMN product;-- 删除列
    
    ALTER TABLE book2 RENAME TO book;-- 修改表名
    
    -- 删除表
    SHOW TABLES;-- 显示当前库下所有的表
    DROP TABLE IF EXISTS book;-- 删除表
    
    -- 复制表
    CREATE TABLE copy LIKE book;-- 复制表结构
    DESC copy;
    
    CREATE TABLE copy2-- 复制表结构与数据
    SELECT *FROM book;
    DESC copy2;
    #常见数据类型
    /*
    数值型:
        整型:tinyint,smallint,mediumint,int/integer,bigint
        小数:
            定点数:
            浮点数:
    字符型:
        较短的文本:char,varchar
        较长的文本:text,blob(较长的二进制数据)
    日期型:
    */
    #整型:
    /*
    tinyint 1字节 8位
    smallint 2字节
    mediumint 3字节
    int/integer 4字节
    bigint 8字节
    */
    CREATE TABLE tabint(
        tab1 INT,-- 默认有符号,范围可负值
        tab2 INT UNSIGNED -- 有符号,范围最低0无负值
    )
    -- 数值型长度表示宽度,不是长度,不足以0补齐
    -- tab1 INT(7) zerofill,如果指定宽度有符号失效
    
    /*
    小数
    定点数:dec(m,d)/decimal(m,d) 长度比较大,精度要求高用decimal
    浮点数:float(m,d) 4字节,double(m,d) 8字节
    */
    CREATE TABLE tabfloat(
        f1 FLOAT(5,2),-- 2表示小数点后2位,超过四舍五入进1
        f2 DOUBLE(5,2),
        f3 DECIMAL(5,2)
    )
    INSERT INTO tabfloat VALUES(1234.5,1234.5,1234.5);
    SELECT *FROM tabfloat;
    -- 上面会报警告,因为2指定小数位2位,插入的数据1234已经有4位,一共就6位,超过规定的5位
    -- 所以5表示的整数位与小数位的和不能超过5,所以这条插入默认是999.99,整数位3+小数2都以最高数9填充
    
    /*
    字符型
    较短的文本:char,varchar
    较长的文本:text,blob(较长的二进制数据)
    char(m) m表示字符数,并不是字节数,比如a表示一个字符
    char(10) 固定字符,创建的时候会开10个字符空间
    varchar(10) 可变字符,根据数据开空间,最大10,比如插入“中国”,只会开2个字符空间
    char 耗空间,但效率高。比如性别,要么是男,要么是女。所以用char不要用varchar
    varchar 省空间,但效率低
    
    enum类型
    */
    CREATE TABLE tabchar(
        c ENUM('a','b','c','d')
    );
    INSERT INTO tabchar VALUES('a');
    INSERT INTO tabchar VALUES('b');
    INSERT INTO tabchar VALUES('c');
    INSERT INTO tabchar VALUES('m'); -- 这个会报错,插入不成功,因为m不在枚举范围
    INSERT INTO tabchar VALUES('d');
    INSERT INTO tabchar VALUES('A'); -- 这个不会报错,因为不区分大小写
    
    /*
    set类型
    插入集合
    */
    CREATE TABLE tabset(
        c SET('a','b','c','d')
    );
    INSERT INTO tabset VALUES('a,b,c');
    
    /*
    binary,varbinary用于保存较小的二进制数据
    blob(较长的二进制数据)
    */
    
    /*
    日期类型,必须用单引号
    date:只有日期,没有时间:
    datetime:有日期也有时间 8字节
    timestamp:有日期也有时间 4字节,时区用它
    time:只有时间,没有日期
    */
    CREATE TABLE tabdate(
        t1 DATETIME,
        t2 TIMESTAMP
    );
    INSERT INTO tabdate VALUES(NOW(),NOW());
    SELECT *FROM tabdate
    
    SHOW VARIABLES LIKE '%time_zone%';-- 查看当前数据库时区
    SET time_zone='+9:00';-- 更改当前数据库时区
    -- 更改时区之后TIMESTAMP字段会根据时区变化,DATETIME不会
    -- 所以如果有时区区分用TIMESTAMP
  • 相关阅读:
    pip 安装
    「csp模拟」模拟测试15
    某些博客的优化
    晚间测试6
    「csp模拟」模拟测试15
    「csp模拟」模拟测试14
    线段树维护单调栈
    晚间测试 2
    晚间测试 1
    晚间测试4
  • 原文地址:https://www.cnblogs.com/BOSET/p/12799526.html
Copyright © 2011-2022 走看看