美文网首页
MYSQL联动组合查询

MYSQL联动组合查询

作者: dream_seeker | 来源:发表于2020-07-21 11:12 被阅读0次

    1、mysql自增
    可以设置设置auto_increment一个起始值
    ALTER TABLE 表明 AUTO_INCREMENT=180460

    改变自增的步长:
    修改步长:
    SET SESSION auto_increment_increment=2(设置步长的值)////会话步长
    修改步长:
    SET global auto_increment_increment=2(设置步长的值)///全局步长

    2、创建计算字段
    拼接字段
    CONCAT():

    拼接( concatenate) 将值联结到一起构成单个值。 解决办法是把两个列拼接起来。在MySQL的SELECT语句中,可使用CONCAT函数来拼接两个列。

    SELECT CONCAT(student_id,student_name) AS name_id FROM studentinfo;
    
    SELECT CONCAT(student_id,'(',student_name,')') AS name_id FROM studentinfo;
    

    注意:这里使用拼接函数将两个不同的列凭借在了一起,并且新起了一个别名为name_id

    RTrim()

    RTrim()函数去掉值右边的所有空格。通过使用RTrim(),各个 列都进行了整理。

    SELECT CONCAT(student_id,'(',RTRIM(student_name),')') AS name_id FROM studentinfo;
    

    3、加密函数
    name desc exprote
    PASSWORD(str) 函数可以对字符串str进行加密。一般情况下,PASSWORD(str)函数主要是用来给用户的密码加密的。 SELECT PASSWORD('abcd');
    MD5(str) MD5(str)函数可以对字符串str进行加密。MD5(str)函数主要对普通的数据进行加密。
    4、条件判断
    (1)if(a1,a2,a3)如果a1为 TRUE,则返回a2,否则返回a3
    例题:select if(age>30,1,0) from 表名
    (2)if null (v1,v2)如果v1 不为null,返回v1,否则返回v2
    例题:select if null(phonenum,'123') from 表名
    (3)select 列名,case when age>50 then age else 0 end from 表名
    注意:当满足条件age>50时,返回age 否则返回0

    5、三范式
    1NF:列不可再分(尽量细的去拆分每一列)
    2NF:1.一个表必须要有一个主键(这个主键可以由单个列,或者多个列组成)
      2.非主键的列,必须完全依赖于主键,而不是及部分依赖于键
    3NF:在第二范式的基础上,不能存在传递依赖,非主键的列,必须直接依赖

    6、E-R模型
    E:Entry 表示实体,其实就是根据某一个事物的体征,添加描述信息,我们将
    这些描述信息添加在一个表(table)里面,那么这个表就相当于一个实体。
    R:Relationship 关系,在这里其实就是指的表与表之间的关系
    一对一:个人信息与身份证

    7、外键
    constraint SFZ_ID foreign key(外键列) references 另一个表的名字(id)on delete cascade
    添加外键: alter table表名 add constraint SFZ_ID foreign key(外键列) references 另一个表的名字(id)on delete cascade

    删除外键:alter table 表名 drop foreign key 外键名
    8、连结查询
    内联结?
    inner join 表名 on 表名.外键=表名.主键
    select * from students inner join classes on students.clsid=classes.id;

    添加条件

    select * from students inner join classes on students.clsid=classes.id where classes.id > 1;

    为表添加别名

    select s.id,s.name,c.name from students as s inner join classes as c on s.clsid=c.id where c.id > 1;

    外联结?
    左联结
    left join 表名 on 表名.外键=表名.主键
    select s.id,s.name,c.name from students as s left join classes as c on s.clsid=c.id where c.id > 1;

    右联结
    right join 表名 on 表名.外键=表名.主键
    select s.id,s.name,c.name from students as s right join classes as c on s.clsid=c.id where c.id > 1;
    9、子查询和组合查询
    子查询中特定关键字使用

    in 范围
    格式: 主查询 where 条件 in (列子查询)
    select * from students where clsid in(select id from classes);

    any 相当于或条件(只要满足的any中的任意一个条件即可)
    select * from students where clsid>any(select id from classes);
    格式: 主查询 where 条件 (比较运算符) any (列子查询)

    all 相当于and(必须同时满足and括号里面的条件)
    select * from students where clsid!=all(select id from classes);
    格式: 主查询 where 条件 (比较运算符) all (列子查询)

    union组合查询
    UNION:使用UNION连接的查询语句,会将查询到的结果汇总并去重(去除重复的记录)
    select * from students where id > 180506 UNION select * from students where gender=1 order by id desc limit 3;
    =>
    select * from students where id > 180506 or gender=1 order by id desc limit 3;

    UNION ALL:使用UNION连接的查询语句,会将查询到的结果汇总不去重,假如有形同的记录会返回多条
    select * from students where id > 180506 UNION ALL select * from students where gender=1 order by id desc limit 3;

    相关文章

      网友评论

          本文标题:MYSQL联动组合查询

          本文链接:https://www.haomeiwen.com/subject/ojchiftx.html